日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

第七章、Linux 文件与目录管理

發布時間:2025/5/22 227 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第七章、Linux 文件与目录管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第七章、Linux 文件與目錄管理 1. 目錄與路徑 1.1 相對路徑與絕對路徑 1.2 目錄的相關操作cd, pwd, mkdir, rmdir 1.3 關於運行檔路徑的變量: $PATH 2. 文件與目錄管理 2.1 文件與目錄的檢視: ls 2.2 復制、刪除與移動cp, rm, mv 2.3 取得路徑的文件名稱與目錄名稱 3. 文件內容查閱: 3.1 直接檢視文件內容cat, tac, nl 3.2 可翻頁檢視more, less 3.3 數據擷取head, tail 3.4 非純文字檔: od 3.5 修改文件時間與建置新檔: touch 4. 文件與目錄的默認權限與隱藏權限 4.1 文件默認權限:umask 4.2 文件隱藏屬性: chattr, lsattr 4.4 文件特殊權限SUID, SGID, SBIT, 權限配置 4.3 觀察文件類型:file 5. 命令與文件的搜尋: 5.1 命令檔名的搜尋:which 5.2 文件檔名的搜尋:whereis, locate, find 6. 極重要!權限與命令間的關系: 7. 重點回顧

1. 目錄與路徑 1.1目錄與路徑: 相對路徑與絕對路徑: 絕對路徑:路徑的寫法『一定由根目錄 / 寫起』,例如: /usr/share/doc 這個目錄 相對路徑意指『相對於目前工作目錄的路徑!』
1.2 目錄的相關操作: 在所有目錄底下都會存在的兩個目錄,分別是『.』與『..』 分別代表此層與上一級目錄的意思 幾個常見的處理目錄的命令吧:
  • cd:變換目錄
  • pwd:顯示目前的目錄
  • mkdir:創建一個新的目錄
  • rmdir:刪除一個空的目錄
2.1cd (變換目錄) 2.2 pwd (顯示目前所在的目錄) 2.3 mkdir (創建新目錄) 2.4 rmdir (刪除『空』的目錄)
1.3 關於運行檔路徑的變量: $PATH 查閱文件屬性的命令ls完整檔名為:/bin/ls(這是絕對路徑), 那你會不會覺得很奇怪:『為什么我可以在任何地方運行/bin/ls這個命令呢? 』 為什么我在任何目錄下輸入 ls 就一定可以顯示出一些信息而不會說找不到該 /bin/ls 命令呢? 這是因為環境變量 PATH 的幫助所致呀! 你可以發現到無論是root還是vbird都有/bin 這個目錄在PATH變量內,所以當然就能夠在任何地方運行ls來找到/bin/ls運行檔羅! 例題: 假設你是root,如果你將ls由/bin/ls移動成為/root/ls(可用『mv /bin/ls /root』命令達成),然后你自己本身也在/root目錄下, 請問(1)你能不能直接輸入ls來運行?(2)若不能,你該如何運行ls這個命令?(3)若要直接輸入ls即可運行,又該如何進行? 答: 由於這個例題的重點是將某個運行檔移動到非正規目錄去,所以我們先要進行底下的動作才行:(務必使用root的身份) (1)接下來不論你在那個目錄底下輸入任何與ls相關的命令,都沒有辦法順利的運行ls了! 也就是說,你不能直接輸入ls來運行,因為/root這個目錄并不在PATH指定的目錄中, 所以,即使你在/root目錄下,也不能夠搜尋到ls這個命令! (2)因為這個ls確實存在於/root底下,并不是被刪除了!所以我們可以透過使用絕對路徑或者是相對路徑直接指定這個運行檔檔名, 底下的兩個方法都能夠運行ls這個命令: (3)如果想要讓root在任何目錄均可運行/root底下的ls,那么就將/root加入PATH當中即可。 加入的方法很簡單,就像底下這樣: 上面這個作法就能夠將/root加入到運行檔搜尋路徑PATH中了!不相信的話請您自行使用『echo $PATH』去查看吧! 如果確定這個例題進行沒有問題了,請將ls搬回/bin底下,不然系統會掛點的!
  • 不同身份使用者默認的PATH不同,默認能夠隨意運行的命令也不同(如root與vbird);
  • PATH是可以修改的,所以一般使用者還是可以透過修改PATH來運行某些位於/sbin或/usr/sbin下的命令來查詢;
  • 使用絕對路徑或相對路徑直接指定某個命令的檔名來運行,會比搜尋PATH來的正確;
  • 命令應該要放置到正確的目錄下,運行才會比較方便;
  • 本目錄(.)最好不要放到PATH當中。


2.文件與目錄管理: 2.1 文件與目錄的檢視: ls
2.2 復制、刪除與移動: cp, rm, mv cp --除了單純的復制之外,還可以創建連結檔 (就是捷徑羅),比對兩文件的新舊而予以升級, 以及復制整個目錄等等的功能 mv --移動目錄與文件和直接拿來作更名 (rename) rm -- 刪除一個文件目錄,刪除全部文件 1.cp (復制文件或目錄) 1.一般來說,我們如果去復制別人的數據 (當然,該文件你必須要有 read 的權限才行啊! ^_^) 時, 總是希望復制到的數據最后是我們自己的,所以,在默認的條件中, cp 的來源檔與目的檔的權限是不同的,目的檔的擁有者通常會是命令操作者本身。舉例來說, 上面的范例二中,由於我是 root 的身份,因此復制過來的文件擁有者與群組就改變成為 root 所有了 2.進行備份的時候某些需要特別注意的特殊權限文件, 例如密碼檔 (/etc/shadow) 以及一些配置檔,就不能直接以 cp 來復制,而必須要加上 -a 或者是 -p 等等可以完整復制文件權限的選項才行 范例四可有趣了!使用 -l 及 -s 都會創建所謂的連結檔(link file),但是這兩種連結檔卻有不一樣的情況 -- -l 就是所謂的實體連結(hard link) bashrc_hlink文件與bashrc的屬性與權限完全一模一樣,與尚未進行連結前的差異則是第二欄的link數由1變成2了! 鳥哥這里先不介紹實體連結因為實體連結涉及 i-node 的相關知識,我們下一章談到文件系統(filesystem)時再來討論這個問題。 -- -s 則是符號連結(symbolic link) 簡單來說,bashrc_slink 是一個『捷徑』,類似window快捷方式,這個捷徑會連結到bashrc去!所以你會看到檔名右側會有個指向(->)的符號! 若刪除源目錄,則連結檔失效 所以,在復制時,你必須要清楚的了解到:
  • 是否需要完整的保留來源文件的資訊?
  • 來源文件是否為連結檔 (symbolic link file)?
  • 來源檔是否為特殊的文件,例如 FIFO, socket 等?
  • 來源檔是否為目錄?
2.rm (移除文件或目錄) 3.mv (移動文件與目錄,或更名)
2.3 取得路徑的文件名稱與目錄名稱 完整檔名最長可以到達 4096 個字節。 那么你怎么知道那個是檔名?那個是目錄名?嘿嘿!就是利用斜線 (/) 來分辨啊! 一般的用途應該是在寫程序的時候,用來判斷之用的啦 這部分的命令可以用在第三篇內的 shell scripts 里頭 1.basename 2.dirname
3.文件內容查閱:
  • cat? 由第一行開始顯示文件內容
  • tac? 從最后一行開始顯示,可以看出 tac 是 cat 的倒著寫!
  • nl ??顯示的時候,順道輸出行號!
  • more 一頁一頁的顯示文件內容
  • less 與 more 類似,但是比 more 更好的是,他可以往前翻頁!
  • head 只看頭幾行
  • tail 只看尾巴幾行
  • od?? 以二進位的方式讀取文件內容!

3.1 直接檢視文件內容: cat, tac, nl 1.cat (concatenate) 如果是一般的 DOS 文件時,就需要特別留意一些奇奇怪怪的符號了, 例如斷行與 [tab] 等,要顯示出來,就得加入 -A 之類的選項了! 2.tac (反向列示) cat 是由『第一行到最后一行連續顯示在螢幕上』,而 tac 則是『 由最后一行到第一行反向在螢幕上顯示出來 』 3. nl (添加行號列印)
3.2 可翻頁檢視: more, less 前面提到的 nl 與 cat, tac 等等,都是一次性的將數據一口氣顯示到螢幕上面 那有沒有可以進行一頁一頁翻動的命令啊? 讓我們可以一頁一頁的觀察,才不會前面的數據看不到啊~呵呵!有的!那就是 more 與 less 1.more (一頁一頁翻動)
  • 空白鍵 (space):代表向下翻一頁;
  • Enter???????? :代表向下翻『一行』;
  • /字串???????? :代表在這個顯示的內容當中,向下搜尋『字串』這個關鍵字;
  • :f??????????? :立刻顯示出檔名以及目前顯示的行數;
  • q???????????? :代表立刻離開 more ,不再顯示該文件內容。
  • b 或 [ctrl]-b :代表往回翻頁,不過這動作只對文件有用,對管線無用。
