01
背景
小编最近在研究Linux下的脚本编写,其中很多环节涉及到和多个命令组合使用,如:自动输入系统密码等;而在Linux下最常用的就是管道和重定向。
其实Linux很多命令都需要输入、输出以及错误信息,默认的输入输出以及错误信息都是标准输入(键盘)和标准输出(屏幕),但有时候我们希望输入、输出、错误信息是从其他地方输入、输出到其他(例如文件),这里就会涉及到输入、输出、错误信息的重定向。
02
管道
简介:
在Linux中有很多标准的命令例如find、sort等,可以满足我们完成文档管理、系统管理等诸多需求,但是大多时候一些复杂的需求都需要多个命令搭配起来使用,对于Linux来说一个命令对应于一个进程,因此多个命令协同工作,就涉及到多个进程的通信,Linux提供一种管道的方式来完成进程间通信。
原理图:
管道符:
管道在Linux中对应管道符号:|
Command1 | Command2 | Command3
Command1执行的输出作为Command2的输入;同时Command2执行的输出作为Command3的输入
举例:
cat test.sh | grep -n 'echo' #读出test.sh文件内容,通过管道转发给grep 作为输入内容,筛选出echo命令输出到屏幕上
03
重定向
简介:
Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作。
输入重定向:
输入重定向符号:<
CommandA < file #输入重定向到file
特殊的输入重定向符号:<<
CommandA <<EOF
abc
def
EOF
# EOF之间的内容作为输入
输出重定向:
输出重定向符号:>(覆盖), >> (追加)
Command > file
Command >> file
文件描述符:
系统中默认的文件描述符号:
0 标准输入
1 标准输出
2 标准错误输出
ls -l > file 2 > /home/test/a.txt # 将输出重定向到file,且将错误输出重定向到/home/test/a.txt中
04
管道与重定向的区别
1.左边的命令应该有标准输出 | 右边的命令应该接受标准输入
2.左边的命令应该有标准输出 > 右边只能是文件
3.左边的命令应该需要标准输入 < 右边只能是文件
4.管道触发两个子进程执行"|"两边的程序;而重定向是在一个进程内执行
5.一般如果是命令间传递参数,还是管道的好,如果处理输出结果需要重定向到文件,还是用重定向输出比较好
由于小编也是刚刚接触Linux不久,所以对于这个问题只能简单的介绍到这了,感兴趣的小伙伴可以自行上网学习,也可以加入我们的测试群分享经验哦。