Linux 系統由 Linux 核心、shell、檔案系統和第三方應用軟體組成。Linux 檔案許可權與屬性是學習 Linux 系統的一個重要關卡,必須理解這個部分內容的概念。
一,檔案型別
1.1,概述
一個基本概念:任何裝置在 Linux 下都是檔案,資料溝通的介面也有專屬的檔案在負責,Linux 的檔案種類繁多,常用的是一般檔案(-
)與目錄檔案(d
)。
注意:Linux
檔案型別和檔案的檔名所代表的意義是兩個不同的概念,在 linux
中檔案型別與副檔名沒有關係。它不像 Windows
那樣是依靠檔案字尾名來區分檔案型別的,在 linux
中檔名只是為了方便操作而的取得名字。Linux
檔案型別常見的有:普通檔案、目錄、字元裝置檔案、塊裝置檔案、符號連結檔案等。
檢視檔案型別方法,使用 ls -al
命令列出的資訊中第一欄十個字元中,第一個字元為檔案的型別。
1.2,正規檔案(regular file)
就是一般我們在進行存取的型別的檔案,在由 ls -al
所顯示出來的屬性方面,第一個字元為 -
,例如 -rwxrwxrwx
。另外,依照檔案的內容,又大略可以分為:
- 純文字檔(
ASCII
):Linux 系統中最為常見的一種檔案型別,稱為純文字是因為檔案內容為人類可以直接讀取到的資料,例如數字、字母等。 - 二進位制檔案(
binary
):Linux 系統僅認識且可以執行的二進位制檔案 binary file,Linux 系統中可執行的檔案就是這種型別,例如 cat 就是一個 binary file。 - 資料格式檔案(
data
): 有些程式在運作的過程當中會讀取某些特定格式的檔案,那些特定格式的檔案可以被稱為資料檔案 (data file
)。舉例來說,我們的 Linux 在使用者登入時,都會將登入的資料記錄在/var/log/wtmp
檔案內,該檔案是一個data file
,它能夠透過last
這個指令讀出來,但是使用cat
命令讀取時會讀出亂碼,因為他是屬於一種特殊格式的檔案。
1.3,目錄(directory)
第一個屬性為 d
,例如 drwx------
。
1.4,連結檔案(link)
類似 Windows 系統下的快捷鍵,第一個屬性為 l
,例如 lrwxrwxrwx
。
1.5,裝置與裝置檔案(device)
與系統周邊裝置及儲存相關的一些檔案,通常集中在 /dev
目錄下,一般分為兩種:
- 區塊(block)裝置型別:就是一些儲存資料, 以提供系統隨機存取的介面裝置,比如硬碟裝置,第一個屬性為
b
。 - 字元(character)裝置檔案:一些串列埠的介面裝置,例如鍵盤、滑鼠、攝像頭等。這些裝置的特性是**一次性讀取",不能夠截斷輸出,第一個屬性為
c
。
1.6,資料介面檔案(sockets):
被用於網路上的資料連線了。我們可以啟動一個程式來監聽客戶端的要求, 而客戶端就可以透過這個 socket
來進行資料的溝通了。第一個屬性為 s
,最常在 /run
或 /tmp
這些目錄中可以看到這種檔案型別。
1.7,資料輸送檔案(FIFO, pipe):
FIFO
也是一種特殊的檔案型別,他主要的目的在解決多個程式同時存取一個檔案所造成的錯誤問題。FIFO
是 first-in-first-out
的縮寫。第一個屬性為 p
。
1.8,檔案擴充名
注意 Linux 系統的檔案是沒有所謂的擴充名的。 一個 Linux 檔案能不能被執行,與他的 ls -al
展示的檔案資訊的第一欄的十個屬性有關, 與檔名根本一點關係也沒有,這與 Windows 不同,在Linux 系統下,只要使用者的許可權有 x
,檔案就可以被執行。擁有了 x
許可權,表示檔案可以被執行,但是隻有具有可執行的程式程式碼檔案才能被執行,文字等檔案即使有許可權也是不能執行成功的。
二,檔案屬性與許可權
2.1,Linux 檔案屬性
ls -al
命令:列出所有的檔案詳細的許可權與屬性 (包含隱藏檔案-檔名第一個字元為『 .
』的檔案)。 ls -al
展示的檔案屬性資訊如下:
- 第一列代表這個檔案的型別與許可權(permission);第一列的第一個字元代表這個檔案是『目錄、 檔案或連結檔案等等檔案型別』:
- 當為
d
則是目錄,例如上圖檔名為『.config』的那一行; - 當為
-
則是檔案,例如上圖檔名為『initial-setup-ks.cfg』那一行; - 若是
l
則表示為連結檔案(link file); - 若是
b
則表示為裝置檔案裡面的可供儲存的介面裝置(可隨機存取裝置); - 若是
c
則表示為裝置檔案裡面的串列埠裝置,例如鍵盤、滑鼠(一次性讀取裝置)。
- 當為
- 第二列表示有多少檔名連結到此節點(i-node);
- 第三列表示這個檔案(或目錄)的『擁有者賬號』;
- 第四列表示這個檔案的所屬群組;
- 第五列為這個檔案的容量大小,預設單位為
bytes
; - 第六列為這個檔案的建檔日期或者是最近的修改日期;
- 第七列為這個檔案的檔名。
ls -al
命令展示的檔案屬性的七個欄位的意義很重要,必須理解和熟記,這是掌握 Linux
檔案許可權與目錄管理的基礎知識。
2.2,Linux 檔案許可權
Linux 檔案的基本許可權就有九個,分別是 owner/group/others
三種身份各有自己的 read/write/execute
許可權。在 Linux 中,對於檔案的許可權(rwx
),分為三部分,第一部分是該檔案的擁有者所擁有的許可權,第二部分是該檔案所在使用者組的使用者所擁有的許可權,最後一部分是其他使用者所擁有的許可權。
每個檔案/資料夾的屬性都用 10
個字元表示,第一個字元如果是 d
:表示資料夾,如果是 -
:表示檔案。用(rwx
)表示檔案許可權,其中r
: 可讀(4)
,w
: 可寫(2)
,x
: 可執行(1
)。舉例,drwxr-xrw-
表示資料夾擁有者擁有可讀可寫可執行的許可權,使用者所在使用者組和其他使用者無任何許可權,命令的詳細解釋如下。
- 從第二到第四位
(rwx)
是檔案所有者的許可權:可讀、可寫、可執行。 - 從第五到第七位
(r-x)
資料夾使用者擁有者所在組的許可權:可讀、可執行。 - 從第八位到第十位
(rw-)
其他人對這個資料夾操作的許可權.:可讀、可寫。
Linux
系統檢視檔案/目錄許可權示例,如下:
root@5b84c8f05303:/data/project# ls -al
total 16
drwx------ 4 1018 1002 4096 Jul 20 02:59 .
drwx------ 8 1018 1002 4096 Jul 20 02:57 ..
drwx------ 6 1018 1002 4096 Jul 20 02:57 DeepPruner
-rw-r--r-- 1 root root 0 Jul 20 02:59 demo.py
drwx------ 8 1018 1002 4096 Jul 20 02:57 nn_tools-master
2.3,如何改變檔案屬性和許可權
Linux/Unix
是多人多工作業系統,所有的檔案皆有擁有者。利用 chown
命令可以改變檔案的擁有者(使用者)和群組,使用者可以是使用者名稱或者使用者 ID
,組可以是組名或者組 ID
。注意,普通使用者不能將自己的檔案改變成其他的擁有者,其操作許可權一般為管理員(root 使用者);同時使用者必須是已經存在系統中的賬號,也就是在 /etc/passwd
這個檔案中有紀錄的使用者名稱稱才能改變。
三個常用於群組、擁有者、各種身份的許可權之修改的命令,如下所示:
chown
: 改變檔案的擁有者。如遞迴子目錄修改命令:chown -R user_name folder/
chgrp
: 改變檔案所屬群組。chmod
: 改變檔案讀、寫、執行許可權(許可權分數r:4 w:2 x:1
)屬性。如增加指令碼可執行許可權命令:chmod a+x myscript
。
新增使用者和使用者組的命令:adduser
groupadd
,其簡單用法如下所示:
adduser harley
:新建 harley 使用者passwd harley
:給 harley 使用者設定密碼groupadd harley
:新建 harley工作組useradd -g harley harley
:新建 harley 使用者並增加到 harley 工作組
改變所屬群組 chgrp/chown/chmod 命令的用法如下:
$ chgrp [-R] group dirname/filename # -R : 進行遞迴(recursive)的持續變更,亦即連同子目錄下的所有檔案、目錄都更新成為這個群組之意。
$ chown [-R] 賬號名稱 檔案或目錄
$ chown [-R] 賬號名稱:組名 檔案或目錄
$ chmod [-R] xyz 檔案或目錄 # xyz : 數字型別的許可權屬性分數值, 為 rwx 屬性數值的相加。
chgrp
範例:將 test
的工作組從 harley
改為 root
(前提是當前使用者切換為 root
了,否則會提示許可權不足的錯誤):
chmod
範例:將 .bashrc
這個檔案所有的許可權都設定啟用。
root@17c30d837aba:~# ls -al .bashrc
-rw-r--r-- 1 root root 3479 Jan 8 03:14 .bashrc
root@17c30d837aba:~# chmod 777 .bashrc
root@17c30d837aba:~# ls -al .bashrc
-rwxrwxrwx 1 root root 3479 Jan 8 03:14 .bashrc
2.4,檔案與目錄的許可權意義
我們可以利用 ls -al
命令檢視檔案屬性及許可權,已知了 Linux
系統內檔案的三種身份(擁有者、群組與其他人),每種身份都有三種許可權(rwx
),再使用 chown
, chgrp
, chmod
去修改這些許可權與屬性。
檔案是實際含有資料的地方,包括一般文字檔案、資料庫內容檔案、二進位制可執行檔案(binary program)等等。因此,許可權對於檔案來說,他的意義是這樣的:
r (read)
:可讀取此一檔案的實際內容,如讀取文字檔案的文字內容等;w (write)
:可以編輯、新增或者是修改該檔案的內容(但不含刪除該檔案);x (eXecute)
:該檔案具有可以被系統執行的許可權。Linux 底下, 檔案是否能被執行,是由x
這個許可權來決定的!跟檔名是沒有絕對的關係,即使是能夠執行成功的.sh
指令碼檔案,如果沒有x
可執行許可權,檔案也不能被執行。
目錄主要的內容是記錄檔名列表,檔名與目錄有強烈的關連。對一般檔案來說, rwx
主要是針對『檔案的內容』來設計許可權,對目錄來說, rwx
則是針對『目錄內的檔名列表』來設計許可權。許可權對檔案和目錄重要性的理解彙總成如下表格:
三,Linux 檔案屬性與許可權總結
利用 ls -al
命令檢視檔案屬性及許可權,已知了 Linux
系統內檔案的三種身份(檔案擁有者、檔案所屬群組與其他使用者),每種身份都有四種許可權(rwxs
)。可以使用 chown
, chgrp
, chmod
去修改這些許可權與屬性。檔案是實際含有資料的地方,包括一般文字檔案、資料庫內容檔案、二進位制可執行檔案(binary program)等等。
四,參考資料
《鳥哥的Linux私房菜 基礎篇 第四版》