Linux标准输入、标准输出、重定向
背景:我们在平时中常见到诸如Linux常见的命令`>` 、 `1>/dev/null` 、`2>&1`都是指的什么呢?即就是 不显示任何标准输出和标准错误一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。命令<文件将文件作为命令的输入,如
前言
背景:我们在平时中常见到诸如
Linux常见的命令 >
、 1>/dev/null
、2>&1
都是指的什么呢?
-
>
代表重定向符 -
1>/dev/null
代表标准输出重定向到空设备文件,也就是不输出也不显示任何信息。其中 :1 代表标准输出,/dev/null 代表空设备文件。 -
2>&1
代表标准错误重定向且等同于标准输出,也就是 标准错误也重定向到空设备中 。其中:2代表标准错误,& 代表等同于。
即 command 1>/dev/null 2>&1
就是 不显示任何标准输出和标准错误
关于标准输入、输出和错误
3种文件描述符
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
- 标准输入文件(stdin):stdin的文件描述符为0,Unix/Linux 程序默认从stdin读取数据,标准输入就是命令的输入,默认指向键盘。
- 标准输出文件(stdout):stdout 的文件描述符为1,Unix/Linux 程序默认向stdout输出数据,标准输出就是命令的输出,默认指向终端屏幕。
- 标准错误文件(stderr):stderr的文件描述符为2,Unix/Linux 程序会向stderr流中写入错误信息,标准错误是命令错误信息的输出,默认指向屏幕。
默认情况下,command > file
将 stdout 重定向到 file,command < file
将stdin 重定向到 file。
6种重定向符
-
命令 < 文件
将文件作为命令的输入,如:
mail -s "mymail" IloveChina@163.com < mailfile
将文件
mailfile
作为信件内容发送。 -
命令 > 文件
将命令的输出结果送到指定文件中,默认为标准输出重定向(即
1>
),且覆盖原文件内容。 -
命令 >! 文件
将命令的输出结果送到指定文件中,若指定文件存在,则覆盖。
-
命令 >& 文件
将命令的输出结果写入到指定文件中
-
命令 >> 文件
将命令的输出结果附加到指定文件中(追加)
-
命令 >>& 文件
将命令的 产生的任何输出结果附加到指定文件中
常用的有2、4、5,重定向的使用需要注意:
- 标准输入0、标准输出1、标准错误2需要分别重定向,一个重定向只能改变它们其中一个。
- 标准输入和标准输出可以省略。(当出现重定向符号左侧时)
- 文件描述符在重定向符号左侧直接写即可,在右侧时前面加&。
- 文件描述符与重定向符号之间不能有空格。
例子
我们来解析一些例子:
# /home/pi需要根据用户名修改,且已存在temp目录,不存在则需 mkdir temp 创建新目录
# 将字符test输入到test.txt
pi@raspberrypi:/dev $ echo "test" > /home/pi/temp/test.txt
pi@raspberrypi:/dev $ cat /home/pi/temp/test.txt
test
# 将字符test2222输入到已存在的test.txt,>覆盖原内容,>>追加原内容
pi@raspberrypi:/dev $ echo "test2222" > /home/pi/temp/test.txt
pi@raspberrypi:/dev $ cat /home/pi/temp/test.txt
test2222
pi@raspberrypi:/dev $ echo "test2222" >> /home/pi/temp/test.txt
pi@raspberrypi:/dev $ cat /home/pi/temp/test.txt
test2222
test2222
# 将标准错误输出重定向到 err_out.txt 文件中,由于不存在test目录而不能创建文件导致错误,使用2>重定向错误到文件中,则控制台不显示错误输出
# 注意:前提要不存在test目录
pi@raspberrypi:~ $ touch /home/test/test/test.txt 2> err_out.txt
pi@raspberrypi:~ $ cat err_out.txt
touch: cannot touch '/home/test/test/test.txt': No such file or directory
# 将标准错误重定向到标准输出,将标准输出重定向到空设备文件
pi@raspberrypi:~ $ ls > /dev/null 2>&1
pi@raspberrypi:~ $ ls 2&>1 > /dev/null # 两者等价
更多推荐
所有评论(0)