1. 程式人生 > >Linux 學習之路(十):磁碟及檔案系統管理

Linux 學習之路(十):磁碟及檔案系統管理

磁碟及檔案系統管理

檔案系統訪問控制列表

setfacl

​ -b Remove all

​ -m

​ -k

塊點陣圖:bitmap

硬連結:多個檔案的路徑指向同一個inode號

軟連結|符號連結:

該檔案被硬連結的次數
drwxr-xr-x.  4 root  root        88 9月   3 13:43 airflow

建立連結 ln [-s -v] SRC DEST

ls -i顯示檔案的inode號

硬連結(不帶任何選項):

​ 1.只能對檔案建立,不能應用於目錄;

​ 2.不能跨檔案系統;

​ 3.建立硬連結會增加檔案被硬連結的次數;

符號連結(-s):

​ 1.可應用於目錄

​ 2.可以跨檔案系統

​ 3.不會增加被連結檔案的連結次數

​ 4.其大小為指定的路徑所包含的字元個數

df:

​ 評估一個分割槽磁碟塊和inode的使用情況。

裝置檔案:

​ b:按塊為單位,隨機訪問的裝置

​ c:按字元為單位,線性裝置

​ b:硬碟

​ c:鍵盤

/dev/

​ 主裝置號(major number)

​ 標識裝置型別

​ 次裝置號(minor number)

​ 標識同一種類型下不同裝置

主裝置號和次裝置號存在inode中,連結存的路徑

建立裝置檔案:

mknod

mknod [options] name {bc} major minor

​ -m MODE 指定許可權

mknod mydev c 23 0 在當前目錄下指定一個字元裝置mydev,主裝置號23,次裝置號0

ls -l檢視

crw-r--r--.  1 root  root     23, 0 10月 23 08:32 mydev
[[email protected] ~]# mknod -m 640 mydev2 c 23 1
crw-r-----.  1 root  root     23, 1 10月 23 08:34 mydev2

發往裝置檔案的內容指向對應裝置:

shell1:

[[email protected] ~]# tty
/dev/pts/0
[[email protected] ~]# echo "hello" >> /dev/pts/1

shell2:

[[email protected] ~]# tty
/dev/pts/1
[[email protected] ~]# hello

硬碟裝置的裝置檔名:

IDE.ATA:/dev/hd

SATA:sd

SCSI:sd

USB:sd

​ a,b,c…來區別同一種類型下的不同裝置

IDE:

​ 第一個IDE口:主、從

​ /dev/hda,/dev/hdb

​ 第二個IDE口:主、從

​ /dev/hdc,/dev/hdd

hda:

​ hda1:第一個主分割槽

​ hda2…hda4:要麼是擴充套件分割槽,要麼是主分割槽

​ hda5…第一個邏輯分割槽

檢視當前系統識別了幾塊硬碟

fdisk -l

[[email protected] ~]# fdisk -l

磁碟 /dev/sda:21.5 GB, 21474836480 位元組,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x000d6891
裝置 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM

管理磁碟分割槽

fdisk /dev/sda

​ p:顯示當前硬體的分割槽,包括沒儲存的改動

​ n:建立新分割槽

​ e:擴充套件分割槽

​ p:主分割槽

​ d:刪除一個分割槽

​ w:儲存並退出

​ q:不儲存退出

​ t:修改分割槽型別

​ L:

​ l:顯示所支援的分割槽型別

Linux 支援的檔案系統:

檔案系統是核心中的基本功能,管理檔案系統的軟體在使用者程序。

格式化:低階格式化建立磁軌

​ 高階格式化:mkfs -t ext3 建立檔案系統

VFS:Virtual File System 虛擬檔案系統

FAT32->vfat

光碟:ISO9660

網路檔案系統:CIFS

Linux:ext2,ext3,ext4,xfs,reiserfs,jfs(日誌檔案系統),nfs,ocfs2,gfs2,swap

VFS也是核心中,每一個分割槽使用不同的檔案系統。但都要歸併在根下,即掛載或關聯的方式。

只有根才可以自引用。

partprode

所有程序執行在使用者模式的使用者空間中。

ext3,ext4,ext2:extended

磁碟分割在建立時就已經預留起來了。

block size:1024(1k),2048,4096

bitmap:加快資料查詢的資料結構

​ inode bitmap

​ block bitmap

