Linux中的管道和过滤器

管道和过滤器

管道

Shell可以将两个或多个程序连接到一起,以使一个程序的输出变成另一个程序的输入,这种方式连接的两个或者多个程序就形成了管道。管道通常用于执行一些复杂的数据处理操作。这些命令之间使用控制操作符(管道符)"|"连接。

管道的语法格式:

command1 | command2
command1 | command2 [ commandN... ]

操作符"|"与">"的区别

">"是将第一个命令的输出写入到后面的文件或者特定文件描述符指定的文件中。如:

[root@rs1 ~]# ls > less
[root@rs1 ~]# ls
anaconda-ks.cfg  httpd-2.4.6-45.el7.x86_64.rpm  less
[root@rs1 ~]# cat less 
anaconda-ks.cfg
httpd-2.4.6-45.el7.x86_64.rpm
less

ls命令将当前目录所有的文件/目录名都输出,由重定向操作符">"写入到less文件中。

"|"是将第一个命令的输出作为输入,用第二个命令去处理。如:

[root@rs1 ~]# ls | cat
anaconda-ks.cfg
httpd-2.4.6-45.el7.x86_64.rpm
less
[root@rs1 ~]# ls
anaconda-ks.cfg  httpd-2.4.6-45.el7.x86_64.rpm  less

ls命令将当前目录所有的文件/目录名都输出,cat命令将ls的输出结果作为输入,去执行,打印结果到终端。

为什么要使用管道

管道是进程间通信的方式之一,Shell使用管道的原因:

  1. 命令的与发紧凑并且简单

  2. 使用管道,将多个命令串连到一起,有时候可以完成命令单独执行不方便或者不能完成的复杂任务

  3. 从管道输出的标准错误会混合到一起

使用管道连接程序

实例1:使用管道可以查看指定进程的运行状态,如果加上输出重定向,还可以将指定结果输出到某个文件中。如:

[root@rs1 ~]# ps -ax | grep httpd > httpd.state
[root@rs1 ~]# cat httpd.state 
 1930 ?        Ss     0:00 /usr/sbin/httpd -DFOREGROUND
 1931 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
 1932 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
 1933 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
 1934 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
 1935 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
 1941 pts/2    R+     0:00 grep --color=auto httpd

实例2:显示按用户名排序后的当前登陆系统的用户信息

[root@rs1 ~]# w | sort
 00:59:50 up 9 min,  4 users,  load average: 0.00, 0.01, 0.03
root     pts/0     00:51    8:26   0.00s  0.00s -bash
root     pts/1     00:51    8:06   0.00s  0.00s -bash
root     pts/2     00:51    6.00s  0.01s  0.00s w
root     pts/3     00:51    8:11   0.00s  0.00s -bash
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT

w命令的输出作为sort命令的输入,从而将用户按顺序排列。

实例3:统计当前系统中登陆用户数

[root@rs1 ~]# who | wc -l
4

实例4:查看系统中安装的glibc包的版本

[root@rs1 ~]# rpm -qa |grep glibc
glibc-2.17-55.el7.x86_64
glibc-common-2.17-55.el7.x86_64

实例5:以比较容易读取格式,显示系统中挂载的伪文件系统信息

[root@rs1 ~]# mount | grep "proc" | column -t
proc       on  /proc                     type  proc    (rw,nosuid,nodev,noexec,relatime)
systemd-1  on  /proc/sys/fs/binfmt_misc  type  autofs  (rw,relatime,fd=32,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)

实例6:将一个列文件中的内容转换为一行

[root@rs1 ~]# cat less 
anaconda-ks.cfg
httpd-2.4.6-45.el7.x86_64.rpm
less
[root@rs1 ~]# cat less | tr '\n' ' ' | xargs
anaconda-ks.cfg httpd-2.4.6-45.el7.x86_64.rpm less

实例7:生成一个7位的随机密码

[root@rs1 ~]# tr -dc A-Za-z0-9_ < /dev/urandom | head -c7 | xargs 
P2v1y_x

