標準輸入、標準輸出和標準錯誤
與unix的「一切都是檔案」理念一致,類似於ls的程式實際上把它的執行結果傳送到乙個稱為標準輸出的特殊檔案中(standard output,簡記為stdout),他們的狀態資訊則傳送到乙個稱為標準錯誤的檔案中(standard error,簡記為stderr)。預設情況下,標準輸出以及標準錯誤都被鏈結到螢幕上,並且不會儲存到磁碟檔案中。另外,程式從乙個稱為標準輸入(standard input,簡記為stdin)的裝置來得到輸入,預設情況下,標準輸入鏈結到鍵盤。i/o重定向功能可以改變輸出內容傳送的目的地,或者改變輸入內容的**地。
標準輸出重定向
使用重定向操作符『>』,後面接上檔名,就可以把標準輸出重定向到另外乙個檔案了。
$ ls -l /users/zhou/desktop > ls-output.txt
$ ls -l > ls-output.txt
$ less ls-output.txt
$ > ls-output.txt 該命令可以建立乙個名稱為ls-output.txt空文件,或者清空原來ls-output.txt的內容
【注】重定向會重寫檔案,若想追加內容,則使用' >> '操作符。
標準錯誤重定向
標準錯誤重定向不能簡單的使用乙個重定向符來實現。乙個程式可以把輸出內容傳送到任意檔案流中,如果把這些檔案流中的前三個分別對應標準輸入檔案、標準輸出檔案、標準錯誤檔案,那麼在shell內部用檔案描述符分別索引他們為0、1、2。
$ ls -l /users/zhou/desktop 2> ls-output.txt
標準輸出和標準錯誤重定向到同乙個檔案
$ ls -l /users/zhou/desktop > ls-output.txt 2>&1
$ ls -l /users/zhou/desktop &> ls-output.txt
第乙個是傳統方法將檔案描述符2重定向到檔案描述符1中
第二個是bash提供的效率更高的方法聯合這一操作
標準輸入重定向
cat——合併檔案
cat [file ...]
$ cat ls-output.txt 將顯示ls-output.txt內容
$ cat movie.mpeg.0* > movie.mpeg 將所有的movie檔案塊按照順序連線在一起(按順序是因為萬用字元按順序來擴充套件)
$ cat
bhsbhcsbhjcvbshbvhsbfvjsfjvan 輸入cat命令不帶任何引數,他將等待從標準輸入中獲取資料,輸入結束按ctrl+d鍵
$ cat > lazy_dog.txt
vvgvvhvghvghvghvghhgvghvhvg 將所輸入的內容寫入到lazy_dog.txt檔案中
$ cat < lazy_dog.txt 將標準輸入重定向
管道
命令從標準輸入讀取到資料,並將資料傳送到標準輸出的能力是使用了名為管道的shell特性。
command1 | command2
$ ls -l /user/bin | less
過濾器
管道經常用來對資料執行複雜的操作,將多條命令結合在一起構成乙個管道。這種方式中常用到的是過濾器命令
$ ls /bin /user/bin | sort | less
擴充套件
bash在執行命令之前會對文字進行多重處理,有了擴充套件功能,在輸入內容之後,內容在shell對其執行之前會被擴充套件成其他內容。
1、路徑名擴充套件:使用萬用字元來實現擴充套件的機制稱為路徑名擴充套件
【注】echo * 不能列印出隱藏檔案,如果使用echo .* 是可以的但是會將 ' . ' 和 ' .. ' 也列印出來,因為這兩個名字分別指當前目錄和當前目錄的父目錄。
2、波浪線擴充套件: ~具有特殊含義,如果把他放在乙個單詞的開頭,他會被擴充套件為指定使用者的主目錄名,如果沒有指定使用者名稱,則會擴充套件為當前使用者的主目錄
3、算數擴充套件:shell支援使用擴充套件來運算算數表示式,這允許我們把shell當作計算器來使用。
$((experssion)) 算數擴充套件格式 ,算數運算子: +、-、*、/、%、**(取冪)
4、花括號擴充套件:按照花括號裡面的模式建立多種文字字串,花括號擴充套件的模式資訊可以包括乙個成為前導字元的開頭部分和乙個稱為附言的結尾部分。
$ echo number_ $ mkdir -0 -
5、引數擴充套件:引數擴充套件用在shell指令碼中比直接用在命令列中更為有用,他的許多特性與系統儲存的小塊資料以及給每個小塊資料命名的效能有關係,許多這樣的小塊資料可用於擴充套件。
$ echo $user (如果變數名拼錯了仍會進行擴充套件,只不過輸出結果是乙個空字串。)
6、命令替換:命令替換可以把乙個命令的輸出作為另外乙個擴充套件模式使用
$ echo $(ls)
引用
現在來學習如何控制擴充套件,shell提供一種稱為引用的機制來選擇性的避免不想要的擴充套件。
1、雙引號:將文字放在雙引號中,shell所使用的所有特殊字元都將失去它們的特殊含義,' $ ' 、' \ '、 ' ' '、除外。
這意味著單詞分割、路徑名擴充套件、波浪線擴充套件、花括號擴充套件都將失效;但引數擴充套件、算數擴充套件、命令替換仍將有效。
2、單引號:我們希望抑制所有的擴充套件,應該使用單引號。
3、轉義字元:想引用單個字元,在該字元前加上反斜槓實現
Linux學習筆記三
使用者管理 使用者分三種 超級使用者 uid 0 普通使用者 uid 500 60000 偽使用者 uid 1 499 系統自動生成 uid 500以後的帳號,表示由使用者所建立的帳號。uid 1 499 的帳號,表示為系統所建立的偽使用者。uid 0 表示是root 許可權。finger 檢視使用...
Linux學習筆記三
linux使用了非同步的磁碟 記憶體資料傳輸模式,同時又是個多人多任務的環境。所以錯誤的關機方法可能會造成磁碟資料損毀。預設root的提示字元為 而一般身份使用者的提示字元為 exit是登出,linux本身已經有相當多的工作在進行,登入也僅是其中的乙個工作而已,所以當你離開時,這個登入工作就停 止了...
Linux學習筆記(三)
cd 表示回到自己的家目錄。cd 沒有加上路徑,代表回到自己家路徑。cd.表示回到上層目錄。cd 表示回到剛剛那個目錄。cd var spool mail 絕對路徑的寫法。cd postfix 相對路徑的寫法。pwd 顯示當前的工作目錄。pwd p 顯示完整的路徑。mkdir test 建立乙個名為...