1. 程式人生 > >從零開始的Linux學習日誌(2)

從零開始的Linux學習日誌(2)

重定向命令列

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

可以顯示當前目錄下的檔案資訊。wc -l可以檢視文字的行數。如果要將前一個命令的標準輸出作為後一個命令的標準輸入,則可以用管道命令符實現。

[[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 儲存的歷史命令記錄條數
MAIL 郵件儲存的地址
LANG 系統語言、語系名稱
RANDOM 生成一個隨機數字
PS1 Bash直譯器的提示符
PATH 定義直譯器搜尋使用者執行命令的路徑
EDITOR 使用者的文字編輯器

環境變數的概念有點類似於其他程式語言中的inttrue等關鍵字,使用者定義變數名時不能使用這些名稱。而Linux系統中的環境變數的話儲存的就是對應的檔案位置,而有些環境變數在未設定的情況下可能時空值,比如SHELL在系統為指定直譯器的情況下為空值。