存儲結構與磁盤劃分

文件系統層次化標準(FHS,file system hierarchy standard)
? ? ? ? 在windows操作系統中,要找到一個文件需要先進入該文件所在的磁盤分區(如C:\等 ? C:\ZSX\zsx.txt),然后在進入該分區下的一個具體目錄,最終找到這個文件。在Linux操作系統中,一切文件都是從根目錄(/)開始的(根目錄/為第一級),然后按照FHS文件系統層次化標準采用樹形結構來存放文件,以及定義了常用目錄的用途。/root:root管理員的家目錄(超級用戶),系統用戶是不需要有家目錄的,因為系統用戶的默認終端為/sbin/nologin,其不需要登陸到系統,只是負責Linux系統的一些服務配置。 /dev:以文件形式存放任何設備與接口,設備文件。 ? /etc:配置文件(passwd、shadow。Linux系統的一切都是文件,配置一個服務就是在修改該服務所對應的配置文件) ? ? ?/home:用戶家目錄(普通用戶) ? /tmp:任何人都可以使用的共享臨時目錄 ? /boot:開機時需要的文件(驅動程序、引導文件等) ? /var:經常發生變化的文件,如:數據庫、日志文件等 ? ?/lib:系統的函數庫文件 ? /usr:用戶自己安裝的程序文件 ? ? /mnt 與 /media :設備文件的掛載目錄,自動掛載為/media ?手動掛載一般為/mnt /bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin、/usr/local/sbin:各種命令文件(二進制文件),bin目錄內部都是開機時候不需要的命令(文件),sbin目錄內部為開機時候需要的命令(文件)。?絕度路徑與相對路徑。路徑指的是如何定位到某個文件。絕對路徑指的是從根目錄/開始寫起的文件或目錄名稱,而相對路徑指的是相對于當前路徑的寫法。

物理設備的命令規則
? ? ? ? 系統內核中的udev設備管理器會自動把硬件名稱規范起來,目的是讓用戶通過設備文件的名字可以猜出設備大致的屬性以及分區信息等。另外,udev設備管理器的服務會一直以守護進程的形式運行并偵聽內核發出的信號來管理/dev目錄下的設備文件。 SCSI/SATA/U盤:/dev/sd[a-p] ? 軟驅:/dev/fd[0-1] ? 打印機:/dev/lp[0-15] ?光驅:/dev/cdrom ? 鼠標:/dev/mouse ? 磁帶機:/dev/st0 或 /dev/ht0 ?
? ? ? ? 硬盤設備都會是以“/dev/sd”開頭的。而一臺主機上可以有多塊硬盤,因此系統采用a~p來代表16塊不同的硬盤(默認從a開始分配),而且硬盤的分區編號也很有講究:主分區或擴展分區的編號從1開始,到4結束;邏輯分區從編號5開始。(擴展分區最多只能有一個) 注意:sda3只能表示是編號為3的分區,而不能判斷sda設備上已經存在了3個分區。 即,擴展分區與主分區的編號只要符合為1-4之間的任意一個就可以了。
? ? ? ? /dev/sda并不一定就表示主板上第一個插槽上的存儲設備, /dev目錄中sda設備之所以是a,并不是由插槽決定的,而是由系統內核的識別順序來決定的,而恰巧很多主板的插槽順序就是系統內核的識別順序,因此才會被命名為/dev/sda。大家以后在使用iSCSI網絡存儲設備時就會發現,明明主板上第二個插槽是空著的,但系統卻能識別到/dev/sdb這個設備就是這個道理。
? ? ? ? /dev/sda5的含義:/dev/目錄中保存的應當是設備文件;其次,sd表示是存儲設備;然后,a表示系統中同類接口中第一個被識別到的設備,最后,5表示這個設備是一個邏輯分區。一言以蔽之,“/dev/sda5”表示的就是“這是系統中第一塊被識別到的硬件設備中分區編號為5的邏輯分區的設備文件”。
? ? ? ? 主分區、擴展分區和邏輯分區的概念。硬盤設備是由大量的扇區(sectors)組成的,每個扇區的容量為512字節。其中第一個扇區最重要,它里面保存著主引導記錄與分區表信息。就第一個扇區來講,主引導記錄需要占用446字節,分區表為64字節,結束符占用2字節;其中分區表中每記錄一個分區信息就需要16字節,這樣一來最多只有4個分區信息可以寫到第一個扇區中,這4個分區就是4個主分區。如果一個物理磁盤需要劃分為大于4個的邏輯磁盤(分區或卷),則需要抽出其中的一個主分區(16個字節)來作為擴展分分區,擴展分區里面都是包含指向邏輯分區的指針。擴展分區其實并不是一個真正的分區,而更像是一個占用16字節分區表空間的指針(一個指向另外一個分區的指針)。因此,擴展分區實際上并不能儲存文件,能夠儲存文件(寫入實際內容)的是主分區和邏輯分區。擴展分區本質上為指針,指向另一個扇區。另一個扇區則為邏輯分區(16x32=512,一個扇區最多可以記錄32個邏輯分區的信息)。可以自己指定分區的大小,即格式化后形成的文件系統的大小。

