Linux文件結構與文件權限

基于centos了解Linux文件結構

了解一下文件類型

Linux采用的一切皆文件的思想,將硬件設備、軟件等所有數據信息都以文件的形式呈現在用戶面前,這就使得我們對計算機的管理更加方便。所以本篇文章會對Linux操作系統的文件結構和文件權限進行講解。

首先我們鍵入到達~目錄

    cd ~   

然后鍵入ll查看所有非隱藏文件,可以看到在每個文件最前方都有一個由10個字符構成的字符串,就以第一行為例-rw-------.,可以看到第一行的10字符的第一個字符是-,在Linux操作系統中,這個符號就代表著文件是一般文件,也就是我們日常配置、文本文件等這類文件。

在這里插入圖片描述

除了一般文件以外,每個文件第一欄的第一個字符還可能出現以下幾種情況:

  1. d:代表當前文件為文件夾
  2. l:代表當前文件為超連接文件
  3. b:該文件提供為提供給系統存取的設備,例如你計算機的硬盤所存儲的數據內容,可能都會保存在這個類型文件中
  4. c:代表著連接到你計算機的一些硬件設備,例如鼠標、鍵盤等配置文件開頭都是以c開頭的

為了驗證這一點,我們隨意創建一個文件夾:

mkdir /tmp/dir

然后使用ll命令查看其文件屬性:

ll /tmp/

可以看到我們創建的文件夾是以d打頭的

在這里插入圖片描述

上文還提到了一個b打頭的文件,這個文件是提供系統存儲的數據且可能硬盤也可能是其他存儲設備的,這類型文件一般都在設備目錄dev下,我們可以進入dev目錄看到這些文件:

ll /dev/sda

在這里插入圖片描述

而c打頭的文件則是硬件設備,我們不妨鍵入 ll /dev查看一下,如下圖所示的BUS總線,以及CPU等這些都是硬件設備:

在這里插入圖片描述

同樣的在上文中我們也有提到關于隱藏文件的概念,在Linux中隱藏文件大多以.開頭,這些文件使用常規的ll、ls等命令是看不到的,必須使用al選項查看所有文件才能看到(補充一句a的意思就是all):

ls -al查看

于是在當前目錄的所有文件列表下,我們看到了隱藏目錄:

在這里插入圖片描述

文件名的限制

在現如今的Linux,文件系統基本采取XFS,所以文件名長度限制基本是255byte以內,說通俗一點,你的文件要是以英文命名就可以起一個長度為255的文件名,若為漢字則長度大約是127。注意由于Linux命令中常會用到-以及一些特殊符號,所以文件命名應該盡量避免以下幾個特殊符號:

* ? > < ; & ! [ ] | \ ' " ` ( ) { } -

樹形目錄結構

Linux的文件結構總的來說類似于一棵樹,用戶可以按照規范約定在相應的文件夾下存儲文件,就例如在var目錄下可以存儲一些與系統的運作有關的文件例如程序日志文件、在tmp目錄下存儲一些臨時文件等。
需要了解的是,無論是何種Linux系統,他的目錄都會遵循一個標準,包括下圖中的文件結構,而這個標準名為Filesystem Hierarchy Standard (FHS)

在這里插入圖片描述

FHS規定文件的整體結構應該是這樣的:

1. /:根目錄,與開機系統有關
2. /usr(unix software resource):與軟件的安裝和執行有關
3. /var(variable):與系統的運作有關

首先介紹一個根目錄/,它的子節點文件基本都是和系統開機相關、各種程序、庫函數的文件夾,所以在根目錄這一級是非常重要的,所以FHS希望后續使用Linux的時候盡量不要將用戶的文件夾或者文件存儲到這一層級以避免誤操作到重要文件導致系統崩潰。

在這里插入圖片描述

根目錄下有個bin文件夾,我們日常使用Linux的時候都會用到lscattouchmkdir等基本操作命令都存放于bin目錄下:

在這里插入圖片描述

接下來是/boot,這個目錄存放的基本都是Linux開機會用到配置文件,像Linux kerner常用到的文件名 vmlinuz就會存放在這個文件夾下

在這里插入圖片描述

接下來是/dev,這個文件夾基本存放的都是硬件設備,我們都知道Linux主張一切皆文件,所以所有的鼠標、鍵盤、硬盤的設備信息都是存放在這個文件夾下:

在這里插入圖片描述

/etc目錄則是存放配置文件的地方,常見我們的用戶文件/etc/passwd,以及密碼文件/etc/shadow,還有系統文件/etc/rc等都會存放在這個目錄下。
除此之根目錄下還有一些文件夾如下所示,這里就不一一介紹了:

  1. mnt存放掛載相關。
  2. lib存放庫函數相關、
  3. sbin存放開機、系統還原、修復等眾多指令。
  4. tmp存儲臨時文件習慣。

我們再來聊聊FHS規范中一個命名比較特殊導致用戶使用時常受到誤導的文件夾/usr,很多人最初都會誤以為這是user的縮寫,其實這個單詞是unix software resource的縮寫,這個文件夾是FHS規定存放軟件資源相關的文件夾,他們建議用戶軟件相關的資源盡可能都放到這個目錄。

首先來看看/usr/bin目錄,這個目錄實質上就FHS希望用戶能夠將一般用戶所能夠的使用的指令都放到這個目錄下,所以我們在日常軟件安裝時對應各種啟動指令腳本都建議存放到這個位置。此外usrbin目錄下還存放了系統指令的軟連接,參見下圖:

在這里插入圖片描述

除此之外usr下還有3個常見的目錄:
1./usr/lib與根目錄的lib功能相同,存放的基本是lib目錄下的軟鏈接。
2. /usr/local/則是FHS希望用戶將下載的軟件都放到這個目錄下統一管理
3. /usr/sbin同樣也是將根目錄的sbin目錄下的指令軟鏈接到此。

最后我們再來介紹一些/var,這個目錄FHS認為應該存放那些經常發生變化的文件,例如日志,他們希望日志統一存放到/var/log下。/var/lib存放的則是會臨時改變的庫文件。而/var/lock存放的則是被某個程序鎖定的文件,已確保其他程序不會同時使用到這個文件。

在這里插入圖片描述

絕對路徑和相對路徑

絕對路徑則是以根節點作為其實節點的文件搜尋辦法,例如我們想到達tmp文件夾,如果使用絕對路徑的方式則是

cd /tmp

假如我們在boot目錄下,而tmp和他一樣都屬root的子節點,所以使用相對路徑的方式是先退到root目錄,然后再進入tmp文件夾,如下圖,所以在boot目錄下,我們進入tmp文件夾的命令為 cd ../tmp/:

在這里插入圖片描述

演示結果參見下圖:
在這里插入圖片描述

注意:../代表著退到上一級,那么就會有這么一個指令./,代表當前目錄,這個指令是干什么用的是,很簡單,假如我們Linux中某個sh文件不在binsbin/usr/bin這樣的目錄下,Linux規定我們執行可執行sh文件文件時都必須標明./,例如我在tmp目錄下有個執行腳本test,那么我在test目錄下執行這個腳本的格式就必須是

sh ./test.sh

文件權限

權限對應角色

我們在隨意一個目錄下鍵入ll查看文件信息,如下圖我們可以看到每個文件的第一欄除去第一個字符串代表著文件類型外,其余字符都會顯示rwx-相關,其含義為:

  1. r代表讀權限。
  2. w代表寫權限。
  3. x代表執行權限。

在這里插入圖片描述

我們以dir的文件描述為例,第一個字符d代表它是個文件夾,2-4代表當前所有者權限為讀寫執行都有,而5-7代表所屬組權限,即這個文件所屬的組所擁有的權限為讀和執行,最后一行代表其他人的權限也是讀和執行。

d   rwx   r-x     r-x.

針對dir文件夾,可以看到第3列為root,說明這個文件屬于root的,root用戶擁有這個文件夾的讀寫執行權限。而第4列也為root,說明屬于root組的用戶擁有讀寫執行的權限。

假如此時有個名為xiaoming的用戶進來,它屬于xiaomingzu,那么對于這個dir文件夾而言,他就是other用戶,那么它的權限只有讀和執行。

文件夾與文件對應權限的相似與區別

Linux系統下文件系統下,文件的可執行權限和文件夾的可執行權限是有所不同的。假如一個用戶對文件夾只有讀和寫權限,那么他就無法進入到這個目錄,如下所示,我們有root創建一個testDir,所以對于其他用戶來說只有讀和寫權限。
注意一下筆者賦權的命令,這里我們需要了解一下Linux中讀權限用4表示,寫權限用2表示,執行用1表示,所以766(4+2+1)+(4+2)+(4+2)代表著所屬者讀寫執行,所屬組和其他都是讀和執行:

