老男孩linux之取得文件的权限对应的数字练习题
问题:如何取得shiayn文件的权限对应的数字内容,如-rw-r--r-- 为644,要求使用命令取得644这样的数字。
- 创建文件shiyan
[[email protected] ~]# touch shiyan
[[email protected] ~]# ll
-rw-r--r-- 1 root root 0 Jul 11 05:48 shiyan
- 使用stat命令来查看文件644权限
[[email protected] ~]# stat shiyan
说明: stat - display file or file system status(显示文件或文件系统状态)
- 获取644权限的过程
方法一:使用stat、head、tail、awk
[[email protected] ~]# stat shiyan|head -4|tail -1
说明:先将含有644的那行提取出来。
[[email protected] ~]# stat shiyan|head -4|tail -1|awk -F "/" ‘{print $1}‘
Access: (0644
[[email protected] ~]# stat shiyan|head -4|tail -1|awk -F "/" ‘{print $1}‘|awk -F "(" ‘{print $2}‘
0644
方法二:使用stat、sed、awk
先将含有644的那行提取出来
[[email protected] ~]# stat shiyan|sed -n ‘4p‘
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
[[email protected] ~]# stat shiyan|sed -n ‘4p‘|awk -F "/" ‘{print $1}‘|awk -F "(" ‘{print $2}‘
0644
方法三:使用stat、sed、awk
[[email protected] ~]# stat shiyan|sed -n ‘4p‘
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
[[email protected] ~]# stat shiyan|sed -n ‘4p‘|awk -F ":" ‘{print $2}‘|awk -F "/" ‘{print $1}‘|awk -F "(" ‘{print $2}‘
0644
方法四:使用stat、cut、sed
[[email protected] ~]# stat shiyan|cut -d ":" -f2
`shiyan‘
0 Blocks
802h/2050d Inode
(0644/-rw-r--r--) Uid
2017-07-11 05
2017-07-11 05
2017-07-11 05
[[email protected] ~]# stat shiyan|cut -d ":" -f2|sed -n ‘4p‘
(0644/-rw-r--r--) Uid
[[email protected] ~]# stat shiyan|cut -d ":" -f2|sed -n ‘4p‘|cut -d "/" -f1
(0644
[[email protected] ~]# stat shiyan|cut -d ":" -f2|sed -n ‘4p‘|cut -d "/" -f1|cut -d "(" -f2
0644
方法五:使用stat、sed、awk
[[email protected] ~]# stat shiyan|sed -n ‘4p‘|awk -F "/" ‘{print $1}‘|awk -F "(" ‘{print $2} ‘
0644
方法六:老男孩老师给出的最简单的方法
当然还有更简单的方法:
[[email protected] ~]# stat -c %a shiyan
644
注意:如何想到法二的思考过程,比答题更重要。当命令结果包含我们需要的内容的时候,我们要想到是否有具体的参数能够一步达到我们需要的结果。
特别说明:
有关stat -c的用法可以通过stat --help和man stat,info stat,这是所有命令的三大帮助杀手锏,必须要掌握了。
[[email protected] ~]# stat --help
Usage: stat [OPTION] FILE... #==>这是语法格式
Display file or file system status.
...省略部分...
-f, --file-system display file system status instead of file status
-c --format=FORMAT use the specified FORMAT instead of the default;
output a newline after each use of FORMAT
...省略部分...
#==>这是可用的参数,如-c。
The valid format sequences for files (without --file-system):
#==>这里是对于文件适用的格式,既-c后接的格式。
%a Access rights in octal #==>以8进制形式显示,即为本文的答案
%A Access rights in human readable form #==>拓展以人类可读的形式显示权限
%b Number of blocks allocated (see %B)
%B The size in bytes of each block reported by %b
%d Device number in decimal
%D Device number in hex
%f Raw mode in hex
%F File type
%g Group ID of owner
%G Group name of owner
%h Number of hard links
%i Inode number
%n File name
%N Quoted file name with dereference if symbolic link
%o I/O block size
%s Total size, in bytes
...省略部分...
本题的拓展部分:
[[email protected] ~]# ls -li shiayn
98211 -rw-r--r-- 1 root root 0 Feb 20 08:04 /ett
[[email protected] ~]# stat -c %a shiyan
644
[[email protected] ~]# stat -c %A shiyan #==>获取字符权限
-rw-r--r--
[[email protected] ~]# stat -c %B shiyan
512
[[email protected] ~]# stat -c %b shiyan
0
[[email protected] ~]# stat -c %i shiyan #==>inode信息
98211
[[email protected] ~]# stat -c %n shiyan
/ett
[[email protected] ~]# stat -c %o shiyan #==>block size
4096