Linux 的文件属性的数字表示

Linux 文件或目录的属性的二进制表示:

<?php
$f
= $argv[1
];
echo
sprintf(‘%016s’,decbin(fileperms($f))) ."\n"
;
?>

每个二进制位代表特殊的含义:

从高到低:

1 说明是文件, 否则是目录

1 如果是文件,说明是sock文件

1 不知道

1 如果是文件,说明是pipe文件

1 属主的s位

1 属组的s位

1 粘着位t

1 属主可读

1 属主可写

1 属主可执行

1 属组可读

1 属组可写

1 属组可执行

1 其他用户可读

1 其他用户可写

1 其他用户可执行

将数字转换成字母的形式,php

 

<?php
define
("S_ISUID",04000
);
define("S_ISGID",02000
);
define("S_ISVTX",01000
);

define("S_IRUSR",0400);
define("S_IWUSR",S_IRUSR >> 1
);
define("S_IXUSR",S_IRUSR >> 2
);
define("S_IRGRP",S_IRUSR >> 3
);
define("S_IWGRP",S_IRUSR >> 4
);
define("S_IXGRP",S_IRUSR >> 5
);
define("S_IROTH",S_IRUSR >> 6
);
define("S_IWOTH",S_IRUSR >> 7
);
define("S_IXOTH",S_IRUSR >> 8
);

$mode fileperms($argv[1]);
echo 
strmode($mode) ."\n"
;
function 
strmode($mode
) {
        
$str 
;
        
$str .= $mode S_IRUSR ‘r’ ‘-‘
;
        
$str .= $mode S_IWUSR ‘w’ ‘-‘
;
        
$str .= ($mode 
S_ISUID
                        
? ($mode S_IXUSR ‘s’ ‘S’
)
                        : (
$mode S_IXUSR ‘x’ ‘-‘
));
        
$str .= $mode S_IRGRP ‘r’ ‘-‘
;
        
$str .= $mode S_IWGRP ‘w’ ‘-‘
;
        
$str .= ($mode 
S_ISGID
                        
? ($mode S_IXGRP ‘s’ ‘S’
)
                        : (
$mode S_IXGRP ‘x’ ‘-‘
));
        
$str .= $mode S_IROTH ‘r’ ‘-‘
;
        
$str .= $mode S_IWOTH ‘w’ ‘-‘
;
        
$str .= ($mode 
S_ISVTX
                        
? ($mode S_IXOTH ‘t’ ‘T’
)
                        : (
$mode S_IXOTH ‘x’ ‘-‘
));
        return 
$str
;
}
?>

还没写完呢,还会更新呢

具体代码参考coreutils-6.10\lib 下面的如下文件:filemode.h  filemode.c sys_stat.h  ,具体写起来也很复杂的,主要是不同的系统就不一样

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据