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