Ruby 方法返回的 AIX 上文件的文件模式stat
有 6 位:
ruby -e 'puts File::stat("testfile_upload-003").mode.to_s(8)'
100644
FWIW,Ruby版本是ruby 2.1.6p336(2015-04-13修订版50298)[powerpc-aix6.1.0.0],但Perl返回完全相同的值:
perl -e 'use File::stat; printf "%o\n", stat("testfile_upload-003")->mode;'
100644
istat
这是同一文件的输出。
# /bin/istat testfile_upload-003
Inode 33780 on device 10/7 File
Protection: rw-r--r--
Owner: 0(root) Group: 0(system)
Link count: 2 Length 51200 bytes
Last updated: Thu Mar 9 01:13:24 CST 2017
Last modified: Wed Mar 8 11:52:52 CST 2017
Last accessed: Wed Mar 8 11:52:52 CST 2017
编辑:chmod 手册页和伊斯塔手册页不提供第 5 和第 6 位数字的信息。
并且没有为该文件设置花哨的 setuid 位:
# ls -l testfile_upload-003
-rw-r--r-- 2 root system 51200 Mar 08 11:52 testfile_upload-003
答案1
我在以下位置找到了它们<sys/mode.h>
:
/*
* (stat) st_mode bit values
*/
#define _S_IFMT 0170000 /* type of file */
#define _S_IFREG 0100000 /* regular */
#define _S_IFDIR 0040000 /* directory */
#define _S_IFBLK 0060000 /* block special */
#define _S_IFCHR 0020000 /* character special */
#define _S_IFIFO 0010000 /* fifo */
前导“1”表示常规文件。
一个目录有240755
,'4'表示目录,'2'表示“不是常规文件”。
答案2
*NIX 系统(AIX 是 UNIX,但在 Linux、Solaris 和 BSD 上也是如此)有 16 位长的文件模式信息:4 位表示文件类型;4 位表示文件类型。 3 位用于特殊位(setuid、setgid、t-git 或 Sticky); 9 位用于权限(所有者 rwx、组 rwx、其他 rwx - rwx 表示读-写-执行)。该标准启用八进制表示(没有前导零 - 有时会写入),前一个或两个是文件类型,下一个用于特殊位,最后三个用于权限。
示例(3 个二进制数字 = 1 个八进制数字):
Binary 1000000111101101 = Octal 100755 (-rwxr-xr-x)
Binary 0100000110100100 = Octal 40644 (drw-r--r--)
Binary 1010000111111111 = Octal 120777 (lrwxrwxrwx)
The previous examples in parts:
Binary 1/000 000 111/101/101 = Octal 10 0 755 = -rwxr-xr-x
Binary 0/100 000 110/100/100 = Octal 4 0 644 = drw-r--r--
Binary 1/010 000 111/111/111 = Octal 12 0 777 = lrwxrwxrwx
文件类型:
- 10 (-) = 常规文件
- 4 (d) = 目录
- 12 (l) = 符号链接
- 1 (p) = FIFO(命名管道)
- 14 (s) = 插座
- 2 (c) = 字符特殊文件(如 TTY,例如:/dev/tty1)
- 6 (b) = 块特殊文件(如 HDD,例如:/dev/sda)
- 在其他系统中还有更多(例如,Solaris D = 门,P = 端口;等等)