Linux I/O 重定向

三个标准i/o流

  • 标准输入,一般对应键盘输入。对应的文件描述符id为0
  • 标准输出,一般对应终端console。对应的文件描述符id为1
  • 标准错误输出,一般对应终端console。对应的文件描述符id为2

是什么文件描述符

linux系统中由于访问文件或其他i/o资源的抽象指针

重定向

有两种重定向

  • 重定向到文件, 例如我们将标准输入的内容,重定向到一个文件。如cat > test.txt
  • 重定向到另一个程序。我们将标准的输入的内容重定向给下一个处理程序cat | wc

两者的区别是,重定向到文件使用的是>>>,而重定向到另一个程序使用的管道符|

重定向文件

>>>重定向到的文件不存在时,都会新建制定的文件。如果文件存在时,>会覆盖原来的内容,而>>在原来的文件后面添加内容

重定向到文件

cat > test.txt 表示将标准输入的内容,重定向到test.txt文件。因为cat命令如果没有指定入参的话,它相当于读取标准输入的内容
ls >test.txt则表示将标准输入的内容重定向test.txt文件, 因为ls命令输出的内容默认是输出到标准输出,也即console中

mkdir '' 2>test.txt 表示将标准错误输出的内容重定向到test.txt文件。因为2代表标准错误输出。''作为文件夹名是非法的,所以创建会出错,所以错误信息mkdir: cannot create directory ‘’: No such file or directory,会被输出到test.txt文件中。如果我们指定一个正确文件夹名,比如mkdir wahah 2>test.txt, 那么test.txt中将不会有任何内容。因为没有错误输出

重定向到文件描述符

除了上述的直接重定向到一个指定文件名的文件外,我们还可以重定向到一个文件描述符,比如将标准错误输出2,重定向到标准输出

2>&1

由于输出的目的地使用的是文件描述符,所以要使用&符号,表示引用一个文件描述符

重定向到 /dev/null

有时,一个程序的执行输出,想将其直接丢弃,而不是输出到文件占用磁盘。可以将其重定向到 /dev/null,它是一个特殊的文件,写入其中的内容,都会被删除。举例: echo hello > /dev/null

重定向到另外一个程序

使用管道符,将一个程序的输出,重定向到另一个程序

比如cat | wc是将用户输入的内容,给到wc程序,由后者进行单词统计

参考链接

https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-i-o-redirection
https://stackoverflow.com/questions/818255/in-the-shell-what-does-21-mean
http://linuxcommand.org/lc3_lts0070.php
https://www.javatpoint.com/linux-input-output-redirection#:~:text=Linux I%2FO Redirection,and output of a command.&text=Redirection can be into a,characters are pipesymbol '|')

原文地址:https://www.cnblogs.com/niceshot/p/13054929.html