輸入了 / 之后,光標就會跑到最底下一行,并且等待你的輸入, 你輸入了字串并按下[enter]之后,嘿嘿! more 就會開始向下搜尋該字串羅~而重復搜尋同一個字串, 可以直接按下 n 即可啊!最后,不想要看了,就按下 q 即可離開 more 啦 2.less (一頁一頁翻動)
  • 空白鍵????:向下翻動一頁;
  • [pagedown]:向下翻動一頁;
  • [pageup]??:向上翻動一頁;
  • /字串?????:向下搜尋『字串』的功能;
  • ?字串?????:向上搜尋『字串』的功能;
  • n???????? :重復前一個搜尋 (與 / 或 ? 有關!)
  • N???????? :反向的重復前一個搜尋 (與 / 或 ? 有關!)
  • q???????? :離開 less 這個程序;
查閱文件內容還可以進行搜尋的動作~瞧~ less 是否很不錯用啊! 其實 less 還有很多的功能喔!詳細的使用方式請使用
3.3 數據擷取: head, tail 一個最簡單的擷取,那就是取出前面 (head) 與取出后面 (tail) 文字的功能。 不過,要注意的是, head 與 tail 都是以『行』為單位來進行數據擷取的 1.head (取出前面幾行) 2.tail (取出后面幾行)
3.4 非純文字檔: od 我們想要查閱非文字檔,舉例來說,例如 /usr/bin/passwd 這個運行檔的內容時, 又該如何去讀出資訊呢?事實上,由於運行檔通常是 binary file ,使用上頭提到的命令來讀取他的內容時, 確實會產生類似亂碼的數據啊!那怎么辦?沒關系,我們可以利用 od 這個命令來讀取
3.5 修改文件時間與建置新檔: touch 我們在 ls 這個命令的介紹時,有稍微提到每個文件在linux底下都會記錄許多的時間參數, 其實是有三個主要的變動時間,那么三個時間的意義是什么呢?
  • modification time (mtime)
當該文件的『內容數據』變更時,就會升級這個時間!內容數據指的是文件的內容,而不是文件的屬性或權限喔!
  • status time (ctime)
當該文件的『狀態 (status)』改變時,就會升級這個時間,舉例來說,像是權限與屬性被更改了,都會升級這個時間啊。
  • access time (atime):
當『該文件的內容被取用』時,就會升級這個讀取時間 (access)。舉例來說,我們使用 cat 去讀取 /etc/man.config , 就會升級該文件的 atime 了。 舉例來說,我們來看一看你自己的 /etc/man.config 這個文件的時間吧! 看到了嗎?在默認的情況下,ls 顯示出來的是該文件的 mtime ,也就是這個文件的內容上次被更動的時間。 文件的時間是很重要的,因為,如果文件的時間誤判的話,可能會造成某些程序無法順利的運行。 OK!那么萬一我發現了一個文件來自未來,該如何讓該文件的時間變成『現在』的時刻呢 至於運行的結果當中,我們可以發現數據的內容與屬性是被復制過來的,因此文件內容時間(mtime)與原本文件相同。 但是由於這個文件是剛剛被創建的,因此狀態(ctime)與讀取時間就便呈現在的時間啦! 那如果你想要變更這個文件的時間呢?可以這樣做: 1.要注意的是,即使我們復制一個文件時,復制所有的屬性,但也沒有辦法復制 ctime 這個屬性的。 ctime 可以記錄這個文件最近的狀態 (status) 被改變的時間。 2.還是要告知大家, 我們平時看的文件屬性中,比較重要的還是屬於那個 mtime 啊 論如何, touch 這個命令最常被使用的情況是:
  • 創建一個空的文件;
  • 將某個文件日期修訂為目前 (mtime 與 atime)


4.文件與目錄的默認權限與隱藏權限 除了基本r, w, x權限外,在Linux的Ext2/Ext3文件系統下,我們還可以配置其他的系統隱藏屬性, 這部份可使用 chattr 來配置,而以 lsattr 來查看,最重要的屬性就是可以配置其不可修改的特性!讓連文件的擁有者都不能進行修改! 這個屬性可是相當重要的,尤其是在安全機制上面 (security)!
4.1 文件默認權限:umask umask 就是指定 『目前使用者在創建文件或目錄時候的權限默認值』 查閱的方式有兩種, 一種可以直接輸入 umask ,就可以看到數字型態的權限配置分數, 一種則是加入 -S (Symbolic) 這個選項,就會以符號類型的方式來顯示出權限了! 奇怪的是,怎么 umask 會有四組數字啊?不是只有三組嗎?是沒錯啦。 第一組是特殊權限用的,我們先不要理他,所以先看后面三組即可。 在默認權限的屬性上,目錄與文件是不一樣的。從第六章我們知道 x 權限對於目錄是非常重要的! 但是一般文件的創建則不應該有運行的權限,因為一般文件通常是用在於數據的記錄嘛!當然不需要運行的權限了。 因此,默認的情況如下:
  • 若使用者創建為『文件』則默認『沒有可運行( x )權限』,亦即只有 rw 這兩個項目,也就是最大為 666 分,默認權限如下:
