Linux檔案與目錄的三種時間狀態(mtime,atime,ctime)區別
阿新 • • 發佈:2019-02-02
Linux檔案與目錄的三種時間狀態
1.mtime(modify time):最後一次修改檔案或目錄的時間
2.ctime(change time) :最後一次改變檔案或目錄(改變的是原資料即:屬性)的時間
如:記錄該檔案的inode節點被修改的時間。touch命令除了-d和-t選項外都會改變該時間。而且chmod,chown等命令也能改變該值。
3.atime(access time)::最後一次訪問檔案或目錄的時間
對於檔案:
當修改mtime時,ctime必須隨著改變.因為檔案大小等都是屬性;
有人說說atime也一定會改變,要想修改檔案必須先訪問;其實是不對的 ,不必訪問檔案就能修改其內容:
如:#echo “This is a test !” >> /etc/issue,
issue檔案內容會變,但並沒有訪問檔案,所以atime並沒有改變.
對於目錄:
訪問一個目錄其atime改變,mtime ,ctime不變;
修改一個目錄:在一個目錄下touch一個檔案,mtime與ctime會改變,atime不一定會變;
如:[[email protected] ~]# stat /tmp
file: `/tmp'
size: 135168 Blocks: 280 IO Block: 4096 directory
fevice: fd00h/64768d Inode: 2555905 Links: 8
access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)
access: 2010-07-09 09:15:59.000000000 +0800
modify: 2010-07-09 09:15:57.000000000 +0800
change: 2010-07-09 09:15:57.000000000 +0800
[ [email protected] ~]# cd /tmp
[[email protected] tmp]# touch text.txt
[[email protected] tmp]# cd
[[email protected] ~]# !s
stat /tmp
file: `/tmp'
size: 135168 Blocks: 280 IO Block: 4096 directory
device: fd00h/64768d Inode: 2555905 Links: 8
access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)
access: 2010-07-09 09:15:59.000000000 +0800
modify: 2010-07-09 09:31:39.000000000 +0800
change: 2010-07-09 09:31:39.000000000 +0800
[ [email protected] ~]#
atime改變,mtime ,ctime不變情況:
[[email protected] ~]# stat /tmp
File: `/tmp'
Size: 135168 Blocks: 280 IO Block: 4096 directory
device: fd00h/64768d Inode: 2555905 Links: 8
access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)
access: 2010-07-09 09:15:59.000000000 +0800
modify: 2010-07-09 09:31:39.000000000 +0800
change: 2010-07-09 09:31:39.000000000 +0800
[[email protected] ~]# cd /tmp
[[email protected] tmp]# ls
aa text text.txt
[[email protected] tmp]# cd
[[email protected] ~]# !s
stat /tmp
file: `/tmp'
size: 135168 Blocks: 280 IO Block: 4096 directory
device: fd00h/64768d Inode: 2555905 Links: 8
access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)
access: 2010-07-09 09:35:49.000000000 +0800
modify: 2010-07-09 09:31:39.000000000 +0800
change: 2010-07-09 09:31:39.000000000 +0800
[[email protected] ~]#
使用stat命令可以檢視三時間值:如 stat
filename
也可使用:
MM表示月
DD表示日
hh表示小時
mm表示分鐘
ss表示秒
201001311200.34
CCYYMMDDhhmm ss
表示時間為2010年1月31日12點0分34秒 options : -t: 後面可接時間,其格式如上所述 -a:僅修改access time -c:僅修改ctime時間,而不建立檔案 -m:僅修改mtime 例如:將issue檔案日期改為2008/07/15 13:13 [[email protected] ~]# ls -l /etc/issue -rw-r--r-- 1 root root 80 Jul 8 09:03 /etc/issue [[email protected] ~]# touch -t 0807151313 /etc/issue [[email protected] ~]# !l ls -l /etc/issue -rw-r--r-- 1 root root 80 Jul 15 2008 /etc/issue [[email protected] ~]# stat /etc/issue File: `/etc/issue' Size: 80 Blocks: 16 IO Block: 4096 regular file Device: fd00h/64768d Inode: 3014852 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2008-07-15 13:13:00.000000000 +0800 Modify: 2008-07-15 13:13:00.000000000 +0800 Change: 2010-07-09 09:51:46.000000000 +0800 注意到,我們改變了issue的mtime與atime,並沒有改變ctime,此時的ctime記錄的是當前時間。
Linux 檔案或目錄的屬性主要包括:檔案或目錄的節點、種類、許可權模式、連結數量、所歸屬的使用者和使用者組、最近訪問或修改的時間等內容;
[[email protected] ~]# ls -lih
總計 104K
2408Array4Array -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh
2408830 drwxr-xr-x 2 root root 4.0K 04-21 12:46 mkuml-2004.07.17
2408260 drwxr-xr-x 2 root root 4.0K 04-21 22:15 mydir
2408258 lrwxrwxrwx 1 root root 7 04-21 22:16 sun001.txt -> sun.txt
2408263 -rw-r--r-- 2 root root 11 04-20 14:17 sun002.txt
2408263 -rw-r--r-- 2 root root 11 04-20 14:17 sun.txt
解釋:
第一欄位:inode
第二欄位:檔案種類和許可權;
第三欄位: 硬連結個數;
第四欄位: 屬主;
第五欄位:所歸屬的組;
第六欄位:檔案或目錄的大小;
第七欄位和第八欄位:最後訪問或修改時間;
第九欄位:檔名或目錄名
我們以lsfile.sh為例:
2408Array4Array -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh
inode 的值是:2408Array4Array
檔案型別:檔案型別是-,表示這是一個普通檔案; 關於檔案的型別,請參考:《Linux 檔案型別和檔案擴充套件》
檔案許可權:檔案許可權是rwxr-xr-x ,表示檔案屬主可讀、可寫、可執行,檔案所歸屬的使用者組可讀可執行,其它使用者可讀可執
行;
硬連結個數: lsfile.sh這個檔案沒有硬連結;因為數值是1,就是他本身;
檔案屬主:也就是這個檔案歸哪於哪個使用者 ,它歸於root,也就是第一個root;
檔案屬組:也就是說,對於這個檔案,它歸屬於哪個使用者組,在這裡是root使用者組;
檔案大小:檔案大小是7個位元組;
訪問可修改時間 :這裡的時間是最後訪問的時間,最後訪問和檔案被修改或建立的時間,有時並不是一致的;
當然文件的屬性不僅僅包括這些,這些是我們最常用的一些屬性。我們把比較重要的說一說,比如檔案所歸屬的種類、許可權、
硬連結個數 ... ...
2、 關於inode;
inode 譯成中文就是索引節點。每個儲存裝置或儲存裝置的分割槽(儲存裝置是硬碟、軟盤、U盤 ... ... )被格式化為檔案系統後,應該有兩部份,一部份是inode,另一部份是Block,Block是用來儲存資料用的。而inode呢,就是用來儲存這些資料的資訊,這些資訊包括檔案大小、屬主、歸屬的使用者組、讀寫許可權等。inode為每個檔案進行資訊索引,所以就有了inode的數值。作業系統根據指令,能通過inode值最快的找到相對應的檔案。
做個比喻,比如一本書,儲存裝置或分割槽就相當於這本書,Block相當於書中的每一頁,inode 就相當於這本書前面的目錄,一本書有很多的內容,如果想查詢某部份的內容,我們可以先查目錄,通過目錄能最快的找到我們想要看的內容。雖然不太恰當,但還是比較形象。
當我們用ls 檢視某個目錄或檔案時,如果加上-i 引數,就可以看到inode節點了;比如我們前面所說的例子;
[[email protected] ~]# ls -li lsfile.sh
2408Array4Array -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh
lsfile.sh 的inode值是 2408Array4Array ; 檢視一個檔案或目錄的inode,要通過ls 命令的的 -i引數。
2.10 inode 相同的檔案是硬連結檔案;
在Linux 檔案系統中,inode值相同的檔案是硬連結檔案,也就是說,不同的檔名,inode可能是相同的,一個inode值可以對應多個檔案。理解連結檔案並不難,看看例子就會了。在Linux中,連結檔案是通過ln工具來建立的。
2.11 建立硬連結,硬連結和原始檔關係;
用ln 建立檔案硬連結的語法:
# ln 原始檔 目標檔案
下面我們舉一個例子,在這個例子中,我們要為sun.txt 建立其硬連結sun002.txt。然後看一下sun.txt和sun002.txt的屬性的變化;
[[email protected] ~]# ls -li sun.txt 注:檢視sun.txt的屬性;
2408263 -rw-r--r-- 1 root root 2Array 04-22 21:02 sun.txt 注:這是sun.txt的屬性;
[[email protected] ~]# ln sun.txt sun002.txt 注:我們通過ln 來建立sun.txt的硬連結檔案sun002.txt
[[email protected] ~]# ls -li sun* 注:我們列一下sun.txt 和sun002.txt
2408263 -rw-r--r-- 2 root root 2Array 04-22 21:02 sun002.txt
2408263 -rw-r--r-- 2 root root 2Array 04-22 21:02 sun.txt
我們可以看到sun.txt在沒有建立硬連結檔案sun002.txt的時候,其連結個數是1(也就是-rw-r--r--後的那個數值),建立了硬連結sun002.txt建立後,這個值變成了2。也就是說,我們每次為sun.txt建立一個新的硬連結檔案後,其硬連結個數都會增加1。
inode值相同的檔案,他們的關係是互為硬連結的關係。當我們修改其中一個檔案的內容時,互為硬連結的檔案的內容也會跟著變化。如果我們刪除互為硬連結關係的某個檔案時,其它的檔案並不受影響。比如我們把sun.txt刪除後,我們還是一樣能看到sun002.txt的內容,並且sun02.txt仍是存在的。
可以這麼理解,互為硬連結關係的檔案,他們好象是克隆體,他們的屬性幾乎是完全一樣;
下面的例子,我們把sun.txt刪除,然後我們看一下sun002.txt 是不是能看到其內容。
[[email protected] ~]# rm -rf sun.txt
[[email protected] ~]# more sun002.txt
注意:硬連結不能為目錄建立,只有檔案才能建立硬連結。
2.12 軟連結的建立,及軟接與原始檔的關係;
建立軟連結(也被稱為符號連結)的語法;
# ln -s 源文檔案或目錄 目標檔案或目錄
軟連結也叫符號連結,他和硬連結有所不同,軟連結檔案只是其原始檔的一個標記。當我們刪除了原始檔後,連結檔案不能獨立存在,雖然仍保留檔名,但我們卻不能檢視軟連結檔案的內容了。
[[email protected] ~]# ls -li linuxsir001.txt
2408274 -rw-r--r-- 1 root root 2Array 04-22 21:53 linuxsir001.txt
[[email protected] ~]# ln -s linuxsir001.txt linuxsir002.txt
[[email protected] ~]# ls -li linuxsir001.txt linuxsir002.txt
2408274 -rw-r--r-- 1 root root 2Array 04-22 21:53 linuxsir001.txt
24087Array5 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt
解釋
上面的例子,首先我們檢視 linuxsir001.txt 的屬性,比如inode 、所屬檔案種類、建立或修改時間等... ...我們來對比一下:
首先 對比一下節點:兩個檔案的節點不同;
其次 兩個檔案的歸屬的種類不同 linuxsir001.txt是-,也就是普通檔案,而linuxsir002.txt 是l,它是一個連結檔案;
第三 兩個檔案的讀寫許可權不同 linuxsir001.txt 是rw-r--r-- ,而linuxsir002.txt的讀寫許可權是 rwxrwxrwx
第三 兩者的硬連結個數相同;都是1
第四 兩檔案的屬主和所歸屬的使用者組相同;
第五 修改(或訪問、建立)時間不同;
我們還注意到了linuxsir002.txt 後面有一個標記 ->,這表示linuxsir002.txt 是linuxsir001.txt的軟連結檔案。
值得我們注意的是:當我們修改連結檔案的內容時,就意味著我們在修改原始檔的內容。當然原始檔的屬性也會發生改變,鏈接檔案的屬性並不會發生變化。當我們把原始檔刪除後,連結檔案只存在一個檔名,因為失去了原始檔,所以軟連結檔案也就不存在了。這一點和硬連結是不同的;
[[email protected] ~]# rm -rf linuxsir001.txt 注:刪除linuxsir001.txt
[[email protected] ~]# ls -li linuxsir002.txt 注:檢視linuxsir002 的屬性;
24087Array5 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt
[[email protected] ~]# more linuxsir002.txt 注:檢視linuxsir002.txt的內容;
linuxsir002.txt: 沒有那個檔案或目錄 注:得到提示,linuxsir002.txt不存在。
上面的例子告訴我們,如果一個連結檔案失去了源,就意味著他已經不存在了;
我們可以看到軟連結檔案,其實只是原始檔的一個標記,當原始檔失去時,他也就是存在了。軟連結檔案只是佔用了inode來儲存軟連結檔案屬性等資訊,但檔案儲存是指向原始檔的。
軟體連結,可以為檔案或目錄都適用。無論是軟連結還是硬連結,都可以用rm來刪除。rm工具是通用的。
3、檔案型別;
當用ls指令的長格式顯示檔案或目錄的屬性時;比如:
[[email protected] ~]# ls -lih
總計 104K
2408Array4Array -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh
2408830 drwxr-xr-x 2 root root 4.0K 04-21 12:46 mkuml-2004.07.17
2408260 drwxr-xr-x 2 root root 4.0K 04-21 22:15 mydir
2408258 lrwxrwxrwx 1 root root 7 04-21 22:16 sun001.txt -> sun.txt
2408263 -rw-r--r-- 2 root root 11 04-20 14:17 sun002.txt
2408263 -rw-r--r-- 2 root root 11 04-20 14:17 sun.txt
我們來看一下lsfile.sh這行,其中有這樣一個欄位 -rwxr-xr-x 。這個欄位包括兩個資訊,一是檔案型別,二是檔案的許可權;檔案型別就第一個字元,lsfile.sh的檔案所歸屬的檔案種類是- 。同理 mkuml-2004.07.17的這段是drwxr-xr-x,它所歸屬的檔案種類應該是d;sun001.txt檔案呢,對應的lrwxrwxrwx,sun001.txt所歸屬的檔案種類應該是-l 。我們可以知道Linux檔案可以分為如普通檔案、目錄、符號連結檔案、字元和塊裝置檔案、套介面檔案等。
4、檔案的許可權;
Linux檔案或目錄的許可權是和使用者和使用者組聯絡在一起的,所以理解這部份內容,您首先得了解一下Linux使用者管理方面的知識 。如果您是新手,要把這篇文件的相關文件也瞭解一下,這對您理解本文真的很重要;
每個檔案或目錄都有一組Array個許可權位,每三位被分為一組,他們分別是屬主許可權位(佔三個位置 )、使用者組許可權位(佔三個位置)、其它使用者許可權位(佔三個位置)。比如rwxr-xr-x ,我們數一下就知道是不是Array個位置了,正是這Array個許可權位來控制檔案屬主、使用者組以及其它使用者的許可權。
4.1 關於許可權位;
Linux檔案或目錄的許可權位是由 Array 個許可權位來控制,每三位為一組,它們分別是檔案屬主(Ower)的讀、寫、執行,使用者組(Group)的讀、寫、執行以及(Other)其它使用者的讀、寫、執行;
檔案屬主: 讀r、寫w、執行x
用 戶 組 : 讀r、寫w、執行x
其它使用者: 讀r、寫w、執行x
如果許可權位不可讀、不可寫、不可執行,是用-來表示。
對於普通檔案的讀、寫、執行許可權可以這樣理解:
可讀:意味著我們可以檢視閱讀;
可寫:意味著,可以修改或刪除(不過刪除或修改的許可權受父目錄上的許可權控制);
可執行:意味著如果檔案就可以執行,比如二進位制檔案(比如命令),或指令碼(要用指令碼語言直譯器來解釋執行)。
比如:
[[email protected] ~]# ls -l lsfile.sh
-rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh
第一個欄位 -rwxr-xr-x中的第一個字元是-,表示lsfile.sh是一個普通檔案;
lsfile.sh的許可權是 rwxr-xr-x。表示lsfile.sh檔案,檔案的屬主root,擁有rwx(可讀、可寫、可執行)許可權,使用者組root,擁有 r-x(可讀、可寫)許可權 ,其它使用者擁有 r-x(可讀、可寫)許可權。這Array個許可權連在一起就是 rwxr-xr-x,也就是說,lsfile.sh 檔案,檔案屬主root擁有可讀、可寫、可執行許可權,使用者組root下的所有使用者擁有可讀可執行許可權,其它使用者擁有可讀可執行許可權。
檢視檔案的屬性用 ls -l 檔案 ;檢視目錄的屬性是 ls -d 目錄。請參考 :
4.2 改變許可權的命令 chmod ;
chmod 是用來改變檔案或目錄許可權的命令,但只有檔案的屬主和超級許可權使用者root才有這種許可權。通過chmod 來改變檔案或目錄的許可權有兩種方法,一種是通過八進位制的語法,另一種是通過助記語法;
舉例:
[[email protected] ~]# touch linuxsir007.txt 注:建立linuxsir007.txt檔案;
[[email protected] ~]# touch linuxsir008.txt 注:建立linuxsir008.txt 檔案;
[[email protected] ~]# ls -lh linuxsir007.txt linuxsir008.txt 注:檢視linuxsir007.txt和linuxsir008.txt檔案屬性;
-rw-r--r-- 1 root root 0 04-23 20:11 linuxsir007.txt 注:linuxsir007.txt 檔案屬性;
-rw-r--r-- 1 root root 0 04-23 20:11 linuxsir008.txt 注:linuxsir008.txt 檔案屬性;
[[email protected] ~]# chmod 755 linuxsir007.txt 注:通過八進位制語法來改變linuxsir007.txt的許可權;
[[email protected] ~]# chmod u+x,og+x linuxsir008.txt 注:通過助記語法來改變linuxsir008.txt的許可權;
[[email protected] ~]# ls -lh linuxsir007.txt linuxsir008.txt 注:檢視linuxsir007.txt和linuxsir008.txt檔案屬性;
-rwxr-xr-x 1 root root 0 04-23 20:11 linuxsir007.txt
-rwxr-xr-x 1 root root 0 04-23 20:11 linuxsir008.txt
上 面例子是一個演示通過chmod的兩種語法來改變許可權的例子,我所要說明的是,兩種方法都能達到同一目的。
這個過程是:
首先:建立linuxsir007.txt和linuxsir008.txt兩個檔案;
其次:檢視兩個檔案的屬性;他們的許可權都是一樣的,都是 rw-r--r-- ,表示檔案屬主可讀可寫、檔案所歸屬的使用者組對文件可讀、其它使用者可讀;
第三:通過chmod的八進位制語法來改變linuxsir007.txt 的許可權;通過chmod的助記語法來改變linuxsir008.txt的許可權; 我們用兩種方法來改變linuxsir007.txt和linuxsir008.txt 檔案,通過chmod的兩種不同的語法來讓兩個檔案的許可權達以一致。在八進位制語法中,我們用了 755 ,而在助記語法中,我們用了 u+x,og+x。雖然用了兩種不同的語法,但達到的目的是一樣的,最後的結果,我們可以看到兩個檔案的許可權都是 rwxr-xr-x。也就是說檔案的屬主對檔案有可讀可寫可執行的許可權,檔案所歸屬的使用者組有可讀可執行的許可權,其它使用者有可讀可執行的許可權。
由此我們引出了通過chmod 工具來改變檔案或目錄許可權的的兩種方法:chmod 的八進位制語法,chmod的助記語法;
4.21 通過 chmod 八進位制語法來改變檔案或目錄的許可權;
我們前面已經說了,檔案或目錄的許可權位總共有Array個位置 ,檔案屬主、檔案所歸屬的組佔用三位和其它使用者各佔用三個位置。
看個例子:
-rwxr-xr-x 1 root root 0 04-23 20:11 linuxsir007.txt
說明:
屬主許可權位:佔用三個位置,三個位置的順序是讀r、寫w、執行x。如果是沒有許可權,則為-。在這個例子中,我們看到rwx,表示屬主在三個權位上都有許可權,也就是可讀可寫可執行;
屬組許可權位:佔用三個位置,三個位置的順序是讀r、寫w、執行x。如果是沒有許可權,則為-。在這個例子中,我們看到的是r-x,在寫的位置上是-,表示沒有寫許可權,檔案所歸屬的組對檔案擁有的是可讀可執行,但沒有寫的許可權。其它使用者許可權位:佔用三個位置 ,三個位置的順序是讀r、寫w、執行x,如果是沒有許可權,則為-。在這個例子中,我們看其它使用者的許可權位是r-x,在寫的位置上是-,表示沒有寫許可權,檔案所歸屬的組對檔案擁有的是可讀可執行,但沒有寫的許可權。
chmod 的八進位制語法的數字說明;
r 4
w 2
x 1
- 0
屬主的許可權用數字表達:屬主的那三個許可權位的數字加起來的總和。比如上面的例子中屬主的許可權是rwx ,也就是4+2+1 ,應該是7;屬組的許可權用數字表達:屬組的那個許可權位數字的相加的總和。比如上面的例子中的r-x ,也就是4+0+1 ,應該是5;其它使用者的許可權數字表達:其它使用者許可權位的數字相加的總和。比如上面例子中是 r-x ,也就是4+0+1 ,應該是5;
[[email protected] ~]# ls -l sun.txt
-rwxr-xr-x 2 root root 2Array 04-22 21:02 sun.txt 注:檢視sun.txt的屬性,我們看到sun.txt的許可權位是rwxr-xr-x,用八進位制數字表示是755 ;
[[email protected] ~]# chmod 644 sun.txt 注;我們改變它的許可權為屬主可讀可寫、屬組可讀、其它使用者可讀,也就是rw-r--r--,用數字表示就是644;
[[email protected] ~]# ls -l sun.txt
-rw-r--r-- 2 root root 2Array 04-22 21:02 sun.txt 注:是不是達到目的了?是的!
每個三位的許可權程式碼(分別是屬主、屬組,其它使用者)組合,有8種可能;
八進位制數字 許可權
0 ---
1 --x
2 -w-
3 -wx
4 r--
5 r-x
6 rw-
7 rwx
註解:我們可以根據上面的數字列表來組合許可權,比如我想讓屬主擁有 rwx(所對應的數字是7),屬組擁有 --x(所對應的
數字是1),其它使用者擁有 ---(所對應的數字是0),這樣我們把各組的許可權組合起來就是是 rwx--x---(對應的數字是710)。
[[email protected] ~]# ls -l sun.txt
-rw-r--r-- 2 root root 2Array 04-22 21:02 sun.txt
[[email protected] ~]# chmod 710 sun.txt
[[email protected] ~]# ls -l sun.txt
-rwx--x--- 2 root root 2Array 04-22 21:02 sun.txt
如果我們想改變的僅僅是開啟目錄的許可權 ,不用加任何引數。如果想把目錄以下的所有檔案或子目錄改變,應該加-R引數;
[[email protected] ~]# ls -ld testdir/
drwxr-xr-x 3 root root 40Array6 04-24 11:01 testdir/
[[email protected] ~]# ls -lr testdir/
總計 4
-rw-r--r-- 1 root root 0 04-24 11:01 sir01.txt
drwxr-xr-x 2 root root 40Array6 04-24 11:01 linuxsir
我們僅僅改變testdir的許可權,讓其擁有屬主可讀可寫、屬組可讀、其它使用者可讀,也就是rw-r--r-- ,用八進位制的算數應該
是644。
[[email protected] ~]# ls -ld testdir/ 注:我們檢視到的testdir目錄的許可權是rwxr--r--;
drwxr-xr-x 3 root root 40Array6 04-24 11:01 testdir/
[[email protected] ~]# chmod 644 testdir/
[[email protected] ~]# ls -ld testdir/
drw-r--r-- 3 root root 40Array6 04-24 11:01 testdir/ 注:改變成功;
[[email protected] ~]# ls -lr testdir/ 注:我們檢視一下testdir目錄下的子目錄是否改變了?
嘗試一下改變testdir及其子目錄和檔案許可權都要改變為 rw-r--r--許可權。我們要用到-R引數;
[[email protected] ~]# chmod -R 644 testdir/ 注:我們改變testdir下所有的檔案或子目錄的許可權都為 rw-r--r--
[[email protected] ~]# ls -ld testdir/
drw-r--r-- 3 root root 40Array6 04-24 11:01 testdir/
[[email protected] ~]# ls -lr testdir/
總計 4
-rw-r--r-- 1 root root 0 04-24 11:01 sir01.txt
drw-r--r-- 2 root root 40Array6 04-24 11:01 linuxsir
值得注意的是:chmod 改變一個目錄下的所有.file時,要小心操作。比如我們要改變testdir下的所有.file 的許可權為 rwxr
--r--,但我們不想改變testdir目錄的許可權 。下面的例子操作是錯誤的。
[[email protected] ~]# ls -ld testdir/
drw-r--r-- 3 root root 40Array6 04-24 11:01 testdir/
[[email protected] ~]# ls -lr testdir/
總計 4
-rw-r--r-- 1 root root 0 04-24 11:01 sir01.txt
drw-r--r-- 2 root root 40Array6 04-24 11:01 linuxsir
[[email protected] ~]# chmod -R 755 testdir/.* 注:這樣操作,會把testdir目錄的許可權一併改為 rwxr--r--
[[email protected] ~]# ls -ld testdir/
drwxr-xr-x 3 root root 40Array6 04-24 11:01 testdir/
所以當您想改變一個目錄下的所有.file許可權,並且想保留該目錄的原有許可權時,請不要用.*萬用字元。至於應該怎麼做,我想
大家都明白。比如下面的匹配;
[[email protected] ~]# chmod -R 644 testdir/.[a-z]*
上面的例子chmod 會匹配所有以.a到.z 開頭的檔案。
4.22 通過 chmod 助記語法來改變檔案或目錄的許可權;
chmod 的助記語法相對簡單,對檔案或目錄許可權的改變時,是通過比較直觀的字元的形式來完成;在助記語法中,相關字母的
定義;
使用者或使用者組定義:
u 代表屬主
g 代表屬組
o 代表其它使用者
a 代表屬主、屬組和其它使用者,也就是上面三個使用者(或組)的所有;
許可權定義字母:
r 代表讀許可權;
w 代表寫許可權;
x 代表執行許可權;
許可權增減字元;
- 代表減去相關許可權;
+ 代表增加相關許可權;
示例一:
[[email protected] ~]# ls -l linuxsir007.txt
-rwxr-xr-x 1 root root 0 04-23 20:11 linuxsir007.txt
[[email protected] ~]# chmod ugo-x linuxsir007.txt 注:把屬主、使用者組及其它使用者的執行許可權都減掉;
[[email protected] ~]# ls -l linuxsir007.txt
-rw-r--r-- 1 root root 0 04-23 20:11 linuxsir007.txt
示例二:
[[email protected] ~]# ls -l linuxsir007.txt
-rw-r--r-- 1 root root 0 04-23 20:11 linuxsir007.txt
[[email protected] ~]# chmod u+x linuxsir007.txt 注:為檔案的屬主增加執行許可權
[[email protected] ~]# ls -l linuxsir007.txt
-rwxr--r-- 1 root root 0 04-23 20:11 linuxsir007.txt
示例三:
[[email protected] ~]# ls -l linuxsir007.txt
-rwxr--r-- 1 root root 0 04-23 20:11 linuxsir007.txt
[[email protected] ~]# chmod u-x,go+rw linuxsir007.txt 注:減去檔案屬主對檔案的執行權,增加屬組和其它使用者對檔案的
可讀可寫權;
[[email protected] ~]# ls -l linuxsir007.txt
-rw-rw-rw- 1 root root 0 04-23 20:11 linuxsir007.txt
用助記語法比較靈活,組合起來比較方便;比如;
u=r+x 為檔案屬主新增讀寫許可權;
ug=rwx,o=r 為屬主和屬組新增讀、寫、執行許可權,為其它使用者設定讀許可權。
a+x 為檔案的屬主、屬組和其它使用者新增執行許可權;
g=u 讓檔案的屬組和屬主和許可權相同;
對於目錄許可權的設定,要用到-R引數;
和八進位制方法一樣,如果我們為一個目錄及其下的子目錄和檔案具有相同的屬性,就可以用-R引數;
[[email protected] ~]# chmod -R a+rwx testdir/
[[email protected] ~]# ls -lr testdir/
總計 4
-rwxrwxrwx 1 root root 0 04-24 11:01 sir01.txt
drwxrwxrwx 2 root root 40Array6 04-24 11:01 linuxsir
4.3 預設許可權分配的命令 umask ;
umask 是通過八進位制的數值來定義使用者建立檔案或目錄的預設許可權。umask 表示的是禁止許可權。不過檔案和目錄有點不同。
對於檔案來說,umask 的設定是在
ls -l file :
檢視檔案修改時間
ls -lc file:
檢視檔案狀態改動時間
ls -lu file:
檢視檔案訪問時間
touch命令更改檔案時間屬性的介紹
touch命令 選項[options]的時間格式[[CC]YY]MMDDhhmm[.ss]說明:
CC表示世紀
YY表示年MM表示月
DD表示日
hh表示小時
mm表示分鐘
ss表示秒
201001311200.34
CCYYMMDDhhmm ss
表示時間為2010年1月31日12點0分34秒 options : -t: 後面可接時間,其格式如上所述 -a:僅修改access time -c:僅修改ctime時間,而不建立檔案 -m:僅修改mtime 例如:將issue檔案日期改為2008/07/15 13:13 [[email protected] ~]# ls -l /etc/issue -rw-r--r-- 1 root root 80 Jul 8 09:03 /etc/issue [[email protected] ~]# touch -t 0807151313 /etc/issue [[email protected] ~]# !l ls -l /etc/issue -rw-r--r-- 1 root root 80 Jul 15 2008 /etc/issue [[email protected] ~]# stat /etc/issue File: `/etc/issue' Size: 80 Blocks: 16 IO Block: 4096 regular file Device: fd00h/64768d Inode: 3014852 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2008-07-15 13:13:00.000000000 +0800 Modify: 2008-07-15 13:13:00.000000000 +0800 Change: 2010-07-09 09:51:46.000000000 +0800 注意到,我們改變了issue的mtime與atime,並沒有改變ctime,此時的ctime記錄的是當前時間。
下附檔案的屬性相關介紹:
1、 Linux 檔案屬性概說;Linux 檔案或目錄的屬性主要包括:檔案或目錄的節點、種類、許可權模式、連結數量、所歸屬的使用者和使用者組、最近訪問或修改的時間等內容;
[[email protected] ~]# ls -lih
總計 104K
2408Array4Array -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh
2408830 drwxr-xr-x 2 root root 4.0K 04-21 12:46 mkuml-2004.07.17
2408260 drwxr-xr-x 2 root root 4.0K 04-21 22:15 mydir
2408258 lrwxrwxrwx 1 root root 7 04-21 22:16 sun001.txt -> sun.txt
2408263 -rw-r--r-- 2 root root 11 04-20 14:17 sun002.txt
2408263 -rw-r--r-- 2 root root 11 04-20 14:17 sun.txt
解釋:
第一欄位:inode
第二欄位:檔案種類和許可權;
第三欄位: 硬連結個數;
第四欄位: 屬主;
第五欄位:所歸屬的組;
第六欄位:檔案或目錄的大小;
第七欄位和第八欄位:最後訪問或修改時間;
第九欄位:檔名或目錄名
我們以lsfile.sh為例:
2408Array4Array -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh
inode 的值是:2408Array4Array
檔案型別:檔案型別是-,表示這是一個普通檔案; 關於檔案的型別,請參考:《Linux 檔案型別和檔案擴充套件》
檔案許可權:檔案許可權是rwxr-xr-x ,表示檔案屬主可讀、可寫、可執行,檔案所歸屬的使用者組可讀可執行,其它使用者可讀可執
行;
硬連結個數: lsfile.sh這個檔案沒有硬連結;因為數值是1,就是他本身;
檔案屬主:也就是這個檔案歸哪於哪個使用者 ,它歸於root,也就是第一個root;
檔案屬組:也就是說,對於這個檔案,它歸屬於哪個使用者組,在這裡是root使用者組;
檔案大小:檔案大小是7個位元組;
訪問可修改時間 :這裡的時間是最後訪問的時間,最後訪問和檔案被修改或建立的時間,有時並不是一致的;
當然文件的屬性不僅僅包括這些,這些是我們最常用的一些屬性。我們把比較重要的說一說,比如檔案所歸屬的種類、許可權、
硬連結個數 ... ...
2、 關於inode;
inode 譯成中文就是索引節點。每個儲存裝置或儲存裝置的分割槽(儲存裝置是硬碟、軟盤、U盤 ... ... )被格式化為檔案系統後,應該有兩部份,一部份是inode,另一部份是Block,Block是用來儲存資料用的。而inode呢,就是用來儲存這些資料的資訊,這些資訊包括檔案大小、屬主、歸屬的使用者組、讀寫許可權等。inode為每個檔案進行資訊索引,所以就有了inode的數值。作業系統根據指令,能通過inode值最快的找到相對應的檔案。
做個比喻,比如一本書,儲存裝置或分割槽就相當於這本書,Block相當於書中的每一頁,inode 就相當於這本書前面的目錄,一本書有很多的內容,如果想查詢某部份的內容,我們可以先查目錄,通過目錄能最快的找到我們想要看的內容。雖然不太恰當,但還是比較形象。
當我們用ls 檢視某個目錄或檔案時,如果加上-i 引數,就可以看到inode節點了;比如我們前面所說的例子;
[[email protected] ~]# ls -li lsfile.sh
2408Array4Array -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh
lsfile.sh 的inode值是 2408Array4Array ; 檢視一個檔案或目錄的inode,要通過ls 命令的的 -i引數。
2.10 inode 相同的檔案是硬連結檔案;
在Linux 檔案系統中,inode值相同的檔案是硬連結檔案,也就是說,不同的檔名,inode可能是相同的,一個inode值可以對應多個檔案。理解連結檔案並不難,看看例子就會了。在Linux中,連結檔案是通過ln工具來建立的。
2.11 建立硬連結,硬連結和原始檔關係;
用ln 建立檔案硬連結的語法:
# ln 原始檔 目標檔案
下面我們舉一個例子,在這個例子中,我們要為sun.txt 建立其硬連結sun002.txt。然後看一下sun.txt和sun002.txt的屬性的變化;
[[email protected] ~]# ls -li sun.txt 注:檢視sun.txt的屬性;
2408263 -rw-r--r-- 1 root root 2Array 04-22 21:02 sun.txt 注:這是sun.txt的屬性;
[[email protected] ~]# ln sun.txt sun002.txt 注:我們通過ln 來建立sun.txt的硬連結檔案sun002.txt
[[email protected] ~]# ls -li sun* 注:我們列一下sun.txt 和sun002.txt
2408263 -rw-r--r-- 2 root root 2Array 04-22 21:02 sun002.txt
2408263 -rw-r--r-- 2 root root 2Array 04-22 21:02 sun.txt
我們可以看到sun.txt在沒有建立硬連結檔案sun002.txt的時候,其連結個數是1(也就是-rw-r--r--後的那個數值),建立了硬連結sun002.txt建立後,這個值變成了2。也就是說,我們每次為sun.txt建立一個新的硬連結檔案後,其硬連結個數都會增加1。
inode值相同的檔案,他們的關係是互為硬連結的關係。當我們修改其中一個檔案的內容時,互為硬連結的檔案的內容也會跟著變化。如果我們刪除互為硬連結關係的某個檔案時,其它的檔案並不受影響。比如我們把sun.txt刪除後,我們還是一樣能看到sun002.txt的內容,並且sun02.txt仍是存在的。
可以這麼理解,互為硬連結關係的檔案,他們好象是克隆體,他們的屬性幾乎是完全一樣;
下面的例子,我們把sun.txt刪除,然後我們看一下sun002.txt 是不是能看到其內容。
[[email protected] ~]# rm -rf sun.txt
[[email protected] ~]# more sun002.txt
注意:硬連結不能為目錄建立,只有檔案才能建立硬連結。
2.12 軟連結的建立,及軟接與原始檔的關係;
建立軟連結(也被稱為符號連結)的語法;
# ln -s 源文檔案或目錄 目標檔案或目錄
軟連結也叫符號連結,他和硬連結有所不同,軟連結檔案只是其原始檔的一個標記。當我們刪除了原始檔後,連結檔案不能獨立存在,雖然仍保留檔名,但我們卻不能檢視軟連結檔案的內容了。
[[email protected] ~]# ls -li linuxsir001.txt
2408274 -rw-r--r-- 1 root root 2Array 04-22 21:53 linuxsir001.txt
[[email protected] ~]# ln -s linuxsir001.txt linuxsir002.txt
[[email protected] ~]# ls -li linuxsir001.txt linuxsir002.txt
2408274 -rw-r--r-- 1 root root 2Array 04-22 21:53 linuxsir001.txt
24087Array5 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt
解釋
上面的例子,首先我們檢視 linuxsir001.txt 的屬性,比如inode 、所屬檔案種類、建立或修改時間等... ...我們來對比一下:
首先 對比一下節點:兩個檔案的節點不同;
其次 兩個檔案的歸屬的種類不同 linuxsir001.txt是-,也就是普通檔案,而linuxsir002.txt 是l,它是一個連結檔案;
第三 兩個檔案的讀寫許可權不同 linuxsir001.txt 是rw-r--r-- ,而linuxsir002.txt的讀寫許可權是 rwxrwxrwx
第三 兩者的硬連結個數相同;都是1
第四 兩檔案的屬主和所歸屬的使用者組相同;
第五 修改(或訪問、建立)時間不同;
我們還注意到了linuxsir002.txt 後面有一個標記 ->,這表示linuxsir002.txt 是linuxsir001.txt的軟連結檔案。
值得我們注意的是:當我們修改連結檔案的內容時,就意味著我們在修改原始檔的內容。當然原始檔的屬性也會發生改變,鏈接檔案的屬性並不會發生變化。當我們把原始檔刪除後,連結檔案只存在一個檔名,因為失去了原始檔,所以軟連結檔案也就不存在了。這一點和硬連結是不同的;
[[email protected] ~]# rm -rf linuxsir001.txt 注:刪除linuxsir001.txt
[[email protected] ~]# ls -li linuxsir002.txt 注:檢視linuxsir002 的屬性;
24087Array5 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt
[[email protected] ~]# more linuxsir002.txt 注:檢視linuxsir002.txt的內容;
linuxsir002.txt: 沒有那個檔案或目錄 注:得到提示,linuxsir002.txt不存在。
上面的例子告訴我們,如果一個連結檔案失去了源,就意味著他已經不存在了;
我們可以看到軟連結檔案,其實只是原始檔的一個標記,當原始檔失去時,他也就是存在了。軟連結檔案只是佔用了inode來儲存軟連結檔案屬性等資訊,但檔案儲存是指向原始檔的。
軟體連結,可以為檔案或目錄都適用。無論是軟連結還是硬連結,都可以用rm來刪除。rm工具是通用的。
3、檔案型別;
當用ls指令的長格式顯示檔案或目錄的屬性時;比如:
[[email protected] ~]# ls -lih
總計 104K
2408Array4Array -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh
2408830 drwxr-xr-x 2 root root 4.0K 04-21 12:46 mkuml-2004.07.17
2408260 drwxr-xr-x 2 root root 4.0K 04-21 22:15 mydir
2408258 lrwxrwxrwx 1 root root 7 04-21 22:16 sun001.txt -> sun.txt
2408263 -rw-r--r-- 2 root root 11 04-20 14:17 sun002.txt
2408263 -rw-r--r-- 2 root root 11 04-20 14:17 sun.txt
我們來看一下lsfile.sh這行,其中有這樣一個欄位 -rwxr-xr-x 。這個欄位包括兩個資訊,一是檔案型別,二是檔案的許可權;檔案型別就第一個字元,lsfile.sh的檔案所歸屬的檔案種類是- 。同理 mkuml-2004.07.17的這段是drwxr-xr-x,它所歸屬的檔案種類應該是d;sun001.txt檔案呢,對應的lrwxrwxrwx,sun001.txt所歸屬的檔案種類應該是-l 。我們可以知道Linux檔案可以分為如普通檔案、目錄、符號連結檔案、字元和塊裝置檔案、套介面檔案等。
4、檔案的許可權;
Linux檔案或目錄的許可權是和使用者和使用者組聯絡在一起的,所以理解這部份內容,您首先得了解一下Linux使用者管理方面的知識 。如果您是新手,要把這篇文件的相關文件也瞭解一下,這對您理解本文真的很重要;
每個檔案或目錄都有一組Array個許可權位,每三位被分為一組,他們分別是屬主許可權位(佔三個位置 )、使用者組許可權位(佔三個位置)、其它使用者許可權位(佔三個位置)。比如rwxr-xr-x ,我們數一下就知道是不是Array個位置了,正是這Array個許可權位來控制檔案屬主、使用者組以及其它使用者的許可權。
4.1 關於許可權位;
Linux檔案或目錄的許可權位是由 Array 個許可權位來控制,每三位為一組,它們分別是檔案屬主(Ower)的讀、寫、執行,使用者組(Group)的讀、寫、執行以及(Other)其它使用者的讀、寫、執行;
檔案屬主: 讀r、寫w、執行x
用 戶 組 : 讀r、寫w、執行x
其它使用者: 讀r、寫w、執行x
如果許可權位不可讀、不可寫、不可執行,是用-來表示。
對於普通檔案的讀、寫、執行許可權可以這樣理解:
可讀:意味著我們可以檢視閱讀;
可寫:意味著,可以修改或刪除(不過刪除或修改的許可權受父目錄上的許可權控制);
可執行:意味著如果檔案就可以執行,比如二進位制檔案(比如命令),或指令碼(要用指令碼語言直譯器來解釋執行)。
比如:
[[email protected] ~]# ls -l lsfile.sh
-rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh
第一個欄位 -rwxr-xr-x中的第一個字元是-,表示lsfile.sh是一個普通檔案;
lsfile.sh的許可權是 rwxr-xr-x。表示lsfile.sh檔案,檔案的屬主root,擁有rwx(可讀、可寫、可執行)許可權,使用者組root,擁有 r-x(可讀、可寫)許可權 ,其它使用者擁有 r-x(可讀、可寫)許可權。這Array個許可權連在一起就是 rwxr-xr-x,也就是說,lsfile.sh 檔案,檔案屬主root擁有可讀、可寫、可執行許可權,使用者組root下的所有使用者擁有可讀可執行許可權,其它使用者擁有可讀可執行許可權。
檢視檔案的屬性用 ls -l 檔案 ;檢視目錄的屬性是 ls -d 目錄。請參考 :
4.2 改變許可權的命令 chmod ;
chmod 是用來改變檔案或目錄許可權的命令,但只有檔案的屬主和超級許可權使用者root才有這種許可權。通過chmod 來改變檔案或目錄的許可權有兩種方法,一種是通過八進位制的語法,另一種是通過助記語法;
舉例:
[[email protected] ~]# touch linuxsir007.txt 注:建立linuxsir007.txt檔案;
[[email protected] ~]# touch linuxsir008.txt 注:建立linuxsir008.txt 檔案;
[[email protected] ~]# ls -lh linuxsir007.txt linuxsir008.txt 注:檢視linuxsir007.txt和linuxsir008.txt檔案屬性;
-rw-r--r-- 1 root root 0 04-23 20:11 linuxsir007.txt 注:linuxsir007.txt 檔案屬性;
-rw-r--r-- 1 root root 0 04-23 20:11 linuxsir008.txt 注:linuxsir008.txt 檔案屬性;
[[email protected] ~]# chmod 755 linuxsir007.txt 注:通過八進位制語法來改變linuxsir007.txt的許可權;
[[email protected] ~]# chmod u+x,og+x linuxsir008.txt 注:通過助記語法來改變linuxsir008.txt的許可權;
[[email protected] ~]# ls -lh linuxsir007.txt linuxsir008.txt 注:檢視linuxsir007.txt和linuxsir008.txt檔案屬性;
-rwxr-xr-x 1 root root 0 04-23 20:11 linuxsir007.txt
-rwxr-xr-x 1 root root 0 04-23 20:11 linuxsir008.txt
上 面例子是一個演示通過chmod的兩種語法來改變許可權的例子,我所要說明的是,兩種方法都能達到同一目的。
這個過程是:
首先:建立linuxsir007.txt和linuxsir008.txt兩個檔案;
其次:檢視兩個檔案的屬性;他們的許可權都是一樣的,都是 rw-r--r-- ,表示檔案屬主可讀可寫、檔案所歸屬的使用者組對文件可讀、其它使用者可讀;
第三:通過chmod的八進位制語法來改變linuxsir007.txt 的許可權;通過chmod的助記語法來改變linuxsir008.txt的許可權; 我們用兩種方法來改變linuxsir007.txt和linuxsir008.txt 檔案,通過chmod的兩種不同的語法來讓兩個檔案的許可權達以一致。在八進位制語法中,我們用了 755 ,而在助記語法中,我們用了 u+x,og+x。雖然用了兩種不同的語法,但達到的目的是一樣的,最後的結果,我們可以看到兩個檔案的許可權都是 rwxr-xr-x。也就是說檔案的屬主對檔案有可讀可寫可執行的許可權,檔案所歸屬的使用者組有可讀可執行的許可權,其它使用者有可讀可執行的許可權。
由此我們引出了通過chmod 工具來改變檔案或目錄許可權的的兩種方法:chmod 的八進位制語法,chmod的助記語法;
4.21 通過 chmod 八進位制語法來改變檔案或目錄的許可權;
我們前面已經說了,檔案或目錄的許可權位總共有Array個位置 ,檔案屬主、檔案所歸屬的組佔用三位和其它使用者各佔用三個位置。
看個例子:
-rwxr-xr-x 1 root root 0 04-23 20:11 linuxsir007.txt
說明:
屬主許可權位:佔用三個位置,三個位置的順序是讀r、寫w、執行x。如果是沒有許可權,則為-。在這個例子中,我們看到rwx,表示屬主在三個權位上都有許可權,也就是可讀可寫可執行;
屬組許可權位:佔用三個位置,三個位置的順序是讀r、寫w、執行x。如果是沒有許可權,則為-。在這個例子中,我們看到的是r-x,在寫的位置上是-,表示沒有寫許可權,檔案所歸屬的組對檔案擁有的是可讀可執行,但沒有寫的許可權。其它使用者許可權位:佔用三個位置 ,三個位置的順序是讀r、寫w、執行x,如果是沒有許可權,則為-。在這個例子中,我們看其它使用者的許可權位是r-x,在寫的位置上是-,表示沒有寫許可權,檔案所歸屬的組對檔案擁有的是可讀可執行,但沒有寫的許可權。
chmod 的八進位制語法的數字說明;
r 4
w 2
x 1
- 0
屬主的許可權用數字表達:屬主的那三個許可權位的數字加起來的總和。比如上面的例子中屬主的許可權是rwx ,也就是4+2+1 ,應該是7;屬組的許可權用數字表達:屬組的那個許可權位數字的相加的總和。比如上面的例子中的r-x ,也就是4+0+1 ,應該是5;其它使用者的許可權數字表達:其它使用者許可權位的數字相加的總和。比如上面例子中是 r-x ,也就是4+0+1 ,應該是5;
[[email protected] ~]# ls -l sun.txt
-rwxr-xr-x 2 root root 2Array 04-22 21:02 sun.txt 注:檢視sun.txt的屬性,我們看到sun.txt的許可權位是rwxr-xr-x,用八進位制數字表示是755 ;
[[email protected] ~]# chmod 644 sun.txt 注;我們改變它的許可權為屬主可讀可寫、屬組可讀、其它使用者可讀,也就是rw-r--r--,用數字表示就是644;
[[email protected] ~]# ls -l sun.txt
-rw-r--r-- 2 root root 2Array 04-22 21:02 sun.txt 注:是不是達到目的了?是的!
每個三位的許可權程式碼(分別是屬主、屬組,其它使用者)組合,有8種可能;
八進位制數字 許可權
0 ---
1 --x
2 -w-
3 -wx
4 r--
5 r-x
6 rw-
7 rwx
註解:我們可以根據上面的數字列表來組合許可權,比如我想讓屬主擁有 rwx(所對應的數字是7),屬組擁有 --x(所對應的
數字是1),其它使用者擁有 ---(所對應的數字是0),這樣我們把各組的許可權組合起來就是是 rwx--x---(對應的數字是710)。
[[email protected] ~]# ls -l sun.txt
-rw-r--r-- 2 root root 2Array 04-22 21:02 sun.txt
[[email protected] ~]# chmod 710 sun.txt
[[email protected] ~]# ls -l sun.txt
-rwx--x--- 2 root root 2Array 04-22 21:02 sun.txt
如果我們想改變的僅僅是開啟目錄的許可權 ,不用加任何引數。如果想把目錄以下的所有檔案或子目錄改變,應該加-R引數;
[[email protected] ~]# ls -ld testdir/
drwxr-xr-x 3 root root 40Array6 04-24 11:01 testdir/
[[email protected] ~]# ls -lr testdir/
總計 4
-rw-r--r-- 1 root root 0 04-24 11:01 sir01.txt
drwxr-xr-x 2 root root 40Array6 04-24 11:01 linuxsir
我們僅僅改變testdir的許可權,讓其擁有屬主可讀可寫、屬組可讀、其它使用者可讀,也就是rw-r--r-- ,用八進位制的算數應該
是644。
[[email protected] ~]# ls -ld testdir/ 注:我們檢視到的testdir目錄的許可權是rwxr--r--;
drwxr-xr-x 3 root root 40Array6 04-24 11:01 testdir/
[[email protected] ~]# chmod 644 testdir/
[[email protected] ~]# ls -ld testdir/
drw-r--r-- 3 root root 40Array6 04-24 11:01 testdir/ 注:改變成功;
[[email protected] ~]# ls -lr testdir/ 注:我們檢視一下testdir目錄下的子目錄是否改變了?
嘗試一下改變testdir及其子目錄和檔案許可權都要改變為 rw-r--r--許可權。我們要用到-R引數;
[[email protected] ~]# chmod -R 644 testdir/ 注:我們改變testdir下所有的檔案或子目錄的許可權都為 rw-r--r--
[[email protected] ~]# ls -ld testdir/
drw-r--r-- 3 root root 40Array6 04-24 11:01 testdir/
[[email protected] ~]# ls -lr testdir/
總計 4
-rw-r--r-- 1 root root 0 04-24 11:01 sir01.txt
drw-r--r-- 2 root root 40Array6 04-24 11:01 linuxsir
值得注意的是:chmod 改變一個目錄下的所有.file時,要小心操作。比如我們要改變testdir下的所有.file 的許可權為 rwxr
--r--,但我們不想改變testdir目錄的許可權 。下面的例子操作是錯誤的。
[[email protected] ~]# ls -ld testdir/
drw-r--r-- 3 root root 40Array6 04-24 11:01 testdir/
[[email protected] ~]# ls -lr testdir/
總計 4
-rw-r--r-- 1 root root 0 04-24 11:01 sir01.txt
drw-r--r-- 2 root root 40Array6 04-24 11:01 linuxsir
[[email protected] ~]# chmod -R 755 testdir/.* 注:這樣操作,會把testdir目錄的許可權一併改為 rwxr--r--
[[email protected] ~]# ls -ld testdir/
drwxr-xr-x 3 root root 40Array6 04-24 11:01 testdir/
所以當您想改變一個目錄下的所有.file許可權,並且想保留該目錄的原有許可權時,請不要用.*萬用字元。至於應該怎麼做,我想
大家都明白。比如下面的匹配;
[[email protected] ~]# chmod -R 644 testdir/.[a-z]*
上面的例子chmod 會匹配所有以.a到.z 開頭的檔案。
4.22 通過 chmod 助記語法來改變檔案或目錄的許可權;
chmod 的助記語法相對簡單,對檔案或目錄許可權的改變時,是通過比較直觀的字元的形式來完成;在助記語法中,相關字母的
定義;
使用者或使用者組定義:
u 代表屬主
g 代表屬組
o 代表其它使用者
a 代表屬主、屬組和其它使用者,也就是上面三個使用者(或組)的所有;
許可權定義字母:
r 代表讀許可權;
w 代表寫許可權;
x 代表執行許可權;
許可權增減字元;
- 代表減去相關許可權;
+ 代表增加相關許可權;
示例一:
[[email protected] ~]# ls -l linuxsir007.txt
-rwxr-xr-x 1 root root 0 04-23 20:11 linuxsir007.txt
[[email protected] ~]# chmod ugo-x linuxsir007.txt 注:把屬主、使用者組及其它使用者的執行許可權都減掉;
[[email protected] ~]# ls -l linuxsir007.txt
-rw-r--r-- 1 root root 0 04-23 20:11 linuxsir007.txt
示例二:
[[email protected] ~]# ls -l linuxsir007.txt
-rw-r--r-- 1 root root 0 04-23 20:11 linuxsir007.txt
[[email protected] ~]# chmod u+x linuxsir007.txt 注:為檔案的屬主增加執行許可權
[[email protected] ~]# ls -l linuxsir007.txt
-rwxr--r-- 1 root root 0 04-23 20:11 linuxsir007.txt
示例三:
[[email protected] ~]# ls -l linuxsir007.txt
-rwxr--r-- 1 root root 0 04-23 20:11 linuxsir007.txt
[[email protected] ~]# chmod u-x,go+rw linuxsir007.txt 注:減去檔案屬主對檔案的執行權,增加屬組和其它使用者對檔案的
可讀可寫權;
[[email protected] ~]# ls -l linuxsir007.txt
-rw-rw-rw- 1 root root 0 04-23 20:11 linuxsir007.txt
用助記語法比較靈活,組合起來比較方便;比如;
u=r+x 為檔案屬主新增讀寫許可權;
ug=rwx,o=r 為屬主和屬組新增讀、寫、執行許可權,為其它使用者設定讀許可權。
a+x 為檔案的屬主、屬組和其它使用者新增執行許可權;
g=u 讓檔案的屬組和屬主和許可權相同;
對於目錄許可權的設定,要用到-R引數;
和八進位制方法一樣,如果我們為一個目錄及其下的子目錄和檔案具有相同的屬性,就可以用-R引數;
[[email protected] ~]# chmod -R a+rwx testdir/
[[email protected] ~]# ls -lr testdir/
總計 4
-rwxrwxrwx 1 root root 0 04-24 11:01 sir01.txt
drwxrwxrwx 2 root root 40Array6 04-24 11:01 linuxsir
4.3 預設許可權分配的命令 umask ;
umask 是通過八進位制的數值來定義使用者建立檔案或目錄的預設許可權。umask 表示的是禁止許可權。不過檔案和目錄有點不同。
對於檔案來說,umask 的設定是在