输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。
在日常的学习和工作中,相较于输入重定向,我们使用输出重定向的频率更高。
所以又将输出重定向分为了标准输出重定向和错误输出重定向两种不同的技术,以及清空写入与追加写入两种模式。
比如我们分别查看两个文件的属性信息,其中第二个文件是不存在的,虽然针对这两个文件的操作都分别会在屏幕上输出一些数据信息,但这两个操作的差异其实很大。
先用ls查看当前目录,然后查看lc详细信息,再随便输入一个不存在的文件名查询。
在上述命令中,名为 lc 的文件是存在的,输出信息是该命令的标准输出信息。而名为 lclc 的第二个文件是不存在的,因此在执行完ls命令之后显示的报错提示信息也是该命令的错误输出信息。
那么,要想把原本输出到屏幕上的数据转而写入到文件当中,就要区别对待这两种输出信息。
对于输入重定向来讲,用到的符号及其作用如下表:
符号
作用
命令 < 文件
将文件作为命令的标准输入
命令 << 分界符
从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2
将文件1作为命令的标准输入并将标准输出到文件2
对于输出重定向来讲,用到的符号及其作用如下表:
符号
作用
命令 > 文件
将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件
将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件
将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件
将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1或命令 &>> 文件
将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
对于重定向中的标准输出模式,可以省略文件描述符1不写,而错误输出模式的文件描述符2是必须要写的。
通过标准输出重定向将 systemctl status vsftpd 命令原本要输出到屏幕的信息写入到文件 lc 中,然后用cat命令显示 lc 文件中的内容。具体命令如下:
如果想把命令的报错信息写入到文件,平时一般用不到。
但是当用户在执行一个自动化的Shell脚本时,这个操作会特别有用,因为它可以把整个脚本执行过程中的报错信息都记录到文件中,便于安装后的排错工作。
接下来我们以一个不存在的文件进行实验演示:
因为我们用的是 >> 所以追加到文档原有内容后面了。
输入重定向相对来说有些冷门,在工作中遇到的概率会小一点。
输入重定向的作用是把文件直接导入到命令中。接下来使用输入重定向把 lc 文件导入给 wc -l 命令,统计一下文件中的内容行数。
管道命令符的作用也可以用一句话来概括“把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入”。
比如用翻页的形式查看/etc目录中的文件列表及属性信息(这些内容默认会一股脑儿地显示到屏幕上,根本看不清楚):
ls-l/etc/|more
最上面显示总共多少条,我们可以利用more命令的用法来浏览这些信息。
4个最常用的转义字符如下所示。
我们先定义一个名为PRICE的变量并赋值为5,然后输出以双引号括起来的字符串与变量信息:
接下来,我们希望能够输出“Price is $5”,即价格是5美元的字符串内容。
但碰巧美元符号与变量提取符号合并后的$$作用是显示当前程序的进程ID号码,于是命令执行后输出的内容并不是我们所预期的: