• 1.管道命令的用法
  • 2.使用管道命令的好处:
  • 3.重定向和管道的区别
  • 4.Linux管道实例
  • 5.管道与重定向
    • 1)管道与输入重定向
    • 2)管道与输出重定向
  • 6.过滤器
  • 7.过滤器举栗

1.管道命令的用法

将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe)。管道使用竖线|连接多个命令,这被称为管道符。

Linux 管道的具体语法格式如下:

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

当在两个命令之间设置管道时,管道符|左边命令的输出就变成了右边命令的输入。只要第一个命令向标准输出写入,而第二个命令是从标准输入读取,那么这两个命令就可以形成一个管道。

这里需要注意,command1 必须有正确输出,而 command2 必须可以处理 command1 的输出结果;而且 command2 只能处理 command1 的正确输出结果,不能处理 command1 的错误信息。

2.使用管道命令的好处:

命令
作用

3条命令来备份数据库

mysqldump -u root -p '123456' wiki > /tmp/wikidb.backup

gzip -9 /tmp/wikidb.backup

scp /tmp/wikidb.backup username@remote_ip:/backup/mysql/

  • mysqldump 命令用于将wike数据库备份到文件 /tmp/wikidb.backup。
  • gzip 命令用于压缩较大的数据库文件以节省磁盘空间;其中-9表示最慢的压缩速度最好的压缩效果。
  • scp 命令用于将数据库备份文件复制到 IP 地址为 remote_ip 的备份服务器的 /backup/mysql/ 目录下。其中username是登录远程服务器的用户名,命令执行后需要输入密码。

使用管道命令

mysqldump -u root -p '123456' wiki | gzip -9 | ssh username@remote_ip "cat > /backup/wikidb.gz"

  • 命令的语法紧凑并且使用简单。
  • 通过使用管道,将三个命令串联到一起就完成了远程 mysql 备份的复杂任务。
  • 从管道输出的标准错误会混合到一起。
  • ssh username@remote_ip "cat > /backup/wikidb.gz"是将上个命令中生成的文件通过cat命令获取文件内容并保存到/backup/wikidb.gz中

3.重定向和管道的区别

乍看起来,管道也有重定向的作用,它也改变了数据输入输出的方向,那么,管道和重定向之间到底有什么不同呢?

简单地说,重定向操作符>将命令与文件连接起来,用文件来接收命令的输出;而管道符|将命令与命令连接起来,用第二个命令来接收第一个命令的输出。如下所示:

command > file
command1 | command1

4.Linux管道实例

 
 
输出
将 ls 命令的输出发送到 grep 命令,查看文件 log.txt 是否存在于当前目录下

ls | grep log.txt

log.txt
重定向管道的输出到一个文件

ls -al | grep log.txt >output.txt

cat output.txt

-rw-rw-r--. 1 mozhiyan mozhiyan 0 4月 15 17:26 log.txt

显示按用户名排序后的当前登录系统的用户的信息

who | sort

mozhiyan :0 2019-04-16 12:55 (:0)

mozhiyan pts/0 2019-04-16 13:16 (:0)

who 命令的输出将作为 sort 命令的输入,

所以这两个命令通过管道连接后会显示按照用户名排序的已登录用户的信息。

5.管道与重定向

1)管道与输入重定向

输入重定向操作符<可以在管道中使用,以用来从文件中获取输入,其语法类似下面这样:

command1 < input.txt | command2
command1 < input.txt | command2 -option | command3

功能
命令
输出
使用 tr 命令从 os.txt 文件中获取输入,然后通过管道将输出发送给 sort 或 uniq 等命令

cat os.txt

  • ddd
  • bbb
  • CCC
  • ccc

tr a-z A-Z <os.txt | sort

  • BBB
  • CCC
  • CCC
  • DDD

2)管道与输出重定向

你也可以使用重定向操作符>或>>将管道中的最后一个命令的标准输出进行重定向,其语法如下所示:

command1 | command2 | ... | commandN > output.txt
command1 < input.txt | command2 | ... | commandN > output.txt

功能
命令
输出

使用 tr 命令将 os.txt 文件中的内容转化为大写,并使用 sort 命令将内容排序,

使用 uniq 命令去除重复的行,最后将输出重定向到文件 ox.txt.new。

cat os.txt

  • ddd
  • bbb
  • CCC
  • ccc

