Linux的檔案權限與目錄配置,建議收藏

Linux 用戶身份與群組記錄的檔案

在Linux系統當中,默認的情況下,所有的系統上的賬號與一般身份使用者,還有root的相關信息,都是記錄在/etc/passwd的檔案內的。至於個人的密碼則是記錄在/etc/shadow的檔案下。此外,Linux所有的組名都記錄在/etc/group內。這3個檔案可以說Linux系統裡面賬號、密碼、群組信息的集中地。

ls :List的意思,重點在顯示檔案的文件名與相關屬性。而選項-al表示列出所有檔案的詳細的權限與屬性(包含隱藏文件,就是文件名第一個字符為.的檔案)

第一欄代表這個檔案的類型與權限(permission)

Linux的檔案權限與目錄配置,建議收藏

1.第一個字符代表這個檔案是:目錄、檔案或鏈接文件等等

當為d則是目錄

當為-則是檔案

若是l則是連結檔

若是b則表示為裝置文件裡面可供存儲的接口設備(可隨機存取裝置);

若是c則表示為裝置文件裡面的串行端口設備

2.接下來的字符中,以3個為一組,且均為rwx的3個參數的組合。其中r代表可讀(read)、w代表可寫write、x代表可執行execute。這3個權限的位置會改變,如果沒有權限,就會出現減號 - 而已。

第一組為檔案擁有者的權限

第二組為同群組的權限

第三組為其它非本群組的權限

2.第二欄表示有多少檔名連接到此節點(i-node)

每個檔案都會將它的權限與屬性記錄到文件系統的i-node中,不過,使用目錄樹卻是使用文件名來記錄,因此每個檔名就會連結到一個i-node這個屬性記錄的,就是有多少個不同的檔名連結到相同的一個i-node號碼去就是了。

3.第三欄表示這個檔案(或目錄)的擁有者賬號

4.第四欄表示這個檔案的所屬群組

在Linux系統下,賬號會附屬於一個或多個群組中

5.第五欄為這個檔案的容量的大小,默認單位為bytes;

6.第六欄為這個檔案的建檔日期或者是最近的修改日期

如果想要顯示完整的時間格式,可以利用ls的選項:ls -l --full-time就是能夠顯示完整的時間格式了,包括年、月、日、時間。

7.第七欄為這個檔案的檔名

如何改變文件屬性與權限

chgrp: 改變檔案所屬群組

chown: 改變檔案擁有者

chmod: 改變檔案的權限,SUID,SGID,SBIT等的特性

改變所屬群組chgrp

改變一個檔案的群組,要被改變的組名必須要在/etc/group檔案內存在才行,否則會顯示錯誤。

chgrp [-R ] -R:進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有檔案、目錄都更新成為這個群組之意。常常用在變更某一目錄內所有的檔案之情況。

改變檔案擁有者 chown

用戶必須是已經存在系統中的賬號,也就是在/etc/passwd 這個檔案中有記錄的用戶名稱才能改變。如果要連目錄下的所有次目錄或檔案同時更改檔案擁有者的話,直接加上 -R 選項即可。

語法

chown [-R] 賬號名稱 檔案或目錄

chown [-R] 賬號名稱:組名 檔案或目錄

選項與參數

-R:進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有檔案都變更

事實上,chown也可以chown user.group file ,亦即在擁有者與群組間加上小數點.也行

複製檔案給之外的其他人 cp 指令

cp 來源檔案 目標文件

改變權限 chmod 權限的設定方法分別可以使用數字或者符號進行權限變更

數字類型改變檔案的權限

Linux檔案的基本權限有9個,分別owner/group/other三種身份各有的read/write/execute權限,其中數字代表各個權限對照表:

r:4

w :2

x: 1

每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的

chmod [-R] xyz 檔案或目錄

選項與參數:

xyz:就是數字類型的權限屬性,為rwx屬性數值的相加

-R: 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有檔案都會變更

符號類型改變檔案權限

