Linux 基礎-檔案許可權與屬性

嵌入式視覺發表於2022-12-01

Linux 系統由 Linux 核心、shell、檔案系統和第三方應用軟體組成。Linux 檔案許可權與屬性是學習 Linux 系統的一個重要關卡,必須理解這個部分內容的概念。

一,檔案型別

1.1,概述

一個基本概念:任何裝置在 Linux 下都是檔案,資料溝通的介面也有專屬的檔案在負責,Linux 的檔案種類繁多,常用的是一般檔案(-)與目錄檔案(d)。
注意:Linux 檔案型別和檔案的檔名所代表的意義是兩個不同的概念,在 linux 中檔案型別與副檔名沒有關係。它不像 Windows 那樣是依靠檔案字尾名來區分檔案型別的,在 linux 中檔名只是為了方便操作而的取得名字。Linux 檔案型別常見的有:普通檔案、目錄、字元裝置檔案、塊裝置檔案、符號連結檔案等。
檢視檔案型別方法,使用 ls -al 命令列出的資訊中第一欄十個字元中,第一個字元為檔案的型別。

image

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------

image

類似 Windows 系統下的快捷鍵,第一個屬性為 l,例如 lrwxrwxrwx

1.5,裝置與裝置檔案(device)

與系統周邊裝置及儲存相關的一些檔案,通常集中在 /dev 目錄下,一般分為兩種:

  • 區塊(block)裝置型別:就是一些儲存資料, 以提供系統隨機存取的介面裝置,比如硬碟裝置,第一個屬性為 b
  • 字元(character)裝置檔案:一些串列埠的介面裝置,例如鍵盤、滑鼠、攝像頭等。這些裝置的特性是**一次性讀取",不能夠截斷輸出,第一個屬性為 c

1.6,資料介面檔案(sockets):

被用於網路上的資料連線了。我們可以啟動一個程式來監聽客戶端的要求, 而客戶端就可以透過這個 socket 來進行資料的溝通了。第一個屬性為 s,最常在 /run/tmp 這些目錄中可以看到這種檔案型別。

image

1.7,資料輸送檔案(FIFO, pipe):

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

1.8,檔案擴充名

注意 Linux 系統的檔案是沒有所謂的擴充名的。 一個 Linux 檔案能不能被執行,與他的 ls -al 展示的檔案資訊的第一欄的十個屬性有關, 與檔名根本一點關係也沒有,這與 Windows 不同,在Linux 系統下,只要使用者的許可權有 x,檔案就可以被執行。擁有了 x 許可權,表示檔案可以被執行,但是隻有具有可執行的程式程式碼檔案才能被執行,文字等檔案即使有許可權也是不能執行成功的。

二,檔案屬性與許可權

2.1,Linux 檔案屬性

ls -al 命令:列出所有的檔案詳細的許可權與屬性 (包含隱藏檔案-檔名第一個字元為『 . 』的檔案)。 ls -al 展示的檔案屬性資訊如下:

image

  • 第一列代表這個檔案的型別與許可權(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

image

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 了,否則會提示許可權不足的錯誤):

image

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 則是針對『目錄內的檔名列表』來設計許可權。許可權對檔案和目錄重要性的理解彙總成如下表格:

image

三,Linux 檔案屬性與許可權總結

利用 ls -al 命令檢視檔案屬性及許可權,已知了 Linux 系統內檔案的三種身份(檔案擁有者、檔案所屬群組與其他使用者),每種身份都有四種許可權(rwxs)。可以使用 chown, chgrp, chmod 去修改這些許可權與屬性。檔案是實際含有資料的地方,包括一般文字檔案、資料庫內容檔案、二進位制可執行檔案(binary program)等等。

四,參考資料

《鳥哥的Linux私房菜 基礎篇 第四版》

相關文章