天天看點

Linux學習筆記之四

單元四:使用者、組和系統資訊 

  user 都屬于一個組(下稱group),而group 有唯一的組号(unique Group ID

  單元五:檔案通路許可

  所有檔案都有一個擁有者(owned by a user),并和一個組(group)相連。

  是以一個使用者是否有權限讀寫或者執行一個檔案,是由這個檔案是否被賦予了相應的權限所決定的。權限可以設定給檔案擁有者,檔案所在的組,或者其他任何人。

  可由ls -l 指令來檢視檔案權限(permissions):

  $ ls -l /bin/login

  -rwxr-xr-x 1 root root 19080 Apr 1 18:26 /bin/login

  可以看到檔案的通路權限由10個字元表示。

  檔案通路權限為三種使用者種類使用。每個種類都有一個表示字元:

  u ——檔案的擁有者(owner)

  g ——檔案所在組的其他使用者

  o ——任何使用者(others)

  每個種類的通路權限都彼此獨立,互不相關。

  三種标準檔案通路類型:

  r ——檔案的讀權限/羅列目錄内容的權限(list a directory's contents)

  w ——檔案的寫權限/在目錄中建立或删除檔案的權限

  x ——檔案的執行權限/通路目錄中檔案的權限,例如cd 到該目錄

  此三種标準檔案通路類型可以賦給上述的三種檔案通路權限的使用者種類,即u、g、o。

  檔案通路權限中,第2、3、4個字元表示了檔案擁有者的權限;第5、6、7個字元表示了檔案組的權限;第8,9,10個字元表示了其他使用者的權限。例如:

  說明了該檔案的擁有者可以讀寫并執行該檔案,其他的使用者(包括組内使用者)可以讀、執行該檔案。又例:

  $ ls -l README

  -rw-rw-r-- 1 andersen visitor 2948 Oct 11 14:07 README

  該檔案可以由visitor組内的使用者讀寫,但是并不能執行;能被其他使用者讀,但是其他使用者不能改寫它或者執行它。

  檔案通路權限中的第一個字元"d"将目錄和其他檔案予以區分:

  $ ls -ld /bin

  drwxr-xr-x 2 root root 4096 Apr 20 18:13 /bin/

  更多例子:

  使用者fred 是組fred 群組staff 的成員

  使用者mary 是組mary 群組admin, staff 的成員

  檔案fileA 擁有者是fred,擁有者組是 fred

  檔案fileB 擁有者是mary,擁有者組是 root

  檔案fileC 擁有者是root,擁有者組是 staff

  給出下表

  ----------------------------------------------

  user fileA fileB fileC

  fred u,g,o o, o,g

  mary o u,o o,g

  root u,g,o u,g,o u,g,o

  如果fileA 有通路權限rwxr-xr--,那麼它通路權限如下:

  read write excute

  ------------------------------------

  fred yes yes yes

  mary yes no no

  root yes yes yes

  改變檔案權限用chmod 指令,chmod 後跟一個表達式,表達式可以為一串數字或者一段預置的代碼組合:改變誰的(who),操作符(operator)和權限(permission)。

  改變誰的(who)可以有下面的選擇:

  u 檔案擁有者

  g 在檔案組内的使用者

  o 其他使用者

  a 所有使用者

  操作符(operator)可以有下面的選擇:

  + 增權重限

  - 删除權限

  = 将權限賦予…

  權限(permission)可以有下面的選擇:

  r 讀

  w 寫

  x 執行(對于目錄來說是通路)

  s Set userID bit(第四位)或者set groupID bit(第七位)

  t Set sticky bit(對于目錄來說便是——防止其他非擁有者删除目錄中的檔案,位于第10位)

  例如:

  $ chmod g+w .bash_profile

  該指令将寫權限賦予了檔案組内的使用者。

  $ chmod go-rw .bash_profile

  該指令剝奪了非擁有者使用者的讀寫權限。

  chmod 中有一個有用的參數為-R (遞歸,注意大寫),可以将整個目錄中的檔案和子目錄的權限全部改寫。

  前面提到還有一種方法可以修改檔案權限,就是數字方式。以三個數字的方式确定檔案的通路權限。第一個數字代表擁有者權限、第二個代表檔案所在組内的使用者權限、第三個代表其他使用者權限。權限表達式由以下數字相加而得:

  4 (讀權限)

  2 (寫權限)

  1 (執行權限)

  例:設定檔案file 為所有人均為隻讀權限:

  $ chmod 444 file

  例:設定檔案file 為擁有者擁有讀寫和執行權限,組内使用者有讀和執行權限、其他使用者無任何權限:

  $ chmod 750 file

  還要提一下預設的檔案權限。預設的檔案權限,是由umask 來決定的。非特權使用者的umask 為002,即檔案預設權限為664;而root 使用者的umask 為022,即檔案預設權限為644。

  如果沒有umask 的話,所有檔案都會預設為666權限,意味着所有人都可以讀寫建立的檔案。注意所有建立的檔案都沒有執行權限,即使umask 也無能為力。所有的執行檔案都要顯式的給出執行權限才能運作。但是對于目錄來說,無論umask 的值是多少,建立目錄時就預設賦予了執行權限(可以通路目錄)。

  要改變umask,隻需打:

  $ umask 022

  這樣就使得原本預設的002 umask值改為022。但是當下次再登入的時候,umask 又會改回到原來的值,這就需要你在bash 的初始化腳本(initialization script)中加入特定的umask 值。

  除了三種标準通路權限外,還有前面提到過的三種特殊權限。它們是setuid、setgid 和sticky 位。

  (下面我的了解不知道正确與否,希望高手指點!)

  setuid 位将程序的使用者ID (user ID)設定為檔案的使用者ID,對目錄無效。

  setgid 位将程序的組ID (group ID)設定為檔案的組ID,對目錄來說,它迫使所有在該目錄中建立的檔案都擁有與該目錄相同的組,而無論檔案的建立者是誰。

  setgid 和setuid 一樣,也很強大,應該小心使用。因為它允許無意識的對檔案和資源的通路。舉例來說,minicom終端模拟器程式設定setgid 為uucp 組,它提供了向計算機的串行口通路的權限(組uucp 擁有該種權限)。

  sticky 位作用在目錄上,防止使用者删除它們并不擁有的檔案(files they do not own)。sticky 位典型的應用便是在/tmp 目錄中,防止使用者删除彼此的檔案。sticky 位在檔案上沒有效果。

  單元六:Linux檔案系統

  檔案和目錄被組織在一個單根(single-rooted)反向樹狀結構中。包括獨立的實體裝置卷,比如軟碟、CDROM或多個硬碟。反向樹狀結構的基點(最高點)為根目錄或者叫"/"。

  檔案名是大小寫敏感的,"/"符号為界定符,分開路徑名的各個元素。例如 /usr/bin/X11/X

  每個shell 和系統程序都有一個“目前目錄”。".."表示目前目錄的上一級目錄,"."表示目前目錄。檔案或者目錄以"."開頭的是所謂的隐藏檔案,它們在預設的羅列中不出現。

  一個使用者的路徑(path)是一串目錄,用以搜尋執行指令的程式所在。

  /(root)

  ______________________________________________|______________________________________

  | | | | | | | | | | | | | | |

  etc bin sbin lib root usr mnt var boot tmp opt dev home proc lost+found

  bin: 用來儲存使用者指令。/usr/bin 目錄也存放使用者指令。

  sbin: 系統指令例如shutdown 之類的所在。/usr/sbin 目錄也存放許多系統指令。

  root: 超級使用者的home 目錄。

  mnt: 通常在系統啟動以後含有檔案系統裝載的裝載點(mount point)。

  boot: 含有在系統啟動時所用到的核心和其他檔案。

  lib: 含有許多在/bin 和/sbin 下的程式所用到的庫檔案。/usr/lib 目錄下含有更多的庫檔案。

  etc: 含有許多配置檔案和目錄。

  var: 存儲像系統日志和列印池等“變量”檔案。

  proc: 一個含有系統程序資訊的虛拟檔案系統(不存儲在磁盤上)

  tmp: 一個使用者和程式的“草稿本”,/tmp 對所有人和所有程序開放讀寫權限。

  opt: 類似StarOffice 這種第三方包的安裝目錄。

  以下是關于ext2/ext3 檔案系統的細節。

  當ext2/ext3檔案系統建立時,系統的中繼資料(metadata)就存儲在超級塊中(superblock)。因為這些資料對于操作檔案系統來說至關重要,是以同時也建立了一份檔案系統超級塊的拷貝。(比方在小的檔案系統上每8192個塊建立一份拷貝)。dumpe2fs 指令可以檢視超級塊上的資料。超級塊(superblock)含有檔案系統的中繼資料(metadata):卷名,UID,inode數,塊數,保留塊數,塊組的位置等等。

  inode 就像資料在塊上的描述。inode 不存儲檔案的真實資料,而是存儲檔案的資訊。stat 指令可以幫助我們檢視檔案的inode 進而得知是如何存儲在檔案系統中的。

  $ stat passwd

  File: "passwd"

  Size: 1129 Blocks: 8 IO Block: 4096 Regular File

  Device: 306h/774d Inode: 214057 Links: 1

  Access: (0644/-rw-r--r--) Uid: (0/root) Gid: (0/root)

  Access: Sat Sep 29 13:34:57 2001

  Modify: Sun Sep 23 17:12:41 2001

  Change: Sun Sep 23 17:12:41 2001

  下面是硬連接配接(hard link)的概念。

  硬連接配接是一個在檔案系統中“實體存在”的檔案,每個link 指向檔案的inode。它使得一個檔案擁有兩個或以上名字成為可能。注意,使用者可以link 他們不擁有的檔案,但是還是會被inode

本文轉自gauyanm 51CTO部落格,原文連結:http://blog.51cto.com/gauyanm/227286,如需轉載請自行聯系原作者

繼續閱讀