Linux 文件和目錄的屬性

          Posted on 2009-05-12 09:17 閱讀(175) 評論(0)  編輯  收藏 所屬分類: linux技術(shù)

          目錄

          1、 Linux 文件的屬性概說;
          2、 關(guān)于inode;

          3、文件類型;
          4、文件的權(quán)限;

          5、setuid和setgid 位;

          6、粘貼位及設(shè)置方法;
          7、文件或目錄的歸屬關(guān)系;

          8、影響文件的讀寫執(zhí)行的因素;
          9、文件被修改或被訪問的時間;
          10、文件屬性和文件系統(tǒng)屬性的關(guān)系;
          11、關(guān)于本文;
          12、后記;
          13、參考文檔;
          14、相關(guān)文檔;


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


          1、 Linux 文件屬性概說;

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

          [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
          第二字段:文件種類和權(quán)限;
          第三字段: 硬鏈接個數(shù);
          第四字段: 屬主;
          第五字段:所歸屬的組;
          第六字段:文件或目錄的大小;
          第七字段和第八字段:最后訪問或修改時間;
          第九字段:文件名或目錄名

          我們以lsfile.sh為例:

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

           

          inode 的值是:2408949
          文件類型:文件類型是-,表示這是一個普通文件; 關(guān)于文件的類型,請參考:《Linux 文件類型和文件擴展》
          文件權(quán)限:文件權(quán)限是rwxr-xr-x ,表示文件屬主可讀、可寫、可執(zhí)行,文件所歸屬的用戶組可讀可執(zhí)行,其它用戶可讀可執(zhí)行;
          硬鏈接個數(shù): lsfile.sh這個文件沒有硬鏈接;因為數(shù)值是1,就是他本身;
          文件屬主:也就是這個文件歸哪于哪個用戶 ,它歸于root,也就是第一個root;
          文件屬組:也就是說,對于這個文件,它歸屬于哪個用戶組,在這里是root用戶組;
          文件大小:文件大小是7個字節(jié);
          訪問可修改時間 :這里的時間是最后訪問的時間,最后訪問和文件被修改或創(chuàng)建的時間,有時并不是一致的;

          當(dāng)然文檔的屬性不僅僅包括這些,這些是我們最常用的一些屬性。我們把比較重要的說一說,比如文件所歸屬的種類、權(quán)限、硬鏈接個數(shù) ... ...


          2、 關(guān)于inode;

          inode 譯成中文就是索引節(jié)點。每個存儲設(shè)備或存儲設(shè)備的分區(qū)(存儲設(shè)備是硬盤、軟盤、U盤 ... ... )被格式化為文件系統(tǒng)后,應(yīng)該有兩部份,一部份是inode,另一部份是Block,Block是用來存儲數(shù)據(jù)用的。而inode呢,就是用來存儲這些數(shù)據(jù)的信息,這些信息包括文件大小、屬主、歸屬的用戶組、讀寫權(quán)限等。inode為每個文件進(jìn)行信息索引,所以就有了inode的數(shù)值。操作系統(tǒng)根據(jù)指令,能通過inode值最快的找到相對應(yīng)的文件。

          做個比喻,比如一本書,存儲設(shè)備或分區(qū)就相當(dāng)于這本書,Block相當(dāng)于書中的每一頁,inode 就相當(dāng)于這本書前面的目錄,一本書有很多的內(nèi)容,如果想查找某部份的內(nèi)容,我們可以先查目錄,通過目錄能最快的找到我們想要看的內(nèi)容。雖然不太恰當(dāng),但還是比較形象。

          當(dāng)我們用ls 查看某個目錄或文件時,如果加上-i 參數(shù),就可以看到inode節(jié)點了;比如我們前面所說的例子;

          [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參數(shù)。


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

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


          2.11 創(chuàng)建硬鏈接,硬鏈接和源文件關(guān)系;

          用ln 創(chuàng)建文件硬鏈接的語法:

          # ln   源文件   目標(biāo)文件

           

          下面我們舉一個例子,在這個例子中,我們要為sun.txt 創(chuàng)建其硬鏈接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 來創(chuàng)建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在沒有創(chuàng)建硬鏈接文件sun002.txt的時候,其鏈接個數(shù)是1(也就是-rw-r--r--后的那個數(shù)值),創(chuàng)建了硬鏈接sun002.txt創(chuàng)建后,這個值變成了2。也就是說,我們每次為sun.txt創(chuàng)建一個新的硬鏈接文件后,其硬鏈接個數(shù)都會增加1。

          inode值相同的文件,他們的關(guān)系是互為硬鏈接的關(guān)系。當(dāng)我們修改其中一個文件的內(nèi)容時,互為硬鏈接的文件的內(nèi)容也會跟著變化。如果我們刪除互為硬鏈接關(guān)系的某個文件時,其它的文件并不受影響。比如我們把sun.txt刪除后,我們還是一樣能看到sun002.txt的內(nèi)容,并且sun02.txt仍是存在的。

          可以這么理解,互為硬鏈接關(guān)系的文件,他們好象是克隆體,他們的屬性幾乎是完全一樣;

          下面的例子,我們把sun.txt刪除,然后我們看一下sun002.txt 是不是能看到其內(nèi)容。

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

           

          注意:硬鏈接不能為目錄創(chuàng)建,只有文件才能創(chuàng)建硬鏈接。


          2.12 軟鏈接的創(chuàng)建,及軟接與源文件的關(guān)系;

          創(chuàng)建軟鏈接(也被稱為符號鏈接)的語法;

          # ln   -s  源文文件或目錄     目標(biāo)文件或目錄

           

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

          [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 、所屬文件種類、創(chuàng)建或修改時間等... ...我們來對比一下:

          首先 對比一下節(jié)點:兩個文件的節(jié)點不同;
          其次 兩個文件的歸屬的種類不同 linuxsir001.txt是-,也就是普通文件,而linuxsir002.txt 是l,它是一個鏈接文件;
          第三 兩個文件的讀寫權(quán)限不同 linuxsir001.txt 是rw-r--r-- ,而linuxsir002.txt的讀寫權(quán)限是 rwxrwxrwx
          第三 兩者的硬鏈接個數(shù)相同;都是1
          第四 兩文件的屬主和所歸屬的用戶組相同;
          第五 修改(或訪問、創(chuàng)建)時間不同;

          我們還注意到了linuxsir002.txt 后面有一個標(biāo)記 ->,這表示linuxsir002.txt 是linuxsir001.txt的軟鏈接文件。

          值得我們注意的是:當(dāng)我們修改鏈接文件的內(nèi)容時,就意味著我們在修改源文件的內(nèi)容。當(dāng)然源文件的屬性也會發(fā)生改變,鏈接文件的屬性并不會發(fā)生變化。當(dāng)我們把源文件刪除后,鏈接文件只存在一個文件名,因為失去了源文件,所以軟鏈接文件也就不存在了。這一點和硬鏈接是不同的;

          [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的內(nèi)容; 
          linuxsir002.txt: 沒有那個文件或目錄       注:得到提示,linuxsir002.txt不存在。

           

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

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

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


          3、文件類型;

          當(dāng)用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 。這個字段包括兩個信息,一是文件類型,二是文件的權(quán)限;文件類型就第一個字符,lsfile.sh的文件所歸屬的文件種類是- 。同理 mkuml-2004.07.17的這段是drwxr-xr-x,它所歸屬的文件種類應(yīng)該是d;sun001.txt文件呢,對應(yīng)的lrwxrwxrwx,sun001.txt所歸屬的文件種類應(yīng)該是-l 。

          我們可以知道Linux文件可以分為如普通文件、目錄、符號鏈接文件、字符和塊設(shè)備文件、套接口文件等。

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


          4、文件的權(quán)限;

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

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


          4.1 關(guān)于權(quán)限位;

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

          文件屬主: 讀r、寫w、執(zhí)行x
                          用 戶  組 : 讀r、寫w、執(zhí)行x
                          其它用戶: 讀r、寫w、執(zhí)行x
                          如果權(quán)限位不可讀、不可寫、不可執(zhí)行,是用-來表示。
                          


          對于普通文件的讀、寫、執(zhí)行權(quán)限可以這樣理解:

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

           

          比如:

          [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的權(quán)限是 rwxr-xr-x。表示lsfile.sh文件,文件的屬主root,擁有rwx(可讀、可寫、可執(zhí)行)權(quán)限,用戶組root,擁有 r-x(可讀、可寫)權(quán)限 ,其它用戶擁有 r-x(可讀、可寫)權(quán)限。這9個權(quán)限連在一起就是 rwxr-xr-x,也就是說,lsfile.sh 文件,文件屬主root擁有可讀、可寫、可執(zhí)行權(quán)限,用戶組root下的所有用戶擁有可讀可執(zhí)行權(quán)限,其它用戶擁有可讀可執(zhí)行權(quán)限。

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


          4.2 改變權(quán)限的命令 chmod ;

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

          舉例:

          [root@localhost ~]# touch linuxsir007.txt  注:創(chuàng)建linuxsir007.txt文件;
          [root@localhost ~]# touch linuxsir008.txt  注:創(chuàng)建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    注:通過八進(jìn)制語法來改變linuxsir007.txt的權(quán)限;
          [root@localhost ~]# chmod u+x,og+x linuxsir008.txt  注:通過助記語法來改變linuxsir008.txt的權(quán)限;
          [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的兩種語法來改變權(quán)限的例子,我所要說明的是,兩種方法都能達(dá)到同一目的。

          這個過程是:

          首先:創(chuàng)建linuxsir007.txt和linuxsir008.txt兩個文件;
          其次:查看兩個文件的屬性;他們的權(quán)限都是一樣的,都是 rw-r--r-- ,表示文件屬主可讀可寫、文件所歸屬的用戶組對文件可讀、其它用戶可讀;
          第三:通過chmod的八進(jìn)制語法來改變linuxsir007.txt 的權(quán)限;通過chmod的助記語法來改變linuxsir008.txt的權(quán)限; 我們用兩種方法來改變linuxsir007.txt和linuxsir008.txt 文件,通過chmod的兩種不同的語法來讓兩個文件的權(quán)限達(dá)以一致。在八進(jìn)制語法中,我們用了 755 ,而在助記語法中,我們用了 u+x,og+x。雖然用了兩種不同的語法,但達(dá)到的目的是一樣的,最后的結(jié)果,我們可以看到兩個文件的權(quán)限都是 rwxr-xr-x。也就是說文件的屬主對文件有可讀可寫可執(zhí)行的權(quán)限,文件所歸屬的用戶組有可讀可執(zhí)行的權(quán)限,其它用戶有可讀可執(zhí)行的權(quán)限。

          由此我們引出了通過chmod 工具來改變文件或目錄權(quán)限的的兩種方法:chmod 的八進(jìn)制語法,chmod的助記語法;


          4.21 通過 chmod 八進(jìn)制語法來改變文件或目錄的權(quán)限;

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

          -rwxr-xr-x 1 root root 0 04-23 20:11 linuxsir007.txt 

           

          說明:

          屬主權(quán)限位:占用三個位置,三個位置的順序是讀r、寫w、執(zhí)行x。如果是沒有權(quán)限,則為-。在這個例子中,我們看到rwx,表示屬主在三個權(quán)位上都有權(quán)限,也就是可讀可寫可執(zhí)行;
          屬組權(quán)限位:占用三個位置,三個位置的順序是讀r、寫w、執(zhí)行x。如果是沒有權(quán)限,則為-。在這個例子中,我們看到的是r-x,在寫的位置上是-,表示沒有寫權(quán)限,文件所歸屬的組對文件擁有的是可讀可執(zhí)行,但沒有寫的權(quán)限。
          其它用戶權(quán)限位:占用三個位置 ,三個位置的順序是讀r、寫w、執(zhí)行x,如果是沒有權(quán)限,則為-。在這個例子中,我們看其它用戶的權(quán)限位是r-x,在寫的位置上是-,表示沒有寫權(quán)限,文件所歸屬的組對文件擁有的是可讀可執(zhí)行,但沒有寫的權(quán)限。


          chmod 的八進(jìn)制語法的數(shù)字說明;

          r     4
                          w     2
                          x     1
                          -     0
                          

          屬主的權(quán)限用數(shù)字表達(dá):屬主的那三個權(quán)限位的數(shù)字加起來的總和。比如上面的例子中屬主的權(quán)限是rwx ,也就是4+2+1 ,應(yīng)該是7;
          屬組的權(quán)限用數(shù)字表達(dá):屬組的那個權(quán)限位數(shù)字的相加的總和。比如上面的例子中的r-x ,也就是4+0+1 ,應(yīng)該是5;
          其它用戶的權(quán)限數(shù)字表達(dá):其它用戶權(quán)限位的數(shù)字相加的總和。比如上面例子中是 r-x ,也就是4+0+1 ,應(yīng)該是5;

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

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

          [root@localhost ~]# ls -l sun.txt
          -rw-r--r-- 2 root root 29 04-22 21:02 sun.txt 注:是不是達(dá)到目的了?是的!

           


          每個三位的權(quán)限代碼(分別是屬主、屬組,其它用戶)組合,有8種可能;

          八進(jìn)制數(shù)字				  權(quán)限
                          0                            			 ---
                          1						--x
                          2						-w-
                          3						-wx
                          4						r--
                          5						r-x
                          6						rw-
                          7						rwx
                          

          注解:我們可以根據(jù)上面的數(shù)字列表來組合權(quán)限,比如我想讓屬主擁有 rwx(所對應(yīng)的數(shù)字是7),屬組擁有 --x(所對應(yīng)的數(shù)字是1),其它用戶擁有 ---(所對應(yīng)的數(shù)字是0),這樣我們把各組的權(quán)限組合起來就是是 rwx--x---(對應(yīng)的數(shù)字是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

           


          如果我們想改變的僅僅是打開目錄的權(quán)限 ,不用加任何參數(shù)。如果想把目錄以下的所有文件或子目錄改變,應(yīng)該加-R參數(shù);

          [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的權(quán)限,讓其擁有屬主可讀可寫、屬組可讀、其它用戶可讀,也就是rw-r--r-- ,用八進(jìn)制的算數(shù)應(yīng)該是644。

          [root@localhost ~]# ls -ld testdir/  注:我們查看到的testdir目錄的權(quán)限是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及其子目錄和文件權(quán)限都要改變?yōu)?rw-r--r--權(quán)限。我們要用到-R參數(shù);

          [root@localhost ~]# chmod -R 644 testdir/ 注:我們改變testdir下所有的文件或子目錄的權(quán)限都為 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 的權(quán)限為 rwxr--r--,但我們不想改變testdir目錄的權(quán)限 。下面的例子操作是錯誤的。

          [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目錄的權(quán)限一并改為  rwxr--r--

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

           

          所以當(dāng)您想改變一個目錄下的所有.file權(quán)限,并且想保留該目錄的原有權(quán)限時,請不要用.*通配符。至于應(yīng)該怎么做,我想大家都明白。比如下面的匹配;

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

           

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


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

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


          用戶或用戶組定義:

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


          權(quán)限定義字母:

          r 代表讀權(quán)限;
          w 代表寫權(quán)限;
          x 代表執(zhí)行權(quán)限;


          權(quán)限增減字符;

          - 代表減去相關(guān)權(quán)限;
          + 代表增加相關(guān)權(quán)限;

          示例一:

          [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  注:把屬主、用戶組及其它用戶的執(zhí)行權(quán)限都減掉;

          [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  注:為文件的屬主增加執(zhí)行權(quán)限 

          [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  注:減去文件屬主對文件的執(zhí)行權(quán),增加屬組和其它用戶對文件的可讀可寫權(quán);

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

           

          用助記語法比較靈活,組合起來比較方便;比如;

          u=r+x 為文件屬主添加讀寫權(quán)限;
          ug=rwx,o=r 為屬主和屬組添加讀、寫、執(zhí)行權(quán)限,為其它用戶設(shè)置讀權(quán)限。
          a+x 為文件的屬主、屬組和其它用戶添加執(zhí)行權(quán)限;
          g=u 讓文件的屬組和屬主和權(quán)限相同;

          對于目錄權(quán)限的設(shè)置,要用到-R參數(shù);

          和八進(jìn)制方法一樣,如果我們?yōu)橐粋€目錄及其下的子目錄和文件具有相同的屬性,就可以用-R參數(shù);

          [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 默認(rèn)權(quán)限分配的命令 umask ;

          umask 是通過八進(jìn)制的數(shù)值來定義用戶創(chuàng)建文件或目錄的默認(rèn)權(quán)限。umask 表示的是禁止權(quán)限。不過文件和目錄有點不同。

          對于文件來說,umask 的設(shè)置是在假定文件擁有八進(jìn)制666權(quán)限上進(jìn)行,文件的權(quán)限就是是666減去umask的掩碼數(shù)值;
          對于目錄來說,umask 的設(shè)置是在假定文件擁有八進(jìn)制777權(quán)限上進(jìn)行,目錄八進(jìn)制權(quán)限777減去umask的掩碼數(shù)值;

           

          實例一:

          [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

           

          實例二:

          系統(tǒng)用戶的家目錄的權(quán)限是通過在配置文件中指定的,比如Fedora 中是用的 /etc/login.defs文件;

          其中有這樣一段:

          CREATE_HOME     yes
          UMASK           077

           

          表示的意思是,當(dāng)我們創(chuàng)建用戶時,他的家目錄umask的數(shù)值是077 。我們怎么理解這個077呢。當(dāng)用戶添加時,系統(tǒng)自動在/home中創(chuàng)建用戶的家目錄,并且設(shè)置它的權(quán)限為777-077=711 ,也就是rwx------ ;我們看一下/home下的某個用戶的家目錄是不是這樣的呢?

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

           

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

          umask 放在相關(guān)的配置文件中,目的是當(dāng)管理員創(chuàng)建用戶時,系統(tǒng)會自動為用戶創(chuàng)建文件或目錄時配置默認(rèn)的權(quán)限代碼。


          5、setuid和setgid 位;

          本部份內(nèi)容做為了解,看看就行了;


          5.1 setuid和setgid的解說 ;

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

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

           

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

          [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 文件已經(jīng)設(shè)置了setuid 權(quán)限位(也就是r-s--x--x中的s),所以普通用戶能臨時變成root,間接的修改/etc/passwd,以達(dá)到修改自己口令的權(quán)限。

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

          注意:setuid和setgid會面臨風(fēng)險,所以盡可能的少用,了解了解既可~~~


          5.2 setuid和setgid的實例應(yīng)用;

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

          [root@localhost ~]#cd /home  注:進(jìn)入/home目錄
          [root@localhost home]# touch beinantest.txt  注:創(chuàng)建一個測試文件;

          [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”: 權(quán)限不夠

           

          那我們怎么才能讓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  注:設(shè)置rm的權(quán)限為4755 , 就把setuid 位設(shè)置好了。
          [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文件;

           

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

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


          5.3 setuid和setgid的設(shè)置方法;


          第一種方法:八進(jìn)制方法:

          setuid位是的設(shè)置用八進(jìn)制的4000,setgid占用的是八進(jìn)制的2000 ;比如我們前面所說的 chmod 4755 /bin/rm 就是設(shè)置的setuid位;

          至于setuid的設(shè)置方法,只是在我們通過chmod設(shè)置文件或目錄權(quán)限位的八進(jìn)制方法的前面多加一個數(shù)字,也就是4。比如:

          [root@localhost ~]# chmod 4755 /bin/rm  注:設(shè)置rm的權(quán)限為4755 , 就把setuid 位設(shè)置好了。

           


          作為setgid 位占用的是八進(jìn)制的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這個目錄,經(jīng)過改變權(quán)限后的,目錄所歸屬用戶組的那三個權(quán)限位是 r-s。 如果我們見到的是小寫的s,表明文件所歸屬的用戶組位有執(zhí)行權(quán)限x。因為我們用了2755 ,意思是說文件屬主擁有可讀可寫可執(zhí)行權(quán)限,所歸屬的用戶組擁有可讀可執(zhí)行權(quán)限,并且設(shè)置了setuid,所以這時本來文件所歸屬的用戶組擁有r-x,現(xiàn)在加了setgid位,就把其中的x換成了s。如果文件所歸屬的用戶組沒有執(zhí)行權(quán)限,這個權(quán)限應(yīng)該是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所歸屬的組沒有執(zhí)行權(quán)限,這時本來在執(zhí)行權(quán)限位上顯示-,由于有了setuid,所以顯示為S。

          如果我們?yōu)橐粋€文件的權(quán)限擁有 屬主可讀可寫可執(zhí)行、所歸的組擁有可讀可執(zhí)行,其它用戶可讀可執(zhí)行,并且同時設(shè)置setuid和setgid位,我們應(yīng)該怎么運行命令呢?

          [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

           

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


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

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

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

          [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位,當(dāng)然也能用file來查看文件的類型;

          比如:

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


          6、粘貼位及設(shè)置方法;

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

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

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

           

          我們看到/tmp權(quán)限位最后的一個字母是 t。這就是設(shè)置了粘貼位。

          粘貼位的設(shè)置,可以用八進(jìn)制的1000位來設(shè)置。比如

          [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 的助記語法來設(shè)置。用o+t表示設(shè)置粘帖位,用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/

           

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

          建議最好不要用!


          7、文件或目錄的歸屬關(guān)系;

          文件或目錄的歸屬關(guān)系主要定義文件歸屬哪個用戶所有及歸于哪個用戶組所有。

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

           

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

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


          7.1 改變文件的當(dāng)屬關(guān)系的工具 chown ;

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

          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 所接的新的屬主和新的屬組之間應(yīng)該以.或:連接,屬主和屬組之一可以為空。如果屬主為空,應(yīng)該是 :屬組 ;如果屬組為空 就就不必需要.或:了。

          [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參數(shù),這個參數(shù)對目錄改變屬主和屬組極為有用,我們可以通過加-R參數(shù)來改變某個目錄下的所有文件到新的屬主或?qū)俳M;

          [root@localhost ~]# ls -ld mydir/ 注:查看mydir目錄的屬性
          drwxr-xr-x 2 root root 4096 04-25 09:08 mydir/  注:我們發(fā)現(xiàn)此目錄的屬主是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目錄下的以.開頭的所有文件(注:假設(shè)我們是這么想的)

          [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 誤操作,這樣會連同父目錄的屬主和屬組的歸屬關(guān)系也被改變。


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

          語法:

          chgrp [參數(shù)選項]... 組 文件...

           

          它的用戶和chown 類似,只不過它僅是用來改變文件或目錄的屬組的;-R參數(shù)用于目錄及目錄下所有文件改變屬組的。這和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

           

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

          [root@localhost ~]# userdel linuxsir

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

           


          8、影響文件的讀寫執(zhí)行的因素;

          之所以把這部份的內(nèi)容單列出來,是因為這部份的內(nèi)容是基于我們對用戶管理及文件權(quán)限了解的基礎(chǔ)上進(jìn)行的。比如一個文件的讀、寫、執(zhí)行,它要受到哪幾方面的影響。

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

          [root@localhost ~]# cd /home  注:進(jìn)入/home 目錄;

          [root@localhost home]# mkdir redhatdir 注:創(chuàng)建一個目錄redhatdir
          [root@localhost home]# touch redhatdir/test.txt  注:創(chuàng)建一個文件test.txt
          [root@localhost home]# chmod 700 redhatdir/ 注:修改redhatdir的權(quán)限 ,為屬主可讀可寫可執(zhí)行,屬組和其它用戶無權(quán)限;

          [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/  注:進(jìn)入redhatdir目錄,以beinan用戶身份。
          bash: cd: redhatdir/: 權(quán)限不夠

          [beinan@localhost home]$ more redhatdir/test.txt
          redhatdir/test.txt: 權(quán)限不夠

           

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

          [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/: 權(quán)限不夠

           

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

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

           

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

          其實為文件分配權(quán)限的最終目的是讓文件的屬主有何權(quán)限,讓屬組下的用戶有何權(quán)限,讓其它用戶有何權(quán)限。文件權(quán)限是和用戶管理相關(guān)聯(lián)的,所以理解這方面的內(nèi)容還得了解用戶管理。


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

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

           

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

          當(dāng)然也有其它的工具不修改文件的內(nèi)容,只修改文件的時間,這時可以被稱為訪問時間。比如touch工具能達(dá)到這個目的。

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

          [root@localhost ~]# touch  adduml02.sh  注:更新文件的訪問時間成為當(dāng)前系統(tǒng)時間;

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

           

          關(guān)于touch 的用法, 更多的請參見: man touch或touch --help


          10、文件屬性和文件系統(tǒng)屬性的關(guān)系;

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

          [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變成可修改可刪除,應(yīng)該用-i參數(shù);

          比如在ext3或ext2 文件系統(tǒng)中,我們要讓一個文件只能追加內(nèi)容,但不能刪除。應(yīng)該用chattr的+a參數(shù)。

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

          posts - 40, comments - 9, trackbacks - 0, articles - 9

          Copyright © 希

          主站蜘蛛池模板: 驻马店市| 玛曲县| 嵊州市| 乌拉特前旗| 永修县| 邓州市| 通州市| 香格里拉县| 广丰县| 新宁县| 北海市| 政和县| 丰顺县| 大姚县| 蓝田县| 隆安县| 阆中市| 南岸区| 哈尔滨市| 涟水县| 亚东县| 武宣县| 扎赉特旗| 莎车县| 遂溪县| 酉阳| 万州区| 唐河县| 吉林省| 东明县| 黎平县| 连平县| 清水县| 天门市| 沁水县| 宁陵县| 华蓥市| 腾冲县| 乌兰察布市| 聊城市| 深州市|