04 管道、重定向和環境變量

如果不能把 Linux 命令進行組合使用,則無法提升工作效率。

重定向技術的5種模式:標準覆蓋輸出重定向、標準追加輸出重定向、錯誤覆蓋輸出重定向、錯誤追加輸出重定向、輸入重定向。

image.png
輸入輸出重定向

        格式:“命令A 重定向符號 文件”

        輸入重定向是指把文件導入到命令中,而輸出重定向則是指把原本要輸出到屏幕的數據信息寫入到指定文件中。相較於輸入重定向,使用輸出重定向的頻率更高,所以又將輸出重定向分爲了標準輸出重定向和錯誤輸出重定向兩種不同的技術,以及清空寫入與追加寫入兩種模式。        

        標準輸入重定向(STDIN,文件描述符爲0):默認從鍵盤輸入,也可從其他文件或命令中輸入。

        標準輸出重定向(STDOUT,文件描述符爲1):默認輸出到屏幕。

        錯誤輸出重定向(STDERR,文件描述符爲2):默認輸出到屏幕。

image.pngimage.png

            備註: 正常信息輸入到文件時使用 “>”,錯誤信息輸入到文件時使用“2>”,如果不區分正常或錯誤信息都輸入到文件可以使用“&>”。

                        例:

                                man bash > readme.txt   #重定向中的標準輸出模式(將man bash命令原本要輸出到屏幕的信息寫入到文件readme.txt中)

                                echo "Welcome to Linux" > readme.txt    #重定向技術中的覆蓋寫入

                                echo "Quality linux learning materials" >> readme.txt   #重定向技術中的追加寫入

                                ls -l linuxxxxxx 2> /root/stderr.txt     #將錯誤信息記錄到/root/stderr.txt 文件中 

                                wc -l < readme.txt   #將文件的內容作爲標準輸入的信息,導入到命令中,統計一下文件中的內容行數。

                

         tee: 指令會從標準輸入設備讀取數據,將其內容輸出到標準輸出設備,同時保存成文件,語法格式:tee [參數] [文件]。

        

管道命令符   ( | 任意門 )

        格式:“命令A | 命令B”

        作用:把前一個命令原本要輸出到屏幕的標準正常數據當作是後一個命令的標準輸入。        

image.png

                    例:

                grep "/sbin/nologin" /etc/passwd | wc -l  #通過匹配關鍵詞/sbin/nologin找出了所有被限制登錄系統的用戶,並統計文本行數

                ls -l /etc/ | more   #用翻頁的形式查看/etc目錄中的文件列表及屬性信息

                echo "user" | passwd --stdin root  #在修改用戶密碼時,通常都需要輸入兩次密碼以進行確認,這在編寫自動化腳本時將成爲一個非常致命的缺陷。通過把管道符和passwd命令的--stdin參數相結合,可以用一條命令來完成密碼重置操作

                echo "Content" | mail -s "Subject" user  #給本機其他用戶發生郵件

                mail -s "Readme" [email protected] << over   #使用了mail郵件命令與輸入重定向的分界符,其目的是讓用戶一直輸入內容,直到用戶輸入了其自定義的分界符時,才結束輸入。

                                grep /bin/bash /etc/passwd | wc -l    #查詢可登錄系統的用戶數

                                echo 123456 | passwd --stdin user   #一句命令設置用戶密碼

命令行的通配符

                *代表匹配零個或多個字符

                ?代表匹配單個字符

                [0-9] 代表匹配0~9之間的單個數字的字符

                [a,b,c] 則是代表匹配a、b、c三個字符中的任意一個字符,沒有匹配到的不會報錯

                {a,b,c} 匹配指定字母,沒有匹配到的會有錯誤信息

                [a-z] 則代表a-z的26個小寫字母

                [A-Z] 則代表A-Z的26個大寫字母

image.png

                例:

                    ls -l /dev/sda*

                    ls -l /dev/sda?

                    ls -l /dev/sda[0-9]

                    ls -l /dev/sda[135]


常用的轉義字符

                反斜槓(\):使反斜槓後面的一個變量變爲單純的字符串。

                單引號(''):轉義其中所有的變量爲單純的字符串。

                雙引號(""):保留其中的變量屬性,不進行轉義處理。

                反引號(``):把其中的命令執行後返回結果。

                    例:

                        echo `uname -a`    不執行命令,將命令以字符輸出


環境變量

                第1步:判斷用戶是否以絕對路徑或相對路徑的方式輸入命令(如/bin/ls),如果是的話則直接執行。

                第2步:Linux系統檢查用戶輸入的命令是否爲“別名命令”,即用一個自定義的命令名稱來替換原本的命令名稱。可以用alias命令來創建一個屬於自己的命令別名,格式爲“alias 別名=命令”。若要取消一個命令別名,則是用unalias命令,格式爲“unalias 別名”。

                3步:Bash解釋器判斷用戶輸入的是內部命令還是外部命令。內部命令是解釋器內部的指令,會被直接執行;而用戶在絕大部分時間輸入的是外部命令,這些命令交由步驟4繼續處理。可以使用“type命令名稱”來判斷用戶輸入的命令是內部命令還是外部命令。

                第4步:系統在多個路徑中查找用戶輸入的命令文件,而定義這些路徑的變量叫作PATH,可以簡單地把它理解成是“解釋器的小助手”,作用是告訴Bash解釋器待執行的命令可能存放的位置,然後Bash解釋器就會乖乖地在這些位置中逐個查找。PATH是由多個路徑值組成的變量,每個路徑值之間用冒號間隔,對這些路徑的增加和刪除操作將影響到Bash解釋器對Linux命令的查找

image.png


                        在接手了一臺Linux系統後一定會在執行命令前先檢查PATH變量中是否有可疑的目錄。

                        使用export命令可將普通變量提升爲全局變量。

                        使聲明的變量永久生效需要更改 /etc/profile 或 ~/.bashrc 文件。

                        顯示出系統中所有的環境變量:env (environment)

                        顯示出所有的變量:set                        


其他

        修改提示符   

                    PS1=名稱  (修改回去, exit 退出,重新啓動)

                    永久修改   vim ~/.bashrc     在文件中新起一行增加  PS1=名稱   保存退出,exit退出再重啓終端

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章