一、輸入重定向和輸出重定向 輸入重定向就是把文件作為命令的參數,輸出重定向就是把原本要輸出到屏幕上的內容寫到文件裡面。 (1)輸入重定向: (2)輸出重定向; 對於重定向中的標準輸出模式,可以省略文件描述符1不寫,而錯誤輸出模式的文件描述符2是必須要寫的。 示例: 重定向中的覆蓋寫入和追加寫入的不同 ...
一、輸入重定向和輸出重定向
輸入重定向就是把文件作為命令的參數,輸出重定向就是把原本要輸出到屏幕上的內容寫到文件裡面。
(1)輸入重定向:
(2)輸出重定向;
對於重定向中的標準輸出模式,可以省略文件描述符1不寫,而錯誤輸出模式的文件描述符2是必須要寫的。
示例:
重定向中的覆蓋寫入和追加寫入的不同:
覆蓋寫入就是清除原有數據,只保留最後一次的輸入;追加寫入就是保留原來的數據在後面添加後來的數據
雖然都是輸出重定向,但是標準輸出和錯誤輸出還是有區別的。如果文件存在則輸出文件內容,如果不存在則錯誤消息會輸出到屏幕,
如何把創建文件時的錯誤消息也寫入呢?示例如下
還有一種常見情況,就是我們想不區分標準輸出和錯誤輸出,只要命令有輸出信息則全部追加寫入到文件中。這就要用到&>>操作符了:
二、管道符命令
其執行格式為“命令A | 命令B”。管道命令符的作用也可以用一句話概括為“把前一個命令原本要輸出到屏幕的信息當作後一個命令的標準輸入”
在修改用戶密碼時,通常都需要輸入兩次密碼以進行確認,這在編寫自動化腳本時將成為一個非常致命的缺陷。通過把管道符和passwd命令的--stdin
參數相結合,可以用一條命令來完成密碼重置操作:
如果需要將管道符處理後的結果既輸出到屏幕,又同時寫入到文件中,則可以與tee命令結合使用。
命令通配符
顧名思義,通配符就是通用的匹配信息的符號,比如星號(*)代表匹配零個或多個字元,問號(?)代表匹配單個字元,中括弧內加上數字[0-9]代表匹配
0~9之間的單個數字的字元,而中括弧內加上字母[abc]則是代表匹配a、b、c三個字元中的任意一個字元。
示例:
匹配所有在/dev目錄中且以loop開頭的文件:
如果只想查看文件名以ram開頭,但是後面還緊跟其他某一個字元的文件的相關信息,這時就需要用到問號來進行通配了
通配符不僅可用於搜索文件或代替被通配的字元,還可以與創建文件的命令相結合,一口氣創建出好多個文件。不過在創建多個文件時,需要使用大括弧,
並且欄位之間用逗號間隔:
轉義字元
四個常見的轉義字元:
我們先定義一個名為number的變數並賦值為5,然後輸出以雙引號括起來的字元串與變數信息:
而如果只需要某個命令的輸出值,可以像命令
這樣,將命令用反引號括起來,達到預期的效果。例如,將反引號與uname -a命令結合,然後使用echo命令
來查看本機的Linux版本和內核信息:
三、環境變數
在Linux系統中,變數名稱一般都是大寫的,命令則都是小寫的,這是一種約定俗成的規範。Linux系統中的環境變數是用來定義系統運行環境的一些參數,比如每個用戶不同的家目錄、郵件存放位置等。可以直接通過變數名稱來提取到對應的變數值。
為了更好地幫助大家理解變數的作用,給大家舉個例子。前文中曾經講到,在Linux系統中一切都是文件,Linux命令也不例外。那麼,在用戶執行了一條命令之後,Linux系統中到底發生了什麼事情呢?簡單來說,命令在Linux中的執行分為4個步驟。
第1步:判斷用戶是否以絕對路徑或相對路徑的方式輸入命令(如/bin/ls),如果是絕對路徑則直接執行,否則進入第2步繼續判斷。
第2步:Linux系統檢查用戶輸入的命令是否為“別名命令”,即用一個自定義的命令名稱來替換原本的命令名稱。
使用rm命令刪除文件時,Linux系統都會要求用戶確認是否執行刪除操作,其實這就是Linux系統為了防止用戶誤刪除文件而特意設置的rm別名命令—“rm -i”。
可以用alias命令來創建一個屬於自己的命令別名,語法格式為“alias別名=命令”。若要取消一個命令別名,則是用unalias命令,語法格式為“unalias別名”。
第3步:Bash解釋器判斷用戶輸入的是內部命令還是外部命令。內部命令是解釋器內部的指令,會被直接執行;而用戶在絕大部分時間輸入的是外部命令,這些命令交由步驟4繼續處理。可以使用“type命令名稱”來判斷用戶輸入的命令是內部命令還是外部命令:
第4步:系統在多個路徑中查找用戶輸入的命令文件,而定義這些路徑的變數叫作PATH,可以簡單地把它理解成是“解釋器的小助手”,作用是告訴Bash解釋器待執行的命令可能存放的位置,然後Bash解釋器就會乖乖地在這些位置中逐個查找。PATH是由多個路徑值組成的變數,每個路徑值之間用冒號間隔,對這些路徑的增加和刪除操作將影響到Bash解釋器對Linux命令的查找。
常見環境變數:
Linux作為一個多用戶、多任務的操作系統,能夠為每個用戶提供獨立的、合適的工作運行環境。因此,一個相同的變數會因為用戶身份的不同而具有不同的值。
其實變數是由固定的變數名與用戶或系統設置的變數值兩部分組成的,我們完全可以自行創建變數來滿足工作需求。例如,設置一個名稱為WORKDIR的變數,方便用戶更輕鬆地進入一個層次較深的目錄:
但是這樣的變數不具有全局性,如果工作需要,可以使用export命令將其提升為全局變數,這樣其他用戶也就可以使用它了:
後續要是不使用這個變數了,則可執行unset命令把它取消掉: