《UNIX程式設計環境》 1 3 目錄

2021-09-23 14:42:12 字數 2395 閱讀 4015

系統可以把你的檔案(如名為junk的檔案)同任何其他人的相同名稱的檔案區分開。這個區分是依靠把檔案分組成目錄(資料夾),而不是像圖書館中那樣把書放在架上,所以在不同目錄中的檔案可有相同的名稱而不至於出現矛盾。

通常,每個使用者都有其個人目錄或主目錄,也有時稱為登入目錄,其中只包含了屬於使用者他或她的檔案。當登入時,使用者在自己的目錄中。使用者可以改變工作用的目錄—通常稱為使用者的工作目錄或當前目錄—但使用者的主目錄始終不會變化。除非使用者採取特別的行動,當建立乙個新檔案時,它會建在當前目錄中。由於當前目錄初始裝狀態下亦即使用者自己的主目錄,檔案不會同其他人的相同名稱檔案相關。

目錄中可以包含其他的目錄,當然也可包含一般的檔案(「好目錄中有較少的目錄……」),描述這一段結構組織的自然方式是目錄和檔案樹。可以從樹根開始沿著恰當的分支移動,從而找到系統中的任何檔案。相反,也可以從任何一處開始,最終到達根部。

我們先從後者開始,所用的基本工具是pwd(print working directory),它顯示出使用者當前所在的目錄的名稱:

它說明使用者當前在目錄you中,you在usr目錄中,而usr就在根目錄中,根目錄通常稱為「/」。/字元分隔了名稱的每個部分,前面所述的14個字元的限制也適用於名稱的每個部分。在很多系統中,/usr是包含系統的普通使用者所有目錄的乙個目錄。(即使使用者的主目錄不是/usr/you,pwd也會印出類似的內容,所以使用者能夠理解下面的內容是什麼。)

如果使用者鍵入

應該得到如同使用ls所得到的完全一樣的名單。在沒有變數提供時,ls列出當前目錄的內容;在給定目錄的名稱時,它就列出該目錄的內容。

其次,試一試:

這應該列出一串名稱,其中有讀者自己的登入目錄。

現在試一下:

(如果junk仍在讀者的目錄中。)名稱:

是稱為檔案的路徑名。路徑名表徵了從根通過目錄樹到特定檔案的全部路徑名。在unix系統中有乙個通用規則,凡是可以使用普通檔名的地方,都可以使用路徑名。

檔案系統構造得像乙個通用邏輯樹,用一幅影象可能會更明晰一些:

從圖1-1中可以看出,你的junk檔案同parl的或mary的junk檔案沒有任何關係。

如果所關心的所有檔案都在你自己的目錄中,那麼路徑名並沒有多少作用;但是如果你同其他人合作,或者同時有幾個專案在進行,那麼路徑名就實在很有用了。例如,你的朋友可以通過如下操作顯示你的junk檔案:

類似地,你可以用如下操作找出mary檔案的內容:

或者對她的檔案製作乙份自己的副本:

如果mary不想讓你隨便操作她的檔案,那麼可以做出私用性設定。每個檔案和目錄都有對應所有者、組以及其他人的讀-寫-執行的允許許可權,用以控制訪問。(請回憶ls-l。)在作者的系統中,多數使用者在多數時間裡發現開放性還是比私用性更為有益,但是在你的系統中可能有不同的策略,有關內容會在第2章中討論。

作為與路徑名有關的最後乙個實驗,請試一下:

有什麼名稱看似熟悉嗎?當在提示符後鍵入命令的名稱,然後執行命令時,系統尋找該名稱的檔案。它通常先尋找當前目錄(也許多數不會在此目錄中),然後在/bin中尋找,最後是在/usr/bin中尋找。目錄收集在一起是為了便於查詢和管理。要驗證這一點,通過使用它們的全路徑名試驗執行下面這些程式:

練習1-3 嘗試:

按所要求的執行,可能會有比通常上班更為有趣的事發生。

改變目錄

如果你經常與mary一起處理她的主目錄中的資訊,你可以說「我打算在mary的檔案上而不是在自己檔案上工作」。這是通過用cd命令改變當前目錄而實現的:

現在,當你使用檔名(不帶/)作為cat或pr的變數時,它會指向mary目錄中的檔案。改變目錄並不會影響檔案有關的允許許可權—如果不能從自己的目錄中訪問某一檔案,改變至另乙個目錄並不能改變這一事實。

把同某一事物有關的檔案都安排在乙個目錄中而與其他專案分隔開是會帶來便利的。例如,如果某人打算寫一本書,他或許會嘗試把所有的檔案都放在乙個稱為book的目錄中。使用命令mkdir建立乙個新的目錄:

「..」表示當前所在目錄的父目錄,更接近根一層的目錄。「.」是當前目錄的同義詞。

上述操作把你帶回主目錄,即登入目錄。

一旦書出版了,就可以清除掉有關檔案。要刪除目錄book,先刪去其中的所有檔案(我們會簡單地展示),再用cd指向book的父目錄,然後鍵入

rmdir只刪去空目錄。

讀目錄(UNIX環境高階程式設計筆記)

對某個目錄具有訪問許可權的任一使用者都可以讀該目錄,但是,為了防止檔案系統發生混亂,只允許核心寫目錄。include dir opendir const char pathname dir fdopendir int fd 兩個函式返回值 若成功,返回指標 若出錯,返回null struct dir...

《unix高階環境程式設計》檔案和目錄 目錄操作

目錄的基本操作包括開啟目錄opendir 讀取目錄readdir 關閉目錄closedir等操作,如下說明 cpp view plain copy 目錄操作 1 開啟目錄opendir 函式功能 開啟乙個目錄 返回值 若成功返回乙個目錄指標,若出錯則返回null指標 函式原型 include inc...

《unix環境高階程式設計》 讀書筆記 目錄

近來讀書,做些筆記,來年好翻翻。本文所使用的作業系統為 centos7.0,如果不想裝雙系統的可以裝虛擬機器,可以參考這裡 當然啦,直接裝個再好不過了。涉及主題 檔案描述符,系統資源限制,檔案相關,close on exec,涉及函式 getrlimit,setrlimit lseek,open,c...