# 進入tmp目錄cd /tmp/# 創建testDir文件夾
mkdir testDir# 設置這個文件夾 所屬者有所有權限 所屬組和其他用戶只有讀和寫權限
chmod 766 testDir/

當筆者以其他用戶登錄(這個用戶不是所屬者root也不屬于root組)時,就會報出沒有權限的問題

在這里插入圖片描述

這時候我們希望其他用戶可以有執行的權限,要怎么做呢?很簡單,我們也可以參考上面的數學公司對其他用戶增加執行權限:

chmod 777 /test/testDir

當然我們也可以單獨對其他用戶增加一個可執行權限,命令如下所示,可以看到其他為o,增加一個可執行權限為+x。同理可知若是所者為u,所屬組為g。增加權限用+,減去權限用-,賦值權限用=:

其他用戶對于testDir文件夾的操作增加執行權限
chmod o+x testDir/

所以我們若希望所屬者賦值為所有權限則是u=rwx,所屬組和其他都希望是讀和執行,那就是g和o合在一起寫,并=rx,如下所示:

 chmod u=rwx,go=rx testDir/

當然有時候你希望這個文件改變所屬組,你可以使用chgrp 指令,如下所示,這樣意義文件夾所屬組就改為otheruser

# 將文件夾testDir所屬組改為otheruser
chgrp otherusertestDir/

同理若你希望改變所有者則可以使用chown :

chown otherusertestDir testDir/

當然,若你希望所有者和所屬組都能改變則可以:

# 將testDir所有者改為冒號左邊的root,將所屬組改為冒號右邊的root
chown root:root testDir/

在這里插入圖片描述

回到問題,為了方便演示文件和文件夾可執行權限的區別,我們將文件夾所屬者和所屬者都改為root,并且所有用戶都具備所有權限:

chmod 777 testDir/
chown root:root   testDir/

在這里插入圖片描述

然后進去該文件夾,創建一個file1的文件,權限設置為700,即所屬者才有權限,所屬組和其他沒有任何權限:

cd testDir/touch file1chmod 700 file1

使用ll -d查看testDir文件夾以及文件夾下對應的文件file1的權限,可以發現對于其他用戶而言文件夾有所有的權限,而文件沒有任何權限:

ll -d  /tmp/testDir/ /tmp/testDir/file1

在這里插入圖片描述

所以我們使用別的賬戶可以進入路徑,但是無法讀寫該文件如下圖:

在這里插入圖片描述

vim file1

在這里插入圖片描述
但是以為其他用戶擁有file文件的目錄testDir的執行權限,所以它可以將這個文件刪除。所以得出結論,文件夾的可執行權限意為著可以刪除這個文件夾下所有的文件,但是并不意味著可以修改或者讀取文件夾下文件的內容。

這種情況我們完全可以將文件夾testDir看作一個抽屜,任何人對其都有任何權限。此時root往里面放了一個小保險盒,讀寫權限只有root有。所以其他用戶是無法打開或者修改盒子中的內容。但是他具有抽屜(testDir)的所有權限,所以他可以將這個保險盒扔掉。

在這里插入圖片描述

以下這張表格就說明了操作文件夾下某些文件所需的最低權限,可以看到像刪除、復制等這些無需讀取文件內容的操作,文件所對應的文件夾甚至不一定需要rw的權限。用上面抽屜和文件的例子來說,我們刪除完完全全可以看不到抽屜內部文件的具體的內容,復制文件不需要知道文件夾內有什么文件,我們完完全全可以瞎摸出來放到別的目錄。
在這里插入圖片描述

umask設置默認權限

默認情況下,用戶創建的文件權限為:rw-rw-rw-,對應的數字為666,而文件夾則是:rwxrwxrwx對應數字是777。那是什么原因導致我們最后創建出來的文件權限變成rw-r--r--(644)以及文件夾變成rwxr-xr-x(755)呢?

答案就是umaskumask和默認權限進行取反和按位與運算,從而得出文件和文件夾創建的實際文件。
先來演算一下文件的權限運算,加入我們創建一個文件file

touch file

可以看到它的權限為0644(因為權限位最前面是-,說明是一般文件,可直接視為0)

-rw-r--r-- 1 root root    0 Dec  6 14:39 file

以上文所說,默認是0666,然后和0022進行取反按位與運算,所以我們首先對0022進行取反得到7755

在這里插入圖片描述

然后和0666進行按位與運算,最終得出文件默認權限為rw-r--r--,文件夾同理這里就不多做演示:

  7755
& 06660644

