三个标准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 '|')