Bash / Linux:权限被拒绝,需要使用SUDO。

13 浏览
0 Comments

Bash / Linux:权限被拒绝,需要使用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

我尝试在Linux终端中不使用sudo -s,但仍然无法正常工作。

我错过了什么吗?我以为使用sudo时会以root用户身份运行命令?

0
0 Comments

问题出现的原因是在shell脚本中使用了:>操作符,这个操作符会被shell而不是sudo执行,所以它会以原本的权限(可能是较低的权限)执行。

解决方法有两种:

1. 使用echo将输出通过管道传递给sudo的命令:echo | sudo tee "$DOCKER_LOG_PATH"

2. 更简单和明确的解决方法是使用一个专门用于截断文件的命令:sudo truncate -s0 "$DOCKER_LOG_PATH"

这样就可以避免权限被拒绝的问题了。

0