我们己经知道,将几个命令通过管道符组合在一起就形成一个管道。通常,通过这种方式使用的命令就被称为过滤器。过滤器会获取输入,通过某种方式修改其内容,然后将其输出。
简单地说,过滤器可以概括为以下两点:
- 如果一个 Linux 命令是从标准输入接收它的输入数据,并在标准输出上产生它的输出数据(结果),那么这个命令就被称为过滤器。
- 过滤器通常与 Linux 管道一起使用。
常用的被作为过滤器使用的命令如下所示:
接下来,我们通过几个实例来演示一下过滤器的使用。
在管道中使用 awk 命令
关于 awk 命令的具体用法,请大家自行学习,本节我们我们仅通过几个简单的实例来了解一下 awk 命令在管道中的使用。
实例1
查看系统中的所有的账号名称,并按名称的字母顺序排序。
[jb51.net]$ awk -F: '{print $1}' /etc/passwd | sort adm apache avahi avahi-autoipd bin daemon dbus ftp games ...
在上例中,使用冒号:作为列分隔符,将文件 /etc/passwd 的内容分为了多列,并打印了第一列的信息(即用户名),然后将输出通过管道发送到了 sort 命令。
实例2
列出当前账号最常使用的 10 个命令。
[jb51.net]$ history | awk '{print $2}' | sort | uniq -c | sort -rn | head 140 echo 75 man 71 cat 63 su 53 ls 50 vi 47 cd 40 date 26 let 25 paste
在上例中,history 命令将输出通过管道发送到 awk 命令,awk 命令默认使用空格作为列分隔符,将 history 的输出分为了两列,并把第二列内容作为输出通过管道发送到了 sort 命令,使用 sort 命令进行排序后,再将输出通过管道发送到了 uniq 命令,使用 uniq 命令 统计了历史命令重复出现的次数,再用 sort 命令将 uniq 命令的输出按照重复次数从高到低排序,最后使用 head 命令默认列出前 10 个的信息。
实例3
显示当前系统的总内存大小,单位为 KB。
[jb51.net]$ free | grep Mem | awk '{print $2}' 2029860
在管道中使用 cut 命令
cut 命令被用于文本处理。你可以使用这个命令来提取文件中指定列的内容。
实例1
查看系统中登录 Shell 是“/bin/bash”的用户名和对应的用户主目录的信息:
[jb51.net]$ grep "bin/bash" /etc/passwd | cut -d: -f1,6 root:/root mozhiyan:/home/mozhiyan
如果你对 Linux 系统有所了解,你会知道,/ctc/passwd 文件被用来存放用户账号的信息,此文件中的每一行会记录一个账号的信息,每个字段之间用冒号分隔,第一个字段即是账号的账户名,而第六个字段就是账号的主目录的路径。
实例2
查看当前机器的CPU类型。
[jb51.net]$ cat /proc/cpuinfo | grep name | cut -d: -f2 | uniq Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz
上例中,执行命令cat /proc/cpuinfo | grep name得到的内容如下所示:
[jb51.net]$ cat /proc/cpuinfo | grep name model name : Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz model name : Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz model name : Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz model name : Intel(R) Core(TM) i5-2520M CPU 0 2.50GHz
然后,我们使用 cut 命令将上述输出内容以冒号作为分隔符,将内容分为了两列, 并显示第二列的内容,最后使用 uniq 命令去掉了重复的行。
实例3
查看当前目录下的子目录数。
[jb51.net]$ ls -l | cut -c 1 | grep d | wc -l 5
上述管道命令主要做了如下操作:
- 命令ls -l输出的内容中,每行的第一个字符表示文件的类型,如果第一个字符是d,就表示文件的类型是目录。
- 命令cut -c 1是截取每行的第一个字符。
- 命令grep d来获取文件类型是目录的行。
- 命令wc -l用来获得 grep 命令输出结果的行数,即目录个数。
在管道中使用grep命令
grep 命令是在管道中比较常用的一个命令。
实例1
查看系统日志文件中的错误信息。
[jb51.net]$ grep -i "error:" /var/log/messages | less
实例2
查看系统中 HTTP 服务的进程信息。
[jb51.net]$ ps auxwww | grep httpd apache 18968 0.0 0.0 26472 10404 "htmlcode">[jb51.net]$ ls /bin /usr/bin | sort | uniq | grep zip bunzip2 bzip2 bzip2recover gunzip gzip实例4
查看系统安装的 kernel 版本及相关的 kernel 软件包。
[jb51.net]$ rpm -qa | grep kernel kernel-2.6.18-92.e15 kernel-debuginfo-2.6.18-92.e15 kernel-debuginfo-common-2.6.18-92.e15 kernel-devel-2.6.18-92.e15实例5
查找 /etc 目录下所有包含 IP 地址的文件。
[jb51.net]$ find /etc -type f -exec grep '[0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*' {} \;在管道中使用 tar 命令
tar 命令是 Linux 系统中最常用的打包文件的程序。
实例1
你可以使用 tar 命令复制一个目录的整体结构。
[jb51.net]$ tar cf - /home/mozhiyan | ( cd /backup/; tar xf - )实例2
跨网络地复制一个目录的整体结构。
[jb51.net]$ tar cf - /home/mozhiyan | ssh remote_host "( cd /backup/; tar xf - )"实例3
跨网络地压缩复制一个目录的整体结构。
[jb51.net]$ tar czf - /home/mozhiyan | ssh remote_host "( cd /backup/; tar xzf - )"实例4
检査 tar 归档文件的大小,单位为字节。
[jb51.net]$ cd /; tar cf - etc | wc -c 215040实例5
检查 tar 归档文件压缩为 tar.gz 归裆文件后所占的大小。
[jb51.net]$ tar czf - etc.tar | wc -c 58006实例6
检查 tar 归档文件压缩为 tar.bz2 归裆文件后所占的大小。
[jb51.net]$ tar cjf - etc.tar | wc -c 50708在管道中使用 head 命令
有时,你不需要一个命令的全部输出,可能只需要命令的前几行输出。这时,就可以使用 head 命令,它只打印命令的前几行输出。默认的输出行数为 10 行。
实例1
显示 ls 命令的前 10 行输出。
[jb51.net]$ ls /usr/bin | head addftinfo afmtodit apropos arch ash awk base64 basename bash bashbug实例2
显示 ls 命令的前 5 行内容。
[jb51.net]$ ls / | head -n 5 bin cygdrive Cygwin.bat Cygwin.ico Cygwin-Terminal.ico在管道中使用 uniq 命令
uniq 命令用于报告或删除重复的行。我们将使用一个测试文件进行管道中使用 uniq 命令的实例讲解,其内容如下所示:
[jb51.net]$ cat testfile This line occurs only once. This line occurs twice. This line occurs twice. This line occurs three times. This line occurs three times. This line occurs three times.实例1
去掉输出中重复的行。
[jb51.net]$ sort testfile | uniq This line occurs only once. This line occurs three times. This line occurs twice.实例2
显示输出中各重复的行出现的次数,并按次数多少倒序显示。
[jb51.net]$ sort testfile | uniq -c | sort -nr 3 This line occurs three times. 2 This line occurs twice. 1 This line occurs only once.在管道中使用 wc 命令
wc 命令用于统计包含在文本流中的字符数、单同数和行数。
实例1
统计当前登录到系统的用户数。
[jb51.net]$ who | wc -l实例2
统计当前的 Linux 系统中的进程数。
[jb51.net]$ ps -ef | wc -l
Shell过滤器
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]