Linux :文件和目錄的屬性

 

Linux 文件和目錄的屬性


摘要:本文講述的是文件或目錄的屬性,比如節點inode、文件類型、文件權限及歸屬;還對setuid、setgid及粘貼位進行了一般性的講解。對ln 、chmod、umask、chown、chgrp 、touch 的用法也進行了比較詳細的說明和舉例;

目錄

1、 Linux 文件的屬性概說;
2、 關於inode;

2.10 inode 相同的文件是硬鏈接文件;
2.11 創建硬鏈接,硬鏈接和源文件關係;
2.12 軟鏈接的創建,及軟接與源文件的關係;

3、文件類型;
4、文件的權限;

4.1 關於權限位;
4.2 改變權限的命令 chmod ;

 

4.21 通過 chmod 八進制語法來改變文件或目錄的權限;
4.22 通過 chmod 助記語法來改變文件或目錄的權限;

4.3 默認權限分配的命令 umask ;

5、setuid和setgid 位;

5.1 setuid和setgid的解說 ;
5.2 setuid和setgid的實例應用;
5.3 setuid和setgid的設置方法;

6、粘貼位及設置方法;
7、文件或目錄的歸屬關係;

7.1 改變文件的當屬關係的工具 chown ;
7.2 改變文件的屬組工具 chgrp ;
7.3 文件屬主和屬組的特殊情況 ;

8、影響文件的讀寫執行的因素;
9、文件被修改或被訪問的時間;
10、文件屬性和文件系統屬性的關係;
11、關於本文;
12、後記;
13、參考文檔;
14、相關文檔;


+++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++


1、 Linux 文件屬性概說;

Linux 文件或目錄的屬性主要包括:文件或目錄的節點、種類、權限模式、鏈接數量、所歸屬的用戶和用戶組、最近訪問或修改的時間等內容;

 

[root@localhost ~]# ls -lih
總計 104K

2408949 -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爲例:

 

2408949 -rwxr-xr-x 1 root root    7 04-21 12:47 lsfile.sh

 

inode 的值是:2408949
文件類型:文件類型是-,表示這是一個普通文件; 關於文件的類型,請參考:《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節點了;比如我們前面所說的例子;

 

[root@localhost ~]# ls -li lsfile.sh
2408949 -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh

 

lsfile.sh 的inode值是 2408949 ; 查看一個文件或目錄的inode,要通過ls 命令的的 -i參數。


2.10 inode 相同的文件是硬鏈接文件;

在Linux 文件系統中,inode值相同的文件是硬鏈接文件,也就是說,不同的文件名,inode可能是相同的,一個inode值可以對應多個文件。理解鏈接文件並不難,看看例子就會了。在Linux中,鏈接文件是通過ln工具來創建的。


2.11 創建硬鏈接,硬鏈接和源文件關係;

用ln 創建文件硬鏈接的語法:

 

# ln   源文件   目標文件

 

下面我們舉一個例子,在這個例子中,我們要爲sun.txt 創建其硬鏈接sun002.txt。然後看一下sun.txt和sun002.txt的屬性的變化;

[root@localhost ~]# ls -li sun.txt   注:查看sun.txt的屬性;
2408263 -rw-r--r-- 1  root root 29 04-22 21:02 sun.txt   注:這是sun.txt的屬性;

[root@localhost ~]# ln  sun.txt sun002.txt  注:我們通過ln 來創建sun.txt的硬鏈接文件sun002.txt

[root@localhost ~]# ls -li sun*   注:我們列一下sun.txt 和sun002.txt

2408263 -rw-r--r-- 2 root root 29 04-22 21:02 sun002.txt
2408263 -rw-r--r-- 2 root root 29 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 是不是能看到其內容。

 

[root@localhost ~]# rm -rf sun.txt
[root@localhost ~]# more sun002.txt 

 

注意:硬鏈接不能爲目錄創建,只有文件才能創建硬鏈接。


2.12 軟鏈接的創建,及軟接與源文件的關係;

創建軟鏈接(也被稱爲符號鏈接)的語法;

 

# ln   -s  源文文件或目錄     目標文件或目錄

 

軟鏈接也叫符號鏈接,他和硬鏈接有所不同,軟鏈接文件只是其源文件的一個標記。當我們刪除了源文件後,鏈接文件不能獨立存在,雖然仍保留文件名,但我們卻不能查看軟鏈接文件的內容了。

 

[root@localhost ~]# ls -li linuxsir001.txt
2408274 -rw-r--r-- 1 root root 29 04-22 21:53 linuxsir001.txt

[root@localhost ~]# ln -s linuxsir001.txt linuxsir002.txt

[root@localhost ~]# ls -li linuxsir001.txt linuxsir002.txt
2408274 -rw-r--r-- 1 root root 29 04-22 21:53 linuxsir001.txt
2408795 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的軟鏈接文件。

值得我們注意的是:當我們修改鏈接文件的內容時,就意味着我們在修改源文件的內容。當然源文件的屬性也會發生改變,鏈接文件的屬性並不會發生變化。當我們把源文件刪除後,鏈接文件只存在一個文件名,因爲失去了源文件,所以軟鏈接文件也就不存在了。這一點和硬鏈接是不同的;

 