基本上就9個權限分別是1.user 2.group 3.others 3種身份。由u,g,o來代表3種身份的權限。此外a代表all亦即全部的身份,那麼讀寫的權限就可以寫成r,w,x

u

+(加入) r

g

chmod -(除去) w 檔案或目錄

o

=(設定) x

a

目錄與檔案之權限意義:

權限對檔案的重要性

檔案是實際含有數據的地方,包括一般文本文件、數據庫內容文件、二進制可執行文件(binary program)等等。因此,權限對於檔案來說,他的意義是這樣的:

r(read) : 可讀取此一檔案的實際內容

w(write): 可以編輯、新增或者是修改該檔案的內容(但不含刪除該檔案);

x(execute):該檔案具有可以被系統執行的權限

x在windows底下一個檔案是否具有執行的能力是由擴展名來判斷的,但在Linux底下,檔案是否能被執行,則是由是否具有x這個權限來決定。

w權限具有寫入/編輯/新增/修改檔案的內容的權限,但並不具備有刪除該檔案本事的權限。對於檔案的rwx來說,主要針對檔案的內容而言,與檔案檔名的存在與否沒有關係。因為檔案記錄的是實際的數據

權限對目錄的重要性

檔案是存放實際數據的所在,目錄主要的內容在記錄文件名列表,文件名與目錄有強烈的關聯。

如果針對目錄時:

r(read contents in directory)

表示具有讀取目錄結構列表的權限,所以具有讀取r一個目錄的權限,表示可以查詢該目錄下的文件名數據。所以利用ls這個指令將該目錄的內容列表顯示出來

w(modify contents of directory)

這個可寫入的權限目錄來說表示具有異動該目錄結構列表的權限。也就是這些權限

建立新的檔案與目錄;

刪除已經存在的檔案與目錄(不論該檔案的權限為何)

將已存在的檔案或目錄進行更名;

搬移該目錄內的檔案、目錄位置

總之,目錄的w權限就與該目錄底下的文件名異動有關

x(access directory)

目錄只是記錄文件名,不可以被執行,目錄的x代表的是用戶能否進入該目錄成為工作目錄的用途。就是你目前所在的目錄。

Linux的檔案權限與目錄配置,建議收藏

Linux 檔案種類與擴展名

任何裝置在Linux底下都是檔案,數據溝通的專屬的檔案在負責。

檔案種類:

1.正規檔案(regular file);一般在進行存取的類型的檔案。依照檔案的內容,大略可以分為

2.純文本檔(ASCII):這是Linux系統中最多的一種文件類型,稱為純文本檔是因為內容為人類可以直接讀到的數據。幾乎只要用來做為設定的檔案都屬於這一種文件類型。

3.二進制文件(binary):Linux當中的可執行文件(script,文字興批處理文件不算)這種格式。

4.數據格式文件(data):有些程序在運作的過程中會讀取某些特定格式的檔案,那些特定格式的檔案可以被稱為數據文件(data file)

目錄(directory): 第一個屬性為d

連結檔(link):就是類似Windows系統底下的快捷方式。第一個屬性為l(英文L的小寫)

設備與裝置文件(device)

與系統周邊及存儲等相關的一些檔案,通常都集中在/dev這個目錄之下。通常又分為兩種:

1.區塊(block)設備檔:就是一些存儲數據,以提供系統隨機存取的接口設備。

2.字符(character)設備文件:亦即是一些串行端口的接口設備,這些設備的特色就是一次性讀取的,不能夠截斷輸出。

3.資料接口文件(sockets):

被稱為數據接口文件,這種類型的檔案通常被用在網絡上的數據承接。可以啟動一個程序來監聽客戶端的要求,而客戶端可以透過這個socket來進行數據的溝通。第一個屬性為s,最常在/var/run這個目錄中看到這種文件類型

4.數據輸送文件(FIFO,pipe)

