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.www58058.com/27268

(0)
DYWDYW
上一篇 2016-08-02
下一篇 2016-08-02

相關推薦

  • zabbix監控Hadoop的實現

            Hadoop日常運行過程中一些參數需要進行實時監控,如:Map、Reduce任務數量,HDFS磁盤使用情況,namenode、datanode在線數量及健康情況,以便更好的掌握整個Hadoop集群架構的運行情況。         下面結合最近工作中的一些…

    Linux干貨 2015-03-08
  • 關于 進程和性能監控

            Linux系統狀態的查看及管理工具:     pstree, ps, pidof, pgrep, top, htop, glance,pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup pstree命…

    系統運維 2016-09-11
  • N25_第二周博客作業:

    N25_第二周博客作業: 1、linux上的文件管理命令都有哪些,其常用的使用方法及其相關示例演示。 Linux上常見的文件管理類命令有mkdir、touch、cp、mv、rm、stat。 mkdir:創建新目錄 SYNOPSIS   mkdir [OPTION]… DIRECTORY… 常用: 1、直接建目錄 [root@…

    Linux干貨 2016-12-09
  • 每日一練–8.8 sed,vim

     1 、刪除/etc/grub2.conf 文件中所有以空白開頭的行行首的空白字符     sed  's/^[[:space:]]//g' /etc grub2.conf ? 2 、刪除/etc/fstab 文件中所有以# 開頭,后面至少跟一個空白字符的行的行首的# 和空白字符   &n…

    Linux干貨 2016-08-12
  • Linux系統啟動流程簡圖

    CentOS 系統啟動流程: POST 加電自檢   外部硬件是否都能存在和是否能正常工作ROM:COMS 芯片上的BIOS 基本輸入輸出 BOOT Sequence:   引導加載次序,也就磁盤上的MBR,bootloader 按次序查找各引導設備,第一人有引導程序的設備即為本次啟動用到的設備。 bootloaderr:引導加載器,程序…

    2017-05-13
  • 樹的遍歷和排序

    樹的遍歷和排序

    Linux干貨 2017-10-23
欧美性久久久久