初学Linux之标准 I/O 和管道

前面我们已经了解了文件系统的部分内容,我们可以通过 ls 命令让当前目录下的内容都显示在屏幕上,也可以使用 pwd 命令,显示当前的所在的目录路径。但是我们输入的是命令,本身并没有输入“显示”这类命令和要求,但是系统就自动的在屏幕上输出我们命令指定的信息。由此可以想象到,系统自身有默认的一种输出方式,同时,有输出就有输入,当输入的和系统无关,系统也会自动提示错误,以上就是我们接下来要了解的基础内容——标准 I/O。具体的涉及内容包括:三种 I/O 设备,把 I/O 重定向入文件,tr 命令的使用,使用管道链接命令。

初学Linux之标准 I/O 和管道

通常对于程序来讲,输入输出数据的可以是键盘、鼠标、显示器等设备。但是我们输入的是命令,本身并没有输入“显示”这类命令和要求,但是系统就自动的在屏幕上输出我们命令指定的信息。系统本身默认对一些命令的输出进行了规范,这样也是减少了我们在使用Linux 过程中对输出的考虑,简化了不必要的繁琐的操作。对于这些默认的输入和输出,我们需要进行了解,这样对后面的程序学习以及脚本编辑都很有帮助。

一、三种标准 I/O

程序一般包括指令和数据,读入数据就是 Input ,输出数据是 Output ,在Linux中,一切皆文件,系统不会识别到具体的文件名,它是通过文件的(fd)文件描述符(数字代号)识别的,若是把键盘和屏幕都是作为文件,那么它们的 fd 是多少呢?下图我们通过一个已经打开的进程(7525),从进程中显示的三个编号分别为0、1、2,这三个编号就分别是系统对键盘输入,屏幕输出,屏幕报错的fd 。

这三个是系统默认的,我们将它们归为:标准输入(0),标准输出(1),标准错误输出(2)。很多命令在屏幕端显示的,都是标准输出。而一些在命令输入完成,回车运行过程中,要求我们使用键盘输入的,就是标准输入。比如 ls 在屏幕列出的文件和目录序列, cat 命令在运行过程中,我们在键盘输入的单词。当我们的输入不符合规范,或者程序运行出现中断,程序需要将错误的内容突出反馈给用户,在屏幕显示的就是标准错误输出。

捕获3    捕获4

二、把 I/O 重定向入文件

重定向是指将原先的输入方向更改到其他的,比如从原先从键盘输入的,我们可以更换到其他方式,原先从从屏幕输出显示的,我们输出到其他位置。

首选的重定向方式是—输出重定向到文件。具体的操作方法是“完整命令      操作符号    文件名”。支持的操作符号包括:  >  把标准输出重定向到文件; 2>  把标准错误输出重定向到文件; &>  把两种输出一起重定向到文件 。三种都使用到了 “ > ”这个大于符号,这个符号是比较随意的符号,每次会将后面跟着的文件内容进行覆盖,对记录整体的数据是不好处理的,此时可以使用 set -C  禁止覆盖,set +C 恢复覆盖。在禁止覆盖的情况下,可以使用 “ >|” 这个符号,同同样实现覆盖,而“ >> ”双大于号是追加的,不是覆盖,禁止覆盖是没有关系的,可以使用“ >> ” , “ 2>> ” , “ &>> ”

捕获5               捕获6

命令同时具备标准输出和标准错误输出的,可以使用下面的方法:COMMAND  > /PATH/FILE1  2> /PATH/FILE2 ,实现标准输出和错误输出重定向到不同的文件位置。另外这边需要提及的是:&> ,&>> 并不是对所有版本的Linux系统适用的,若是不能使用,可以在重定向的末尾 加上 2>&1 ,同样实现标准输出和错误输出重定向到同一个位置。例如:COMMAND >>/PATH/FIEL  2>&1 。

当多个程序的一起运行时,可以使用括号括起来,各个程序分号隔开,之后一起重定向到同一个位置。 ( COMMAND 1 ; COMMAND2 ; COMMAND3 ) >FILE.TXT

