如果数据必须要经过几道手续之后才能得到我们想要的格式,这就是需要管道命令的问题了。管道命令使用“|”这个界定符号。
1)管道命令“|”仅能处理经由前面一个命令传来的正确信息,也就是standard output的信息,对于 stdandard error并没有直接处理的能力。
2)管道命令必须要能够接受来自前一个命令的数据成为standard input继续处理才行。
示例1:查看etc/下面的文件
可以利用ls/etc来查阅,不过,因为/etc/下面的文件太多,导致一口气就将屏幕塞满了,不知道前面输出的内容是什么,此时我们可以通过less命令的协助.
输入命令:ls -al /etc | less
1 选取命令:cut grep
一般,选取信息通常是针对“行”来分析的,并不是整篇信息分析的。
1.1 cut
cut -d ‘分隔字符’ -f fields
cut c 字符范围
-d:后面接分隔字符,与-f一起使用;
-f:依据-d的分隔字符一段信息切割称为数段,用-f去除第几段的意思;
-c:以字符的单位取出固定字符区间
1)找出PATH变量,第5个路径
2)找出PATH变量,第3和第5个路径
3)将export输出的信息取得第100个字符以后的所有字符
4)last在显示的登录信息中留下第一列的信息
输入last所有信息显示
输入命令后
1.2 grep
grep是分析一行信息,若当中有我们所需要的信息,就将该行拿出来。
grep [acinv] [–color=auto] ‘查找字符串’ filename
参数:
-a:将binary文件以text文件的方式查找数据;
-c:计算找到’查找字符串’的次数;
-i:忽略大小写的不同,所以大小写视为相同;
-n:顺便输出行号;
-v:反向选择,即显示出没有’查找字符串’内容的那一行;
–color=auto:可以将找到的关键字部分加上颜色显示;
1)将last当中出现root的行取出来
2)只要没有root的就取出
3)在last输出信息中,取出不是root信息并取出第一列
4)取出/root/testfile 含usr的那几行
2 排序命令:sort,wc,uniq
2.1 sort
可以根据不同的数据类型进行排序。
sort [-fbMnrtuk] [file or stdin]
-f:忽略大小写的差异,例如A与a视为编码相同;
-b:忽略最前面的空格符部分;
-M:以月份的名字来排序,例如JAN、DEC等的排序方法;
-n:使用纯数字进行排序(默认为文字类型排序);
-r:反向排序;
-u:就是uiniq,相同的数据中,仅出现一行代表;
-t:分隔符,默认是用【Tab】来分隔;
-k:以那个区间(filed)来进行排序的意思;
1)/etc/passwd个人账户按照默认文字顺序排序
2)/etc/passwd以:来分隔的,以第三列来排序
2.2 uniq
如果排序完成后,想要将重复的数据仅列出一个显示。
uniq [-ic]
-i:忽略大小写字符的不同;
-c:进行计数
1)使用last将账号列出,仅取出账号列,进行排序后仅取出1位
2)想要知道每个人的登录次数
2.3 wc
wc可以用来计算输出信息的数据。
wc [-lwm]
-l:仅列出行;
-w:仅列出多少字(英文单字);
-m:多少字符;
1)列出/root/testfile 依次展示 行、字数、字符数
2)取出last这个月份登录系统的总人次,last最后两行不是账号内容
由于last会输出空白行和wtmp字样在最下面两行,我们需要使用grep取出非空白行以及去除wtmp那一行,再计算行数。
3 双向重定向:tee
想要见这个数据流处理过程中某段信息存下来,应该使用tee。tee同时将数据流送与文件与屏幕,而输出到屏幕的,其实就是stdout,可以让下个命令继续处理。
tee [-a] file
-a:以累加的方式,将数据加入file当中
1)将last的输出存到一份搭配last.list文件
last.file文件内容
2)将ls 的数据累加存到~/homefile,同时屏幕也有输出信息
4 字符转换命令:tr ,col,join,paste,expand
4.1 tr
tr用来删除一段信息当中的文字,或者是进行文字信息的替换。
tr [-ds] SET1…
-d:删除信息当中的SET1这个字符串
-s:替换掉重复的字符
1)将last输出信息中所有的小写字符变成大写字符。
2)将/etc/passwd输出的信息中的冒号(:)删除。
4.2 col
col经常被用于将man page转存位纯文本文件以方便查阅的功能。
col [-xb]
-x:将tab键转换成对等的空格键;
-b:在文字内有反斜杠(/)时,仅保留反斜杠最后接的那个字符
将col的man page 转存成为/root/col.man 的纯文本文件
输入:vi /root/col.man
4.3 join
主要用于将两个文件中有相同数据的那一行加在一起。
join [-ti12] file1 file2
-t:join默认以空格符分隔数据,并且对比“第一个字段”的数据;
-i:忽略大小的差异;
-1:这个数字是1,代表第一个文件用哪个字段分析;
-2:代表第二个文件要用哪个字段来分析的意思。
1)用root身份,将/etc/passwd与/etc/shadow相关数据整合成一列
将两个文件整合到一行
4.4 paste
paste是直接将两行贴到一起,join是对比两个文件的数据相关性
paste [-d] file1 file2
-d:后面接分隔字符,默认是以【tab】来分隔;
-:如果file部分写成-,表示来自standard input 的数据的意思;
将/etc/passwd与/etc/shadow同一行粘贴到一起
4.5 expand
将【tab】键转成空格键。
expand [-t] file
-t:后面可以接数字,一般来说,一个[tab]键可以用8个空格键替换,我们也可以自定义一个[tab]键代表多少个字符。
5 切割命令:split
如果文件太大,导致一些携带式设备无法复制的问题,找splir,可以帮一个大文件依据文件大小或行数来切割成小文件,快速有效!
split [-bl] file PREFIX
参数:
-b:后面可接欲切割成的文件大小,可以加单位,例如b,k,m等;
-l:以行数来进行切割;
PREFIX:代表前导符,可作为切割文件的前导文字。
将/etc/testfile分隔成30k(此文件没有超过30k),并放入/tmp的tmpsplit开始的文件
若是大文件分隔成很多小文件,可以使用cat tmpsplit* >> tmpall 把多个小文件就重定向到一个文件tmpall。
2)将使用ls -al /输出的信息,每10行记录成一个文件
6 参数代换:xargs
就是在产生某个命令的参数的意思
xargs [-0epn] command
参数:
-0:如果输入的stdin含有特殊字符,例如’,,空格键等字符时,这个参数可以将它还原成一般字符,这个参数可以用于特殊字符;
-e:这个是EOF的意思。后面可以接一个字符串,,当xargs分析到这个字符时,就会停止继续工作;
-p:在执行每个命令的参数时,,都会询问用户;
-n:后面接次数,每次command命令执行时,要使用几个参数的意思
7 关于减号-的用途
在管道命令中,经常会使用到前一个明朗了的stdout作为这次的stdin,某些命令需要用到文件名来进行处理,该stdin与stdout可以用减号来代替。
将/home里面的文件打包,但打包的数据不是记录到文件,而是传送到stdout;经过管道后,将tar -cvf -/home传送给后面的tar -xvf -。后面这个-则是取用前一个命令的stdout,因此我们不需要使用文件
学习来源:鸟哥的Linux私房菜