偶爾會用到Linux,它的使用者、組之間的關係之前一直覺得十分複雜,而且劃分了三種許可權,交織在一起就更覺得淩亂了。今天想理一理他們之前的關係,偶遇某前輩的文章,品質很高,略刪減編輯以留博備份,同時也方便他人。
原文如下:
在linux中一切都是檔案(檔案夾和硬體外設是特殊的檔案),如果有可能盡量使用文字檔。文字檔是人和機器能理解的檔案,也成為人和機器進行交流的最好途徑。由於所有的設定檔都是文本,所以你只需要一個最簡單的編輯器就可以修改。即使是2進位執行檔案,也會附上原始碼。
這就是Linux的基本哲學,也是開源的基本精神。GNU/Linux的最終發展就是跨越人和機器之間的界限。
(比較:Windows中的一切也都是檔案,大多都是微軟格式編碼過的2進位檔案,而設定檔也往往都是進行2進位編碼的,甚至成果物都是2進位編碼的,比如doc檔案,你需要使用微軟的API才能完成修改。)
由於修改文字檔如此簡單,Linux系統本身肯定要加以規範。這就引出了使用者(組)和許可權這2個概念。
而這2個概念的引入,完美的保證了Linux的安全性,同時沒有添加複雜性。由於一切皆為檔案。所以Linux引入了2個檔案來系統管理使用者(組), /etc/passwd存放使用者,/etc/group存放組,然後在檔案系統中的每個檔案的檔案頭裡面添加了使用者和檔案之間的關係資訊。
使用者和檔案的關係只有2種, 擁有和不擁有。
組和檔案的關係只有2種,擁有和不擁有。
使用者和組的關係只有2種, 屬於和不屬於。
將這三種關係疊加,使用者和檔案的最終關係可以歸納為3類
1,使用者擁有該檔案
2,使用者屬於某個組,某個組擁有該檔案(即使用者通過屬於某組來擁有該檔案)
3,使用者不擁有該檔案
而在檔案的檔案頭裡,則儲存了3組資訊分別對應上面3類別關係
第一組存放擁有該檔案的使用者的的許可權。
第二組存放擁有該檔案的組的許可權,(所有屬於該組的其他成員都獲得此許可權)。
第三組存放所有不擁有該檔案的使用者(等於所有使用者減去以上2類使用者)所獲得許可權。
非常微妙的是,你可以讓第三組的許可權大於第一,第二組,也就是不用擁有該檔案的使用者的許可權反而更大。(評論:當我想通了這層關係以後,很感歎IT前輩們的超凡智慧,這樣的設計具有非常好的對稱性,擁有未必是好事,不擁有可能是種幸福。人生何嘗不是如此呢。)
下面要說明一下許可權
許可權一共有三種讀(縮寫為r),寫(縮寫為w),執行(縮寫為x)。讀和寫很好理解,執行的話當然只對能執行的檔案才有效果。許可權相對檔案夾來說意義略有不同。比如如果你擁有對某目錄的執行許可權,你才能cd 到某目錄,而如果你沒有讀許可權,你即使cd到了某目錄,你也不能ls。
在實踐為了省事,我們一般都會用上所有三種許可權,所以初學者只要知道有這麼回事情就可以了。結合使用者(組),許可權,檔案,我們用一個命令ls -l 就能顯示出三者之間的關係
下面是一個例子
顯示readme.txt的許可權資訊
r-x-w-rw- tom admin readme.txt
上面的r-x-w-rw-,每3個字元為一組,分別對應使用者,組,其他使用者,-表示無此許可權。使用者(縮寫為u)的許可權:是讀(r)和執行(x)組(縮寫為g)的許可權:是寫(w)。其他使用者(縮寫為o)的許可權:是讀(r)和寫(w)。使用者tom擁有該檔案
組admin擁有該檔案。任何使用者登入以後根據以上設定就可以獲得自己相應的許可權。修改許可權也很簡單,比如要給g添加許可權讀(r)和執行許可權(x)就是:
chmod g+rx 檔案名稱 ---加號表示添加權
要取消其他使用者的寫(w)許可權
chmod o-w 檔案名稱 ---減號表示取消許可權
在實際的應用當中,我們一般會用應用程式的名字來設定組名,比如在我的系統中就有mysql組,mongdb組。(評論:這裡再引用一下最聰明的物理學家兼哲學家愛老的名言
Make everything as simple aspossible, but not simpler
Albert Einstein
我對這句名言的翻譯也很simple,就是“簡約不簡單”,Linux這種許可權系統的精妙設計很容易讓人聯想到人體的DNA系統,只有四種堿基,確可以演化出人體這麼複雜而有效系統。而反觀Windows系統,真是無奈呀。使用者的電腦居然可以成為QQ和360的戰場,使用者還沒有任何證據來證明誰是誰非。這到了Linux系統上,在這麼簡潔的安全機制下是根本不可能的事呀)
最後來談一談 Linux的三級協助系統
Linux的協助系統非常有特色。如果能熟練使用協助系統,加上Google學習法(內事不決問百度,外事不決問Google),自學就會變得非常輕鬆,第一種是迷你型協助,這種協助篇幅最短,最精鍊,多用在想不起某個命令的具體參數,命令用法如下
命令 –help,比如 ls –help
第二種是中型協助,這種協助篇幅較長,說明詳細,多用在象詳細瞭解某個命令的來龍去脈,命令用法如下
man 命令--------man是(manual的縮寫),比如 man cd
第三種是大型協助, 這種協助篇幅最長,有的可能是一本書, 命令用法如下
info 命令,比如 info rm
Linux學習一定要自己多磨練,才能真正掌握。Easy come easy go。任何很容易學會的知識和技術,多半都很廉價。
PS.有網友希望推薦關於Linux深入淺出的書籍,我看過多本原版書,不過大多數的知識還是靠自己實踐,和Google來的。很多Linux知識可能是在學習別的東西的時候獲得,比如配置Apache的時候,就會多瞭解一些symboliclink的含義。很多東西要磨練以後才可能明白真正的內涵。
原文連結:http://kb.cnblogs.com/page/87100/