输入、输出和错误重定向

Linux下系统打开3个文件,即标准输入、标准输出和标准错误输出。用户的shell将键盘设为默认的标准输入,屏幕为默认的标准输出和标准错误输出。也就是用户从键盘输入命令,然后将结果和错误信息输出到屏幕。

所谓的重定向,就是不使用系统默认的标准输入输出,而是重新指定,因此重定向分为输入重定向、输出重定向和错误输出重定向。要实现重定向就需要了解重定向操作符,shell就是根据重定向操作符来决定重定向操作的。

输入重定向

输入重定向用于改变命令的输入源,利用输入重定向可以将一个文件的内容作为命令的输入,而不从键盘输入。

用于输入重定向的操作符有 <<< 。例如:

# 用wc命令统计输入给它的文件/etc/shadow的行数、单词数和字符数
wc < /etc/shadow
# << 重定向告诉shell当前命令的标准输入为来自命令行中一对分隔号之间的内容
wc -l << AA
aaa
bbb
ccc
ddd
AA

# 上面的命令将一对分隔号aa之间的内容作为wc命令的输入
# 分隔号可以是任意字符
# shell将在第一个分隔号后开始读取内容,直到出现另一个分隔号结束,然后将内容送给wc命令处理

输出重定向

输出重定向是将命令的输出结果不在屏幕输出,而是输出到一个指定文件中。在Linux下输出重定向用得很多。例如,某个命令的输出很长,一个屏幕无法全部显示,可以将命令的输出指定到一个文件,然后用more命令查看这个文件,从而得到命令输出的完整信息。

用于输出重定向的操作符有 >>> ,例如:

# 将 ps -ef 输出的系统运行的进程信息全部输出到 ps.txt 文件,而不是输出到屏幕上
ps -ef > ps.txt
# cat命令是查看文件的内容
# 将file1、file2和file3的内容全部输出到file文件中,类似于文件内容的合并
cat file1 file2 file3 > file

# 如果在>后面指定的文件不存在,shell就会自动新建一个文件;
# 如果文件存在,那么这个文件原有的内容将被覆盖;
# 如果不想覆盖存在的文件,可以使用>>操作符
# 将/etc目录及其子目录下的所有文件信息追加到/root/install.log文件的后面
# /root/install.log文件原来的内容仍然存在
ls -la /etc/* >> /root/install.log

错误重定向

错误重定向和标准输出重定向一样,可以使用操作符 2>2>> 实现,例如:

# tar是打包命令,可以在屏幕上看到tar的解压过程
# 如果text.tar.gz是个损坏的压缩包,就会把错误信息输出到error.txt文件
tar xzvf text.tar.gz 2> error.txt

Last updated