- 标准输入(stdin):文件描述符0
- 标准输入(stdout):文件描述符1
- 标准错误(stderr):文件描述符2
file descriptors(FD,文件描述符 或 Process I/O channels);
进程使用文件描述符来管理打开的文件
[root@centos7-1 ~]# ls /proc/$$/fd 0 1 2 255
0, 1, and 2, known as standard input, standard output, and standard error
输出重定向(覆盖、追加)
- 正确输出:1> 1>> 等价于 > >>
- 错误输出:2> 2>>
输出重定向(覆盖)
[root@centos7-1 ~]# date 1> date.txt
输出重定向(追加)
[root@centos7-1 ~]# date >> date.txt
错误输出重定向
[root@centos7-1 ~]# ls /home/ /aaaa >list.txt ls: 无法访问/aaaa: 没有那个文件或目录
[root@centos7-1 ~]# ls /home/ /aaaa >list.txt 2>err.txt //重定向到不同的位置
正确和错误都输出到相同位置 &>
[root@centos7-1 ~]# ls /home/ /aaaa &>list.txt //混合输出
正确和错误都输出到相同位置 2>&1
[root@centos7-1 ~]# ls /home/ /aaaa >list.txt 2>&1 //重定向到相同的位置
重定向到空设备/dev/null
[root@centos7-1 ~]# ls /home/ /aaaa >list.txt 2>/dev/null //空设备,即将产生的输出丢掉 [root@centos7-1 ~]# ls /home/ /aaaa &>/dev/null //空设备,即将产生的输出丢掉
/dev/null 补充
/dev/null:是一个空设备,黑洞,任何文件都可以扔进去,但是看不见
如果/dev/null设备被删除怎么办? rm -f /dev/null
1、手动创建
# mknod -m 666 /dev/null c 1 3
[root@centos7-1 ~]# ll /dev/null /dev/zero crw-rw-rw- 1 root root 1, 3 11月 7 12:23 /dev/null crw-rw-rw- 1 root root 1, 5 11月 7 12:23 /dev/zero 主设备号 从设备号 MAJOR MINOR
主设备号相同:表示为同一种设备类型,也可以认为keme使用的是相同的驱动
从设备号:在同一类型中的一个序号
[root@centos7-1 ~]# ll /dev/null /dev/vda1 /etc/hosts crw-rw-rw- 1 root root 1, 3 11月 7 12:23 /dev/null brw-rw---- 1 root disk 252, 1 11月 7 12:23 /dev/vda1 -rw-r--r--. 1 root root 172 10月 29 14:38 /etc/hosts c表示字符设备
普通文件和设备文件的区别:
从表面上看,普通文件有大小;块设备文件没有大小,有主设备号和从设备号。
字符设备和快设备的区别:
字符设备没有缓存,块设备有缓存
脚本中使用重定向
案例1:脚本中使用重定向 # vim ping.sh #!/usr/bin/bash ping -c1 172.16.120.254 &>/dev/null if [ $? -eq 0 ];then echo "up.." else echo "down.." fi # bash ping.sh 案例2:脚本中使用重定向 # vim ping2.sh #!/usr/bin/bash ping -c1 172.16.120.254 &>/dev/null if [ $? -eq 0 ];then echo "172.16.120.254 up.." > /up.txt else echo "172.16.120.254 down.." >/down.txt fi # bash ping2.sh