管道中的输入重定向

输入重定向操作符"<"可以在管道中使用,用来从文件中获取输入。其语法:

command1 < input.txt | command2

如:使用tr命令从less文件中获取输入,然后通过管道将输出发送给sort命令:

[root@rs1 ~]# cat less 
anaconda-ks.cfg
httpd-2.4.6-45.el7.x86_64.rpm
less
less
​
[root@rs1 ~]# tr a-z A-Z < less | sort
ANACONDA-KS.CFG
HTTPD-2.4.6-45.EL7.X86_64.RPM
LESS
LESS
​
[root@rs1 ~]# tr a-z A-Z < less | sort | uniq
ANACONDA-KS.CFG
HTTPD-2.4.6-45.EL7.X86_64.RPM
LESS

使用管道中的输出重定向

可以使用重定向操作符">"或">>"将管道中最后一个命令的标准输出进行重定向。语法:

command1 | command2 | ... | commandN > output_file
command1 < input_file | command2 | ... | commandN > output_file

如:使用who命令显示当前登陆的用户,并使用sort命令排序,最后保存到指定文件中。

[root@rs1 ~]# who | sort > who.txt
[root@rs1 ~]# cat who.txt 
root     pts/0        2018-07-15 00:51 (fsx)
root     pts/1        2018-07-15 00:51 (fsx)
root     pts/2        2018-07-15 00:51 (fsx)
root     pts/3        2018-07-15 00:51 (fsx)

过滤器

将几个命令通过管道符组合在一起就形成了管道。通常,通过这种方式使用的命令就被称为过滤器。过滤器会获取输入,通过某种方式修改其内容,然后将其输出。

简单的说,过滤器有如下特点:

  1. 如果一个LInux命令是从标准输入接收它的输入数据,并在标准输出上产生他的输出,这个命令就被称为过滤器

  2. 过滤器通常和Linux管道一起使用

常用的被作为过滤器的命令如下:

命令作用
awk用于文本处理的解释性程序设计语言,通常作为数据提取和报告的工具
cut用于将每个输入文件的每行指定部分输出到标准输出
grep用于搜索一个或多个文件中匹配指定模式的行
tar用于归档文件的应用程序
head用于读取文件的开头部分。如果没有指定文件,则从标准输入读取
paste用于合并文件的行
sed用于过滤和转换文本的流编辑器
sort用于对文本文件的行进行排序
split用于将文件分割分块
strings用于打印文件中可打印的字符串
tac与cat命令功能相反,用于倒序显示文件或连接文件
tail用于显示文件的结尾部分
tee用于从标准输入读取内容并写入到标准输出和文件
tr用于转换或删除字符
uniq用于报告或忽略重复行
wc用于打印文件中的总行数、单词数或字节数

在管道中使用awk命令

实例1:查看系统中所有帐号的名称,并按名称的字母数须排序。

[root@rs1 ~]# awk -F: '{print $1}' /etc/passwd | sort
adm
apache
avahi
avahi-autoipd
bin
daemon
dbus
ftp
games
halt
kiosk
lp
mail
nobody
operator
polkitd
postfix
root
shutdown
sshd
sync

":"为列分割符,将文件/etc/passwd内容分为多列,并打印到第一列的信息,通过管道发送给sort命令

实例2:查看当前帐号最常用的10个命令

[root@rs1 ~]# history | awk '{print $2}' | sort | uniq -c | sort -rn | head
    255 vim
    222 bash
    204 ls
     58 cd
     54 cat
     19 crontab
     17 rm
     14 tr
     12 sed
     11 echo

histroty命令将输出通过管道发送给awk,awk命令默认使用空格作为列分割符,将history的输出分为两列,将第二列的内容作为输出通过管道符发送给sort命令,sort排序后,将输出通过管道符号发送给uniq命令,uniq命令统计历史命令的出现次数,再用sort将uniq命令处理的输出按照重复次数从高到底排序,最后传递给head命令,head列出前10个(默认是10个)。

