我创建了一个简短的 bash 脚本来运行某个程序 10 次并将输出保存到文件中。在设置可执行权限时,我认为最好删除写入权限,这样脚本就无法在没有 sudo/root 访问权限的情况下进行更改。但我得到的结果是:
use@ubuntu:~/some/folder$ sudo chmod -w Run_SIM.sh
chmod: Run_SIM.sh: new permissions are r-xrwxr-x, not r-xr-xr-x
为什么?
答案1
简而言之,因为当您没有指定要更改的内容时,您正在删除用户的权限。您可以指定为哪些用户u
、g
组o
设置权限:
$ ls -l bar
-rwxrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar
$ chmod u-w bar
$ ls -l bar
-r-xrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar
$ chmod g-w bar
$ ls -l bar
-r-xr-xrwx 1 vidarlo users 0 Nov 11 10:52 bar
$ chmod o-w bar
$ ls -l bar
-r-xr-xr-x 1 vidarlo users 0 Nov 11 10:52 bar
权限前面的 u、g、o 表示要更改哪些权限字段 - 针对用户、组还是其他。
此外您还有特殊的a
ll:
$ chmod a+w bar
$ ls -l bar
-rwxrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar
许多人常用的简写是八进制权限,由三位数字组成,0-7。第一位数字代表用户,第二位代表组,第三位代表其他。
在八进制系统中,1 表示预期,2 表示写入,4 表示读取。将所需的模式加在一起,因此读取和执行为 5,只读为 4。要使文件对所有人为读取 + 执行,对所有者为写入(八进制),您需要执行chmod 755 filename
。模式 740 表示所有者为全部,组为读取,其他为无。
八进制模式的好处是,你可以一次设置所有模式,因此不存在隐剩下的惊喜。
要保留对 root 脚本的编辑,您必须先使用 将文件所有者设置为 root,sudo chown root:root filename
然后sudo chmod g-w,o-w filename
- 或使用八进制sudo chmod 755 filename
如果你转到第 301 行源代码您将看到负责打印此警告消息的源代码。基本上,它计算什么幼稚的用户可能有意为之,并打印出差异。这是一个我以前不知道的有趣的行为 :)