当前位置:文档之家› 鸟哥的 Linux 私房菜

鸟哥的 Linux 私房菜

鳥哥的 Linux 私房菜為取得較佳瀏覽結果,請愛用firefox瀏覽本網頁第七章、Linux 檔案與目錄管理切換解析度為 800x600在第六章我們認識了Linux系統下的檔案權限概念以及目錄的配置說明。

在這個章節當中,我們就直接來進一步的操作與管理檔案與目錄吧!包括在不同的目錄間變換、建立與刪除目錄、建立與刪除檔案,還有尋找檔案、查閱檔案內容等等,都會在這個章節作個簡單的介紹啊!1. 目錄與路徑1.1 相對路徑與絕對路徑1.2 目錄的相關操作:cd, pwd, mkdir, rmdir1.3 關於執行檔路徑的變數: $PATH2. 檔案與目錄管理2.1 檔案與目錄的檢視: ls2.2 複製、刪除與移動:cp, rm, mv2.3 取得路徑的檔案名稱與目錄名稱3. 檔案內容查閱:3.1 直接檢視檔案內容:cat, tac, nl3.2 可翻頁檢視:more, less3.3 資料擷取:head, tail3.4 非純文字檔: od3.5 修改檔案時間與建置新檔: touch4. 檔案與目錄的預設權限與隱藏權限4.1 檔案預設權限:umask4.2 檔案隱藏屬性:chattr, lsattr4.4 檔案特殊權限:SUID, SGID, SBIT, 權限設定4.3 觀察檔案類型:file5. 指令與檔案的搜尋:5.1 指令檔名的搜尋:which5.2 檔案檔名的搜尋:whereis, locate, find6. 極重要!權限與指令間的關係:7. 重點回顧8. 本章習題9. 參考資料與延伸閱讀10. 針對本文的建議:/viewtopic.php?t=23879目錄與路徑:由第六章Linux的檔案權限與目錄配置中透過FHS瞭解了Linux的『樹狀目錄』概念之後,接下來就得要實際的來搞定一些基本的路徑問題了!這些目錄的問題當中,最重要的莫過於第六章也談過的『絕對路徑』與『相對路徑』的意義啦!絕對/相對路徑的寫法並不相同,要特別注意。

此外,當妳下達指令時,該指令是透過什麼功能來取得的?這與PATH這個變數有關呢!底下就讓我們來談談囉!相對路徑與絕對路徑:在開始目錄的切換之前,你必須要先瞭解一下所謂的『路徑(PATH)』,有趣的是:什麼是『相對路徑』與『絕對路徑』?雖然前一章已經稍微針對這個議題提過一次,不過,這裡不厭其煩的再次的強調一下!•絕對路徑:路徑的寫法『一定由根目錄 / 寫起』,例如: /usr/share/doc 這個目錄。

•相對路徑:路徑的寫法『不是由 / 寫起』,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成:『cd ../man』這就是相對路徑的寫法啦!相對路徑意指『相對於目前工作目錄的路徑!』•相對路徑的用途那麼相對路徑與絕對路徑有什麼了不起呀?喝!那可真的是了不起了!假設你寫了一個軟體,這個軟體共需要三個目錄,分別是 etc, bin, man 這三個目錄,然而由於不同的人喜歡安裝在不同的目錄之下,假設甲安裝的目錄是 /usr/local/packages/etc, /usr/local/packages/bin 及/usr/local/packages/man ,不過乙卻喜歡安裝在 /home/packages/etc, /home/packages/bin,/home/packages/man 這三個目錄中,請問如果需要用到絕對路徑的話,那麼是否很麻煩呢?是的!如此一來每個目錄下的東西就很難對應的起來!這個時候相對路徑的寫法就顯的特別的重要了!此外,如果你跟鳥哥一樣,喜歡將路徑的名字寫的很長,好讓自己知道那個目錄是在幹什麼的,例如:/cluster/raid/output/taiwan2006/smoke 這個目錄,而另一個目錄在/cluster/raid/output/taiwan2006/cctm ,那麼我從第一個要到第二個目錄去的話,怎麼寫比較方便?當然是『cd ../cctm』比較方便囉!對吧!•絕對路徑的用途但是對於檔名的正確性來說,『絕對路徑的正確度要比較好~』。

一般來說,鳥哥會建議你,如果是在寫程式 (shell scripts) 來管理系統的條件下,務必使用絕對路徑的寫法。

怎麼說呢?因為絕對路徑的寫法雖然比較麻煩,但是可以肯定這個寫法絕對不會有問題。

如果使用相對路徑在程式當中,則可能由於你執行的工作環境不同,導致一些問題的發生。

這個問題在工作排程(at, cron, 第十六章)當中尤其重要!這個現象我們在十三章、shell script時,會再次的提醒你喔! ^_^目錄的相關操作:我們之前稍微提到變換目錄的指令是cd,還有哪些可以進行目錄操作的指令呢?例如建立目錄啊、刪除目錄之類的~還有,得要先知道的,就是有哪些比較特殊的目錄呢?舉例來說,底下這些就是比較特殊的目錄,得要用力的記下來才行:. 代表此層目錄.. 代表上一層目錄- 代表前一個工作目錄~ 代表『目前使用者身份』所在的家目錄~account 代表 account 這個使用者的家目錄(account是個帳號名稱)需要特別注意的是:在所有目錄底下都會存在的兩個目錄,分別是『.』與『..』分別代表此層與上層目錄的意思。