[root@localhost ~]# rm -rf linuxsir001.txt  注:刪除linuxsir001.txt
[root@localhost ~]# ls -li linuxsir002.txt  注:查看linuxsir002 的屬性;
2408795 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt

[root@localhost ~]# more linuxsir002.txt  注:查看linuxsir002.txt的內容; 
linuxsir002.txt: 沒有那個文件或目錄       注:得到提示,linuxsir002.txt不存在。

 

上面的例子告訴我們,如果一個鏈接文件失去了源,就意味着他已經不存在了;

我們可以看到軟鏈接文件,其實只是源文件的一個標記,當源文件失去時,他也就是存在了。軟鏈接文件只是佔用了inode來存儲軟鏈接文件屬性等信息,但文件存儲是指向源文件的。

軟件鏈接,可以爲文件或目錄都適用。無論是軟鏈接還是硬鏈接,都可以用rm來刪除。rm工具是通用的。


3、文件類型;

當用ls指令的長格式顯示文件或目錄的屬性時;比如:

 

[root@localhost ~]# ls -lih
總計 104K

2408949 -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文件可以分爲如普通文件、目錄、符號鏈接文件、字符和塊設備文件、套接口文件等。

詳情請參考 :《Linux 文件類型和文件的擴展名》


4、文件的權限;

Linux文件或目錄的權限是和用戶和用戶組聯繫在一起的,所以理解這部份內容,您首先得了解一下Linux用戶管理方面的知識 。請參考 :《Linux 用戶(user)和用戶組(group)管理概述》。如果您是新手,要把這篇文檔的相關文檔也瞭解一下,這對您理解本文真的很重要;

每個文件或目錄都有一組9個權限位,每三位被分爲一組,他們分別是屬主權限位(佔三個位置 )、用戶組權限位(佔三個位置)、其它用戶權限位(佔三個位置)。比如rwxr-xr-x ,我們數一下就知道是不是9個位置了,正是這9個權限位來控制文件屬主、用戶組以及其它用戶的權限。


4.1 關於權限位;

Linux文件或目錄的權限位是由 9 個權限位來控制,每三位爲一組,它們分別是文件屬主(Ower)的讀、寫、執行,用戶組(Group)的讀、寫、執行以及(Other)其它用戶的讀、寫、執行;

文件屬主: 讀r、寫w、執行x
用 戶  組 : 讀r、寫w、執行x
其它用戶: 讀r、寫w、執行x 

如果權限位不可讀、不可寫、不可執行,是用-來表示。


對於普通文件的讀、寫、執行權限可以這樣理解:

 

可讀:意味着我們可以查看閱讀;
可寫:意味着,可以修改或刪除(不過刪除或修改的權限受父目錄上的權限控制);
可執行:意味着如果文件就可以運行,比如二進制文件(比如命令),或腳本(要用腳本語言解釋器來解釋運行)。

 

比如:

[root@localhost ~]# 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(可讀、可寫)權限。這9個權限連在一起就是 rwxr-xr-x,也就是說,lsfile.sh 文件,文件屬主root擁有可讀、可寫、可執行權限,用戶組root下的所有用戶擁有可讀可執行權限,其它用戶擁有可讀可執行權限。

查看文件的屬性用 ls -l 文件 ;查看目錄的屬性是 ls -d 目錄。請參考 :


4.2 改變權限的命令 chmod ;

chmod 是用來改變文件或目錄權限的命令,但只有文件的屬主和超級權限用戶root纔有這種權限。通過chmod 來改變文件或目錄的權限有兩種方法,一種是通過八進制的語法,另一種是通過助記語法;

舉例:

 

[root@localhost ~]# touch linuxsir007.txt  注:創建linuxsir007.txt文件;
[root@localhost ~]# touch linuxsir008.txt  注:創建linuxsir008.txt 文件;

[root@localhost ~]# 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 文件屬性;


[root@localhost ~]# chmod 755 linuxsir007.txt    注:通過八進制語法來改變linuxsir007.txt的權限;
[root@localhost ~]# chmod u+x,og+x linuxsir008.txt  注:通過助記語法來改變linuxsir008.txt的權限;
[root@localhost ~]# 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 八進制語法來改變文件或目錄的權限;

我們前面已經說了,文件或目錄的權限位總共有9個位置 ,文件屬主、文件所歸屬的組佔用三位和其它用戶各佔用三個位置。看個例子:

 

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

 

[root@localhost ~]# ls -l sun.txt
-rwxr-xr-x 2 root root 29 04-22 21:02 sun.txt 注:查看sun.txt的屬性,我們看到sun.txt的權限位是rwxr-xr-x,用八進制數字表示是755 ;

[root@localhost ~]# chmod 644 sun.txt  注;我們改變它的權限爲屬主可讀可寫、屬組可讀、其它用戶可讀,也就是rw-r--r--,用數字表示就是644;

[root@localhost ~]# ls -l sun.txt
-rw-r--r-- 2 root root 29 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)。

 

[root@localhost ~]# ls -l sun.txt
-rw-r--r-- 2 root root 29 04-22 21:02 sun.txt

[root@localhost ~]# chmod 710 sun.txt

[root@localhost ~]# ls -l sun.txt
-rwx--x--- 2 root root 29 04-22 21:02 sun.txt

 


如果我們想改變的僅僅是打開目錄的權限 ,不用加任何參數。如果想把目錄以下的所有文件或子目錄改變,應該加-R參數;

 

