今天主要是来一个那个取文件属性的实战
1.如何取得ll文件的权限的对应的数字内容,如r--r--r--会取得444这样的命令
这里我得先说一下,这个题目是从老男孩老师的博客里找到的,我只是做一下个人的总结,
没有别的意思。
老男孩老师的博客
http://oldboy.blog.51cto.com/
接下来我贴出我的命令
root@lp:~# cd /tmp
root@lp:/tmp#
root@lp:/tmp# ls
qtsingleapp-smplay-ca73-0
qtsingleapp-smplay-ca73-0-lockfile
ssh-G4aTGiWaJkAW
systemd-private-b5d2d388feeb4e079895f77ce281cf27-colord.service-MiP7jT
systemd-private-b5d2d388feeb4e079895f77ce281cf27-rtkit-daemon.service-8bOwC8
tracker-extract-files.0
root@lp:/tmp# rm * -fr
root@lp:/tmp#
我所有的操作都是在/tmp目录下操作的
root@lp:/tmp# ls
root@lp:/tmp# touch ll
root@lp:/tmp# ls
ll
我新建了一个文件,接下来利用一个stat命令查看它的权限
root@lp:/tmp# stat ll
文件:"ll"
大小:0 块:0 IO 块:4096 普通空文件
设备:805h/2053d Inode:15204379 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2015-10-26 20:43:53.795124377 +0800
最近更改:2015-10-26 20:43:53.795124377 +0800
最近改动:2015-10-26 20:43:53.795124377 +0800
创建时间:-
我用的是中文的,这样的话一会做操作不舒服,我把它改成中文
root@lp:/tmp# LANG=en
root@lp:/tmp#
root@lp:/tmp#
root@lp:/tmp#
root@lp:/tmp# stat ll
File: 'll'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 805h/2053d Inode: 15204379 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-10-26 20:43:53.795124377 +0800
Modify: 2015-10-26 20:43:53.795124377 +0800
Change: 2015-10-26 20:43:53.795124377 +0800
Birth: -
这样看起来好多了
root@lp:/tmp# ll
total 0
-rw-r--r-- 1 root root 0 Oct 26 20:43 ll
root@lp:/tmp# stat ll|awk -F "[(/]" '{print $2}'
2053d Inode: 15204379 Links: 1
0644
我试着直接用那个awk来取,因为前一段时间一直在用sed取,那个很简单,可以只用一个
管道就可以实现,一会再贴sed的,后来我发现做不到,于是,就只有先过滤一下行
root@lp:/tmp# stat ll|grep Uid|awk -F "[(/]" '{print $2}'
0644
这样看起来很简单吧,至于过滤行的话,可以用sed来过滤,也可以利用head和tail的组合来取行
root@lp:/tmp# stat ll|cat -n|sed -n 4p
4 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
root@lp:/tmp#
我觉得可以用那个cat的命令来显示行号,更方便取行号。
root@lp:/tmp# stat ll|sed -n 's#^.*s: (\(.*\)/-.*$#\1#gp'
0644
root@lp:/tmp#
这是sed取行的,我觉得略复杂,而且可读性太低了,先去掉那个转义的\再读会好一点吧。
root@lp:/tmp# ll ll
-rw-r--r-- 1 root root 0 Oct 26 20:43 ll
root@lp:/tmp# ls -l ll
-rw-r--r-- 1 root root 0 Oct 26 20:43 ll
root@lp:/tmp# ls -l ll|cut -c 2-10
rw-r--r--
root@lp:/tmp# ls -l ll|cut -c 2-10|tr rwx- 4210
420400400
root@lp:/tmp# ls -l ll|cut -c 2-10|tr rwx- 4210|awk -F ""'{print $1}'
root@lp:/tmp# ls -l ll|cut -c 2-10|tr rwx- 4210|awk -F "" '{print $1}'
4
root@lp:/tmp# ls -l ll|cut -c 2-10|tr rwx- 4210|awk -F "" '{print $1+$2+$3}'
6
root@lp:/tmp# ls -l ll|cut -c 2-10|tr rwx- 4210|awk -F "" '{print $1+$2+$3 $4+$5+$6 $7+$8+$9}'
644
root@lp:/tmp#
这是一个利用那个最基本的方法跟awk实现的,略复杂,老男孩老师也说了这个,不过这个
我也自己想到了,贴一下吧
root@lp:/tmp# stat -c %a ll
644
最简单的命令在这,贴这吧
手打的,就在vim里面,^_^,手打到此为止
今天就这样,我去学院看看视频咯o(∩∩)o...哈哈