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 用户身份运行命令?
【问题讨论】:
你是如何运行你的脚本的? 简单 bashchmod 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章