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
#!/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 ;;