tr a-z A-Z <os.txt | sort|uniq>os.txt.new

cat os.txt.new

  • BBB
  • CCC
  • DDD

6.过滤器

过滤器可以概括为两点:

  • 如果一个 Linux 命令是从标准输入接收它的输入数据,并在标准输出上产生它的输出数据(结果),那么这个命令就被称为过滤器。
  • 过滤器通常与 Linux 管道一起使用。

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

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

7.过滤器举栗

 
功能
命令
输出
知识点
 
功能
命令
输出
知识点
awk与管道结合 查看系统中的所有的账号名称,并按名称的字母顺序排序

awk -F: '{print $1}' /etc/passwd | sort|head -5

  • _apt
  • asample
  • backup
  • bin
  • daemon

-F: 以:作为分隔符,默认分隔符是空格

'{print $1}'打印第一列信息

  列出当前账号最常使用的 5个命令

history | awk '{print $2}' | sort | uniq -c | sort -rn | head -5

  • 17 cat
  • 14 vim
  • 11 sudo
  • 7 ll
  • 7 cd

uniq -c 在每列旁边显示该行重复出现的次数。

sort -rn 按照数值的大小反向排序

  显示当前系统的总内存大小,单位为 KB

free | grep Mem | awk '{print $2}'

2029860
free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer
cut 与管道命令结合 查看系统中登录 Shell 是/bin/bash的用户名和对应的用户主目录的信息

grep "bin/bash" /etc/passwd|cut -d : -f1,6

root:/root

roaddb:/home/roaddb

asample:/home/asample

/ctc/passwd 文件用来存放用户账号的信息,文件中的每一行会记录一个账号的信息,每个字段之间用冒号分隔,第一个字段即是账号的账户名,第六个字段就是账号的主目录的路径。

  查看当前机器的CPU类型

cat /proc/cpuinfo |grep name|cut -d : -f 2|uniq

Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz  
  查看当前目录下的子目录数

ls -l|cut -c 1|grep d|wc -l

4 命令cut -c 1是截取每行的第一个字符
grep命令 查看系统日志文件中的错误信息

grep -i "error:" /var/log/messages | less

 

grep -iv [指定字条串] [文件] 在文件中搜索字符串匹配的行并输出
-i 不区分大小写 -v 排除指定字符串

  查看系统中 HTTP 服务的进程信息

ps aux | grep httpd

   
  查找我们的程序列表中所有命令名中包含关键字 zip 的命令

ls /bin /usr/bin | sort | uniq | grep zip

  • bunzip2
  • bzip2
  • bzip2recover
  • funzip
  • gpg-zip
  • gunzip
 
  查找 /etc 目录下所有包含 IP 地址的文件

find /etc -type f -exec grep '[0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*' {} \;

   
tar命令 复制一个目录的整体结构

tar cf - /home/mozhiyan | ( cd /backup/; tar xf - )

   
  跨网络地复制一个目录的整体结构

tar cf - /home/mozhiyan | ssh remote_host "( cd /backup/; tar xf - )"

   
  跨网络地压缩复制一个目录的整体结构

tar czf - /home/mozhiyan | ssh remote_host "( cd /backup/; tar xzf - )"

   
  检査 tar 归档文件的大小,单位为字节

cd /; tar cf - etc | wc -c

   
  检查 tar 归档文件压缩为 tar.gz 归裆文件后所占的大小

tar czf - etc.tar | wc -c

   
  检查 tar 归档文件压缩为 tar.bz2 归裆文件后所占的大小

tar cjf - etc.tar | wc -c

   
head 命令 显示 ls 命令的前 10 行输出

