當前位置:
首頁 >
第七章、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 目錄的相關操作: 在所有目錄底下都會存在的兩個目錄,分別是『.』與『..』 分別代表此層與上一級目錄的意思 幾個常見的處理目錄的命令吧:
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底下,不然系統會掛點的!
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去!所以你會看到檔名右側會有個指向(->)的符號! 若刪除源目錄,則連結檔失效 所以,在復制時,你必須要清楚的了解到:
2.3 取得路徑的文件名稱與目錄名稱 完整檔名最長可以到達 4096 個字節。 那么你怎么知道那個是檔名?那個是目錄名?嘿嘿!就是利用斜線 (/) 來分辨啊! 一般的用途應該是在寫程序的時候,用來判斷之用的啦 這部分的命令可以用在第三篇內的 shell scripts 里頭 1.basename 2.dirname
3.文件內容查閱:
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 (一頁一頁翻動)
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底下都會記錄許多的時間參數, 其實是有三個主要的變動時間,那么三個時間的意義是什么呢?
4.文件與目錄的默認權限與隱藏權限 除了基本r, w, x權限外,在Linux的Ext2/Ext3文件系統下,我們還可以配置其他的系統隱藏屬性, 這部份可使用 chattr 來配置,而以 lsattr 來查看,最重要的屬性就是可以配置其不可修改的特性!讓連文件的擁有者都不能進行修改! 這個屬性可是相當重要的,尤其是在安全機制上面 (security)!
4.1 文件默認權限:umask umask 就是指定 『目前使用者在創建文件或目錄時候的權限默認值』 查閱的方式有兩種, 一種可以直接輸入 umask ,就可以看到數字型態的權限配置分數, 一種則是加入 -S (Symbolic) 這個選項,就會以符號類型的方式來顯示出權限了! 奇怪的是,怎么 umask 會有四組數字啊?不是只有三組嗎?是沒錯啦。 第一組是特殊權限用的,我們先不要理他,所以先看后面三組即可。 在默認權限的屬性上,目錄與文件是不一樣的。從第六章我們知道 x 權限對於目錄是非常重要的! 但是一般文件的創建則不應該有運行的權限,因為一般文件通常是用在於數據的記錄嘛!當然不需要運行的權限了。 因此,默認的情況如下:
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 UID 當 s 這個標志出現在文件擁有者的 x 權限上時,例如剛剛提到的 /usr/bin/passwd 這個文件的權限狀態:『-rwsr-xr-x』,此時就被稱為 Set UID,簡稱為 SUID 的特殊權限。 基本上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 有如下的功能: 以 root 登陸系統,并且進入 /tmp 當中; touch test,并且更改 test 權限成為 777 ; 以一般使用者登陸,并進入 /tmp; 嘗試刪除 test 這個文件! 由於 SUID/SGID/SBIT 牽涉到程序的概念,因此再次強調,這部份的數據在您讀完第十七章關於程序方面的知識后,要再次的回來瞧瞧喔! 目前,你先有個簡單的基礎概念就好了! 4.SUID/SGID/SBIT 權限配置 何配置文件使成為具有 SUID 與 SGID 的權限呢? 這就需要第六章的數字更改權限的方法了
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 時,可能會等待數分鐘的時間喔!
6.極重要!權限與命令間的關系: 我們知道權限對於使用者帳號來說是非常重要的,因為他可以限制使用者能不能讀取/創建/刪除/修改文件或目錄! 在這一章我們介紹了很多文件系統的管理命令,第六章則介紹了很多文件權限的意義。在這個小節當中, 我們就將這兩者結合起來,說明一下什么命令在什么樣的權限下才能夠運行吧!^_^ 一、讓使用者能進入某目錄成為『可工作目錄』的基本權限為何:
7.重點回顧
1. 目錄與路徑 1.1目錄與路徑: 相對路徑與絕對路徑: 絕對路徑:路徑的寫法『一定由根目錄 / 寫起』,例如: /usr/share/doc 這個目錄 相對路徑意指『相對於目前工作目錄的路徑!』
1.2 目錄的相關操作: 在所有目錄底下都會存在的兩個目錄,分別是『.』與『..』 分別代表此層與上一級目錄的意思 幾個常見的處理目錄的命令吧:
- cd:變換目錄
- pwd:顯示目前的目錄
- mkdir:創建一個新的目錄
- 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.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 :代表往回翻頁,不過這動作只對文件有用,對管線無用。
- 空白鍵????:向下翻動一頁;
- [pagedown]:向下翻動一頁;
- [pageup]??:向上翻動一頁;
- /字串?????:向下搜尋『字串』的功能;
- ?字串?????:向上搜尋『字串』的功能;
- n???????? :重復前一個搜尋 (與 / 或 ? 有關!)
- N???????? :反向的重復前一個搜尋 (與 / 或 ? 有關!)
- q???????? :離開 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):
- access time (atime):
- 創建一個空的文件;
- 將某個文件日期修訂為目前 (mtime 與 atime)
4.文件與目錄的默認權限與隱藏權限 除了基本r, w, x權限外,在Linux的Ext2/Ext3文件系統下,我們還可以配置其他的系統隱藏屬性, 這部份可使用 chattr 來配置,而以 lsattr 來查看,最重要的屬性就是可以配置其不可修改的特性!讓連文件的擁有者都不能進行修改! 這個屬性可是相當重要的,尤其是在安全機制上面 (security)!
4.1 文件默認權限:umask umask 就是指定 『目前使用者在創建文件或目錄時候的權限默認值』 查閱的方式有兩種, 一種可以直接輸入 umask ,就可以看到數字型態的權限配置分數, 一種則是加入 -S (Symbolic) 這個選項,就會以符號類型的方式來顯示出權限了! 奇怪的是,怎么 umask 會有四組數字啊?不是只有三組嗎?是沒錯啦。 第一組是特殊權限用的,我們先不要理他,所以先看后面三組即可。 在默認權限的屬性上,目錄與文件是不一樣的。從第六章我們知道 x 權限對於目錄是非常重要的! 但是一般文件的創建則不應該有運行的權限,因為一般文件通常是用在於數據的記錄嘛!當然不需要運行的權限了。 因此,默認的情況如下:
- 若使用者創建為『文件』則默認『沒有可運行( x )權限』,亦即只有 rw 這兩個項目,也就是最大為 666 分,默認權限如下:
- 若使用者創建為『目錄』,則由於 x 與是否可以進入此目錄有關,因此默認為所有權限均開放,亦即為 777 分,默認權限如下:
- 創建文件時:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
- 創建目錄時:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x
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 UID 當 s 這個標志出現在文件擁有者的 x 權限上時,例如剛剛提到的 /usr/bin/passwd 這個文件的權限狀態:『-rwsr-xr-x』,此時就被稱為 Set UID,簡稱為 SUID 的特殊權限。 基本上SUID有這樣的限制與功能:
- SUID 權限僅對二進位程序(binary program)有效;
- 運行者對於該程序需要具有 x 的可運行權限;
- 本權限僅在運行該程序的過程中有效 (run-time);
- 運行者將具有該程序擁有者 (owner) 的權限。
- SGID 對二進位程序有用;
- 程序運行者對於該程序來說,需具備 x 的權限;
- 運行者在運行的過程中將會獲得該程序群組的支持!
- 使用者若對於此目錄具有 r 與 x 的權限時,該使用者能夠進入此目錄;
- 使用者在此目錄下的有效群組(effective group)將會變成該目錄的群組;
- 用途:若使用者在此目錄下具有 w 的權限(可以新建文件),則使用者所創建的新文件,該新文件的群組與此目錄的群組相同。
- 當使用者對於此目錄具有 w, x 權限,亦即具有寫入的權限時;
- 當使用者在該目錄下創建文件或目錄時,僅有自己與 root 才有權力刪除該文件
- 4 為 SUID
- 2 為 SGID
- 1 為 SBIT
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 內的數據庫記載,找出使用者輸入的關鍵字檔名。
- +4代表大於等於5天前的檔名:ex> find /var -mtime +4
- -4代表小於等於4天內的文件檔名:ex> find /var -mtime -4
- 4則是代表4-5那一天的文件檔名:ex> find /var -mtime 4
- {} 代表的是『由 find 找到的內容』,如上圖所示,find 的結果會被放置到 {} 位置中;
- -exec 一直到 \; 是關鍵字,代表 find 額外動作的開始 (-exec) 到結束 (\;) ,在這中間的就是 find 命令內的額外動作。 在本例中就是『 ls -l {} 』羅!
- 因為『 ; 』在 bash 環境下是有特殊意義的,因此利用反斜線來跳脫。
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 文件与目录管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css文字和背景色渐变色
- 下一篇: Note6:batch file pro