实例3:西那是当前系统的内存大小,单位为KB

[root@rs1 ~]# free | grep Mem | awk '{print $2}'
501884

在管道中使用cut命令

cut命令被用于文本处理,可以使用cut来提取文件中指定的列内容。

实例1:查看系统中登陆Shell是"/bin/bash"的用户名和对应的用户主目录信息

[root@rs1 ~]# grep "/bin/bash" /etc/passwd | cut -d: -f1,6
root:/root
kiosk:/home/kiosk

/etc/passwd中以":"分割,第一个字段是帐号的账户名,第六个字段是主目录的路径

实例2:查看当前即其的CPU类型

[root@rs1 ~]# cat /proc/cpuinfo | grep name | cut -d: -f2 | uniq
 Intel Xeon E312xx (Sandy Bridge)
或者: 
[root@rs1 ~]# lscpu | grep "Model name" | cut -d: -f2
            Intel Xeon E312xx (Sandy Bridge)

实例3:查看当前目录下子目录的个数

[root@rs1 mnt]# ls -l | cut -c 1 | grep d |wc -l
10

这里解释:

  • ls -l输出的内容,每行的第一个字符表示文件类型,如果是d,则表示是目录

  • cut -c 1是截取每行的第一个字符

  • grep d是获取文件类型为目录的行

  • wc -l是统计grep输出的行数,即目录个数

在管道中使用grep命令

grep是管道中十分常用的一个命令。

实例1:查看系统中HTTP服务的进程信息

[root@rs1 mnt]# ps -ax | grep httpd
 1930 ?        Ss     0:00 /usr/sbin/httpd -DFOREGROUND
 1931 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
 1932 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
 1933 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
 1934 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
 1935 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
 2200 pts/3    R+     0:00 grep --color=auto httpd

实例2:差早承袭列表中所有包含zip关键字的命令

[root@rs1 mnt]# ls /usr/bin/ /bin/ | sort | uniq | grep zip
gpg-zip
gunzip
gzip

实例3:查看系统安装的kernal版本和相关的kernel软件包

[root@rs1 mnt]# rpm -qa | grep kernel
kernel-3.10.0-123.el7.x86_64
kernel-tools-3.10.0-123.el7.x86_64
kernel-tools-libs-3.10.0-123.el7.x86_64

实例4:查到/etc目录下所有包含IP地址的文件

[root@rs1 mnt]# 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命令复制一个目录的整体结构

[root@rs1 mnt]# tar cf - /mnt/ | (cd /backup; tar xf -)

实例2:检查tar归档文件的大小

[root@rs1 mnt]# cd /;tar cf - etc | wc -c
18554880

实例3:检查tar归档文件压缩为tar.gz归档文件后大小

[root@rs1 ~]# tar czf - fsx.tar | wc -c
2367404
[root@rs1 ~]# tar czf - fsx.tar | du -sh
4.8M    .

实例4:检查tar归档文件压缩为tar.bz2归档后文件所占大小

[root@rs1 ~]# tar cjf - fsx.tar | wc -c
2386060
[root@rs1 ~]# tar cjf - fsx.tar | du -sh 
4.8M    .

在管道中使用head命令

head命令可以指定只打印出前几行输出,默认为10行

实例1:显示ls命令前3行输出

[root@rs1 ~]# ls
anaconda-ks.cfg  fsx  fsx.tar  httpd-2.4.6-45.el7.x86_64.rpm  httpd.state  less  sort.txt  who.txt
[root@rs1 ~]# ls | head -n 3
anaconda-ks.cfg
fsx
fsx.tar

在管道中使用paste命令

paste命令用于合并文件的行,也可以通过管道接受其他命令的输出,并对其内容进行相应的合并处理

实例1:通古管道将file1文件和cat命令的输出合并

