Unix風格的目錄結構一般使用一個目錄名列表並用正斜槓分隔來表示,這樣咱們能夠結合ls
命令:ruby
$ ls /Users/mhartl/ruby
或者學習
$ ls /usr/local/bin
正如圖20,這些表示對應的目錄在一個分層的文件系統,圖上意思即便mhartl是Users的子目錄,而ruby是mhartl的子目錄。網站
當談起這些目錄時根據規範會有不一樣: 像/Users/mhartl
的用戶目錄能夠讀做'斜槓 users斜槓mhartl'或者'斜槓users mhartl',省略原來的斜杆在發音時很常見,好比系統目錄,'/usr/local/bin',發音多是'user local bin'.因爲全部的Unix目錄最終都是根目錄/(讀做斜槓)的子目錄,斜槓暗示領導和分隔。注意: 將反斜槓錯用爲正斜槓會帶來許多痛苦,要嚴格避免這種錯誤。code
對一個特殊的用戶來講最重要的目錄是home目錄,在個人macOS系統上是/Users/mhartl,對應個人用戶名(mhartl)。home目錄能夠被指定爲絕對路徑,如/Users/mhartl,也可使用home目錄的簡寫,即波浪線符號~(用shift加反撇號輸入, 在多數鍵盤中位於數字1的左邊)。因此在圖20中顯示的兩種路徑都是同樣的:/Users/mhartl/ruby/projects與~/ruby/projects同樣。(有趣地是,使用波浪符號代替Home目錄的緣由僅是由於在早先的一些鍵盤中"Home"鍵和"~"鍵是同一個。)blog
除了用戶目錄,每一個Unix系統都有程序必須的系統目錄用於計算機正常操做。修改系統文件或目錄須要管理員權限,也叫root
.(這裏的"root"與上面提到的根目錄沒有關係。)管理員的權限太大,因此以root身份登陸對文件能夠輕易操做不太好;相反,要以root身份執行任務一般使用sudo
命令。(Box 11)three
Box11. 「sudo 讓我TODO======」
sudo 讓普通用戶擁有超級管理員權限。例如, 嘗試在系統目錄/opt目錄中建立一個文件,以下:
$ touch /opt/foo
touch: /opt/foo: Permission denied
由於普通用戶沒有權限修改/opt,因此命令執行失敗了,但若加上sudo命令就能夠執行成功:
$ sudo touch /opt/foo
Password:
正如上面顯示的, 輸入sudo以後,咱們被提示輸入用戶密碼,若是正確輸入而且用戶被賦予sudo的特權(在大多數桌面Unix系統上),那麼命令會被成功執行。如圖21中,開始這個模式被否定,只有使用了sudo後才能成功執行,這是計算時的共同話題。
爲了驗證該文件真的被建立了,能夠用ls檢查:
$ ls -l /opt/foo
-rw-r--r-- 1 root wheel 0 Jul 23 19:13 /opt/foo
注意普通用戶能夠在系統目錄裏ls文件(不須要sudo)並且root的名字也在列表中,表示管理員擁有該文件。(第二個術語wheel的意思有一點模糊,可是你能夠在管理員這個網站上學習它。)
爲了刪除剛剛建立的文件,須要再次回到管理員狀態:
$ rm -f /opt/foo
rm: /opt/foo: Permission denied
$ sudo !!
$ !ls
ls: /opt/foo: No such file or directory
上面的示例中第一次執行rm失敗了,因此再運行sudo !!,該命令運行sudo接着以前的命令,緊跟着咱們使用!ls,該命令執行了前一條ls的命令(Box9).
在英語發音中像sudo !!沒有任何意義,這在語言交流時很是重要。正如Box9中說起到的,!!讀做"bang bang".然而sudo讀做'SOO-doo'或'SOO-doh'.兩種發音都很常見。所以,我更喜歡將'sudo !!'讀做"SOO-doo bang bang".
順便提下,su在sudo本來的意義中是'super-user',可是後來被擴展使用了, 如今一般認作是'substitute user'(代替用戶)。sudo所以就是「substitute user do」(代替用戶執行)的結合,即默認地用戶代替管理員。因爲管理員能夠作任何事,在圖21中的命令‘sudo make me a sandwich’成功執行了,而'make me a sandwich'沒有成功。
get
1.寫下你對目錄~/foo/bar的發音單詞。
2.在/Users/bill/sonnets該文件中,哪一個是home目錄?哪一個是用戶名?在這個等級結構中哪一個是最深的目錄?
3.對於一個用戶名爲bill的用戶,/Users/bill/sonnets和~/sonnets的差異是什麼?(若是有的話)it