super block:超級塊,儲存磁碟塊中的塊組,以及塊組裡有多少東西

塊組描述符表

每一個塊組都有自己的inode和bitmap

MBR不屬於任何一個分割槽,Boot Block每一個分割槽第一個塊,裝Boot Loader.

而Boot Loader屬於一個程式,放在MBR中。

Block Group 0塊組0

每個組裡面有一個超級塊:Super Block,有備份,也可以手動恢復

GDT:Group Description Table 塊組描述表:當前分割槽上每一個塊組名,塊組起始以及結束號。

逐級引用磁碟塊

一個磁碟塊指向一個檔案,但是可以有多個路徑,這些路徑叫做硬連結。

ext3 <- ext2

​ journal file system

​ 日誌檔案系統

資料區,元資料區,日誌區

資料存完後,把檔案從日誌區挪到元資料區,要多用一次io操作。

ext3:加快檔案系統修復速度。

讀分割槽表:

cat /proc/partitons

partprobe [/dev/sda]->partx

檔案系統管理

重新建立檔案系統會損壞原有檔案。

我建立了一個新的分割槽,大概有1個G
在這裡插入圖片描述

在這裡插入圖片描述

可以看到我剛才建立的擴充套件分割槽。

建立某一個分割槽上的檔案系統:

mkfs:make file system

​ -t FSTYPE 指定要建立的分割槽

mkfs -t ext2 = mkfs.ext2

mkfs -t ext3 = mkfs.ext3

cat /proc/filesystems:檢視當前核心所支援的檔案系統型別

檔案系統型別:

​ ext2

​ ext3

專門管理ext系列檔案:

mke2fs

​ -j:建立ext3型別檔案系統

​ -b BLOCK_SIZE:指定塊大小,預設為4096,可用取值為1024、2048或4096

​ -L LABEL:指定分割槽卷標(Filesystem label)

​ -m #:指定預留給超級使用者的塊數百分比

​ -i #:用於指定為多少位元組的空間建立一個inode,預設為8192,這裡給出的數值應該為塊大小的2^n.

​ -N #:指定inode個數

​ -F :強制建立檔案系統

​ -E : 用於指定額外檔案系統屬性

blkid :查詢或檢視磁碟裝置的相關屬性

​ UUID:全域性統一的識別符號

​ TYPE

​ LABEL 卷標

e2label:用於檢視或定義卷標

​ e2label 裝置檔案 卷標: 設定卷標

tune2fs:調整檔案系統的相關屬性

​ -j:不損害原有資料,將ext2升級為ext3

​ -L LABEL:設定或修改卷標

​ -m #:調整預留百分比;

​ -r #:指定預留塊數

​ -o:設定預設掛載選項

facl

​ -c #:指定掛載次數達到#次之後進行自檢,0/-1表示關閉功能。

​ -i #:每掛載使用多少天后進行自檢,0/-1表示關閉此功能

​ -l:顯示超級塊中的資訊

dumpe2fs:顯示檔案屬性資訊

​ -h:只顯示超級塊中的資訊

fsck:檢查並修復Linux檔案系統

​ -t FSTYPE:指定檔案系統型別

​ -a:自動修復

e2fsck:專用於修復ext2/ext3檔案系統

​ -f:強制檢查

​ -p:自動修復

掛載:將新的檔案系統關聯至當前根檔案系統

解除安裝:將某檔案系統從當前根檔案系統的關聯關係予以移除

mount:掛載

mount 裝置 掛載點

​ 裝置:

​ 裝置檔案 /dev/sda5

​ 卷標:LABEL=“ ”

​ UUID: UUID=" "

​ 掛載點:目錄

​ 要求:

​ 1.此目錄沒有被其他程序使用

​ 2.目錄得事先存在

​ 3.目錄中得原有得檔案將會暫時隱藏

掛載完成後,要通過掛載點訪問對應檔案系統上的檔案

media 掛載移動裝置

mount /dev/sda5 /mnt/test/

umount:解除安裝某檔案系統

​ umount 裝置

​ umount 掛載點

​ 解除安裝注意事項:

​ 掛載的裝置沒有程序使用

mount 顯示當前系統上已掛載裝置

mount \[options] \[-o options] DEVICE MOUNT_POINT


    -a:表示掛載/etc/fstab檔案中定義的所有檔案系統

