1. 程式人生 > 其它 >missing semester - The shell

missing semester - The shell

shell如何尋找諸如echo、date的命令?

shell 是一個程式設計環境,所以它具備變數、條件、迴圈和函式。在 shell 中執行命令時,實際上是在執行一段 shell 可以解釋執行的簡短程式碼。如果使用者要求 shell 執行某個指令,但是該指令並不是 shell 所瞭解的程式設計關鍵字,那麼它會去查詢 環境變數environment variable$PATH,它會列出當 shell 接到某條指令時,進行程式搜尋的路徑。

當執行 echo 命令時,shell 瞭解到需要執行 echo 這個程式,隨後它便會在 $PATH 中搜索由 : 所分割的一系列目錄,基於名字搜尋該程式。當找到該程式時便執行。

確定某個程式名代表的是哪個具體的程式,可以使用 which 程式。

以Linux/Mac OS為例說明檔案系統的使用:

路徑 / 代表的是系統的根目錄。

如果某個路徑以 / 開頭,那麼它是一個 絕對路徑

其他的路徑都是 相對路徑 。相對路徑是指相對於當前工作目錄的路徑,當前工作目錄可以使用 pwd 命令來獲取。

切換目錄需要使用 cd 命令。

在路徑中,. 表示的是當前目錄,而 .. 表示上級目錄(空目錄中也包含... )。

一般來說,當執行一個程式時,如果沒有指定路徑,則該程式會在當前目錄下執行。

大多數的命令接受標記(Flag)和選項(帶有值的標記)(Option),它們以 -

開頭,並可以改變程式的行為。通常,在執行程式時使用 -h--help 標記可以列印幫助資訊,以便了解有哪些可用的標記或選項。

這個引數可以打印出更加詳細地列出目錄下檔案或資料夾的資訊。

第一個字元 d 表示 missing 是一個目錄。

然後接下來的九個字元,每三個字元構成一組(rwx)。它們分別代表了檔案所有者(missing),使用者組(users) 以及其他所有人具有的許可權。其中 - 表示該使用者不具備相應的許可權。

為了進入某個資料夾,使用者需要具備該資料夾以及其父資料夾的“搜尋”許可權(以“可執行”:x)許可權表示。

為了列出它的包含的內容,使用者必須對該資料夾具備讀許可權(r

)。

命令 完成動作 注意事項
pwd 列印當前工作目錄
cd 切換目錄 cd -: 切換空間
ls 檢視指定目錄下包含哪些檔案
mv 重新命名或移動檔案 source->dest
cp 拷貝檔案 source->dest
rm 刪除檔案 刪除資料夾需要使用-r(遞迴)標記
mkdir 新建資料夾 空格間隔會建立多個資料夾
rmdir 刪除資料夾 只能刪除空資料夾

Connecting programs

在 shell 中,程式有兩個主要的“流”:

  • 輸入流:當程式嘗試讀取資訊時,它們會從輸入流中進行讀取。
  • 輸出流:當程式列印資訊時,它們會將資訊輸出到輸出流中。

通常,一個程式的輸入輸出流都是終端(程式會預設開啟0-2三個fd表示輸入、輸出、錯誤)。

符號 動作
< file1 重定向file1至輸入流
> file2 重定向file2至輸出流
>> file3 向一個檔案追加內容
command1 | command2 將一個程式(command1)的輸出作為另外一個程式(command2)的輸入

A versatile and powerful tool

對於大多數的類 Unix 系統,根使用者(root user)是非常特殊的。

根使用者幾乎不受任何限制,他可以建立、讀取、更新和刪除系統中的任何檔案。

通常在我們並不會以根使用者的身份直接登入系統,因為這樣可能會因為某些錯誤的操作而破壞系統。 在需要的時候使用 sudo 命令。顧名思義,它的作用是可以以 su(super user 或 root 的簡寫)的身份執行一些操作。 當遇到拒絕訪問(permission denied)的錯誤時,通常是因為此時必須是根使用者才能操作。

對於|>、和 <,需要注意一點,sudo需要加在對應程式前(修改顯示器亮度,前者不行,後者可以,tee用於讀取標準輸入的資料,並將其內容輸出成檔案)。

$ sudo echo 3 > brightness
An error occurred while redirecting file 'brightness'
open: Permission denied

$ echo 3 | sudo tee brightness