那麼來思考一下底下這個例題:例題:請問在Linux底下,根目錄下有沒有上層目錄(..)存在?答:若使用『 ls -al / 』去查詢,可以看到根目錄下確實存在 . 與 .. 兩個目錄,再仔細的查閱,可發現這兩個目錄的屬性與權限完全一致,這代表根目錄的上一層(..)與根目錄自己(.)是同一個目錄。

底下我們就來談一談幾個常見的處理目錄的指令吧:•cd:變換目錄•pwd:顯示目前的目錄•mkdir:建立一個新的目錄•rmdir:刪除一個空的目錄•cd (變換目錄)我們知道vbird這個使用者的家目錄是/home/vbird/,而root家目錄則是/root/,假設我以root身份在 Linux系統中,那麼簡單的說明一下這幾個特殊的目錄的意義是:[root@www ~]# cd [相對路徑或絕對路徑]# 最重要的就是目錄的絕對路徑與相對路徑,還有一些特殊目錄的符號囉![root@www ~]# cd ~vbird# 代表去到 vbird 這個使用者的家目錄,亦即 /home/vbird[root@www vbird]# cd ~# 表示回到自己的家目錄,亦即是 /root 這個目錄[root@www ~]# cd# 沒有加上任何路徑,也還是代表回到自己家目錄的意思喔![root@www ~]# cd ..# 表示去到目前的上層目錄,亦即是 /root 的上層目錄的意思;[root@www /]# cd -# 表示回到剛剛的那個目錄,也就是 /root 囉~[root@www ~]# cd /var/spool/mail# 這個就是絕對路徑的寫法!直接指定要去的完整路徑名稱![root@www mail]# cd ../mqueue# 這個是相對路徑的寫法,我們由/var/spool/mail 去到/var/spool/mqueue 就這樣寫!cd是Change Directory的縮寫,這是用來變換工作目錄的指令。

注意,目錄名稱與cd指令之間存在一個空格。

一登入Linux系統後,root會在root的家目錄!那回到上一層目錄可以用『 cd .. 』。

利用相對路徑的寫法必須要確認你目前的路徑才能正確的去到想要去的目錄。

例如上表當中最後一個例子,你必須要確認你是在/var/spool/mail當中,並且知道在/var/spool當中有個mqueue的目錄才行啊~這樣才能使用cd ../mqueue去到正確的目錄說,否則就要直接輸入cd /var/spool/mqueue囉~其實,我們的提示字元,亦即那個 [root@www ~]# 當中,就已經有指出目前的目錄了,剛登入時會到自己的家目錄,而家目錄還有一個代碼,那就是『 ~ 』符號!例如上面的例子可以發現,使用『 cd ~ 』可以回到個人的家目錄裡頭去呢!另外,針對 cd 的使用方法,如果僅輸入 cd 時,代表的就是『 cd ~ 』的意思喔~亦即是會回到自己的家目錄啦!而那個『 cd - 』比較難以理解,請自行多做幾次練習,就會比較明白了。

Tips:還是要一再地提醒,我們的 Linux 的預設指令列模式 (bash shell) 具有檔案補齊功能,你要常常利用 [tab] 按鍵來達成你的目錄完整性啊!這可是個好習慣啊~可以避免你按錯鍵盤輸入錯字說~ ^_^•pwd (顯示目前所在的目錄)[root@www ~]# pwd [-P]選項與參數:-P :顯示出確實的路徑,而非使用連結 (link) 路徑。

pwd是Print Working Directory的縮寫,也就是顯示目前所在目錄的指令,例如在上個表格最後的目錄是/var/mail這個目錄,但是提示字元僅顯示mail,如果你想要知道目前所在的目錄,可以輸入pwd 即可。

此外,由於很多的套件所使用的目錄名稱都相同,例如 /usr/local/etc還有/etc,但是通常Linux 僅列出最後面那一個目錄而已,這個時候你就可以使用pwd 來知道你的所在目錄囉!免得搞錯目錄,結果...其實有趣的是那個 -P 的選項啦!他可以讓我們取得正確的目錄名稱,而不是以連結檔的路徑來顯示的。

如果你使用的是CentOS 5.x的話,剛剛好/var/mail是/var/spool/mail的連結檔,所以,透過到/var/mail下達pwd -P就能夠知道這個選項的意義囉~ ^_^•mkdir (建立新目錄)如果想要建立新的目錄的話,那麼就使用mkdir (make directory)吧!不過,在預設的情況下,你所需要的目錄得一層一層的建立才行!例如:假如你要建立一個目錄為 /home/bird/testing/test1,那麼首先必須要有 /home 然後 /home/bird ,再來 /home/bird/testing 都必須要存在,才可以建立/home/bird/testing/test1 這個目錄!假如沒有 /home/bird/testing 時,就沒有辦法建立 test1 的目錄囉!不過,現在有個更簡單有效的方法啦!那就是加上 -p 這個選項喔!你可以直接下達:『 mkdir -p/home/bird/testing/test1 』則系統會自動的幫你將 /home, /home/bird, /home/bird/testing 依序的建立起目錄!並且,如果該目錄本來就已經存在時,系統也不會顯示錯誤訊息喔!挺快樂的吧! ^_^。

相关主题