Mac OS X 文件系統


轉載 https://bbs.feng.com/read-htm-tid-5290929.html

 

本文以一個不常見的線索,介紹一下Mac OS X的文件系統的基礎,后面會逐步深入。這個線索就是“域”。
域(domain)是Mac OS X管理所有文件系統資源的方法,它不是體現在某個看得見摸得着的文件或者界面上,它是Mac OS X的一種管理組織哲學。如果說一個企業內部的管理有等級制,那么Mac OS X就有“域”制。“域”是Apple管理文件系統的辦法,傳統Unix以及Linux系統上很少提到。
在Mac OS X中,共有四個域:User,Local,Network,System。這四個域涵蓋了Mac OS X操作系統的方方面面。此貼先看看User域。

User域中包含了一個用戶登錄到系統后,可以支配的文件資源。簡單地說,User域是由用戶的主目錄來定義的。主目錄通常情況下是/Users/下的某個目錄,比如用戶Bill Gates,他的主目錄很可能是/Users/bgates或者/Users/bill。當然,這個主目錄也可以重新指定到另一個位置,比如另一個分區,或者一個分區上的某個目錄,甚至是網絡上的某個目錄或者移動硬盤上的一個目錄。在某些公司或者學校等組織中,通常做法是把全部用戶的主目錄集中存放在一台服務器上,這樣用戶就可以在任何一台客戶端機器上登錄訪問自己的主目錄下的資源。

用戶的主目錄是用戶自己的天下!主目錄下面存放了主人的一切信息,比如你的系統偏好信息,Terminal的命令歷史記錄,應用程序配置信息,等等等等,凡是屬於該用戶,或者由該用戶修改和產生的信息,都放在主目錄下面。主目錄名是該用戶的系統登錄名(短)。不允許出現重復的用戶登錄名,所以也不允許出現相同的主目錄名。

主目錄為每個用戶提供了一個私有且與眾不同的工作環境,用戶登錄的時候,Finder根據該用戶主目錄中的配置文件,為該用戶打造了一個獨一無二的工作環境,相應地,當用戶啟動應用程序的時候,那些程序會在用戶主目錄下找到與自己有關的配置文件或者用戶的使用偏好信息,網絡設置信息,電子郵件設置,字體,顏色配置等等等等。總而言之,User域為每個用戶定義了一個私有空間,這個私有空間存放了用戶的一切相關信息。

值得一提的是,如果一個用戶擁有一個.Mac賬號,那么該用戶登錄以后,主目錄中的配置信息會同步到該用戶的iDisk上。

Mac OS X下的用戶類型
Mac OS X下的“等級制”其實也是存在的,好比一艘船的船長,大副和普通水手。這里船長相當於root(又叫超級管理員,超級賬戶),大副相當於管理員,普通水手相當於普通用戶(又叫標准用戶)。系統里可以有很多普通用戶和管理員,但只能有一個root用戶。除此之外,還有三個比較特別的賬戶——訪客用戶,共享用戶,系統進程用戶。

用戶與賬戶
用戶指人,而賬戶指Mac OS X賦予某用戶的系統身份。
為了便於理解,假設不存在幾個人共享一個賬戶登錄的情況,這樣的話,用戶跟賬戶(指常規登錄賬戶,非系統進程賬戶)便一一對應起來,下面說的賬戶與用戶,如果沒有特別標明,那么兩者不加區分。

Mac OS X的船長——root賬戶
船長擁有最高權限,它是系統里的上帝,如果你以root身份登錄了Mac OS X,那么你就相當於進入了“上帝模式”,是的,這是個萬能也因此十分危險的角色。默認情況下,Mac OS X會把系統超級賬戶——root禁用。事實上,這里的禁用是將root賬戶的密碼設為一個隨機值,它存在,但沒人知道是什么。在這種情況下,不知道密碼是不能夠使用root賬戶的,系統隨機給root設置一個密碼,就被看做是禁用root賬戶的標志,也就相當於被禁用了。要想“啟用”root賬戶,至少有如下三種辦法:

方法一:sudo passwd root命令
在terminal中,輸入:
sudo passwd root
復制代碼
再輸入兩次您的root賬戶密碼。