[root@localhost ~]# ls -ld testdir/
drwxr-xr-x 3 root root 4096 04-24 11:01 testdir/

[root@localhost ~]# ls -lr  testdir/
總計 4
-rw-r--r-- 1 root root    0 04-24 11:01 sir01.txt
drwxr-xr-x 2 root root 4096 04-24 11:01 linuxsir

 

我們僅僅改變testdir的權限,讓其擁有屬主可讀可寫、屬組可讀、其它用戶可讀,也就是rw-r--r-- ,用八進制的算數應該是644。

 

[root@localhost ~]# ls -ld testdir/  注:我們查看到的testdir目錄的權限是rwxr--r--;
drwxr-xr-x 3 root root 4096 04-24 11:01 testdir/ 

[root@localhost ~]# chmod 644  testdir/

[root@localhost ~]# ls -ld testdir/
drw-r--r-- 3 root root 4096 04-24 11:01 testdir/  注:改變成功;

[root@localhost ~]# ls -lr testdir/  注:我們查看一下testdir目錄下的子目錄是否改變了?

 

嘗試一下改變testdir及其子目錄和文件權限都要改變爲 rw-r--r--權限。我們要用到-R參數;

 

[root@localhost ~]# chmod -R 644 testdir/ 注:我們改變testdir下所有的文件或子目錄的權限都爲 rw-r--r--

[root@localhost ~]# ls -ld testdir/
drw-r--r-- 3 root root 4096 04-24 11:01 testdir/
[root@localhost ~]# ls -lr  testdir/
總計 4
-rw-r--r-- 1 root root    0 04-24 11:01 sir01.txt
drw-r--r-- 2 root root 4096 04-24 11:01 linuxsir

 

值得注意的是:chmod 改變一個目錄下的所有.file時,要小心操作。比如我們要改變testdir下的所有.file 的權限爲 rwxr--r--,但我們不想改變testdir目錄的權限 。下面的例子操作是錯誤的。

 

[root@localhost ~]# ls -ld testdir/
drw-r--r-- 3 root root 4096 04-24 11:01 testdir/

[root@localhost ~]# ls -lr testdir/
總計 4
-rw-r--r-- 1 root root    0 04-24 11:01 sir01.txt
drw-r--r-- 2 root root 4096 04-24 11:01 linuxsir

[root@localhost ~]# chmod -R 755 testdir/.*  注:這樣操作,會把testdir目錄的權限一併改爲  rwxr--r--

[root@localhost ~]# ls -ld testdir/
drwxr-xr-x 3 root root 4096 04-24 11:01 testdir/ 

 

所以當您想改變一個目錄下的所有.file權限,並且想保留該目錄的原有權限時,請不要用.*通配符。至於應該怎麼做,我想大家都明白。比如下面的匹配;

 

[root@localhost ~]# chmod -R 644  testdir/.[a-z]*

 

上面的例子chmod 會匹配所有以.a到.z 開頭的文件。


4.22 通過 chmod 助記語法來改變文件或目錄的權限;

chmod 的助記語法相對簡單,對文件或目錄權限的改變時,是通過比較直觀的字符的形式來完成;在助記語法中,相關字母的定義;


用戶或用戶組定義:

u 代表屬主
g 代表屬組
o 代表其它用戶
a 代表屬主、屬組和其它用戶,也就是上面三個用戶(或組)的所有;


權限定義字母:

r 代表讀權限;
w 代表寫權限;
x 代表執行權限;


權限增減字符;

- 代表減去相關權限;
+ 代表增加相關權限;

示例一:

 

[root@localhost ~]# ls -l linuxsir007.txt
-rwxr-xr-x 1 root root 0 04-23 20:11 linuxsir007.txt

[root@localhost ~]# chmod ugo-x linuxsir007.txt  注:把屬主、用戶組及其它用戶的執行權限都減掉;

[root@localhost ~]# ls -l linuxsir007.txt
-rw-r--r-- 1 root root 0 04-23 20:11 linuxsir007.txt

 

示例二:

 

[root@localhost ~]# ls -l linuxsir007.txt
-rw-r--r-- 1 root root 0 04-23 20:11 linuxsir007.txt

[root@localhost ~]# chmod u+x linuxsir007.txt  注:爲文件的屬主增加執行權限 

[root@localhost ~]# ls -l linuxsir007.txt 
-rwxr--r-- 1 root root 0 04-23 20:11 linuxsir007.txt

 

示例三:

 

[root@localhost ~]# ls -l linuxsir007.txt 
-rwxr--r-- 1 root root 0 04-23 20:11 linuxsir007.txt

[root@localhost ~]# chmod u-x,go+rw linuxsir007.txt  注:減去文件屬主對文件的執行權,增加屬組和其它用戶對文件的可讀可寫權;

[root@localhost ~]# 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參數;

 

[root@localhost ~]# chmod -R a+rwx testdir/
[root@localhost ~]# ls -lr testdir/
總計 4
-rwxrwxrwx 1 root root    0 04-24 11:01 sir01.txt
drwxrwxrwx 2 root root 4096 04-24 11:01 linuxsir

 


4.3 默認權限分配的命令 umask ;

umask 是通過八進制的數值來定義用戶創建文件或目錄的默認權限。umask 表示的是禁止權限。不過文件和目錄有點不同。

 

