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 -s "Subject" to-address < Filename
这会将文件附加到电子邮件中,然后发送给收件人。
上面的例子很简单。让我们看看一些利用文件重定向的高级重定向技术 Descriptors。
文件 Descriptors (FD)
在 Linux/Unix 中,一切都是文件。常规文件、目录,甚至设备都是文件。每个文件都有一个关联的编号,称为文件 Descript或 (FD)。
你的屏幕上还有一个文件 Descript或者。当程序执行时,输出被发送到文件 Descript或屏幕,然后您会在显示器上看到程序输出。如果输出发送到文件 Descript或者打印机,程序输出就会被打印出来。
错误重定向
每当你在终端执行程序/命令时,总会打开 3 个文件,即标准输入、标准输出、标准错误.
只要程序运行,这些文件就始终存在。如前所述,文件描述符与每个文件相关联。
文件 | 文件 Descriptor |
---|---|
标准输入 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
总结
- Linux 中的每个文件都有相应的文件 Descript或与之相关
- 键盘是标准输入设备,而屏幕是标准输出设备
- “>” 是输出重定向运算符。“>>” 将输出附加到现有文件
- “<”是输入重定向运算符
- “>&”将一个文件的输出重定向到另一个文件。
- 您可以使用相应的文件重定向错误 Descript或2。