如何在 AIX 上解码 6 位文件模式?

如何在 AIX 上解码 6 位文件模式?

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 = 端口;等等)

相关内容