-rw-rw-rw-
  • 若使用者創建為『目錄』,則由於 x 與是否可以進入此目錄有關,因此默認為所有權限均開放,亦即為 777 分,默認權限如下:
drwxrwxrwx umask 的分數指的是『該默認值需要減掉的權限!』因為 r、w、x 分別是 4、2、1 分,所以羅!也就是說,當要拿掉能寫的權限,就是輸入 2 分,而如果要拿掉能讀的權限,也就是 4 分,那么要拿掉讀與寫的權限,也就是 6 分,而要拿掉運行與寫入的權限,也就是 3 分 如果以上面的例子來說明的話,因為 umask 為 022 ,所以 user 并沒有被拿掉任何權限,不過 group 與 others 的權限被拿掉了 2 (也就是 w 這個權限),那么當使用者:
  • 創建文件時:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
  • 創建目錄時:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x
umask的利用與重要性:專題制作 這個 umask 對於新建文件與目錄的默認權限是很有關系的!這個概念可以用在任何服務器上面, 尤其是未來在你架設文件服務器 (file server) ,舉例來說, SAMBA Server 或者是 FTP server 時, 都是很重要的觀念!這牽涉到你的使用者是否能夠將文件進一步利用的問題喔!不要等閑視之! 在默認的情況中, root 的 umask 會拿掉比較多的屬性,root 的 umask 默認是 022 , 這是基於安全的考量啦~至於一般身份使用者,通常他們的 umask 為 002 ,亦即保留同群組的寫入權力! 其實,關於默認 umask 的配置可以參考 /etc/bashrc 這個文件的內容,不過,不建議修改該文件, 你可以參考第十一章 bash shell 提到的環境參數配置檔 (~/.bashrc) 的說明!
4.2 文件隱藏屬性: chattr, lsattr 不過要先強調的是,底下的chattr命令只能在Ext2/Ext3的文件系統上面生效, 其他的文件系統可能就無法支持這個命令了 1.chattr (配置文件隱藏屬性) 由於這些屬性是隱藏的性質,所以需要以 lsattr 才能看到該屬性呦!其中,個人認為最重要的當屬 +i 與 +a 這個屬性了 2.lsattr (顯示文件隱藏屬性)
4.3 文件特殊權限:SUID, SGID, SBIT, 權限配置 一直提到關於文件的重要權限,那就是 rwx 這三個讀、寫、運行的權限。 但是,眼尖的朋友們在第六章的目錄樹章節中, 一定注意到了一件事,那就是,怎么我們的 /tmp 權限怪怪的? 還有,那個 /usr/bin/passwd 也怪怪的? 1.Set UIDs 這個標志出現在文件擁有者的 x 權限上時,例如剛剛提到的 /usr/bin/passwd 這個文件的權限狀態:『-rwsr-xr-x』,此時就被稱為 Set UID,簡稱為 SUID 的特殊權限。 基本上SUID有這樣的限制與功能:
  • SUID 權限僅對二進位程序(binary program)有效;
  • 運行者對於該程序需要具有 x 的可運行權限;
  • 本權限僅在運行該程序的過程中有效 (run-time);
  • 運行者將具有該程序擁有者 (owner) 的權限。
