linux系統管理-輸入輸出

linux系統管理-輸入輸出

重定向

將本來要輸出到屏幕上的數據信息,從新定向到指定的文件中linux

運行程序,或者輸入一個命令:默認打開4個文件描述符nginx

標準輸入與輸出

名稱 文件描述符 做用
標準輸入(stdin) 0 一般鍵盤,也能夠是其餘文件或者命令的輸出的內容能夠做爲標準輸入
標準輸出(stdout) 1 默認輸出到屏幕
錯誤輸出(stderr) 2 默認輸出到屏幕
文件名稱(filename) 3+
/dev/stderr(錯誤輸出) -> /proc/self/fd/2            2 -> /dev/pts/0
/dev/stdin(標準輸入) -> /proc/self/fd/0             0 -> /dev/pts/0
/dev/stdout(標準輸出) -> /proc/self/fd/1            1 -> /dev/pts/0
輸出重定向分類
  • 重定向的特性:覆蓋文件

1>:標準輸出重定向,將命令執行的正確結果輸出到指定的文件或者設備中sql

2>:錯誤輸出重定向shell

  • 追加劇定向:不會覆蓋文件

1>>:標準輸出追加劇定向,將命令執行的正確結果追加輸出到文件末尾app

2>>:錯輸出追加劇定向,將命令執行的錯誤結果追加輸出到文件末尾網站

<< :標準輸入重定向,將鍵盤敲的內容,輸入到命令或者文件中ui

輸出重定向的使用
#將正確的內容追加到文件中,錯誤會輸出到屏幕(不會覆蓋源文件)
echo "This is network conf" >> abc

#將錯誤的內容輸出到文件中,正確的會輸出到屏幕(會覆蓋源文件)
find /etc -name "*.conf" 2>b
find /etc -name "*.conf" 1>a 2>b

#合併輸出,錯誤的正確的內容都會輸出到一個文件(會覆蓋源文件)
find /etc -name "*.conf" >c 2>&1
find /etc -name "*.conf" >c 2>c
find /etc -name "*.conf" &>c

#將錯誤輸出重定向到 ‘黑洞’,正確內容輸出到屏幕/dev/pts/x
ls /root/ /err 2>/dev/null

#將錯誤輸出重定向到 ‘黑洞’,正確內容輸出到1.txt文件中
ls /root/ /err >1.txt 2>/dev/null

輸入的重定向使用

< :0<code

<<:0<<排序

案例1:
    cat >> zls.txt <<eof
    zls
    qiudao
    eof
    
    案例2:
    [root@zls ~]# mail zls < /etc/passwd
    
    案例3:
    [root@oldboyedu ~]# grep 'root'
    rppr
    qwe
    rootasdasdadzxczxc
    rootasdasdadzxczxc
    ^C
    
    案例4:
    [root@oldboyedu ~]# dd if=/dev/zero of=/file1.txt bs=1M count=20
    20+0 records in
    20+0 records out
    20971520 bytes (21 MB) copied, 0.0260574 s, 805 MB/s

    [root@oldboyedu ~]# dd </dev/zero >/file2.txt bs=1M count=20
    20+0 records in
    20+0 records out
    20971520 bytes (21 MB) copied, 0.011896 s, 1.8 GB/s


    案例5:
    恢復mysql數據
    [root@zls ~]# mysql -uroot -p123 < bbs.sql
    
    
    案例6:利用重定向創建多行文件
    [root@oldboyedu ~]# cat >file1

    案例7:
    #!/bin/sh
    menu(){
        cat <<EOF
        +------------+
        | 1 | apple  |
        +---+--------+
        | 2 | pear   |
        +---+--------+
        | 3 | banana |
        +---+--------+
        | 4 | cherry |
        +---+--------+
    EOF
    read -p "please input a num: " fruit
    }
    
    usage(){
        echo "USAGE:請輸入水果編號"
        exit 1
    }
    
    color(){
    case "$fruit" in
    1)
        echo -e "\E[1;31mapple \E[0m"
        ;;
    2)
        echo -e "\E[1;20mpear \E[0m"
        ;;
    3)
        echo -e "\E[1;33mbanana \E[0m"
        ;;
    4)
        echo -e "\E[1;35mcherry \E[0m"
        ;;
    *)
        usage
    esac
    }
    menu
    color
    
    案例8:多條命令重定向
    [root@oldboyedu ~]# (ls;date) > a.txt
    
    
    案例9:後臺進程重定向
    (while :; do date; sleep 2; done) &>/dev/null &

管道技術 |

鏈接多個命令,將管道符左側的標準輸出,交給管道符右側的命令標準輸入

案例1:
    將/etc/passwd 中的UID取出並按大小排序
    [root@oldboyedu ~]# awk -F : '{print $3}' /etc/passwd|sort -n

案例2:
    統計當前/etc/passwd 中用戶使用的 shell 類型
    [root@oldboyedu ~]# awk -F : '{print $NF}' /etc/passwd|sort |uniq|wc -l
    5
案例4:統計網站訪問量top20
    [root@driver-zeng nginx]# awk '{print $1}' driverzeng.com_access.log|sort       |uniq -c|sort -nr|head -20
    
案例5:取出cpu已使用的百分比,只顯示數字
    [root@oldboyedu ~]# df -h |awk -F '[ %]+' 'NR==2 {print $5}'
    4

tee:至關於管道符

[root@zls ~]# date > date.txt 
[root@zls ~]# date |tee date.txt

參數傳遞xargs

將參數列表轉換成小塊分段傳遞給其餘命令
讀入stdin的數據轉換爲參數添加至命令後面
讓一些不支持管道的命令能夠使用管道。

注意:

1.在管道後面的命令,都不該該在寫文件名
2.在管道中只有標準輸出才能夠傳遞下一個命令, 標準錯誤輸出會直接輸出終端顯示, 建議在使用管道前將標準錯誤輸出重定向。
例如: find /etc -name "*.conf" 2>/dev/null | grep rc
3.有些命令不支持管道技術, 可是能夠經過xargs來實現管道傳遞。 例如: which cat|xargs ls-l 例如: ls |xargs rm -rvf 例如: ls |xargs cp -rvft /tmp/ -> ls | xargs -I {} cp -rvf {} /tmp 例如: ls |xargs mv -t /tmp/ -> ls | xargs -I {} mv {} /tmp

相關文章
相關標籤/搜索