文章目录
- 输出重定向 >
- 追加输出重定向 >>
- 输入重定向 <
- 管道符 |(重要)
在Linux中,标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)是与终端和程序之间进行交互的标准通道。
- 标准输入(stdin):
- 标准输入是程序从终端或另一个程序中读取输入数据的默认位置。
- 在终端中,当你键入字符并按下回车键时,这些字符会被发送到正在运行的程序的标准输入。
- 在Linux中,通常用键盘作为标准输入设备。
- 标准输入通常通过文件描述符0表示。
- 标准输出(stdout):
- 标准输出是程序将结果或输出发送到终端的默认位置。
- 当程序执行输出操作时,输出的内容会显示在终端上。
- 在Linux中,通常用屏幕作为标准输出设备。
- 标准输出通常通过文件描述符1表示。
- 标准错误输出(stderr):
- 标准错误输出是用于向终端或日志文件输出错误消息的默认位置,它是一种专门用于错误信息的输出通道。
- 与标准输出不同,标准错误通常用于输出程序的错误消息和诊断信息,以便区分普通输出和错误输出。
- 在Linux中,通常用屏幕作为标准错误输出设备,但你也可以将错误消息重定向到日志文件中。
- 标准错误输出通常通过文件描述符2表示。
输出重定向 >
-
功能描述:
>
用于将命令的标准输出重定向到指定的文件中 -
使用方法:
命令 > 文件路径
:将命令的标准输出重定向到指定的文件中。>
只能重定向标准输出,不能重定向标准错误输出(使用2>
可以重定向标准错误输出)。
-
代码示例:
# 将命令 ls 的输出结果写入文件 list.txt ls > list.txt# 将命令 ps 的输出结果写入文件 processes.txt ps aux > processes.txt# 将标准输出和标准错误输出一同重定向到文件, 选择一种适合的即可 find /home/user/ -name "*.log" &> test.txt find /home/user/ -name "*.log" > test.txt 2>&1 find /home/user/ -name "*.log" > test.txt 2> test.txt
-
注意事项:
- 使用
>
时会覆盖目标文件的内容,如果不想覆盖文件内容,可以使用>>
将输出追加到文件末尾。 - 如果目标文件不存在,
>
会创建一个新文件;如果目标文件已存在,>
会清空文件内容再写入新的内容。注意存在的目标文件必须有写权限w。
- 使用
追加输出重定向 >>
>>
是用于追加重定向输出的特殊字符,常用于将命令的输出结果追加到文件的末尾。
-
功能描述:
>>
用于将命令的标准输出追加到指定的文件末尾,如果文件不存在则会创建文件,如果文件已存在则会将输出追加到文件末尾。 -
使用方法:
命令 >> 文件路径
:将命令的标准输出追加到指定的文件末尾。
-
代码示例:
# 将命令 ls 的输出结果追加到文件 list.txt ls >> list.txt# 将命令 ps 的输出结果追加到文件 processes.txt ps aux >> processes.txt# 将标准输出和标准错误输出一同重定向到文件, 选择一种适合的即可 find /home/user/ -name "*.log" &>> test.txt find /home/user/ -name "*.log" >> test.txt 2>&1 find /home/user/ -name "*.log" >> test.txt 2>>text.txt
-
注意事项:
>>
只能追加重定向标准输出,不能追加重定向标准错误输出(使用2>>
可以追加重定向标准错误输出)。- 如果目标文件不存在,
>>
会创建一个新文件,之后将结果写入;如果目标文件存在,使用>>
时不会覆盖目标文件的内容,而是将输出追加到文件的末尾。注意存在的目标文件必须有写权限w。
输入重定向 <
-
功能描述:
<
用于将文件的内容作为命令的标准输入,从而将文件内容提供给命令使用。 -
使用方法:
命令 < 文件路径
:将文件的内容作为命令的标准输入。
-
代码示例:
# 将文件 file.txt 的内容作为命令 cat 的标准输入,显示文件内容 cat < file.txt# 将文件 input.txt 的内容作为命令 grep 的标准输入,搜索匹配的行 grep "pattern" < input.txt# 将文件 numbers.txt 的内容作为命令 sort 的标准输入,排序后输出 sort < numbers.txt
-
注意事项:
- 使用
<
时,命令将会从文件中读取内容作为标准输入。当然,这就要求文件一定要有读权限r。 <
只能将文件内容作为命令的标准输入,不能将命令的输出结果作为输入。
- 使用
管道符 |(重要)
-
功能描述:
|
用于 将管道左侧命令的标准输出 传递给管道右侧命令 作为标准输入,实现两个或多个命令之间的协作。 -
使用方法:
命令1 | 命令2
:将命令1的标准输出作为命令2的标准输入。
-
代码示例:
# 查找家目录下的所有shell脚本 ls -R ~ | grep "\.sh"# 使用管道将 ps 命令的输出传递给 grep 命令进行进一步过滤 ps aux | grep "process_name"# 使用管道将 cat 命令的输出传递给 wc 命令进行行数统计 cat file.txt | wc -l
-
注意事项:
- 使用管道时,命令1 的输出会成为命令2 的输入,依此类推。因此,命令必须能够通过标准输入和标准输出进行通信。
- 管道符号可以用于连接任意数量的命令,形成一个管道链,每个命令处理前一个命令的输出。
- 某些命令不支持通配符或者正则表达式,可以借助支持正则表达式和通配符的命令来实现。