[root@rs1 ~]# cat file1 | paste -d, - file2 
fsx,狗肉
coco,狗肉汤
,coco
,zzz
[root@rs1 ~]# cat file1 
fsx
coco
[root@rs1 ~]# cat file2
狗肉
狗肉汤
coco
zzz

实例2:通过管道使用paste命令将ls命令分成4列显示

[root@rs1 ~]# ls | paste -d\\t - - - - 
anaconda-ks.cfg file1   file2   fsx
fsx.tar httpd-2.4.6-45.el7.x86_64.rpm   httpd.state less
sort.txt    who.txt     

在管道中使用sed命令

sed命令是流编辑器的简称

实例1:替换打印的输出文本中的内容(将所有"f"字符替换成汉字"范")

[root@rs1 ~]# ls
anaconda-ks.cfg  file1  file2  fsx  fsx.tar  httpd-2.4.6-45.el7.x86_64.rpm  httpd.state  less  sort.txt  who.txt
[root@rs1 ~]# ls | sed 's/f/范/'
anaconda-ks.c范g
范ile1
范ile2
范sx
范sx.tar
httpd-2.4.6-45.el7.x86_64.rpm
httpd.state
less
sort.txt
who.txt

实例2:显示/etc/paaaswd文件中除第3~10行意外的内容

[root@rs1 ~]# cat -n /etc/passwd | sed '3,10d'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
    11  games:x:12:100:games:/usr/games:/sbin/nologin
    12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13  nobody:x:99:99:Nobody:/:/sbin/nologin
    14  dbus:x:81:81:System message bus:/:/sbin/nologin
    15  polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    16  avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
    17  avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
    18  postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    19  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    20  kiosk:x:1000:1000:kiosk:/home/kiosk:/bin/bash
    21  apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

实例3:只显示/etc/passwd文件3~10行内容

[root@rs1 ~]# cat -n /etc/passwd | sed -n '3,10p'
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin

在管道中使用sort命令

sort命令用于对文本内容按行进行排序,也可以通过管道对一个命令的输出进行排序

实例1:将ls命令列出的文件按大小排序

[root@rs1 ~]# ls -l | sort -r -n -k5
-rw-r--r--  1 root root 2478080 Jul 15 14:21 fsx.tar
-rw-------. 1 root root 1239040 Jul 15 14:16 anaconda-ks.cfg
-r--r--r--  1 root root 1226816 Jul 10 23:05 httpd-2.4.6-45.el7.x86_64.rpm
-rw-r--r--  1 root root     387 Jul 15 00:59 httpd.state
-rw-r--r--  1 root root     180 Jul 15 01:24 who.txt
-rw-r--r--  1 root root      51 Jul 15 01:20 sort.txt
-rw-r--r--  1 root root      26 Jul 15 14:28 file2
-rw-r--r--  1 root root       9 Jul 15 14:27 file1
-rw-r--r--  1 root root       8 Jul 15 02:35 less
-rw-r--r--  1 root root       8 Jul 15 02:35 fsx
total 4860

实例2:将ps命令输出按pid大小,罗列前10个

[root@rs1 ~]# ps -ax | sort -n | head
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
    2 ?        S      0:00 [kthreadd]
    3 ?        S      0:00 [ksoftirqd/0]
    5 ?        S<     0:00 [kworker/0:0H]
    7 ?        S      0:00 [migration/0]
    8 ?        S      0:00 [rcu_bh]
    9 ?        S      0:00 [rcuob/0]
   10 ?        R      0:00 [rcu_sched]
   11 ?        S      0:00 [rcuos/0]

在管道中使用split命令

split命令将文件分割成块,也可以通过管道将其他命令输出的内容分割成指定大小的块,并存入指定前缀的文件中

实例1:将ls命令的输出按每5行为一块,存入文件名前缀为lsroot的文件中

