Linux学习资料-管线命令 ( pipe )

管线命令 ( pipe ) bash

就如同前面所说的, bash 命令执行的时候有输出的数据会出现!那么若是这群数据必须要通过几道手续以后才能获得咱们所想要的格式,应该如何来设定?这就牵涉到管线命令的问题了( pipe ),管线命令使用的是『 | 』这个界定符号!另外,管线命令与『连续下达命令』是不同的呦!这点底下咱们会再说明。底下咱们先举一个例子来讲明一下简单的管线命令。工具

假设咱们要读取 last 这个指令中,那个 root 登入的『次数』应该怎么做?注意呦!咱们只须要『次数』。那么我所进行的步骤是:.net

执行 last ,将全部这个月的全部人登入数据取出来; 排序

使用 grep 将上面的输出数据(stdout)当中的 root 撷取出来,其它的不要; ip

使用 wc 这个能够计算行数的指令将上一步的数据计算行数! 字符串

因为 last 的输出是一行表明一次登入,因此只要计算几行就表明登入几回的意思,因此啰!经由上面三个步骤,将 last 数据逐步的筛选,就能够获得咱们的数据了!整个命令能够写成以下: get

  [test @test bin]# last it

[test @test bin]# last | grep root pip

[test @test bin]# last | grep root | wc -l  ast

  

你能够分别执行『 last 』而后再逐步增长为『 last | grep root 』,最后到上面那一行,那么就立刻能够清楚的知道为什么会这么作啰!这个管线命令『 | 』仅能处理经由前面一个指令传来的正确信息,也就是 standard output ( STDOUT ) 的信息,对于 stdandard error 并无直接处理的能力,请记得。那么总体的管线命令可使用下图表示之: 

   


在每一个管线的部分都是『指令』呢!然后一个指令的输入乃是由前一个指令的输出而来的!底下咱们来谈一谈一些基本的管线命令指令介绍: 


--------------------------------------------------------------------------------


cut 

语法: [root @test /root ]# cut -d "分隔字符" [-cf] fields 

参数说明: 

-d  :后面接的是用来分隔的字符,预设是『空格符』 

-c  :后面接的是『第几个字符』 

-f  :后面接的是第几个区块? 

范例: 

[root @test /root]# cat /etc/passwd | cut -d ":" -f 1  

将 passwd 这个档案里面,每一行里头的 : 用来做为分隔号, 

而列出第一个区块!也就是姓名所在啦! 

[root @test /root]# last | cut -d " " -f1  

以空格符为分隔,并列出第一个区间! 


[root @test /root]# last | cut -c1-20 

将 last 以后的数据,每一行的 1-20 个字符取出来!

 

说明: 

这个 cut 实在很好用!不过,说真的,除非你经常在分析 log 档案,不然使用到 cut 的机会并很少!好了! cut 主要的用途在于将『同一行里面的数据进行分解!』,最常使用在分析一些数据或文字数据的时候!这是由于有时候咱们会以某些字符看成分割的参数,而后来将数据加以切割,以取得咱们所须要的数据。我也很常使用这个功能呢!尤为是在分析 log 档案的时候!


--------------------------------------------------------------------------------


sort 

语法: [root @test /root ]# sort [-t 分隔符] [(+起始)(-结束)] [-nru] 

参数说明: 

-t 分隔符:使用分隔符来隔开不一样区间,预设是 tab 

+start -end:由第 start 区间排序到 end 区间 

-n         :使用『纯数字』排序(不然就会以文字型态来排序) 

-r         :反向排序 

-u         :相同出现的一行,只列出一次! 

范例: 

[root @test /root]# cat /etc/passwd | sort 

将列出来的我的帐号排序! 

[root @test /root]# cat /etc/passwd | sort -t: +2n 

将我的帐号中,以使用者 ID 来排序(以 : 来分隔,第三个为 ID , 

但第一个代号为 0 之故) 


[root @test /root]# cat /etc/passwd | sort -t: +2nr 

反相排序啰!

 

说明: 

sort 一样是很经常使用的指令呢!由于咱们经常须要比较一些信息啦!举个上面的第二个例子来讲好了!今天假设你有不少的帐号,并且你想要知道最大的使用者 ID 目前到哪一号了!呵呵!使用 sort 一会儿就能够知道答案咯!固然其使用还不止此啦!有空的话不妨玩一玩!


