最近,一位同事要求我使用chmod
字母而不是数字。除了明显的可读性优势之外,还有什么特别的理由使用字母而不是数字吗?
答案1
与八进制表示法相比,符号chmod
表示法更加细粒度,允许修改特定模式位,同时保持其他模式位不变。
符号表示法由三个部分组成:
chmod [references][operator][modes] file
references
由字母 的组合组成,ugoa
指定file
将修改哪个用户的访问权限:拥有该文件的用户 ( u
)、文件组中的其他用户 ( g
)、不在文件组中的其他用户 ( o
) 或所有用户( a
)。如果references
省略该组件,则默认为所有用户,但仅修改允许的权限umask
。
导致+
operator
指定的文件模式位被添加到每个文件的现有文件模式位中;-
导致它们被移除;并=
导致添加它们并删除未指定的位,除非setuid
明确setgid
指定,否则为目录设置的位除外。
mode
由字母 的组合组成,rwxXst
分别对应读(r
)、写(w
)、执行(或搜索目录)(x
),仅当文件是目录或已具有某些用户的执行权限时才执行/搜索(X
),setuid
或setgid
(取决于指定的引用)( s
) 和限制删除标志或粘滞位 ( t
)。或者, 可以mode
由字母 之一组成ugo
,在这种情况下, 对应mode
于当前授予所有者 ( u
)、文件组成员 ( g
) 的权限或上述任一类别中的用户的权限 ( o
)。
例子
假设设置的权限file
是0764/-rwxrw-r--
删除不在文件组中的其他用户的权限:
八进制:
chmod 760 file
请注意,使用八进制表示法时,必须重复保持不变的现有权限。
象征性:
chmod o-rwx file
使用符号表示法,现有的文件权限并不重要。
放setuid
:
八进制:
chmod 4764 file
象征性:
chmod u+s file
放setgid
:
- 八进制:
chmod 2764 file
- 象征性的
chmod g+s file
答案2
使用这些字母可以打开和关闭各个位,而无需更改其他位。
假设我有以下目录:
drwxrwsr-x 6 f261-01a g261-01a 4096 Sep 12 17:51 /home/teams/261/f261-01a
如果我想关闭其他人的读取权限并且我想使用数字,我可能很快就会这样做chmod 751
。只不过我刚刚关闭了目录上的 setgid 位。哎呀。
但是,如果我使用chmod o-r
,我只会关闭我想要的读取位,并且目录上的 setgid 位保持设置状态。
如果您想在文件或目录上打开 setuid、setgid 或粘性位,它也很有用。特别是如果你很少这样做,你就很难记住第四个八位位组中的哪个位。
所以,这取决于你在做什么。当我只是设置权限并且不关心从什么开始时,我仍然更喜欢使用数字。但如果您要切换各个位,则字母表示法要容易得多。