linux 标准文件描述符
Linux系统将每个对象当作文件处理。这包括输入和输出进程。Linux用文件描述符(file descriptor)来标识每个文件对象。文件描述符是一个非负整数,可以唯一标识会话中打开的文件。每个进程一次最多可以有九个文件描述符。出于特殊目的,bash shell保留了前三个文件描述符(0、1和2)
1、标准输入 STDIN
STDIN文件描述符代表shell的标准输入。对终端界面来说,标准输入是键盘。shell从STDIN文件描述符对应的键盘获得输入,在用户输入时处理每个字符。
在使用输入重定向符号(<)时,Linux会用重定向指定的文件来替换标准输入文件描述符。它会读取文件并提取数据,就如同它是键盘上键入的。
2、标准输出STDOUT
STDOUT文件描述符代表shell的标准输出。在终端界面上,标准输出就是终端显示器。shell的所有输出(包括shell中运行的程序和脚本)会被定向到标准输出中,也就是显示器。
[root@Centos8_test ~]# cat adduser.txt 1>testfile
[root@Centos8_test ~]# cat testfile
user1 passwd1
user2 passwd2
user3 passwd3
[root@Centos8_test ~]# cat adduser.txt >testfile # 可见>默认就是1> 即将标准输出重定向
[root@Centos8_test ~]# cat testfile
user1 passwd1
user2 passwd2
user3 passwd3
追加文件则用 >>
3、标准错误STDERR
重定向标准错误 2> file
[root@Centos8_test ~]# ls jay
ls: cannot access 'jay': No such file or directory
[root@Centos8_test ~]# ls jay 2>jayerr #将标准错误重定向至jayerr
[root@Centos8_test ~]# cat jayerr
ls: cannot access 'jay': No such file or directory
4、表示输出重定向: >&
标识输出重定向的作用是将一个标识的输出重定向到另一个标识的输入。
比如写脚本时常用的
COMMAND > /dev/null 2>&1
COMMAND &> /dev/null
这两种写法的作用是一样的 都是将COMMAND输出、同时将标准错误也重定向到 /dev/null中
重定向到空设备/dev/null 避免输出