一、重定向
- 标准输入
- 标准正确输入
- 标准错误输出
图示:
2e9396e9d47aa5787acc11284a798a5494763873.jpg (899×285) (beyourself.org.cn)
- 进程在运行的过程中根据需要会打开多个文件,每打开一个文件会有一个数字标识。这个标识叫文件描述符
- 进程使用文件描述符来管理打开的文件(FD----file descriptors)
- 文件描述符:每打开一个程序都会有文件描述
图示:
453010ac75e3f97f93fce40671fac1cbb0938cce.jpg (909×156) (beyourself.org.cn)
0,标准输入(键盘)
1,标准(正确)输出
2,标准错误,
3+,进程在执行过程中打开的其他文件。
&:表示正确错误混合输出
二、输出重定向 (覆盖,追加)
> ----覆盖
>> ----追加
正确输出: 1> 1>> 等价于 > >>
错误输出: 2> 2>>正确、错误混合输出:&> &>>
错误输出到正确:2>&1
前面的命令执行后面的命令也跟着执行:&&
前面的命令执行后面的命令不执行,前面的命令不执行,后面的命令执行:||
重定向结果可以输出到 /dev/null (黑洞文件、垃圾箱、空设备)扔掉
1.输出重定向(覆盖)
正确输出--覆盖
注意:如果 > 前面什么都不加默认为1,标准正确输出。
[root@master srv]# date 1> date.txt
[root@master srv]# cat date.txt
Thu Nov 9 17:50:57 CST 2023
2.输出重定向(追加)
正确输出--追加
[root@master srv]# date >> date.txt
[root@master srv]# cat date.txt
Thu Nov 9 17:50:57 CST 2023
Thu Nov 9 17:53:46 CST 2023
3.错误输出重定向
标准正确输出和标准错误输出重定向到不同的位置
[root@master srv]# ls /opt /sfwfef >list.txt 2>error.txt
[root@master srv]# cat list.txt error.txt
/opt:
jdk1.8.0_211
mycat
mysql57-43
rabbitmq-test
rh
ssh_host_ecdsa_key
ssh_host_rsa_key
ls: cannot access /sfwfef: No such file or directory
3.将错误的输出重定向到正确的输出里,让grep命令可以标准输出
[root@master srv]# echo $?
0
[root@master srv]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@master srv]# echo $?
3
[root@master srv]# systemctl status firewalld 2>&1 | grep loaded
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
注意:nginx -v 此命令输出格式特殊,grep不会按照预期结果输出
4.前面执行&&后面也跟着执行
[root@master srv]# echo 1 && echo 2
1
2
5.前面执行||后面不执行,前面不执行,后面执行
[root@master srv]# echo 1 || echo 2
1
6.正确和错误都输入到相同位置
混合输出到相同文件
[root@master srv]# ls /opt /sfawfd &> list.txt
[root@master srv]# cat list.txt
ls: cannot access /sfawfd: No such file or directory
/opt:
jdk1.8.0_211
mycat
mysql57-43
rabbitmq-test
rh
ssh_host_ecdsa_key
ssh_host_rsa_key
三、输入重定向
标准输入: < 等价 0<
1.通过输入重定向创建文件
(cat > file <<EOF )是用来创建文件或者在脚本中使用,并向文件中输入信息输入的任何东西会被写入文件中,EOF命令结束。
语法:cat > file5 <<EOF #可以写到脚本或者文件里面
EOF:开始和结束的标记。
成对使用
结尾的另一个必须顶格写。
[root@master srv]# cat >list.txt <<EOF
> 1
> 2
> 3
> 4
> 5
> EOF
[root@master srv]# cat list.txt
1
2
3
4
5