1. 程式人生 > >Linux進階第五天

Linux進階第五天

linu 圖片 環境 filesize 特意 變量名 cda 斜杠 完全

管道符、重定向與環境變量

輸入輸出重定向,重定向把多個Linux命令組合到一起,更高效的處理數據,
輸入為小於符號<
輸出為大於符號>
舉個例子:
將uptime打印到屏幕上的內容輸入到lgm.txt文件中:

技術分享圖片
而追加輸入為>>:
再次將uptime打印到屏幕上的內容輸入到lgm.txt文件中:
技術分享圖片
另外,需要提一下的是標準輸出重定向與錯誤輸出重定向的區別比如我們分別查看兩個文件的屬性信息,lgm1,與lgm2,其中lgm2是不存在的:

技術分享圖片
將ls -l 命令輸出的結果分別輸入到jieguo1與jieguo2中:
技術分享圖片

對於重定向中的標準輸出模式,可以省略文件描述符1不寫,而錯誤輸出模式的文件描述符2是必須要寫的。


輸入重定向參數:
命令 < 文件 將文件作為命令的標準輸入
命令 << 分界符 從標準輸入中讀入,直到遇見分界符才停止
命令 < 文件1 > 文件2 將文件1作為命令的標準輸入並將標準輸出到文件2

輸出重定向參數:
命令 > 文件 將標準輸出重定向到一個文件中(清空原有文件的數據)
命令 2> 文件 將錯誤輸出重定向到一個文件中(清空原有文件的數據)
命令 >> 文件 將標準輸出重定向到一個文件中(追加到原有內容的後面)
命令 2>> 文件 將錯誤輸出重定向到一個文件中(追加到原有內容的後面)
命令 >> 文件 2>&1


命令 &>> 文件 將標準輸出與錯誤輸出共同寫入到文件中(追加到原有內容的後面)


註意:
重定向是:命令與文件之間的交互
管道符是:命令與命令之間的交互


39.管道命令符

管道符便是命令與,命令之間交互的橋梁:
舉個例子:
查詢系統中不能登陸到用戶的信息:
技術分享圖片
通過管道符進行二次處理:

技術分享圖片
顯示共有42行


在修改用戶密碼時,通常都需要輸入兩次密碼以進行確認,這在編寫自動化腳本時將成為一個非常致命的缺陷。通過把管道符和passwd命令的--stdin參數相結合,我們可以用一條命令來完成密碼重置操作:
技術分享圖片


40.命令行的通配符
星號(*)代表匹配零個或多個字符,問號(?)代表匹配單個字符,中括號內加上數字[0-9]代表匹配0~9之間的單個數字的字符,而中括號內加上字母[abc]則是代表匹配a、b、c三個字符中的任意一個字符。

查看在/dev/目錄中且以sda開頭的文件:

技術分享圖片
41.常用的轉義字符

4個最常用的轉義字符如下所示。
? 反斜杠(\):使反斜杠後面的一個變量變為單純的字符串。
? 單引號(‘‘):轉義其中所有的變量為單純的字符串。
? 雙引號(""):保留其中的變量屬性,不進行轉義處理。
? 反引號(``):把其中的命令執行後返回結果。


我們先定義一個名為pen的變量並賦值為2,然後輸出以雙引號括起來的字符串與變量信息:

技術分享圖片
我們希望能夠輸出“pen is $2”,即價格是2美元的字符串內容,但碰巧美元符號與變量提取符號合並後的$$作用是顯示當前程序的進程ID號碼,於是命令執行後輸出的內容並不是我們所預期的:
再添加一個$符號:
技術分享圖片
顯然還是沒有達到目的效果,那麽這時就需要用反斜杠(\)來進行轉義,將這個命令提示符轉義成單純的文本 ,去除其特殊功能:
技術分享圖片
如此便達到了目的。


42.環境變量

變量是計算機系統用於保存可變值的數據類型。在Linux系統中,變量名稱一般都是大寫的,這是一種約定俗成的規範。我們可以直接通過變量名稱來提取到對應的變量值。Linux系統中的環境變量是用來定義系統運行環境的一些參數

簡單來說,命令在Linux中的執行分為4個步驟。
第1步:判斷用戶是否以絕對路徑或相對路徑的方式輸入命令(如/bin/ls),如果是的話則直接執行。
第2步:Linux系統檢查用戶輸入的命令是否為“別名命令”,即用一個自定義的命令名稱來替換原本的命令名稱。可以用alias命令來創建一個屬於自己的命令別名,格式為“alias 別名=命令”。

技術分享圖片
若要取消一個命令別名,則是用unalias命令,格式為“unalias 別名”。我們之前在使用rm命令刪除文件時,Linux系統都會要求我們再確認是否執行刪除操作,其實這就是Linux系統為了防止用戶誤刪除文件而特意設置的rm別名命令,接下來我們把它取消掉:
技術分享圖片
現在便已經取消了。
第3步:Bash解釋器判斷用戶輸入的是內部命令還是外部命令。內部命令是解釋器內部的指令,會被直接執行;而用戶在絕大部分時間輸入的是外部命令,這些命令交由步驟4繼續處理。可以使用“type命令名稱”來判斷用戶輸入的命令是內部命令還是外部命令。
第4步:系統在多個路徑中查找用戶輸入的命令文件,而定義這些路徑的變量叫作PATH,可以簡單地把它理解成是“解釋器的小助手”,作用是告訴Bash解釋器待執行的命令可能存放的位置,然後Bash解釋器就會乖乖地在這些位置中逐個查找。PATH是由多個路徑值組成的變量,每個路徑值之間用冒號間隔,對這些路徑的增加和刪除操作將影響到Bash解釋器對Linux命令的查找。

技術分享圖片

HOME 用戶的主目錄(即家目錄)
SHELL 用戶在使用的Shell解釋器名稱
HISTSIZE 輸出的歷史命令記錄條數
HISTFILESIZE 保存的歷史命令記錄條數
MAIL 郵件保存路徑
LANG 系統語言、語系名稱
RANDOM 生成一個隨機數字
PS1 Bash解釋器的提示符
PATH 定義解釋器搜索用戶執行命令的路徑
EDITOR 用戶默認的文本編輯器


其實變量是由固定的變量名與用戶或系統設置的變量值兩部分組成的,我們完全可以自行創建變量,來滿足工作需求。例如設置一個名稱為WORKDIR的變量,方便用戶更輕松地進入一個層次較深的目錄:
技術分享圖片
但是,這樣的變量不具有全局性,作用範圍也有限,默認情況下不能被其他用戶使用。如果工作需要,可以使用export命令將其提升為全局變量,這樣其他用戶也就可以使用它了:
技術分享圖片

Linux進階第五天