FIFO是一種特殊的文件類型,主要的目的是在解決多個程序同時存取一個檔案所造成的錯誤問題。FIFO是first-in-first-out的縮寫。第一個屬性為p

Linux的檔案權限與目錄配置,建議收藏

Linux檔案擴展名:

基本上,Linux的檔案沒有所謂的擴展名,這個觀念跟windows的情況不相同。在Windows底下,能被執行的檔案擴展名通常是.com .exe .bat等等,而在Linux底下,只要具有x權限

這個x代表這個檔案具有可執行的能力,但是能不能執行成功,就的看該檔案的內容了

通常以適當的擴展名來表示該檔案是什麼種類的。常用的擴展名:

1.*.sh :腳本或批處理文件(scripts),因為批處理文件為使用shell寫成的,所以擴展名就編成.sh

2.*Z,*.tar, *tar.gz,*zip,*tgz:經過打包的壓縮文件。因為壓縮軟件分別為gunzip,tar等等的,由於不同的壓縮軟件,而取其相關的擴展名

3.*html,*.php:網頁相關檔案,分別代表HTML語法與PHP語法新的網頁檔案。.html的檔案可使用網頁瀏覽器來直接開啟,至於.php的檔案,則可以透過client端的瀏覽器來server端瀏覽,以得到運算後的網頁結果

Linux檔案長度限制:

在Linux底下,使用預設的Ext2/Ext3文件系統時,針對檔案的檔名長度 限制為:

1.單一檔案或目錄的最大容許文件名為255個字符;

2.包含完整路徑名稱及目錄/之完整檔名為4096個字符。

Linux目錄配置的依據--FHS(Filesystem Hierarchy Standard)

根據FHS的官方文件指出,主要目的是希望讓使用者可以瞭解已安裝軟件通常放置於那個目錄下,所以他們希望獨立的軟件開發商、操作系統製作者、以及要維護系統的用戶都能夠遵循FHS的標準。也就是說,FHS的重點在於規範每個特定的目錄下應該要放置什麼樣的數據而已。

事實上,FHS依據文件系統使用的頻繁與否是否允許使用者隨意更動,而將目錄定義稱為四種交互作用的形態。

可分享的(shareable)不可分享的(unshareable)

不變的 /usr(軟件放置處) /etc(配置文件)

(static) /opt(第三方協力軟件) /boot(開機與核心檔)

可變動的 /var/mail(使用者郵件信箱)/var/run(程序相關)

(variable) /var/spool/new(新聞組)/var/lock(程序相關)

1.可分享的:可以分享給其他系統掛載使用的目錄,所以包括執行文件與用戶的郵件等數據,是能夠分享給網絡上其它主機掛載用的目錄;

2.不可分享的:自己機器上面運作的裝置檔案或者是與程序相關的socket檔案等,由於僅與自身機器有關,所以當然就不適合分享給其它主機了。

3.不變的:有些數據時不會經常變動的,跟隨著distribution而不變動。

4.可變動的:經常改變的數據

Linux的檔案權限與目錄配置,建議收藏

事實上,FHS針對目錄架構僅定義出三層目錄底下應該放置什麼數據而已,分別是底下這三個目錄的定義:

/(root,根目錄):與開機系統有關;

/usr(unix software resource):與軟件安裝/執行有關;

/var(variable):與系統運作過程有關。

每層目錄底下所應該要放置的目錄也都又特定的規定

如果以賬號的角度來看,所謂root指的是系統管理員的身份,如果以目錄的角度來看,root指的是根目錄,就是/

根目錄(/)的意義與內容:

根目錄是整個系統最重要的一個目錄,因為不但所有的目錄都是由根目錄衍生出來的,同時根目錄也與開機/還原/系統修復等動作有關。所以在FHS的要求方面,希望根目錄不要放在非常大的分割槽內,因為越大的分割槽會放入越多的數據,如此一來根目錄所在分割槽就可能會有較多發生錯誤的機會。

因此FHS標準建議:根目錄(/)所在分割槽應該越小越好,且應用程序所安裝的軟件最好不要與根目錄放在同一個分割槽內,保持根目錄越小越好。