ls /usr/bin | head

  • 2to3
  • 2to3-2.7
  • 2to3-3.5
  • X11
  • [
  • aclocal
  • aclocal-1.15
  • acyclic
  • add-patch
  • addpart
默认的输出行数为 10 行
  显示 ls 命令的前 5 行内容。

ls /usr/bin | head -n 5

  • 2to3
  • 2to3-2.7
  • 2to3-3.5
  • X11
  • [
 
uniq命令 去掉输出中重复的行

sort testfile | uniq

   
  显示输出中各重复的行出现的次数,并按次数多少倒序显示

sort testfile | uniq -c | sort -nr

   
wc命令 统计当前登录到系统的用户数

who | wc -l

2 wc 命令用于统计包含在文本流中的字符数、单同数和行数
  统计当前的 Linux 系统中的进程数

ps -ef | wc -l

70  

24 shell 管道命令与过滤器的更多相关文章

  1. linux shell 管道命令(pipe)使用及与shell重定向区别

    管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandarderror 信息没有直接处理能力.然后,传递给下一个命令 ...

  2. 常见linux命令释义(第九天)—— Bash Shell 的操作环境Shell 中的管道命令一些管道命令

    最近好懒好懒.连写文章都写不好了.于是只能写读一点书,记一点读书笔记了.太懒了,没办法.慢慢恢复自己的状态吧. 管道命令仅会处理strandard output 的内容,对于strandard err ...

  3. 数据流重定向和管道命令, grep, tr,sort, wc, cut,split,tee,sleep(shell 02)

    主要内容 1.标准输入输出和错误 2.管道命令和 grep, tr,sort, wc, cut,split,tee,sleep 标准输入输出和错误 标准输入(stdin) 是指令数据的输入,代码为0, ...

  4. dirname和shell常用命令

    $ cd `dirname $0` 和PWD%}  显示当前目录名称${#var}             替换为变量字符个数特殊变量$ 当前SHELL的PID? 前一个命令的退出状态! 后台执行的上 ...

  5. linux管道命令grep命令参数及用法详解---附使用案例|grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  6. grep 和 wc命令 --- !管道命令!

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expr ession Print,表示全局正则表 ...

  7. (转)Hbase shell 常用命令(1)

    Hbase shell 常用命令(1) link:http://blog.csdn.net/scutshuxue/article/details/6988348 下面我们看看HBase Shell的一 ...

  8. Linux系统管道命令符

    管道命令符“|”的作用是将前一个命令的标准输出作为后一个命令的标准输入,格式为“命令A | 命令B” 以下实例中,通过grep命令搜索关键字“/sbin/nologin”在/etc/passwd中查找 ...

  9. shell管道和重定向

    看了前面一节:linux shell数据重定向(输入重定向与输出重定向)详细分析 估计还有一些朋友是头晕晕的,好复杂的重定向了.这次我们看下管道命令了.shell管道,可以说用法就简单多了. 管道命令 ...

随机推荐

  1. Canal--服务端和客户端搭建

    服务端 源码编译 git clone https://github.com/alibaba/canal.git 用IDEA打开克隆的项目 等待maven下载完依赖后开始编译过程 依赖下载完成后,打开m ...

  2. MyBatis 单表CURD操作(五)

    MyBatis的CURD操作 添加CURD接口方法 package mapper; import entity.UserEntity; import org.apache.ibatis.annotat ...

  3. Heap Size 与 Stack Size

    Heap Size:如果没有用到标准库的malloc,就是废物,纯属浪费内存,所以直接设置为0即可: Stack Size :最大的可读写变量的大小即可:

  4. Flex里的fx s mx

    笔记是从其他地方整合的,仅供参考 原来flex build 4有三个命名空间fx,mx,s,分别对应一下三个: •xmlns:fx="http://ns.adobe.com/mxml/200 ...

  5. Module not found: Error: Can't resolve 'less-loader' in ' xxx' (Day_40)

    1. 错误代码: 2. 解决方法: 删除项目文件夹下的node_modules文件夹 执行npm install命令

  6. lua table的遍历

    --ordered table iterator sorted by key function pairsByKeys(t) local a = {} for n in pairs(t) do a[# ...

  7. Django中数据库操作相关的错误

    问题:字段修改属性发生错误 1> >python manage.py makemigrations You are trying to add a non-nullable field ' ...

  8. windows使用attrib来简单隐藏文件

    效果如下: 详细命令说明: ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [+O | -O] [+I | -I] [+X | -X] [+P | -P] ...

  9. AI框架外部用户贡献代码

    AI框架外部用户贡献代码 概述 飞桨是百度自主研发的一款开源的深度学习框架,是主流深度学习框架中首个完全国产化的产品,已经在农业.医疗.林业.科研.服务等领域成功应用.无论是已入职场的深度学习从业者. ...

  10. MindSpore:自动微分

    MindSpore:自动微分 作为一款「全场景 AI 框架」,MindSpore 是人工智能解决方案的重要组成部分,与 TensorFlow.PyTorch.PaddlePaddle 等流行深度学习框 ...