Linux 命令行shell输出重定向使用说明

本文详细介绍了Linux操作系统中的标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)及其文件描述符0、1、2的使用。讲解了如何通过重定向将命令的输出保存到文件或管道中,包括覆盖和追加两种方式,并列举了各种命令行重定向格式及其应用场景。强调了输出重定向时避免空格的重要性,以及正确和错误输出到不同文件或同一文件的重定向技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标准文件描述符

Linux 操作系统为进程保留了3个特殊的文件描述符,这些文件描述符是标准的输入输出描述符,各个文件描述符的意义如下:

文件描述符值标准文件名含义
0stdin标准输入文件,代表键盘
1stdout标准输出文件,代表显示器
2stderr标准错误输出文件,代表显示器

stdinstdoutstderr 默认在进程启动时就打开了,0、1、2 这三个文件描述符可以直接在进程中使用。 

由于这些标准的输入输出都是以文件的方式操作的,因此,可以将以上这些文件重定向到硬盘上的文件中,或者重定向到管道中。

可以将输出重定向到非显示器上,而是输出到其它地方,一般是文件中。这样做的最大好处就是把命令的结果保存起来,当我们需要的时候可以随时查询。Bash 支持的输出重定向符号如下表所示。

命令行重定向格式 

在输出重定向中,>” 代表的是覆盖,>>” 代表的是追加。 

令格式含义说明
command >file标准输出覆盖以覆盖的方式,把 command 的正确输出结果输出到 file 文件中。
command >>file标准输出追加以追加的方式,把 command 的正确输出结果输出到 file 文件中。
command 2>file错误输出覆盖以覆盖的方式,把 command 的错误信息输出到 file 文件中。
command 2>>file错误输出追加以追加的方式,把 command 的错误信息输出到 file 文件中。
command >file 2>&1将标准输出与错误覆盖到同一文件以覆盖的方式,把正确输出和错误信息同时保存到同一个文件(file)中。file 将以覆盖方式打开。
command >>file 2>&1将标准输出与错误追加到同一文件以追加的方式,把正确输出和错误信息同时保存到同一个文件(file)中。file 将以追加方式打开。
command >file1 2>file2覆盖到不同文件以覆盖的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。
command >>file1  2>>file2追加到不同文件以追加的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。
command >file 2>file慎用的做法这两种写法会导致 file 被打开两次,引起资源竞争,所以 stdout 和 stderr 会互相覆盖
command >>file 2>>file慎用的做法这两种写法会导致 file 被打开两次,引起资源竞争,所以 stdout 和 stderr 会互相覆盖

注意

输出重定向的完整写法其实是fd>file或者fd>>file,其中 fd 表示文件描述符,如果不写,默认为 1,也就是标准输出文件

当文件描述符为 1 时,一般都省略不写,如上表所示;当然,如果你愿意,也可以将command >file写作command 1>file,但这样做是多此一举。

当文件描述符为大于 1 的值时,比如 2,就必须写上。

需要重点注意的是:
fd>之间不能有空格,否则 Shell 会解析失败;
>file之间的空格可有可无。
为了保持一致,建议在>两边都不加空格。 

例如:如下命令行语句是错误 的:

echo "I am a cat" 1 >log.txt

错误原因是:1>之间的空格。echo 命令的输出结果是 I am a cat,我们的初衷是将输出结果重定向到 log.txt,但是当你打开 log.txt 文件后,发现文件的内容为I am a cat 1,这就是多余的空格导致的解析错误。也就是说,Shell 将该条语句理解成了下面的形式: 

echo "I am a cat" 1 1>log.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值