嵌入式 Linux入 門第二課, linux 文件系統、文件類型及權限管理。 ...... 矜辰所致
前言
在上文我們說過:在Linux中一切接文件。 既然所有東西都是文件,那么如何區分不同的東西?
本文我們就來學習說明一下 Linux 文件系統 以及對文件的權限管理 。
在文章中我們會使用一些 shell 命令進行操作,雖然系列文章還沒有講到 Shell 命令,但是作為嵌入式工程師,多多少少也得知道是什么一個東西,就像 Windows 有 CMD 命令一樣,玩 RT-Thread 的時候也會使用到 Shell 命令,即便這些你都不知道,在下一篇 Linux 入門會記錄說明一些常用的 Linux Shell 命令,本文的命令也可以作為學習了解。
嵌入式 Linux 入門系列博文:
嵌入式 Linux 入門(一、Linux 基本介紹及文件結構)
.
我是矜辰所致,全網同名,盡量用心寫好每一系列文章,不浮夸,不將就,認真對待學知識的我們,矜辰所致,金石為開!
一、Linux 文件屬性
我們進入到 ubuntu 系統,打開終端,默認是進入到我們自己的用戶目錄下面,我們使用 ls -l (查看該目錄下所有文件的詳細信息)命令,查看文件詳情,如下圖:
在上面圖片中的目錄詳情,我們先整體來說明一下各部分的含義:
我們主要需要了解文件權限的含義:
文件類型后面的9個字符以3個為一組,第一組表示“文件所有者的權限”,第二組表示“用戶組的權限”,第三組表示“其他非本用戶組的權限”。(用戶和用戶組的知識,本文后面會有對應的說明。)
每組都是 rwx 的組合,其中 r 代表可讀,w 代表可寫,x 代表可執行,- 代表沒有這個權限。
1.1 Linux 文件類型
在Linux 中,一共有7種文件類型,如下表格:
字母 | 類型 | 說明 |
---|---|---|
- | 普通文件 | 普通文件包括 文檔圖片音樂等;純文本文件(ASCII)、二進制文件(binary)、數據格式的文件(data)、各種壓縮文件 |
d | 目錄文件 | 目錄,可用 cd 命令進入 |
c | 字符設備文件 | linux 驅動里面的字符設備驅動,比如 串行設備,音頻設備,鍵盤、鼠標等等 |
b | 塊設備文件 | 存儲設備驅動,比如硬盤,U盤等 |
p | 管道文件 | FIFO也是一種特殊的文件類型,它主要目的是解決多個程序同時存取一個文件所造成的錯誤 |
l | 鏈接文件 | 類似Windows下面的快捷方式 |
s | 套接字文件 | 這類文件通常用在網絡數據連接。可以啟動一個程序來監聽客戶端的要求,客戶端就可以通過套接字來進行數據通信 |
我們在上面文章的一些圖片中已經看到過 普通文件,和目錄文件。
那么我們通過上一篇文章嵌入式 Linux 入門(一、Linux 基本介紹及文件結構)應該可以知道,在目錄 /dev 中應該有很多與設備有關的文件,如下圖:
字符設備,塊設備,還有連接文件都看到了。
還有一點可以說明一下, 我們后面學習 Linux 驅動開發基本都是與 字符設備文件 和塊設備文件 打交道。
文件類型這個基本的知識,也好理解,沒有什么復雜的,我們知道了就可以。
1.2 Linux 文件權限及修改
在上面我們講過文件的 3 種讀寫權限:讀(r)、寫(w)和執行(x)。
除了用 r、w 和 x 表示以外,我們也可以使用二進制數表示,三種權限就可以使用 3 位二進制數來表示,一種權限對應一個二進制位,如果該位為1就表示具備此權限,如果該位為 0就表示沒不具備此權限:
那么組合一下,所有的文件共有 8 種不同的權限組合:
在Linux 系統中,使用命令“chmod”修改一個文件的權限。
我們經常看到前輩們使用的一條指令為 : chmod 777 xxxx(文件名字),意思就是把這個文件的權限全面開放,對于初學者來說,首先記住這條指令就可以了。
但是要記住,系統本身的文件,千萬不要瞎修改,可以在自己的賬戶下隨便新建一個文件作為測試,自己修改看看。
比如,我們做個簡單的測試,如下圖:
在我們以后使用 Linux 的時候,經常會遇到權限不夠的問題,我們一般都會在命令前加上一個 sudo ,比如下圖測試:
上圖中,我用自己的 qzh 賬戶嘗試在根目錄 “/” 創建文件 test,給出權限不夠的提示。只有 root用戶才能在根目錄“/”下創建文件 , 所以使用了 sudo 命令暫時獲取管理員用戶權限。
當然接下來的刪除,也是需要 sudo 命令的:
上面sudo 這個命令以后需要經常使用,需要記住。
二、Linux 用戶系統
在上文說明 Linux 文件的設備類型的時候,有提到用戶權限,用戶組權限,和其他用戶權限。
那么我們需要明白什么是用戶? 什么是用戶組?
2.1 Linux 的用戶
Linux系統是一個多用戶多任務的分時操作系統,任何一個要使用系統資源的用戶,
都必須首先向系統管理員申請一個賬號,然后以這個賬號的身份進入系統。
用戶的賬號一方面可以幫助系統管理員對使用系統的用戶進行跟蹤,并控制他們對系統資源的訪問;
另一方面也可以幫助用戶組織文件,并為用戶提供安全性保護。
每個用戶賬號都擁有一個唯一的用戶名和各自的口令。
用戶在登錄時鍵入正確的用戶名和口令后,就能夠進入系統和自己的主目錄。
其實在我們使用 Windows 系統的時候,也有用戶的概念,只是日常應用很少創建多個用戶,切換來切換去,可能相對多的時候,也只是右鍵 “以管理員身份運行” 某個程序。
在安裝 Ubuntu系統的時候被要求創建一個賬戶,當我們創建好賬號以后,系統會在目錄/home 下以該用戶名創建一個文件夾,所有與該用戶有關的文件都會被存儲在這個文件文件夾中。同樣的,創建其它用戶賬號的時候也會在目錄/home 下生成一個文件夾來存儲該用戶的文件,如下圖:
Linux 的用戶分類:
Linux 用戶類型分為以下 3類:
- 管理員:root 用戶,系統管理員,具有所有權限。
- 系統用戶:管理系統運行服務,系統中系統服務由不同用戶運行,更加安全,默認被限制登錄系統。
- 普通用戶:用于日常工作而不能管理系統的普通用戶,只有一部分權限。
在我們使用的 Ubuntu 中,上面的 qzh 用戶屬于普通用戶,但是他是按照系統時候創建的用戶,其權限比后面創建的用戶大一點,但是沒有 root 用戶權限大。
這個地方初次創建的用戶,比后面創建的普通用戶的區別暫時沒有必要研究,因為后期我們在使用過程中基本都是在初次創建的用戶下面,遇到權限問題可以臨時獲取管理員,這里做個了解即可。
UID
每個用戶都有一個 ID 號,稱為 UID,操作系統通過 UID 來識別是哪個用戶,用戶相關信息可以在文件 /etc/passwd 查看到 :
每行用戶信息都以 “:” 作為分隔符,劃分為7個字段,每個字段所表示的含義如下:
用戶名:密碼:UID:GID:描述性信息:主目錄:默認Shell
每一行都是一個用戶的信息,意思如下圖解釋:
上面第二個密碼“x” ,在以前版本的 linux 系統中存放著加密后的用戶口令,雖然這個字段存放的只是用戶口令的加密串,但是由于 /etc/passwd 文件對所有用戶都可讀,所以這仍是一個安全隱患。因此,現在許多Linux 版本都使用了shadow技術,把真正加密后的用戶口令存放到 /etc/shadow 文件中,而在 /etc/passwd 文件的口令字段中只存放一個特殊的字符,例如用“x”或者“*”來表示。
那么結合這個文件,我們可以再次說明一下 Linux 系統中的幾個用戶 UID:
超級用戶 UID 0 :
系統用戶 UID 1-999 :
普通用戶 UID 1000以上:
特殊的來賓賬號:
nobody這個的帳號UID為65534,這個用戶的權限會進一步的受到限制,一般用于實現來賓帳號。
系統是根據 UID 來認定用戶的權限而不是名字。如果把自己創建的用戶 UID 改成 0 ,那么系統登錄會把用戶視為管理員用戶。
2.2 Linux 的用戶組
什么是用戶組?
用戶組是具有相同特征用戶的邏輯集合, 有時我們需要讓多個用戶具有相同的權限,比如查看、修改某一個文件的權限,一種方法是分別對多個用戶進行文件訪問授權。
如果有10個用戶的話,就需要授權10次,顯然這種方法不太合理;另一種方法是 建立一個組,讓這個組具有查看、修改此文件的權限,然后將所有需要訪問此文件的用戶放入這個組中,那么所有用戶就具有了和組一樣的權限,這就是用戶組。
將用戶分組是Linux 系統中對用戶進行管理及控制訪問權限的一種手段,通過定義用戶組,在很大程度上簡化了管理工作。
每個用戶都有一個用戶組,系統可以對一個用戶組中的所有用戶進行集中管理。不同Linux 系統對用戶組的規定有所不同,如Linux下的用戶屬于與它同名的用戶組,這個用戶組在創建用戶時同時創建。每個用戶在被創建時均會創建一個默認組(其GID與UID相同,叫作基本組或初始組),而后加入的組叫作擴展組或附加組。
GID
GID 是用戶組的編號,可以將多個用戶加入到某個組中,方便指派任務或工作。 和 UID 一樣也是有一個對應的文件保存信息,用戶組名和GID相關信息可以在文件 /etc/group 查看到:
每行的用戶組的信息都以 “:” 作為分割符,劃分為4個字段,每個字段所表示的含義如下:
組名:密碼:GID:該用戶組中的用戶列表
每一行都是一個用戶組的信息,組中的用戶列表只包括附加用戶,如果該組是某個用戶的初始組,則這個用戶不會出現在這個用戶列表中,如下圖:
2.3 文件歸屬者修改命令
相對于修改權限來說,修改歸屬者沒那么常用,簡單了解一下。
使用命令“chown”修改一個文件的所屬者和所屬:
chown [參數] [用戶名.< 組名 >] [文件名/目錄]
chown [-cfhvR] [--help] [--version] user[:group] file...
簡單測試如圖:
一些常用的指令我們下一篇講 Shell 命令的時候都會有說明。
三、Linux 文件系統簡介
實際上,還需要說明一個文件系統的概念可以說明,文件系統用來組織計算機的文件和資料的系統。
此部分對于初學者,了解一下就好,后面如果真的遇到文件類型的問題再看一篇才好理解。
操作系統就是處理各種數據的,這些數據在硬盤上就是二進制,我們想要看懂這些數據,要有一個翻譯器,將這些二進制的數據還原為人類能看懂的文件形式,這個工作就是由文件系統來完成的,文件系統的目的就是實現數據的查詢和存儲。
由于使用場合、使用環境的不同,Linux有多種文件系統,不同的文件系統支持不同的體系。文件系統是管理數據的,而可以存儲數據的物理設備有硬盤、U 盤、SD卡、NAND FLASH、NOR FLASH、網絡存儲設備等。不同的存儲設備其物理結構不同,不同的物理結構就需要不同的文件系統去管理,比如管理 NAND FLASH 的話使用 YAFFS 文件系統,管理硬盤、SD 卡的話就是 ext 文件系統等等。
比如在我們使用 windows 的時候,格式化一個 U 盤,就需要選擇文件系統,如下圖:
3.1 Linux文件系統類型
和 Windows 類似,在 Windows 下有 FAT32、NTFS 和exFAT 這樣的文件系統,在Linux下又有哪些文件系統呢,Linux 下的文件系統主要有 ext2、ext3、ext4 等文件系統。
Linux 還支持其他的 UNIX文件系統,比如XFS、JFS、UFS 等,也支持Windows的 FAT文件系統和網絡文件系統 NFS等。
-
ext2
具有極快的速度和極小的CPU占用率,可用于硬盤和移動存儲設備,ext2是Linux早期的文件系統,但是隨著技術的發展 ext2文件系統已經不推薦使用了。
-
ext3
增加日志功能,可回溯追蹤,完全兼容 ext2文件系統,ext3支持大文件;
-
ext4
ext4 相比與ext3提供了更佳的性能和可靠性,并且功能更豐富,ext4 向下兼容 ext3 和 ext2,因此可以將 ext2 和 ext3 掛載為 ext4。
日志式文件系統,支持1EB(1024*1024TB),最大單文件16TB,支持連續寫入可減少文件碎片。
在終端中輸入如下命令可查詢當前磁盤掛載的文件系統:
df -T –h
比如查詢我安裝的 Ubuntu 使用的哪個版本的文件系統如下圖:
上圖中最后一個項目是“掛載點”,在 Linux 下創建一個分區并且格式化好以后我們要將其“掛載”到一個目錄下才能訪問這個分區,這個我們后期會有對應介紹。
結語
本文我們認識了 Linux 的 7 種文件類型,知道如何查看文件類型,以及對文件的權限管理方式。
然后還任何了一下 Linux 的用戶系統,知道了 用戶 與 用戶組的概念,記住兩個概念 UID 和 GID: 用戶ID 和 用戶組 ID。
然后知道了通過兩個文件 /etc/passwd 和 /etc/group 可以查看當前系統下所有用戶 和用戶組的信息。
最后還簡單的介紹了一下 Linux 的文件系統。
這些都是 Linux 的基礎知識,內容簡單不難理解,但是是學習嵌入式 Linux 入門的必須要知道了解的內容,在下一篇文章,我們開始學習常用的 Shell 命令。
本文就到這里,謝謝大家!
審核編輯:湯梓紅
-
嵌入式
+關注
關注
5068文章
19014瀏覽量
303228 -
Linux
+關注
關注
87文章
11225瀏覽量
208911 -
文件系統
+關注
關注
0文章
284瀏覽量
19883 -
Shell
+關注
關注
1文章
363瀏覽量
23292
發布評論請先 登錄
相關推薦
評論