daily tip 2015-10-26

今天主要是来一个那个取文件属性的实战
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...哈哈

你可能感兴趣的:(No)