對於文件來說,umask 的設置是在假定文件擁有八進制666權限上進行,文件的權限就是是666減去umask的掩碼數值;
對於目錄來說,umask 的設置是在假定文件擁有八進制777權限上進行,目錄八進制權限777減去umask的掩碼數值;

 

實例一:

 

[root@localhost ~]# umask 066

[root@localhost ~]# mkdir testdir003

[root@localhost ~]# ls -ld testdir003/
drwx--x--x 2 root root 4096 04-24 15:01 testdir003/

[root@localhost ~]# ls -lh sun998.txt
-rw------- 1 root root 0 04-25 15:57 sun998.txt

 

實例二:

系統用戶的家目錄的權限是通過在配置文件中指定的,比如Fedora 中是用的 /etc/login.defs文件;

其中有這樣一段:

 

CREATE_HOME     yes
UMASK           077

 

表示的意思是,當我們創建用戶時,他的家目錄umask的數值是077 。我們怎麼理解這個077呢。當用戶添加時,系統自動在/home中創建用戶的家目錄,並且設置它的權限爲777-077=711 ,也就是rwx------ ;我們看一下/home下的某個用戶的家目錄是不是這樣的呢?

 

[root@localhost ~]# ls -ld ~beinan
drwx------ 36 beinan beinan 4096 04-24 15:08 /home/beinan

 

umask 一般都是放在用戶相關SHELL的配置文件中,比如用戶家目錄下的.bashrc 或.profile ,也可以放在全局性的用戶配置文件中,比如 /etc/login.defs,還可以放在SHELL全局的配置文件中,比如/etc/profile 或/etc/bashrc或/etc/csh.cshrc 等;

umask 放在相關的配置文件中,目的是當管理員創建用戶時,系統會自動爲用戶創建文件或目錄時配置默認的權限代碼。


5、setuid和setgid 位;

本部份內容做爲了解,看看就行了;


5.1 setuid和setgid的解說 ;

setuid 和setgid位是讓普通用戶可以以root用戶的角色運行只有root帳號才能運行的程序或命令。比如我們用普通用戶運行passwd命令來更改自己的口令,實際上最終更改的是/etc/passwd文件。我們知道/etc/passwd文件是用戶管理的配置文件,只有root權限的用戶才能更改。

 

[root@localhost ~]# ls -l /etc/passwd
-rw-r--r-- 1 root root 2379 04-21 13:18 /etc/passwd

 

作爲普通用戶如果修改自己的口令通過修改/etc/passwd肯定是不可完成的任務,但是不是可以通過一個命令來修改呢。答案是肯定的,作爲普通用戶可以通過passwd 來修改自己的口令。這歸功於passwd命令的權限。我們來看一下;

 

[root@localhost ~]# ls -l /usr/bin/passwd
-r-s--x--x 1 root root 21944 02-12 16:15 /usr/bin/passwd

 

因爲/usr/bin/passwd 文件已經設置了setuid 權限位(也就是r-s--x--x中的s),所以普通用戶能臨時變成root,間接的修改/etc/passwd,以達到修改自己口令的權限。

我們在《Linux 系統中的超級權限的控制》中有提到過。我們知道Linux的用戶管理是極爲嚴格的,不同的用戶擁有不同的權限,爲了完成只有root用戶才能完成的工作,我們必須爲普通用戶提升權限,最常用的方法就是su或sudo。雖然setuid 和setgid也是讓普通用戶超越自身擁有的普通權限達到root權限的方法,但我不推薦大家使用,因爲它能爲系統帶來安全隱患!!

注意:setuid和setgid會面臨風險,所以儘可能的少用,瞭解瞭解既可~~~


5.2 setuid和setgid的實例應用;

我們想讓一個普通用戶beinan擁有root用戶擁有超級rm刪除權限,我們除了用su或sudo 臨時切換到 root身份操作以外,還能怎麼做呢???

 

[root@localhost ~]#cd /home  注:進入/home目錄
[root@localhost home]# touch beinantest.txt  注:創建一個測試文件;

[root@localhost home]# ls -l beinantest.txt  注:查看文件屬性;
-rw-r--r-- 1 root root 0 04-24 18:03 beinantest.txt  注:文件的屬性;

[root@localhost home]# su beinan  注:切換到普通用戶 beinan
[beinan@localhost home]$ rm -rf beinantest.txt  注:以普通用戶身份來刪除beinantest.txt文件;

rm: 無法刪除 “beinantest.txt”: 權限不夠

 

那我們怎麼才能讓beinan 這個普通用戶也擁有root超級的rm 刪除功力呢?

 

[root@localhost ~]# ls -l /bin/rm
-rwxr-xr-x 1 root root 93876 02-11 14:43 /bin/rm

[root@localhost ~]# chmod 4755 /bin/rm  注:設置rm的權限爲4755 , 就把setuid 位設置好了。
[root@localhost ~]# ls -l /bin/rm
-rwsr-xr-x 1 root root 43980 02-11 14:43 /bin/rm

[root@localhost ~]# cd /home/
[root@localhost home]# su beinan  注:切換到beinan用戶身份;
[root@localhost home]$ ls -l beinantest.txt  注:查看文件屬性;
-rw-r--r-- 1 root root 0 04-24 18:03 beinantest.txt  注:文件的屬性;

