Linux/Unix 中的输入输出重定向示例
什么是重定向?
重定向是 Linux 的一项功能,允许在执行命令时更改标准输入/输出设备。任何 Linux 命令 的基本工作流程是,它接受输入并产生输出。
- 标准输入(stdin)设备是键盘。
- 标准输出(stdout)设备是屏幕。
通过重定向,可以更改上述标准输入/输出。
如果视频无法访问,请点击此处
输出重定向
‘>’ 符号用于输出(STDOUT)重定向。
示例
ls -al > listings
此处,命令 ls -al 的输出被重定向到文件“listings”,而不是您的屏幕。
注意:在将命令输出重定向到文件时,请使用正确的文件名。如果存在同名文件,重定向命令将删除该文件的内容,然后可能会被覆盖。”
如果您不希望覆盖文件,而是希望向现有文件添加更多内容,则应使用 ‘>>’ 运算符。
您可以将标准输出重定向到文件,也可以重定向到设备!
$ cat music.mp3 > /dev/audio
cat 命令读取文件 music.mp3 并将输出发送到 /dev/audio,即音频设备。如果您的 PC 中的声音配置正确,此命令将播放 music.mp3 文件。
输入重定向
‘<’ 符号用于输入(STDIN)重定向。
示例: Linux 中的 mail 程序可以帮助您从终端发送电子邮件。
您可以使用标准设备键盘输入电子邮件的内容。但如果您想为电子邮件附加文件,可以使用输入重定向运算符,格式如下。
Mail -s "Subject" to-address < Filename
这将把文件附加到电子邮件中,然后发送给收件人。
前面的示例很简单。让我们看看一些利用文件描述符的高级重定向技术。
文件描述符(FD)
在 Linux/Unix 中,一切皆文件。常规文件、目录,甚至设备都是文件。每个文件都有一个关联的数字,称为文件描述符(FD)。
您的屏幕也有一个文件描述符。当程序执行时,输出被发送到屏幕的文件描述符,您会在监视器上看到程序输出。如果输出被发送到打印机的文件描述符,则程序输出将被打印出来。
错误重定向
每当您在终端执行程序/命令时,总有 3 个文件是打开的,即标准输入、标准输出、标准错误。
每当运行程序时,这些文件始终存在。如前所述,文件描述符与这些文件中的每一个相关联。
文件 | 文件描述符 |
---|---|
标准输入 STDIN | 0 |
标准输出 STDOUT | 1 |
标准错误 STDERR | 2 |
默认情况下,错误流显示在屏幕上。错误重定向是将错误路由到屏幕以外的文件。
为什么需要错误重定向?
错误重定向是 Unix/Linux 非常受欢迎的功能之一。
经常使用 UNIX 的用户会发现,许多命令会产生大量的错误。
- 例如,在搜索文件时,通常会收到“权限被拒绝”的错误。这些错误通常对搜索特定文件的人没有帮助。
- 在执行 shell 脚本时,您通常不希望错误消息使正常的程序输出变得混乱。
解决方案是将错误消息重定向到一个文件。
示例 1
$ myprogram 2>errorsfile
上面我们正在执行一个名为 myprogram 的程序。
标准错误的表示文件描述符是 2。
使用“2>”我们将错误输出重定向到名为“errorfile”的文件。
这样,程序输出就不会被错误信息干扰。
示例 2
这是另一个使用 find 语句的示例——
find . -name 'my*' 2>error.log
使用“find”命令,我们在当前目录“.”中搜索文件名以“my”开头的。
示例 3:让我们看一个更复杂的例子。
服务器管理员经常列出目录并将错误和标准输出都存储到一个文件中,以便以后处理。这是命令。
ls Documents ABC> dirlist 2>&1
此处,
- 将一个文件的输出写入另一个文件的输入。2>&1 表示 STDERR 重定向到 STDOUT 的目标(即文件 dirlist)。
- 我们将错误输出重定向到标准输出,而标准输出又被重定向到文件 dirlist。因此,两者都写入文件 dirlist。
摘要
- Linux 中的每个文件都有一个对应的文件描述符
- 键盘是标准输入设备,而屏幕是标准输出设备
- “>”是输出重定向运算符。“>>”将输出附加到现有文件中
- “<”是输入重定向运算符
- “>&”将一个文件的输出重定向到另一个文件。
- 您可以使用其对应的文件描述符 2 来重定向错误。