文件系統層次化標準(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
可以看出兩個文件的屬性是一樣的,因此它們的地位都是平等的,其中任意一個文件被刪除對其它文件無影響。