Linux学习之文件系统操作与磁盘管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42415326/article/details/91041951

一、基本操作

1 查看磁盘和目录的容量

使用 df 命令查看磁盘的容量,格式:df

实际物理主机上的 /dev/sda2 是对应着主机硬盘的分区,后面的数字表示分区号,数字前面的字母 a 表示第几块硬盘(也可能是可移动磁盘),你如果主机上有多块硬盘则可能还会出现 /dev/sdb,/dev/sdc 这些磁盘设备都会在 /dev 目录下以文件的存在形式。

"1k-块"表示以磁盘块大小的方式显示容量,后面为相应的以块大小表示的已用和可用容量,-h 参数以看得懂的方式展示:

使用 du 命令查看目录的容量,格式为 du

# 默认同样以 块 的大小展示
$ du 
# 加上`-h`参数,以更易读的方式展示
$ du -h

-d参数指定查看目录的深度:

# 只查看1级目录的信息
$ du -h -d 0 ~
# 查看2级
$ du -h -d 1 ~
du -h #同--human-readable 以K,M,G为单位,提高信息的可读性。
du -a #同--all 显示目录中所有文件的大小。
du -s #同--summarize 仅显示总计,只列出最后加总的值。

二、简单的磁盘管理

下面涉及的命令具有一定的危险性,操作不当可能会丢失你的个人数据,初学者建议在虚拟环境中进行操作,所以我们创建一个虚拟磁盘然后进行磁盘的管理

dd命令用于转换和复制文件,不过它的复制不同于cpdd的命令行语句与其他的 Linux 程序不同,因为它的命令行选项格式为选项=值,而不是更标准的--选项 值-选项=值dd默认从标准输入中读取,并写入到标准输出中,但可以用选项if(input file,输入文件)和of(output file,输出文件)改变。

# 输出到文件
$ dd of=test bs=10 count=1 # 或者 dd if=/dev/stdin of=test bs=10 count=1
# 输出到标准输出
$ dd if=/dev/stdin of=/dev/stdout bs=10 count=1
# 注
在打完了这个命令后,继续在终端打字,作为你的输入

上述命令从标准输入设备读入用户输入(缺省值,所以可省略)然后输出到 test 文件,bs(block size)用于指定块大小(缺省单位为 Byte,也可为其指定如'K','M','G'等单位),count用于指定块数量。conv参数将输出的英文字符转换为大写

  • 使用 dd 命令创建虚拟镜像文件

/dev/zero设备创建一个容量为 256M 的空镜像文件:

#创建空文件
$ dd if=/dev/zero of=virtual.img bs=1M count=256
#查看
$ du -h virtual.img

接下来将这个文件格式化(即写入文件系统)

  • 使用 mkfs 命令格式化磁盘

在命令行输入 sudo mkfs 然后按下Tab键,可以看到很多个以 mkfs 为前缀的命令,不同的后缀分别表示着可以用 mkfs 格式化成的文件系统。

比如将我们的虚拟磁盘镜像格式化为ext4文件系统:

$ sudo mkfs.ext4 virtual.img

输出如下:

可以看到实际 mkfs.ext4 是使用 mke2fs 来完成格式化工作的。 

如果你想知道 Linux 支持哪些文件系统你可以输入ls -l /lib/modules/$(uname -r)/kernel/fs(我们的环境中无法查看)查看。

  • 使用 mount 命令挂载磁盘到目录树

用户在 Linux/UNIX 的机器上打开一个文件以前,包含该文件的文件系统必须先进行挂载的动作,此时用户要对该文件系统执行 mount 的指令以进行挂载。因为 Linux/UNIX 文件系统可以对应一个文件而不一定要是硬件设备,所以可以挂载一个包含文件系统的文件到目录树。

mount命令的一般格式如下:mount [options] [source] [directory]

mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点]

举个例子,直接来挂载我们创建的虚拟磁盘镜像到/mnt目录:

$ mount -o loop -t ext4 virtual.img /mnt 
# 也可以省略挂载类型,很多时候 mount 会自动识别

# 以只读方式挂载
$ mount -o loop --ro virtual.img /mnt
# 或者mount -o loop,ro virtual.img /mnt
  • 使用 umount 命令卸载已挂载磁盘

命令格式为: sudo umount 已挂载设备名或者挂载点,比如:

