文章目录
1.输入输出重定向
1.1 标准输入输出
如果从字面意思来说,就是计算机的输入设备和输出设备。
- 计算机的最基本输入就是键盘、鼠标、写字板等,标准的输入设备就是键盘。最早的时候其他输入设备都不存在,只有键盘着一种输入设备,所以键盘是标准输入设备。
- 输出设备有显示器、打印机、投影仪等,标准输出设备就是显示器。
linux中艘由的内容都是文件,键盘和显示器当然也是文件,他的文件名:
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
linux把输出设备分了两个,一个是正确输出,一个显示错误输出。但是这个设备文件名并不太好记,所以给他们起了一个代号(文件描述符)。
- 0:代表键盘,标准输入
- 1:代表标准输出
- 2:代表标准错误输出
1.2 输出重定向
输出本来是应该由我输入命令,他应该输出到屏幕上。
现在我不让他输出到屏幕,改变输出方向,让他输出到文件当中,就叫输出重定向。
通过日志我们可以这样理解,将操作的命令结果保存在一个文件中,方便管理员查看。其实这就是输出重定向的作用。
类型 | 符号 | 作用 |
标准输出重定向 | 命令 > 文件 | 以覆盖的方式,把命令的正确输出保存在指定的文件或设备中 |
---|---|---|
命令>>文件 | 以追加的方式,把命令的正确输出保存在指定的文件或设备中 | |
标准错误输出重定向 | 错误命令 2> 文件 | 以覆盖的方式,把命令的错误输出保存在指定的文件或设备中 |
错误命令 2>> 文件 | 以追加的方式,把命令的错误输出保存在指定的文件或设备中 |
注意不是任何命令都可以用输出重定向,这个命令必须由输出才可以使用输出重定向。比如cd
就没有输出结果。
1.2.1 >
测试>
的作用:
由实验看出如果保存的文件不存在,先建立文件(abc)在执行命令ls,最后保存进文件(abc),因为abc文件中有自己的名称。
再次执行一次date命令保存结果:
由实验的出以下结论:
>
保存的内容会覆盖之前的内容。- 当保存的文件不存在的时候,先建立文件,再执行命令,最后覆盖保存。
1.2.2 >>
测试>>
的作用:
由实验的出以下结论:
>
保存的内容会追加之前的内容。- 当保存的文件不存在的时候,先建立文件,再执行命令,最后追加保存。
1.2.3 2>
测试2>
的作用:
在linux中错误是用2来代表,如果要再文件中保存错误的输出需要在
>
前增加一个2。
再执行一个错误命令保存:
由实验的出以下结论:
- 2代表错误,错误的命令结果只有用
2>
会覆盖保存。 2>
保存的内容会覆盖之前的内容。- 当保存的文件不存在的时候,先建立文件,再执行命令,最后覆盖保存。
1.2.4 2>>
测试2>>
的作用:
在linux中错误是用2来代表,如果要再文件中保存错误的输出需要在>>
前增加一个2。
由实验的出以下结论:
- 2代表错误,错误的命令结果只有用
2>>
会追加保存。 2>>
保存的内容会追加之前的内容。- 当保存的文件不存在的时候,先建立文件,再执行命令,最后追加保存。
之前的几种保存命令结果的方式都不同,是要人为的自己确定命令到底是正确的还是错误的,这就非常不方便了。
所以我们有了以下几种方式:
类型 | 符号 | 作用 |
正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把命令的正确和错误输出都保存在指定的文件或设备中 |
---|---|---|
命令>>文件 2>&1 | 以追加的方式,把命令的正确和错误输出都保存在指定的文件或设备中 | |
命令 &> 文件 | 以覆盖的方式,把命令的正确和错误输出都保存在指定的文件或设备中 | |
命令 &>> 文件 | 以追加的方式,把命令的正确和错误输出都保存在指定的文件或设备中 | |
命令 >> 文件1 2>> 文件2 | 把正确的输出追加到文件1中,把错误的输出追加到文件2中 |
1.2.5 命令 > 文件 2>&1
这条命令 > 文件 2>&1
也分开解释:
2>&1
把错误输出保存到正确输出。命令 > 文件
然后把正确输出和错误输出全都覆盖到文件当中。
最后是追加还是覆盖由命令 > 文件 2>&1
中的>
决定。
1.2.6 命令>>文件 2>&1
这条命令 > 文件 2>&1
也分开解释:
2>&1
把错误输出保存到正确输出。命令 > 文件
然后把正确输出和错误输出全都追加到文件当中。
最后是追加还是覆盖由
命令 >> 文件 2>&1
中的>>
决定。
1.2.7 命令 &> 文件
这条命令中的&
是表示不论是1还是2都覆盖保存在文件当中。
这里我们有一个固定用法,文件/dev/null,这个文件固定为空,可以称为垃圾桶。
相当于不保存任何结果。后面我们在编辑脚本的时候,只希望他执行而不要有任何的执行结果显示,我们就可以使用这个方式完成干净里所的脚本编写。
1.2.7 命令 &>> 文件
这条命令中的&
是表示不论是1还是2都追加保存在文件当中。
1.2.9 命令 >> 文件1 2>> 文件2
将命令执行的正确结果追加保存在文件1中,将错误结果追加保存在文件2中。
输入一个正确命令:
输入一个错误命令:
1.3 输入重定向
1.3.1 命令wc
输入重定向一般只在给源码包打补丁的的情况下使用:
wc [选项][文件名]
-c : 统计字节数
-w : 统计单词数
-l : 统计行数
这里统计字符时也要统计上回车符。
如果加了选项就只统计相应的一个而不是三个都统计。
1.3.2 命令<文件
把文件作为命令的输入:
1.3.3 <<
使用<<
的方式如下:
命令 << 标记
内容
内容
内容
标记
是命令对内容作出结果:
并不是以ctrl+D作为结束而时使用标记作为结束。