# 鳥哥 week1 ###### tags: `鳥哥` [TOC] ## [第五章、Linux 的檔案權限與目錄配置](http://linux.vbird.org/linux_basic/0210filepermission.php) ### 1. 檔案屬性 ![](https://i.imgur.com/fanRRBS.png) - 檔案權限類型 ![](https://i.imgur.com/1jOxt72.png) :::info - 檔案類型是[ d ]則為目錄 - 檔案類型是[ - ]則為檔案 - 檔案類型是[ l ]則表示為連結檔(link file) - 檔案類型是[ b ]則表示為裝置檔裡面的可供儲存的周邊設備 - 檔案類型是[ c ]則表示為裝置檔裡面的序列埠設備 ::: ![](https://i.imgur.com/nQT4qUC.png) ### 2. 如何改變檔案屬性與權限 - chgrp :改變檔案所屬群組 ``` chgrp [-R] dirname/filename ``` - chown :改變檔案擁有者 ``` chown [-R] 帳號名稱:群組名稱 檔案或目錄 ``` - chmod :改變檔案的權限 ``` chmod [-R] xyz 檔案或目錄 ``` ![](https://i.imgur.com/KCjnfcE.png) - 使用者操作功能與權限 ![](https://i.imgur.com/B6evibk.png) ### 3. 目錄配置的依據--FHS(Filesystem Hierarchy Standard) - FHS依據檔案系統使用的頻繁與否與是否允許使用者隨意更動, 而將目錄定義成為四種交互作用的形態,用表格來說有點像底下這樣 ![](https://i.imgur.com/C5LNyo0.png) :::info - 可分享的:可以分享給其他系統掛載使用的目錄,所以包括執行檔與使用者的郵件等資料, 是能夠分享給網路上其他主機掛載用的目錄 - 不可分享的:自己機器上面運作的裝置檔案或者是與程序有關的socket檔案等, 由於僅與自身機器有關,所以當然就不適合分享給其他主機了 - 不變的:有些資料是不會經常變動的,跟隨著distribution而不變動。 例如函式庫、文件說明檔、系統管理員所管理的主機服務設定檔等等 - 可變動的:經常改變的資料,例如登錄檔、一般用戶可自行收受的新聞群組等 ::: - FHS針對目錄樹架構僅定義出三層目錄底下應該放置什麼資料 - / (root, 根目錄):與開機系統有關 - /usr (unix software resource):與軟體安裝/執行有關 - /var (variable):與系統運作過程有關 ## [第六章 、目錄與路徑](http://linux.vbird.org/linux_basic/0220filemanager.php) ### 1. 目錄的相關操作 - 絕對路徑與相對路徑 - 絕對路徑:路徑的寫法『一定由根目錄 / 寫起』 - 相對路徑:路徑的寫法『不是由 / 寫起』 :::info - .代表此層目錄 - ..代表上一層目錄 - -代表前一個工作目錄 - ~代表『目前使用者身份』所在的家目錄 - ~account代表account 這個使用者的家目錄(account是個帳號名稱) ::: - 常用指令 - cd (change directory, 變換目錄) - pwd (Print Working Directory, 顯示目前所在的目錄) :::warning -P : 顯示出確實的路徑,而非使用連結 (link) 路徑 ::: - mkdir (make directory, 建立新目錄) :::warning -p : 幫助你直接將所需要的目錄(包含上層目錄)遞迴建立起來 -m : 直接設定檔案的權限 ::: ``` mkdir -m xyz [dir_name] ``` - rmdir (刪除空的目錄) :::warning -r : 刪除有內容的目錄 -p : 連同上層空的目錄也一起刪除 ::: - 關於執行檔路徑的變數: $PATH 當我們在執行一個指令的時候,舉例來說『ls』好了,系統會依照PATH的設定去每個PATH定義的目錄下搜尋檔名為ls的可執行檔, 如果在PATH定義的目錄中含有多個檔名為ls的可執行檔,那麼先搜尋到的同名指令先被執行 ### 2. 檔案與目錄管理 - ls (list, 檔案與目錄的檢視) :::warning -a :全部的檔案,連同隱藏檔( 開頭為 . 的檔案) 一起列出來(常用) -A :全部的檔案,連同隱藏檔,但不包括 . 與 .. 這兩個目錄 -d :僅列出目錄本身,而不是列出目錄內的檔案資料(常用) -f :直接列出結果,而不進行排序 (ls 預設會以檔名排序!) -F :根據檔案、目錄等資訊,給予附加資料結構 例如:*代表可執行檔; /代表目錄; =代表 socket 檔案; |代表 FIFO 檔案 -h :將檔案容量以人類較易讀的方式(例如 GB, KB 等等)列出來 -i :列出 inode 號碼,inode 的意義下一章將會介紹 -l :長資料串列出,包含檔案的屬性與權限等等資料(常用) -n :列出 UID 與 GID 而非使用者與群組的名稱 -r :將排序結果反向輸出,例如:原本檔名由小到大,反向則為由大到小 -R :連同子目錄內容一起列出來,等於該目錄下的所有檔案都會顯示出來 -S :以檔案容量大小排序,而不是用檔名排序 -t :依時間排序,而不是用檔名 --color=never :不要依據檔案特性給予顏色顯示 --color=always :顯示顏色 --color=auto :讓系統自行依據設定來判斷是否給予顏色 --full-time :以完整時間模式 (包含年、月、日、時、分) 輸出 --time={atime,ctime} :輸出 access 時間或改變權限屬性時間 (ctime) 而非內容變更時間 (modification time) ::: - cp (copy, 複製檔案或目錄) :::warning -a :相當於 -dr --preserve=all 的意思,至於 dr 請參考下列說明;(常用) -d :若來源檔為連結檔的屬性(link file),則複製連結檔屬性而非檔案本身 -f :為強制(force)的意思,若目標檔案已經存在且無法開啟,則移除後再嘗試一次 -i :若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用) -l :進行硬式連結(hard link)的連結檔建立,而非複製檔案本身 -p :連同檔案的屬性(權限、用戶、時間)一起複製,而非預設屬性(備份常用) -r :遞迴持續複製,用於目錄的複製行為(常用) -s :複製成為符號連結檔 (symbolic link),亦即『捷徑』檔案 -u :destination 比 source 舊才更新 destination或 destination 不存在的情況下才複製 --preserve=all :除了 -p 的權限參數外,還加入 SELinux 的屬性, links, xattr 等也複製 如果來源檔有兩個以上,則最後一個目的檔一定要是『目錄』才行 ::: - rm (remove, 移除檔案或目錄) :::warning -f :就是 force 的意思,忽略不存在的檔案,不會出現警告訊息 -i :互動模式,在刪除前會詢問使用者是否動作 -r :遞迴刪除 \rm :可以忽略掉 alias 的指定選項 ::: - mv (move, 移動檔案與目錄或更名) :::warning -f :force 強制的意思,如果目標檔案已經存在,不會詢問而直接覆蓋; -i :若目標檔案 (destination) 已經存在時,就會詢問是否覆蓋! -u :若目標檔案已經存在,且 source 比較新,才會更新 (update) ::: - basename 取得的檔案名稱 - dirname 取得的目錄名稱 ### 3. 檔案內容查閱 - cat (concatenate, 由第一行開始顯示檔案內容) :::warning -A :相當於 -vET 的整合選項,可列出一些特殊字符而不是空白而已 -b :列出行號,僅針對非空白行做行號顯示,空白行不標行號 -E :將結尾的斷行字元 $ 顯示出來 -n :列印出行號,連同空白行也會有行號,與 -b 的選項不同 -T :將 [tab] 按鍵以 ^I 顯示出來 -v :列出一些看不出來的特殊字符 ::: - tac (反向列示, 與cat相反) - nl (添加行號列印, 可以將行號做比較多的顯示設計) :::warning -b :指定行號指定的方式,主要有兩種 -b a :表示不論是否為空行,也同樣列出行號(類似 cat -n) -b t :如果有空行,空的那一行不要列出行號(預設值) -n :列出行號表示的方法,主要有三種 -n ln :行號在螢幕的最左方顯示 -n rn :行號在自己欄位的最右方顯示,且不加 0 -n rz :行號在自己欄位的最右方顯示,且加 0 -w :行號欄位的佔用的字元數 ::: - more (一頁一頁翻動) :::warning 空白鍵 (space):代表向下翻一頁 Enter :代表向下翻『一行』 /字串 :代表在這個顯示的內容當中,向下搜尋『字串』這個關鍵字 :f :立刻顯示出檔名以及目前顯示的行數 q :代表立刻離開 more ,不再顯示該檔案內容 b 或 [ctrl]-b :代表往回翻頁,不過這動作只對檔案有用,對管線無用 ::: - less (一頁一頁翻動) :::warning 空白鍵 :向下翻動一頁; [pagedown]:向下翻動一頁; [pageup] :向上翻動一頁; /字串 :向下搜尋『字串』的功能; ?字串 :向上搜尋『字串』的功能; n :重複前一個搜尋 (與 / 或 ? 有關!) N :反向的重複前一個搜尋 (與 / 或 ? 有關!) g :前進到這個資料的第一行去; G :前進到這個資料的最後一行去 (注意大小寫); q :離開 less 這個程式; ::: - head (取出前面幾行) :::warning -n :後面接數字,代表顯示幾行的意思 (-的話表示後面的n行不顯示) ::: - tail (取出後面幾行) :::warning -n :後面接數字,代表顯示幾行的意思 (+的話表示第n行後開始顯示) -f :表示持續偵測後面所接的檔名,要等到按下[ctrl]-c才會結束tail的偵測 ::: - od (顯示非文字檔) :::warning -t :後面可以接各種『類型 (TYPE)』的輸出,例如: a :利用預設的字元來輸出 c :使用 ASCII 字元來輸出 d[size] :利用十進位(decimal)來輸出資料,每個整數佔用 size bytes f[size] :利用浮點數值(floating)來輸出資料,每個數佔用 size bytes o[size] :利用八進位(octal)來輸出資料,每個整數佔用 size bytes x[size] :利用十六進位(hexadecimal)來輸出資料,每個整數佔用 size bytes ::: - touch (修改檔案時間或建置新檔) :::warning -a :僅修訂 access time; -c :僅修改檔案的時間,若該檔案不存在則不建立新檔案; -d :後面可以接欲修訂的日期而不用目前的日期,也可以使用 --date="日期或時間" -m :僅修改 mtime ; -t :後面可以接欲修訂的時間而不用目前的時間,格式為[YYYYMMDDhhmm] ::: ### 4. 檔案與目錄的預設權限與隱藏權限 - umask (檔案預設權限) :::warning 若使用者建立為『檔案』則預設『沒有可執行( x )權限』,亦即只有 rw 這兩個項目,也就是最大為 666 分,預設權限如下:-rw-rw-rw- 若使用者建立為『目錄』,則由於 x 與是否可以進入此目錄有關,因此預設為所有權限均開放,亦即為 777 分,預設權限如下:drwxrwxrwx umask 的分數指的是該預設值需要減掉的權限 ::: - chattr (設定檔案隱藏屬性) :::warning +:增加某一個特殊參數,其他原本存在參數則不動。 -:移除某一個特殊參數,其他原本存在參數則不動。 = :設定一定,且僅有後面接的參數 A :當設定了 A 這個屬性時,若你有存取此檔案(或目錄)時,他的存取時間 atime 將不會被修改,可避免 I/O 較慢的機器過度的存取磁碟 S :一般檔案是非同步寫入磁碟的,如果加上 S 這個屬性時,進行任何檔案的修改,該更動會『同步』寫入磁碟中。 a :檔案將只能增加資料,而不能刪除也不能修改資料,只有root才能設定這屬性 c :這個屬性設定之後,將會自動的將此檔案『壓縮』,在讀取的時候將會自動解壓縮, 但是在儲存的時候,將會先進行壓縮後再儲存(看來對於大檔案似乎蠻有用的!) d :當 dump 程序被執行的時候,設定 d 屬性將可使該檔案(或目錄)不會被 dump 備份 i :檔案不能被刪除、改名、設定連結也無法寫入或新增資料 對於系統安全性有相當大的助益!只有 root 能設定此屬性 s :當檔案設定了 s 屬性時,如果這個檔案被刪除,他將會被完全的移除出這個硬碟空間, 所以如果誤刪了,完全無法救回來了喔! u :與 s 相反的,當使用 u 來設定檔案時,如果該檔案被刪除了,則資料內容其實還存在磁碟中,可以使用來救援該檔案喔 ::: - lsattr (顯示檔案隱藏屬性) :::warning -a :將隱藏檔的屬性也秀出來; -d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名; -R :連同子目錄的資料也一併列出來! ::: - SUID (Set UID) :::warning - SUID 權限僅對二進位程式(binary program)有效 - 執行者對於該程式需要具有 x 的可執行權限 - 本權限僅在執行該程式的過程中有效 (run-time) - 執行者將具有該程式擁有者 (owner) 的權限 ::: ![](https://i.imgur.com/7Zb4QiH.png) - file (觀察檔案類型) ### 5. 指令與檔案的搜尋 - which (尋找執行檔) :::warning -a :將所有由 PATH 目錄中可以找到的指令均列出,而不止第一個被找到的指令名稱 ::: - whereis (由一些特定的目錄中尋找檔案檔名, 速度快但不能找到全部) :::warning -l :可以列出 whereis 會去查詢的幾個主要目錄而已 -b :只找 binary 格式的檔案 -m :只找在說明檔 manual 路徑下的檔案 -s :只找 source 來源檔案 -u :搜尋不在上述三個項目當中的其他特殊檔案 ::: - find (find [PATH] [option] [action]) :::warning 1. 與時間有關的選項:共有 -atime, -ctime 與 -mtime ,以 -mtime 說明 -mtime n :n 為數字,意義為在 n 天之前的『一天之內』被更動過內容的檔案; -mtime +n :列出在 n 天之前(不含 n 天本身)被更動過內容的檔案檔名; -mtime -n :列出在 n 天之內(含 n 天本身)被更動過內容的檔案檔名。 -newer file :file 為一個存在的檔案,列出比 file 還要新的檔案檔名 2. 與使用者或群組名稱有關的參數: -uid n :n 為數字,這個數字是使用者的帳號 ID,亦即 UID ,這個 UID 是記錄在 /etc/passwd 裡面與帳號名稱對應的數字。這方面我們會在第四篇介紹。 -gid n :n 為數字,這個數字是群組名稱的 ID,亦即 GID,這個 GID 記錄在 /etc/group,相關的介紹我們會第四篇說明~ -user name :name 為使用者帳號名稱喔!例如 dmtsai -group name:name 為群組名稱喔,例如 users ; -nouser :尋找檔案的擁有者不存在 /etc/passwd 的人! -nogroup :尋找檔案的擁有群組不存在於 /etc/group 的檔案,當你自行安裝軟體時,很可能該軟體的屬性當中並沒有檔案擁有者,這是可能的!在這個時候,就可以使用 -nouser 與 -nogroup 搜尋 3. 與檔案權限及名稱有關的參數: -name filename:搜尋檔案名稱為 filename 的檔案; -size [+-]SIZE:搜尋比 SIZE 還要大(+)或小(-)的檔案。這個 SIZE 的規格有: c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB還要大的檔案,就是『 -size +50k 』 -type TYPE :搜尋檔案的類型為 TYPE 的,類型主要有:一般正規檔案 (f), 裝置檔案 (b, c) 目錄 (d), 連結檔 (l), socket (s), 及 FIFO (p) 等屬性。 -perm mode :搜尋檔案權限『剛好等於』 mode 的檔案,這個 mode 為類似 chmod 的屬性值,舉例來說, -rwsr-xr-x 的屬性為 4755 ! -perm -mode :搜尋檔案權限『必須要全部囊括 mode 的權限』的檔案,舉例來說, 我們要搜尋 -rwxr--r-- ,亦即 0744 的檔案,使用 -perm -0744, 當一個檔案的權限為 -rwsr-xr-x ,亦即 4755 時,也會被列出來, 因為 -rwsr-xr-x 的屬性已經囊括了 -rwxr--r-- 的屬性了。 -perm /mode :搜尋檔案權限『包含任一 mode 的權限』的檔案,舉例來說,我們搜尋 -rwxr-xr-x ,亦即 -perm /755 時,但一個檔案屬性為 -rw------- 也會被列出來,因為他有 -rw.... 的屬性存在 :::