[beinan@localhost home]$ rm -rf beinantest.txt 注:刪除beinantest.txt文件;

 

我們只是設置了rm的setuid位,讓普通用戶在rm指令上有超級root的刪除超級權力。

通過這個例子,我們應該能明白setuid和setgid位的應用了,如同前面所說,讓普通用戶超越本身的能力,讓普通用戶能執行只有root才能執行的命令。在這一點,我們要和su和sudo 區分開來。請參見su和sudo的文檔:《Linux 系統中的超級權限的控制》


5.3 setuid和setgid的設置方法;


第一種方法:八進制方法:

setuid位是的設置用八進制的4000,setgid佔用的是八進制的2000 ;比如我們前面所說的 chmod 4755 /bin/rm 就是設置的setuid位;

至於setuid的設置方法,只是在我們通過chmod設置文件或目錄權限位的八進制方法的前面多加一個數字,也就是4。比如:

 

[root@localhost ~]# chmod 4755 /bin/rm  注:設置rm的權限爲4755 , 就把setuid 位設置好了。

 


作爲setgid 位佔用的是八進制的2000位,我們下面舉個例子;

 

[root@localhost ~]# cd /home/
[root@localhost home]# mkdir slackdir

[root@localhost home]# ls -ld slackdir/
drwxr-xr-x 2 root root 4096 04-24 18:25 slackdir/

[root@localhost home]# chmod 2755 slackdir/

[root@localhost home]# ls -ld slackdir/
drwxr-sr-x 2 root root 4096 04-24 18:25 slackdir/

 

我們看到 slackdir這個目錄,經過改變權限後的,目錄所歸屬用戶組的那三個權限位是 r-s。 如果我們見到的是小寫的s,表明文件所歸屬的用戶組位有執行權限x。因爲我們用了2755 ,意思是說文件屬主擁有可讀可寫可執行權限,所歸屬的用戶組擁有可讀可執行權限,並且設置了setuid,所以這時本來文件所歸屬的用戶組擁有r-x,現在加了setgid位,就把其中的x換成了s。如果文件所歸屬的用戶組沒有執行權限,這個權限應該是S。同理setuid位的中的大寫的S和小寫的s,也是這個原理。見下面的例子;

 

[root@localhost home]# chmod 2740  slackdir/
[root@localhost home]# ls -ld slackdir/
drwxr-S--- 2 root root 4096 04-24 18:25 slackdir/

 

這個例子是因爲目錄slackdir所歸屬的組沒有執行權限,這時本來在執行權限位上顯示-,由於有了setuid,所以顯示爲S。

如果我們爲一個文件的權限擁有 屬主可讀可寫可執行、所歸的組擁有可讀可執行,其它用戶可讀可執行,並且同時設置setuid和setgid位,我們應該怎麼運行命令呢?

 

[root@localhost ~]# touch gooddoc.txt

[root@localhost ~]# ls -l gooddoc.txt
-rw-r--r-- 1 root root 0 04-24 18:47 gooddoc.txt

[root@localhost ~]# chmod 6755 gooddoc.txt

[root@localhost ~]# ls -l gooddoc.txt
-rwsr-sr-x 1 root root 0 04-24 18:47 gooddoc.txt

 

所以,同時設置setuid和setgid,就是把setuid和setgid兩個八進位的值相加 (4000+2000=6000),然後加上文件或目錄的權限位的三位數值(上面的例子是755),然後通過chmod 運行就行了。所以上面例子中用了6755 。


第二種方法:通過助記語法;

還是延用chmod的助記語法,通過u+s 或u-s 來增減setuid位,同理,我們可以通過g+s 或g-s 來setgid位;

 

[root@localhost ~]# touch  mydoc.txt  注:創建一個文件;

[root@localhost ~]# ls -l mydoc.txt
-rw-r--r-- 1 root root 0 04-24 19:00 mydoc.txt

[root@localhost ~]# chmod u+s mydoc.txt

[root@localhost ~]# ls -l mydoc.txt
-rwSr--r-- 1 root root 0 04-24 19:00 mydoc.txt

 

我們也可以用file命令來查看setuid和setgid位,當然也能用file來查看文件的類型;

比如:

[root@localhost ~]# file /usr/bin/passwd


6、粘貼位及設置方法;

粘貼位的理解,我們還是先看一個例子;

 

[root@localhost ~]# ls -ld /tmp/

drwxrwxrwt 12 root root 4096 04-24 18:36 /tmp/

 

我們看到/tmp權限位最後的一個字母是 t。這就是設置了粘貼位。

粘貼位的設置,可以用八進制的1000位來設置。比如

 

[root@localhost ~]# mkdir googledir
[root@localhost ~]# ls -ld googledir/
drwxr-xr-x 2 root root 4096 04-24 21:59 googledir/
[root@localhost ~]# chmod 1755 googledir/
[root@localhost ~]# ls -ld googledir/
drwxr-xr-t 2 root root 4096 04-24 21:59 googledir/

 

也可以用chmod 的助記語法來設置。用o+t表示設置粘帖位,用o-t表示取消粘貼位;

 

[root@localhost ~]# ls -ld googledir/
drwxr-xr-x 2 root root 4096 04-24 21:59 googledir/

[root@localhost ~]# chmod o+t googledir/

