Bash / Linux权限被拒绝为SUDO [重复]

Posted

技术标签:

【中文标题】Bash / Linux权限被拒绝为SUDO [重复]【英文标题】:Bash / Linux Permissions denied as SUDO [duplicate] 【发布时间】:2021-12-11 00:28:57 【问题描述】:

我正在创建一个小型 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 用户身份运行命令?

【问题讨论】:

你是如何运行你的脚本的? 简单 bash chmod a+x script.sh ./script.sh --clear-logs 试试sudo bash script.sh --clear-logs 【参考方案1】:

“工作”示例的第二行在已经以 root 权限运行的新 shell 中执行,因为 sudo -s 启动了一个新 shell。

但是你的shell脚本中的:>将由shell而不是sudo执行,所以它将以原始(可能较低)权限运行。

解决方法是使用 sudo 将 echo 之类的输出通过管道传送到命令:echo | sudo tee "$DOCKER_LOG_PATH"

更简单、更明确的解决方案是使用明确构建的用于截断文件的命令:sudo truncate -s0 "$DOCKER_LOG_PATH"

【讨论】:

以上是关于Bash / Linux权限被拒绝为SUDO [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Linux find 命令权限被拒绝

在 Mac 上设置 gvm 时权限被拒绝

听 EACCES:Windows 中的权限被拒绝

即使使用 sudo,权限也被拒绝 [重复]

Emscripten“权限被拒绝”,即使我 sudo enmake

Azure CLI aks install cli 权限被拒绝并且 sudo 不起作用