在不使用ls -l命令的情况下查找文件权限

时间:2020-01-09 14:16:18  来源:igfitidea点击:

问题描述:我需要找到文件许可并将其存储到shell变量中。
如何在不解析ls -l输出的情况下找到文件权限?

解决方法:使用GNU stat命令显示文件或文件系统状态。
它具有以特定格式显示输出的选项。

显示/etc/passwd文件的统计信息

执行以下命令:

$ stat /etc/passwd

输出:

File: `/etc/passwd'
  Size: 1675            Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d      Inode: 7899368     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2007-12-05 08:20:31.000000000 +0530
Modify: 2007-12-04 23:36:50.000000000 +0530
Change: 2007-12-04 23:36:50.000000000 +0530

以八进制格式显示`访问权限:

$ stat -c %a /etc/passwd

输出:

644

以易于阅读的格式打印访问权限,输入:

$ stat -c %A /etc/passwd

输出:

-rw-r--r-

将访问权限以八进制格式存储到shell变量中:

$ VAR=$(stat -c %a /etc/passwd)
$ echo $VAR

文件的其他有效格式序列

  • %b:分配的块数(请参见%B)
  • %B:报告的每个块的大小(以字节为单位)
  • %d:十进制设备号
  • %C:SELinux安全上下文
  • %D:十六进制设备号
  • %f:十六进制的原始模式
  • %F:文件类型
  • %g:所有者的组标识
  • %G:所有者的组名
  • %h:硬链接数
  • %i:索引节点号
  • %n:文件名
  • %N:引用的文件名,如果是符号链接则取消引用
  • %o:I/O块大小
  • %s:总大小,以字节为单位
  • %t:十六进制的主要设备类型
  • %T:次设备类型,十六进制
  • %u:所有者的用户标识
  • %U:所有者的用户名
  • %x:上次访问时间
  • %X:自纪元以来的最后访问时间(以秒为单位)
  • %y:上次修改时间
  • %Y:自纪元以来的最后修改时间,以秒为单位
  • %z:上次更改时间
  • %Z:自纪元以来的最后更改时间,以秒为单位