​	-n:預設情況下,mount命令每掛載一個裝置,都會把掛載的裝置資訊儲存至/etc/mtab檔案,使用-n選項意味著掛載裝置時,不把資訊寫入此檔案。

​	-t:FSTYPE:指定正在掛載裝置上的檔案系統型別,不使用此選項,mount 會呼叫blkid命令獲取對應檔案系統的型別。

​	-r:只讀掛載,掛載光碟時常用此選項

​	-w:讀寫掛載

​	-o:指定額外的掛載選項,也即指定檔案系統啟用的屬性

​		remount : 重新掛載當前檔案系統

​		ro:掛載為只讀

​		rw:讀寫掛載

非同步:資料先在記憶體中編輯,然後再寫入硬碟中。

suid是一種不安全的做法

重新掛載時不用指定掛載點,重新掛載在原來的位置

[[email protected] ~]# mount -t auto /dev/cdrom /mnt/cdrom
mount: 掛載點 /mnt/cdrom 不存在
[[email protected] ~]# mkdir /mnt/cdrom
[[email protected] ~]# mount -t auto /dev/cdrom /mnt/cdrom
mount: /dev/sr0 防寫,將以只讀方式掛載
[[email protected] ~]# unmount /mnt/cdrom
bash: unmount: 未找到命令...
[[email protected] ~]# umount /mnt/cdrom
[[email protected] ~]# mount -t auto /dev/cdrom /mnt/cdrom
mount: /dev/sr0 防寫,將以只讀方式掛載
[[email protected] ~]# ls /mnt/cdrom
CentOS_BuildTag  EFI  EULA  GPL  images  isolinux  LiveOS  Packages  repodata  RPM-GPG-KEY-CentOS-7  RPM-GPG-KEY-CentOS-Testing-7  TRANS.TBL

swap分割槽

free 檢視當前系統上實體記憶體和交換空間的使用情況

​ -m

fdisk命令中,調整分割槽型別為82

建立交換分割槽:

mkswap /dev/sda8

​ -L LABEL

swapon /dev/sda8 啟用交換分割槽

swapoff /dev/sda8 關閉交換分割槽

迴環裝置

loopback,使用軟體來模擬實現硬體

建立一個映象檔案,120G

dd命令:

​ if=資料來源

​ of=資料儲存目標

​ bs=1

​ count=2

​ seek=# : 建立資料檔案時,跳過的空間大小

建立一個大小為1024(1G)的映象檔案,裡面填滿了0

dd if=/dev/zero of=/var/swapfile bs=1M count=1024

cp以檔案為單位,dd複製的是底層資料流

x86:(32bit)虛擬地址、線性地址

虛擬記憶體:

timesharing\multiplex

CPU:time slice

Memory

I/O裝置:多路複用

過載:overcommit記憶體過載使用

mount命令,可以掛載iso映象

mount DEVICE MOUNT_POINT

​ -o loop:掛載本地迴環裝置

wget ftp://172.16.0.1/pub/isos/rhci-5.8-1.iso

swapon -a啟用所有的定義在/etc/fstab檔案中的交換裝置

mount /dev/sda5 /mnt/test

檔案系統的配置檔案/etc/fstab

​ os在初始時,會自動掛載此檔案中定義的每個檔案系統。

要掛載的裝置 掛載點 檔案系統型別 掛載選項 轉儲頻率 檔案系統檢測次序

/dev/mapper/cl-root     /           xfs     defaults        0 0

轉儲頻率表示每隔多少天對檔案系統做一次完全備份,控制系統自動備份的機制。

檔案系統檢測次序,只有根可以為1

mount -a:掛載/etc/fstab檔案中定義的所有檔案系統

/etc/mtab:掛載的資訊不想寫在mtab.那麼使用mount -n

fuser:驗證程序正在使用的檔案或套接字檔案

​ -v:檢視某檔案上正在執行的程序

fuser -km /mnt/test 終止正在訪問此掛載點的所有程序。

壓縮、解壓縮命令

壓縮格式:gz,bz2,xz,zip,Z

壓縮演算法不同,壓縮比(壓縮後的大小-壓縮前的大小/壓縮前的大小)可能也會不同。

compress:FILENAME.Z

uncompress

只能壓縮檔案,預設會刪除原檔案保留壓縮後文件:

gzip: .gz

