- 学习视频来自于B站【小白入门 通俗易懂】2021韩顺平 一周学会Linux。
- 可能会用到的资料有如下所示,下载链接见文末:
- 《鸟哥的Linux私房菜 基础学习篇 第四版》1
- 《鸟哥的Linux私房菜 服务器架设篇 第三版》2
- 《韩顺平_2021图解Linux全面升级》3
为了将实际的物理硬盘分区空间和Linux系统中的目录联系起来,Linux系统采用了一种叫“挂载”的处理方法。第四章介绍到,整个Linux目录就像一个向上生长的大树,根目录是“起点”,下级目录就是开枝散叶的枝杈,这其中任何一个目录都可以“挂载”新的硬盘空间。所谓 “挂载”就是将一个硬盘分区和一个目录联系起来,于是在系统上进入某个目录就相当于访问到该磁盘分区。对于Linux来说,无论有几个分区、分给哪个目录使用,它归根结底就只有一个根目录,是一个独立且唯一的文件结构。Linux中每个分区都是用来组成整个文件系统的一部分。
如上图所示,给出了Linux“挂载”的示意图:现在存在一块物理硬盘且分为3个分区,这3个分区就分别挂载到了相应的Linux目录下,以保证系统的正常工作。这种“挂载”关系非常灵活,可以任意的“挂载”和“卸载”;而不像Windows中“目录”和“磁盘空间”牢牢绑定在一起,不能在Windows自带的“磁盘管理”中任意的更改映射关系。
那如何查看系统挂载的情况呢?——指令lsblk
(12.1.3节还会介绍)
[root@CentOS76 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17G 0 part /
sr0 11:0 1 1024M 0 rom
如上所示,sda
是一块20G的硬盘,包含3个分区sda1
、sda2
、sda3
。其中,1G的sda1
挂载到/boot
目录下,2G的sda2
挂载到交换分区swap
,17G的sda3
挂载到根目录/
下,sr0
是光驱,简单了解一下即可。这个映射关系正如上图12-1所示,当然若后期空间不足,还可以将一块新的硬盘进行分区再挂载到Linux目录下。
Linux硬盘主要分为IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘:
SCSI硬盘:驱动器标识符为“sdx~”。
- “sd”:表示分区所在设备的类型,“sd”是SCSI硬盘。
- “x”:表示盘号(a,b,c,d,…)。a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘。
- “~”:表示分区。数字1到4表示主分区或扩展分区,从5开始就是逻辑分区。
IDE硬盘:驱动器标识符为“hdx~”。
- “hd”:表示是IDE硬盘。
- 其他内容同上。
举例:
sda3
表示为第一个SCSI硬盘上的第三个主分区或扩展分区。sdb2
表示为第二个SCSI硬盘上的第二个主分区或扩展分区。
Linux磁盘命名(盘号)采用26进制,比如sda
表示的就是第一个SCSI硬盘,sdb
就是第二个SCSI硬盘,…,sdaa
就是第27个SCSI硬盘,所以Linux系统可挂载硬盘的数量没有限制。但是Windows系统默认支持的最大盘符数量是26个,如果已经挂载的盘符数量超过26个,就会出现盘符不够用的情况。下面是可能的解决方法:
- 使用
subst
命令将一个盘符映射到另一个盘符。- 使用
Diskpart
软件将一个盘符更改为另一个盘符。参考文章“26个磁盘盘符,这个命令一键搞定!”。
参考知乎提问“Windows 系统最多可以拥有几个盘符?”。
并且,Windows的磁盘空间管理方式是通过使用磁盘清理工具来清除不需要的文件,或者在磁盘已满的情况下使用磁盘碎片整理工具来释放空间。这种方式可能会导致磁盘空间的浪费,因为磁盘清理工具只能清除已知的临时文件和一些系统文件,而不能识别用户自己创建的文件。而Linux则使用“超级块”来管理磁盘空间。每个文件系统都有一个超级块,它包含了文件系统的元数据和关键信息。这使得Linux可以更有效地管理磁盘空间,因为它可以检测并清除不需要的文件,而不需要用户手动执行这些操作。这也就可以理解为什么Linux系统无需“刷新”这个操作了。
进一步可以查看“Windows空间和Linux空间的最大的区别是什么?”。
lsblk
# 基本语法-lsblk
lsblk [选项] [<设备> ...]
# 常用选项-lsblk
-f 查看块设备的文件系统类型及UUID
-a 列表所有块设备
-h 查看中文帮助信息
关于lsblk
的更多介绍可以查看知乎文章“【运维必看】Linux命令之lsblk命令”。下面展示其应用实例:
[root@CentOS76 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17G 0 part /
sr0 11:0 1 1024M 0 rom
[root@CentOS76 ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 2e1b1edd-64e9-43f0-9362-138e2bd6adc5 /boot
├─sda2 swap 7e2d03c3-f47a-4721-b29d-1a7b9170fe61 [SWAP]
└─sda3 ext4 43bc1b00-e520-4cfb-8c4b-8f0afbde5dbe /
sr0
上面lsblk -f
显示的内容:【第一列】是分区情况;【第二列】是文件系统类型;【第三列】是每个分区的40位唯一标识符;【第四列】就是该分区的挂载点。
下面以增加一块硬盘为例来熟悉下磁盘的相关指令和深入理解磁盘分区、挂载、卸载的概念。比如我们现在想在根目录/
下创建一个新的目录newdisk
,并将一块新硬盘sdb
的第一个分区挂载到newdisk
上。具体的步骤可以查看我的博文“辅助笔记-linux新增硬盘”,大致的步骤描述如下:
- 虚拟机添加硬盘
- 分区——
fdisk
- 格式化——
mkfs
- 挂载——
mount
- 设置永久挂载——
修改 /etc/fstab
在Linux使用过程中,会不停的向磁盘空间中写数据,此时磁盘空间会越来越小。作为Linux使用者就需要时刻关注磁盘空间使用情况,当空间不足时应及时添加新的硬盘或分区,以保证系统正常运行。下面就介绍Linux下常用的磁盘情况查询指令。
df
Linux下查询系统整体磁盘使用情况的指令是df -h
,基本语法为:
# 基本指令-df
df [选项]... [文件]... # 显示磁盘文件系统信息
# 常用选项
--help 查看中文帮助文档
-h 以人类习惯显示磁盘空间
若磁盘使用空间达到80%以上,就需要清理磁盘空间或添加新的磁盘了。下面展示一个应用案例:
# 【案例1】查询系统整体磁盘使用情况。
[root@CentOS76 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 13M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda3 17G 5.2G 11G 33% /
/dev/sdb1 991M 2.6M 922M 1% /newdisk
/dev/sda1 976M 178M 732M 20% /boot
tmpfs 797M 12K 797M 1% /run/user/42
tmpfs 797M 0 797M 0% /run/user/0
du
# 基本语法-du
du -h [目录] # 查询指定目录的磁盘占用情况,默认为当前目录
# 常用选项-du
-s 指定目录占用大小汇总
-h 按照人类习惯显示计量单位
-a 含文件
-c 列出明细的同时,增加汇总值
--max-depth=1 子目录深度为1
下面展示一个应用案例:
# 【案例1】查询/opt目录的磁盘占用情况,深度为1。
# 首先看看/opt里面都有啥
[root@CentOS76 ~]# ls /opt
rh VMwareTools-10.3.25-20206839.tar.gz vmware-tools-distrib 杂文.txt
# 演示-h:只显示一级目录的大小
[root@CentOS76 ~]# du -h --max-depth=1 /opt
155M /opt/vmware-tools-distrib
4.0K /opt/rh
210M /opt
# 演示-ha:将目录及文件都列出来了
[root@CentOS76 ~]# du -ha --max-depth=1 /opt
155M /opt/vmware-tools-distrib
3.5M /opt/杂文.txt
4.0K /opt/rh
52M /opt/VMwareTools-10.3.25-20206839.tar.gz
210M /opt
# 演示-hac:就多了最后一行
[root@CentOS76 ~]# du -hac --max-depth=1 /opt
155M /opt/vmware-tools-distrib
3.5M /opt/杂文.txt
4.0K /opt/rh
52M /opt/VMwareTools-10.3.25-20206839.tar.gz
210M /opt
210M 总用量
wc
、tree
下面展示五个应用案例:
- 提示:统计指令
wc
参数依次统计-l
行数、-c
字节数、-m
字符数、-w
单次数。- 提示:显示指令
ls
的-R
选项可以递归的显示所有的该目录及其子目录下所有的文件。- 提示:Linux默认不安装
tree
指令,安装指令yum install tree
。
# 【案例1】统计/opt文件夹下文件的个数。
[root@CentOS76 ~]# ll /opt
总用量 56360
drwxr-xr-x. 2 root root 4096 10月 31 2018 rh
-rw-------. 1 root root 54056661 7月 31 2022 VMwareTools-10.3.25-20206839.tar.gz
drwxr-xr-x. 8 root root 4096 7月 31 2022 vmware-tools-distrib
-rw-r--r--. 1 root root 3642757 7月 23 16:24 杂文.txt
[root@CentOS76 ~]# ll /opt | grep "^-" # 只显示“杠-”开头的普通文件
-rw-------. 1 root root 54056661 7月 31 2022 VMwareTools-10.3.25-20206839.tar.gz
-rw-r--r--. 1 root root 3642757 7月 23 16:24 杂文.txt
[root@CentOS76 ~]# ll /opt | grep "^-" | wc -l # 统计个数
2
# 【案例2】统计/opt文件夹下目录的个数。
[root@CentOS76 ~]# ll /opt | grep "^d" | wc -l
2
# 【案例3】统计/opt文件夹下文件的个数,包括子文件夹里的。
[root@CentOS76 ~]# ll -R /opt | grep "^-" | wc -l
1462
# 【案例4】统计/opt文件夹下目录的个数,包括子文件夹里的。
[root@CentOS76 ~]# ll -R /opt | grep "^d" | wc -l
480
# 【案例5】以树状显示/opt目录的前两级结构。
[root@CentOS76 ~]# tree /opt
bash: tree: 未找到命令...
[root@CentOS76 ~]# yum install tree
##################################
# 按照提示安装就行。
##################################
[root@CentOS76 ~]# tree -L 2 /opt # 只显示前两级目录统计
/opt
├── rh
├── VMwareTools-10.3.25-20206839.tar.gz
├── vmware-tools-distrib
│ ├── bin
│ ├── doc
│ ├── etc
│ ├── FILES
│ ├── INSTALL -> ./doc/INSTALL
│ ├── installer
│ ├── lib
│ ├── vgauth
│ └── vmware-install.pl -> ./bin/vmware-uninstall-tools.pl
└── \346\235\202\346\226\207.txt
8 directories, 5 files
《鸟哥的Linux私房菜 基础学习篇 第四版》 ↩︎
《鸟哥的Linux私房菜 服务器架设篇 第三版》 ↩︎
《韩顺平_2021图解Linux全面升级》 ↩︎