磁盤的格式化和文件系統
? ? ? ? 磁盤的格式化分為低級格式化和高級格式化。低級格式化完成將一個磁盤劃分為多個扇區的操作,每個扇區能夠儲存512個字節的信息。在磁盤低級格式化完成后,一般要對磁盤進行分區(分區就是卷)。在邏輯上,每個分區就是一個獨立的邏輯磁盤。每個分區的起始扇區和大小都記錄在磁盤0扇區的的分區表中。在這個分區表中必須有一個分區被標記成活動的(即引導塊),以保證能夠從硬盤引導系統。在真正可以使用磁盤前,還需要對磁盤進行一次高級格式化,即設置一個引導塊、空閑存儲管理、根目錄和一個空文件系統,同時在分區表中標記該分區所使用的文件系統。
? ? ? ? 對于一塊新的硬盤存儲設備,需要先分區,然后再格式化文件系統,最后才能掛載并正常使用。格式化形成的文件系統格式有Ext2、Ext3、Ext4與XFS等。如果硬件儲存設備(即每一個分區)沒有進行格式化,則Linux系統無法得知怎么在其上寫入數據,因此在對存儲設備進行分區后還必須進行格式化處理。(在windows中,硬盤被劃分為4個邏輯分區,每一個分區都格式化為NTFS文件系統,并掛載到C:\ D:\ E:\ F:\目錄上,因此系統在讀取硬盤上的數據時,先根據0扇區的分區表,找到相關分區的信息和位置,然后進入該分區,進一步尋找相關文件的FCB,從而找到具體的文件)。例如對硬盤sda分區后形成的sda1進行格式化后,才能對其進行寫入數據,至于文件系統的概念,則詳見操作系統的學習筆記(FAT、NTFS等文件系統)。

虛擬文件系統VFS
? ? ? ? 計算機系統在發展過程中產生了眾多的文件系統,為了使用戶在讀取或寫入文件時不用關心底層的硬盤結構(用戶不用管該文件系統具體是什么格式的文件系統),Linux內核中的軟件層為用戶程序提供了一個VFS(Virtual File System,虛擬文件系統)接口,這樣用戶實際上在操作文件時就是統一對這個虛擬文件系統進行操作了。
? ? ? ? 硬件設備的掛載。只有在分區、格式化后,對硬件設備(文件系統)進行掛載后,才能通過進入與其掛載的目錄對硬盤進行讀寫等操作,即進入該目錄,就可以讀取該硬盤的數據了。