上述運算屬于標準的推算步驟,對于取反按位與這種運算,讀者可直接視為減法,例如文件默認權限為0666,而umask為0022,兩者直接相減即可直接得到0644。

如果我們希望文件權限保持最原始的權限,那么我們可以將umask改為0000

umask 0000

創建的文件權限就是 666,創建的文件夾就是 777

參考文獻

鳥哥的Linux私房菜:https://book.douban.com/subject/4889838/

循序漸進Linux(第2版):https://book.douban.com/subject/26758194/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210371.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210371.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210371.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單元測試Nunit的幾種斷言

Nunit提供了一些輔助函數用于確定好某個被測試函數是否正常工作。通常把這些函數稱為斷言 斷言是單元測試最基本的組成部分。因此&#xff0c;NUnit程序庫以Assert類的靜態方法的形式提供了不同形式的多種斷言 1. Assert.AreEqual&#xff1a;比較兩個值是否相等。用于比較數…

Qt生成動態鏈接庫并使用動態鏈接庫

項目結構 整個工程由一個主程序構成和一個模塊構成(dll)。整個工程的結構目錄如下 Define.priMyProject.proMyProject.pro.user ---bin ---MainProgrammain.cppMainProgram.proMainProgram.pro.userwidget.cppwidget.hwidget.ui ---MathDllMathDll.proMathDll.pro.userMyMath.…

Axios 攔截器實戰教程:簡單易懂

Axios 提供了一種稱為 “攔截器&#xff08;interceptors&#xff09;” 的功能&#xff0c;使我們能夠在請求或響應被發送或處理之前對它們進行全局處理。攔截器為我們提供了一種簡潔而強大的方式來轉換請求和響應、進行錯誤處理、添加認證信息等操作。在本文中&#xff0c;我…

Matlab 點云收縮L1中值(Weiszfeld算法)

文章目錄 一、簡介二、實現代碼三、實現效果參考資料一、簡介 對于之前的加權均值收縮方式,它存在一個很大的缺點,即容易受到噪聲的影響,因此這里我們采用另一種統計學方案:L1中值。其形式如下所示: 其中 x i x_i

MongoDB的條件操作符

本文主要介紹MongoDB的條件操作符。 目錄 MongoDB條件操作符1.比較操作符2.邏輯操作符3.元素操作符4.數組操作符5.文本搜索操作符 MongoDB條件操作符 MongoDB的條件操作符主要分為比較操作符、邏輯操作符、元素操作符、數組操作符、文本搜索操作符等幾種類型。 以下是這些操作…

拷貝實體類

文章目錄 方式一 &#xff1a; 方式二&#xff1a;&#xff08;不常用&#xff09; 方式一 &#xff1a; 將左邊的實體拷貝到右邊的實體中 import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(memberAddress, resp);將右邊的實體拷貝到左邊的實體中 imp…

對String類的操作 (超細節+演示)

[本節目標] 1.認識String類 2.了解String類的基本用法 3.熟練掌握String類的常見操作 4.認識字符串常量池 5.認識StringBuffer和StringBuilder 1.String類的重要性 在C語言中已經涉及到字符串了&#xff0c;但是在C語言中要表示字符串只能使用字符數組或者字符指針&…

高速風筒安規方案中的安規測試及安規電路特性介紹--【其利天下技術】

作為家用電子產品&#xff0c;高速吹風筒做安規測試&#xff0c;過安規要求是必須保證的&#xff0c;一般電路要過安規測試&#xff0c;那么安規測試的目的是什么呢&#xff1f; 安規測試字面意思是安全規范測試&#xff0c;主要強調對使用人員的安全保護&#xff0c;也就是我…

P7 Linux C三種終止進程的方法

前言 &#x1f3ac; 個人主頁&#xff1a;ChenPi &#x1f43b;推薦專欄1: 《C_ChenPi的博客-CSDN博客》??? &#x1f525; 推薦專欄2: 《Linux C應用編程&#xff08;概念類&#xff09;_ChenPi的博客-CSDN博客》??? &#x1f6f8;推薦專欄3: ??????《 鏈表_Chen…

什么是MyBatis、什么是MyBatis-Plus、簡單詳細上手案例

什么是MyBatis MyBatis是一個開源的Java持久層框架&#xff0c;用于簡化與關系型數據庫的交互。它通過將SQL語句與Java代碼進行分離&#xff0c;提供了一種優雅的方式來處理數據庫操作。 MyBatis的核心思想是將SQL語句與Java方法進行映射&#xff0c;使得開發人員可以通過配置…

