Answers:
我可以想到使用八进制代码有两个优点,但这两个优点都不大:
chmod
在Perl或C中使用八进制。有时,真正简单的实用程序将无法处理“友好”版本。特别是在非GNU用户区中。
此外,一些公用程序吐出八进制。例如,如果您umask
查看当前的umask是什么,它将以八进制吐出(尽管在bash中umask -S
是象征性的)。
简而言之,我想说的是,首选它们的唯一原因是键入更少的字符,但是即使您选择不使用它们,您也应该知道它们的映射方式,以便在运行时可以找出一个八进制代码变成只有八进制的东西之一。但是您不需要立即知道5映射到rx
,只需要弄清楚即可。
猜猜我使用八进制已经太久了。
7是rwx(执行任何操作),5是rx(必须读取以执行它),6是wr(您需要修改的任何数据文件),4是r(我们让您看一下),以及0是-(对不起,这里什么也看不到)。命令是我,我们,每个人。这些是基本的组合。
755我可以更改并运行它,其他所有人都可以运行它。
644我可以更改它,其他所有人都可以阅读。
444只供所有人阅读,我们已经遍历这里。
500我可以执行它,不想更改它,其他所有人都可以执行。
对我而言,简而言之。9个字符和一个文件规范,然后继续。
我从来没有真正喜欢过八进制表示法,我一直都喜欢直接使用八进制表示rwxr-xr-x
法,因为它对我来说似乎更简单。但是,从我收集的八进制表示中可以发现,实际上可以使我们更容易记住(我不知道它是如何工作的)。
我看到八进制带来的唯一可能的好处是缺乏歧义。这8个不同的权限位配置由一个唯一的数字表示,我相信这可以帮助某些人意外地将其放置在一个w
不应有的位置。
不过不幸的是,我已经记住了这张桌子:
# r w x
0 0 0 0
1 0 0 1
2 0 1 0
3 0 1 1
4 1 0 0
5 1 0 1
6 1 1 0
7 1 1 1
/tmp
,包括粘着位)发生在PDP中的12位,一个方便的尺寸,特别是PDP-8。如果使用十六进制,则每个十六进制数字一个权限集的自然映射将需要一个16位+的字机器,而并不是所有PDP都需要。这也将浪费3位或要求他们发明这些位的用法,这可能会使复杂的Unix权限无实际好处。
请注意,八进制模式可能会在某些系统上删除setuid和setgid位。
Fedora的16:
$ mkdir dir
$ chmod 2775 dir
$ stat -c %a dir
2775
$ chmod 770 dir
$ stat -c %a dir
2770
(2
已保存)
FreeBSD 9:
$ mkdir dir
$ chmod 2775 dir
$ stat -f %Mp%Lp dir
2775
$ chmod 770 dir
$ stat -f %Mp%Lp dir
0770
(2
成为0
)
如果你想改变一个文件或目录的权限,它可以更好的只是指定要变化(例如位chmod o= dir
或chmod o-rwx dir
在上面的例子)。
历史解释了八进制模式存在的原因,但我认为功能是助记符形式存在的原因。而且,关于仅使用八进制模式的其他工具的所有观点都是完全正确的,我认为您必须学习并了解它们。不过,我发现保守的管理员看不到助记符形式的真正用途。
八进制形式,尤其是在递归使用时,往往会迫使管理员执行愚蠢的事情。或更确切地说,过失会导致它变得愚蠢。只要您在某个文件夹中运行了很多文本文件并x
设置了位,就可以证明自己。
为什么有人会这样设置x
?因为除非您对模式使用助记符形式,否则很难做到这一点。考虑到您想重置权限,/var/www
并且您没有运行任何旧式CGI,因此x
应删除该位。但是,该x
位在目录上还有其他用途。因此,您最终会做一些事情(如root
):
chmod -R 666 /var/www
find /var/www -type d -exec chmod 777 {} \;
但是,如果您使用助记符形式,则可以给它一个“配方”:
chmod -R a=rwX /var/www
这是chmod -R ugo=rwX /var/www
(实现相同但不同的路径:)的简称chmod -R a-x,a+rwX /var/www
。
但是还有另外一些琐碎的事情,八进制模式无法实现。您不能使用八进制形式单独调整user
或group
或other
遮罩。
简而言之:这就像比较手术刀(助记符)和锋利的菜刀(八进制)……但是由于其他原因,您仍然必须知道八进制模式位:)
我认为八进制模式仍是首选的原因不是助记符形式涉及更多键入,而是过于保守的管理员。是的,2013年打电话来,那些过于保守的管理员仍然存在,并且会在这里停留一段时间。
它非常适合umask设置,通常以八进制写法(in pam
或fstab
)给出。
chmod
在Perl或C需要使用八进制表示是不是一个真正的优势,看到在第一位置已经存在的表示。