1、目錄與檔案
首先我們要明白,對于檔案和目錄的權限是不同 的,同樣是x權限,放在目錄和檔案上的意思不同。在這裡楊老師給了一個最簡單的了解,x可以了解問windows下的輕按兩下事件,對檔案來說,可以執行;對目錄來說,你可以進入這個目錄。
執行ls -l 之後,不論是檔案或者目錄都會列出如下屬性:
[root@localhost root]#ls -l
total 5921
-rw-r--r-- 1 root root 1581 11月 24 18:14 anaconda-ks.cfg
drwxr-xr-x 2 root root 208 12月 1 13:50 babylinux
-rw-r--r-- 1 root root 1474560 11月 25 15:02 babylinux.img
-rw-r--r-- 1 root root 26829 11月 25 15:10 babylinux.png
lrwxrwxrwx 1 root root 9 1月 4 11:06 disk1.link.png -> disk1.png
下面分别解釋其意思:
可以看到累加第5個字段得到的值和total顯示的是一樣的(因為具體算法的不同,略微有差别).得到的數值實際上是root目錄的大小(把root目錄看成是一個特殊的檔案,就可以了解什麼是目錄的大小).而用du得到的數值是root目錄下所由檔案和子目錄下全部檔案的大小的總合.
第1字段: 檔案屬性字段
當為[ d ]則是目錄
當為[ - ]則是檔案
若是[ l ]則表示為連結檔案(link file);
若是[ b ]則表示為裝置檔案裡面的可供儲存的接口裝置;
若是[ c ]則表示為裝置檔案裡面的串行端口裝置,例如鍵盤、滑鼠。
接下來的屬性中,三個為一組,且均為『rwx』 的三個參數的組合。其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(excute):
第一組為『擁有人的權限』,以第 5 行為例,該檔案的擁有人可以讀寫,但不可執行;
第二組為『同群組的權限』;
第三組為『其它非本群組的權限』。
範例:若有一個檔案的屬性為『-rwxr-xr--』,簡單的可由下面說明之:
[-][rwx][r-x][r--]
1 234 567 890
1 為:代表這個檔案名為目錄或檔案(上面為檔案)
234為:擁有人的權限(上面為可讀、可寫、可執行)
567為:同群組使用者權限(上面為可讀可執行)
890為:其它使用者權限(上面為僅可讀)
上面的屬性情況代表一個檔案、這個檔案的擁有人可讀可寫可執行、但同群組的人僅可讀與執行, 非同群組的使用者僅可讀的意思!
第2字段 :檔案硬連結數或目錄子目錄數
第3字段: 檔案擁有者
該字段表示這個檔案是屬于哪個使用者的.UNIX類系統都是多使用者系統,每個檔案都有它的擁有者.隻有檔案的擁有者才具有改動檔案屬性的權利.當然, root使用者具有改動任何檔案屬性的權利.對于一個目錄來說,隻有擁有該目錄的使用者,或者具有寫權限的使用者才有在目錄下建立檔案的權利.
如果某一個使用者因為某種原因,被删除,而該使用者的檔案還存在,那麼用ls -l 檢視該檔案将顯示一個代表使用者存在前ID号的數字.
以下是示範:
先建立一個使用者并用su過去:
[root@localhost root]# useradd liu -g users
[root@localhost root]# su - liu
用建立的使用者建立一個測試檔案:
[liu@localhost home]$ touch testfile
[liu@localhost home]$ls -l testfile
-rw-r--r-- 1 liu users 0 1月 4 16:31 testfile
最後用ls -l 看到第三字段的檔案擁有者為liu
然後我将liu使用者删除:
[root@localhost root]# userdel liu
[root@localhost root]# cd /home/liu/
[root@localhost liu]# ls -l
總用量 0
-rw-r--r-- 1 501 users 0 1月 4 16:31 testfile
可以看到,第三字段成了一個數字,這個數字是原liu使用者的ID号.因為檔案系統對每個檔案記錄檔案所有者的ID,而非使用者名.
第4字段: 檔案擁有者所在的組
組的概念可以想像成是一個共同完成一個項目的團隊.通過組的概念,可以控制檔案讓特定的使用者檢視,修改或運作.而不是一棍子打死,要麼全不讓看,要麼全讓看.
2、修改檔案的權限:
chgrp: 改變檔案所屬群組。
如将liu組的改為自己一個新鍵組的;“chgrp 建立組名 目前目錄檔案名” -R參數别忘了哈。
chown : 改變檔案所屬人。
恩恩,這個改變的時候也可以改變所屬的群組,句法 :chown [-R] 賬号名稱 檔案或目錄名;
chown [-R] 賬号名稱: 群組名稱 檔案或者目錄名
舉例: chown liu2 4 ——4檔案的擁有者改為liu2.。。 chown liu2:9876 4——把檔案4擁有者改為liu2,順便把群組改為9876的群組。
chmod:改變檔案的屬性、suid、等等的特性;
這個比較好玩,分為數字類型和符号類型,具體操作很簡單,不寫了。書山說的太清楚了。
對于一個目錄來說,擁有r權限,你就可以通過ls指令把其目錄或者檔案列出來。
如果擁有w權限,你可以做如下事情:a 建立新的檔案與目錄 b删除已經存在的檔案與目錄,即使你現在是liu使用者,但是那個目錄或者檔案的擁有者是root也可以照删不誤。c将已經存在的檔案或者目錄進行更名。 d搬移該目錄内的檔案或者目錄的位置。
3、檔案的讀取與存儲
linux中是怎麼讀取檔案的呢?我們知道,每個檔案不隻有檔案的内容,還包括檔案的種種屬性,所屬群組,擁有者,能否執行,檔案建立時間,是以linux中的檔案時分成兩部分來存儲的,一部分是檔案的屬性,另一部分是檔案的内容。屬性放在inode中,内容放在block area中,那麼,當具體讀取一個檔案的時候在是怎麼讀取的呢?以讀取/etc/crontab這個檔案為例說明:作業系統根據目錄 / 的相關資料可取的 /etc 這個目錄底下的所有檔案的所有關聯資料是放在哪一個block塊的(估計可以了解為:這個塊是一個inode的集合目錄)前往該塊讀取檔案關聯性的内容(級實際要讀取檔案的inode塊的序列号) 然後前往該inode,讀取該inode的所有屬性,并且可以根據inode的指向功能區通路對應的block area。。
我們看圖來形象的說明讀取一個檔案的過程:
這樣從目錄找到對應的檔案名(注意,目錄裡隻有檔案名和inode号,不會存資料)然後找到inode表,右圖表示了inode表中的内容。根據inode表資料塊