方法二:dsenableroot命令
在terminal中,輸入:
dsenableroot
復制代碼
然后輸入當前賬戶的密碼,前提是,當前賬戶必須是一個管理員賬戶。然后輸入兩次root賬戶的新密碼。這樣root賬戶就啟用了。
如何禁用root賬戶呢?輸入:
dsenableroot -d
復制代碼
,root即被禁用。
其它用法請參考dsenableroot聯機手冊。

方法三:使用Directory Utility.app
在Mac OS X 10.5 Leopard中,Directory Utility.app位置在/Applications/Utilities目錄里,而在Mac OS X 10.6 Snow Leopard中,Directory Utility.app被轉移到了/System/Library/CoreServices目錄。運行Directory Utility.app,點擊左下角的鎖頭圖標,輸入管理員賬號的密碼(管理員很可能就是您當前使用的賬號)進入編輯模式,點擊Directory Utility程序菜單欄中的Edit,就會看到Enable Root User選項,如果在這之前root賬戶沒有被啟用過,這步會提示您輸入新的root賬戶的密碼兩次,完成后,root賬戶就被啟用了。若要禁用root 賬戶,則再次找到該菜單位置,選擇Disable Root User就可以了,此外,要更改root賬戶密碼,就選擇Change Root Password,輸入舊密碼后,接着按提示輸入新密碼。
另外一個啟動Directory Utility.app的方法是,System Preferences -> Accounts -> Login Options -> Network Account Server -> Join -> Open Directory Utility…,就能啟動Direcotry Utility.app。

Mac OS X的大副——管理員賬戶
作為一台Mac除了內建的root之外的第一個用戶,你自然而然地承擔者管理系統的角色——系統管理員。Setup Assistant讓你光榮地成為了可能是唯一的一個的系統管理員。因此,你可以修改系統偏好中的任意項目,安裝應用程序,在系統中添加可以被所有用戶共享的任何資源,但是你不能碰船長的東西——關鍵的系統文件,以及其它用戶除了Public和Sites目錄中的文件——畢竟,管理員賬戶也不過是被加入了Admin用戶組的普通用戶,User域要確保用戶之間有一定的獨立性。看到了嗎?在系統偏好的賬戶面板中,Admin清楚地表明你是一個管理者,在Mac OS X中,至少要有一個Admin用戶組的普通用戶,因為Mac OS X不鼓勵root來管理系統,普通用戶也不能管理系統。凡是屬於Admin用戶組的普通賬戶,即被賦予了這些基本的管理權限,否則,就是普通用戶——水手。

Mac OS X的水手——普通賬戶
普通賬戶能做的事情就有限得多,他只能使用全部應用程序的一個子集,修改與本賬戶有關的系統偏好。但像Security, Energy Saver, Print & Fax, Network, Sharing, Accounts, Date & Time, and Startup Disk preferences這些系統范圍的設置,普通用戶是不能碰觸的——除非大副或者船長告訴你他們的密碼。根據“域”的管理哲學,普通用戶不應該看到或者更改其它普通用戶的私有資源——其他用戶的主目錄,當然,每個人的Public和Sites中的內容是開放的。

Mac OS X的外來者——訪客賬戶
從Mac OS X 10.5開始,新增加了這樣一個賬戶,它更像是船上的一個臨時窩棚,供客人歇腳。訪客賬戶沒有自己的密碼,所以任何人都可以訪客身份使用Mac OS X,而一旦訪客離開了系統,這個臨時窩棚會被拆除——訪客的主目錄會被刪除!里面的任何東西都被扔掉了,比如上網歷史記錄,偏好文件等等。直到再次有人以訪客身份登錄系統,這個臨時窩棚才會被重建,當然,也會被再次刪除。

Mac OS X上的“黑奴”——共享用戶
最沒“地位”的用戶就是共享用戶了,因為這類用戶沒有自己的私有空間(主目錄),甚至連個臨時歇腳的窩棚都沒有。共享用戶一般不能登錄系統,因為默認他們沒有自己的密碼,而能去的地方也只有別人的Public目錄和DropBox——除非管理員來改變這一切。基於這些,共享目錄甚至不能稱得上是Mac OS X這艘船上的一個正常人。

Mac OS X中的“隱形者”——系統賬戶
系統賬戶是系統針對特定進程進行操作的一類賬戶,如果你在另一台電腦上███登陸到你的Mac,那么前提是你的Mac一定要有個“_███d”賬戶在后台默默地維護着”███”進程,再比如說,Apache服務如果開啟了,那么“_www”賬戶會在后台維護着”httpd”進程,如果你又安裝了MySQL數據庫,那么“_mysql”賬戶會在后台維護着“mysqld”進程。看到了嗎,這種系統賬戶都有個共同的特點,就是以一個下划線”_”開頭,從Mac OS X 10.5開始,Apple給系統賬戶加了個“_”姓,以便於區分系統賬戶和其它賬戶。那么這類賬戶有多少?在Mac OS X 10.6中,有40個左右,這個數字取決於你開啟的系統服務還有是否安裝了一些比較“個性”的程序。這些系統賬戶也有自己的主目錄,但絕對不在/Users下面,而是它們各自安裝目錄。如果你發現某個文件夾或者文件資源的所有者是一個你不認識但姓“_”的賬戶,那么那個資源就是那個系統賬戶的。

主目錄下的子目錄布局
這里的“主目錄”是指管理員和普通賬戶的主目錄,不包括root,訪客,共享和系統賬戶。因為用戶的主目錄是用戶自己說得算的目錄,所以用戶可以在主目錄中建立任意文件和目錄。默認情況下,有一些已經存在的目錄,它們是Mac OS X本身“認識”的子目錄:

Desktop
傳統Unix-like操作系統基於命令界面,沒有“桌面”這個概念,而圖形界面的產生,使主目錄下多了一個文件夾,用來存放用戶在圖形界面登錄后看到的目錄——桌面。

Documents
包含用戶的個人文檔。某些應用程序特別喜愛這個目錄,比如Office。

Downloads
默認下載目錄。如果你用Firefox下載了一個文件,卻希望在自己的桌面上找到它的話,你就會失望了。Firefox等瀏覽器會悄悄地把下載來的文件放在Downloads目錄,除非你更改這一行為。

Library
存放用戶的應用程序設置,偏好,以及與該用戶相關的其他系統資源。這些資源包括:字體,聯系人,郵件,屏保,等等等等。所以,用戶的各種各樣的個人資源都放在這里了。

Movies
存放數字影片文件——iTunes,iDVD,和iMovie會默認把這里當做影片文件的存放地點。

Music
存放數字音樂文件——iTunes,GarageBand,和Logic會默認把這里當做數字音樂的存放地點。

Pictures
存放數字圖片文件——iTunes,iPhoto,和Aperture會默認把這里當做圖片的存放地點。

Public
存放用戶希望跟其他用戶共享的文件,默認地,這個目錄可以被其他用戶訪問。

Public/Drop Box
用戶個人的“收件室”——其他用戶可以往里面放東西,但除此之外什么都做不了——甚至看不到里面。

Sites
包含用戶的個人網站文件。當Apache服務開啟時,該目錄稱為該用戶個人站點的根目錄。

Applications目錄
當一個新建立一個用戶時,該用戶主目錄下並不會像上述目錄一樣被自動創建,但是,如果用戶自己手動建立Applications目錄,並把應用程序安裝到該目錄的話,Mac OS X會自動在該目錄找到安裝的應用程序,並且該用戶獨自擁有該應用程序的使用權。

既然主目錄是用戶的天下,那么用戶的的確確是可以隨意亂放文件的,比如你偏偏要把歌曲放在Pictures下面,把視頻(可能是敏感的)文件放在Public下面,把自己的文檔文本統統放在Library下面——這些在Mac OS X看來都是“合法”的,但你知道,這是“不道德”的。

其實,在用戶主目錄下建立的目錄還是有一定規則的,這些規則內建在Mac OS X系統中,比如,在Apache配置文件中就會記錄把用戶主目錄下的Sites目錄當做該用戶個人站點的根目錄,一些其他的應用程序如iTunes,iPhoto等等會到相應的子目錄下尋找或建立自己需要的資源文件。你看,這些系統認識的目錄都被系統悄悄地打上了“烙印”——那些漂亮的帶暗花的目錄圖標。當你在主目錄下新建一個目錄時,目錄圖標就是一個普通的文件夾,而當主目錄下的子目錄是Mac OS X“認識”的,那它的外觀肯定與眾不同——你可能是第一次在自己的主目錄下新建一個Applications目錄,試試看吧。

/User███ared
上面提到的目錄都是主目錄下的子目錄,而各個主目錄默認都放在/Users目錄下,比如/Users/bgates。而/Users下還有一個特別的目錄——/User███ared。
這個目錄並不表示系統中有一個用戶叫做“Shared”,所以他不是任何用戶的主目錄(千萬別把它當成“共享(sharing)用戶”的主目錄!),那么它是做什么的呢?Mac OS X系統希望通過這樣一個目錄提供另外一種用戶之間共享數據的方法。該目錄可以被任意用戶讀寫,但它不應該存放與任何應用程序有關的信息,當然,除非某用戶非要這么做。這個目錄很像傳統Unix系統中的/tmp目錄,用於各(系統)用戶臨時存放或者交換文件。

個人賬戶在Mac OS X中的管理
Mac OS X以其內在的Unix本質管理着User域的一切。如果說文件是系統的細胞,那么賬戶就是文件通過系統跟人打交道的通道。每個文件都有一個賬戶作為它的所有者,因此,系統里任何一個文件都有“主兒”,根據User域的管理哲學,一個賬戶的資源,該賬戶有權決定其它賬戶是否可以訪問,這樣Mac OS X便形成了一個統一的權限體系。而如何管理賬戶以及之間的關系,就成了基礎中的基礎。
跟傳統Unix不同,Mac OS X把本地所有賬戶信息集中存儲在一個目錄中:/private/var/db/dslocal/nodes/Default/Users。
這個目錄就是該機器的“戶口中心”,每一個用戶都有一個對應的XML格式的property list文本文件,后綴名為.plist。關於某一賬戶的內部信息,全都在這里了,如果你有root權限,你可以打開幾個你關心的賬戶對應的.plist文件看看:(但是不要直接修改里面的內容)

generateduid:
看看Mac OS X是怎么給你起名字的:它用一種特殊的算法,把該賬戶創建時間和地點也考慮進去,在全世界范圍內,生成唯一的字符串。這個字符串就是機器給你的ID,它是唯一的——哪怕你在其它機器上先刪除然后再次創建一個同名賬戶,哪怕你用系統還原,重裝,時間機器,等等任何方法手段再次生成同名賬戶,哪怕你的賬戶名跟地球上另一台機器上的某一賬戶同名,這個ID都是不同的,因此它也叫做“Universally Unique ID (UUID)”。有了它,該賬戶便會被永久性地被追蹤——只要系統得到了這個UUID,那無論你改了用戶名,改了密碼,洗了澡,整了容,穿了馬甲,燒成灰 系統都人得你。別忘了,賬戶都是有密碼的,當賬戶名和密碼匹配時,系統才認定你是真正的用戶,那么你改了賬戶名怎么辦?於Mac OS X來講,無所謂,系統永遠把你的UUID和密碼看做真正的匹配條件。

gid:
組ID。對於賬戶所在的組也一樣,機器分配給每個組一個ID用於追蹤,只不過這個ID沒有那么“復雜的身世“,作用范圍僅僅限於本地系統,所以,兩台機器上是會重復的。

hint:
還記得創建賬戶時填寫的一項“密碼提示問題”么?存在兒呢。

home:
主目錄路徑。在Accounts面板中的用戶頭像上點擊右鍵,可找到一處“安全”修改用戶主目錄的地方,所謂安全,是指重新制定一個主目錄,以便在該用戶下次登錄系統的時候使用,但是記住,Mac OS X不會把你舊的主目錄內的個人資源數據拷貝到新主目錄下,而僅僅建立一個新的主目錄結構,仿佛剛剛新建了一個賬戶一樣。當然,舊主目錄中的數據還在,Mac OS X不會去碰它,好吧,如果你這樣做了,記得把舊的東西搬到新的地方。

jpegphoto:
你頭像的二進制表示。

name:
賬戶名的縮寫。這個name其實相當於一個可變的ID,便於用戶使用,因此,這個字段的出生完全是為了方便用戶而已,Mac OS X已經有了無敵的UUID。

passwd:
這里當然不是你賬戶的密碼,Mac OS X用一種單向算法轉換成其它字串,且只記錄換算后的密文。當然了,就算是密文,Mac OS X還是把它單獨存儲在了另一個地方,這里你只能看到”*“符號。

realname:
賬戶名,非縮寫。你其實可以每次都使用這個真名加密碼登陸系統的。如果說realname和name分別是你的”全名“和”昵稱“的話,那么當你每次希望跟系統溝通需要授權時,Mac OS X都會把realname和name映射到你的UID后,才進行進一步密碼匹配授權。看得出,realname和name都是可變的,更沒有誰先誰后的問題,你完全可以使用”William Henry Bill Gates III”作為你的realname,然后使用“Jobs”作為name,最后使用這兩個字串任何一個來登錄系統——Mac OS X會把它們指向同一個UID(注意不是UUID)。

shell:
默認使用哪一種shell。如果現在你還不知道Shell是什么,那么你以后會知道的,至於什么時候知道?取決於你什么時候真正想查一查它。
你可以簡單把shell理解成計算機和人交流的界面——“人機界面”,或者“用戶界面”,所以Mac OS X有兩種內建的shell,一種是“GUI”(圖形用戶界面),一種是“CLI”(命令行界面)。對於后者,在GUI下,Mac OS X使用了terminal來模擬真正的CLI。除了日常使用Finder等GUI程序進行操作,熟悉CLI也是非常重要的,除非你不想知道GUI背后發生了什么。GUI做不到的一些事情用CLI是有可能完成的。例如,我們知道在Finder中可以修改一個文件的“所有者”,以及“權限”等基本Unix文件屬性,但對於在Mac OS X 10.4中引入的ACL(訪問控制列表——請別聯想到路由器),直到Mac OS X 10.6中,依然沒有給出一個GUI程序來控制(這里僅指Client版,Server版有GUI程序可以做到。)一個文件的ACL屬性,在這種情況下,我們只能使用CLI或者說“模擬的CLI”——terminal程序來修改ACL。對於文件權限以及ACL的更多問題,可能會在另一篇文章中介紹。

uid:
在本地機器上,用於識別賬戶的一個數字ID。跟組ID一樣,這個也叫做“用戶ID”,它也是用來在本地范圍內跟蹤用戶的一個ID,既然是本地范圍,那么兩台機器上完全可以出現同一個UID對應不同用戶——它畢竟不是UUID。
UID和GID會在terminal中顯示——當你用“ls -n”命令時,系統不用用戶名和組名標明一個文件的所有者,相應地,系統用UID和GID來顯示。好吧,沒關系,現在可以不去管它。

組賬戶在Mac OS X中的管理
組,僅僅是一個歸類用戶的一個列表。把一個或者多個用戶邏輯上划分為一個組,可以針對文件和一些系統級的操作形成更為細化且方便的控制機制。比如,一個公司里的員工可以有一個“人力資源部”,處於這一部門(邏輯上的組)的員工(個人賬戶)就可以被賦予查看或處理公司的一些敏感信息(文件或者某些程序),用於給員工加薪,發放工資或者培訓之類的操作。一個員工可以屬於多個部門,所以一個賬戶可以屬於多個組。
默認情況下,普通用戶被指定為“stuff”組,管理員被指定為“Admin”組和“stuff”組,而root賬戶,則會被指定為“wheel”組。
注意,組是可以嵌套的,你可以把一個小組整體作為另一個小組的成員。一個不恰當的比喻是,個人賬戶像是一個文件,而一組賬戶放進一個文件夾(目錄)之后可以被看做是一個組,而一個文件夾(目錄)可以放進另一個文件夾(目錄)。

密碼
賬戶密碼:
在傳統Unix系統中,密碼和賬戶信息是分開存儲的。比如:/etc/passwd文件存儲了:賬戶名,密碼是否加密的標記,UID(用戶ID),默認組,主目錄,默認登陸Shell以及注釋信息,而/etc/shadow文件存儲了UID(用戶ID),加密后的密碼,最近一次修改的天數,密碼有效時限等等等等。在Mac OS X上,稍有不同:

用戶信息存儲在:/private/var/db/dslocal/nodes/Default/Users目錄下的.plist文件里,而這里要說的賬戶密碼,存儲在:/private/var/db/shadow/hash目錄下的那些文件中,以每個賬戶的UUID作為文件名的文件中,當然,里面內容是“可讀”但“讀不懂”的,Mac OS X甚至用二進制代碼來記錄該賬戶使用密碼的歷史情況,如:曾經該賬戶被嘗試登陸時密碼輸入不匹配的次數,上次登陸時間,上次密碼更改日期等等信息。


免責聲明!

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



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