在Linux/Unix如何获取文件的权限

时间:2019-11-20 08:54:09  来源:igfitidea点击:

在Linux中,如何获取文件的权限(8进制形式)?
在shell脚本中,如何获取文件权限?

如何在Linux/Unix上获取文件八进制形式的权限

要获取文件或文件系统状态,可以使用stat命令。

如何从Linux中获取文件八进制权限

语法如下:

stat fileName
stat -c 'Format' file

在GNU/Linux上,默认输出如下:

$ stat /etc/passwd

输出示例:

  File: ‘/etc/passwd’
  Size: 2312            Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 18647322    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2018-01-11 21:00:01.607404451 -0500
Modify: 2017-10-16 03:48:01.145768026 -0400
Change: 2017-10-16 03:48:01.151768218 -0400
 Birth: -

只想查看8进制权限

$ stat -c '%a' /etc/passwd

输出示例:

644

以两种格式显示文件权限:

$ stat -c '%A %a %n' /etc/passwd

输出示例:

-rw-r--r-- 644 /etc/passwd

格式如下:

格式说明
%a八进制访问权限(注意#和0 printf标志)
%A可读性的访问权限
%b分配的块数(请参见%B)
%B%b
%CSELinux安全上下文字符串
%d设备号(十进制)
%D设备号(十六进制)
%f原始模式(十六进制)
%F文件类型
%g所有者的组ID
%G所有者的组名
%h硬链接数
%iinode号
%m安装点
%n文件名
%N带符号引用的文件名,如果使用符号链接
%o最佳I/O传输大小提示
%s总大小,以字节为单位
%t十六进制的主要设备类型,用于字符/块设备专用文件
%T次设备类型(十六进制),用于字符/块设备特殊文件
%u所有者的用户标识
%U所有者的用户名
%w文件的生成时间,易于阅读;如果未知
%W文件诞生的时间,距离纪元以来的秒数;如果未知,则为0
%x上次访问的时间,人类可读
%X上次访问的时间,距离纪元以来的秒数
%y上次数据修改的时间,人类可读
%Y上次数据修改的时间,自纪元以来的秒数
%z上次状态更改的时间,人类可读
%Z上次状态更改的时间,距离纪元以来的秒数

关于macOS/BSD stat命令的注释

在BSD中,stat命令的语法如下:

stat fileName
stat -f "Format" fileName

只查看8进制权限

$ stat -f "%OLp" /etc/passwd

输出示例:

644

以两种格式显示文件权限:

$ stat -f "%Sp %OLp %N" /etc/passwd

输出示例:

-rw-r--r-- 644 /etc/passwd