FHS定義出根目錄(/)底下應該有底下這些次目錄的存在

目錄應放置檔案內容

系統有很多放置執行文件的目錄,但/bin比較特殊。因 為/bin放置的是單人維護模式下能夠被操作的指令。 /bin 在/bin底下指令可以被root與一般賬號所使用,主要有 :cat,chmod,chown,date,mv,mkdir,cp,bash等 等常用的指令

這個目錄主要在放置開機會使用到的檔案,包括Linux核/boot 心檔案以及開機選單與開機所需配置文件等等。Linux kernel 常用的檔名為:vmlinuz,如果使用的是grub這 個開機管理程序,則還會存在/boot/grub/這個目錄

在Linux系統上,任何裝置與接口設備都是以檔案的形 /dev 態存在於這個目錄當中。只要透過存取這個目錄底下的 某個檔案,就等於存取某個裝置。比較重要的檔 有/dev/null,/dev/zero,/dev/tty,/dev/lp*,/dev/hd*,/dev/sd*等等

系統主要的配置文件幾乎都放置在這個目錄。一般來說, 這個目錄下的各個文件屬性是可以讓一般使用者查閱的 ,但是隻有root有權力修改。FHS建議不要放置可執行文 件(binary)在這個目錄中。比較主要的檔案有:/etc/inittab;/etc/init.d/,/etc/modprobe.conf,/etc/X11/,

/etc/fstab,/etc/sysconfig/等等。另外,其下重要的目錄有:

1./etc/init.d/:所有服務的預設啟動script都是放在這裡 的。

/etc2./etc/xinetd.d/:這就是所謂的super daemon管理的各 服務的配置文件目錄。

3./etc/X11/:與X window有關的各種配置文件都在這裡,尤 其是xorg.conf這個X server的配置文件。

這是系統默認的用戶家目錄(home directory)。在新增一 個一般使用者賬號時,默認的用戶家目錄都會規範到這裡/home 。比較重要的是,家目錄有個代號:~:代表目前這個用 戶的家目錄,~dmtsai:則代表dmtsai的家目錄

系統的函式庫,而/lib放置的則是在開機時會用到的函式 庫,以及在/bin或/sbin底下的指令會呼叫的函式庫而已 /lib 。可以將它想成是外掛,某些指令必須要有外掛才能夠順 利完成程序的執行之意。尤其重要的是/lib/modules/這 個目錄,因為該目錄會放置核心相關的模塊(驅動程序)

media是媒體,這個/media底下放置的就是可移除的裝置

/media 。包括軟盤、光盤、DVD等等裝置都暫時掛載於此。常見 的檔名有:/media/floppy ,/media/cdrom等等。

如果想要暫時掛載某些額外的裝置,一般建議可以放置在/mmt 這個目錄中。

這個是給第三方協力軟件放置的目錄。如果想要自行安裝 額外的軟件(非distribution提供的),那麼也能夠將你的/opt 軟件安裝到這裡來。不過,以前的Linux系統中,習慣放置 在/usr/local目錄下。

系統管理員(root)的家目錄。如果進入單人維護模式而僅掛/root 載根目錄時,該目錄就能夠擁有root的家目錄,root的家目 錄與根目錄放置在同一個分割槽中。

Linux用來設定系統環境的,這些指令只有root才能夠利用 來設定系統,其它用戶最多用來查詢而已。放在/sbin底下 的開機過程中所需要的,裡面包括了開機、修復、還原系/sbin 統所需的指令。至於某些服務器軟件程序,一般放置 到/usr/sbin當中。至於本機自行安裝的軟件所產生的系統 系統執行文件(system binary),則放置到/usr/local/sbin 當中。常見的指令包括:fdisk,fsck,ifconfig,init, mkfs等等

srv可以視為service的縮寫,是一些網絡服務啟動之後,這/srv 些服務所需要取用的數據目錄。常見的服務例如:www,FTP 等等