gzip /PATH/TO/SOMEFILE

	-d:表示解壓縮

	-#:1-9,指定壓縮比,預設是6

gunzip:

gunzip /PATH/TO/SOMEFILE.gz:解壓完成後會刪除原檔案

zcat /PATH/TO/SOMEFILE.gz:不解壓的情況,檢視文字檔案內容

比gzip有著更大壓縮比的壓縮工具,使用格式近似

bzip2: .bz2

bzip2 /PATH/TO/SOMEFILE

-d

-#:1-9,預設是6

-k:壓縮時保留原檔案

bunzip2 /PATH/TO/SOMEFILE.bz2

bzcat

xz: .xz

xz /PATH/TO/SOMEFILE

	-d

	-#:1-9,預設是6

	-k:壓縮時保留原檔案

unxz

xzdec

xzcat

xz,bz2,gz

zip:

zip FILENAME.zip FILE1 FILE2 ...:壓縮後不刪除原檔案

unzip FILENAME.zip

archive:歸檔,歸檔本身並不意味著壓縮

tar:歸檔工具

-c:建立歸檔檔案

-f FILE.tar:操作的歸檔檔案

-x:展開歸檔檔案

--xattrs:歸檔時,保留檔案的擴充套件屬性資訊

-t:不展開歸檔,直接檢視歸檔了哪些檔案



-zcf:歸檔並呼叫gzip壓縮

-zxf:呼叫gzip解壓縮並展開歸檔



-jcf、-jxf:bzip2

-Jcf、-Jxf:xz

歸檔所有以test開頭的檔案
tar -cf test.tar test*.txt
展開歸檔檔案
tar -xf test.tar

cpio:歸檔工具

練習:寫一個指令碼

從鍵盤讓使用者輸入幾個檔案,指令碼能夠將此幾個檔案歸檔壓縮成一個檔案。

read:

#!/bin/bash
echo -n "Input two integers:"
read A B 
echo "$A plus $B is: $[$A+$B]"
[[email protected] ~]# cd jiaoben
[[email protected] jiaoben]# ./plus.sh
Input two integers:3 5
3 plus 5 is: 8

#myar.sh
#!/bin/bash
read -p "Three files: " FILE1 FILE2 FILE3
read -p "Destination: " DEST

tar -jcf ${DEST}.tar.bz2 $FILE1 $FILE2 $FILE3
#shell
[[email protected] jiaoben]# ./myar.sh
Three files: test/test1.txt test/test2.txt test/test3.txt
Destination: test/myartest
[[email protected] jiaoben]# ls test -ln
總用量 4
-rw-r--r--. 1 0 0 140 10月 25 16:20 myartest.tar.bz2
-rw-r--r--. 1 0 0   0 10月 25 16:18 test1.txt
-rw-r--r--. 1 0 0   0 10月 25 16:18 test2.txt
-rw-r--r--. 1 0 0   0 10月 25 16:18 test3.txt
[[email protected] jiaoben]# ls test -lh
總用量 4.0K
-rw-r--r--. 1 root root 140 10月 25 16:20 myartest.tar.bz2
-rw-r--r--. 1 root root   0 10月 25 16:18 test1.txt
-rw-r--r--. 1 root root   0 10月 25 16:18 test2.txt
-rw-r--r--. 1 root root   0 10月 25 16:18 test3.txt
[[email protected] jiaoben]# tar -tf myartest.tar.bz2
tar: myartest.tar.bz2:無法 open: 沒有那個檔案或目錄
tar: Error is not recoverable: exiting now
[[email protected] jiaoben]# tar -tf test/myartest.tar.bz2
test/test1.txt
test/test2.txt
test/test3.txt

指定壓縮格式版本的指令碼myar.sh:

#!/bin/bash
read -p "Three files: " FILE1 FILE2 FILE3
read -p "Destination: " DEST
read -p "Compress[gzip|bzip2|xz]:" COMP
case $COMP in
gzip)   
        tar -zcf ${DEST}.tar.gz $FILE1 $FILE2 $FILE3 ;;
bzip2)   
        tar -jcf ${DEST}.tar.bz2 $FILE1 $FILE2 $FILE3 ;;
xz)
        tar -cf ${DEST}.tar $FILE1 $FILE2 $FILE3
        xz ${DEST}.tar ;;
*)                
        echo "Unknoen."
        exit 9 ;;