## 5.2 Linux 文件權限概念
大致了解了Linux的使用者與群組之后,接著下來,我們要來談一談,這個文件的權限要如何針對這些所謂的“使用者”與“群組”來設置呢? 這個部分是相當重要的,尤其對于初學者來說,因為文件的權限與屬性是學習Linux的一個相當重要的關卡, 如果沒有這部份的概念,那么你將老是聽不懂別人在講什么呢!尤其是當你在你的屏幕前面出現了“Permission deny”的時候,不要擔心,“肯定是權限設置錯誤”啦!呵呵!好了,閑話不多聊,趕快來瞧一瞧先。
### 5.2.1 Linux文件屬性
嗯!既然要讓你了解Linux的文件屬性,那么有個重要的也是常用的指令就必須要先跟你說啰!那一個?就是“ ls ”這一個察看文件的指令啰!在你以dmtsai登陸系統,然后使用 su - 切換身份成為root后, 下達“ ls -al ”看看,會看到下面的幾個咚咚:
```
[dmtsai@study ~]$ su - # 先來切換一下身份看看
Password:
Last login: Tue Jun 2 19:32:31 CST 2015 on tty2
[root@study ~]# ls -al
total 48
dr-xr-x---. 5 root root 4096 May 29 16:08 .
dr-xr-xr-x. 17 root root 4096 May 4 17:56 ..
-rw-------. 1 root root 1816 May 4 17:57 anaconda-ks.cfg
-rw-------. 1 root root 927 Jun 2 11:27 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwxr-xr-x. 3 root root 17 May 6 00:14 .config <=范例說明處
drwx------. 3 root root 24 May 4 17:59 .dbus
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg <=范例說明處
[ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ] [ 7 ]
[ 權限 ][鏈接][擁有者][群組][文件大小][ 修改日期 ] [ 文件名 ]
```