舉個例子來說明好了。 我們的 Linux 系統中,所有帳號的密碼都記錄在 /etc/shadow 這個文件里面,這個文件的權限為:『-r-------- 1 root root』,意思是這個文件僅有root可讀且僅有root可以強制寫入而已。 既然這個文件僅有 root 可以修改,那么鳥哥的 vbird 這個一般帳號使用者能否自行修改自己的密碼呢? 你可以使用你自己的帳號輸入『passwd』這個命令來看看,嘿嘿!一般使用者當然可以修改自己的密碼了! 明明 /etc/shadow 就不能讓 vbird 這個一般帳戶去存取的,為什么 vbird 還能夠修改這個文件內的密碼呢? 這就是 SUID 的功能啦 我們可以知道
  • vbird 對於 /usr/bin/passwd 這個程序來說是具有 x 權限的,表示 vbird 能運行 passwd;
  • passwd 的擁有者是 root 這個帳號;
  • vbird 運行 passwd 的過程中,會『暫時』獲得 root 的權限;
  • /etc/shadow 就可以被 vbird 所運行的 passwd 所修改。
  • 但如果 vbird 使用 cat 去讀取 /etc/shadow 時,他能夠讀取嗎?因為 cat 不具有 SUID 的權限,所以 vbird 運行 『cat /etc/shadow』 時,是不能讀取 /etc/shadow 的。我們用一張示意圖來說明如下: 另外,SUID 僅可用在binary program 上, 不能夠用在 shell script 上面!這是因為 shell script 只是將很多的 binary 運行檔叫進來運行而已!所以 SUID 的權限部分,還是得要看 shell script 呼叫進來的程序的配置, 而不是 shell script 本身。當然,SUID 對於目錄也是無效的~ 2.Set GID 當 s 標志在文件擁有者的 x 項目為 SUID,那 s 在群組的 x 時則稱為 Set GID, SGID 與 SUID 不同的是,SGID 可以針對文件或目錄來配置!如果是對文件來說, SGID 有如下的功能:
    • SGID 對二進位程序有用;
    • 程序運行者對於該程序來說,需具備 x 的權限;
    • 運行者在運行的過程中將會獲得該程序群組的支持!
    舉例來說,上面的 /usr/bin/locate 這個程序可以去搜尋 /var/lib/mlocate/mlocate.db 這個文件的內容 (詳細說明會在下節講述), mlocate.db 的權限如下: 與 SUID 非常的類似,若我使用 vbird 這個帳號去運行 locate 時,那 vbird 將會取得 slocate 群組的支持, 因此就能夠去讀取 mlocate.db 啦!非常有趣吧! GID 也能夠用在目錄上,這也是非常常見的一種用途! 當一個目錄配置了 SGID 的權限后,他將具有如下的功能:
    • 使用者若對於此目錄具有 r 與 x 的權限時,該使用者能夠進入此目錄;
    • 使用者在此目錄下的有效群組(effective group)將會變成該目錄的群組;
    • 用途:若使用者在此目錄下具有 w 的權限(可以新建文件),則使用者所創建的新文件,該新文件的群組與此目錄的群組相同。
    SGID 對於專案開發來說是非常重要的!因為這涉及群組權限的問題,您可以參考一下本章后續情境模擬的案例 3.Sticky Bit 這個 Sticky Bit, SBIT 目前只針對目錄有效,對於文件已經沒有效果了。 SBIT 對於目錄的作用是:
    • 當使用者對於此目錄具有 w, x 權限,亦即具有寫入的權限時;
    • 當使用者在該目錄下創建文件或目錄時,僅有自己與 root 才有權力刪除該文件
    換句話說:當甲這個使用者於 A 目錄是具有群組或其他人的身份,并且擁有該目錄 w 的權限, 這表示『甲使用者對該目錄內任何人創建的目錄或文件均可進行 "刪除/更名/搬移" 等動作。』 不過,如果將 A 目錄加上了 SBIT 的權限項目時, 則甲只能夠針對自己創建的文件或目錄進行刪除/更名/移動等動作,而無法刪除他人的文件。 舉例來說,我們的 /tmp 本身的權限是『drwxrwxrwt』, 在這樣的權限內容下,任何人都可以在 /tmp 內新增、修改文件,但僅有該文件/目錄創建者與 root 能夠刪除自己的目錄或文件。這個特性也是挺重要的啊!你可以這樣做個簡單的測試:
  • 以 root 登陸系統,并且進入 /tmp 當中;
  • touch test,并且更改 test 權限成為 777 ;
  • 以一般使用者登陸,并進入 /tmp;
  • 嘗試刪除 test 這個文件!
  • 由於 SUID/SGID/SBIT 牽涉到程序的概念,因此再次強調,這部份的數據在您讀完第十七章關於程序方面的知識后,要再次的回來瞧瞧喔! 目前,你先有個簡單的基礎概念就好了! 4.SUID/SGID/SBIT 權限配置 何配置文件使成為具有 SUID 與 SGID 的權限呢? 這就需要第六章的數字更改權限的方法了
    • 4 為 SUID
    • 2 為 SGID
    • 1 為 SBIT
    假設要將一個文件權限改為『-rwsr-xr-x』時,由於 s 在使用者權限中,所以是 SUID ,因此, 在原先的 755 之前還要加上 4 ,也就是:『 chmod 4755 filename 』來配置!此外,還有大 S 與大 T 的產生喔!參考底下的范例啦! 最后一個例子就要特別小心啦!怎么會出現大寫的 S 與 T 呢?不都是小寫的嗎? 因為 s 與 t 都是取代 x 這個權限的,但是你有沒有發現阿,我們是下達 7666 喔!也就是說, user, group 以及 others 都沒有 x 這個可運行的標志( 因為 666 嘛 ),所以,這個 S, T 代表的就是『空的』啦!怎么說? SUID 是表示『該文件在運行的時候,具有文件擁有者的權限』,但是文件 擁有者都無法運行了,哪里來的權限給其他人使用?當然就是空的啦! ^_^ 除了數字法之外,你也可以透過符號法來處理喔!其中 SUID 為 u+s ,而 SGID 為 g+s ,SBIT 則是 o+t 羅
    4.4觀察文件類型:file 如果你想要知道某個文件的基本數據,例如是屬於 ASCII 或者是 data 文件,或者是 binary , 且其中有沒有使用到動態函式庫 (share library) 等等的資訊,就可以利用 file 這個命令來檢閱喔! 舉例來說:
    5. 命令與文件的搜尋: 5.1 命令檔名的搜尋:which 連續輸入兩次[tab]按鍵就能夠知道使用者有多少命令可以下達。 那你知不知道這些命令的完整檔名放在哪里?舉例來說,ls 這個常用的命令放在哪里呢? 就透過 which 或 type 來找尋吧! 這個命令是根據『PATH』這個環境變量所規范的路徑,去搜尋『運行檔』的檔名~ 所以,重點是找出『運行檔』而已!且 which 后面接的是『完整檔名』喔!若加上 -a 選項,則可以列出所有的可以找到的同名運行檔,而非僅顯示第一個而已! 最后一個范例最有趣,怎么 cd 這個常用的命令竟然找不到啊!為什么呢?這是因為 cd 是『bash 內建的命令』啦! 但是 which 默認是找 PATH 內所規范的目錄,所以當然一定找不到的啊!那怎辦?沒關系!我們可以透過 type 這個命令喔! 關於 type 的用法我們將在 第十一章的 bash 再來談! 5.2 文件檔名的搜尋:whereis, locate, find 在 Linux 底下也有相當優異的搜尋命令呦!通常 find 不很常用的!因為速度慢之外, 也很操硬盤!通常我們都是先使用 whereis 或者是 locate 來檢查,如果真的找不到了,才以 find 來搜尋呦! 為什么呢?因為 whereis 與 locate 是利用數據庫來搜尋數據,所以相當的快速,而且并沒有實際的搜尋硬盤, 比較省時間啦 1.whereis (尋找特定文件) whereis 可以加入選項來找尋相關的數據, 例如如果你是要找可運行檔( binary )那么加上 -b 就可以啦! 如果不加任何選項的話,那么就將所有的數據列出來羅! whereis 到底是使用什么咚咚呢?為何搜尋的速度會比 find 快這么多? 其實那也沒有什么!這是因為 Linux 系統會將系統內的所有文件都記錄在一個數據庫文件里面, 而當使用 whereis 或者是底下要說的 locate 時,都會以此數據庫文件的內容為準, 因此,有的時后你還會發現使用這兩個運行檔時,會找到已經被殺掉的文件! 而且也找不到最新的剛剛創建的文件呢!這就是因為這兩個命令是由數據庫當中的結果去搜尋文件的所在啊! 更多與這個數據庫有關的說明,請參考下列的 locate 命令。 2.locate 這個 locate 的使用更簡單,直接在后面輸入『文件的部分名稱』后,就能夠得到結果。 舉上面的例子來說,我輸入 locate passwd ,那么在完整檔名 (包含路徑名稱) 當中,只要有 passwd 在其中, 就會被顯示出來的!這也是個很方便好用的命令,如果你忘記某個文件的完整檔名時~~ 但是,這個東西還是有使用上的限制呦!為什么呢?你會發現使用 locate 來尋找數據的時候特別的快, 這是因為 locate 尋找的數據是由『已創建的數據庫 /var/lib/mlocate/』 里面的數據所搜尋到的,所以不用直接在去硬盤當中存取數據,呵呵!當然是很快速羅! 那么有什么限制呢?就是因為他是經由數據庫來搜尋的,而數據庫的創建默認是在每天運行一次 (每個 distribution 都不同,CentOS 5.x 是每天升級數據庫一次!),所以當你新創建起來的文件, 卻還在數據庫升級之前搜尋該文件,那么 locate 會告訴你『找不到!』呵呵!因為必須要升級數據庫呀! 那能否手動升級數據庫哪?當然可以啊!升級 locate 數據庫的方法非常簡單,直接輸入『 updatedb 』就可以了! updatedb 命令會去讀取 /etc/updatedb.conf 這個配置檔的配置,然后再去硬盤里面進行搜尋檔名的動作, 最后就升級整個數據庫文件羅!因為 updatedb 會去搜尋硬盤,所以當你運行 updatedb 時,可能會等待數分鐘的時間喔!
    • updatedb:根據 /etc/updatedb.conf 的配置去搜尋系統硬盤內的檔名,并升級 /var/lib/mlocate 內的數據庫文件;
    • locate:依據 /var/lib/mlocate 內的數據庫記載,找出使用者輸入的關鍵字檔名。
    3.find 3.1時間 時間參數真是挺有意思的!我們現在知道 atime, ctime 與 mtime 的意義,如果你想要找出一天內被更動過的文件名稱, 可以使用上述范例一的作法。但如果我想要找出『4天內被更動過的文件檔名』呢?那可以使用『 find /var -mtime -4 』。那如果是『4天前的那一天』就用『 find /var -mtime 4 』。有沒有加上『+, -』差別很大喔!我們可以用簡單的圖示來說明一下: 圖中最右邊為目前的時間,越往左邊則代表越早之前的時間軸啦。由圖5.2.1我們可以清楚的知道:
    • +4代表大於等於5天前的檔名:ex> find /var -mtime +4
    • -4代表小於等於4天內的文件檔名:ex> find /var -mtime -4
    • 4則是代表4-5那一天的文件檔名:ex> find /var -mtime 4
    3.2 用戶 如果你想要找出某個使用者在系統底下創建了啥咚咚,使用上述的選項與參數,就能夠找出來啦! 至於那個 -nouser 或 -nogroup 的選項功能中,除了你自行由網絡上面下載文件時會發生之外, 如果你將系統里面某個帳號刪除了,但是該帳號已經在系統內創建很多文件時,就可能會發生無主孤魂的文件存在! 此時你就得使用這個 -nouser 來找出該類型的文件羅! 3.3 文件屬性 上述范例中比較有趣的就屬 -perm 這個選項啦!他的重點在找出特殊權限的文件羅! 我們知道 SUID 與 SGID 都可以配置在二進位程序上,假設我想要找出來 /bin, /sbin 這兩個目錄下, 只要具有 SUID 或 SGID 就列出來該文件,你可以這樣做: 因為 SUID 是 4 分,SGID 2 分,總共為 6 分,因此可用 +6000 來處理這個權限! 至於 find 后面可以接多個目錄來進行搜尋!另外, find 本來就會搜尋次目錄,這個特色也要特別注意喔! 3.4 額外 find 的特殊功能就是能夠進行額外的動作(action)。我們將范例八的例子以圖解來說明如下: 該范例中特殊的地方有 {} 以及 \; 還有 -exec 這個關鍵字,這些東西的意義為:
    • {} 代表的是『由 find 找到的內容』,如上圖所示,find 的結果會被放置到 {} 位置中;
    • -exec 一直到 \; 是關鍵字,代表 find 額外動作的開始 (-exec) 到結束 (\;) ,在這中間的就是 find 命令內的額外動作。 在本例中就是『 ls -l {} 』羅!
    • 因為『 ; 』在 bash 環境下是有特殊意義的,因此利用反斜線來跳脫。
    透過圖 5.2.2 你應該就比較容易了解 -exec 到 \; 之間的意義了吧! 如果你要找的文件是具有特殊屬性的,例如 SUID 、文件擁有者、文件大小等等, 那么利用 locate 是沒有辦法達成你的搜尋的!此時 find 就顯的很重要啦! 另外,find 還可以利用萬用字節來找尋檔名呢!舉例來說,你想要找出 /etc 底下檔名包含 httpd 的文件, 那么你就可以這樣做:
    6.極重要!權限與命令間的關系: 我們知道權限對於使用者帳號來說是非常重要的,因為他可以限制使用者能不能讀取/創建/刪除/修改文件或目錄! 在這一章我們介紹了很多文件系統的管理命令,第六章則介紹了很多文件權限的意義。在這個小節當中, 我們就將這兩者結合起來,說明一下什么命令在什么樣的權限下才能夠運行吧!^_^ 一、讓使用者能進入某目錄成為『可工作目錄』的基本權限為何:
    • 可使用的命令:例如 cd 等變換工作目錄的命令;
    • 目錄所需權限:使用者對這個目錄至少需要具有 x 的權限
    • 額外需求:如果使用者想要在這個目錄內利用 ls 查閱檔名,則使用者對此目錄還需要 r 的權限。
    二、使用者在某個目錄內讀取一個文件的基本權限為何?
    • 可使用的命令:例如本章談到的 cat, more, less等等
    • 目錄所需權限:使用者對這個目錄至少需要具有 x 權限;
    • 文件所需權限:使用者對文件至少需要具有 r 的權限才行!
    三、讓使用者可以修改一個文件的基本權限為何?
    • 可使用的命令:例如 nano 或未來要介紹的 vi 編輯器等;
    • 目錄所需權限:使用者在該文件所在的目錄至少要有 x 權限;
    • 文件所需權限:使用者對該文件至少要有 r, w 權限
    四、讓一個使用者可以創建一個文件的基本權限為何?
    • 目錄所需權限:使用者在該目錄要具有 w,x 的權限,重點在 w 啦!
    五、讓使用者進入某目錄并運行該目錄下的某個命令之基本權限為何?
    • 目錄所需權限:使用者在該目錄至少要有 x 的權限;
    • 文件所需權限:使用者在該文件至少需要有 x 的權限
    例題:
    讓一個使用者 vbird 能夠進行『cp /dir1/file1 /dir2』的命令時,請說明 dir1, file1, dir2 的最小所需權限為何?答:
    運行 cp 時, vbird 要『能夠讀取來源檔,并且寫入目標檔!』所以應參考上述第二點與第四點的說明!
    因此各文件/目錄的最小權限應該是:
    dir1 :至少需要有 x 權限;
    file1:至少需要有 r 權限;
    dir2 :至少需要有 w, x 權限。
    例題:
    有一個文件全名為 /home/student/www/index.html ,各相關文件/目錄的權限如下:
    drwxr-xr-x 23 root root 4096 Sep 22 12:09 /
    drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home
    drwx------ 6 student student 4096 Sep 29 02:23 /home/student
    drwxr-xr-x 6 student student 4096 Sep 29 02:24 /home/student/www
    -rwxr--r-- 6 student student 369 Sep 29 02:27 /home/student/www/index.html
    請問 vbird 這個帳號(不屬於student群組)能否讀取 index.html 這個文件呢?答:
    雖然 www 與 index.html 是可以讓 vbird 讀取的權限,但是因為目錄結構是由根目錄一層一層讀取的,
    因此 vbird 可進入 /home 但是卻不可進入 /home/student/ ,既然連進入 /home/student 都不許了,
    當然就讀不到 index.html 了!所以答案是『vbird不會讀取到 index.html 的內容』喔!
    那要如何修改權限呢?其實只要將 /home/student 的權限修改為最小 711 ,或者直接給予 755 就可以羅!
    這可是很重要的概念喔!

    7.重點回顧
    • 絕對路徑:『一定由根目錄 / 寫起』;相對路徑:『不是由 / 寫起』
    • 特殊目錄有:., .., -, ~, ~account需要注意;
    • 與目錄相關的命令有:cd, mkdir, rmdir, pwd 等重要命令;
    • rmdir 僅能刪除空目錄,要刪除非空目錄需使用『 rm -r 』命令;
    • 使用者能使用的命令是依據 PATH 變量所規定的目錄去搜尋的;
    • 不同的身份(root 與一般用戶)系統默認的 PATH 并不相同。差異較大的地方在於 /sbin, /usr/sbin ;
    • ls 可以檢視文件的屬性,尤其 -d, -a, -l 等選項特別重要!
    • 文件的復制、刪除、移動可以分別使用:cp, rm , mv等命令來操作;
    • 檢查文件的內容(讀檔)可使用的命令包括有:cat, tac, nl, more, less, head, tail, od 等
    • cat -n 與 nl 均可顯示行號,但默認的情況下,空白行會不會編號并不相同;
    • touch 的目的在修改文件的時間參數,但亦可用來創建空文件;
    • 一個文件記錄的時間參數有三種,分別是 access time(atime), status time (ctime), modification time(mtime),ls 默認顯示的是 mtime。
    • 除了傳統的rwx權限之外,在Ext2/Ext3文件系統中,還可以使用chattr與lsattr配置及觀察隱藏屬性。 常見的包括只能新增數據的 +a 與完全不能更動文件的 +i 屬性。
    • 新建文件/目錄時,新文件的默認權限使用 umask 來規范。默認目錄完全權限為drwxrwxrwx, 文件則為-rw-rw-rw-。
    • 文件具有SUID的特殊權限時,代表當使用者運行此一binary程序時,在運行過程中使用者會暫時具有程序擁有者的權限
    • 目錄具有SGID的特殊權限時,代表使用者在這個目錄底下新建的文件之群組都會與該目錄的群組名稱相同。
    • 目錄具有SBIT的特殊權限時,代表在該目錄下使用者創建的文件只有自己與root能夠刪除!
    • 觀察文件的類型可以使用 file 命令來觀察;
    • 搜尋命令的完整檔名可用 which 或 type ,這兩個命令都是透過 PATH 變量來搜尋檔名;
    • 搜尋文件的完整檔名可以使用 whereis 或 locate 到數據庫文件去搜尋,而不實際搜尋文件系統;
    • 利用 find 可以加入許多選項來直接查詢文件系統,以獲得自己想要知道的檔名。

    ?

    總結

    以上是生活随笔為你收集整理的第七章、Linux 文件与目录管理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。