$ sudo umount /mnt

挂载时可能会因为没有添加对 Loop device的支持导致挂载不成功,那什么是loop设备呢?

在类 UNIX 系统中,/dev/loop(或称vnd (vnode disk)、lofi(循环文件接口))是一种伪设备,这种设备使得文件可以如同块设备一般被访问。

在使用之前,循环设备必须与现存文件系统上的文件相关联。这种关联将提供给用户一个应用程序接口,接口将允许文件视为块特殊文件(参见设备文件系统)使用。因此,如果文件中包含一个完整的文件系统,那么这个文件就能如同磁盘设备一般被挂载。

这种设备文件经常被用于光盘或是磁盘镜像。通过循环挂载来挂载包含文件系统的文件,便使处在这个文件系统中的文件得以被访问。这些文件将出现在挂载点目录。如果挂载目录中本身有文件,这些文件在挂载后将被禁止使用。

  • 使用 fdisk 为磁盘分区
# 查看硬盘分区表信息
$ sudo fdisk -l

输出如下: 

输出结果中开头显示了我主机上的磁盘的一些信息,包括容量扇区数,扇区大小,I/O 大小等信息。

/dev/sda1,/dev/sda2 为主分区分别安装了 Windows 和 Linux 操作系统,/dev/sda3 为交换分区(可以理解为虚拟内存),/dev/sda4 为扩展分区其中包含 /dev/sda5,/dev/sda6,/dev/sda7,/dev/sda8 四个逻辑分区,因为主机上有几个分区之间有空隙,没有对齐边界扇区,所以分区之间不是完全连续的。

# 进入磁盘分区模式
$ sudo fdisk virtual.img

在进行操作前我们首先应先规划好我们的分区方案,这里我将在使用 128M(可用 127M 左右)的虚拟磁盘镜像创建一个 30M 的主分区和扩展分区为2 个大约 45M 的逻辑分区。通过以下命令进行分区:

操作完成后输入p查看结果如下:

  • 使用 losetup 命令建立镜像与回环设备的关联
$ sudo losetup /dev/loop0 virtual.img
# 如果提示设备忙你也可以使用其它的回环设备,"ls /dev/loop*"参看所有回环设备

# 解除设备关联
$ sudo losetup -d /dev/loop0

再使用 mkfs格式化各分区(前面我们是格式化整个虚拟磁盘镜像文件或磁盘),不过格式化之前,我们还要为各分区建立虚拟设备的映射,用到kpartx工具,需要先安装:

$ sudo apt-get install kpartx
$ sudo kpartx -av /dev/loop0

# 取消映射
$ sudo kpartx -dv /dev/loop0

接着再是格式化,我们将其全部格式化为 ext4:

$ sudo mkfs.ext4 -q /dev/mapper/loop0p1
$ sudo mkfs.ext4 -q /dev/mapper/loop0p5
$ sudo mkfs.ext4 -q /dev/mapper/loop0p6

格式化完成后在/media目录下新建四个空目录用于挂载虚拟磁盘:

$ mkdir -p /media/virtualdisk_{1..3}
# 挂载磁盘分区
$ sudo mount /dev/mapper/loop0p1 /media/virtualdisk_1
$ sudo mount /dev/mapper/loop0p5 /media/virtualdisk_2
$ sudo mount /dev/mapper/loop0p6 /media/virtualdisk_3

然后:

$ df -h

输出如下:

游戏一下

cowsay命令,可以让你在终端里以一种动物说话的形式打印出一段话。下面是这个命令相关的操作:

# 更新软件包
$ sudo apt update

# 安装
$ sudo apt install -y cowsay

# 默认是一只牛
$ cowsay hello shiyanlou

# 加上'-l'参数打印所有支持的动物(其实不只是动物)种类
$ cowsay -l

# 使用'-f'参数选择动物种类
$ cowsay -f elephant hello shiyanlou

# 安装 fortune-zh
$ sudo apt-get install fortune-zh

# 此外它还可以结合我们之前的作业讲过的 fortune 命令一起使用
$ /usr/games/fortune | cowsay -f daemon

此处输入图片的描述

写在最后,欢迎关注一个跨行学python 3年的微信公众号:大众学python,掏出手机扫一扫:

猜你喜欢

转载自blog.csdn.net/qq_42415326/article/details/91041951