linux的文件權限與目錄配置
1.用戶與用戶組
在Linux中,每個文件都有相當多的屬性和權限,其中最重要的概念就是文件的擁有者。
1.1 文件擁有者
Linux是一個多人多任務的系統,常常有多人共用一臺主機的情況出現,因此在系統中可以設置多個用戶及用戶組,以此來保護每個人的隱私。
對于一個文件的擁有者,他如果設置只有自己才能看和修改這個文件,其他人就無法查看和修改它。
1.2 用戶組
用戶組一般在團隊協作時被使用。在一個用戶組中,我們既可以允許組內成員查看和修改自己的文件,以便于完成團隊任務,也可以私有自己的文件,保護自己的隱私,并且可以設置組外的成員對組內的文件沒有任何權限。而對于一個用戶來說,它可以加入多個用戶組。
1.3 其他人
一個用戶(User),所屬群組(Group),以及不屬于用戶組的其他人(Others)。
一個用戶的文件,同屬于這個用戶的用戶組,組外的其他人對于這個文件都是陌生人。
在其中有個例外,就是root用戶,root用戶在Linux系統中擁有至高無上的權利,他可以任意查看修改任何文件,擁有相當萬能和危險的力量。
Linux用戶身份和用戶組記錄文件
Linux系統中,默認情況下,以下三個文件是Linux系統中賬號,密碼,用戶組信息的集中地:
/etc/passwd
文件中,所有系統上的賬號和一般身份用戶,以及root用戶的相關信息,
/etc/shadow
文件中:記錄個人的密碼。
/etc/group
文件中:記錄Linux中所有的組名。
2.linux文件權限概念
初學Linux時常常遇到的Permission deny問題,就是權限不足的意思。
2.1 Linux文件屬性
在Linux中,使用命令ls可以查看當前目錄下的所有文件。使用su -
來切換到root用戶,再使用ls -al
就會得到以下形式:
-rw-r--r--. 2 root root 1024 May 4 18:00 test.txt
【 權限 】【鏈接數】【擁有者】【用戶組】【文件容量】【 修改日期 】【文件名】
-
在學習時,建議使用root用戶,可以用
su -
來切換到root用戶,exit來退回到原用戶。 -
第一欄:代表這個文件的類型和權限 ‘’ -rw-r–r-- " 一共有十個字符
- 第一個字符 代表文件是目錄,文件,還是鏈接文件
- 為【d】時是目錄
- 為【-】時是文件
- 為【|】時是鏈接文件
- 為【b】時是設備文件內可供存儲的周邊設備
- 為【c】時是設備文件內的串行端口設備,如鍵盤鼠標
- 接下來的字符中,三個為一組,均為【rwx】的組合,r表示可讀(read),w表示可寫(write),x表示可執行(execute),無對應權限時,就用
-
代替。- 第一組表示文件擁有者可具備權限。
- 第二組表示加入此用戶組的賬號的權限。
- 第三組表示非本人且沒有加入本用戶組的其他賬號的權限。
- 第一個字符 代表文件是目錄,文件,還是鏈接文件
-
第二欄:表示有多少文件名鏈接到此節點
- 每個文件都會把它的權限和屬性記錄到文件系統的incode中
-
第三欄:表示這個文件或目錄的擁有者賬號。
-
第四欄:表示這個文件的所屬用戶組。
-
第五欄:表示這個文件的大小,默認大小為Bytes。
-
第六欄:表示文件的創建日期或者最近的修改日期。
-
第七欄:表示這個文件的文件名。如果文件名前面有【.】,表示這個文件是隱藏文件。
2.2 修改文件屬性與權限
chgrp:修改文件所屬用戶組
chgrp即是change group
的縮寫,它的一般用法為:
chgrp [-R] 新用戶組名 目錄名/文件名
- -R:即進行遞歸(recursive)修改,連同子目錄下的所有文件,目錄都更新為這個用戶組。
其中新用戶組名必須存在于/etc/group
文件中。
chown:修改文件擁有者
chown即是change owner
的縮寫,它的一般用法為:
chown [-R] 新用戶名[:用戶組] 目錄名/文件名
- 即可以只寫新用戶名修改文件擁有者,也可以寫
新用戶名:用戶組名
來修改文件擁有者和用戶組。
用戶名必須存在于/etc/passwd
文件中
chmod:修改文件權限
chmod來修改文件的權限,有兩種設置方法,分別是數字和符號:
- 數字類型修改文件權限
Linux文件的基本權限有9個,分為三組:擁有者(owner),所屬群組(group),其他人(others)。每組各有自己的讀(read),寫(write),執行(execute)權限。整體權限字符為【-rwxrwxrwx】。
每種權限都可以用數字代替:
r:4
w:2
x:1
那么每種權限組合就可以用數字和表示出來:
rwx = 7
-wx = 3
...
r-- = 4
...
--- = 0
整體權限字符就可以直接用數字表示:
-rwxrw-r-- 表示為 764
就可以用chomd進行設置
chomd [-R] xyz 文件名或目錄
- 符號類型修改文件權限
在符號類型修改中:
對象 | 操作符 | 權限類型 | 說明 | |
---|---|---|---|---|
u | 指擁有者(user) | |||
g | + | r | 為用戶組添加讀權限 | |
chmod | o | - | w | 為其他人移除寫權限 |
a | = | x | 設置全部用戶僅有執行權限 |
具體命令為
chomd u=rwx,g+rw,o-r 文件名
2.3.目錄和文件的權限意義
在linux系統中,文件權限對于數據安全非常重要,而權限對于目錄和文件是不同的。
- 權限對文件的重要性
文件就是實際含有數據的地方,包括一般文本文件,數據庫文件,二進制可執行文件等。
權限對于文件:- r(read):可以讀取此文件的實際內容,如讀取文本文件的文字內容等。
- w(write):可以編輯,新增或修改該文件的內容(不包含刪除該文件)。
- x(execute):該文件有可以被系統執行的權限。
- 在Linux中,一個文件是否可以被執行,僅由x權限決定,與文件名沒有決定關系。
- 權限對目錄的重要性
目錄主要的內容在記錄文件名列表,文件名和目錄有強烈的關聯。對于目錄來說權限的意義有些不同: - r (read contects in dirctory)
表示具有讀取目錄結構列表的權限,具有該權限時,可以查詢該目錄下的文件名數據。 - w (modify contects of directory)
表示具有改動該目錄結構列表的權限,也就是- 建立新的文件和目錄。
- 刪除已經存在的文件或目錄(無視該文件或目錄的權限)。
- 將已存在的文件或目錄改名。
- 移動該目錄內的文件或目錄的位置。
- x (access directory)
表示具有用戶進入該目錄成為工作目錄的權限,
總結一下:
組件 | 內容 | r | w | x |
---|---|---|---|---|
文件 | 詳細數據data | 讀取文件內容 | 修改文件內容 | 執行文件內容 |
目錄 | 文件名 | 讀取文件名 | 修改文件名 | 進入該目錄的權限 |
2.4.linux文件種類與拓展名
文件種類
- 常規文件(regular file):第一個屬性為 - ,就是一般進行讀寫的文件。根據文件內容還可以繼續分類:
- 純文本文件(ASC||):內容為人類可以直接讀到的數據,如數字,字母等。
- 二進制文件(binary):Linux中的可執行文件,系統僅可認識并執行此類文件。
- 數據文件(data) :在程序運行過程中會讀取的特定格式的文件。
- 目錄(directory):第一個屬性為d。
- 鏈接文件(link):第一個屬性為l,類似于快捷方式。
- 設備與設備文件(device):與系統周邊及存儲等相關的一些文件,通常都集中在/dev目錄下,通常又分為兩種:
- 區塊(block):第一個屬性為b。就是一些存儲數據,以提供系統隨機存取的接口設備,舉例來說硬盤和軟盤就是。
- 字符(character):第一個屬性為c,亦是一些串行端口的接口設備,如鍵盤,鼠標等。
- 數據輸送軟件(FIFO):第一個屬性為p。主要目的為解決多個程序同時讀寫一個文件所造成的錯誤問題。
Linux文件拓展名
一個文件能不能被執行,與它的第一欄的十個屬性有關,與文件拓展名根本一點關系都沒有。
一個文件能否執行成功,只和兩個要素有關:
- 文件是否是Linux可執行的類型
- 文件是否有被執行的權限
但在Linux中,為了借由拓展名來了解該文件是什么東西,通常還是會以適當拓展名來表示文件是什么種類。
以下是常用拓展名: - *.sh:腳本或批處理文件(scripts),因為批處理文件使用shell寫成,所以拓展名就編成 .sh。
- Z,.tar,.tar.gz,.zip,*.tgz:經過打包的壓縮文件,不同的壓縮文件gunzip,tar等,產生了不同的后綴名。
- .html,.php:網頁相關文件,分別代表HTML文件語法和PHP語法的網頁文件。.html的文件可以使用網頁瀏覽器直接開啟。.php文件可以通過客戶端的瀏覽器來服務端瀏覽,以得到運算后的網頁結果。
3.linux目錄配置
3.1Linux目錄配置的依據——FHS
FHS的主要目的是希望用戶可以了解到以安裝軟件通常放置與哪個目錄下,所以制定了一個Linux目錄配置的標準。
FHS依據文件系統使用的頻繁與否與是否允許用戶隨意修改,而將目錄定義成為四種可交互作用的形態:
可分享 | 不可分享 | |
---|---|---|
不變 | /usr (軟件存放處) | /etc (配置文件) |
/opt (第三方軟件) | /boot (啟動與內核文件) | |
可變動 | /var/mail (用戶郵箱) | /var/run (程序相關) |
/var/spool/news (新聞組) | /var/lock (程序相關) |
這四種類型為:
- 可分享:可以分享給其他系統掛載使用的目錄,所以包括執行文件與用戶的郵件等數據,是能夠分享給網絡上其他主機掛載用到目錄。
- 不可分享:自己機器上面運行的設備文件或是與程序相關的socket文件等,僅與自身機器有關,不適合分享給其他主機。
- 不變:有些數據是不會經常變動的,跟隨著發行版而不變動。
- 可變動:經常修改的數據,例如日志文件,一般用戶可自行接受的新聞組等。
事實上,FHS針對目錄樹架構僅定義出三層目錄下該放什么: - /(root,根目錄):與啟動系統有關。
- /user:與軟件安裝/執行有關。
- /var:與系統運行過程有關。
根目錄(/)的意義與內容
根目錄是整個系統中最重要的一個目錄,所有的目錄都由根目錄衍生,同時根目錄也與啟動,還原,系統修復有關。
因為根目錄十分重要,以此根目錄(/)所在分區應該越小越好,且應用程序所安裝的軟件最好不要與根目錄放在同一個分區。
在FHS定義下,根目錄下應該有下面這些目錄:
第一部分:FHS要求必須安裝的目錄。
- /bin:放置在單人維護模式下還能被使用的命令,可以被root與一般賬號所使用,主要有:cat,chmod,chown,date,mv等
- /boot:主要放置啟動會使用到的文件,包括Linux內核文件以及啟動選項與啟動所需配置文件等。Linux內核常用文件名為:vmlinuz。
- /dev:在Linux系統中,任何設備與接口設備都是以文件的形式存在于這個目錄中。只要通過讀寫這個目錄下的某個文件,就等于讀寫某個設備。
- /etc:系統主要的配置文件幾乎都放置在這個目錄內,例如人員的賬號密碼文件,各種服務的啟動文件等。一般來說,這個目錄下的各文件屬性是可以讓一般用戶查看的,但是只有root用戶有權力修改。FHS建議不要放置可執行文件在這個目錄中。還規范了幾個重要的目錄最好要在/etc/目錄下:
- /etc/opt(必要):這個目錄在放置第三方輔助軟件/opt的相關配置文件。
- /etc/X11/(建議):與X Window有關的各種配置文件都在這里,尤其是xorg.conf這個X Server的配置文件。
- /etc/sgml/(建議):與SGML格式有關的各項配置文件。
- /etc/xml/(建議):與XML格式有關的各項配置文件。
- /lib:其中放置的是在啟動時會用到的函數庫,以及在/bin或/sbin下面的命令會調用的函數庫而已。FHS要求以下目錄必須存在
- /lib/modules/:這個目錄主要放置可抽換式的內核相關模板(驅動程序)。
- /media:目錄下放置的是可刪除的設備,包括軟盤,光盤,DVD等設備都暫時掛載于此。
- /mnt:放置一些想要暫時掛載的額外的設備。
- /opt:這個是給第三方輔助軟件放置的目錄。
- /run:放置系統啟動后所產生的各項信息。
- /sbin:放置的是在系統啟動過程中所需要的,包括啟動,修復,還原系統所需要的命令。至于某些服務器軟件程序,一般放置在/usr/sbin/中。本機自行安裝的軟件產生的系統執行文件,放置到/usr/local/sbin中。常見命令包括:放fdisk,fsck,ifconfig,mkfs等。
- /srv:是一些網絡服務啟動之后,這些服務所需要使用的數據目錄。
- /tmp:這是讓一般用戶或是正在執行的程序暫時放置文件的地方。這個目錄是任何人都可以存取的需要定時清理。FHS建議在啟動時要將/tmp下的數據全部刪除。
第二部分:FHS建議可以存在的目錄 - home:系統默認的家目錄,默認的用戶家目錄都會規范到這里。
* ~:代表目前這個用戶的家目錄。
* dmatsai:代表dmatsai的家目錄。 - /lib:用來存放與/lib不同的格式的二進制函數庫,例如支持64位的/lib64函數庫等。
- /root:系統管理員(root)的家目錄。
有些FHS標準外的目錄需要注意: - lost+found:這個目錄是使用ext2,ext3,ext4文件系統格式才會產生的目錄,目的時當文件系統發生錯誤時,將一些遺失的片段放置到這個目錄下,不過如果使用的是xfs系統就不會存在此目錄。
- proc:這個目錄本身是一個虛擬文件系統,它放置的數據都是在內存中,例如系統內核,進程信息,外接設備的狀態及網絡狀態,所有數據都在內存中,所以本身不占任何空間。
- sys:與/proc非常類似,也是虛擬的文件系統,主要記錄內核和系統硬件信息相關的內容。同樣不占硬盤容量。
- usr:下文中詳細講解。
- var:下文中詳細講解。
/usr的意義與u內容
依據FHS的基本定義,/usr里面放置的數據屬于不可分享與不可變動。
/usr并非user的縮寫,usr為UNIX Software Resource 的縮寫,也就是UNIX操作系統軟件資源所存放的目錄,并不是用戶的數據。所有系統默認的的軟件都會放置到/usr下面。一般來說/usr的子目錄建議有下面這些:
第一部分:FHS要求必須存在的部分
- /usr/bin/:所有一般用戶能夠使用的命令都放在這里。FHS要求在此目錄下不應該有子目錄。
- /usr/lib/:基本上,與/lib功能相同。
- /usr/local/:系統管理員在本機安裝自己下載的軟件時,建議安裝到此目錄。
- /usr/sbin/:非系統正常運行所需要的系統命令。
- /usr/share/:主要放置只讀的數據文件,也包括共享文件,在這個目錄下放置的數據幾乎是不分硬件架構均可以讀取的數據,幾乎都是文本文件。還有些常見的子目錄:
- /usr/share/man:在線幫助文件。
- /usr/share/doc:軟件的說明文檔。
- /usr/share/zoneinfo:與時區有關的時區文件。
第二部分:FHS建議可以存在的目錄
- /usr/games/:與游戲比較相關的數據存放處。
- /usr/include/:c/c++等程序語言的頭文件與包含文件放置處。
- /usr/libexec/:某些不被一般用戶常用的執行文件或腳本。
- /usr/lib:與/lib作用相同。
- /usr/src/:一般建議把源代碼放置到這里。內核源代碼放置到/usr/src/Linux/目錄下。
/var的意義與內容
/var是在系統運行后會逐漸占用硬盤容量的目錄。/var目錄主要針對于經常性變動的文件,包括緩存(cache),日志文件(log file),以及某些軟件運行所產生的文件。常見子目錄有:
第一部分:FHS要求必須要存在的目錄
- /var/cache/:應用程序本身運行過程中會產生的一些緩存。
- /var/lib/:程序本身執行過程中,需要使用到的數據文件所放置的目錄。在此目錄下的各自的軟件應該要有各自的目錄。
- /var/lock/:某些設備或者文件資源一次只能被一個應用程序所使用,如果同時有兩個程序使用該設備時,就可能產生一些錯誤的情況,因此就得要將該設備上鎖,以確保該設備只會給單一軟件所使用。
- /var/log/:相當重要。這是日志文件放置的目錄。
- /var/mail/:放置個人電子郵箱的目錄。
- /var/run/:某些程序或者服務啟動后,會將它們的PID放置到該目錄下。
- /var/spool/:這個目錄通常放置一些隊列數據,所謂的隊列就是需要排隊等待其他進程使用的數據,這些數據使用后都會被刪除。
3.2 目錄樹
在Linux下,所有的文件和目錄都是有根目錄開始,它是所有目錄和源文件的源頭,再一個個分支出其他節點,稱這種目錄配置方式為:目錄樹。
- 目錄樹的啟動點為根目錄(/,root)
- 每一個目錄不止能使用本地分區的文件系統,也可以使用網絡上的文件系統。
- 每一個文件在此目錄樹中的文件名都是獨一無二的。
3.3 絕對路徑與相對路徑
根據文件名寫法的不同,也可以將所謂的路徑定義為絕對路徑與相對路徑。
-
絕對路徑:由根目錄(/)開始寫起的文件名或目錄名稱,如
/home/dmtsai/.bashrc
; -
相對路徑:相對于目前路徑的文件名寫法。
-
.:代表當前的目錄,也可以用. /表示;
-
…:代表上一層目錄,也可以用…/來表示;