当使用 GNUstat
探测文件系统时,有许多格式序列可用于--format
/--printf
参数;特别是这个
%f Raw mode in hex
没有多大意义。与 %a 访问模式相比,某些东西可能具有(您可以通过 看到这一点stat --format '%f %a'
)原始模式为 41ed,但访问模式为 755,或者原始模式为 81a4,访问模式为 644。
那么“原始模式”是什么意思?
答案1
解读“十六进制原始模式”的含义有两个部分:第一个是它在十六进制,但访问模式一般描述于八进制:
41ed 16 = 40775 8 81a4 16 = 100644 8
如果您要查看/tmp
,它通常设置了限制删除标志(“粘滞位”):
$ ls -ld /tmp drwxrwxrwt 17 根 根 4096 2012-05-31 13:45 /tmp $ stat --format '%f %a' /tmp 43 号 1777
并转换:
43ff 16 = 41777 8
stat 函数 ( ) 的程序员手册中描述了“十六进制原始模式” man 2 stat
,并指出它们是八进制值:
为 st_mode 字段定义了以下标志: S_IFMT 0170000 文件类型位字段的位掩码 S_IFSOCK 0140000 套接字 S_IFLNK 0120000 符号链接 S_IFREG 0100000 常规文件 S_IFBLK 0060000 块设备 S_IFDIR 0040000 目录 S_IFCHR 0020000 字符设备 S_IFIFO 0010000 先进先出 S_ISUID 0004000 设置 UID 位 S_ISGID 0002000 设置组 ID 位(见下文) S_ISVTX 0001000 粘性位(见下文) S_IRWXU 00700 文件所有者权限掩码 S_IRUSR 00400 所有者有读权限 S_IWUSR 00200 所有者有写权限 S_IXUSR 00100 所有者有执行权限 S_IRWXG 00070 组权限掩码 S_IRGRP 00040 组有读权限 S_IWGRP 00020 组有写权限 S_IXGRP 00010 组有执行权限 S_IRWXO 00007 其他人的权限掩码(不在组中) S_IROTH 00004 其他人有读权限 S_IWOTH 00002 其他人有写权限 S_IXOTH 00001 其他人有执行权限
(奇怪的是,在线手册页缺少此部分。)
这是一个位域,我们可以看到最后四位数字与访问模式匹配;前导数字(十六进制)与文件类型匹配,因此十六进制模式 81a4 对应于“目录,模式 0644”,十六进制模式 41ed 对应于“常规文件,模式 0775”。