win*_*e99 5 filesystems permissions inode files
我知道有 12 个权限位,其中每个用户、组和其他人有 3 组 3 位,分别是 RWX。RW 是读和写,但 X 是search
用于目录和execute
文件。
这是我没有得到的:
剩下的 3 个模式位是什么?它们都存储在 inode 中吗?
我知道文件目录本身也被认为是一个文件,因为在 UNIX 中所有的东西都是文件(这是真的吗?),但是由于 UNIX 系统使用 ACL 来表示文件系统,那么文件系统是一个文件名-inode_number 的列表对。文件目录在哪里存储它自己的 inode 号和文件名?
stat /bin/su
在一个系统上显示:
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Run Code Online (Sandbox Code Playgroud)
有4755
所有 12 个模式位的八进制表示。该数字对应于以下位:
octal 4 7 5 5
bits 100 111 101 101
sst uuu ggg ooo
ug rwx rwx rwx
Run Code Online (Sandbox Code Playgroud)
其中uuu
、ggg
和ooo
是用户、组和其他人的权限位。剩余的组(按顺序排列的第一个)包含 setuid ( su
)、setgid ( sg
) 和 sticky ( t
) 位。
setuid 和sticky 位通常不会被提及,因为它们对于大多数文件都是零。它们仍然存在于每个文件中,与其他文件一起保存。
如果我们真的深入了解,一些文件系统和接口会沿着模式位存储文件类型,在更高的位中。上面只占了 12 位,所以对于 16 位的字段,还剩下 4 位。例如,请参见in的描述st_mode
stat(2)
。