磁盤的分區與掛載
? ? ? ? 當用戶需要使用硬盤設備或分區中的數據時,需要先將其與一個已存在的目錄文件進行關聯,而這個關聯動作就是“掛載”,其目的是讓用戶可以通過該目錄來使用該硬件設備。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mount命令 ?用于掛載文件系統,其格式:mount [參數] ?文件系統路徑名稱(分區) ?掛載目錄 ?
? ? ? ?-t 指定該分區文件系統的格式(可以不指定,linux系統自己能識別) ?-a 掛載所有在/etc/fstab中定義的文件系統
? ? ? ?mount –a ? //掛載所有在/etc/fstab中定義的文件系統,執行后自動檢查/etc/fstab文件中有無疏漏被掛載的設備文件,如果有,則進行自動掛載操作。? mount ?/dev/sdb2 ?/backup ?將分區/dev/sdb2掛載到目錄/backup上 ?注意:系統在重啟后該掛載就會失效,需要每次開機后都手動掛載一下。如果想讓硬件設備和目錄永久地進行自動關聯,就必須把掛載信息按照指定的填
寫格式(“設備文件 掛載目錄 格式類型 權限選項 是否備份 ?是否自檢”)寫入到/etc/fstab文件中。如下: ?
? ? ? ? ? ? ? ? ? ? /dev/sdb2 ? /backup ? ?ext4 ? ?defaults ?0 ? 0
權限選項: 若設置為defaults,則默認權限為:rw,suid,dev,exec,auto,nouser,async
是否備份:若為1,則開機后使用dump進行磁盤備份,為0則不備份
是否自檢:若為1,則開機后進行磁盤自檢,為0不自檢。
umount命令 ?用于撤銷已經掛載的設備文件,格式:umount ?設備路徑名稱/掛載目錄名稱 ? ?兩者只需要選一個
即可。 ? 如 ?umount /dev/sdb2
? ? ? ? 對于如何在luniux系統中添加一塊新的硬盤、對硬盤進行分區(fdisk命令)和對分區格式化為文件系統(mkfs命令)的詳細操作可以參考有關教材。
? ? ? ? ?df -h 命令 ? 用于查看掛載狀態和硬盤使用量等信息。
? ? ? ? ?du -sh 命令 用來查看一個或多個文件占用了多大的硬盤空間。可以使用du -sh /*命令來查看在Linux系統根目錄下所有一級目錄分別占用的空間大小。du -sh /tmp/zsx1/* ?//查看zsx1目錄內所有文件的占用大小信息? ? ?du -sh /tmp/zsx1 ? //查看zsx1目錄的占用大小信息

改變系統對換區的大小(SWAP交換分區)
? ? ? ? 對換區在操作系統進行中級調度(中程調度)時、缺段缺頁等情況時會使用到對換區,對換區仍然是硬盤中的一個分區,通常內存中不常用的數據臨時放到對換區中,實現虛擬存儲管理。free -m或-h命令可以查看內存的使用量信息,也可以看到對換區(SWAP)的大小和使用量信息。下面介紹增加交換分區容量的方法,設SWAP原來容量大小為2047MB,為其增加5GB,為7167MB。可以在任意一塊硬盤中劃出一個容量為5GB的分區,方法跟上面分區方法一樣,設分區為/dev/sdb2。使用SWAP分區專用的格式化命令mkswap對該分區進行格式化:mkswap? ?/dev/sdb2 ? ? 然后將其掛載: swapon ? /dev/sdb2 ?//這里使用專用的swapon命令 ? ?然后可以使用free -m ?命令查看SWAP分區大小的變化。 ?最后將掛載信息寫到/etc/fstab文件中:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /dev/sdb2 ? swap ? ?swap ? ?defaults ?0 ? ?0

軟硬方式鏈接(文件的共享)
? ? ? ? 快捷方式就是指向原始文件的一個鏈接文件,可以讓用戶從不同的位置來訪問原始的文件;原文件一旦被刪除或剪切到其他地方后,會導致鏈接文件失效。在Linux系統中,存在硬鏈接和軟鏈接兩種文件。無論是硬鏈接還是軟鏈接方式共享文件,文件本身只有一份,這與文件復制有著本質的區別。
? ? ? ? 硬鏈接。共享該文件的每個文件有自己的FCB,其包含自己的文件名和指向索引結點的指針,它們的指針都指向同一個索引結點,即共享文件的索引結點。每添加一個硬鏈接,該文件的索引結點連接數就會增加1;而且只有當該文件的索引結點連接數為0時,才算徹底將它刪除。不能跨分區對文件進行硬鏈接;也不能對目錄文件進行硬鏈接。
? ? ? ? 軟鏈接(符號鏈接 symbolic link)。僅僅包含鏈接文件的路徑名,因此可以跨越文件系統進行鏈接。但是,當原始文件被刪除后,鏈接文件也將失效,從這一點上來說與Windows系統中的“快捷方式”具有一樣的性質。既可以對目錄進行軟鏈接,也可以跨分區(跨文件系統)對文件進行軟鏈接。
? ? ? ? ln命令 ? ln 目標文件 鏈接文件 ? ?硬鏈接
? ? ? ? ? ? ? ? ? ? ??ln -s 目標文件 鏈接文件 ? ?軟鏈接(符號鏈接)
ls -s /home/etc/zsx /tmp/zsx1 ? 則zsx1鏈接文件其實就是一個路徑名:/home/etc/zsx,其大小為13bytes,因為/home/etc/zsx只有13個字符。如下:
# ls -l guess.sh?
-rw-rwxr--+ 1 root root 558 Mar ?4 23:19 guess.sh ?//該文件設置有ACL,且指向該索引結點的指針只有一個,即硬鏈接只有自己
# ln -s guess.sh zhang.sh
# ls -l zhang.sh?
lrwxrwxrwx. 1 root root 8 Mar ?8 02:16 zhang.sh -> guess.sh //該文件是軟鏈接文件,且實際內容為/root/work/guess.h 即只是一個路徑名,文件符號位l,且指向索引結點的指針為1,如果是硬鏈接文件,一定大于1. ?但是執行bash zhang.sh的效果跟bash guess.h一樣。 且原文件刪除,該鏈接文件無效。字母l一定是軟鏈接文件。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # ln guess.sh ?zhang.sh ? 硬鏈接
# ls -l zhang.sh?
-rw-rwxr--+ 2 root root 558 Mar ?4 23:19 zhang.sh
# ls -l guess.sh?
-rw-rwxr--+ 2 root root 558 Mar ?4 23:19 guess.sh
可以看出兩個文件的屬性是一樣的,因此它們的地位都是平等的,其中任意一個文件被刪除對其它文件無影響。

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

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

相關文章

Linux中常用文件的含義

在Linux中配置了服務文件后,需要重啟該服務,配置信息才會生效。 /etc/passwd 保存了系統中所有用戶的信息,一旦用戶的登陸終端設置為/sbin/nologin,則不再允許登錄到系統 /etc/shadow與/etc/passwd均為用戶信息文件 /…

64. 最小路徑和

給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。 說明:每次只能向下或者向右移動一步。 示例: 輸入: [[1,3,1],[1,5,1],[4,2,1] ] 輸出: 7 解釋: 因為路徑 1→3→1→1→1 的總和最小。…

Linux本地yum源配置以及使用yum源安裝各種應用程序

將軟件包傳送到Linux中后,掛載,然后配置yum軟件倉庫,最后就可以使用yum來安裝相應的應用程序了。假設掛載目錄為/tmp/ruanjianbao,則下面說明配置本地yum倉庫的過程: (1)cd /etc/yum.repos.d/…

gcc與g++編譯器

首先在Linux(RHEL7.0)上安裝gcc:yum install gcc gcc-c -y 其中gcc-c是為了能夠編譯c源代碼,即g。 gcc為Linux C/C下重要的編譯環境,是GUN項目中符合ANSIC標準的編譯系統, gcc可以編譯C、C、Objective-C、Java、Fortran、Pascal…

【Leetcode | 49】230. 二叉搜索樹中第K小的元素

給定一個二叉搜索樹,編寫一個函數 kthSmallest 來查找其中第 k 個最小的元素。 說明: 你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜索樹元素個數。 示例 1: 輸入: root [3,1,4,null,2], k 1 3 / \ 1 4 \ 2 輸出: 1 示例 2: 輸入…

gcc編譯器的整個工作過程

gcc hello.c ./a.out 或者 gcc hello.c -o hello ./hello ./表示執行當前目錄下的可執行程序或腳本程序。 首先gcc需要調用預處理程序cpp,由它負責展開在源文件中定義的宏,并向其中插入“#include”語句所包含的內容;接著gcc會調用…

宏定義對調試代碼的作用

以如下代碼為例&#xff1a; //head.h #ifndef __HEAD_H__ #define __HEAD_H__#define NUM1 10 #define NUM2 20 #endif//sum.c #include <stdio.h> //直接在標準庫中查找 #include "head.h" //先在工作目錄中查找&#xff…

【第15章】多重繼承

1. 虛基類介紹 多繼承時很容易產生命名沖突&#xff0c;即使我們很小心地將所有類中的成員變量和成員函數都命名為不同的名字&#xff0c;命名沖突依然有可能發生&#xff0c;比如非常經典的菱形繼承層次。如下圖所示&#xff1a; 類A派生出類B和類C&#xff0c;類D繼承自類B和…

gcc編譯器與g++編譯器的區別

gcc與g編譯器的程序文件分別為&#xff1a;/usr/bin/g和/usr/bin/gcc。 gcc 和 GCC 是兩個不同的東西&#xff0c;GCC:GNU Compiler Collection(GUN 編譯器集合)&#xff0c;它可以編譯C、C、JAV、Fortran、Pascal、Object-C、Ada等語言。gcc是GCC中的GUN C Compiler&#xff0…

1. 排序算法

一、概述 假定在待排序的記錄序列中&#xff0c;存在多個具有相同的關鍵字的記錄&#xff0c;若經過排序&#xff0c;這些記錄的相對次序保持不變&#xff0c;即在原序列中&#xff0c;r[i]r[j]&#xff0c;且r[i]在r[j]之前&#xff0c;而在排序后的序列中&#xff0c;r[i]仍…

1036. 跟奧巴馬一起編程(15)

美國總統奧巴馬不僅呼吁所有人都學習編程&#xff0c;甚至以身作則編寫代碼&#xff0c;成為美國歷史上首位編寫計算機代碼的總統。2014年底&#xff0c;為慶祝“計算機科學教育周”正式啟動&#xff0c;奧巴馬編寫了很簡單的計算機代碼&#xff1a;在屏幕上畫一個正方形。現在…

庫文件與頭文件

首先說明庫文件與頭文件在gcc中的具體使用方法&#xff0c;然后說明兩者的區別與聯系。 庫文件即庫函數&#xff0c;如printf和scanf函數。以libgtdf.so庫文件為例&#xff08;庫文件在命名時都以lib開頭&#xff0c;因此使用-l選項去鏈接指定的庫文件時可以省略lib三個字母&am…

gcc的常用參數

-c 編譯成目標文件.o&#xff08;只編譯不鏈接&#xff09; gcc -c hello.s -o hello.o -o 指出輸出文件名&#xff0c;輸出文件名跟在-o后面。如果不使用這一選項&#xff0c;則缺省的輸出文件名為a.out。gcc hello.c -o hello.exe&#xff08;在Linux中該項后綴名無要求&a…

1027. 打印沙漏(20)

本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”&#xff0c;要求按下列格式打印 ************ *****所謂“沙漏形狀”&#xff0c;是指每行輸出奇數個符號&#xff1b;各行符號中心對齊&#xff1b;相鄰兩行符號數差2&#xff1b;符號數先從大到小順序遞減…

【C++ Priemr | 15】構造函數與拷貝控制

繼承的構造函數 1. 簡介&#xff1a; 子類為完成基類初始化&#xff0c;在C11之前&#xff0c;需要在初始化列表調用基類的構造函數&#xff0c;從而完成構造函數的傳遞。如果基類擁有多個構造函數&#xff0c;那么子類也需要實現多個與基類構造函數對應的構造函數。 class …

C命令行參數

C命令行參數的作用是在執行程序時&#xff0c;可以將命令行的參數傳值給C程序內部&#xff0c;這樣就可以從外部控制程序&#xff0c;而不是在代碼內對這些值進行硬編碼。命令行參數是使用main函數來處理的&#xff0c;argc是指參數的個數&#xff0c;為int類型&#xff1b;arg…

剖析數組名、函數名(不是指針常量,更不是指針)

對于一個數組&#xff0c;如 int a[4]; 如果只是給出數組名a&#xff0c;編譯器不知道該取該數組的第幾個元素&#xff0c;因此編譯器不會自動取值&#xff0c;而是返回該數組的首地址&#xff08;第一個元素的地址&#xff09;。其實&#xff0c;數組名a就是數組本身&#xf…

【C++ Priemr | 15】面向對象程序設計

類型準換與繼承 為了支持c的多態性&#xff0c;才用了動態綁定和靜態綁定。 需要理解四個名詞&#xff1a; 對象的靜態類型&#xff1a;對象在聲明時采用的類型&#xff0c;是在編譯期確定的。對象的動態類型&#xff1a;目前所指對象的類型&#xff0c;是在運行期決定的。對…

linux里source、. 、sh、bash、./有什么區別

轉載&#xff1a;https://www.cnblogs.com/pcat/p/5467188.html 1.source a.sh source可以簡寫為“.”&#xff0c;即. a.sh 注意中間有空格&#xff0c;在當前shell內去讀取、執行a.sh&#xff0c;而a.sh不需要有"執行權限"。 2.sh a.sh 和 bash a.sh 都是打開…

【C++ Priemr | 15】虛函數表剖析(三)

一、虛擬菱形繼承 #include <iostream> using namespace std;class B { public:int _b; };class C1 :virtual public B { public:int _c1; };class C2 :virtual public B { public:int _c2; };class D :public C1, public C2 { public:int _d; };int main() {cout <&…