为什么要使用“ chmod 644”而不是“ chmod u = rw,go = r,…”?


38

我从事* nix已有几年了,而我不习惯的事情之一就是代码中的八进制权限。有一些其他原因,而不是线长喜欢chmod 644 ...chmod u=rw,go=r ...

PS:我不是在寻找八进制权限的解释。我知道它们是如何工作的,并且在手册中对此进行了很好的解释。我在问为什么八进制似乎比人们更容易理解的形式更受青睐。

Answers:


40

我可以想到使用八进制代码有两个优点,但这两个优点都不大:

  1. 它们更短,更容易键入。
  2. 有些事情只能理解它们,而且如果您经常使用它们,那么当您碰巧碰到它们时,就不会挠头(或运行文档)。例如,您必须chmod在Perl或C中使用八进制。

有时,真正简单的实用程序将无法处理“友好”版本。特别是在非GNU用户区中。

此外,一些公用程序吐出八进制。例如,如果您umask查看当前的umask是什么,它将以八进制吐出(尽管在bash中umask -S是象征性的)。

简而言之,我想说的是,首选它们的唯一原因是键入更少的字符,但是即使您选择不使用它们,您也应该知道它们的映射方式,以便在运行时可以找出一个八进制代码变成只有八进制的东西之一。但是您不需要立即知道5映射到rx,只需要弄清楚即可。


1
话说chmod在Perl或C需要使用八进制表示是不是一个真正的优势,看到在第一位置已经存在的表示。
n0pe

@MaxMackie:使用它们对您来说是一个优势。我会澄清。
derobert

18

猜猜我使用八进制已经太久了。

7是rwx(执行任何操作),5是rx(必须读取以执行它),6是wr(您需要修改的任何数据文件),4是r(我们让您看一下),以及0是-(对不起,这里什么也看不到)。命令是我,我们,每个人。这些是基本的组合。

755我可以更改并运行它,其他所有人都可以运行它。

644我可以更改它,其他所有人都可以阅读。

444只供所有人阅读,我们已经遍历这里。

500我可以执行它,不想更改它,其他所有人都可以执行。

对我而言,简而言之。9个字符和一个文件规范,然后继续。


好吧,八进制(基数8),而不是十六进制(基数16)。
derobert

是的,那个,一半十六进制。<咧嘴>
Fiasco Labs

同样在这里,我发现八进制比文本版本更易于阅读……
Brian Knoblauch

13

我从来没有真正喜欢过八进制表示法,我一直都喜欢直接使用八进制表示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

8
我了解到,对于每组3使用二进制文件,因此rw -------将是(110)(000)(000),即(6)(0)(0)。rwxr-xr-x为(111)(101)(101),因此(7)(5)(5)。
罗布

4
初级的八进制表示存在的原因是,因为这是原始的Unix许可系统是如何被编程,从C 4八进制数字(记住专用的,如1777 /tmp,包括粘着位)发生在PDP中的12位,一个方便的尺寸,特别是PDP-8。如果使用十六进制,则每个十六进制数字一个权限集的自然映射将需要一个16位+的字机器,而并不是所有PDP都需要。这也将浪费3位或要求他们发明这些位的用法,这可能会使复杂的Unix权限无实际好处。
沃伦·杨

⁺¹去@Rob btw。事实上,在这之后从二进制表示法计算实际数量是一个基本的组合学,而你甚至不需要记住大约有“八”,因为最大数量(即111B)将不超过7
高新天使

该表非常清楚。那很棒!!!
Little Roys

6

我认为原因再次是-历史。首先,八进制值是唯一的值。象征性的后来出现。

我更喜欢象征性的。特别是如果您确实想更改现有值而不接触其他部分。

就像chmod -R u=rwx,g-w+X,o=-八进制那样...


3

请注意,八进制模式可能会在某些系统上删除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= dirchmod o-rwx dir在上面的例子)。


2

历史解释了八进制模式存在的原因,但我认为功能是助记符形式存在的原因。而且,关于仅使用八进制模式的其他工具的所有观点都是完全正确的,我认为您必须学习并了解它们。不过,我发现保守的管理员看不到助记符形式的真正用途。

八进制形式,尤其是在递归使用时,往往会迫使管理员执行愚蠢的事情。或更确切地说,过失会导致它变得愚蠢。只要您在某个文件夹中运行了很多文本文件并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

但是还有另外一些琐碎的事情,八进制模式无法实现。您不能使用八进制形式单独调整usergroupother遮罩。

简而言之:这就像比较手术刀(助记符)和锋利的菜刀(八进制)……但是由于其他原因,您仍然必须知道八进制模式位:)

我认为八进制模式仍是首选的原因不是助记符形式涉及更多键入,而是过于保守的管理员。是的,2013年打电话来,那些过于保守的管理员仍然存在,并且会在这里停留一段时间。


0

当您必须始终修改文件的权限,您会喜欢3个字符。很多时候,我使用+-版本来更改权限。

例如,我在apache文件夹中创建了一个新的PHP,Python或其他脚本。 chmod a+x我要做的就是可以运行它。我将其读取为“全部加执行”。现在我知道它可以正常工作,我只需要3个字符。

其他时候我会自动使用644和755。我只是认为它644意味着文件,755意味着脚本。


0

它非常适合umask设置,通常以八进制写法(in pamfstab)给出。


0

我建议一个重要的原因是八进制表示形式与您所看到的内容紧密匹配ls -l(或者更确切地说,当您在八进制和二进制形式之间进行心理转换时,八进制表示形式也是如此)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.