Linux 基礎-文件許可權與屬性

来源:https://www.cnblogs.com/armcvai/archive/2022/12/01/16941586.html
-Advertisement-
Play Games

一個基本概念:任何裝置在 Linux 下都是文件,數據溝通的介面也有專屬的文件在負責,Linux 的文件種類繁多,常用的是一般文件(-)與目錄文件(d)。 註意:Linux 文件類型和文件的文件名所代表的意義是兩個不同的概念,在 linux 中文件類型與文件擴展名沒有關係。它不像 Windows 那... ...


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私房菜 基礎篇 第四版》


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • File類和IO流 File類 概述 public class File 文件和目錄路徑名的抽象表示 文件和目錄是可以通過File封裝成對象的 封裝的不是文件,而是一個路徑(可以存在,也可以不存在);要通過具體的操作將這個路徑轉化為具體存在 public class FileDemo { publi ...
  • 1.可以從現有的類派生出新類。這稱為類的繼承。新類稱為次類、子類或派生類。現有的類稱為超類、父類或基類。 2.構造方法用來構造類的實例。不同於屬性和方法,子類不繼承父類的構造方法。它們只能用關鍵字super從子類的構造方法中調用。 3.構造方法可以調用重載的構造方法或它的父類的構造方法。這種調用必須 ...
  • Java 程式員在日常工作中經常會聽到 SPI,而且很多框架都使用了 SPI 的技術,那麼問題來了,到底什麼是 SPI 呢?今天阿粉就帶大家好好瞭解一下 SPI。 SPI 概念 SPI 全稱是 Service Provider Interface,是一種 JDK 內置的動態載入實現擴展點的機制,通過 ...
  • 一、引言 在上一篇文章中《這麼簡單,還不會使用java8 stream流的map()方法嗎?》分享了使用stream的map()方法,不知道小伙伴還有印象嗎,先來回顧下要點,map()方法是把一個流中的元素T轉換為另外一個新流中的元素R,轉換完成後兩個流的元素個數不發生改變,具體怎麼使用,請小伙伴移 ...
  • 大家好,這裡是 main工作室。 開發工具合集 是 電腦編程語言 和 嵌入式軟體/硬體 開發工具的下載與安裝,每篇一個開發工具。 本篇所講的開發工具為: Dev-Cpp 一、介紹 Dev-Cpp Dev-Cpp 是一個 Windows 環境下的一個適合於初學者使用的輕量級 C/C++ 集成開發環境 ...
  • 服務端 package main import ( "errors" "fmt" "log" "net" "net/rpc" "net/rpc/jsonrpc" "os" ) // 算數運算結構體 type Arith struct { } // 算數運算請求結構體 type ArithReques ...
  • 什麼是緩存? 為什麼使用緩存? 什麼場景下使用緩存? 緩存(Cache)就是數據交換的緩衝區,一個臨時存儲數據的地方,當我們讀取數據時會首先從緩存中查找需要的數據,如果找到了則直接執行,找不到的話再從記憶體中找。 在實際開發中,我們會經常對資料庫進行數據查詢,而從資料庫讀取數據的效率是非常低下的,並且 ...
  • 代碼1 #include <iostream> using namespace std; class MyString3 { public: MyString3(const char * pChar=nullptr) { if (pChar == nullptr) { this->pString = ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...