据我所知,有12个权限位,其中用户、组和其他用户各有3组,每组3位,分别是RWX。 RW 是读和写,但对于 X 来说是search
目录和execute
文件。
这是我不明白的:
剩下的 3 个模式位是什么?它们都存储在 inode 中吗?
我知道文件目录本身也被认为是一个文件,因为UNIX中的所有东西都是文件(这是真的吗?),但是由于UNIX系统使用ACL来表示文件系统,那么文件系统就是文件名-inode_number的列表对。文件目录在哪里存储它自己的索引节点号和文件名?
答案1
stat /bin/su
在一个系统上显示:
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
4755
所有 12 个模式位的八进制表示形式。该数字对应于位:
octal 4 7 5 5
bits 100 111 101 101
sst uuu ggg ooo
ug rwx rwx rwx
其中uuu
、ggg
和ooo
是用户、组和其他人的权限位。剩余组(按顺序的第一组)包含 setuid ( su
)、setgid ( sg
) 和 Sticky ( t
) 位。
setuid 和粘性位通常不会被提及,因为对于大多数文件来说它们都是零。它们仍然存在于每个文件中,与其他文件一起保存。
如果我们真正认真对待它,一些文件系统和接口会存储文件类型沿着模式位,在更高的位中。上面只占了12位,所以16位字段还剩下4位。例如,参见的描述st_mode
在stat(2)
。
答案2
剩下的三位分别代表setuid、setgid和sticky位;看了解 UNIX 权限和文件类型了解详情。这些都存储在inode中。
目录实际上是一种存储名称列表和相应索引节点的文件。目录自己的名称和inode存储在其父目录中;根目录是一种特殊情况,它通常是文件系统中的固定索引节点(Ext4 中的索引节点 2)并且当然总是被命名
/
(最终相对于它的安装点......)。