1.使用者與群組以及其他人的概念
假設有一家人,家裡隻有三兄弟,分别是王大毛、王二毛與王三毛三個人, 而這個家庭是登記在王大毛的名下的!是以,『王大毛家有三個人,分别是王大毛、王二毛與王三毛』, 而且這三個人都有自己的房間,并且共同擁有一個客廳!
使用者的意義:由于王家三人各自擁有自己的房間,是以, 王二毛雖然可以進入王三毛的房間,但是二毛不能翻三毛的抽屜! 因為抽屜裡面面可能有三毛自己私人的東西,例如日記等等的,這是『私人的空間』,是以當然不能讓二毛拿!
群組的概念:由于共同擁有客廳,是以王家三兄弟可以在客廳打開電視機、坐在沙發上面發呆等等的!反正,隻要是在客廳的東西,三兄弟都可以使用!
今天又有個人,叫做小花,他是小花家的人,與王家沒有關系! 這個時候,除非王家認識小花,然後開門讓小花進來王家,否則小花永遠沒有辦法進入王家, 更不要說進到王三毛的房間!小花就是所謂的『其他人,Others』
2.Linux 使用者身份與群組記錄的檔案
在Linux系統當中,預設的情況下,所有的系統上的帳号與一般身份使用者,還有root的相關資訊, 都是記錄在/etc/passwd這個檔案内的。至于個人的密碼則是記錄在/etc/shadow這個檔案下。 此外,Linux所有的群組名稱都紀錄在/etc/group内!這三個檔案可以說是Linux系統裡面帳号、密碼、群組資訊的集中地! 不要随便删除這三個檔案!
3. Linux檔案屬性
『ls 』這一個察看檔案的指令!首先以普通使用者的身份登入系統,然後使用 su - 切換身份成為root後, 下達『 ls -al 』指令
[[email protected] ~]$ su - # 先來切換一下身份看看
Password:
[[email protected] ~]# 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 ]
[ 權限 ][連結][擁有者][群組][檔案容量][ 修改日期 ] [ 檔名 ]
ls是『list』的意思,重點在顯示檔案的檔名與相關屬性。而選項『-al』則表示列出所有的檔案詳細的權限與屬性 (包含隐藏檔,就是檔名第一個字元為『 . 』的檔案)。
</pre><pre name="code" class="plain">-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg <=範例說明處
[ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ] [ 7 ]
[ 權限 ][連結][擁有者][群組][檔案容量][ 修改日期 ] [ 檔名 ]
1. -rw-r--r-- :代表這個檔案的類型與權限
-
- 第一個字元代表這個檔案是『目錄、檔案或連結檔等等』:
- 當為[ d ]則是目錄,例如上表檔名為『.config』的那一行;
- 當為[ - ]則是檔案,例如上表檔名為『initial-setup-ks.cfg』那一行;
- 若是[ l ]則表示為連結檔(link file);
- 若是[ b ]則表示為裝置檔裡面的可供儲存的周邊裝置(可随機存取裝置);
- 若是[ c ]則表示為裝置檔裡面的序列埠裝置,例如鍵盤、滑鼠(一次性讀取裝置)。
- 接下來的字元中,以三個為一組,且均為『rwx』 的三個參數的組合。其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。 要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減号[ - ]而已。
- 第一組為『檔案擁有者可具備的權限』,以『initial-setup-ks.cfg』那個檔案為例, 該檔案的擁有者可以讀寫,但不可執行;
- 第二組為『加入此群組之帳号的權限』;
- 第三組為『非本人且沒有加入本群組之其他帳号的權限』。
- 第一個字元代表這個檔案是『目錄、檔案或連結檔等等』:
2. 1 :表示有多少檔名連結到此節點(i-node)
每個檔案都會将他的權限與屬性記錄到檔案系統的i-node中,不過,我們使用的目錄樹卻是使用檔名來記錄, 是以每個檔名就會連結到一個i-node!這個屬性記錄的,就是有多少不同的檔名連結到相同的一個i-node号碼
3. root :表示這個檔案(或目錄)的『擁有者帳号』
4. root :表示這個檔案的所屬群組
5. 1864 :這個檔案的容量大小,預設機關為bytes
6. May 4 18:01 :這個檔案的建檔日期或者是最近的修改日期
如果想要顯示完整的時間格式,可以利用ls的選項,亦即:『ls -l --full-time』就能夠顯示出完整的時間格式了!包括年、月、日、時間喔。 另外,如果是以繁體中文安裝你的Linux系統,那麽日期欄位将會以中文來顯示。 可惜的是,中文并沒有辦法在純文字的終端機模式中正确的顯示,是以此欄會變成亂碼。 那得要使用『export LC_ALL=en_US.utf8』來修改語系喔!如果想要讓系統預設的語系變成英文的話,那麽你可以修改系統設定檔『/etc/locale.conf』7. initial-setup-ks.cfg :為這個檔案的檔名,如果檔名之前多一個『 . 』,則代表這個檔案為『隐藏檔』
4.改變檔案屬性與權限
- chgrp :改變檔案所屬群組
- chown :改變檔案擁有者
- chmod :改變檔案的權限, SUID, SGID, SBIT等等的特性
改變所屬群組, chgrp 要被改變的群組名稱必須要在/etc/group檔案記憶體在才行,否則就會顯示錯誤!連目錄下的所有次目錄或檔案同時更改檔案群組的話,直接加上 -R 的選項即可
[[email protected] ~]# chgrp [-R] dirname/filename ...
改變檔案擁有者, chown
使用者必須是已經存在系統中的帳号,也就是在/etc/passwd 這個檔案中有紀錄的使用者名稱才能改變。連目錄下的所有次目錄或檔案同時更改檔案擁有者的話,直接加上 -R 的選項即可
[[email protected] ~]# chown [-R] 帳号名稱 檔案或目錄
[[email protected] ~]# chown [-R] 帳号名稱:群組名稱 檔案或目錄
注:chown也可以使用『chown user.group file』 ,亦即在擁有者與群組間加上小數點『 . 』 也行! 不過設定帳号時,在帳号當中加入小數點這就會造成系統的誤判了! 是以建議使用冒号『:』 來隔開擁有者與群組啦!此外,chown也能單純的修改所屬群組呢! 例如『chown .sshd initial-setup-ks.cfg』 就是修改群組,那就是那個小數點的用途
改變權限, 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的文法是這樣的:
在實際的系統運作中最常發生的一個問題就是,以vim編輯一個shell的文字批次檔後,文檔的權限通常是 -rw-rw-r-- 也就是664, 如果要将該檔案變成可執行檔,并且不要讓其他人修改此一檔案的話, 那麼就需要-rwxr-xr-x這樣的權限,此時就得要下達:『 chmod 755 test.sh 』的指令[[email protected] ~]# chmod [-R] xyz 檔案或目錄 選項與參數: xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。 -R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有檔案都會變更
- 符号類型改變檔案權限
改變權限的方法,基本上就九個權限分别是(1)user (2)group (3)others三種身份!那麼我們就可以使用u, g, o來代表三種身份的權限!此外, a 則代表 all 亦即全部的身份!那麽讀寫的權限就可以寫成r, w, x!
chmod | u g o a | +(加入) -(除去) =(設定) | r w x | 檔案或者目錄 |
[[email protected] ~]# chmod u=rwx,go=rx .bashrc
# 注意!那個 u=rwx,go=rx 是連在一起的,中間并沒有任何空白字元!
5.權限對檔案的重要性
檔案是實際含有資料的地方,包括一般文字檔、資料庫内容檔、二進位可執行檔(binary program)等等。 是以,權限對于檔案來說,他的意義是這樣的:
- r (read):可讀取此一檔案的實際内容,如讀取文字檔的文字内容等;
- w (write):可以編輯、新增或者是修改該檔案的内容(但不含删除該檔案);
- x (eXecute):該檔案具有可以被系統執行的權限。
在Linux底下,檔案是否能被執行,是藉由是否具有『x』這個權限來決定的!跟檔名是沒有絕對的關系的 6.權限對目錄的重要性
r (read contents in directory):
表示具有讀取目錄結構清單的權限,是以當你具有讀取(r)一個目錄的權限時,表示可以查詢該目錄下的檔名資料。 是以可以利用 ls 這個指令将該目錄的内容清單顯示出來!
w (modify contents of directory):
這個可寫入的權限對目錄來說,是很了不起的! 因為他表示具有異動該目錄結構清單的權限,也就是底下這些權限:
- 建立新的檔案與目錄;
- 删除已經存在的檔案與目錄(不論該檔案的權限為何!)
- 将已存在的檔案或目錄進行更名;
- 搬移該目錄内的檔案、目錄位置。
x (access directory):
目錄的x代表的是使用者能否進入該目錄成為工作目錄的用途! 所謂的工作目錄(work directory)就是你目前所在的目錄!舉例來說,當登入Linux時, 你所在的家目錄就是你當下的工作目錄。而變換目錄的指令是『cd』(change directory)!
現在假設『檔案是一堆檔案資料夾』,是以可以在上面寫/改一些資料。而『目錄是一堆抽屜』,是以可以将資料夾分類放置到不同的抽屜去。 是以抽屜最大的目的是拿出/放入資料夾.其實,這個 x 權限設計,就相當于『該目錄,也就是該抽屜的 "鑰匙" 』,沒有鑰匙打不開抽屜 注意:
- 要開放目錄給任何人浏覽時,應該至少也要給予r及x的權限,但w權限不可随便給w 則具有相當重要的權限,因為他可以讓使用者刪除、更新、建立檔案或目錄
- 如果該目錄屬于使用者本身,即使目錄下的文檔對使用者沒有wx權限,但是使用者在這個目錄底下還是能夠删除檔案的。這就相當于有個莫名其妙的人,拿著一個完全密封的資料夾放到你的辦公室抽屜中,因為完全密封你也打不開、看不到這個資料夾的内部資料(對檔案來說,你沒有權限)。 但是因為這個資料夾是放在你的抽屜中,你當然可以拿出/放入任何資料在這個抽屜中(對目錄來說,你具有所有權限)。 是以,情況就是:你打開抽屜、拿出這個沒辦法看到的資料夾、将他丢到走廊上的垃圾桶,順利删除!
7.使用者操作功能與權限
- /dir1/file1
- /dir2
現在在系統使用普通使用者xiaohui這個帳号,那麽這個帳号針對 /dir1, /dir1/file1, /dir2 這三個檔名來說,分别需要『哪些最小的權限』才能達成各項任務?
操作動作 | /dir | /dir1/file1 | dir2 | 重點 |
讀取 file1 内容 | x | r | - | 要能夠進入 /dir1 才能讀到裡面的檔案資料! |
修改file内容 | x | wx | - | 能夠進入 /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] 時,系統就無法自動幫你補齊檔名了!