• 标准输入(stdin):文件描述符0
  • 标准输入(stdout):文件描述符1
  • 标准错误(stderr):文件描述符2

Linux-I/O重定向和管道

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

Linux-I/O重定向和管道

输出重定向(覆盖、追加)

  • 正确输出:1>  1>>  等价于 > >>
  • 错误输出:2>  2>>

输出重定向(覆盖)

[root@centos7-1 ~]# date 1> date.txt

Linux-I/O重定向和管道

输出重定向(追加)

[root@centos7-1 ~]# date >> date.txt

Linux-I/O重定向和管道

错误输出重定向

[root@centos7-1 ~]# ls /home/ /aaaa >list.txt
ls: 无法访问/aaaa: 没有那个文件或目录
[root@centos7-1 ~]# ls /home/ /aaaa >list.txt 2>err.txt      //重定向到不同的位置

Linux-I/O重定向和管道

正确和错误都输出到相同位置 &>

[root@centos7-1 ~]# ls /home/ /aaaa &>list.txt          //混合输出

Linux-I/O重定向和管道

正确和错误都输出到相同位置 2>&1

[root@centos7-1 ~]# ls /home/ /aaaa >list.txt 2>&1        //重定向到相同的位置

Linux-I/O重定向和管道

重定向到空设备/dev/null

[root@centos7-1 ~]# ls /home/ /aaaa >list.txt 2>/dev/null     //空设备,即将产生的输出丢掉

[root@centos7-1 ~]# ls /home/ /aaaa &>/dev/null     //空设备,即将产生的输出丢掉

Linux-I/O重定向和管道

/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
示例

相关文章:

  • 2021-09-25
  • 2022-01-05
  • 2022-12-23
  • 2021-09-10
  • 2022-01-24
  • 2021-05-21
  • 2021-08-06
  • 2021-08-13
猜你喜欢
  • 2021-12-11
  • 2021-10-25
  • 2021-12-22
  • 2021-08-05
  • 2021-07-22
  • 2021-06-03
相关资源
相似解决方案