管道和过滤器

管道

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 -DFOREGROUND1931 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND1932 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND1933 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND1934 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND1935 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND1941 pts/2    R+     0:00 grep --color=auto httpd

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

[root@rs1 ~]# w | sort00: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 | head255 vim222 bash204 ls58 cd54 cat19 crontab17 rm14 tr12 sed11 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 | uniqIntel Xeon E312xx (Sandy Bridge)
或者:
[root@rs1 ~]# lscpu | grep "Model name" | cut -d: -f2Intel 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 httpd1930 ?        Ss     0:00 /usr/sbin/httpd -DFOREGROUND1931 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND1932 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND1933 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND1934 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND1935 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND2200 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.cfgfile1file2fsx
fsx.tarhttpd-2.4.6-45.el7.x86_64.rpmhttpd.stateless
sort.txtwho.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'1root:x:0:0:root:/root:/bin/bash2bin:x:1:1:bin:/bin:/sbin/nologin11games:x:12:100:games:/usr/games:/sbin/nologin12ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin13nobody:x:99:99:Nobody:/:/sbin/nologin14dbus:x:81:81:System message bus:/:/sbin/nologin15polkitd:x:999:998:User for polkitd:/:/sbin/nologin16avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin17avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin18postfix:x:89:89::/var/spool/postfix:/sbin/nologin19sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin20kiosk:x:1000:1000:kiosk:/home/kiosk:/bin/bash21apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

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

[root@rs1 ~]# cat -n /etc/passwd | sed -n '3,10p'3daemon:x:2:2:daemon:/sbin:/sbin/nologin4adm:x:3:4:adm:/var/adm:/sbin/nologin5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6sync:x:5:0:sync:/sbin:/bin/sync7shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8halt:x:7:0:halt:/sbin:/sbin/halt9mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10operator: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 | headPID TTY      STAT   TIME COMMAND1 ?        Ss     0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 232 ?        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.0Mbackup.tar.gz.aa
2.0Mbackup.tar.gz.ab
2.0Mbackup.tar.gz.ac
320Kbackup.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'
Thisisfortesting

实例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管道一起使用

Linux中的管道和过滤器相关推荐

  1. 云计算设计模式(十五)——管道和过滤器模式

    云计算设计模式(十五)--管道和过滤器模式 分解,执行复杂处理成一系列可重复使用分立元件的一个任务.这种模式可以允许执行的处理进行部署和独立缩放任务元素提高性能,可扩展性和可重用性. 背景和问题 一个 ...

  2. django中自定义标签和过滤器

    django中自定义标签和过滤器 原文:http://www.cnblogs.com/MnCu8261/p/5934203.html 纪念如何填了半天的坑,红色重点 想要实现自定义标签和过滤器需要进行 ...

  3. Linux中的管道与重定向

    前言: 这篇博文主要参考了鸟哥的<鸟哥的Linux私房菜>和杨鹏(NetSnake)的<Linux服务器架设>这两本书,以及在网络上查阅的资料.此博文作为我阅读<鸟哥的L ...

  4. 管道和过滤器模式----POSA模式助记格式

    名称:管道和过滤器(Pipes and Filters) 问题: 处理数据流 1.步骤可替换 2.步骤比组件更易于重用 3.不相连的步骤不共享信息 4.存在不同的输入数据源 5.可以以多种方式给出或存 ...

  5. Flask Jinja2 模板中的变量和过滤器

    Flask Jinja2 模板中的变量和过滤器 Flask 可以在视图函数中返回模板文件,模板引擎默认使用的是 Jinja2 . 通常,返回的 Jinja2 模板文件并不是一个静态的页面,而是同时有静 ...

  6. Linux中的管道与连接符号

    文章目录 1. 背景 2. 输入输出重定向 2.1. 管道符号 `|` 2.2. 输出重定向符号 `>` 2.3. 输出重定向符号 `>>` 2.4. 输入重定向符号 `<` ...

  7. linux 同一进程内通信,linux中,管道能够在同一进程中进行通信吗?

    linux中,管道能够在同一进程中进行通信吗? 答案是否定的. 管道是用于不同进程之间通信,不能再同一进程中进行通信. 同一进程中,直接进行参数传递就行了,不设计通信问题. 不同进程之间才需要通信,通 ...

  8. 教程:7、管道和过滤器

    有时候,我们可以把两个命令连起来使用,一个命令的输出作为另一个命令的输入,这就叫做管道.为了建立管道,需要在两个命令之间使用竖线(|)连接. 管道是Linux进程之间一种重要的通信机制:除了管道,还有 ...

  9. Linux如何运行pipe1,Linux中的管道

    一.管道是进程间通信的一种重要手段,在linux中没有使用专门的数据结构,而是借助了文件系统的file结构和VFS索引节点inode.通过两个file结构指向同一个临时的VFS索引节点,而这个索引节点 ...

最新文章

  1. android 百分号,关于Android资源文件中出现百分号的问题
  2. 【Linux基础】第五周作业
  3. Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度
  4. Oracle对表空间操作的sql
  5. CentOS 6 系统启动流程
  6. java之struts2的执行流程讲解(1)
  7. 多线程矩阵乘法运算 c++
  8. CentOS 7 安装PHP7+Nginx+Mysql5.7开发环境
  9. Java之数组(上)
  10. win mysql编译_MySQL5.5在Windows7下编译的详细步骤
  11. 测试游戏平均帧率的软件,游戏帧数,游戏帧数测试软件
  12. Java实现 极光 im 聊天后台发送消息
  13. 顺序栈的实验报告c语言,顺序栈的基本操作(C语言)
  14. 下载王者荣耀皮肤高清图片
  15. jdk11手动安装jre
  16. 人机对话是怎么产生的?
  17. 助力 AI 银行发展 网易智企打造一站式金融服务
  18. Google GWT
  19. HTML——超文本标记语言
  20. java 虚拟机优化

热门文章

  1. 【前端修炼场】 — 这些标签你学会了么?快速拿下 “hr”
  2. ai怎么做波普风圆点_超实用AI描边小技巧:AI画一个圆点组成的圆
  3. 腾讯 在我过往人生中的一些记忆
  4. git错误: The requested URL returned error: 403 Forbidden while accessing https://github.com/wangz/futu
  5. Mysql面试题,sql优化,存储引擎,数据结构,基础知识等
  6. hdl_localization代码解析
  7. java迭代器删除元素_java迭代器中删除元素的操作
  8. QQ盗号软件后门分析与反击
  9. DEVONthink + Notion 搭建一个完美的知识管理体系
  10. POJ 1511 Invitation Cards(双向最短路)