- 第一篇:Linux 的規劃與安裝
- 第二篇:Linux 檔案、目錄與磁碟格式
- Chapter 05 Linux 的檔案權限與目錄配置
- Chapter 06 Linux 的檔案與目錄管理
- Chapter 07 Linux 磁碟與檔案系統管理
- Chapter 08 Linux 檔案與檔案系統的壓縮、打包與備份
- 第三篇:學習 Shell 與 Shell Scripts
- 第四篇:Linux 使用者管理
- 第五篇:Linux 系統管理員
6.1 目錄與路徑
6.1.1 相對路徑與絕對路徑
- 絕對路徑:「一定由根目錄 / 寫起」
- 絕對路徑正確度較好
- 使用 shell scripts 務必使用絕對路徑
- 相對路徑:「不是由 / 寫起」
6.1.2 目錄的相關操作
.
:此層目錄..
:上一層目錄-
:前一個工作目錄~
:目前使用者身份所在的家目錄~account
:account 這個使用者的家目錄
常見處理目錄指令:
- cd(Change Directory):變換目錄
- pwd(Print Working Directory):顯示目前的目錄
- pwd [-P]
- -P:顯示出確實的路徑,而非使用連結(link)路徑
- pwd [-P]
- mkdir(Make Directory):建立一個新的目錄
- mkdir [-mp] 目錄名稱
mkdir -p test1/test2/test3/test4
mkdir -m 711 test2
- mkdir [-mp] 目錄名稱
- rmdir(Remove Directory):刪除一個空的目錄
- rmdir [-p] 目錄名稱
rmdir -p test1/test2/test3/test4
- 被刪除的目錄裡面必定不能存在其他目錄或檔案
- rmdir [-p] 目錄名稱
6.1.3 關於執行檔路徑的變數:$PATH
- 不同身份使用者預設的 PATH 不同,預設能夠隨意執行的指令也不同
- PATH 是可以修改的
- 使用絕對路徑或相對路徑直接指定某個指令的檔名來執行,會比搜尋 PATH 來得正確
- 指令應該要放置到正確的目錄下,執行才會比較方便
- 本目錄(.)最後不要放到 PATH 當中
6.2 檔案與目錄管理
6.2.1 檔案與目錄的檢視:ls
- ls [-aAdfFhilnrRSt]
- 常用
- -a:全部的檔案,連同隱藏黨(開頭為 . 的檔案)一起列出來
- -d:僅列出目錄本身,而不是列出目錄內的檔案資料
- -l:長資料串列出,包含檔案的屬性與權限等等資料
- 常用
- ls [--color={never,auto,always}]
- --color=never:不要依據檔案特性給予顏色顯示
- --color=auto:顯示顏色
- --color=always:讓系統自行依據設定來判斷是否給予顏色
- ls [--full-time]
- --full-time:以完整時間模式(包含年、月、日、時、分)輸出
- --time={atime,ctime}:輸出 access 時間或改變權限屬性時間(ctime)而非內容變更時間(modification time)
6.2.2 複製、刪除與移動:cp、rm、mv
- cp:複製檔案或目錄
- cp [-adfilprsu] 來源檔(source) 目標檔(destination)
- 常用
- -a:相當於 -dr --preserve=all 的意思
- -i:若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行
- -p:連同檔案的屬性(權限、用戶、時間)一起複製過去,而非使用預設屬性
- -r:遞迴持續複製,用於目錄的複製行為
- 常用
- cp [-adfilprsu] 來源檔(source) 目標檔(destination)
- rm:移除檔案或目錄
- rm [-fir] 檔案或目錄
- -f:就是 force 的意思,忽略不存在的檔案,不會出現警告訊息
- -i:互動模式,在刪除前會詢問使用者是否動作
- -r:遞迴刪除《這是非常危險的選項!!!》
- rm [-fir] 檔案或目錄
- mv:移動檔案與目錄,或更名
- mv [-fiu] source destination
- -f:force 強制的意思,如果目標檔案已經存在,不會詢問而直接覆蓋
- -i:若目標檔案(destination)已經存在時,就會詢問是否覆蓋
- -u:若目標檔案已經存在,且 source 比較新,才會更新
- mv [-fiu] source destination
6.2.3 取得路徑的檔案名稱與目錄名稱
- basename:取得最後檔名
- dirname:取得目錄名
6.3 檔案內容查閱
- cat 由第一行開始顯示檔案內容
- tac 從最後一行開始顯示(tac 是 cat 的倒著寫!)
- nl 顯示的時候,順道輸出行號
- more 一頁一頁的顯示檔案內容
- less 與 more 類似,但比 more 更好的是他可以翻前頁
- head 只看頭幾行
- tail 只看尾巴幾行
- od 以二進位的方式讀取檔案內容
6.3.1 直接檢視檔案內容
- cat(concatenate):由第一行到最後一行連續顯示在螢幕
- cat [-AbEnTv]
- -A:相當於 -vET 的整合選項,可列出一些特殊自符而不是空白而已
- -b:列出行號,僅針對非空白行做行號顯示,空白行不標行號
- -E:將結尾的斷行字元 $ 顯示出來
- -n:列印出行號,連同空白行也會有行號,與 -b 的選項不同
- -T:將 [tab] 案件已 ^I 顯示出來
- -v:列出一些看不出來的特殊字符
- cat [-AbEnTv]
- tac(與 cat 反向):由最後一行到第一行反向顯示於螢幕
- nl(添加行號列印)
- nl [-bnw] 檔案
- -b:指定行號指定的方式
- -b a:表示不論是否為空行,也同樣列出行號
- -b t:如果有空行,空的那一行不要列出行號(預設值)
- -n:列出行號表示的方法
- -n ln:行號在螢幕的最左方顯示
- -n rn:行號在自己欄位的最右方顯示,且不加 0
- -n rz:行號在自己欄位的最右方顯示,且加 0
- -w:行號欄位佔用的字元數
- -b:指定行號指定的方式
- nl [-bnw] 檔案
6.3.2 可翻頁檢視
- more(一頁一頁翻動)
- less(一頁一頁翻動):比 more 更有彈性,可以使用 [PageUp] [PageDown] 來前後翻看文件。
6.3.3 資料擷取
- head(取出前面幾行)
- head [-n number] 檔案
- -n:後面接數字,代表顯示幾行
- head [-n number] 檔案
- tail(取出後面幾行)
- tail [-n number] 檔案
- -n:後面接數字,代表顯示幾行
- tail [-n number] 檔案
6.3.4 非純文字黨:od
- od [-t TYPE] 檔案
- -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
- -t:後面可以接各種「類型(TYPE)」的輸出
6.3.5 修改檔案時間或建置新檔:touch
- modification time(mtime):當改檔案的「內容資料」變更時
- status time(ctime):當該檔案的「狀態」改變時(權限或屬性)
access time(atime):當「該檔案的內容被取用」時
touch [-acdmt] 檔案
- -a:僅修訂 access time
- -c:僅修改檔案的時間,若該檔案不存在則不建立新檔案
- -d:後面可以接欲修改日期,而不用使用目前日期,如 --date="日期或時間"
- -m:僅修改 mtime
- -t:後面可以接欲修訂的時間,而不用目前時間,格式為 [YYYYMMDDhhmm]
6.4 檔案與目錄的預設權限與隱藏權限
6.4.1 檔案預設權限:umask
umask 就是指定「目前使用者在建立檔案或目錄時候的權限預設值」,如下圖:
- 0022:與一般權限有關的是後面三個數字
-S
(Symbolic):符號類型方式顯示權限
在預設權限上,目錄與檔案不同:
- 預設權限:
- 檔案:
-rw-rw-rw
,亦即 666 - 目錄:
drwxrwxrw
,亦即 777
- 檔案:
- umask 指的是「該預設值需要減掉的權限」
- 檔案:
-rw-r--r--
<--(-rw-rw-rw) - (----w--w-)
- 目錄:
drwxr-xr-x
<--(drwxrwxrw) - (d---w--w-)
- 檔案:
6.4.2 檔案隱藏權限
- chattr(設定檔案隱藏屬性)
- chattr [+-=][ASacdistu] 檔案或目錄
- +:增加某一個特殊參數,其他原本存在參數則不動
- -:移除某一個特殊參數,其他原本存在參數則不動
- =:設定一定,且僅有後面接的參數
- 常用參數:
- a:當設定 a 之後,這個檔案將只能增加資料,而不能刪除也不能修改資料,只有 root 才能設定這屬性
- i:讓檔案「不能被刪除、改名、設定連結、寫入或新增資料」,對安全性有相當大的助益,只有 root 才能設定這屬性
- chattr [+-=][ASacdistu] 檔案或目錄
- lsattr(顯示檔案隱藏屬性)
- lsattr [-adR] 檔案或目錄
- -a:將隱藏檔的屬性也秀出來
- -d:如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名
- -R:連同子目錄的資料也一併列出來
- lsattr [-adR] 檔案或目錄
6.4.3 檔案特殊權限:SUID, SGID, SBIT
- Set UID
- 限制與功能:
- SUID 權限僅對二進位程式(binary program)有效,不能用在 shell script 上!
- 執行者對於該程式需要具有 x 的可執行權限
- 本權限僅在執行該程式的過程中有效(run-time)
- 執行者將具有該程式擁有者(owner)的權限
- 範例:
- sunny 對於 /usr/bin/passwd 這個程式來說具有 x 的權限,表示 sunny 可以執行 passwd
- passwd 的擁有者是 root 這個帳號
- sunny 執行 passwd 的過程中,會「暫時」獲得 root 的權限
- /etc/shadow 就可以被 sunny 所執行的 passwd 所修改
- 限制與功能:
- Set GID
- 與 SUID 不同的是,SGID 可以針對檔案或目錄來設定,又依照檔案跟目錄有所不同
- 檔案:
- SGID 對二進位程式有用
- 程式執行者對於該程式來說,須具備 x 的權限
- 執行者在執行的過程中將會獲得該程式群組的支援
- 目錄:
- 使用者若對於此目錄具有 r 與 x 的權限時,該使用者能夠進入此目錄
- 使用者在此目錄下的有效群組將會變成該目錄的群組
- 用途:若使用者在此目錄下具有 w 的權限(可以新建檔案),則使用者所建立的新檔案,該新檔案的群組與此目錄的群組相同
- Stick Bit
- SBIT 只針對目錄有效,對於檔案沒有效果,對於目錄的作用:
- 當使用者對於此目錄具有 w, x 權限,亦即具有寫入的權限時
- 當使用者在該目錄下建立檔案或目錄時,僅有自己與 root 才有權力刪除該檔案
- 範例:
- 以 root 登入系統,進入 /tmp 中
- touch test,並且更改權限為 777
- 以一般使用者登入,進入 /tmp
- 嘗試刪除 test 檔案
- 結論:無法被刪除
- SBIT 只針對目錄有效,對於檔案沒有效果,對於目錄的作用:
- SUID/SGID/SBIT 權限設定
- SUID 4
- SGID 2
- SBIT 1
chmod 4755 test; ls -l test
加入具有 SUID 的權限chmod 1755 test; ls -l test
加入 SBIT 的功能chmod 7666 test; ls -l test
具有空的 SUID/SGID 權限- -S, T(大寫):因為是下達 7666,代表 user, group, others 都沒有 x 可執行,所以 -S, T 代表「空的」
6.4.4 觀察檔案類型:file
6.5 指令與檔案的搜尋
- which
- whereis
- locate / updatedb
- find
資料來源
鳥哥的 Linux 私房菜: http://linux.vbird.org/linux_basic/