**Tips** 由于本章后續的chgrp, chown等指令可能都需要使用root的身份才能夠處理,所以這里建議您以root的身份來學習!要注意的是, 我們還是不建議你直接使用 root 登陸系統,建議使用 su - 這個指令來切換身份喔!離開 su - 則使用 exit 回到 dmtsai 的身份即可!
ls是“list”的意思,重點在顯示文件的文件名與相關屬性。而選項“-al”則表示列出所有的文件詳細的權限與屬性 (包含隱藏文件,就是文件名第一個字符為“ . ”的文件)。如上所示,在你第一次以root身份登陸Linux時, 如果你輸入上述指令后,應該有上列的幾個東西,先解釋一下上面七個字段個別的意思:
圖5.2.1、文件屬性的示意圖
* 第一欄代表這個文件的類型與權限(permission):
這個地方最需要注意了!仔細看的話,你應該可以發現這一欄其實共有十個字符:(圖5.2.1及圖5.2.2內的權限并無關系)
圖5.2.2、文件的類型與權限之內容
* 第一個字符代表這個文件是“目錄、文件或鏈接文件等等”:
* 當為[ d ]則是目錄,例如[上表](../Text/index.html#table2.1.1)文件名為“.config”的那一行;
* 當為[ - ]則是文件,例如[上表](../Text/index.html#table2.1.1)文件名為“initial-setup-ks.cfg”那一行;
* 若是[ l ]則表示為鏈接文件(link file);
* 若是[ b ]則表示為設備文件里面的可供儲存的周邊設備(可隨機存取設備);
* 若是[ c ]則表示為設備文件里面的序列埠設備,例如鍵盤、鼠標(一次性讀取設備)。
* 接下來的字符中,以三個為一組,且均為“rwx” 的三個參數的組合。其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。 要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減號[ - ]而已。
* 第一組為“文件擁有者可具備的權限”,以“initial-setup-ks.cfg”那個文件為例, 該文件的擁有者可以讀寫,但不可執行;
* 第二組為“加入此群組之帳號的權限”;
* 第三組為“非本人且沒有加入本群組之其他帳號的權限”。

**Tips** 請你特別注意喔!不論是那一組權限,基本上,都是“針對某些帳號來設計的權限”喔!以群組來說,他規范的是“加入這個群組的帳號具有什么樣的權限”之意, 以學校社團為例,假設學校有個童軍社的社團辦公室,“加入童軍社的同學就可以進出社辦”,主角是“學生(帳號)”而不是童軍社本身喔!這樣可以理解嗎?
例題:若有一個文件的類型與權限數據為“-rwxr-xr--”,請說明其意義為何?答:先將整個類型與權限數據分開查閱,并將十個字符整理成為如下所示:
> [-][rwx][r-x][r--]
> ?1??234??567??890
?1 為:代表這個文件名為目錄或文件,本例中為文件(-);
234為:擁有者的權限,本例中為可讀、可寫、可執行(rwx);
567為:同群組使用者權限,本例中為可讀可執行(rx);
890為:其他使用者權限,本例中為可讀(r),就是只讀之意
同時注意到,rwx所在的位置是不會改變的,有該權限就會顯示字符,沒有該權限就變成減號(-)就是了。
另外,目錄與文件的權限意義并不相同,這是因為目錄與文件所記錄的數據內容不相同所致。 由于目錄與文件的權限意義非常的重要,所以鳥哥將他獨立到[5.2.3節中的目錄與文件之權限意義](../Text/index.html#filepermission_dir)中再來談。
* 第二欄表示有多少文件名鏈接到此節點(i-node):
每個文件都會將他的權限與屬性記錄到文件系統的i-node中,不過,我們使用的目錄樹卻是使用文件名來記錄, 因此每個文件名就會鏈接到一個i-node啰!這個屬性記錄的,就是有多少不同的文件名鏈接到相同的一個i-node號碼去就是了。 關于i-node的相關數據我們會在[第七章](../Text/index.html)談到文件系統時再加強介紹的。
* 第三欄表示這個文件(或目錄)的“擁有者帳號”
* 第四欄表示這個文件的所屬群組
在Linux系統下,你的帳號會加入于一個或多個的群組中。舉剛剛我們提到的例子,class1, class2, class3均屬于projecta這個群組,假設某個文件所屬的群組為projecta,且該文件的權限如[圖5.2.2](../Text/index.html#fig5.2.2)所示(-rwxrwx---), 則class1, class2, class3三人對于該文件都具有可讀、可寫、可執行的權限(看群組權限)。 但如果是不屬于projecta的其他帳號,對于此文件就不具有任何權限了。
* 第五欄為這個文件的容量大小,默認單位為Bytes;
* 第六欄為這個文件的創建日期或者是最近的修改日期:
這一欄的內容分別為日期(月/日)及時間。如果這個文件被修改的時間距離現在太久了,那么時間部分會僅顯示年份而已。 如下所示:
```
[root@study ~]# ll /etc/services /root/initial-setup-ks.cfg
-rw-r--r--. 1 root root 670293 Jun 7 2013 /etc/services
-rw-r--r--. 1 root root 1864 May 4 18:01 /root/initial-setup-ks.cfg
# 如上所示,/etc/services 為 2013 年所修改過的文件,離現在太遠之故,所以只顯示年份;
# 至于 /root/initial-setup-ks.cfg 是今年 (2015) 所創建的,所以就顯示完整的時間了。
```
如果想要顯示完整的時間格式,可以利用ls的選項,亦即:“ls -l --full-time”就能夠顯示出完整的時間格式了!包括年、月、日、時間喔。 另外,如果你當初是以繁體中文安裝你的Linux系統,那么日期字段將會以中文來顯示。 可惜的是,中文并沒有辦法在純文本的終端機模式中正確的顯示,所以此欄會變成亂碼。 那你就得要使用“export LC_ALL=en_US.utf8”來修改語系喔!
如果想要讓系統默認的語系變成英文的話,那么你可以修改系統配置文件“/etc/locale.conf”,利用第四章談到的[nano](../Text/index.html#nano)來修改該文件的內容,使LANG這個變量成為上述的內容即可。
* 第七欄為這個文件的文件名
這個字段就是文件名了。比較特殊的是:如果文件名之前多一個“ . ”,則代表這個文件為“隱藏文件”,例如[上表中的.config那一行](../Text/index.html#table2.1.1),該文件就是隱藏文件。 你可以使用“ls”及“ls -a”這兩個指令去感受一下什么是隱藏文件啰!

**Tips** 對于更詳細的 ls 用法,還記得怎么查詢嗎?對啦!使用 ls --help 或 man ls 或 info ls 去看看他的基礎用法去!自我進修是很重要的, 因為“師傅帶進門,修行看個人!”,自古只有天才學生,沒有明星老師呦!加油吧!^_^
這七個字段的意義是很重要的!務必清楚的知道各個字段代表的意義!尤其是第一個字段的九個權限, 那是整個Linux文件權限的重點之一。下面我們來做幾個簡單的練習,你就會比較清楚啰!
例題:假設test1, test2, test3同屬于testgroup這個群組,如果有下面的兩個文件,請說明兩個文件的擁有者與其相關的權限為何?
```
-rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt
-rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai
```
答:
* 文件test.txt的擁有者為root,所屬群組為root。至于權限方面則只有root這個帳號可以存取此文件,其他人則僅能讀此文件;
* 另一個文件ping_tsai的擁有者為test1,而所屬群組為testgroup。其中:
* test1 可以針對此文件具有可讀可寫可執行的權力;
* 而同群組的test2, test3兩個人與test1同樣是testgroup的群組帳號,則僅可讀可執行但不能寫(亦即不能修改);
* 至于沒有加入testgroup這一個群組的其他人則僅可以讀,不能寫也不能執行!
例題:承上一題如果我的目錄為下面的樣式,請問testgroup這個群組的成員與其他人(others)是否可以進入本目錄?
```
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/
```
答:
* 文件擁有者test1[rwx]可以在本目錄中進行任何工作;
* 而testgroup這個群組[r-x]的帳號,例如test2, test3亦可以進入本目錄進行工作,但是不能在本目錄下進行寫入的動作;
* 至于other的權限中[r--]雖然有r ,但是由于沒有x的權限,因此others的使用者,并不能進入此目錄!
* Linux文件權限的重要性:
與Windows系統不一樣的是,在Linux系統當中,每一個文件都多加了很多的屬性進來,尤其是群組的概念,這樣有什么用途呢? 其實,最大的用途是在“數據安全性”上面的。
* 系統保護的功能:
舉個簡單的例子,在你的系統中,關于系統服務的文件通常只有root才能讀寫或者是執行,例如/etc/shadow這一個帳號管理的文件,由于該文件記錄了你系統中所有帳號的數據, 因此是很重要的一個配置文件,當然不能讓任何人讀取(否則密碼會被竊取啊),只有root才能夠來讀取啰!所以該文件的權限就會成為[ ---------- ]啰!咦!所有人都不能使用?沒關系,root基本上是不受系統的權限所限制的, 所以無論文件權限為何,默認root都可以存取喔!
* 團隊開發軟件或數據共享的功能:
此外,如果你有一個軟件開發團隊,在你的團隊中,你希望每個人都可以使用某一些目錄下的文件, 而非你的團隊的其他人則不予以開放呢?以上面的例子來說,testgroup的團隊共有三個人,分別是test1, test2, test3,那么我就可以將團隊所需的文件權限訂為[ -rwxrws--- ]來提供給testgroup的工作團隊使用啰!(怎么會有 s 呢?沒關系,這個我們在后續章節再講給你聽!)
* 未將權限設置妥當的危害:
再舉個例子來說,如果你的目錄權限沒有作好的話,可能造成其他人都可以在你的系統上面亂搞啰! 例如本來只有root才能做的開關機、ADSL的撥接程序、新增或刪除使用者等等的指令,若被你改成任何人都可以執行的話, 那么如果使用者不小心給你重新開機啦!重新撥接啦!等等的!那么你的系統不就會常常莫名其妙的掛掉啰! 而且萬一你的使用者的密碼被其他不明人士取得的話,只要他登陸你的系統就可以輕而易舉的執行一些root的工作!
可怕吧!因此,在你修改你的linux文件與目錄的屬性之前,一定要先搞清楚, 什么數據是可變的,什么是不可變的!千萬注意啰!接下來我們來處理一下文件屬性與權限的變更吧!
### 5.2.2 如何改變文件屬性與權限
我們現在知道文件權限對于一個系統的安全重要性了,也知道文件的權限對于使用者與群組的相關性, 那么如何修改一個文件的屬性與權限呢?又!有多少文件的權限我們可以修改呢? 其實一個文件的屬性與權限有很多!我們先介紹幾個常用于群組、擁有者、各種身份的權限之修改的指令,如下所示:
* chgrp :改變文件所屬群組
* chown :改變文件擁有者
* chmod :改變文件的權限, SUID, SGID, SBIT等等的特性
* 改變所屬群組, chgrp
改變一個文件的群組真是很簡單的,直接以chgrp來改變即可,咦!這個指令就是change group的縮寫嘛!這樣就很好記了吧! ^_^。不過,請記得,要被改變的群組名稱必須要在/etc/group文件內存在才行,否則就會顯示錯誤!
假設你已經是root的身份了,那么在你的主文件夾內有一個名為 initial-setup-ks.cfg 的文件, 如何將該文件的群組改變一下呢?假設你已經知道在/etc/group里面已經存在一個名為users的群組, 但是testing這個群組名字就不存在/etc/group當中了,此時改變群組成為users與testing分別會有什么現象發生呢?
```
[root@study ~]# chgrp [-R] dirname/filename ...
選項與參數:
-R : 進行遞回(recursive)的持續變更,亦即連同次目錄下的所有文件、目錄
都更新成為這個群組之意。常常用在變更某一目錄內所有的文件之情況。
范例:
[root@study ~]# chgrp users initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root users 1864 May 4 18:01 initial-setup-ks.cfg
[root@study ~]# chgrp testing initial-setup-ks.cfg
chgrp: invalid group: `testing' <== 發生錯誤訊息啰~找不到這個群組名~
```
發現了嗎?文件的群組被改成users了,但是要改成testing的時候, 就會發生錯誤~注意喔!發生錯誤訊息還是要努力的查一查錯誤訊息的內容才好! 將他英文翻譯成為中文,就知道問題出在哪里了。
* 改變文件擁有者, chown
如何改變一個文件的擁有者呢?很簡單呀!既然改變群組是change group,那么改變擁有者就是change owner啰!BINGO!那就是chown這個指令的用途,要注意的是, 使用者必須是已經存在系統中的帳號,也就是在/etc/passwd 這個文件中有紀錄的使用者名稱才能改變。
chown的用途還滿多的,他還可以順便直接修改群組的名稱呢!此外,如果要連目錄下的所有次目錄或文件同時更改文件擁有者的話,直接加上 -R 的選項即可!我們來看看語法與范例:
```
[root@study ~]# chown [-R] 帳號名稱 文件或目錄
[root@study ~]# chown [-R] 帳號名稱:群組名稱 文件或目錄
選項與參數:
-R : 進行遞回(recursive)的持續變更,亦即連同次目錄下的所有文件都變更
范例:將 initial-setup-ks.cfg 的擁有者改為bin這個帳號:
[root@study ~]# chown bin initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 bin users 1864 May 4 18:01 initial-setup-ks.cfg
范例:將 initial-setup-ks.cfg 的擁有者與群組改回為root:
[root@study ~]# chown root:root initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg
```

**Tips** 事實上,chown也可以使用“**chown user.group file**”,亦即在擁有者與群組間加上小數點“ . ”也行! 不過很多朋友設置帳號時,喜歡在帳號當中加入小數點(例如vbird.tsai這樣的帳號格式),這就會造成系統的誤判了! 所以我們比較建議使用冒號“:”來隔開擁有者與群組啦!此外,chown也能單純的修改所屬群組呢! 例如“**chown .sshd initial-setup-ks.cfg**”就是修改群組~看到了嗎?就是那個小數點的用途!
知道如何改變文件的群組與擁有者了,那么什么時候要使用chown或chgrp呢?或許你會覺得奇怪吧? 是的,確實有時候需要變更文件的擁有者的,最常見的例子就是在復制文件給你之外的其他人時, 我們使用最簡單的cp指令來說明好了:
```
[root@study ~]# cp 來源文件 目的文件
```
假設你今天要將.bashrc這個文件拷貝成為.bashrc_test文件名,且是要給bin這個人,你可以這樣做:
```
[root@study ~]# cp .bashrc .bashrc_test
[root@study ~]# ls -al .bashrc*
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 176 Jun 3 00:04 .bashrc_test <==新文件的屬性沒變
```
由于復制行為(cp)會復制執行者的屬性與權限,所以!怎么辦?.bashrc_test還是屬于root所擁有, 如此一來,即使你將文件拿給bin這個使用者了,那他仍然無法修改的(看屬性/權限就知道了吧), 所以你就必須要將這個文件的擁有者與群組修改一下啰!知道如何修改了吧?
* 改變權限, chmod
文件權限的改變使用的是chmod這個指令,但是,權限的設置方法有兩種, 分別可以使用數字或者是符號來進行權限的變更。我們就來談一談:
* 數字類型改變文件權限
Linux文件的基本權限就有九個,分別是owner/group/others三種身份各有自己的read/write/execute權限, 先復習一下剛剛上面提到的數據:文件的權限字符為:“-rwxrwxrwx”, 這九個權限是三個三個一組的!其中,我們可以使用數字來代表各個權限,各權限的分數對照表如下:
> r:4
> w:2
> x:1
每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限為: [-rwxrwx---] 分數則是:
> owner = rwx = 4+2+1 = 7
> group = rwx = 4+2+1 = 7
> others= --- = 0+0+0 = 0
所以等一下我們設置權限的變更時,該文件的權限數字就是770啦!變更權限的指令chmod的語法是這樣的:
```
[root@study ~]# chmod [-R] xyz 文件或目錄
選項與參數:
xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。
-R : 進行遞回(recursive)的持續變更,亦即連同次目錄下的所有文件都會變更
```
舉例來說,如果要將.bashrc這個文件所有的權限都設置啟用,那么就下達:
```
[root@study ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 777 .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc
```
那如果要將權限變成“ -rwxr-xr-- ”呢?那么權限的分數就成為 [4+2+1][4+0+1][4+0+0]=754 啰!所以你需要下達“ chmod 754 filename”。 另外,在實際的系統運行中最常發生的一個問題就是,常常我們以[vim](../Text/index.html)編輯一個shell的文字批處理文件后,他的權限通常是 -rw-rw-r-- 也就是664, 如果要將該文件變成可可執行文件,并且不要讓其他人修改此一文件的話, 那么就需要-rwxr-xr-x這樣的權限,此時就得要下達:“ chmod 755 test.sh ”的指令啰!
另外,如果有些文件你不希望被其他人看到,那么應該將文件的權限設置為例如:“-rwxr-----”,那就下達“ chmod 740 filename ”吧!
例題:將剛剛你的.bashrc這個文件的權限修改回-rw-r--r--的情況吧!答:-rw-r--r--的分數是644,所以指令為:`chmod 644 .bashrc`
* 符號類型改變文件權限
還有一個改變權限的方法呦!從之前的介紹中我們可以發現,基本上就九個權限分別是(1)user (2)group (3)others三種身份啦!那么我們就可以借由u, g, o來代表三種身份的權限!此外, a 則代表 all 亦即全部的身份!那么讀寫的權限就可以寫成r, w, x啰!也就是可以使用下面的方式來看:
```
| chmod | u g o a | +(加入) -(除去) =(設置) | r w x | 文件或目錄 |
```
來實作一下吧!假如我們要“設置”一個文件的權限成為“-rwxr-xr-x”時,基本上就是:
* user (u):具有可讀、可寫、可執行的權限;
* group 與 others (g/o):具有可讀與執行的權限。
所以就是:
```
[root@study ~]# chmod u=rwx,go=rx .bashrc
# 注意喔!那個 u=rwx,go=rx 是連在一起的,中間并沒有任何空白字符!
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
```
那么假如是“ -rwxr-xr-- ”這樣的權限呢?可以使用“ chmod u=rwx,g=rx,o=r filename ”來設置。此外,如果我不知道原先的文件屬性,而我只想要增加.bashrc這個文件的每個人均可寫入的權限, 那么我就可以使用:
```
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod a+w .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc
```
而如果是要將權限去掉而不更動其他已存在的權限呢?例如要拿掉全部人的可執行權限,則:s
```
[root@study ~]# chmod a-x .bashrc
[root@study ~]# ls -al .bashrc
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 644 .bashrc # 測試完畢得要改回來喔!
```
知道 +, -, = 的不同點了嗎?對啦! + 與 – 的狀態下,只要是沒有指定到的項目,則該權限“不會被變動”, 例如上面的例子中,由于僅以 – 拿掉 x 則其他兩個保持當時的值不變!多多實作一下,你就會知道如何改變權限啰! 這在某些情況下面很好用的~舉例來說,你想要教一個朋友如何讓一個程序可以擁有執行的權限, 但你又不知道該文件原本的權限為何,此時,利用“chmod a+x filename” ,就可以讓該程序擁有執行的權限了。是否很方便?
### 5.2.3 目錄與文件之權限意義:
現在我們知道了Linux系統內文件的三種身份(擁有者、群組與其他人),知道每種身份都有三種權限(rwx), 已知道能夠使用chown, chgrp, chmod去修改這些權限與屬性,當然,利用ls -l去觀察文件也沒問題。 前兩小節也談到了這些文件權限對于數據安全的重要性。那么,這些文件權限對于一般文件與目錄文件有何不同呢? 有大大的不同啊!下面就讓鳥哥來說清楚,講明白!
* 權限對文件的重要性
文件是實際含有數據的地方,包括一般文本文件、數據庫內容檔、二進制可可執行文件(binary program)等等。 因此,權限對于文件來說,他的意義是這樣的:
* r (read):可讀取此一文件的實際內容,如讀取文本文件的文字內容等;
* w (write):可以編輯、新增或者是修改該文件的內容(但不含刪除該文件);
* x (eXecute):該文件具有可以被系統執行的權限。
那個可讀(r)代表讀取文件內容是還好了解,那么可執行(x)呢?這里你就必須要小心啦! 因為在Windows下面一個文件是否具有執行的能力是借由“ 擴展名 ”來判斷的, 例如:.exe, .bat, .com 等等,但是在Linux下面,我們的文件是否能被執行,則是借由是否具有“x”這個權限來決定的!跟文件名是沒有絕對的關系的!
至于最后一個w這個權限呢?當你對一個文件具有w權限時,你可以具有寫入/編輯/新增/修改文件的內容的權限, 但并不具備有刪除該文件本身的權限!對于文件的rwx來說, 主要都是針對“文件的內容”而言,與文件文件名的存在與否沒有關系喔!因為文件記錄的是實際的數據嘛!
* 權限對目錄的重要性
文件是存放實際數據的所在,那么目錄主要是儲存啥玩意啊?目錄主要的內容在記錄文件名清單,文件名與目錄有強烈的關連啦! 所以如果是針對目錄時,那個 r, w, x 對目錄是什么意義呢?
* r (read contents in directory):
表示具有讀取目錄結構清單的權限,所以當你具有讀取(r)一個目錄的權限時,表示你可以查詢該目錄下的文件名數據。 所以你就可以利用 ls 這個指令將該目錄的內容列表顯示出來!
* w (modify contents of directory):
這個可寫入的權限對目錄來說,是很了不起的! 因為他表示你具有異動該目錄結構清單的權限,也就是下面這些權限:
* 創建新的文件與目錄;
* 刪除已經存在的文件與目錄(不論該文件的權限為何!)
* 將已存在的文件或目錄進行更名;
* 搬移該目錄內的文件、目錄位置。
總之,目錄的w權限就與該目錄下面的文件名異動有關就對了啦!
* x (access directory):
咦!目錄的執行權限有啥用途啊?目錄只是記錄文件名而已,總不能拿來執行吧?沒錯!目錄不可以被執行,目錄的x代表的是使用者能否進入該目錄成為工作目錄的用途! 所謂的工作目錄(work directory)就是你目前所在的目錄啦!舉例來說,當你登陸Linux時, 你所在的主文件夾就是你當下的工作目錄。而變換目錄的指令是“cd”(change directory)啰!
上面的東西這么說,也太條列式~太教條了~有沒有清晰一點的說明啊?好~讓我們來思考一下人類社會使用的東西好了! 現在假設“文件是一堆文件數據夾”,所以你可能可以在上面寫/改一些數據。而“目錄是一堆抽屜”,因此你可以將數據夾分類放置到不同的抽屜去。 因此抽屜最大的目的是拿出/放入數據夾喔!現在讓我們匯整一下數據:
| 元件 | 內容 | 疊代物件 | r | w | x |
| --- | --- | --- |
| 文件 | 詳細數據data | 文件數據夾 | 讀到文件內容 | 修改文件內容 | 執行文件內容 |
| 目錄 | 文件名 | 可分類抽屜 | 讀到文件名 | 修改文件名 | 進入該目錄的權限(key) |
根據上述的分析,你可以看到,對一般文件來說,rwx 主要是針對“文件的內容”來設計權限,對目錄來說,rwx則是針對“目錄內的文件名列表”來設計權限。 其中最有趣的大概就屬目錄的 x 權限了!“文件名怎么執行”?沒道理嘛!其實,這個 x 權限設計,就相當于“該目錄,也就是該抽屜的 "鑰匙" ”啦! 沒有鑰匙你怎么能夠打開抽屜呢?對吧!
大致的目錄權限概念是這樣,下面我們來看幾個范例,讓你了解一下啥是目錄的權限啰!
例題:有個目錄的權限如下所示:
```
drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh
```
系統有個帳號名稱為vbird,這個帳號并沒有支持root群組,請問vbird對這個目錄有何權限?是否可切換到此目錄中?答:vbird對此目錄僅具有r的權限,因此vbird可以查詢此目錄下的文件名列表。因為vbird不具有x的權限,亦即 vbird 沒有這個抽屜的鑰匙啦! 因此vbird并不能切換到此目錄內!(相當重要的概念!) |
上面這個例題中因為vbird具有r的權限,因為是r乍看之下好像就具有可以進入此目錄的權限,其實那是錯的。 能不能進入某一個目錄,只與該目錄的x權限有關啦!此外, 工作目錄對于指令的執行是非常重要的,如果你在某目錄下不具有x的權限, 那么你就無法切換到該目錄下,也就無法執行該目錄下的任何指令,即使你具有該目錄的r或w的權限。
很多朋友在架設網站的時候都會卡在一些權限的設置上,他們開放目錄數據給網際網絡的任何人來瀏覽, 卻只開放r的權限,如上面的范例所示那樣,那樣的結果就是導致網站服務器軟件無法到該目錄下讀取文件(最多只能看到文件名), 最終用戶總是無法正確的查閱到文件的內容(顯示權限不足啊!)。要注意:要開放目錄給任何人瀏覽時,應該至少也要給予r及x的權限,但w權限不可隨便給! 為什么w不能隨便給,我們來看下一個例子:
例題:假設有個帳號名稱為dmtsai,他的主文件夾在/home/dmtsai/,dmtsai對此目錄具有[rwx]的權限。 若在此目錄下有個名為the_root.data的文件,該文件的權限如下:
```
-rwx------ 1 root root 4365 Sep 19 23:20 the_root.data
```
請問dmtsai對此文件的權限為何?可否刪除此文件?答:如上所示,由于dmtsai對此文件來說是“others”的身份,因此這個文件他無法讀、無法編輯也無法執行, 也就是說,他無法變動這個文件的內容就是了。
但是由于這個文件在他的主文件夾下, 他在此目錄下具有rwx的完整權限,因此對于the_root.data這個“文件名”來說,他是能夠“刪除”的! 結論就是,dmtsai這個用戶能夠刪除the_root.data這個文件! |

**Tips** 上述的例子解釋是這樣的,假設有個莫名其妙的人,拿著一個完全密封的數據夾放到你的辦公室抽屜中,因為完全密封你也打不開、看不到這個數據夾的內部數據(對文件來說,你沒有權限)。 但是因為這個數據夾是放在你的抽屜中,你當然可以拿出/放入任何數據在這個抽屜中(對目錄來說,你具有所有權限)。 所以,情況就是:你打開抽屜、拿出這個沒辦法看到的數據夾、將他丟到走廊上的垃圾桶!搞定了 (順利刪除!)!
還是看不太懂?有聽沒有懂喔!沒關系~我們下面就來設計一個練習, 讓你實際玩玩看,應該就能夠比較近入狀況啦!不過,由于很多指令我們還沒有教, 所以下面的指令有的先了解即可,詳細的指令用法我們會在后面繼續介紹的。
* 先用root的身份創建所需要的文件與目錄環境
我們用root的身份在所有人都可以工作的/tmp目錄中創建一個名為testing的目錄, 該目錄的權限為744且目錄擁有者為root。另外,在testing目錄下在創建一個空的文件, 文件名亦為testing。創建目錄可用mkdir(make directory),創建空文件可用[touch(下一章會說明)](../Text/index.html#touch)來處理。 所以過程如下所示:
```
[root@study ~]# cd /tmp <==切換工作目錄到/tmp
[root@study tmp]# mkdir testing <==創建新目錄
[root@study tmp]# chmod 744 testing <==變更權限
[root@study tmp]# touch testing/testing <==創建空的文件
[root@study tmp]# chmod 600 testing/testing <==變更權限
[root@study tmp]# ls -ald testing testing/testing
drwxr--r--. 2 root root 20 Jun 3 01:00 testing
-rw-------. 1 root root 0 Jun 3 01:00 testing/testing
# 仔細看一下,目錄的權限是 744 ,且所屬群組與使用者均是 root 喔!
# 那么在這樣的情況下面,一般身份使用者對這個目錄/文件的權限為何?
```
* 一般用戶的讀寫權限為何?觀察中
在上面的例子中,雖然目錄是744的權限設置,一般用戶應該能有 r 的權限, 但這樣的權限使用者能做啥事呢?由于鳥哥的系統中含有一個帳號名為 dmtsai 的,請再開另外一個終端機,使用 dmtsai 登陸來操作下面的任務!
```
[dmtsai@study ~]$ cd /tmp
[dmtsai@study tmp]$ ls -l testing/
ls: cannot access testing/testing: Permission denied
total 0
?????????? ? ? ? ? ? testing
# 雖然有告知權限不足,但因為具有 r 的權限可以查詢文件名。由于權限不足(沒有x),所以會有一堆問號。
[dmtsai@study tmp]$ cd testing/
-bash: cd: testing/: Permission denied
# 因為不具有 x ,所以當然沒有進入的權限啦!有沒有呼應前面的權限說明啊!
```
* 如果該目錄屬于用戶本身,會有什么狀況?
上面的練習我們知道了只有r確實可以讓使用者讀取目錄的文件名列表,不過詳細的信息卻還是讀不到的, 同時也不能將該目錄變成工作目錄(用 cd 進入該目錄之意)。那如果我們讓該目錄變成使用者的, 那么使用者在這個目錄下面是否能夠刪除文件呢?下面的練習做看看:
```
# 1\. 先用 root 的身份來搞定 /tmp/testing 的屬性、權限設置:
[root@study tmp]# chown dmtsai /tmp/testing
[root@study tmp]# ls -ld /tmp/testing
drwxr--r--. 2 dmtsai root 20 6月 3 01:00 /tmp/testing # dmtsai 是具有全部權限的!
# 2\. 再用 dmtsai 的帳號來處理一下 /tmp/testing/testing 這個文件看看:
[dmtsai@study tmp]$ cd /tmp/testing
[dmtsai@study testing]$ ls -l <==確實是可以進入目錄
-rw-------. 1 root root 0 Jun 3 01:00 testing <==文件不是vbird的!
[dmtsai@study testing]$ rm testing <==嘗試殺掉這個文件看看!
rm: remove write-protected regular empty file `testing'? y
# 竟然可以刪除!這樣理解了嗎?!
```
通過上面這個簡單的步驟,你就可以清楚的知道, x 在目錄當中是與“能否進入該目錄”有關, 至于那個 w 則具有相當重要的權限,因為他可以讓使用者刪除、更新、新建文件或目錄, 是個很重要的參數啊!這樣可以理解了嗎?! ^_^!
* 使用者操作功能與權限
剛剛講這樣如果你還是搞不懂~沒關系,我們來處理個特殊的案例!假設兩個文件名,分別是下面這樣:
* /dir1/file1
* /dir2
假設你現在在系統使用 dmtsai 這個帳號,那么這個帳號針對 /dir1, /dir1/file1, /dir2 這三個文件名來說,分別需要“哪些最小的權限”才能達成各項任務? 鳥哥匯整如下,如果你看得懂,恭喜你,如果你看不懂~沒關系~未來再來繼續學!
| 操作動作 | /dir1 | /dir1/file1 | /dir2 | 重點 |
| --- | --- | --- |
| 讀取 file1 內容 | x | r | - | 要能夠進入 /dir1 才能讀到里面的文件數據! |
| 修改 file1 內容 | x | rw | - | 能夠進入 /dir1 且修改 file1 才行! |
| 執行 file1 內容 | x | rx | - | 能夠進入 /dir1 且 file1 能運行才行! |
| 刪除 file1 文件 | wx | - | - | 能夠進入 /dir1 具有目錄修改的權限即可! |
| 將 file1 復制到 /dir2 | x | r | wx | 要能夠讀 file1 且能夠修改 /dir2 內的數據 |
你可能會問,上面的表格當中,很多時候 /dir1 都不必有 r 耶!為啥?我們知道 /dir1 是個目錄,也是個抽屜!那個抽屜的 r 代表“這個抽屜里面有燈光”, 所以你能看到的抽屜內的所有數據夾名稱 (非內容)。但你已經知道里面的數據夾放在哪個地方,那,有沒有燈光有差嘛?你還是可以摸黑拿到該數據夾的!對吧! 因此,上面很多動作中,你只要具有 x 即可!r 是非必備的!只是,沒有 r 的話,使用 [tab] 時,他就無法自動幫你補齊文件名了!這樣理解乎?

**Tips** 看了上面這個表格,你應該會覺得很可怕喔!因為,要讀一個文件時,你得要具有“這個文件所在目錄的 x 權限”才行!所以,通常要開放的目錄, 至少會具備 rx 這兩個權限!現在你知道為啥了吧?
### 5.2.4 Linux文件種類與擴展名
我們在基礎篇一直強調一個概念,那就是:任何設備在Linux下面都是文件, 不僅如此,連數據溝通的接口也有專屬的文件在負責~所以,你會了解到,Linux的文件種類真的很多~ 除了前面提到的一般文件(-)與目錄文件(d)之外,還有哪些種類的文件呢?
* 文件種類:
我們在剛剛提到使用“ls -l”觀察到第一欄那十個字符中,第一個字符為文件的類型。 除了常見的一般文件(-)與目錄文件(d)之外,還有哪些種類的文件類型呢?
* 正規文件(regular file ):
就是一般我們在進行存取的類型的文件,在由 ls -al 所顯示出來的屬性方面,第一個字符為 [ - ],例如 [-rwxrwxrwx ]。另外,依照文件的內容,又大略可以分為:
* 純文本文件(ASCII):這是Linux系統中最多的一種文件類型啰, 稱為純文本文件是因為內容為我們人類可以直接讀到的數據,例如數字、字母等等。 幾乎只要我們可以用來做為設置的文件都屬于這一種文件類型。 舉例來說,你可以下達“ cat ~/.bashrc ”就可以看到該文件的內容。 (cat 是將一個文件內容讀出來的指令)
* 二進制檔(binary):還記得我們在“ [第零章、計算機概論](../Text/index.html) ”里面的[軟件程序的運行](../Text/index.html#program)中提過, 我們的系統其實僅認識且可以執行二進制文件(binary file)吧?沒錯~ 你的Linux當中的可可執行文件(scripts, 文字體批處理文件不算)就是這種格式的啦~ 舉例來說,剛剛下達的指令cat就是一個binary file。
* 數據格式文件(data): 有些程序在運行的過程當中會讀取某些特定格式的文件,那些特定格式的文件可以被稱為數據文件 (data file)。舉例來說,我們的Linux在使用者登陸時,都會將登錄的數據記錄在 /var/log/wtmp那個文件內,該文件是一個data file,他能夠通過last這個指令讀出來! 但是使用cat時,會讀出亂碼~因為他是屬于一種特殊格式的文件。瞭乎?
* 目錄(directory):
就是目錄啰~第一個屬性為 [ d ],例如 [drwxrwxrwx]。
* 鏈接文件(link):
就是類似Windows系統下面的捷徑啦! 第一個屬性為 [ l ](英文L的小寫),例如 [lrwxrwxrwx] ;
* 設備與設備文件(device):
與系統周邊及儲存等相關的一些文件, 通常都集中在/dev這個目錄之下!通常又分為兩種:
* 區塊(block)設備文件 :就是一些儲存數據, 以提供系統隨機存取的周邊設備,舉例來說,硬盤與軟盤等就是啦! 你可以隨機的在硬盤的不同區塊讀寫,這種設備就是區塊設備啰!你可以自行查一下/dev/sda看看, 會發現第一個屬性為[ b ]喔!
* 字符(character)設備文件:亦即是一些序列埠的周邊設備, 例如鍵盤、鼠標等等!這些設備的特色就是“一次性讀取”的,不能夠截斷輸出。 舉例來說,你不可能讓鼠標“跳到”另一個畫面,而是“連續性滑動”到另一個地方啊!第一個屬性為 [ c ]。
* 數據接口文件(sockets):
既然被稱為數據接口文件, 想當然爾,這種類型的文件通常被用在網絡上的數據承接了。我們可以啟動一個程序來監聽用戶端的要求, 而用戶端就可以通過這個socket來進行數據的溝通了。第一個屬性為 [ s ], 最常在/run或/tmp這些個目錄中看到這種文件類型了。
* 數據輸送檔(FIFO, pipe):
FIFO也是一種特殊的文件類型,他主要的目的在解決多個程序同時存取一個文件所造成的錯誤問題。 FIFO是first-in-first-out的縮寫。第一個屬性為[p] 。
除了設備文件是我們系統中很重要的文件,最好不要隨意修改之外(通常他也不會讓你修改的啦!), 另一個比較有趣的文件就是鏈接文件。如果你常常將應用程序捉到桌面來的話,你就應該知道在 Windows下面有所謂的“捷徑”。同樣的,你可以將 linux下的鏈接文件簡單的視為一個文件或目錄的捷徑。 至于socket與FIFO文件比較難理解,因為這兩個咚咚與程序(process)比較有關系, 這個等到未來你了解process之后,再回來查閱吧!此外, 你也可以通過man fifo及man socket來查閱系統上的說明!
* Linux文件擴展名:
基本上,Linux的文件是沒有所謂的“擴展名”的,我們剛剛就談過,一個Linux文件能不能被執行,與他的第一欄的十個屬性有關, 與文件名根本一點關系也沒有。這個觀念跟Windows的情況不相同喔!在Windows下面, 能被執行的文件擴展名通常是 .com .exe .bat等等,而在Linux下面,只要你的權限當中具有x的話,例如[ -rwxr-xr-x ] 即代表這個文件具有可以被執行的能力喔!

**Tips** 具有“可執行的權限”以及“具有可執行的程序碼”是兩回事!在 Linux 下面,你可以讓一個文本文件,例如我們之前寫的 text.txt 具有“可執行的權限” (加入 x 權限即可), 但是這個文件明顯的無法執行,因為他不具備可執行的程序碼!而如果你將上面提到的 cat 這個可以執行的指令,將他的 x 拿掉,那么 cat 將無法被你執行!
不過,可以被執行跟可以執行成功是不一樣的~舉例來說,在root主文件夾下的 initial-setup-ks.cfg 是一個純文本文件,如果經由修改權限成為 -rwxrwxrwx 后,這個文件能夠真的執行成功嗎? 當然不行~因為他的內容根本就沒有可以執行的數據。所以說,這個x代表這個文件具有可執行的能力, 但是能不能執行成功,當然就得要看該文件的內容啰~
雖然如此,不過我們仍然希望可以借由擴展名來了解該文件是什么東西,所以, 通常我們還是會以適當的擴展名來表示該文件是什么種類的。下面有數種常用的擴展名:
* *.sh : 腳本或批處理文件 (scripts),因為批處理文件為使用shell寫成的,所以擴展名就編成 .sh 啰;
* *Z, *.tar, *.tar.gz, *.zip, *.tgz: 經過打包的壓縮文件。這是因為壓縮軟件分別為 gunzip, tar 等等的,由于不同的壓縮軟件,而取其相關的擴展名啰!
* *.html, *.php:網頁相關文件,分別代表 HTML 語法與 PHP 語法的網頁文件啰! .html 的文件可使用網頁瀏覽器來直接打開,至于 .php 的文件, 則可以通過 client 端的瀏覽器來 server 端瀏覽,以得到運算后的網頁結果呢!
基本上,Linux系統上的文件名真的只是讓你了解該文件可能的用途而已, 真正的執行與否仍然需要權限的規范才行!例如雖然有一個文件為可可執行文件, 如常見的/bin/ls這個顯示文件屬性的指令,不過,如果這個文件的權限被修改成無法執行時, 那么ls就變成不能執行啰!
上述的這種問題最常發生在文件傳送的過程中。例如你在網絡上下載一個可可執行文件,但是偏偏在你的 Linux系統中就是無法執行!呵呵!那么就是可能文件的屬性被改變了!不要懷疑,從網絡上傳送到你的 Linux系統中,文件的屬性與權限確實是會被改變的喔!
* Linux文件長度限制[[1]](#ps1):
在Linux下面,使用傳統的Ext2/Ext3/Ext4文件系統以及近來被 CentOS 7 當作默認文件系統的 xfs 而言,針對文件的文件名長度限制為:
* 單一文件或目錄的最大容許文件名為 255Bytes,以一個 ASCII 英文占用一個 Bytes 來說,則大約可達 255 個字符長度。若是以每個中文字占用 2Bytes 來說, 最大文件名就是大約在 128 個中文字之譜!
是相當長的文件名喔!我們希望Linux的文件名稱可以一看就知道該文件在干嘛的, 所以文件名通常是很長很長!而用慣了Windows的人可能會受不了,因為文件名稱通常真的都很長, 對于用慣Windows而導致打字速度不快的朋友來說,嗯!真的是很困擾.....不過,只得勸你好好的加強打字的訓練啰!
* Linux文件名稱的限制:
由于Linux在命令行下的一些指令操作關系,一般來說,你在設置Linux下面的文件名稱時, 最好可以避免一些特殊字符比較好!例如下面這些:
> * ? > < ; & ! [ ] | \ ' " ` ( ) { }
因為這些符號在命令行下,是有特殊意義的!另外,文件名稱的開頭為小數點“.”時, 代表這個文件為“隱藏文件”喔!同時,由于指令下達當中,常常會使用到 -option 之類的選項, 所以你最好也避免將文件文件名的開頭以 - 或 + 來命名啊!
- 鳥哥的Linux私房菜:基礎學習篇 第四版
- 目錄及概述
- 第零章、計算機概論
- 0.1 電腦:輔助人腦的好工具
- 0.2 個人電腦架構與相關設備元件
- 0.3 數據表示方式
- 0.4 軟件程序運行
- 0.5 重點回顧
- 0.6 本章習題
- 0.7 參考資料與延伸閱讀
- 第一章、Linux是什么與如何學習
- 1.1 Linux是什么
- 1.2 Torvalds的Linux發展
- 1.3 Linux當前應用的角色
- 1.4 Linux 該如何學習
- 1.5 重點回顧
- 1.6 本章習題
- 1.7 參考資料與延伸閱讀
- 第二章、主機規劃與磁盤分區
- 2.1 Linux與硬件的搭配
- 2.2 磁盤分區
- 2.3 安裝Linux前的規劃
- 2.4 重點回顧
- 2.5 本章習題
- 2.6 參考資料與延伸閱讀
- 第三章、安裝 CentOS7.x
- 3.1 本練習機的規劃--尤其是分區參數
- 3.2 開始安裝CentOS 7
- 3.3 多重開機安裝流程與管理(Option)
- 3.4 重點回顧
- 3.5 本章習題
- 3.6 參考資料與延伸閱讀
- 第四章、首次登陸與線上求助
- 4.1 首次登陸系統
- 4.2 文字模式下指令的下達
- 4.3 Linux系統的線上求助man page與info page
- 4.4 超簡單文書編輯器: nano
- 4.5 正確的關機方法
- 4.6 重點回顧
- 4.7 本章習題
- 4.8 參考資料與延伸閱讀
- 第五章、Linux 的文件權限與目錄配置
- 5.1 使用者與群組
- 5.2 Linux 文件權限概念
- 5.3 Linux目錄配置
- 5.4 重點回顧
- 5.5 本章練習
- 5.6 參考資料與延伸閱讀
- 第六章、Linux 文件與目錄管理
- 6.1 目錄與路徑
- 6.2 文件與目錄管理
- 6.3 文件內容查閱
- 6.4 文件與目錄的默認權限與隱藏權限
- 6.5 指令與文件的搜尋
- 6.6 極重要的復習!權限與指令間的關系
- 6.7 重點回顧
- 6.8 本章習題:
- 6.9 參考資料與延伸閱讀
- 第七章、Linux 磁盤與文件系統管理
- 7.1 認識 Linux 文件系統
- 7.2 文件系統的簡單操作
- 7.3 磁盤的分區、格式化、檢驗與掛載
- 7.4 設置開機掛載
- 7.5 內存交換空間(swap)之創建
- 7.6 文件系統的特殊觀察與操作
- 7.7 重點回顧
- 7.8 本章習題 - 第一題一定要做
- 7.9 參考資料與延伸閱讀
- 第八章、文件與文件系統的壓縮,打包與備份
- 8.1 壓縮文件的用途與技術
- 8.2 Linux 系統常見的壓縮指令
- 8.3 打包指令: tar
- 8.4 XFS 文件系統的備份與還原
- 8.5 光盤寫入工具
- 8.6 其他常見的壓縮與備份工具
- 8.7 重點回顧
- 8.8 本章習題
- 8.9 參考資料與延伸閱讀
- 第九章、vim 程序編輯器
- 9.1 vi 與 vim
- 9.2 vi 的使用
- 9.3 vim 的額外功能
- 9.4 其他 vim 使用注意事項
- 9.5 重點回顧
- 9.6 本章練習
- 9.7 參考資料與延伸閱讀
- 第十章、認識與學習BASH
- 10.1 認識 BASH 這個 Shell
- 10.2 Shell 的變量功能
- 10.3 命令別名與歷史命令
- 10.4 Bash Shell 的操作環境:
- 10.5 數據流重導向
- 10.6 管線命令 (pipe)
- 10.7 重點回顧
- 10.8 本章習題
- 10.9 參考資料與延伸閱讀
- 第十一章、正則表達式與文件格式化處理
- 11.1 開始之前:什么是正則表達式
- 11.2 基礎正則表達式
- 11.3 延伸正則表達式
- 11.4 文件的格式化與相關處理
- 11.5 重點回顧
- 11.6 本章習題
- 11.7 參考資料與延伸閱讀
- 第十二章、學習 Shell Scripts
- 12.1 什么是 Shell scripts
- 12.2 簡單的 shell script 練習
- 12.3 善用判斷式
- 12.4 條件判斷式
- 12.5 循環 (loop)
- 12.6 shell script 的追蹤與 debug
- 12.7 重點回顧
- 12.8 本章習題
- 第十三章、Linux 帳號管理與 ACL 權限設置
- 13.1 Linux 的帳號與群組
- 13.2 帳號管理
- 13.3 主機的細部權限規劃:ACL 的使用
- 13.4 使用者身份切換
- 13.5 使用者的特殊 shell 與 PAM 模塊
- 13.6 Linux 主機上的使用者訊息傳遞
- 13.7 CentOS 7 環境下大量創建帳號的方法
- 13.8 重點回顧
- 13.9 本章習題
- 13.10 參考資料與延伸閱讀
- 第十四章、磁盤配額(Quota)與進階文件系統管理
- 14.1 磁盤配額 (Quota) 的應用與實作
- 14.2 軟件磁盤陣列 (Software RAID)
- 14.3 邏輯卷軸管理員 (Logical Volume Manager)
- 14.4 重點回顧
- 14.5 本章習題
- 14.6 參考資料與延伸閱讀
- 第十五章、例行性工作調度(crontab)
- 15.1 什么是例行性工作調度
- 15.2 僅執行一次的工作調度
- 15.3 循環執行的例行性工作調度
- 15.4 可喚醒停機期間的工作任務
- 15.5 重點回顧
- 15.6 本章習題
- 第十六章、程序管理與 SELinux 初探
- 16.1 什么是程序 (process)
- 16.2 工作管理 (job control)
- 16.3 程序管理
- 16.4 特殊文件與程序
- 16.5 SELinux 初探
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考資料與延伸閱讀
- 第十七章、認識系統服務 (daemons)
- 17.1 什么是 daemon 與服務 (service)
- 17.2 通過 systemctl 管理服務
- 17.3 systemctl 針對 service 類型的配置文件
- 17.4 systemctl 針對 timer 的配置文件
- 17.5 CentOS 7.x 默認啟動的服務簡易說明
- 17.6 重點回顧
- 17.7 本章習題
- 17.8 參考資料與延伸閱讀
- 第十八章、認識與分析登錄文件
- 18.1 什么是登錄文件
- 18.2 rsyslog.service :記錄登錄文件的服務
- 18.3 登錄文件的輪替(logrotate)
- 18.4 systemd-journald.service 簡介
- 18.5 分析登錄文件
- 18.6 重點回顧
- 18.7 本章習題
- 18.8 參考資料與延伸閱讀
- 第十九章、開機流程、模塊管理與 Loader
- 19.1 Linux 的開機流程分析
- 19.2 核心與核心模塊
- 19.3 Boot Loader: Grub2
- 19.4 開機過程的問題解決
- 19.5 重點回顧
- 19.6 本章習題
- 19.7 參考資料與延伸閱讀
- 第二十章、基礎系統設置與備份策略
- 20.1 系統基本設置
- 20.2 服務器硬件數據的收集
- 20.3 備份要點
- 20.4 備份的種類、頻率與工具的選擇
- 20.5 鳥哥的備份策略
- 20.6 災難復原的考慮
- 20.7 重點回顧
- 20.8 本章習題
- 20.9 參考資料與延伸閱讀
- 第二十一章、軟件安裝:源代碼與 Tarball
- 20.1 開放源碼的軟件安裝與升級簡介
- 21.2 使用傳統程序語言進行編譯的簡單范例
- 21.3 用 make 進行宏編譯
- 21.4 Tarball 的管理與建議
- 21.5 函數庫管理
- 21.6 檢驗軟件正確性
- 21.7 重點回顧
- 21.8 本章習題
- 21.9 參考資料與延伸閱讀
- 第二十二章、軟件安裝 RPM, SRPM 與 YUM
- 22.1 軟件管理員簡介
- 22.2 RPM 軟件管理程序: rpm
- 22.3 YUM 線上升級機制
- 22.4 SRPM 的使用 : rpmbuild (Optional)
- 22.5 重點回顧
- 22.6 本章習題
- 22.7 參考資料與延伸閱讀
- 第二十三章、X Window 設置介紹
- 23.1 什么是 X Window System
- 23.2 X Server 配置文件解析與設置
- 23.3 顯卡驅動程序安裝范例
- 23.4 重點回顧
- 23.5 本章習題
- 23.6 參考資料與延伸閱讀
- 第二十四章、Linux 核心編譯與管理
- 24.1 編譯前的任務:認識核心與取得核心源代碼
- 24.2 核心編譯的前處理與核心功能選擇
- 24.3 核心的編譯與安裝
- 24.4 額外(單一)核心模塊編譯
- 24.5 以最新核心版本編譯 CentOS 7.x 的核心
- 24.6 重點回顧
- 24.7 本章習題
- 24.8 參考資料與延伸閱讀