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

管线命令 ( pipe )

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

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

执行 last ,将所有这个月的所有人登入数据取出来;

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

使用 wc 这个可以计算行数的指令将上一步的数据计算行数!

由于 last 的输出是一行代表一次登入,所以只要计算几行就代表登入几次的意思,所以啰!经由上面三个步骤,将 last 数据逐步的筛选,就可以得到我们的数据了!整个命令可以写成如下:

  [test @test bin]# last

[test @test bin]# last | grep root

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

 

你可以分别执行『 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 的分析当中也是相当重要的一环,所以请特别留意!好嘛!?

时间: 2024-11-05 18:36:21

Linux学习资料-管线命令 ( pipe )的相关文章

第十一章、认识与学习 BASH 管线命令 (pipe)

管线命令使用『 | 』界定符号 [[email protected] ~]# ls -al /etc | less 管线命令『 | 』仅能处理经由前面一个命令传来的正确信息,也就是 standard output 的信息,对于 stdandard error 并没有直接处理的能力. 图 6.1.1. 管线命令的处理示意图 管线命令仅会处理 standard output,对于 standard error output 会予以忽略 管线命令必须要能够接受来自前一个命令的输出数据成为 standa

Linux学习资料-scp命令

scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来.另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了.虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用. 1.命

Linux学习资料-more命令详解

more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能 .more命令从前向后读取文件,因此在启动时就加载整个文件. 1.命令格式: more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ] 2.命令功能: more命令和cat的功能一样都

Linux学习资料-基础正规表示法(grep)

基础正规表示法:   -------------------------------------------------------------------------------- grep 语法: [root @test /root ]# grep [-acinv] '搜寻字符串' filename 参数说明: -a :将 binary 档案以 text 档案的方式搜寻数据 -c :计算找到 '搜寻字符串' 的次数 -i :忽略大小写的不同,所以大小写视为相同 -n :顺便输出行号 -v :

Linux学习资料整理

Shell Linux Shell脚本教程:30分钟玩转Shell脚本编程 Bash Shell字符串操作小结 vi vim使用 vi.vim删除以及其他命令 Vim静态模板文件 打造自己的vim界面 命令 linux中grep命令的用法 linux之sort用法 gawk gawk手册 Common threads: Awk by example, Part 1 sed sed命令用法详解 Linux学习资料整理

linux学习资料持续更新中

一.LINUX基础教程 1.老男孩系列免费视频: 1) linux高薪入门实战视频教程(第二部)老男孩linux教程 http://edu.51cto.com/course/course_id-1035-page-1.html 2) 跟着老男孩从0开始一步步实战深入学习linux运维(三) http://edu.51cto.com/lesson/id-11909.html linux学习资料持续更新中,布布扣,bubuko.com

linux学习笔记-type命令

语法: type [-tpa] name 参数: type:    不加任何参数时,type会显示出name是外部命令还是内部bash内置命令 -t:      当加入-t参数时,type会将name以下面这些字眼显示出它的意义 file:表示为外部命令 alias:表示该命令为命令别名所设置的名称 builtin:表示该命令为bash内置的命令功能 -p:     如果后面接的name为外部命令时,才显示完整文件名 -a:     会有path变量定义的路径中,将所有含有name的命令都列出来

Linux学习之touch命令

Linux学习之touch命令 Linux的touch命令一般用来更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件. 1.命令格式: touch [选项]... 文件... 2.命令参数: -a   或--time=atime或--time=access或--time=use 只更改存取时间. -c   或--no-create 不建立任何文档. -d 使用指定的日期时间,而非现在的时间. -f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题. -

linux 学习2 常用命令

1.显示日期的指令: date 2.   [Tab]按键---具有『命令补全』不『档案补齐』的功能 3:  su和 sudo  su用于用户之间的切换.  su在不加任何参数,默认为切换到root用户; su 加参数 - ,表示默认切换到root用户,并且改变到root用户的环境: sudo用于普通用户可以使用root权限来执行指定命令. sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.不过有时间限制,Ubuntu默认为一次时长