天天看點

linux 基礎學習之一:檔案管理

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。。

我們看圖來形象的說明讀取一個檔案的過程:

linux 基礎學習之一:檔案管理
linux 基礎學習之一:檔案管理

這樣從目錄找到對應的檔案名(注意,目錄裡隻有檔案名和inode号,不會存資料)然後找到inode表,右圖表示了inode表中的内容。根據inode表資料塊

繼續閱讀