Linux的输出/输入重定向

重定向的分类

  • 标准输入
  • 标准输出
名称 文件描述符 作用
标准输入(stdin) 0 默认由键盘输入(其他输入命令的终端设备或某个文件也可输入)
标准输出(stdout) 1 默认输出到屏幕
错误输出(stderr) 2 默认输出到屏幕
文件名(filename) 3+

进程描述符:一个进程或者终端在启动时,都会开启文件描述符。

Linux的输出/输入重定向
Linux的输出/输入重定向
Linux的输出/输入重定向

# 关于标准输出重定向,标准输入重定向,错误输出重定向设备文件位置(软链接文件)
[root@wqh06 ~]# ll  /dev/st*
lrwxrwxrwx. 1 root root 15 Nov 28 18:49 /dev/stderr -> /proc/self/fd/2	#错误输出  2> 2>>  不能省略
lrwxrwxrwx. 1 root root 15 Nov 28 18:49 /dev/stdin -> /proc/self/fd/0	#标准输入  < << 0  可以省略
lrwxrwxrwx. 1 root root 15 Nov 28 18:49 /dev/stdout -> /proc/self/fd/1	#标准输出  > >>	1  可以省略

各类重定向文件描述符的用法:

类型 符号 用途 备注
标准覆盖输出重定向 1> 将命令执行的正确结果默认输出的位置,修改为指定的文件或者终端(覆盖原有内容) 通常‘>‘即可,1可以不写,默认就是1
标准追加输出重定向 >> 将命令执行的正确结果,输出到指定文件的末尾(不覆盖原有内容)
错误覆盖输出重定向 2> 将命令执行的错误结果默认输出的位置,修改为指定的文件或者终端(覆盖原有内容)
错误追加输出重定向 2>> 将命令执行的错误结果,输出到指定文件的末尾(不覆盖原有内容)
标准输入重定向 0< 将命令中接收输入内容由默认的键盘,改为命令或者文件 通常‘<‘即可0可以写也可以不写,默认0
标准输入追加重定向 0<< 将命令中接收输入内容由默认的键盘,改为命令或者文件

输出重定向

将标准输出重定向到文件

Linux的输出/输入重定向

# 将标准输出重定向到终端
[root@wqh06 pts]# echo "w shi da shui bi" > /dev/pts/1 

# 标准覆盖输出重定向到文件
[root@wqh06 ~]# echo wqh>/tmp/1.txt     # 字符串输出到文件中
[root@wqh06 ~]# cat /tmp/1.txt
wqh

[root@wqh06 ~]# echo 321>/tmp/2.txt     # 会将`321`视作文件描述符,所以文件中不会有任何内容
[root@wqh06 ~]# cat /tmp/2.txt

[root@wqh06 ~]# echo wqh1>/tmp/3.txt    # 因为`1`前面有`wqh`字符串作为连接,所以不会将`1`视作文件描述符
[root@wqh06 ~]# cat /tmp/3.txt
wqh1

将标准输出追加重定向到文件

Linux的输出/输入重定向

# 标准追加输出重定向
[root@wqh06 ~]# echo 456 >> /var/log/messages
[root@wqh06 ~]# echo 123 >> /var/log/messages

将错误输出重定向到文件

Linux的输出/输入重定向

# 错误输出重定向,使用普通用户cdx登录,查询/etc/下所有目录,有些文件会报错权限不足
[cdx@wqh06 ~]$ find /etc/ -type d 2> finderror.txt	            # 普通用户权限有时受限
[cdx@wqh06 ~]$ find /etc/ -type d > findright.txt 2> finderror.txt  # 正确结果和错误结果分开保存

将标准输出和错误输出都重定向到文件

Linux的输出/输入重定向

# 将标准输出和错误输出都输出到相同的文件中
[cdx@wqh06 ~]$ find /etc/ -type d > /tmp/100.txt 2>&1 	# 错误输出需要由 1 输出到文件中
[cdx@wqh06 ~]$ find /etc/ -type d &> /tmp/101.txt	# 错误输出和标准输出,同时输出到文件中,包括其他3,4,5,6...文件描述符的输出
# 上面两种方法方式不同,效率不同,且第二种方法 `&>` 包含的范围更广泛

将错误输出重定向到黑洞文件

Linux的输出/输入重定向

# 将错误输出,重定向到黑洞,这是我们常卸载Shell脚本中的语句,明知会有错,但不想看到错误提示
[root@wqh06 ~]# ls / /ooo 2> /dev/null

# 脚本中使用重定向
#!/bin/bash

read -p "请输入要检测的IP:" IP

ping -c1 -W1 $IP &> /dev/null

if [ $? -eq 0 ];then
        action "$IP" /bin/true >> /tmp/IP_OK.txt
else
        action "$IP" /bin/false >> /tmp/IP_FAILD.txt
fi

输入重定向

Linux的输出/输入重定向

上一篇:Linux通配符


下一篇:Hibernate核心API