[root@rs1 ~]# ls | split -l 5 - lsroot
[root@rs1 ~]# ls lsroota*
lsrootaa  lsrootab  lsrootac
[root@rs1 ~]# cat lsroota
lsrootaa  lsrootab  lsrootac  
[root@rs1 ~]# cat lsrootaa | wc -l
5
[root@rs1 ~]# cat lsrootab | wc -l
5
[root@rs1 ~]# cat lsrootab
httpd-2.4.6-45.el7.x86_64.rpm
httpd.state
less
lsrootaa
lsrootab

实例2:将backup目录按每5兆大小进行打包压缩,生成的压缩包文件名前缀为backup.tar.gz

[root@rs1 ~]# tar czf - etc | split -b 2m - backup.tar.gz.
[root@rs1 ~]# ls
anaconda-ks.cfg   backup.tar.gz.ac  file1  fsx.tar                        less      lsrootac
backup.tar.gz.aa  backup.tar.gz.ad  file2  httpd-2.4.6-45.el7.x86_64.rpm  lsrootaa  sort.txt
backup.tar.gz.ab  etc               fsx    httpd.state                    lsrootab  who.txt
[root@rs1 ~]# du -sh backup.tar.gz.a*
2.0M    backup.tar.gz.aa
2.0M    backup.tar.gz.ab
2.0M    backup.tar.gz.ac
320K    backup.tar.gz.ad

在管道中使用strings命令

strings命令用于打印文件中的可打印字符串,常用来与grep命令配合使用,在二进制文件中查找字符串

实例1:查找uptime命令中GLIBC字符串

[root@rs1 ~]# strings /usr/bin/uptime | grep GLIBC
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.2.5

实例2:打印系统的BIOS信息

[root@localhost mnt]# dd if=/dev/mem bs=1k skip=768 count=256 | strings -n 32 
2089Intel(R)Sandybridge Mobile PCI Accelerated SVGA BIOS
Build Number: 2089(768_960) PC 14.34  10/30/2010  03:43:33
DECOMPILATION OR DISASSEMBLY PROHIBITED
Copyright (C) 2000-2003 Intel Corp. All Rights Reserved.
LFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelName
LFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelName+a
Intel(R)Sandybridge Mobile Graphics Chipset Accelerated VGA BIOS
Intel(R)Sandybridge Mobile Graphics Controller
XXZZZ\\\```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqq}}}~~~
256+0 records in
256+0 records out
262144 bytes (262 kB) copied, 0.00221095 s, 119 MB/s
Phoenix Technology Ltd. Generic MP driver. Rev. 02, 12/06/2006
Boot From Floppy...$Boot From Hard Disk...$Boot From CD/DVD ROM...$Boot From PCMCIA...$Boot From USB...$Boot From Embedded Network...$Boot From BEV Device...$!!! UNSUPPORTED !!!$Booting BCV Device ## - Floppy$Booting BCV Device ## - Hard Disk$Booting BCV Device ## - CD/DVD$Booting BCV Device ## - PCMCIA/ExpressCard$Booting BCV Device ## - USB$Booting BEV Device ## - Network$Booting BEV Device ##$Calling INT 19h$Returned INT 19h$Copyright (c) 2007-2010 Phoenix Technologies Ltd.
This program contains proprietary and confidential information.
All rights reserved except as may be permitted by prior written
$DISK BOOT FAILURE, INSERT SYSTEM DISK AND PRESS ENTER$`
IDE HBA ver1.00 PHOENIX Tech Ltd                
(C) COPYRIGHT LENOVO 2005, 2010 ALL RIGHTS RESERVED
IBM COMPATIBLE 486 BIOS COPYRIGHT Phoenix Technologies, Ltd

在管道中使用tail命令

tail命令用于打印文件的最后几行,和head相反。也可以用管道显示其他命令输出的最后即行内容。

实例1:显示ls命令输出的最后3行

[root@rs1 ~]# ls | tail -n 3
lsrootac
sort.txt
who.txt

实例2:显示/etc/passwd文件中UID最高的用户信息

