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
[root@localhost ~]# mknod -m 640 mydev2 c 23 1
crw-r-----.  1 root  root     23, 1 10月 23 08:34 mydev2

发往设备文件的内容指向对应设备:

shell1:

[root@localhost ~]# tty
/dev/pts/0
[root@localhost ~]# echo "hello" >> /dev/pts/1

shell2:

[root@localhost ~]# tty
/dev/pts/1
[root@localhost ~]# 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

[root@localhost ~]# 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是一种不安全的做法

重新挂载时不用指定挂载点,重新挂载在原来的位置

[root@localhost ~]# mount -t auto /dev/cdrom /mnt/cdrom
mount: 挂载点 /mnt/cdrom 不存在
[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# mount -t auto /dev/cdrom /mnt/cdrom
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# unmount /mnt/cdrom
bash: unmount: 未找到命令...
[root@localhost ~]# umount /mnt/cdrom
[root@localhost ~]# mount -t auto /dev/cdrom /mnt/cdrom
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# 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]"
[root@localhost ~]# cd jiaoben
[root@localhost 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
[root@localhost jiaoben]# ./myar.sh
Three files: test/test1.txt test/test2.txt test/test3.txt
Destination: test/myartest
[root@localhost 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
[root@localhost 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
[root@localhost jiaoben]# tar -tf myartest.tar.bz2
tar: myartest.tar.bz2:无法 open: 没有那个文件或目录
tar: Error is not recoverable: exiting now
[root@localhost 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 ;;

猜你喜欢

转载自blog.csdn.net/nicezheng_1995/article/details/83344833