我知道关于一切皆文件(维基百科)。当我在研究文件权限时,我想知道是否可以将目录文件类型更改为普通的常规文件类型。
例如:
mkdir directory
并touch file
会显示如下内容:
drwxr-xr-x 2 user group 4096 Aug 18 22:26 directory
-rw-r--r-- 1 user group 0 Aug 18 22:26 file
在linux(或unix)世界中是否可以转换directory
为file
.换句话说,删除?d
中的前缀。drwxr-xr-x
答案1
d
不是权限,而是文件类型。在历史上的 Unix 文件系统实现中,类型和权限被捆绑在 16 位中mode
i 节点结构域1,这可能就是stat(2)
API(st_mode
字段)和ls
长输出也将它们捆绑在一起的原因。
但无法更改类型。虽然最初,目录数据的存储方式与常规文件相同,并且对用户空间不是不透明的,但现在它是不透明的(并且您使用特定的系统调用来读取内容或添加/删除/重命名条目,而不是读取和写入目录直接内容),并且在某些文件系统上,目录数据的存储方式甚至与文件不同,因此更改类型就更没有意义了。
¹ 最低 12 位的权限、较高位的编码类型和更多内部 FS 内容以及其他内容移入i_flag
V7 中新的单独字段70年代末。