1. 程式人生 > >Linux及檔案系統基本介紹

Linux及檔案系統基本介紹

Linux及檔案系統基本介紹

1   網際網路行業現狀

在伺服器端市場:

  • 超級計算機
    • 2014年11月的資料顯示前500系統中的485個系統都在執行著 Linux 的釋出系統,而僅僅只有一臺執行著 Windows 系統
    • 截止到目前,執行 Linux 系統的處理器有 22,851,693 個之多,而 windows 系統僅僅只有 30,720
  • 雲端計算

    2014年 Linux 基金會撰寫了一個報告,研究發現 75% 的大公司在使用 Linux 系統作為他們的主要平臺,相對的使用 Windows 系統的只佔 23%

移動端市場:

基於Linux的Android系統,在2014年第三季度的智慧手機出貨量中,Andriod 裝置的市場份額從去年同期的 81.4% 上升到了 83.6%

嵌入式系統:

自2013 年的研究數字表明,按規劃,大約一半的嵌入式系統將會採用 Linux。目前也誕生了越來越多的基於Linux的智慧硬體裝置,例如:智慧路由器。

由於本系列的文章主要是對網際網路的軟體開發和測試進行介紹,按照目前的行業趨勢,Linux系統已經成為網際網路行業的最主要的生產力平臺了,相關從業人員完全有必要對Linux系統進行學習和了解。

2   典型的計算機系統

一個典型的計算機系統由軟體和硬體兩部分構成。

其中硬體系統由如下幾部分構成:

  • 中央處理器
  • 儲存器
  • 外部輸入輸出(IO)裝置

各部分的組成部分如下下圖:


計算機的軟體則是硬體之上的執行程式和相應的文件。

作業系統則是執行在計算機硬體之上的最基礎的軟體系統,常見的系統有:

  • PC端
    • Windows
    • Linux
    • Mac OS
    • 其它
  • 移動端
    • iOS
    • Android
    • Windows Phone
    • 其它
  • 在如今移動裝置已經如此普及的年代,相信大家已經能夠認識到作業系統其實不僅僅只是Windows了,而是基於一定的原理能夠百花齊放的基礎軟體系統。

    3   Linux基本介紹

    正如前面提及,一個基本的計算機系統由“硬體”和“軟體”組成,一臺Linux裝置,主要的組成如下圖所示:


    一般情況下,我們所說的Linux系統,特指中間核心級的部分,我們看到的Linux的桌面Desktop,例如:KDE,GNOME都只是普通的應用程式而已。Linux的核心在於其核心,核心是應用程式和硬體程式聯絡的紐帶。

    Linux的人機互動方式有兩種:

    • 圖形互動介面
    • 命令列互動介面(CLI)

    圖形介面,從Windows下轉過來的使用者應該不陌生,但是圖形介面不是Linux的精髓,作為一個高階的計算機工作者,應該能夠透過現象看本質,所有的計算軟體的本質其實都是資料的處理和流通。Desktop不是Linux,所以後面將逐漸脫離Desktop,而轉向對Linux進行學習和研究。

    4   Linux兩種互動方式

    以檢視Linux的根檔案系統下的檔案為例子,來對比兩種互動方式的不同。

    在Desktop下面,開啟檔案管理圖形應用程式:


    在CLI下面輸入ls命令: 

    ➜  /  ls
    bin      deepinhost  etc         initrd.img.old  lost+found  opt   run   sys  var
    boot     dev         home        lib             media       proc  sbin  tmp  vmlinuz
    cxassoc  disk        initrd.img  lib64           mnt         root  srv   usr  vmlinuz.old

     在圖形介面上通過不同的檢視或者屬性可以檢視到更多的檔案目錄和資訊,同樣在CLI介面上可以輸入不同的命令引數,得到相應的檔案目錄的文字描述資訊。

    同樣的,Linux的其它常用系統管理工具,如:

    • 磁碟管理
    • 網路管理
    • 程序管理
    • 軟體管理

    都有對應的桌面程式和CLI程式來提供管理,後續會詳細展開,在此不一一贅述。總之,從承載的資訊上來看,兩種互動基本上是等價的,甚至嚴格來說CLI可以提供的操作甚至多於圖形使用者介面。因為圖形使用者介面可以說是一種更高層的應用,是對CLI功能的進一步封裝的圖形表現方式而已。

    如果作為普通的桌面級消費使用者來說,掌握圖形互動和圖形介面應用即可,但是對於Linux的開發人員來說,則一定要熟練掌握CLI命令來完成對系統的各種操作和呼叫。

    5   檔案目錄及系統

    和Windows完全不同,Linux下面的所有目錄都來自於 "/" 目錄,沒有將硬碟分割槽成C、D、E盤。Linux下所有的檔案系統都衍生於同一個根節點,所有的磁碟必須掛載在檔案系統相應的目錄下面。


    不管是Windows還是Linux,都有如下流程:

    • 新購置的物理硬碟,必須要分割槽,不管是分一個區還是多個區。這個分割槽實際上是對磁碟的分割槽表進行資料定入,和啟動位置有關

  • 分割槽的硬碟必須要格式化相應的檔案系統
    • Windows系統一般是NTFS檔案系統
    • Linux系統一般是EXT4檔案系統
  • 被格式化的磁碟必須要掛載到作業系統相應的檔案目錄下
    • Windows相當於在C/D/E盤之上還有一個根目錄,但是顯然它實際上沒有按照這種觀念來普及此係統。Windows系統自動幫使用者完成了掛載分割槽到目錄的工作,即自動將磁碟分割槽掛載到C/D/E盤的“目錄”
    • Linux則除了會自動掛載根分割槽啟動項外,別的需要使用者自己配置。
  • 在Linux系統中,資訊的基本組織單位稱作檔案。對於物理裝置,Linux也通過檔案系統來提供了簡化的訪問方式,使用者可以使用同樣的命令處理普通檔案和物理裝置。

    6   標準檔案結構

    在根目錄下,列出Linux的主要目錄:

    複製程式碼
    ➜  /  ll
    總用量 104K
    drwxr-xr-x   2 root root 4.0K  9月 18 10:33 bin
    drwxr-xr-x   3 root root 4.0K  9月  7 15:31 boot
    drwxr-xr-x  17 root root 4.3K  9月 18 21:18 dev
    drwxr-xr-x   3 root root 4.0K  9月  7 16:02 disk
    drwxr-xr-x 141 root root  12K  9月 18 21:18 etc
    drwxr-xr-x   4 root root 4.0K  8月 31 12:01 home
    drwxr-xr-x  22 root root 4.0K  9月  7 18:01 lib    
    drwxr-xr-x   4 root root 4.0K  9月 11 21:01 media
    drwxr-xr-x   5 root root 4.0K  8月 31 17:59 mnt
    drwxr-xr-x   8 root root 4.0K  8月 31 09:35 opt
    dr-xr-xr-x 211 root root    0  9月 19  2015 proc
    drwx------  16 root root 4.0K  9月 18 17:30 root
    drwxr-xr-x  22 root root  720  9月 18 21:18 run
    drwxr-xr-x   2 root root  12K  9月  7 18:01 sbin
    drwxr-xr-x   2 root root 4.0K  4月 28 00:05 srv
    dr-xr-xr-x  13 root root    0  9月 19  2015 sys
    drwxrwxrwt   8 root root 4.0K  9月 18 22:05 tmp
    drwxr-xr-x  10 root root 4.0K  4月 28 00:19 usr
    drwxr-xr-x  13 root root 4.0K  8月 31 17:15 var
    ……
    複製程式碼

     關於根目錄下的檔案描述,Linux是有一套標準可以進行參考:FHS(Filesystem Hierarchy Standard)。

    本文只對主要的目錄的功能介紹。

    boot目錄
    包含系統載入程式,Linux核心程式檔案vmlinuz,磁碟記憶體映像檔案initrd以及GRUB初始化載入程式和配置檔案

    除了boot目錄,系統啟動必須的5個目錄:

    • dev

      系統裝置目錄。在Linux系統下,任何裝置都對應著一個或多個裝置檔案,例如磁碟對應著 /dev/sd*檔案

    • etc

      Linux系統執行的配置文字檔案

    • lib

      該目錄含有系統引導過程,及執行系統命令所需要挾核心模組和各種動態連結共享庫檔案

    • sbin

      超級使用者組使用的系統命令

    • bin

      系統管理員和普通使用者共享的各種通用命令程式

    記憶方法

    目錄簡稱拼接:delsb,刪除SB,誰刪除這其中的目錄了,誰就是那啥啥了 ^_^

    其它主要會經常碰到的目錄:

    • home

      使用者主目錄的根目錄,每增加一個新使用者,系統都會在此目錄下面增加一個和使用者名稱相同的目錄,儲存使用者相關的配置及資料

    • media

      移動儲存介質的安裝點

    • mnt

      檔案系統的臨時掛載點

    • opt

      應用程式等附加軟體的安裝目錄

    • var

      儲存各種可變長的資料檔案,如日誌檔案等等

    • usr

      Unix Soft Resource 儲存系統提供的各種共享資料(使用者命令、庫函式、標頭檔案和文件等)

    • root

      超級管理員的主目錄

    • tmp

      臨時檔案目錄,系統重啟後會自動清空

    • proc

      程序檔案系統的根目錄,是一個虛擬檔案系統,通過對此目錄的檔案讀取可以獲取系統執行態的很多資訊:如CPU、記憶體、執行時間等等

    關於根目錄下的其它目錄及其子目錄的詳細介紹及目錄之間的區別,請參考linux官網關於 FHS 的最新更新(基本上每年都會有更新)。

    7   檔案描述及許可權

    在Linux下面對檔案的操作有個很重要的概念,就是:檔案許可權。很多初學者認為Linux不好用,基本上很大的原因就是止步於這個地方就沒有深入研究下去。因為對於任何一個系統來講,檔案資料的各種操作肯定是很高頻的互動,在Linux系統下,如果不瞭解檔案系統的許可權概念,那麼在對檔案資料進行操作的時候,必然會遇到各種阻礙,然後不得已而放棄了Linux的繼續研究。

    在圖形介面下,檔案的許可權是通過在檔案圖示是否上鎖(或者X號等)來進行形象視覺化,在CLI介面,則是通過特殊的文字標記來顯示:

    ➜  /  ll |grep bin
    drwxr-xr-x   2 root root 4.0K  9月 25 14:56 bin
    drwxr-xr-x   2 root root  12K  9月 25 14:55 sbin

    如上對目錄及檔案的描述一共7段:

    1. permissions:檔案的詳細資訊,主要是許可權資訊/型別資訊
    2. link:檔案硬連結數或目錄子目錄數
    3. user:檔案所屬使用者
    4. group:檔案所屬組
    5. size:檔案大小
    6. time:檔案建立時間
    7. file:檔名稱

    記憶方法

    七段的英文簡稱連寫為:

    PLUGSTF
    

    參考記憶:插入TF卡

    • PLUGS:插頭
    • TF:目前手機上使用的小型SD擴充套件卡

    PLUG 部分是重要的許可權組成部分,在Linux下進行操作,最最重要的基礎概念就是檔案的許可權概念,如果這個沒弄清楚,則會經常遇到各種阻礙。

    7.1   檔案型別及許可權

    典型的文字檔案許可權描述字元如下所示:

    drwxr-xr-x

    一共10位,按照功能對位進行劃分,總共可以分為4個功能段,如下表所示:

    檔案許可權及型別資訊
    型別 使用者許可權 組許可權 其它許可權
    1 3 3 3
    d rwx r-x r-x

    第一段表示檔案的型別:

    • d: directory,表示目錄

    • -: 短橫線“空”表示普通檔案,例如:文字檔案,二進位制檔案

    • l: link,表示連結檔案,例如:快捷方式

    • b: block,表示塊狀裝置,例如:磁碟

    • c: character,表示字元特殊檔案,例如:控制檯終端/印表機等等

    • p: pipe,管理檔案

    • 其它型別

      一般對於應用層開發人員,最多接觸的就是目錄和普通檔案兩種,其它有興趣的可以去具體的查閱相應的資料。

    純粹的檔案操作許可權的描述有三類:

    • r 可讀
    • w 可寫
    • x 可執行

    對檔案操作的使用者身份劃分成三類:

    • U User 直接從屬使用者
    • G Group 檔案所屬組
    • O Other 不屬於上面兩樣的其它使用者

    檔案許可權的三段,對應著不同的使用者身份對此檔案的不同許可權,任何身份的使用者不能夠對檔案做超過其許可權的事情。

    特別注意,在Linux系統下:

    • 不是通過副檔名來判定程式的型別的
    • 不是通過 .exe 來判定程式是否可執行,而是通過 x 屬性表明此檔案可以被執行
    • 和檔案不同,目錄的 x 屬性表示可以將工作路徑切換到目錄裡面

    許可權相關的9位,分別通過是1或者0來表示是不具有相應的許可權,所以會產生如下的一些常見的數字值來表示檔案的許可權(使用一個小於8的整數來表示3個bit位的狀態值):

    • 777

      111 111 111 表示對於U,G,O都是讀/寫/可執行全開發許可權

    • 666

      110 110 110 表示對於U,G,O都是可讀寫但是不可執行

    • 644

      110 100 100 表示對於U是可讀寫,對於U和O則是隻讀的

    所以如果要將某個檔案修改為對所有的使用者/組/其它都是可讀寫及執行的許可權,可以執行如下命令:

    chmod 777 xxx_file

    或者使用一種主義化的方式來新增許可權:

    chmod a+rwx xxx_file

    關於檔案的許可權及操作者身份限定,CLI裡面提供了豐富的命令列工具,基本上使用者可以通過這些命令完成所有對檔案系統所需要的操作。具體的命令及操作,可以查閱相應的書藉和文件,多加練習,熟練操作即可。

    7.2   其它描述資訊

    • 檔案大小
    • 建立時間
    • 檔名稱

    這些資訊的用途正如其名稱一樣直觀和明確,在此不再贅述。

    8   檔案和目錄的基本操作

    對檔案和目錄的基本操作包括但不限於:

    • 目錄建立和刪除
    • 檔案建立/修改/刪除
    • 檔案或目錄的移動
    • 檔案或目錄名稱修改
    • 檔案查詢

    等等,這些工具類的使用及熟練,屬於比較低階的知識階段,瞭解前面的理論框架後,只需要不斷重複的操作練習即可,使之成為不經過大腦就可以快速操作的基本本領。

    這些命令列,在相應的Linux介紹書藉,或者網路技術文章裡面到處都是,在此也略去不表。

    9   小結

    本文的目標是以最小的篇幅,儘快的給Linux初學者建立整體的Linux的認識,具體各部分的延伸細節和工具的介紹,本文篇幅有限,就都不做詳細的介紹。那些碎片化的資訊,有低門檻的獲取途徑(通過網路搜尋引擎),和低門檻的加強學習方式(不斷練習,熟能生巧),都不是本文的重點,本文及後續的系列文章,主要是在假定從業人員有了一定的Linux操作基礎的情況下,而展開的Linux的應用領域的技能。

    最後重申一句話: 工具很重要,但是不是目的,對於工具,最好的估計就是“有空時不斷的加強練習,熟練操作”,使之成為不經大腦的習慣,然後自己有更多的時間和更高效的方式去解決高層次的問題。


    作者: Harmo哈莫
    作者介紹: https://zhengwh.github.io
    技術部落格: http://www.cnblogs.com/beer
    Email: [email protected]
    QQ: 1295351490
    時間: 2015-09-18
    版權說明: 未經許可,嚴禁用於商業目的的非法傳播
    聯絡或打賞: http://zhengwh.github.io/contact-donate.html

    如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^
    或者關注我的微信公眾號,更多技術文章等你來發現,

    donate 標籤: Linux 好文要頂 關注我 收藏該文 一點一滴的Beer
    關注 - 19
    粉絲 - 804 榮譽: 推薦部落格 +加關注 4 0 « 上一篇: 介面自動化測試的"開胃小菜"---簡單黑客攻擊手段
    » 下一篇: Linux檔案系統應用---系統資料備份和遷移(使用者角度)
    	</div>
    	<div class="postDesc">posted @ <span id="post-date">2015-09-27 22:02</span> <a href="https://www.cnblogs.com/beer/">一點一滴的Beer</a> 閱讀(<span id="post_view_count">9915</span>) 評論(<span id="post_comment_count">3</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=4842850" rel="nofollow">編輯</a> <a href="#" onclick="AddToWz(4842850);return false;">收藏</a></div>
    </div>