天天看點

Linux系統管理(一):輸入輸出重定向

Linux系統管理(一):輸入輸出重定向

重定向

什麼是重定向:

## 标準的輸入裝置預設指的是鍵盤,标準的輸出裝置預設指的是顯示器。

  #- 輸入重定向:指定裝置(通常是檔案或指令的執行結果)來代替鍵盤作為新的輸入裝置;
  #- 輸出重定向:将原本要輸出在螢幕上的結果放到指定的裝置(通常是檔案)
           

為何用(重定向的作用)

1.當螢幕輸出的資訊很重要,而且希望儲存重要的資訊備份
2.不幹擾螢幕的使用 ping baidu
3.儲存錯誤/報錯日志
4.定時任務的運作結果
5.執行一個指令,把報錯資訊丢棄到/dev/null
5.執行一個指令,可能報錯和正确的輸出并存,類似錯誤日志與标準正确日志需要分别輸出至不同的檔案。           

輸入和輸出

執行一個shell程式時通常會自動打開三個檔案描述符

名稱 檔案描述符
标準輸入(stdin) 鍵盤,也可以是其他檔案或者指令的輸出的内容可以作為标準輸入
标準輸出(stdout) 1 預設輸出到螢幕
錯誤輸出(stderr) 2 預設輸出到螢幕
檔案名稱(filename) 3+

程序将從标準輸入中得到資料,将正常輸出列印至螢幕終端,将錯誤的輸出資訊也列印至螢幕終端。

程序使用檔案描述符(file descriptors)來管理打開的檔案

Linux系統管理(一):輸入輸出重定向

以cat指令為例, cat指令的功能是從指令行給出的檔案中讀取資料,并将這些資料直接送到标準輸出。

直接用cat:
# cat /etc/passwd    
會把/etc/passwd的内容依次顯示到螢幕上


# cat       cat指令行中沒有參數, 它就會從标準輸入中讀取資料, 并将其送到标準輸出。
hello       按enter後使用者輸入的每一行都立刻被cat指令輸出到螢幕上。
hello           

輸出重定向

符号格式 作用
指令> /1>檔案 标準輸出重定向(覆寫) 将指令執行的結果放到檔案中,不顯示在螢幕上,覆寫檔案内容
指令>>檔案 标準輸出重定向(追加) 将指令執行的結果輸出到指定的檔案中,不會覆寫,如果該檔案已包含資料,新資料将寫入到原有内容的後面。
指令2>檔案 錯誤輸出重定向(覆寫) 将原本要顯示在螢幕的報錯内容放入指定檔案,會先清空檔案,再覆寫原有内容
指令2>>檔案 錯誤輸出重定向(追加) 将原本要顯示在螢幕的報錯内容追加到指定檔案

例1 标準輸出重定向(覆寫)

[root@localhost ~]# ifconfig eth0 > abc   (會自動建立檔案abc)
[root@localhost ~]# cat abc
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
      inet 10.0.0.251 netmask 255.255.255.0 broadcast 10.0.0.255
      inet6 fe80::9bc0:f459:3a67:bd7a prefixlen 64 scopeid 0x20<link>
      inet6 fe80::152f:f2c7:21b3:412b prefixlen 64 scopeid 0x20<link>
      inet6 fe80::e1af:89d9:4338:31df prefixlen 64 scopeid 0x20<link>
      ether 00:0c:29:c3:b0:5d txqueuelen 1000 (Ethernet)
      RX packets 2812 bytes 244635 (238.9 KiB)
      RX errors 0 dropped 0 overruns 0 frame 0
      TX packets 1879 bytes 363592 (355.0 KiB)
      TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0           

例2 标準輸出重定向(追加)

[root@localhost ~]# echo "This is network conf" >> if (沒有自動建立了if檔案)
[root@localhost ~]# cat if
This is network conf


[root@localhost ~]# echo 111 >> if
[root@localhost ~]# cat if
This is network conf
111           

例3 錯誤輸出重定向

[root@localhost ~]# su - xxx
[xxx@localhost ~]$ find /etc -name "*.conf"           (标準輸出和錯誤全部顯示在螢幕上)
[xxx@localhost ~]$ find /etc -name "*.conf" 1>a 2>b   (标準輸出進檔案a,錯誤進b)
[xxx@localhost ~]$ cat b
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
......(省略)


&符
[zls@zls ~]$ find /etc -name "*.conf" &>ab     (全進檔案ab)


[root@localhost ~]# crontab -e     編輯定時任務


# 在裡面輸入:
* * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null           

輸入重定向

輸入重定向,即原本從鍵盤等裝置上獲得的輸入資訊,重定向由指令的輸出作為輸入。

指令 < 檔案               将指定檔案作為指令的輸入裝置
指令 << 分界符         表示從标準輸入裝置(鍵盤)中讀入,直到遇到分界符才停止(讀入的資料不包括分界符)
指令 < 檔案1 > 檔案2     将檔案1作為指令的輸入裝置,該指令的執行結果輸出到檔案2 中。           

例1

[root@localhost ~]# cat /etc/passwd
[root@localhost ~]# cat < /etc/passwd      輸出結果同上面指令相同


[root@localhost ~]# grep 'root'            等待輸入
cch
kjnj
[root@localhost ~]# grep 'root' < /etc/passwd    輸入裝置變為/etc/passwd
root:x:0:0:root:/root:/bin/bash           

例2

[root@localhost ~]# cat a.txt
[root@localhost ~]# cat < /etc/passwd > a.txt
[root@localhost ~]# cat a.txt                 輸出了和 /etc/passwd 檔案内容相同的資料

           

自己操作試驗:

[root@localhost ~]# vim 2.txt     建立一個2.txt 輸入:“不管是昨天的風”
[root@localhost ~]# cat > 2.txt   需要按ctrl D結束輸入
woshii^Hnnibaba
babab
[root@localhost ~]# cat 2.txt     發現被覆寫了
woshinnibaba
babab


[root@localhost ~]# cat > 2.txt < A   按A結束輸入 一個<不行
bash: A: No such file or directory
[root@localhost ~]# cat > 2.txt << A      
> hahahahah
> A


[root@localhost ~]# cat >> 2.txt << A   >>追加,不覆寫
> hohouhhh
> A
[root@localhost ~]# cat 2.txt
hahahahah
hohouhhh

           

繼續閱讀