[root@localhost ~]# ls -ld googledir/
drwxr-xr-t 2 root root 4096 04-24 21:59 googledir/

 

粘貼位現在也很少用了,不過對於象/tmp目錄這樣的,是整個系統臨時文件存放在,還是有點意義。一個目錄既使它的所有權限都開放rwxrwxrwx,如果是設置了粘帖位,除非目錄的屬主和root用戶有權限刪除它,除此之外其它用戶不能刪除這個目錄。用途一般是把一個文件夾的的權限都打開,然後來共享文件,象/tmp目錄一樣。

建議最好不要用!


7、文件或目錄的歸屬關係;

文件或目錄的歸屬關係主要定義文件歸屬哪個用戶所有及歸於哪個用戶組所有。

 

[root@localhost ~]# ls -ld dony.txt
-rw-rw-rw- 1 root root 0 04-24 15:05 dony.txt

 

上面的例子表示,dony.txt 這個文件,其屬主是root,歸屬的組是root用戶組,而root用戶所擁有的權限是rw-,root用戶組擁有的權限是rw-。

有時我們可能不理解,爲什麼Linux要設置文件的屬主、屬組,爲什麼還要爲屬主、屬組和其它用戶都要設置權限呢??我們在以前的文檔說過,Linux是多用戶的操作系統,文件的安全性對Linux是極爲重要的,Linux的安全性主要表示在用戶管理和權限(用戶的權限及文件的權限)管理上。


7.1 改變文件的當屬關係的工具 chown ;

當我們要改變一個文件的屬組,我們所使用的用戶必須是該文件的屬主而且同時是目標屬組成員,或超級用戶。只有超級用戶的才能改變文件的屬主。

chown 語法:

 

#chown [選項]... [所有者][:[組]] 文件...

 

舉例:將example.txt文件的屬主改爲linuxsirorg用戶;

 

[root@localhost ~]# ls -l example.txt
-rw-r--r-- 1 root root 0 04-24 22:37 example.txt

[root@localhost ~]# ls -l example.txt
-rw-r--r-- 1 linuxsirorg root 0 04-24 22:37 example.txt

[root@localhost ~]# chown beinan:root example.txt
[root@localhost ~]# ls -l example.txt
-rw-r--r-- 1 beinan root 0 04-24 22:37 example.txt

 


chown 所接的新的屬主和新的屬組之間應該以.或:連接,屬主和屬組之一可以爲空。如果屬主爲空,應該是 :屬組 ;如果屬組爲空 就就不必需要.或:了。

 

[root@localhost ~]# ls -l sun.txt
-rwxr-xr-x 2 root root 29 04-22 21:02 sun.txt

[root@localhost ~]# chown beinan sun.txt  注:把sun.txt文件的屬主改爲beinan;

[root@localhost ~]# ls -l sun.txt
-rwxr-xr-x 2 beinan root 29 04-22 21:02 sun.txt

[root@localhost ~]# chown  :beinan sun.txt  注:把sun.txt文件的屬組改爲beinan

[root@localhost ~]# ls -l sun.txt
-rwxr-xr-x 2 beinan beinan 29 04-22 21:02 sun.txt

[root@localhost ~]# chown  root:linuxsir sun.txt   注:把sun.txt的屬主改爲root,把改組改爲linuxsir用戶組;
[root@localhost ~]# ls -l sun.txt
-rwxr-xr-x 2 root  linuxsir 29 04-22 21:02 sun.txt

 


chown 也提供了-R參數,這個參數對目錄改變屬主和屬組極爲有用,我們可以通過加-R參數來改變某個目錄下的所有文件到新的屬主或屬組;

 

[root@localhost ~]# ls -ld mydir/ 注:查看mydir目錄的屬性
drwxr-xr-x 2 root root 4096 04-25 09:08 mydir/  注:我們發現此目錄的屬主是root用戶,屬組是root用戶組;

[root@localhost ~]# ls -lr mydir/  注:我們查看mydir目錄下的有什麼文件,及他們的屬主和屬組;
總計 8
-rwxr-xr-x 2 beinan      linuxsir 29 04-22 21:02 sun.txt
-rwxr-xr-x 2 beinan      linuxsir 29 04-22 21:02 sun002.txt
lrwxrwxrwx 1 root        root      7 04-21 22:16 sun001.txt -> sun.txt
-rw-r--r-- 1 linuxsirorg root      0 04-24 22:37 example.txt
-rw-rw-rw- 1 beinan      root      0 04-24 15:05 dony.txt

[root@localhost ~]# chown -R beinan:linuxsir mydir/  注:我們修改mydir及它的下級目錄和所有文件到新的用戶和用戶組;

[root@localhost ~]# ls -ld mydir/
drwxr-xr-x 2 beinan linuxsir 4096 04-25 09:08 mydir/

[root@localhost ~]# ls -lr mydir/
總計 8
-rwxr-xr-x 2 beinan linuxsir 29 04-22 21:02 sun.txt
-rwxr-xr-x 2 beinan linuxsir 29 04-22 21:02 sun002.txt
lrwxrwxrwx 1 beinan linuxsir  7 04-21 22:16 sun001.txt -> sun.txt
-rw-r--r-- 1 beinan linuxsir  0 04-24 22:37 example.txt
-rw-rw-rw- 1 beinan linuxsir  0 04-24 15:05 dony.txt

 


