Linux基礎知識之文件和目錄的權限機制


Linux中的用戶

Linux中的用戶有三類,分別是:
  1. 所有者(u)
  2. 同組用戶(g)
  3. 其他人(o)
如下圖所示,假設存在兩個組:groupA和groupB,rachel和ross屬於組groupA,monica屬於GroupB。
如果存在一個文件friends.c,其所有者是rachel,那么,該文件的同組用戶(g)是ross,其他用戶(o)是monica。需要注意的是在Linux中,存在一個至高無上的用戶:root,他默認屬於root組。
 
 
一個用戶可以屬於多個組
 
 
為了后續試驗方便,我們按照上圖創建groupA和groupB以及屬於這兩個組的用戶:
 
 
  • 如果當前環境是桌面環境,可以按ctrl + alt + (f1-f6) 切換到字符狀態下,ctrl + alt +f7切換回桌面。也可以在桌面環境下打開命令窗體(和在windows下運行cmd命令一個效果),Ubuntu下的快捷鍵是ctrl + alt + t
  • adduser命令中,選項-ingroup用來指定組。另外也可以使用useradd命令(這個比較專業,adduser則比較傻瓜式)
  • desktop型的Linux發行版一般會提供用戶維護界面,非常方便,但是可能沒有輸入命令靈活,比如在ubuntu desktop發行版中創建用戶會直接生成一個同名的組,比較討厭。
  • sudo su (root)用來獲得root權限,如果您的系統不是ubuntu(默認情況下不能使用root用戶登錄),也可以直接su root切換到root用戶,或者干脆用root登錄
  • 查看命令如何使用:man commandName (如:man useradd)
  • Linux中的命令和Windows中的一樣,要想在任何地方執行,也要寫入“環境變量”,可以通過echo $PATH來查看有哪些目錄被放到了$PATH變量中

Linux中的權限

Linux中的權限分為3種,分別是讀(read)、寫(write)和執行(execute),在系統中分別記作: r、w和x,或者用數字表示為 4、2和1
 
下面我們把用戶切換為rachel,在rachel的家目錄/home/rachel下用vi命令創建文件純文本文件friends.c,內容如下:
include<stdio.h>
int main()
{
    printf("hello world\n");
}

 

也可以在桌面環境下使用文本編輯器(ubuntu中默認的是gedit)創建文件,但是很多人都喜歡用vi這個工具,筆者不是很熟,也無法體會vi有多么方便,不過想想拔了鼠標一頓敲鍵盤確實是XX不二利器啊。另外,如果Linux系統被當做服務器使用,那就沒有必要使用desktop版本了,在純字符環境下難免也要編輯一些文本,所有,vi是必須要了解的,最起碼了解一些基本功能,否則會氣瘋掉的........下面說說vi的基本功能:
  1. 打開文件:vi fileName 如果fileName已經存在,則將其打開,如果fileName不存在,則在保存的時候創建新的文件
  2. 編輯文件:剛進入vi默認是指令模式,按一下鍵盤i鍵后進行編輯,當前模式轉換為編輯模式
  3. 保存文件:狂按Esc鍵進入命令模式,敲入命令 :wq 保存並退出vi
更多vi使用方法可以去google搜索,或使用命令man vi 進行查看,以上三步驟僅僅能讓編輯者不至於瘋掉,還有很多功能呢......
 
 
創建完畢后使用ls -l 查看着文件的相關權限,如下圖所示:
 
  • -l 表示列出文件或目錄的屬性
  • -a 可以查看隱藏文件
  • ll 命令等同於 ls -al
 
請注意上圖中被熒光筆標注的“rw-r--r--”。前面說過Linux中的用戶分為三類,分別是所有者、同組用戶和其他用戶。從左往右:“rw-”表示所有者具有讀和寫的權限;“r--”表示同組用戶具有讀的權限;第二個"r--"表示 其他用戶也具有讀的權限。可見 “rw-r--r--”可三個三個分為三組,每組的第一個字符表示是否可讀(是用“r”表示,否用“-”表示),第二個字符表示是否可寫( 是用“w”表示,否用“-”表示),第三個字符表示是否可執行 是用“x”表示,否用“-”表示)。第一組表示所有者的權限,第二組表示同組用戶的權限,第三組表示其他用戶的權限。 例如: 一個文件的屬性是”rwxrwxrwx“則表示任何人對此文件都有讀寫執行的權限。
 
