寫在開始之前:文章所有內容均爲自己理解,如有錯誤請告知!
文件的類型:
在linux中一切皆文件,任何的設備,目錄,內存中的數據,執行的進程,都以文件的方式表現,
在linux中文件類型可以使用ls 加l選項查看,每種文件類型使用一個字符表示,如下:
- :
普通文件
d:
目錄文件
l :
軟連接
c:
字符設備
b:
塊設備
s:
套接字文件
p:
管道文件
在linux中文件的類型不需要依靠後綴確定,在linux中確定文件類型使用的是文件開頭的魔數,bz等程序要求特定的後綴名稱只是程序的需要,與操作系統無關。
在linux中可以使用hexdump查看文件的魔術
如: hexdump -C -n 10 /bin/bash
#hexdump -C -n 10 /bin/bash
00000000 7f 45 4c 46 02 01 01 00 00 00 |.ELF......|
linux 中程序文件的魔術 ELF
雖然linux不依靠文件後綴區分文件類型,但是不同的文件後綴可以使文件擁有不同的着色,該配置在/etc/DIR_COLORS中定義。
文件的權限:
文件的權限在進程進行文件操作時,對進程發起者身份進行權限審覈。現實了系統資源隔離及對操作系統安全防護。
linux,文件的權限需要文件系統來支撐,也就是說文件的權限信息並非存儲在數據塊中,而是存放在了inode中,或者說不同的文件系統,其組織數據的格式並不相同。
linux文件的權限可以分爲兩種,一種是文件的操作權限,一種是文件的所有者。文件的操作權限約束了除root外的所有人包括文件的所有者,文件的所有者同樣受文件的操作權限控制,但文件的所有者可以更改文件屬性信息中的權限信息,也就是文件的操作權限。所有者無法更改文件的所有者,
文件的操作權限將發起者劃分成爲了三個部分,即文件的所有者,文件的所屬組,其他用戶。並分別賦予對應的權限。這是文件的基本權限,但是這種文件屬主屬組的劃分方法過於單一,所以acl作爲文件訪問者身份的擴展。
文件的所有者:
文件的所有者,就是文件的所有者。一般是文件的創建者,而文件的屬組一般是文件創建者的主組。即passwd文件中對應的組id,但是以上判定並不絕對。文件的所有者可以後期更改。但是隻能使用root身份進行更改。普通用戶即便是文件的所有者也無法更改文件的所有者爲其他用戶。文件的所有者也可後期進行更改,root可以隨意更改,即便所有者並不在所屬組中。而所有者可以更改所屬組爲所有者所在的組的其中一個。
文件的操作權限:
文件的操作權限約束了,對文件發起訪問的訪問者所能具體執行操作,操作行爲分爲三種,即讀·寫·執行(read·write·execute)。在文件權限設定中通常是權限相配合使用。即文件可以同時擁有三種權限的一種,或多種。
文件權限表示使用對應的字母,或八進制數。表示時將每類用戶劃分爲一組,一組中包含rwx三種權限。每組使用3個對應權限的字母或一個八進制的數字表示,每類發起者對應一組相應的權限。
或者說權限的表示法,採用的標誌位表示法,文件權限一共針對三類,每類用戶都有3種操作,所以表示文件的權限一共需要 9位標識位。即--- --- ---,每一位對應相應用戶的具體操作權限。具有權限的位置使用對應功能的字母進行佔位,無權限使用-佔位。或者使用二進制數字進行佔位,表示時每組轉換爲一位八進制數。
drwxr-xr-x. 2 root root 6 3月 18 22:58 圖片
創建文件的默認權限:
創建文件與創建目錄時都會有默認的權限,決定這個權限的是umask值,其中umask值起到的作用是,文件的初始權限減去umask值對應的權限,得到的權限便爲文件或文件夾的最終權限。其中文件的初始權限爲666,文件夾的初始權限爲777.系統在用戶登錄時會根據id判斷登錄的用戶具有的umask值得大小。該段判斷語句在/etc/bashrc文件中,bash加載時調用執行。
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi
umask:
設定umask值,umask決定了創建文件的默認權限的最終權限,umask值是以八進制數顯示的二進制數,一共9位2進制數每一位表示對應的身份及對應的權限。如果umask值被置位則表示創建的新文件不應該具有該權限。或文件的權限+umask=666,文件夾的權限+umask=777.umask值的計算不是數值計算而是對應權限位的刪除。然後以八進制數表示最終結果。
umask:查看umask值
umask:設定umask值
數值表示:umask 777
即設置umask值爲777或 rwx,rwx,rwx。最終結果
文件:rw-,rw-,rw-,減去 rwx,rwx,rwx,即---,---,---,或000;什麼權限都沒有
目錄:rwx,rwx,rwx,減去rwx,rwx,rwx,即---,---,---,或000;同樣什麼權限也沒有
模式表示:umask u=rwx,g=rwx,o=rwx
該表示法表示的最終能獲取到的權限,如果轉換爲數值,則對位取反。
u=rwx表示所有者最終可以獲取到rwx權限,g,o同樣這時的umask值應該爲000
-S:顯示以模式法表示的umask
手動設置umask值,無法長期保持有效,即只在本次登錄有效,如果需要長期有效。則在/etc/bashrc定義後重新進行定義。可以寫入文件~/。bashrc中,以命令的形式
文件的權限:
文件的權限分爲:基本權限與特殊權限,基本權限是爲了與特殊權限做區分。
我在欠你一張圖吧,反正之前已經欠你3張了。
文件的操作發起者被分爲三類。文件的所有者,文件的所屬組。以及其他用戶。每類用對應3種操作權限,即讀寫執行。
訪問文件,進行權限匹配之前,首先進行身份匹配,身份匹配順序爲:文件的所有者,文件的所屬組,其他用戶(我爲啥想起了臨時工,好吧他們也是背鍋俠)一旦身法匹配,不再去匹配下一個身份,即權限無法疊加。如某用戶既是文件的所有者,同時也在文件的所屬組中,身份匹配時首先進行文件的所有者匹配,匹配成功。不進行後續匹配,所以發起者訪問的文件使用的身份是文件的所有者。所具有的文件權限爲所有者的權限。後續的身份不對權限產生影響。
對於root用戶,對任何的文件都有rw權限。而且3種身份中只要有一種具有執行權限,即只要具有一個執行位,無論是誰的,root便具有該文件的執行權限。
當一個文件爲可執行的程序時用戶對該文件發起訪問。該可執行的文件會對發起者的身份進行審覈。即單純的驗證發起者是否有權限執行該程序。如果有權限執行該程序,那麼該文件如果需要進行權限審覈的操作,被審覈的身份爲該用戶的權限,這裏的用戶權限包括用戶的權限以及該用戶加入的全部組的權限。,其中程序的權限僅是用於驗證用戶權限,如果具有特殊權限位除外。
基本權限:
r:read讀權限,即有此權限,用戶可以讀取文件的內容。
w:write寫權限,即有此權限,用戶可以將內容寫入文件,包括文件的屬性。
一般w的使用需要配合r。當無r權限是隻是不能讀取,但不意味着不能寫入。可以使用>重定向進行寫入。而且使用命令更改文件的屬性同樣需要文件的w權限,比如touch更新時間。也就是說w權限不光決定着數據塊的數據寫入,同時也決定着inode表的屬性寫入。
x:execute執行權限,即有此權限,用戶可以執行文件,可執行的文件一般是二進制程序,或者腳本文件。
文件夾的權限:
目錄的權限對於root來說並沒有影響,即便000,也就是說都沒有執行權限。root一樣可以進入目錄,並查看,創建,刪除文件
基本權限:
r:read文件夾的讀權限。文件夾的內容包括兩部分,一部分是文件夾自身的屬性,一部分是文件夾中文件的名稱與inode的映射關係。文件夾的讀權限決定能否讀取文件夾的數據,也就是文件的名稱與inode的映射關係
w:write文件夾的寫權限。決定了能否刪除文件夾中的內容,也就是更改文件夾文件的數據塊,即映射關係。
x:execute文件夾的執行權限,決定了能否將工作目錄更改爲該文件夾。沒有該權限位,意味着無法讀寫刪除文件,即便沒有讀寫權限,也可以通過路徑訪問文件,但是需要具有被訪問的文件的相關權限。