输入/输出重定向(I/O Redirection )

来自MagicLinux 百科
Sejishikong讨论 | 贡献2021年12月20日 (一) 20:10的版本 (创建页面,内容为“==<center>输入/输出重定向</center>== ===[http://mlwiki.maihaohui.com/index.php/Linux%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%B9%8B%E8%8F%9C%E9%B8%9F%E5%AD%A6%E4%B9%A0%E7%AF%87 返回目录]=== ===[http://www.linuxcommand.org/lts0060.php 原文链接 : http://www.linuxcommand.org/lts0060.php]=== 在本课中,我们将研究一下被许多命令行程序使用的一项强大功能--输入/输出重定向。正如我们看到的,许多命令如ls将其…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

输入/输出重定向

返回目录

原文链接 : http://www.linuxcommand.org/lts0060.php

在本课中,我们将研究一下被许多命令行程序使用的一项强大功能--输入/输出重定向。正如我们看到的,许多命令如ls将其执行结果输出到显示屏上。然而实情并非如此。通过利用一些特殊的符号,我们能够实现将许多命令输出结果重定向输出到文件、设备甚至作为其它命令的输入内容.

标准输出

大多数的命令行程序将它们的显示结果输送到被称为标准输出的设备.在默认情况下,标准输出将其内容直接显示出来.要重定向标准输出到一个文件,使用如下">"字符:

  • [me@linuxbox me]$ ls > file_list.txt

本例中,ls命令执行后,其结果被写入file_list.txt文件.因为ls输出结果被重定向到文件,显示屏没有显示执行结果.

每当上述命令被重复执行,file_list.txt文件内容就被ls命令输出结果覆盖.如果你想让新结果追加到文件中,可以使用">>"命令:

  • [me@linuxbox me]$ ls >> file_list.txt

当新结果被追加时,其显示在原文件末尾,但这导致随命令不断重复执行,文件内容越来越长.如果要将重定向输出结果追加到文件中,但该文件却不存在时,此文件将被创建.

标准输入

许多命令能够接受来自标准输入设备的信息.默认情况下,此标准输入从键盘获取其内容,但同标准输出一样,它同样能够被重定向.如用文件来代替键盘实现重定向标准输入,可以用"<"符号来实现:

  • [me@linuxbox me]$ sort < file_list.txt

在上面的例子中,我们用sort命令来获取file_list.txt内容.在本例中,由于标准输出没被重定向,其输出结果显示在显示屏上.我们也可以重定向标准输出至另一文件中:

  • [me@linuxbox me]$ sort < file_list.txt > sorted_file_list.txt

正如你所见,一条命令中能够同时实现输入/输出的重定向.注意一下,重定向没有先后顺序之分.唯一需要满足的是重定向符号("<"和">")必须写在命令选项和参数的后面.

管道

显然,利用输入/输出重定向功能,你能够做的最有用有效的事情就是将多条命令进行整合,我们称其为管道.利用管道,一条命令的标准输出内容可以作为另一条命令的标准输入内容而使用.以下是我收藏的极品使用方法:

  • [me@linuxbox me]$ ls -l | less

本例中,ls命令的输出传递给less.通过调用"| less",你可令任何命令以滚屏方式输出.我一直在用它。

通过整合多条命令,你能够实现令人吃惊的效果。以下是一些你可以尝试的例子:

---------------------------------------------
   命令                         释义
---------------------------------------------
 ls -lt | head          显示当前目录下10个最新的文件
---------------------------------------------
 du | sort -nr          显示目录列表及所占空间按降序排列
---------------------------------------------------
find . -type f -print | wc -l
                       显示当前工作目录及其子目录所含文件数量
---------------------------------------------------

过滤器

我们将使用管道的一类程序称为过滤器。过滤器接受标准输入,执行预定操作后将其结果送至标准输出设备。这样,它能够实现强大的信息处理功能。以下是几种可用作过滤器的常用程序:

----------------------------------------
 程序             用途
----------------------------------------
sort                将标准输入(设备传来的)数据排序,将排序结果送至标准输出设备
----------------------------------------
uniq                接受标准输入排序后的数据流,删除数据中的重复行,以确保输出数据
                        每行内容都是唯一的
----------------------------------------
grep          按行检查来自标准输入的数据,按行输出含指定字符的数据
----------------------------------------
fmt            从标准输入读取文本,将指定格式的文本输出至标准输出设备
----------------------------------------
pr     将从标准输入获得的文本分割成多个页面,并添加页眉页脚以备打印
----------------------------------------
head             显示输入内容的头几行。对查看文件头信息很有用
----------------------------------------
tail        显示输入内容的后几行。如查看日志文件(log)获取最近的系统登录信息
----------------------------------------
tr         转译字符。可用于字母大小写转换或字符格式的转换。例如从 DOS 文本
       格式(行尾是“回车+换行”)转换成 unix 文本格式(行尾仅是“换行”)。
----------------------------------------
sed          管道数据流编辑器。处理复杂的文本转译,其效果优于 tr 命令
----------------------------------------
awk                  一种用于构建过滤器的完整程序语言。非常强大!
----------------------------------------

通过管道执行任务

  1. 从命令行打印。Linux提供了lpr打印程序,用于接收标准输入发送至打印机打印。它经常使用管道和过滤器功能。

下面是两个例子:

  • cat poorly_formatted_report.txt | fmt | pr | lpr
  • cat unsorted_list_with_dupes.txt | sort | uniq | pr | lpr

在第一个例子中,我们利用cat命令读取文件,输出结果至标准输出设备,通过管道,将其作为fmt命令的标准输入

。fmt命令将文本编排为简洁的段落,输出至标准输出设备,再通过管道,将其作为pr命令的标准输入。pr命令将文

本整洁的分成多页,输出至标准输出设备,同样利用管道,将结果作为lpr命令的标准输入。lpr命令最终将标准输入

发送至打印机打印。

第二个例子用于处理带重复行内容的未排序的数据列表。首先,cat命令将列表交与sort命令排序再利用uniq命令删

除重复行。接下来的pr和lpr命令用于标注页数和打印列表。


2.查看tar文件的内容。

你经常会遇到以gzipped tar文件格式分发的软件。这是一种传统的unix文件格式:先用gzip 命令压缩,再用tar命令打包。你能够从其扩展名“.tar.gz"和".tgz"来识别它。在Linux系统中,你可以用以下命令来

查看这类文件的目录:

  • tar tzvf name_of_file.tar.gz | less

《要知后事如何,且看:权限(Permissions )


© 2000-2006, William Shotts, Jr. Verbatim copying and distribution of this entire article is permitted in any

medium, provided this copyright notice is preserved.

Linux® is a registered trademark of Linus Torvalds.