值得注意的是chown 和chmod 類似,我們 改變一個目錄下的所有.file時的屬主和屬組時要小心操作。比如我們要改變testdir及它目錄下的所有.file 的屬主和改組時。下面的例子操作是錯誤的。

 

[root@localhost ~]# ls -ld /root/  注:查看/root目錄的屬性,主要看他的屬主和屬組;
drwxr-xr-x 19 root root 4096 04-25 09:20 /root/  注:屬主是root,屬組是root用戶組;

[root@localhost ~]# ls -ld /root/testdir/   注:查看/root/testdir 目錄的屬主和屬組;
drwxr-xr-x 2 root root 4096 04-25 09:20 /root/testdir/  注:屬主是root,屬組是root用戶組;

[root@localhost ~]# chown -R beinan:beinan /root/testdir/.*  注:改變/root/testdir目錄下的以.開頭的所有文件(注:假設我們是這麼想的)

[root@localhost ~]# ls -ld /root/  注:查看/root的屬性;
drwxr-xr-x 19 beinan beinan 4096 04-25 09:20 /root/  注:看到了吧,testdir 目錄的上組目錄/root的屬主和屬組也改變了。

[root@localhost ~]# ls -ld /root/testdir/ 注:查看testdir
drwxr-xr-x 2 beinan beinan 4096 04-25 09:20 /root/testdir/

 


所以我們用.*來匹配文件時,可能會存在讓chown 誤操作,這樣會連同父目錄的屬主和屬組的歸屬關係也被改變。


7.2 改變文件的屬組工具 chgrp ;

語法:

 

chgrp [參數選項]... 組 文件...

 

它的用戶和chown 類似,只不過它僅是用來改變文件或目錄的屬組的;-R參數用於目錄及目錄下所有文件改變屬組的。這和chown也是一樣的。簡單來兩個例子;

例子一:

 

[root@localhost ~]# ls -l sun.txt
-rw-r--r-- 1 root root 0 04-25 09:38 sun.txt

[root@localhost ~]# chgrp beinan sun.txt  注:改變sun.txt的屬組爲beinan用戶組;

[root@localhost ~]# ls -l sun.txt
-rw-r--r-- 1 root beinan 0 04-25 09:38 sun.txt

 

例子二:

 

[root@localhost ~]# ls -ld mydir/
drwxr-xr-x 2 root root 4096 04-25 09:08 mydir/
[root@localhost ~]# ls -lr mydir/
總計 8
-rwxr-xr-x 2 root root 29 04-22 21:02 sun.txt
-rwxr-xr-x 2 root root 29 04-22 21:02 sun002.txt
lrwxrwxrwx 1 root root  7 04-21 22:16 sun001.txt -> sun.txt
-rw-r--r-- 1 root root  0 04-24 22:37 example.txt
-rw-rw-rw- 1 root root  0 04-24 15:05 dony.txt


[root@localhost ~]# chgrp -R linuxsir mydir/  注:改變所mydir及其下面所有的文件及子目錄的屬組爲linuxsir;

[root@localhost ~]# ls -ld mydir/
drwxr-xr-x 2 root linuxsir 4096 04-25 09:08 mydir/

[root@localhost ~]# ls -lr mydir/
總計 8
-rwxr-xr-x 2 root linuxsir 29 04-22 21:02 sun.txt
-rwxr-xr-x 2 root linuxsir 29 04-22 21:02 sun002.txt
lrwxrwxrwx 1 root linuxsir  7 04-21 22:16 sun001.txt -> sun.txt
-rw-r--r-- 1 root linuxsir  0 04-24 22:37 example.txt
-rw-rw-rw- 1 root linuxsir  0 04-24 15:05 dony.txt

 


7.3 文件屬主和屬組的特殊情況 ;

 

[root@localhost ~]# ls -lh sungood.txt
-rw-r--r-- 1 501 502 85 04-25 13:45 sungood.txt

 

上面的例子是不是有點怪?因爲他的屬主和屬組都是一個數值;這是爲什麼呢?出現這種情況的原因是系統中不存在與之對應的用戶,所以只能以數字形式顯示了。有時我們刪除了用戶,但沒有刪除其家目錄,這種情況下,它的家目錄的屬主和屬組也會變成數字;

 

[root@localhost ~]# userdel linuxsir

[root@localhost ~]# ls -ld /home/linuxsir
drwx------ 16 501 502 4096 03-27 02:28 /home/linuxsir

 


8、影響文件的讀寫執行的因素;

之所以把這部份的內容單列出來,是因爲這部份的內容是基於我們對用戶管理及文件權限瞭解的基礎上進行的。比如一個文件的讀、寫、執行,它要受到哪幾方面的影響。

一個文件能不能被讀取,要受到它的屬主、屬組及其它用戶權限的影響,還要受到其父目錄權限的影響。我們來舉個例子;

 

[root@localhost ~]# cd /home  注:進入/home 目錄;

[root@localhost home]# mkdir redhatdir 注:創建一個目錄redhatdir
[root@localhost home]# touch redhatdir/test.txt  注:創建一個文件test.txt
[root@localhost home]# chmod 700 redhatdir/ 注:修改redhatdir的權限 ,爲屬主可讀可寫可執行,屬組和其它用戶無權限;

