检查并更改特定文件夹的权限

检查并更改特定文件夹的权限

我正在尝试在 shell 脚本中检查和更改文件夹的权限。但是,即使已经更改,它也想更改权限。

if [ "$(stat -c '%s' /usr/local/src)" == "755" ]; 
then  
echo "Approved!"
else
echo "Wait please, we're changing the permissions"
sudo chmod -R 755 /usr/local/src
fi

错误:

Wait please, we're changing the permissions
sudo: unable to resolve host john
[sudo] password for john: 
sudo: unable to resolve host john

我确实输入了正确的密码。我从来没有得到过Approved!,为什么?

答案1

我不知道为什么它有效,但我更改'%s''%a'它解决了我的问题:)

答案2

你需要意识到你在做什么。

man stat

除其他外,还生成格式序列:

  The valid format sequences for files (without --file-system):

   %a     access rights in octal

   %A     access rights in human readable form

   (...)

   %s     total size, in bytes

正如你所看到的,%s是尺寸。作为/usr/local/src目录,大小为4096.您要寻找的是访问权限,因此要么%a要么%A

输出相应地是,

$ stat -c '%a' /usr/local/src/
2775

或者如果第一个八位字节是0;则仅 3 位数字和

$ stat -c '%A' /usr/local/src/
drwxrwsr-x

在您的脚本中,这一行:

if [ "$(stat -c '%s' /usr/local/src)" == "755" ]; 

将替换的输出"$(stat -c '%s' /usr/local/src)"与字符串进行比较"755"。调试此问题的一个简单方法是单独运行左侧并检查结果。

$ stat -c '%s' /usr/local/src/
4096

正如您所看到的,这不是一个可以代表访问权限的结果,尽管它的格式相似(4 位数字)。但不能将权限设置为9,因为它们是八进制的。而八进制表示只有8个代表数字,即0-7。现在是检查我在开头介绍的man命令页面的时刻。stat

现在应该很容易弄清楚如何修改你的脚本了。

相关内容