前言

之前的当Kali Rolling作为笔记本唯一一个系统提到的都是一些linux表面的东西,只是适合过渡期用,但是这并不是linux美的地方,它还有许多好玩的地方,所以就想专门留一篇记录一些linux命令,当作是[当Kali Rolling作为笔记本唯一一个系统]的升级版

其实也有想过针对不同的领域功能和具体使用场景分类,但是按照现在看来,虽然把linux当作唯一的系统了,但是我仍然不是特别深入玩转这位好朋友,所以现在扎堆放先,以后有一定深入后,在分类也不迟。

命令是linux的精华,也是它高效的地方,一条命令能够做到一些非常复杂的操作,也可以拿到比鼠标指指点点更加丰富的信息,当然在速度上,如果你上手了命令操作肯定比鼠标操作快很多,一旦开始敲命令,你就会讨厌鼠标点来点去了- -   

comm

先从这个命令开始吧,因为最近面试有遇到这个命令,这个命令是一行行地比较两个文件的异同,可以想象这么一个场景,我们有两个文件夹,一个是a.txt,一个是b.txt,每个文件夹都有50万个url,那么如何找出两个文件的交集(电脑配置为内存4G,硬盘2T)?我一开始还考虑了内存因素,结果面试官告诉我comm一个命令就搞定了,而且不用考虑内存… : /

关于comm命令,我直接贴man page了,回头有时间了再回来详细折腾一下

 Compare sorted files FILE1 and FILE2 line by line.
       When FILE1 or FILE2 (not both) is -, read standard input.
       With  no  options,  produce  three-column  output.  Column one contains
       lines unique to FILE1, column two contains lines unique to  FILE2,  and
       column three contains lines common to both files.
       
       -1     suppress column 1 (lines unique to FILE1)

       -2     suppress column 2 (lines unique to FILE2)

       -3     suppress column 3 (lines that appear in both files)

paste

假设现在有a.txt和b.txt里面分别有:

cat a.txt
aaa
bbb
ccc
ddd
cat b.txt
1111
2222
3333
4444

如何把b.txt的内容接在a.txt的后面并生成一个新的文件new.txt?

cat new.txt
aaa
bbb
ccc
1111
2222
3333

我们可以用paste命令

paste -s -d '\n' a.txt b.txt > new.txt
注意:\n为换行符,也可以换成\t等等

1.-s串列进行而非平行处理
如果只是paste -d '\n' a.txt b.txt > new.txt
那么new.txt输出就变成了:
aaa
1111
bbb
2222
ccc
3333

2.-d 用指定的间隔字符取代跳格字符
如果只是paste -s a.txt b.txt > new.txt
那么new.txt输出就变成了:
aaa	bbb	ccc
111	222	333

3.再把-s去掉,直接paste a.txt b.txt > new.txt
那么new.txt输出就变成了:
aaa	111
bbb	222
ccc	333

tr,sort,uniq

在自然语言处理里面预处理中有一步骤是去空去重,比如我现在有一个a.txt文件需要去空去重(两个空行,三个’好棒’):

好,这个牛奶我家孩子很爱喝
以后还会常来买
感觉很实惠,比市面的便宜多了

好棒
好棒
不敢相信,这个价格还能买到这么好的牌子

好棒
还会回来买

去空(其实就是去掉换行符’\n’):

(tr -s "\n" < a.txt )>b.txt
cat b.txt
好,这个牛奶我家孩子很爱喝
以后还会常来买
感觉很实惠,比市面的便宜多了
好棒
好棒
不敢相信,这个价格还能买到这么好的牌子
好棒
还会回来买

还可以这样去空 : P

grep . a.txt>b.txt

如果对去空后的b.txt直接做uniq,被间隔开的’好棒’的重复还是没有去掉:

uniq < b.txt 
好,这个牛奶我家孩子很爱喝
以后还会常来买
感觉很实惠,比市面的便宜多了
好棒
不敢相信,这个价格还能买到这么好的牌子
好棒
还会回来买

所以得先sort排序,再uniq去重复:

sort b.txt|uniq > new.txt
cat new.txt
不敢相信,这个价格还能买到这么好的牌子
感觉很实惠,比市面的便宜多了
还会回来买
好棒
好,这个牛奶我家孩子很爱喝
以后还会常来买

虽然说可以直接写段python/java代码做循环对比也能解决,而不用去记这些个命令,但是有什么比两三行命令就能搞掂更优美的呢~

curl

常用的有
-C 断点续传
-L follow 302重定向
-x 指定代理

column

#好看很多
cat /etc/passwd|column -t -s:

xargs

# 将命令输出作为参数传递给另外一个命令,经常用
# 第一次知道这个命令还是在docker删除none镜像的时候
docker images|grep none|awk '{print $3 }'|xargs docker rmi