I/O重定向及管道

一、I/O重定向

    程序=指定+数据

    读取数据:input

    输出数据:output

    打开的文件都有一个fd:文件描述符

    linux给程序提供三种I/O设备:

        标准输入(standard input) -0 默认接受来自键盘的输入

        标注输出(standard output) -1 默认输出到终端窗口

        标准错误(standard erroe) -2 默认输出到终端窗口

    I/O重定向:改变默认位置

二、标准输出和标准错误可以被重定向到文件 

    command 操作符号 文件名

    支持的操作符号:

        >:把标准输出重定向到文件

[root@localhost ~]# ls > /wang/dir
[root@localhost ~]# cat /wang/dir
anaconda-ks.cfg
mima.txt
mulu1
mulu2
wenjian1
wenjian2
yonghu.txt

        2>:把标准错误重定向到文件

[root@localhost ~]# xxx 2> /wang/dir
[root@localhost ~]# cat /wang/dir
-bash: xxx: command not found

        &>:把所有输入重定向到文件  

[root@localhost ~]# ls /wang /wang/x &> /wang/dir
[root@localhost ~]# cat /wang/dir
ls: cannot access /wang/x: No such file or directory
/wang:
123
dir

    >文件内容会被覆盖

         set -C:禁止将内容覆盖已有文件,但可追加

            强制覆盖>|

        set +C:允许覆盖

    >>:在原有的内容上,追加内容,不会被覆盖。

    2>:覆盖重定向错误输出数据流

    2>>:追加重定向错误输出数据流

    标准输出和标准错误各自定向不同位置

        command > 文件1 2> 文件2

[root@localhost ~]# ls /wang /wang/xx > /wang/yes 2> /wang/no
[root@localhost ~]# cat /wang/yes /wang/no
/wang:
123
dir
no
yes
ls: cannot access /wang/xx: No such file or directory

    合并标准输出和错误输出为同一个数据流进行重定向

    &>:覆盖重定向

    &>>:追加重定向

    command > 文件 2>>&1 (固定顺序)

    command >> 文件 2>>&1

    ():合并多个程序的标准输出 

[root@localhost ~]# (ls;pwd) > /wang/321
[root@localhost ~]# cat /wang/321
anaconda-ks.cfg
mima.txt
mulu1
mulu2
wenjian1
wenjian2
yonghu.txt
/root

三、tr命令

    tr – 转换和删除字符

    t2 选项 set1 set2

     常用选项:

        -c或–complerment:取字符集的补集

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

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

        -t或–truncate

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

四、从文件中导入标准输入

    使用<来重定向标准输入

    某些命令能接受从文件中导入的stdin

        tr ‘a-z’ ‘A-Z’ < /etc/issue

        这条命令会把/etc/issus中的小写字符都转换成大写字符

[root@localhost wang]# tr 'a-c' 'A-C' < /wang/qqq
ABCdefg

        tr -d abc < /etc/fstab

        删除fstab文件中的所有adc中任意字符

[root@localhost wang]# tr -d abc < /wang/qqq
defg

        cat > filea

         mage

         wang

        按ctry+d离开,可以使用文件来代替键盘的输入

[root@localhost wang]# cat  > qqq
123 
qwe
asd
123[root@localhost wang]#

        cat > filea < filed

[root@localhost wang]# cat > 123 < qqq
[root@localhost wang]# cat 123
123 
qwe
asd
123

五、把多行发送给标准输入

    使用“<<终止词”命令从键盘把多行重定向给stdin

        直到 终止词 位置的所有文本都发送给stdin

        有时被成为就地文本(heretext)

[root@localhost wang]# mail -s "Please Call" linux@wang <<end
> Hi wang
> please give me a cao when you get in ,
> we man need to do some maintenance on server
> 
> end
[root@localhost wang]#

六、管道

    使用符号“|”表示,用来链接命令

    命令1|命令2|命令3

    将命令1的标准输出发送给命令2的标准输入,命令2的标准输出发送到命令3的标准输入

    标准错误默认不能通过管道转发,可利用2>&1或|&实现

    最后一个命令会在当前shell进程的字shell进程中执行,用来组合多种工具的功能

[root@localhost wang]# cat qqq | tr 'a-d' 'A-D'
123 
qwe
AsD
123

    less:一页一页的查看输入

        ls -l /wang | less

    

    mail:通过电子邮件发送输入:

        echo"test email" | mail -s "test" user@example.com

    lpr:把输入发送给打印机

        echo"test print" |lpr -P printer_name

七、重定向到多个目标(tee)

    命令1 | tee 文件名 | 命令2

        把命令1中的标准输出保存在文件名中,然后管道输出给命令2使用:

        保存不同阶段的输出

        复杂管道的故意排除

        同时查看和记录输出

[root@localhost wang]# ls | tee /wang/wang
123
321
dir
no
qqq
wang
yes
[root@localhost wang]# cat /wang/wang
123
321
dir
no
qqq
wang
yes

原创文章,作者:DYW,如若转载,请注明出处:http://www.178linux.com/27268

(0)
上一篇 2016-08-02 16:44
下一篇 2016-08-02 16:58

相关推荐

  • 730作业

    1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中 [root@local ~]# cat /etc/issue |tr "[[:lower:]]" "[[:upper:]]" > /tmp/i…

    Linux干货 2016-08-02
  • 初窥门径shell脚本

    1.什么是shell脚本    首先它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的shell中,所以叫shell脚本。确切的说shell脚本就是一些命令的集合。 2.写脚本前的一些细节及建议   Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已…

    Linux干货 2016-08-15
  • 用shell脚本打等腰三角新

       *   ***  ***** *******   预览图形 发现图形由三个变量组成 行数n 每行的空格数a 和每行的符号数b 关系是    a=n-当前行数    b=2xn-1   并且空格都在符号前 根据关系编写脚本 #!/bin/bash read…

    Linux干货 2016-08-22
  • Linux磁盘阵列RAID以及mdadm实现软件RAID

    一、概要 RAID(磁盘阵列):由众多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果来提升整个磁盘的性能。 二、RAID的级别及其优缺点 读性能提升 写性能提升 容错能力 组合后空间大小 RAID0 上升 上升 无 n*单个磁盘大小 RAID1 上升 下降 有(最多坏一块磁盘) 1*单个磁盘大小 RAID4 上升 上升 有(…

    2015-04-20
  • 自制Linux系统

                          自制Linux系统 1、环境准备:         在centos6上添加一块新硬盘,并分区格式化。 &n…

    系统运维 2016-09-21