[root@rs1 ~]# sort /etc/passwd -t: -k3 -n | tail -n1
kiosk:x:1000:1000:kiosk:/home/kiosk:/bin/bash

在管道中使用tee命令

tee命令用于存储和查看任意其他命令的输出。使用tee命令,你可以从一个输入流读取输入,并分割输出流到两个重定向,所以输出既显示在屏幕,又重定向到文件中。

实例1:使用ls命令显示目录以file开头的文件列表,并重定向到/tmo/ls.output文件中

[root@rs1 ~]# ls file* | tee /tmp/ls.out 
file1
file2
[root@rs1 ~]# cat /tmp/ls.out 
file1
file2

实例2:在管道中的不同阶段存储命令中间结果

[root@rs1 ~]# ls | tee /tmp/ls.out | grep ^b | tee /tmp/stage2.txt | sort -r
backup.tar.gz.ad
backup.tar.gz.ac
backup.tar.gz.ab
backup.tar.gz.aa
[root@rs1 ~]# cat /tmp/ls.out 
anaconda-ks.cfg
backup.tar.gz.aa
backup.tar.gz.ab
backup.tar.gz.ac
backup.tar.gz.ad
etc
file1
file2
fsx
fsx.tar
httpd-2.4.6-45.el7.x86_64.rpm
httpd.state
less
lsrootaa
lsrootab
lsrootac
sort.txt
who.txt
[root@rs1 ~]# cat /tmp/stage2.txt 
backup.tar.gz.aa
backup.tar.gz.ab
backup.tar.gz.ac
backup.tar.gz.ad

首先ls命令罗列除当前目录所有内容,然后将输出存储到/tmp/ls_outfile中。再通过grep命令过滤出b开头的文件,将输出传递给第二个tee命令,输出到终端,并保存只/tmp/stage2.txt文件中,并将输出(这里输出的只是终端显示的部分,保存至stage2.txt文件中的内容不再作为输出通过管道)使用sort反响排序。

在管道中使用tr命令

tr命令用于转换和删除字符

实例1:将所有的空白字符转换为制表符

[root@rs1 ~]# echo "This is for testing" | tr [:space:] '\t'
This    is  for testing

实例2:删除前一个命令输出中的所有数字

[root@rs1 ~]# echo "This is for testing 1235" | tr -d [:digit:]
This is for testing 

实例3:将前一个命令输出中的所有字符转换为大写,并排序,使用tee显示终端并保存至file1.txt文件中

[root@rs1 ~]# cat file1 | tr a-z A-Z | sort | tee file1.txt
COCO
FSX
[root@rs1 ~]# cat file1.txt 
COCO
FSX

在管道中使用wc命令

wc命令用于统计在文本流中的字符数、单字数或字节数等

实例1:统计当前登陆到系统的用户数

[root@rs1 ~]# who | wc -l
4
[root@rs1 ~]# who
root     pts/0        2018-07-15 00:51 (fsx)
root     pts/1        2018-07-15 00:51 (fsx)
root     pts/2        2018-07-15 00:51 (fsx)
root     pts/3        2018-07-15 00:51 (fsx)

实例2:统计当前的Linux系统中的进程数

[root@rs1 ~]# ps -ef | wc -l
98
[root@rs1 ~]# ps -ax | wc -l
98

小结

  1. 管道:将两个或多个程序连接到一起,使得一个程序的输出作为下一个程序的输入,这样连接的两个或多个程序形成了管道

  2. 重定向符是将命令和文件连接,管道是将多个命令连接到一起

  3. 管道有一些特点:

    1. 命令的语法紧凑并使用简单

    2. 多个命令串连,完成复杂任务

    3. 管道输出的标准错误会混合到一起

  4. 几个命令组合在一起,形成一个管道,这种方式使用的命令通常称之为过滤器

  5. 如果Linux命令是从标准输入接收数据,并在标准输出上显示数据,这个命令就被称之为过滤器

  6. 过滤器通常和Linux管道一起使用


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值