【工具類】Word 轉 PDF

商業版權問題 使用破解版-aspose-words-19.5jdk.jar https://blog.csdn.net/aley/article/details/127914145 Document wordDoc new Document(wordFileInputStream); wordDoc.save(pdfFile, new PdfSaveOptions());中文亂碼問題 在linux中使用會造成中文亂碼問題 解決方案…

C語言數據結構-基于單鏈表實現通訊錄

文章目錄 1 基礎要求2 通訊錄功能2.1 引入單鏈表的文件2.2 定義聯系人數據結構2.3 打開通訊錄2.4 保存數據后銷毀通訊錄2.5 添加聯系人2.6 刪除聯系人2.7 修改聯系人2.8 查找聯系人2.9 查看通訊錄 3 通訊錄代碼展示3.1 SeqList_copy.h3.2 SeqList_copy.c3.3 Contact.h3.4 Conta…

模塊化機房在大數據時代的角色:高效、可擴展的數據存儲和處理平臺

隨著大數據時代的到來&#xff0c;數據已經成為企業競爭的核心資源。然而&#xff0c;傳統的數據中心已經無法滿足現代業務的需求&#xff0c;尤其是在數據存儲和處理方面。模塊化機房作為一種新型的數據中心建設模式&#xff0c;具有高效、可擴展等優勢&#xff0c;逐漸成為大…

PyCharm編輯器結合Black插件,輕松實現Python代碼格式化

大家好&#xff0c;使用Black對Python代碼進行格式化&#xff0c;可使代碼看起來更美觀。但是&#xff0c;隨著項目規模不斷變大&#xff0c;對每個文件運行Black變得很繁瑣。本文就來介紹在PyCharm中實現這一目標的方法。 1.安裝Black 首先&#xff0c;在虛擬環境中安裝Blac…

二叉樹的鋸齒形層序遍歷[中等]

優質博文&#xff1a;IT-BLOG-CN 一、題目 給你二叉樹的根節點 root &#xff0c;返回其節點值的 鋸齒形層序遍歷 。&#xff08;即先從左往右&#xff0c;再從右往左進行下一層遍歷&#xff0c;以此類推&#xff0c;層與層之間交替進行&#xff09;。 示例 1&#xff1a; 輸…

認識線程和創建線程

目錄 1.認識多線程 1.1線程的概念 1.2進程和線程 1.2.1進程和線程用圖描述關系 1.2.2進程和線程的區別 1.3Java 的線程和操作系統線程的關系 2.創建線程 2.1繼承 Thread 類 2.2實現 Runnable 接口 2.3匿名內部類創建 Thread 子類對象 2.4匿名內部類創建 Runnable 子類對…

使用貝葉斯網絡檢測因果關系,提升模型效果更科學(附Python代碼)

雖然機器學習技術可以實現良好的性能&#xff0c;但提取與目標變量的因果關系并不直觀。換句話說&#xff0c;就是&#xff1a;哪些變量對目標變量有直接的因果影響&#xff1f; 機器學習的一個分支是貝葉斯概率圖模型(Bayesian probabilistic graphical models)&#xff0c;也…

【Com通信】Com模塊詳細介紹

目錄 前言 1. Com模塊功能介紹 2.關鍵概念理解 3.功能詳細設計 3.1 Introduction 3.2 General Functionality 3.2.1 AUTOSAR COM basis 3.2.2 Signal Values 3.2.3 Endianness Conversion and Sign Extension 3.2.4 Filtering 3.2.5 Signal Gateway 3.3 Normal Ope…

2.2 網絡多線程(私聊、群發、發送文件、推送新聞、離線留言)

文章目錄 一、私聊1.1 分析1.2 客戶端1.2.1 MessageClientService 私聊類1.2.2 ClientConnectServerThread 線程類 1.3 服務端1.3.1 ServerConnectClientThread 線程類 1.4功能演示 二、群發消息2.1 分析2.2 客戶端2.2.1 MessageClientService類2.2.2 ClientConnectServerThrea…

1.1.1.多線程的發展--對cpu性能的壓榨史

一.壓榨歷史 1.單進程人工切換。紙帶機。只能解決簡單的數學問題。 2.單道批處理。多進程批處理。多個任務批量執行。解決手動操作時需要人工切換作業導致的系統利用率低的問題 3.多進程并行處理。把程序寫在不同的內存位置來回切換。當一個作業在等待I/O處理時&#xff0c;…