--------------------------------------------------------------------------------


wc 

语法: [root @test /root ]# wc [-lmw] 

参数说明: 

-l   :多少行 

-m   :多少字符 

-w   :多少字? 

范例: 

[root @test /root]# cat /etc/passwd | wc -l 

这个档案里头有多少行? 

[root @test /root]# cat /etc/passwd | wc -w  

这个档案里头有多少字!?

 

说明: 

wc 也能够看成指令?呵呵!这可不是上洗手间的 WC 呢!这是至关有用的计算档案内容的一个工具组喔!举个例子来讲,当你要知道目前你的帐号档案中有多少个帐号时,就使用上面的 wc -l 啦!由于 /etc/passwd 里头一行表明一个使用者呀!因此知道行数就晓得有多少的帐号在里头了!而若是要计算一个档案里头有多少个字符时,呵呵!就使用 wc -w 这个参数吧!


--------------------------------------------------------------------------------


uniq 

语法: [root @test /root ]# uniq 

参数说明: 

范例: 

[root @test /root]# last | cut -d" " -f1 | sort | uniq 

说明: 

这个指令用来将『重复的行删除掉只显示一个』,举个例子来讲,你要知道这个月份登入你主机的使用者有谁,而不在意他的登入次数,那么就使用上面的范例,(1)先将全部的数据列出;(2)再将人名独立出来;(3)通过排序;(4)只显示一个!因为这个指令是在将重复的东西减小,因此固然须要『配合排序过的档案』来处理啰!


--------------------------------------------------------------------------------


tee 

语法: [root @test /root ]# last | tee last.list | cut -d " " -f1 

参数说明: 

范例: 

[root @test /root]# last | tee last.list | cut -d " " -f1 

说明: 

有没有发如今命令重导向的时候,若是咱们要将数据送出到档案的时候,屏幕上就不会出现任何的数据!那么若是咱们须要将数据同时显示在屏幕上跟档案中呢?呵呵!这个时候就须要 tee 这个指令啰!使用 last 能够查看到这个月份的登入数据,而使用了 tee 以后,会将数据同时传给下一个命令去执行,也会将数据写入 last.list 这个档案中!也是个好帮手!


--------------------------------------------------------------------------------


tr 

语法: [root @test /root ]# tr [-ds] SET1 

参数说明: 

-d  :删除 SET1 这个字符串 

-s  :取代掉重复的字符! 

范例: 

[root @test /root]# last | tr '[a-z]' '[A-Z]'         <==将小写改为大写 

[root @test /root]# cat /etc/passwd | tr -d :       <==嘿嘿! : 这个符号在 /etc/passwd 中不见了! 

[root @test /root]# cat /home/test/dostxt | tr -d '\r' > dostxt-noM   <==将 DOS 档案的字尾符号 ^M 的符号去除! 

说明: 

其实这个指令也能够写在『正规表示法』里头!由于他也是由正规表示法的方式来取代数据的!以上面的例子来讲,使用 [] 能够设定一串字呢!也经常用来取代档案中的怪异符号!例如上面第三个例子当中,能够去除 DOS 档案留下来的 ^M 这个断行的符号!这东西至关的有用!相信处理 Linux & Windows 系统中的人们最麻烦的一件事就是这个事情啦!亦便是 DOS 底下会自动的在每行行尾加入 ^M 这个断行符号!这个时候咱们可使用这个 tr 来将 ^M 去除! ^M 可使用 \r 来代替之!


--------------------------------------------------------------------------------


split 

语法: [root @test /root ]# split [-bl] 输入档案 输出档案前导字符 

参数说明: 

-b  :以档案 size 来分 

-l  :以行数来分 

范例: 

[root @test /root]# split -l 5 /etc/passwd test   <==会产生 testaa, testab, testac... 等等的档案 

说明: 

在 Windows 的状况下,你要将档案分割须要如何做?!伤脑筋吧!呵呵!在 Linux 底下就简单的多了!你要将档案分割的话,那么就使用 -b size 来将一个分割的档案限制其大小,若是是行数的话,那么就使用 -l line 来分割!好用的很!如此一来,你就能够轻易的将你的档案分割成 floppy 的大小,方便你 copy 啰!

管线命令在 bash 的连续的处理程序中是至关重要的!另外,在 log file 的分析当中也是至关重要的一环,因此请特别留意!好嘛!?

相关文章
相关标签/搜索