捕获7   捕获8  捕获9         以上是将输出重定向,对应的,我们可以将标准输入重定向。和标准输出使用“ > ”类似,标准输入使用的是“ < ”。cat 命令本身是同时有标准输出和标准输入的。标准输入重定向的用法就是在命令的后面加上“ < FILE ” 。 捕获1    之前的f1文件里的信息是123,f2文件里的信息是456。示例中就用f2文件中的内容代替了cat命令的键盘输入。

以上是将标准输入重定向到文件的方法,还有这种多行重定向的方法,使用的符号是 “ <<终止词 ” ,位置也是在命令的后面。但是要使用终止词在符号后面。

捕获4

三、tr 命令的使用

上面我们使用的都是 cat 这个命令,和 cat 一样包括标准输入和标准输出的命令还有很多,tr 命令就是其中之一,这个命令有字符处理的功能,这里可以着重了解一下。

tr 转换和删除字符

tr [OPTION]… SET1 [SET2]

常用的选项:  -c –C –complement:取字符集的补集

-d –delete:删除所有属于第一字符集的字符

-s –squeeze-repeats:把连续重复的字符以单独一个字符表示

-t –truncate-set1:将第一个字符集对应字符转化为第二字符集 对应的字符

捕获2

四、使用管道链接命令

现实生活中的管道是头尾衔接,传递物体流的设备,在Linux中,将数据作为一种“流”,通过管道连接的命令,就可以将“数据流” 前后传递。Linux中的管道在命令中间用“ | ”表示。命令1 | 命令2 |命令3 |….. 管道将命令1的标准输出发送给命令2的标准输入,命令2的标准输出作为命令3的标准输入,如此反复。标准错误输出是无法通过管道传递的。可以利用 2>&1 | 或者 |& 。

捕获5

当管道传递的数据不是标准输出,而是文件,那么不能作为标准输入传递给下一个命令,则可以使用管道中的 “ – ” 符号代替产生的文件,在管道前,作为输出的文件,在管道后,作为输入文件。

tar -cvf   –  /home   | tar  -xvf  –

另外,管道后面的命令,参数是多个,而管道前的标准输出是一串数据流,可以使用 | xargs 命令,将数据流中的空格隔开的数据,分成多个参数,一个个传递给管道后的命令处理。

捕获6

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/89183

(1)
hack王和juhack王和ju
上一篇 2017-12-02
下一篇 2017-12-02

相关推荐

  • python 常用记录

    all() >>> a = [11,22,33] >>> all(a) >>> ture 对序列进行判断,如果全为真,则返回Ture >>> a = [11,22,0] >>> a…

    Linux干货 2016-09-19
  • N25 _WSH 第二周

    2、bash 命令执行的状态结果:        * bash通过状态返回值来输出此结果:            * 成功:0            失败:1-255     &n…

    系统运维 2016-12-12
  • FHS文件系统共能介绍

    FHS文件系统共能介绍   FHS,即File Hierarchy Standard,文件层级标准。多数Linux系统下的文件管理采用此种文件组织形式,它定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。   这中组织是一种倒树状结构,所有的文件与目录都是由根目录”/”开始,然后…

    Linux干货 2016-10-18
  • 硬软链接的区别 节点 以及重定向和管道

    INODE全称叫index node 表中包含文件系统所有文件列表   一个节点是在一个表项 包含有关文件的信息 ( 元数据 ) 包括: 文件类型,权限,UID,GID 链接数(指向这个文件名路径名称个数) 该文件的大小和不同的时间戳 指向磁盘上文件的数据块指针 有关文件的其他数 1 文件引用一个是 inode号   2 我们是通过文件名…

    Linux干货 2016-08-12
  • Shell脚本之流程控制语句

    Shell脚本之流程控制语句 1、 if语句 (1)if 条件;then        action1 else        action2 fi  注意:shell里没有缩进要求。 (2)if 条件1;then   …

    Linux干货 2017-04-16
  • mount挂载,dd 工具,配置配额系统,RAID阵列,逻辑卷管理器LVM

    mount mount挂载 vim /etc/fstab 将常用的挂载的设备写入系统表中 文件挂载配置文件             /etc/fstab /etc/fstab每行定义一个要挂载的文件系统;   &nbsp…

    Linux干货 2016-09-01