Bash / Linux 权限被拒绝为 SUDO
Bash / Linux Permissions denied as SUDO
我正在创建一个小的 bash 脚本来自动执行一些简单的任务来处理我的 docker 容器。我的命令之一是清除日志,但这无法响应“权限被拒绝”。
问题是我正在使用 sudo
。
if [ $CLEAR_OPT == true ]
then
DOCKER_LOG_PATH=$(docker inspect $DOCKER_ID --format='{{.LogPath}}')
sudo :> $DOCKER_LOG_PATH;
exit 0
fi
这个错误。
但是下面的 linux 命令序列不会出错:
sudo -s
:> /var/lib/docker/containers/path/path-json.log
我在没有使用 sudo -s
的情况下进行了测试,它仍然无法在 linux 终端中工作。
有什么我遗漏的吗?我想在执行 sudo
时它会 运行 作为 root 用户的命令?
你的“工作”示例的第二行在一个新的 shell 中执行,它已经 运行 具有 root 权限,因为 sudo -s
启动了一个新的 shell .
但是 shell 脚本中的 :>
将由 shell 而不是 sudo
执行,因此它将 运行 与原来的(可能较低)特权。
解决方法是使用 sudo 将 echo
之类的输出通过管道传输到命令:echo | sudo tee "$DOCKER_LOG_PATH"
.
一个更简单和更明确的解决方案是使用明确构建的命令来 t运行 分类文件:sudo truncate -s0 "$DOCKER_LOG_PATH"
.
我正在创建一个小的 bash 脚本来自动执行一些简单的任务来处理我的 docker 容器。我的命令之一是清除日志,但这无法响应“权限被拒绝”。
问题是我正在使用 sudo
。
if [ $CLEAR_OPT == true ]
then
DOCKER_LOG_PATH=$(docker inspect $DOCKER_ID --format='{{.LogPath}}')
sudo :> $DOCKER_LOG_PATH;
exit 0
fi
这个错误。
但是下面的 linux 命令序列不会出错:
sudo -s
:> /var/lib/docker/containers/path/path-json.log
我在没有使用 sudo -s
的情况下进行了测试,它仍然无法在 linux 终端中工作。
有什么我遗漏的吗?我想在执行 sudo
时它会 运行 作为 root 用户的命令?
你的“工作”示例的第二行在一个新的 shell 中执行,它已经 运行 具有 root 权限,因为 sudo -s
启动了一个新的 shell .
但是 shell 脚本中的 :>
将由 shell 而不是 sudo
执行,因此它将 运行 与原来的(可能较低)特权。
解决方法是使用 sudo 将 echo
之类的输出通过管道传输到命令:echo | sudo tee "$DOCKER_LOG_PATH"
.
一个更简单和更明确的解决方案是使用明确构建的命令来 t运行 分类文件:sudo truncate -s0 "$DOCKER_LOG_PATH"
.