這是一般用戶或者正在執行的程序暫時放置檔案的地方。這 個目錄任何人都能夠存取的,所以需要定期的清理下。重要/tmp數據不可放置在此目錄,因為FHS設置建議在開機時,應該 要將/tmp下的數據都刪除

這個目錄時使用標準的ext2/ext3文件系統格式才會產生 /lost+found一個目錄,目的在於當文件系統發生錯誤時,將一些遺 失的片段放置到這個目錄下、這個目錄通常會在分割槽 的最頂層存在

這個目錄本身是一個虛擬文件系統(virtual filesystem). 放置的數據都是在內存當中。因為這個目錄下的數在

/proc 內存當中,所以本身不佔任何硬盤空間。比較重要案 如:/proc/cpuinfo,/proc/dma,/proc/interrupts,/proc/ioports, /proc/net/*等等。

這目錄其實和/proc類似,也是一個虛擬文件系統,主要是/sys 記錄與核心相關的信息。包括目前已加載的核心模塊與核心 偵測到的硬件裝置信息等等。這個目錄同樣不佔硬盤容量。

因為根目錄與開機有關,開機過程中僅有根目錄會被掛載,其他分割槽則是在開機完成之後才會持續的進行掛載行為。因此根目錄下與開機過程有關的目錄,就不能與根目錄放到不同的分割槽 。主要有底下這些目錄:

1. /etc :配置文件

2. /bin :重要執行檔

3. /dev: 所需要的裝置檔案

4. /lib :執行檔所需的函式庫與核心所需的模塊

5. /sbin : 重要的系統執行文件

這五個目錄千萬不可與根目錄分開在不同的分割槽

Linux的檔案權限與目錄配置,建議收藏

/usr的意義與內容:

依據FHS的定義,/usr裡面放置的數據屬於可分享的與不可變動的(shareable ,static)。如果知道如何透過網絡進行分割槽的掛載,那麼/usr確實可以分享給局域網絡內的其他主機來使用。

很多讀者會誤會/usr為user的縮寫,其實usr是UNIX Software Resource 的縮寫,也就是UnIx操作系統軟件資源,所放置的目錄,而不是用戶的數據。FHS建議所有軟件開發者,應該將他們的數據合理分別放置到這個目錄下的次目錄,而不要自行建立該軟件自己獨立的目錄

因為是所有系統所有系統默認的軟件(distribution發佈者提供的軟件)都會放置到/usr底下,因此這個目錄類似Windows系統的C:\Windows\ + C:\Program file\這兩個目錄的綜合體,系統剛安裝完畢時,這個目錄會佔用最多的硬盤容量。一般來說,/usr的次目錄有底下這些:

目錄應放置檔案內容

/usr/X11R6/ 為X Window System 重要數據所放置的目錄,之 所以取名為X11R6是因為最後的X版本為第11版, 且該版的第6次釋出之意。

/usr/bin/ 絕大部分的用戶可使用指令都放置在這裡。

/usr/include/ C/C++等程序語言的檔頭(header)與包含檔 (include)放置處,當以tarball方式(*.tar.gz 的方式安裝軟件)安裝某些數據時,會使用到裡 頭的許多包含檔。

包含各應用軟件的函式庫、目標檔案(object file),以及不被一般使用者慣用的執行檔或腳/usr/lib/ 本(script)。某些軟件會提供一些特殊的指令 來進行服務器設定,這些指令不會經常被系統 管理員操作,那就會被擺放在這個目錄下,要 注意的是如果使用的是X86_64的Linux系統,那 可能會有/usr/lib64/目錄產生。

系統管理員在本機自行安裝自己下載的軟件(非/usr/local/ distribution默認提供者),建議安裝到此目錄。 這樣比較便於管理。

非系統正常運作所需要的系統指令。最常見的就是

/usr/sbin 某些網絡服務器軟件的服務指令(daemon)

放置共享文件的地方,在這個目錄下放置的數據幾/usr/share/ 乎是不分硬件架構均可讀取的數據,因為都是文本 文件。在此目錄下常見的有這些目錄

/usr/share/man:聯機幫助文件

/usr/share/doc:軟件雜項的文件說明

/usr/share/zoneinfo:與時區有關的時區檔案

一般原始碼建議放置到這裡,src有source的意思/usr/src/ 。至於核心原始碼則建議放置到/usr/src/linux/目 錄下。

/var的意義與內容:

如果/usr是安裝時會佔用較大硬盤容量,那麼/var就是在系統運作後才會漸漸佔用硬盤容量的目錄。因為/var目錄主要針對常態性變動的檔案,包括快取(cache)、登錄檔(log file)以及某些軟件的運作所產生的檔案,包括程序檔案(lock file ,run file)或者例如MySQL數據庫的檔案等等。常見的次目錄有:

目錄應放置檔案內容

/var/cache 應用程序本身運作過程中會產生的一些暫存檔

程序本身執行的過程中,需要使用到的數據文件放/var/lib/ 置的目錄。在此目錄下各自的軟件應該要有各自的 目錄

某些裝置或者是檔案資源一次只能被一個應用程序/var/log/所使用,如果同時有兩個程序使用該裝置時,就可 能產生一些錯誤的狀況,因此就得要將該裝置上鎖 (lock),以確保該裝置只會給單一軟件所使用

重要文件。這是登錄文件放置的目錄,裡面比較重/var/log/ 要的檔案如:/var/log/messages,/var/log/wtmp( 記錄登入者的信息)等

/var/mail/放置個人電子郵件信箱的目錄,不過這/var/mail/個目錄也被放置到/var/spool/mail/目錄中。通常這兩個目錄是互為鏈接文件。

/var/run/某些程序或者服務啟動後,會將他們的PID放置在這個目錄下。

這個目錄通常放置一些隊列數據,所謂隊列就是排/var/spool 隊等待其他程序使用的數據。這些數據被使用後通 常都會被刪除。如果是工作排程數據(crontab), 就會被放置到/var/spool/cron目錄中。

針對FHS,各家distributions的異同

由於FHS僅是定義出最上層/及次層(/usr,/var)的目錄內容應該要放置的檔案或目錄數據,因此,在其他次目錄層級內,就可以隨開發者自行來配置。

目錄樹(directory tree)

在Linux底下,所有的檔案都是由根目錄開始的。那是所有目錄與檔案的源頭,然後一個一個分支下來,有點像樹枝狀的。因此稱這種目錄配置方式為:(目錄樹(directory tree)) 主要特性:

目錄樹的起始點為根目錄(/,root);

每一個目錄不止能使用本地端的partition的文件系統,也可以使用網絡上的filesystem。

每一個檔案在此目錄樹中的文件名(包含完整路徑)都是獨一無二的

/SELinux這個目錄的內容數據也是在內存中的信息,同樣不會佔用任何硬盤容量。這個/selinux是Secure Enhance Linux(SELinux)的執行目錄,而SELinux是Linux是Linux核心的重要外掛功能之一,可以用來作為西部權限的控管,主要針對程序(尤其是網絡程序)的訪問控制來限制

根據FHS的定義,最好能夠將/var獨立出來這樣對於系統的數據有一些安全性保護。因為至少根目錄還會活著,還能夠進入救援模式

絕對路徑和相對路徑

這兩種文件名/路徑的寫法依據:

絕對路徑:由根目錄(/)開始寫起的文件名或目錄名稱。

相對路徑:相對於目前路徑的文件名寫法。反正開頭不是/就屬於相對路徑的寫法。相對路徑是以當前所在路徑的相對位置來表示。

這兩個特殊的目錄:

. :代表當前的目錄,也可以使用./來表示;

.. :代表上一層,也可以../來表示。

CentOS的觀察

uname -r 可以查看實際的核心版本


分享到:


相關文章: