一、摘要

ls是Linux和Unix下最常使用的命令之一,主要用來列舉目錄下的文件信息,-l參數(shù)允許查看當前目錄下所有可見文件的詳細屬性,包括文件屬性、所有者、文件大小等信息。但是,當其顯示符號鏈接的屬性時,無論其指向文件屬性如何,都會顯示777,即任何人可讀可寫可執(zhí)行。本文從ls命令源碼出發(fā),由淺入深地分析該現(xiàn)象的原因,簡略探究了Linux 4.10下的符號鏈接鏈接、文件系統(tǒng)與權限的源碼實現(xiàn)。

 

關鍵詞:Linux ls 符號鏈接 文件系統(tǒng) 權限 源碼分析

二、引言

2.1 Linux文件權限

在Linux中每個文件有所有者、所在組、其它組的概念[11]。所有者一般為文件的創(chuàng)建者,誰創(chuàng)建了該文件,就天然的成為該文件的所有者;當某個用戶創(chuàng)建了一個文件后,這個文件的所在組就是該用戶所在的組;除開文件的所有者和所在組的用戶外,系統(tǒng)的其它用戶都是文件的其它組。ls 命令將每個由 Directory 參數(shù)指定的目錄或者每個由 File 參數(shù)指定的名稱寫到標準輸出,以及所要求的和標志一起的其它信息。ls -l中顯示的內(nèi)容常如下所示:

-rwxrw-r‐-1 root root 1213 Feb 2 09:39 abc

前10個字符說明了文件類型與權限。第一個字符代表文件(-)、目錄(d),鏈接(l),其余字符每3個一組(rwx),讀(r)、寫(w)、執(zhí)行(x)。第一組rwx:文件所有者的權限是讀、寫和執(zhí)行;第二組rw-:與文件所有者同一組的用戶的權限是讀、寫但不能執(zhí)行;第三組r--:不與文件所有者同組的其他用戶的權限是讀不能寫和執(zhí)行。權限也可用數(shù)字表示為:r=4,w=2,x=1  因此rwx=4+2+1=7。

2.2 符號鏈接

如前所述,若第一個字符顯示為l,說明該文件是符號鏈接。符號鏈接(軟鏈接)是一類特殊的文件, 其包含有一條以絕對路徑或者相對路徑的形式指向其它文件或者目錄的引用[12]。符號鏈接的操作是透明的:對符號鏈接文件進行讀寫的程序會表現(xiàn)得直接對目標文件進行操作。某些需要特別處理符號鏈接的程序(如備份程序)可能會識別并直接對其進行操作。一個符號鏈接文件僅包含有一個文本字符串,其被操作系統(tǒng)解釋為一條指向另一個文件或者目錄的路徑。它是一個獨立文件,其存在并不依賴于目標文件。如果刪除一個符號鏈接,它指向的目標文件不受影響。如果目標文件被移動、重命名或者刪除,任何指向它的符號鏈接仍然存在,但是它們將會指向一個不復存在的文件。這種情況被有時被稱為被遺棄。

但是,我們常常發(fā)現(xiàn),創(chuàng)建符號鏈接其權限就會顯示為lrwxrwxrwx,為什么?是ls命令對符號鏈接進行了處理,還是文件本身權限即如此?這樣會不會帶來一些安全隱患?懷著這些問題,本文由淺入深,從ls命令出發(fā),探索了其背后的系統(tǒng)調(diào)用至vfs文件系統(tǒng)實現(xiàn)細節(jié),力求解釋這些問題。但作者水平有限,尚有很多細節(jié)不清楚,不對之處懇請批評指正。

 

 

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓學習是年輕人改變自己的最好方式