從零開始的Linux學習日誌(2)
阿新 • • 發佈:2018-12-19
重定向命令列
1.標準輸入輸出重定向
標準輸入重定向(STDIN,檔案描述符為0) | 預設從鍵盤輸入,也可從檔案或命令輸入。 |
---|---|
標準輸出重定向(STDOUT,檔案描述符為1) | 預設輸出到螢幕 |
錯誤輸出重定向(STDERR,檔案描述符為2) | 預設輸出到螢幕 |
命令不特別指明的話就是標準輸入輸出重定向,比如ls -l就是標準輸出重定向,將當前目錄的檔案輸出到螢幕。
2.輸入重定向
符號 | 作用 |
---|---|
命令 < 檔案 | 將檔案作為命令的標準輸入 |
命令 << 分界符 | 從標準輸入中讀入,直到遇到分界符為止 |
命令 < 檔案1 > 檔案2 | 將檔案1作為命令的標準輸入,並將結果標準輸出到檔案2 |
這個有點類似於C++中cin >> 變數,將輸入流中讀取的資料給物件,這是將檔案內容給命令。
3.輸出重定向
符號 | 作用 |
---|---|
命令 > 檔案 | 將標準輸出重定向到檔案中(覆蓋該檔案) |
命令 2> 檔案 | 將錯誤輸出重定向到檔案中(覆蓋該檔案) |
命令 >> 檔案 | 將標準輸出重定向到檔案中(追加在檔案末尾) |
命令 2>> 檔案 | 將錯誤輸出重定向到檔案中(追加在檔案末尾) |
命令 >> 檔案 2>&1 或 命令 &>> 檔案 | 將標準輸出和錯誤輸出重定向到檔案中(追加在檔案末尾) |
關於錯誤輸出,即將命令的錯誤輸出,比如
[[email protected] Desktop]# ls
test.txt
[[email protected] Desktop]# ls -l xxx 2> test.txt
[[email protected] Desktop]# cat test.txt
ls: cannot access xxx: No such file or directory
可以看到,桌面上只有test.txt這個檔案,所以ls -l xxx這條命令就發生了錯誤。
管道命令符
管道命令符的格式為命令1 | 命令2,作用為將命令1的標準輸出作為命令2的標準輸入。 舉個例子,ls
[[email protected] Desktop]# ls
test.txt
[[email protected] Desktop]# ls | wc -l
1
命令列的萬用字元
萬用字元 | 作用 |
---|---|
* | 匹配零個或多個字元 |
? | 匹配單個字元(注意零個不行) |
[0-9] | 匹配範圍內的單個數字 |
[abc] | 匹配列出的的字元 |
萬用字元的用法基本跟其他程式設計體系中差不多,有程式設計基礎的話還是挺容易接受的。
[[email protected] Desktop]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2
[[email protected] Desktop]# ls /dev/sd?
/dev/sda
[[email protected] Desktop]# ls /dev/sd[abc123]
/dev/sda
常用的轉義字元
轉義字元 | 作用 |
---|---|
\ | 使反斜槓後面的一個變數變為一個單純的字串 |
‘’ | 使其中的變數直接作為字串輸出 |
“” | 保留雙引號中變數的變數屬性 |
·· | 執行反引號內的命令並返回其結果 |
[[email protected] Desktop]# a=1
[[email protected] Desktop]# echo 'a = $a'
a = $a
[[email protected] Desktop]# echo "a = $a"
a = 1
[[email protected] Desktop]# echo `ls -l`
total 4 -rw-r--r--. 1 root root 49 Oct 31 21:47 test.txt
[[email protected] Desktop]# echo "a = \$$a"
a = $1
重要的環境變數
環境變數(environment variables)一般是指在作業系統中用來指定作業系統執行環境的一些引數,如:臨時資料夾位置和系統資料夾位置等。
變數名稱 | 作用 |
---|---|
HOME | 使用者的主目錄(即家目錄) |
SHELL | 使用者在使用的直譯器 |
HISTSIZE | 輸出的歷史命令記錄條數 |
HISTFILESIZE | 儲存的歷史命令記錄條數 |
郵件儲存的地址 | |
LANG | 系統語言、語系名稱 |
RANDOM | 生成一個隨機數字 |
PS1 | Bash直譯器的提示符 |
PATH | 定義直譯器搜尋使用者執行命令的路徑 |
EDITOR | 使用者的文字編輯器 |
環境變數的概念有點類似於其他程式語言中的int、true等關鍵字,使用者定義變數名時不能使用這些名稱。而Linux系統中的環境變數的話儲存的就是對應的檔案位置,而有些環境變數在未設定的情況下可能時空值,比如SHELL在系統為指定直譯器的情況下為空值。