以下内容为本人学习《Linux Shell脚本攻略》的一些笔记。如果你想好好学shell的话,个人非常推荐这本书。
关于软链接和链接文件
除了常规的ls -l找出链接文件之外,还有以下两种方式:
readline link_file
上面的命令直接打印链接文件的目标文件。
find -type l
上面的命令查找当前目录下的所有链接文件。
链接文件的方式基本上都是ln命令,ln的参数-s指定创建的是软链接文件而不是硬链接。软链接和硬链接的主要区别个人归纳为:
- 目录必须用软链接
- 软链接支持跨分区,硬链接不行
- 硬链接创建的文件和原始文件大小一致
文件的权限和特殊位
常见的文件的权限表示是-rw-r–r–,通过ls -l即可显示。第一位常见的是-,表示文件;d表示目录;l表示链接文件。rwx相信不用多说,但是用户的x可以通过setuid设置为S,效果是以文件创建者的名义执行,据说仅能应用于ELF文件,命令为
chmod +s
组的rwx的第三位也可以通过setgid设置为S,用创建者组的名义执行。第三个rwx的第三位可以设置为t/T,仅能应用与目录,表示仅有目录创建者才有权删除目录内的文件,即时其他人有写权限,典型的例子是/tmp目录。
还有一个小的tip是保护某个文件不能被删除可以用
chattr +i filename
这样其他人就不能直接删除这个文件了。取消保护可以通过chattr -i filename。
快速创建一个指定大小的文件
dd if=/dev/zero count=1 bs=1M of=1m.dat
if表示来源文件,默认是标准输入。count和bs的乘积为最终文件大小。of是输出文件,默认是标准输出。/dev/zero是一个特殊的输入,任何时候读取都返回\0,用来填充文件很不错。
类集合操作
首先要求输入文件A和B必须排好序。方法如下:
sort a.txt -o a.txt
-o表示输出文件,不用担心,不会出现乱写的情况。b.txt类似命令。
接下来用comm命令
comm a.txt b.txt
输出有三列,第一列是a.txt独有的,第二列是b.txt独有的,第三列是两个文件共有的。
所以最简单的,合集只需要显示第三列就可以了,命令是:
comm a.txt b.txt -1 -2
-1 -2表示不显示第一列和第二列。
A – B和B – A的情况分别对应于第一列和第二列。以A – B为例:
comm a.txt b.txt -2 -3 | sed 's/^\t//'
最后的sed是为了去除前导TAB。可以先看下用sed的效果,然后再加上去。
合集是个人理解:
comm a.txt b.txt | sed 's/^\t*//'
以上就是个人今天学习的一点笔记,之后还会有更多的笔记上来。