friends.c文件的權限默認屬性是:”rw-r--r--“,含義為:rachel(所有者)可以讀寫這個文件,ross(同組用戶)只可以讀這個文件、monica(其他用戶)也是可以讀這個文件,如果將用戶切換到ross或者是monica,然后再編輯並保存friends.c文件就會報權限錯誤的,因為他們沒有寫的權限。
 

權限對於文件的意義

  • 讀:可查看文件的內容
  • 寫:可修改文件的內容
  • 執行:可執行文件

 

  • 對文件具有可執行的權限,並不意味者文件一定可以執行;可執行的文件如果對其沒有執行的權限亦不可執行
  • 可以用C語言編寫一段代碼,然后用gcc命令編譯為可執行的文件以試效果
  • gcc、java、javac、python等命令在很多Linux發行版本中已經預裝存在了,而且默認在$PATH中
 
 
現在使用gcc命令編譯friends.c文件: gcc friends.c -o friends.out
當前目錄下會生成一個friends.out的文件,我們來看看這個文件的屬性:
 
"rwxr-xr-x"表示 rachel可以讀、寫和執行這個文件;ross可以讀、執行這個文件;monic可以讀、執行這個文件,用rachel的身份打入如下命令:./friends.out
 
 
./ 表示當前目錄,其實friends.out本來就在當前目錄,但是如果不加./,Linux會去$PATH中找friends.out,結果當然是找不到,這點和windows不一樣
 
 
結果是我們熟悉的hello wolrd
 
下面我們把執行權限給去掉:chmod u-x friends.out
 
啊啊啊啊啊,執行不了。
 
 
  • 也可以這樣修改權限:chmod 655 friends.out ,第一位數字為文件所有者(u)賦權限,6=4+2 ,表示讀和寫權限;第二位數字為同組用戶(g)賦權限,5 = 4 + 1,表示讀和執行權限;第三位數字為其他用戶(o)賦權限。各種權限數字組合如下:
4:r
2:w
1:x
3 = 2 + 1:wx
5 = 4 + 1:rx
6 = 4 + 2:rw
7 = 4 + 2 + 1:rwx
  • 只有root和文件的所有者才有權改變文件的權限

權限對於目錄的意義

權限對於文件的意義很好理解,但是目錄的讀、寫和執行是怎么回事呢?先來看下/home/rachel這個目錄的權限:
同組用戶ross對這個目錄是沒有寫權限的,這個意味着什么呢,現在將用戶切換到ross,試圖在/home/rachel底下用vi創建一個文本文件,果斷報錯如下:
 
切換回rachel,執行命令:chmod g+w /home/rachel ,在切換到ross,再試圖創建文件。哇塞,成功了。這個例子說明對於目錄的寫權限,就是指可以對這個目錄里面的內容進行刪除或創建的操作(或者說更改了目錄里的內容)。用類似的方法做實驗:
 
切換回rachel,把ross的讀( chmod g-r /home/rachel )權限干掉,再切換到ross,cd到/home/rachel,執行ls,報錯:
可見,如果對於一個目錄沒有讀權限,則不能看到這個目錄里有什么東西
 
切換回rachel,把ross的讀權限還原,把執行權限干掉(chmod g+r-x),在切換到ross,cd 到/home/rachel........等等,我去,cd命令無法執行了:
可見,如果對一個目錄沒有執行權限,那么這個目錄就不能cd進去,不能作為當前工作目錄,如果試圖打開、執行里面的文件的話毅然報權限錯誤(但是能夠執行ls /home/rachel命令,因為ross對這個目錄具有讀權限)
 
對於目錄,總結如下:
  • 讀:可以查看目錄下的內容
  • 寫:可修改目錄下的內容(新增或刪除)
  • 執行:可將目錄作為當前工作目錄,可對目錄中的文件執行相應的操作(當然,如果對某文件沒有讀、寫或執行的權限,即使對其父目錄有執行權限也啥都干不了)

 

對於目錄,要想某用戶使用其中的文件,必須要賦予某用戶讀和執行的權限,但是寫權限不能輕易給予,因為對一個目錄具有了寫的權限意味着可以刪除目錄中的文件
 

后記

最近開始學習Linux。為了強迫自己使用Linux,把家里的電腦上了Ubuntu。我覺得Windows太好用了,會把人用懶,想必熟練了Linux后對操作系統應該會有一個更加深入的認識,此外,萬一哪天想起什么創業點子,也可以使用php、java等免費方案在費用較低的Linxu主機上部署網站之類的,是個省錢的好辦法。
 
本文適合初學者閱讀,也希望高手給予點評,不甚感激。
 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM