目录
内存和磁盘使用率查看
内存使用率查看
free:显示系统内存使用情况,包括物理内存,交换分区。
参数-h:以人类可读的单位显示数字,而不是字节。
参数-m:将单位显示为MB.
输出字段含义
total | 显示物理安装的内存总量 |
used | 已经使用的 |
free | 未被使用的 |
shared | 多个进程可以共享的内存 |
buff/cache | 内核缓冲区使用的内存和界面缓存使用的内存 |
availale | 剩余内存。剩余内存=free+buff/cache |
top
top命令之前在进程管理讲述过,这里不过多赘述
磁盘使用率查看
df:用于显示文件系统(=磁盘分区或挂载点)上的磁盘使用情况
du:估算文件和目录所占用的磁盘空间。
常用参数
选项 | 全称 | 作用 | 示例与场景 |
---|---|---|---|
-h | --human-readable | 最常用。以易读的单位(K, M, G)显示大小。 | du -h ~/Downloads |
-s | --summarize | 汇总。只显示指定目录的总大小,不显示其内部子目录的详情。 | du -sh /var/log |
-c | --total | 总计。在最后显示所有参数的总大小。常与 -s 连用。 | du -sch /home/* |
-a | --all | 显示所有文件。默认 du 只显示目录的大小,此选项会同时显示每个文件的大小。 | du -ah /tmp |
--max-depth=N | 控制遍历深度。只深入到第 N 层目录。-s 等同于 --max-depth=0 。 | du -h --max-depth=1 /usr | |
-x | --one-file-system | 不跨越文件系统。忽略其他挂载点(如 /mnt , /boot ),只统计当前文件系统。 | du -shx / |
--exclude=PATTERN | 排除符合模式的文件或目录。 | du -sh --exclude='*.log' /var | |
-t SIZE | --threshold=SIZE | 阈值。只显示大于指定大小的条目。 | du -ah -t 100M / (找大于100M的文件) |
-d N | 同 --max-depth=N 。 | du -d 1 -h /opt | |
--time | 显示文件或目录的最后修改时间。 | du -ha --time /tmp |
du与ls区别
特性 | ls 命令 | du 命令 |
---|---|---|
测量对象 | 文件内容本身的逻辑大小(“文件有多长”) | 文件内容在磁盘上占用的物理块空间(“在硬盘上占了多大地方”) |
默认行为 | 列出目录下的文件和子目录名称 | 计算目录及其所有子目录的磁盘使用总和 |
显示单位 | 字节(Byte) | 磁盘块(Block,通常为 4KB) |
关键选项 | -l (显示详情),-h (易读格式) | -s (汇总),-h (易读格式),--apparent-size |
主要用途 | 浏览文件系统,查看文件列表、属性和大小 | 分析磁盘空间占用情况,找出大文件 |
ext4文件系统
ext4文件系统结构
超级块:是这个文件系统的总配置与信息中心。存储着整个文件系统的元数据。如果超级块损坏,整个文件系统将无法挂载,因此ext4有多个备份。
超级块副本:分布于不同磁盘位置的超级块冗余备份。
i节点(inode);记录着文件的元数据(文件权限,所有者,文件大小,时间戳,指向文件数据块的指针)。incode不存储文件名,文件名存储在目录文件中。
数据块(datablock):实际存储文件内容和目录条目的磁盘空间。块(Block):ext4 分配磁盘空间的基本单位(通常为 4KB)。即使文件只有 1 字节,也会占用一个完整的块。
目录:在 ext4 中,目录本身也是一种特殊的文件。它的数据块里不存储文件内容,而是存储一个列表,列表中的每一项都包含一个文件名和其对应的 inode 号码。
硬链接:多个不同的文件名指向同一个节点。删除任何一个链接都不会影响其他链接的存在,只有当最后一个指向该incode的链接被删除后,系统才会释放incode和磁盘数据块。
创建硬链接命令:
ln <源文件> <链接名称>
# 1. 创建源文件
echo "Hello, World!" > myfile.txt
# 2. 创建硬链接
ln myfile.txt my_hard_link.txt
# 3. 检查 inode (确认它们相同)
ls -i myfile.txt my_hard_link.txt
# 4. 检查链接计数 (确认是2)
ls -l myfile.txt my_hard_link.txt
# 5. 通过链接修改内容
echo "New content" >> my_hard_link.txt
cat myfile.txt # 会显示 "Hello, World!" 和 "New content"
# 6. 删除源文件,验证链接是否有效
rm myfile.txt
cat my_hard_link.txt # 内容依然可读
符号链接:是一个特殊的文件,包含的是另一个文件或目录的路径引用。有独立的incode,存储的是路径,可以跨文件系统
创建符号链接命令:
ln -s <目标文件或目录> <链接名称>
# 1. 创建绝对路径的符号链接
ln -s /absolute/path/to/target link_name
# 2. 创建相对路径的符号链接
# (相对路径是相对于链接文件所在目录的位置,而不是你当前所在的目录)
ln -s ../relative/path/to/target link_name
# 3. 强制覆盖已存在的链接文件
ln -sf /new/target existing_link_name
# 4. 查看符号链接指向的真实命令(常用于查看软件版本的链接)
readlink -f /usr/bin/python3
# 5. 查找当前目录下的所有符号链接
find . -type l
# 6. 查找所有损坏的(悬空的)符号链接
find . -type l ! -exec test -e {} \; -print
磁盘的分区和挂载
常用命令
1.创建磁盘分区fdsik:适用于MBR分区表,支持的分区大小最大为2TB.
# 1. 查看所有磁盘及分区信息
sudo fdisk -l
# 2. 对特定磁盘(如 /dev/sdb)进行操作
sudo fdisk /dev/sdb
# 进入交互模式后的常用指令:
# n - 新建一个新分区
# d - 删除一个分区
# p - 打印当前分区表
# w - 将变更写入分区表并退出
# q - 放弃变更并退出
# t - 更改分区的类型(例如,将分区类型改为 Linux LVM 的 8e)
# m - 查看帮助菜单
2.对磁盘分区进行格式化
# 1. 在 /dev/sdb1 分区上创建 ext4 文件系统(最常用)
sudo mkfs.ext4 /dev/sdb1
# 2. 创建 XFS 文件系统(适用于大文件和高并发)
sudo mkfs.xfs /dev/sdb1
# 3. 创建 FAT32 文件系统(用于跨平台兼容,如U盘)
sudo mkfs.vfat -F 32 /dev/sdb1
# 4. 创建交换分区(Swap)
sudo mkswap /dev/sdb2
sudo swapon /dev/sdb2 # 启用该交换分区
3.对磁盘分区进行挂载
创建好的文件系统的分区需要挂载到目录树的某个位置(挂载点),才能被访问
# 1. 将 /dev/sdb1 挂载到 /mnt/mydata 目录
sudo mount /dev/sdb1 /mnt/mydata
# 2. 挂载时指定参数,如设置只读(ro)
sudo mount -o ro /dev/sdb1 /mnt/mydata
# 3. 挂载 ISO 镜像文件
sudo mount -o loop ubuntu-22.04.iso /mnt/iso
# 4. 查看当前所有已挂载的文件系统
mount
# 5. 卸载已挂载的文件系统
sudo umount /mnt/mydata # 或者使用设备名 sudo umount /dev/sdb1
4.常见的配置文件 - /etc/fstab
手动使用 mount
命令进行的挂载在系统重启后会失效。为了能让系统在启动时自动挂载所需的文件系统,需要编辑 /etc/fstab
(文件系统表)配置文件。
文件结构:/etc/fstab
的每一行定义一个需要自动挂载的文件系统,每行包含 6 个字段,用空格或制表符分隔
<file system> <mount point> <type> <options> <dump> <pass>
<file system>: 要挂载的设备。
可以是设备文件(如 /dev/sdb1
)。
可以使用 UUID=
(推荐)或 LABEL=
来标识,避免设备名(sda
, sdb
)变化导致挂载错误。使用 blkid
命令查看分区的 UUID。
<mount point>: 挂载点的目录路径(必须存在)。
<type>: 文件系统类型,如 ext4
, xfs
, swap
, vfat
, nfs
等。
<options>: 挂载选项,多个选项用逗号分隔。
defaults
:默认选项(rw, suid, dev, exec, auto, nouser, async)。
noauto
:启动时不自动挂载。
user
:允许普通用户挂载。
ro
/rw
:只读/读写。
<dump>: 被 dump
备份工具使用的标志。通常设为 0
(表示不需要备份)。
<pass>: 被 fsck
磁盘检查工具使用的顺序。
0
:表示不检查。
1
:表示优先检查(通常只用于根目录 /
)。
2
:表示其次检查(用于其他分区)。
配置示例
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=abcd1234-5678 / ext4 defaults 0 1
UUID=efgh9012-3456 /home ext4 defaults 0 2
UUID=ijkl7890-1234 none swap sw 0 0
/dev/sr0 /mnt/cdrom iso9660 ro,user,noauto 0 0
LABEL=MyData /mnt/mydata ext4 defaults 0 2
磁盘配额的使用
磁盘配额:磁盘配额石一种限制用户或组在文件系统上所能使用的磁盘空间(块配额)或文件数量(inode)的机制,它主要包含两种限制:软限制 和 硬限制。
软限制:允许暂时超出的限制,通常会有宽限期,超过后需要在规定时间内清理文件。
硬限制:绝对不允许超越的上限。
操作步骤:
1.格式化磁盘为xfs文件系统
mkfs.xfs /dev/sdb1
2.创建挂载点:
mkdir /mnt/disk1
3.挂载并启用配额功能
mount -o uquota,gquota /dev/sdb1 /mnt/disk1
注;quota:启用用户磁盘配额,gquota:启用组磁盘配额
4.设置挂载点权限
chmod 1777 /mnt/disk1
5.查看配额报告
xfs_quota -x -c 'report -ugibh' /mnt/disk1
6.为用户设置incode配额
xfs_quota -x -c 'limit -u isoft=5 ihard=10 user1' /mnt/disk1
交换分区(虚拟内存)的创建和查看
交换分区石磁盘的一块特殊区域,当系统的物理内存不足时,操作系统会将内存中不常用的数据暂时移动到交换分区中,从而为需要运行的程序释放内存空间。
创建交换分区的两种方式:
1.独立的磁盘分区 2.交换文件
增加交换分区的大小(使用独立分区)
使用fdisk创建一个新的分区
将其格式化为交换空间
swapon /dev/sdb2
2.使用文件制作交换分区
不需要重新分区,更加灵活方便
dd if=/dev/zero bs=4M count=1024 of=/swapfile
创建完文件后的步骤
1.设置正确的权限
chmod 600 /swapfile # 只有 root 可读写
2.格式化为交换空间
mkswap /swapfile # 格式化和创建交换分区签名
3.启动交换文件
swapon /swapfile # 激活交换文件
4.永久生效,编辑/etc/fstab文件,添加一行
/swapfile none swap defaults 0 0