[root@localhost home]# ls -ld redhatdir/  注:查看redhatdir的屬性;
drwx------ 2 root root 4096 04-25 13:01 redhatdir/

[root@localhost home]# ls -lr redhatdir/  注:查看test.txt 文件的屬性;
總計 0
-rw-r--r-- 1 root root 0 04-25 13:02 test.txt

[root@localhost home]# su beinan 注:我們切換到普通用戶beinan

[beinan@localhost home]$ cd redhatdir/  注:進入redhatdir目錄,以beinan用戶身份。
bash: cd: redhatdir/: 權限不夠

[beinan@localhost home]$ more redhatdir/test.txt
redhatdir/test.txt: 權限不夠

 

解釋:我們通過這個例子來看,爲什麼test.txt在其它用戶權位上擁有可讀權限r--,但我們用普通用戶還不能查看它的內容呢?這是因爲他的父目錄沒有其它用戶的何讀權限。我們是不是redhatdir目錄的其它用戶可讀權限打開,就能讓普通用戶beinan能讀取 test.txt的內容了呢??

 

[root@localhost home]# chmod 704 redhatdir/ 
[root@localhost home]# ls -ld redhatdir/
drwx---r-- 2 root root 4096 04-25 13:02 redhatdir

[root@localhost home]# su beinan
[beinan@localhost home]$ cd redhatdir/
bash: cd: redhatdir/: 權限不夠

 

看來如果不設置屬組的權限,只打開屬主的權限及其它用戶在redhatdir目錄的讀權限的情況下,其它用戶是不能訪問的;我們應該把test.txt父目錄的 redhatdir 的屬主的讀、寫、執行要打開,還要把父目錄的屬組的讀和執行權限打開,其它用戶的讀和執行權限打開,也就是要擁有 rwxr-xr-x 權限,這樣文件的其它用戶才能訪問。

 

[root@localhost home]# chmod 755 redhatdir/
[root@localhost home]#  more  redhatdir/test.txt

 

好象這塊說的不太清楚,如果您看不太明白,多多chmod 練習練習,也沒有什麼難的。

其實爲文件分配權限的最終目的是讓文件的屬主有何權限,讓屬組下的用戶有何權限,讓其它用戶有何權限。文件權限是和用戶管理相關聯的,所以理解這方面的內容還得了解用戶管理。


9、文件被修改或被訪問的時間;

 

[root@localhost ~]# ls -l adduml02.sh
-rwxr-xr-x 1 root root 545 04-21 22:26 adduml02.sh

 

我們通過查看 文件的屬性時,會發現它的時間標記,比如上面的 04-21 22:26 。這個時間並不代表文件被創建的時候,他是代表文件被訪問或被修改的時間。文件被修改的時間比較好理解,比如我們可以用編輯器來修改文本文件,然後保存一下,這樣文件的時間就變了。

當然也有其它的工具不修改文件的內容,只修改文件的時間,這時可以被稱爲訪問時間。比如touch工具能達到這個目的。

 

[root@localhost ~]# ls -l adduml02.sh
-rwxr-xr-x 1 root root 545 04-21 22:26 adduml02.sh

[root@localhost ~]# touch  adduml02.sh  注:更新文件的訪問時間成爲當前系統時間;

[root@localhost ~]# ls -l adduml02.sh
-rwxr-xr-x 1 root root 545 04-25 11:21 adduml02.sh

 

關於touch 的用法, 更多的請參見: man touch或touch --help


10、文件屬性和文件系統屬性的關係;

文件系統的特性決定着文件屬性的定義和修改,比如我們通過 chattr 來鎖定一個文件爲不可修改或不可刪除時,要用到chattr 的+i參數;這在ext2和ext3文件系統是有效的,但在reiserfs 文件系統是沒有任何效果的;

 

[root@localhost ~]# chattr +i lsfile.sh

[root@localhost ~]# lsattr  lsfile.sh
----i-------- lsfile.sh

[root@localhost ~]# rm -rf lsfile.sh
rm: 無法刪除 “lsfile.sh”: 不允許的操作

 

注:如果把lsfile.sh變成可修改可刪除,應該用-i參數;

比如在ext3或ext2 文件系統中,我們要讓一個文件只能追加內容,但不能刪除。應該用chattr的+a參數。

如果您在用ext3文件系統,想查看chattr 的幫助,請man chattr 。


11、關於本文;

關於Linux文件系統相關的文章,我是寫過很多篇了,但感覺還是沒有把問題說的更明白一點。存在這樣問題的主要原因是Linux基礎知識都是關聯的。我們爲了把一個問題說的清楚,得解決其相當的知識,這是最讓人頭痛的。
有些更爲深入的東西可能我沒有能力去寫,一是因爲這些內容用的比較少,二是樣的內容理論性太強,表達想來極爲困難。比如ext3和reiserfs 文件系統的內幕,如果您想對這方面的瞭解,只能查看ext3和reiserfs 官方的文檔了。目前我沒有能力寫這樣的文檔。


12、後記;

我想在最近些天慢慢把一些常用的命令,以分類應用的形式介紹給初學的弟兄。但我不會搞成命令大全的形式。如果弄成命令大全的樣子,我看不如去查man 之類的。因爲man 說的更清晰,更明白。學爲所用,用爲所學,邊學邊用。有的東西並不一定要全懂,知道有這麼回事就行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章