五、管道与重定向
1、重定向命令
1.1、重定向符号
符号 | 描述 |
---|---|
> | 输出重定向到一个文件或者设备,覆盖原来的文件 |
>! | 输出重定向到一个文件或设备,强制覆盖原来的文件 |
>> | 输出重定向到一个文件或设备,追加原来的文件 |
< | 输入重定向到一个程序 |
1.2 标准错误重定向符号
符号 | 描述 |
---|---|
2>> | 将一个标准错误输出重定向到一个文件或者设备,追加到原来的文件 |
2>&1 | 将一个标准错误输出重定向到标准输出 ——1:就代表 标准输出 |
>& | 将一个标准错误输出重定向到一个文件或设备,覆盖原有的文件 |
|& | 将一个标准错误通过管道输送到另一个命令作为输入 |
2> | 将一个标准错误输出重定向到一个文件或者设备,覆盖原文件内的内容 |
1.3 命令重定向实例
xxxxxxxxxx4 1set nu # 显示行号2set nonu # 取消显示行号3set list # 显示控制符4set nolist # 取消显示控制符bash
1、标准输出:代码为0;或者为stdin;使用的方式为<
2、标准输出:代码为1;或称为stdout;使用的方式为1>
3、错误输出:代码为2;或称为stderr;使用的方式为2>
(1)将ls -al 命令输出的内容重定向输入到lsit.txt,追加到原有的文件的末尾,如果没有list.txt文件则创建
ls -al >> lsit.txt
(2)将ls -al 命令输出的内容重定向输入到指定的文件中,正确输出则重定向到 lsit.txt ,错误输出则重定向到lsit.err,【>是覆盖,通过原文件有内容,则会全部覆盖掉】
ls -al /home /aaaaaa 1> lsit.txt 2>lsit.err
(3)将标准错误重定向输出到标准输出【就是把错误的删除重定向到正确的输出中,实现错误和正确重定向到一个文件】
ls -al 1> lsit.txt 2> &1
(4)将 ls -al 的标准输出重定向到 list.txt ,错误输出则重定向到/dev/null【/dev/null可以说是黑洞装置,为空,即不保存】
ls -al 1> lsit.txt 2> /dev/null
(5)输出重定向
cat > /opt/text1 <<EOF # 将输入的这几段话给cat查看,看完了再输入重定向到/opt/text1
>fdjljkslf
>jslfjfks
>EOF # EOF段落标记;结束输入
1.4 为什么要使用命令输出重定向
- 当屏幕输出的信息很重要,而且我们需要将他保存下来的时候
- 背景执行中的程序,不希望他干扰屏幕正常输出结果时
- 一些系统的例行命令(例如写在/etc/crontab 中的文件) 的执行结果,希望他可以保存下来时
- 一些执行命令,我们已经知道他可能的错误讯息,所以想以【2> /dev/null】将他丢弃时
- 错误讯息和正确讯息需要分别输出时
2、管道命令
stdout:标准输出流
stderr:标准错误输出流
2.1 基本概念
- 管道命令是一种通信机制,通常用于进程间的通信(也可以通过socker进行网络通信),它表现出来的形式将前面每一个进程输出(stdout)直接作为下一个进程的输入(stdin)
- 管道命令使用 | 作为界定符号,管道命令与上面说的连续执行命令不一样
- 管道命令仅处理正确的命令,对于错误输出会予以忽略
命令1 | 命令2 | 命令3
命令1的输出 | 作为命令2的输入 | 命令2的输出作为命令3的输
tee 三通 :把输出保留副本 | tee a.txt
xargs 转换:把输出和输入进行格式转换。 | xargs rm -rvf
cut | cut -d: -f1
# 切片 -d:--是以冒号进行切片 -f1:切出第一个
xargs 转换:把输出和输入进行格式转换。 | xargs rm -rvf
2.2命令执行顺序控制
顺序执行多条命令:简单的顺序指令可通过;来实现
command1;command2;command3
例如:
count hwt;count hhh;count www # 按顺序依次创建文件
有条件的执行多条命令:
which command1 && command2 || command3
&&:如果前一条命令执行成功则执行下一条命令。如果command1执行成功(返回0),则执行command2
||:与&&命令完全相反,执行不成功时执行下一条命令
$?:存储上一次命令的返回结果
例:
which cd >/dev/null && cd --help // 如果存在cd命令[并将输出的结果丢进null],执行cd --help命令
echo $? # 成功返回1,失败返回0
tee命令
tee命令主要被用于来向standout(标准输出流,通常是命令执行窗口)输出的同时也将内容输出到文件中。
tee的命令格式: ```bash 命令 | tee [参数] 文件名 例:将ping baidu.com的返回值输入到文件中 ping baidu.com | tee ping-daidu.log
-a #已追加的方式添加到文件中 -i #忽视ctrl+c 组合键发起的中断信号(SIGINT)。 ```