本文是《Linux 入门指南》的第十六篇文章,以 Ubuntu 21.10 为例,介绍了 Linux 磁盘管理。
du(查看文件或目录的磁盘使用空间)
描述:
"disk usage(磁盘使用情况)" 的缩写,查看文件或目录的磁盘使用空间。
用法:
du [选项] [文件名]/[目录名]
选项:
选项 | 长选项 | 意义 |
---|---|---|
-0 | --null | 每行输出使用 NUL 空字符结尾而非使用换行符 |
-a | --all | 输出所有文件的磁盘用量,不仅仅是目录 |
--apparent-size | 显示表面用量,而并非是磁盘用量;虽然表面用量通常会小一些,但有时它会因为稀疏文件间的“洞”、内部碎片、非直接引用的块等原因显得更大一些 | |
-B | --block-size=大小 | 以指定大小为单位对块大小进行输出;例如,'BM' 以 1,048,576 字节为单位输出大小;详情请参见下方的“SIZE 格式”部分 |
-b | --bytes | 等效于 '--apparent-size --block-size=1' |
-c | --total | 显示总计信息 |
-D | --dereference-args | 只在符号链接显式在命令行列出时对其进行解引用 |
-d | --max-depth=N | 仅当目录(或在 --all 选项启用时包括文件)层级不高于命令行参数指定的 N 层时输出对应目录或文件的对应大小; |
--max-depth=0 | 等效于 --summarize | |
--files0-from=F | 统计由文件 F 给出的由 NUL 空字符结束的文件名列表所对应各个文件的信息;如果 F 是 -,则从标准输入读取文件名列表 | |
-H | 等效于 --dereference-args (-D) | |
-h | --human-readable | 以人类可读的格式输出大小(例如,1K 234M 2G) |
--inodes | 列出 inode 使用信息而非块使用信息 | |
-k | 等效于 --block-size=1K | |
-L | --dereference | 解引用所有符号链接 |
-l | --count-links | 如果是硬连接,则重复计算其尺寸 |
-m | 等效于 --block-size=1M | |
-P | --no-dereference | 不跟随任何符号链接(默认行为) |
-S | --separate-dirs | 不包括子目录的占用量 |
--si | 类似 -h,但使用 1000 的倍数,而非 1024 | |
-s | --summarize | 只分别计算命令列中每个参数所占的总用量 |
-t | --threshold=大小 | 如果指定大小为正值,排除比该值更小的项,或者在值为负时排除更大的项 |
--time | 显示目录中或其子目录下所有文件的最后修改时间 | |
--time=关键字 | 显示指定关键字对应的时间而非最后修改时间:atime, access, use, ctime 或 status | |
--time-style=格式 | 使用指定格式显示时间,格式可以为:full-iso, long-iso, iso 或 +FORMAT;FORMAT 字符串以与 'date' 工具类似的方式解读 | |
-X | --exclude-from=文件 | 排除所有与指定<文件>所提供模式匹配的文件 |
--exclude=模式 | 排除所有与所给<模式>匹配的文件 | |
-x | --one-file-system | 跳过位于不同文件系统上的目录 |
--help | 显示此帮助信息并退出 | |
--version | 显示版本信息并退出 |
实例:
显示文件的磁盘使用空间(以可读性高的方式,显示文件 /home/jianrry/.profile 的磁盘使用空间)
du -h /home/jianrry/.profile
显示目录的磁盘使用空间(以可读性高的方式,显示目录 /home/jianrry 的磁盘使用空间)
du -h /home/jianrry
df(查看磁盘的使用情况)
描述:
"disk free(磁盘剩余空间)" 的缩写,查看磁盘的使用情况。
用法:
df [选项] [文件名]
选项:
选项 | 长选项 | 意义 |
---|---|---|
-a | --all | 包含虚拟、重复和无法访问的文件系统 |
-B | --block-size=大小 | 使用指定字节数的块。例如,'-BM' 将以1,048,576 字节为单位显示大小。参见 SIZE 格式 |
-h | --human-readable | 以 1024 为基底显示大小(例如:1023M) |
-H | --si | 以 1000 为基底显示大小(例如,1.1G) |
-i | --inodes | 显示inode 信息而非块使用量 |
-k | 即--block-size=1K | |
-l | --local | 只显示本机的文件系统 |
--no-sync | 取得使用量数据前不进行同步动作(默认) | |
--output[=域列表] | 使用给定域列表定义的输出格式,或者在缺省情况下输出所有域。 | |
-P | --portability | 使用 POSIX 兼容的输出格式 |
--sync | 取得使用量数据前先调用同步(sync)动作 | |
--total | 省略所有对可用空间无显著影响的项并生成总计值 | |
-t | --type=类型 | 只显示指定文件系统为指定类型的信息 |
-T | --print-type | 显示文件系统类型 |
-x | --exclude-type=类型 | 只显示文件系统不是指定类型的信息 |
-v | (忽略) | |
--help | 显示此帮助信息并退出 | |
--version | 显示版本信息并退出 |
实例:
显示磁盘的使用情况(以可读性高的方式,显示磁盘的使用情况)
df -h
fdisk(磁盘分区)
描述:
fdisk 是一款磁盘分区软件,可以对磁盘分区。
用法:
fdisk [选项] [设备名]
选项:
选项 | 长选项 | 意义 |
---|---|---|
-b | --sectors-size <大小> | 显示扇区计数和大小 |
-B | --protect-boot | 创建新标签时不要擦除 bootbits |
-c | --compatibility[=<模式>] 模式 | 为“dos”或“nondos”(默认) |
-L | --color[= |
颜色输出 (auto, always or never) 默认启用颜色 |
-l | --list | 显示分区并退出 |
-x | --list-details | 类似 --list 但有更多细节 |
-n | --noauto-pt | 不在空设备上创建默认分区表 |
-o | --output <列表> | 输出列 |
-t | --type <类型> | 只识别指定的分区表类型 |
-u | --units[=<单位>] | 显示单位,“cylinders”柱面或“sectors”扇区(默认) |
-s | --getsz | 以 512-字节扇区显示设备大小[已废弃] |
-b | --bytes | 以字节为单位而非易读的格式来打印 SIZE |
--lock[= |
使用独占设备锁 (yes, no or nonblock) | |
-w | --wipe |
擦除签名 (auto, always or never) |
-W | --wipe-partitions |
从新分区擦除签名 (auto, always or never) |
-C | --cylinders <数字> | 指定柱面数 |
-H | --heads <数字> | 指定磁头数 |
-S | --sectors <数字> | 指定每条磁道的扇区数 |
-h | --help | 显示帮助 |
-V | --version | 显示版本 |
实例:
列出全部分区
root@jianrry:/home/jianrry# fdisk -l
...
Disk /dev/sdb:50 GiB,53687091200 字节,104857600 个扇区
Disk model: VBOX HARDDISK
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4e3ee6e6
...
选择磁盘
root@jianrry:/home/jianrry# fdisk /dev/sdb
获取帮助
命令(输入 m 获取帮助): m
帮助:
DOS (MBR)
a 开关 可启动 标志
b 编辑嵌套的 BSD 磁盘标签
c 开关 dos 兼容性标志
常规
d 删除分区
F 列出未分区的空闲区
l 列出已知分区类型
n 添加新分区
p 打印分区表
t 更改分区类型
v 检查分区表
i 打印某个分区的相关信息
杂项
m 打印此菜单
u 更改 显示/记录 单位
x 更多功能(仅限专业人员)
脚本
I 从 sfdisk 脚本文件加载磁盘布局
O 将磁盘布局转储为 sfdisk 脚本文件
保存并退出
w 将分区表写入磁盘并退出
q 退出而不保存更改
新建空磁盘标签
g 新建一份 GPT 分区表
G 新建一份空 GPT (IRIX) 分区表
o 新建一份的空 DOS 分区表
s 新建一份空 Sun 分区表
新建分区
命令(输入 m 获取帮助): n
分区类型
p 主分区 (0 primary, 0 extended, 4 free)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):
将使用默认回应 p。
分区号 (1-4, 默认 1):
第一个扇区 (2048-104857599, 默认 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-104857599, 默认 104857599):
创建了一个新分区 1,类型为“Linux”,大小为 50 GiB。
分区 #1 包含一个 ext4 签名。
您想移除该签名吗? 是[Y]/否[N]: Y
写入命令将移除该签名。
保存并退出
命令(输入 m 获取帮助): w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
格式化分区
root@jianrry:/home/jianrry# mkfs -t ext4 /dev/sdb1
mke2fs 1.46.3 (27-Jul-2021)
创建含有 13106944 个块(每块 4k)和 3276800 个inode的文件系统
文件系统UUID:338a5ceb-4a70-4b80-bfb9-2e02482db0ac
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
正在分配组表: 完成
正在写入inode表: 完成
创建日志(65536 个块) 完成
写入超级块和文件系统账户统计信息: 已完成
mount(挂载文件系统)
描述:
mount 可以挂载文件系统。
用法:
mount [选项] [设备名] [挂载点]
选项:
选项 | 长选项 | 意义 |
---|---|---|
-a | --all | 挂载 fstab 中的所有文件系统 |
-c | --no-canonicalize | 不对路径规范化 |
-f | --fake | 空运行;跳过 mount(2) 系统调用 |
-F | --fork | 对每个设备禁用 fork(和 -a 选项一起使用) |
-T | --fstab <路径> | /etc/fstab 的替代文件 |
-i | --internal-only | 不调用 mount. |
-l | --show-labels | 也显示文件系统标签 |
-n | --no-mtab | 不写 /etc/mtab |
--options-mode |
如何处理从 fstab 加载的选项 | |
--options-source | 挂载选项源 | |
--options-source-force | 强制使用 fstab/mtab 中的选项 | |
-o | --options <列表> | 挂载选项列表,以英文逗号分隔 |
-O | --test-opts <列表> | 限制文件系统集合(和 -a 选项一起使用) |
-r | --read-only | 以只读方式挂载文件系统(同 -o ro) |
-t | --types <列表> | 限制文件系统类型集合 |
--source <源> | 指明源(路径、标签、uuid) | |
--target <目标> | 指明挂载点 | |
--target-prefix |
指定所有挂载点的路径使用 | |
-v | --verbose | 打印当前进行的操作 |
-w | --rw, --read-write | 以读写方式挂载文件系统(默认) |
-N | --namespace |
在另一个命名空间中执行挂载 |
-h | --help | 显示此帮助 |
-V | --version | 显示版本 |
-L | --label | LABEL= |
-U | --uuid |
UUID= |
LABEL= | 通过文件系统标签指定设备 | |
UUID= |
通过文件系统 UUID 指定设备 | |
PARTLABEL= | 通过分区标签指定设备 | |
PARTUUID= |
通过分区 UUID 指定设备 | |
ID= |
通过 udev 硬件 ID 指定设备 | |
<设备> | 按路径指定设备 | |
<目录> | 绑定式挂载的挂载点(参阅 --bind/rbind) | |
<文件> | 用于设置回环设备的常规文件 | |
-B | --bind | 挂载其他位置的子树(同 -o bind) |
-M | --move | 将子树移动到其他位置 |
-R | --rbind | 挂载其他位置的子树及其包含的所有子挂载(submount) |
--make-shared | 将子树标记为 共享 | |
--make-slave | 将子树标记为 从属 | |
--make-private | 将子树标记为 私有 | |
--make-unbindable | 将子树标记为 不可绑定 | |
--make-rshared | 递归地将整个子树标记为 共享 | |
--make-rslave | 递归地将整个子树标记为 从属 | |
--make-rprivate | 递归地将整个子树标记为 私有 | |
--make-runbindable | 递归地将整个子树标记为 不可绑定 |
实例:
挂载文件系统(以只读的方式,挂载文件系统)
mount -r /dev/sdb1 /home/jianrry
挂载文件系统(以读写的方式,挂载文件系统)
mount -w /dev/sdb1 /home/jianrry
umount(卸载文件系统)
描述:
umount 可以卸载文件系统。
用法:
umount [选项] [设备名]/[挂载点]
选项:
选项 | 长选项 | 意义 |
---|---|---|
-a | --all | 卸载所有文件系统 |
-A | --all-targets | 卸载当前名字空间内指定设备对应的所有挂臷点 |
-c | --no-canonicalize | 不对路径规范化 |
-d | --detach-loop | 若挂臷了回环设备,也释放该回环设备 |
--fake | 空运行;跳过 umount(2) 系统调用 | |
-f | --force | 强制卸载(遇到不响应的 NFS 系统时) |
-i | --internal-only | 不调用 umount.<类型> 辅助程序 |
-n | --no-mtab | 不写 /etc/mtab |
-l | --lazy | 立即断开文件系统,清理以后执行 |
-O | --test-opts <列表> | 限制文件系统集合(和 -a 选项一起使用) |
-R | --recursive | 递归卸载目录及其子对象 |
-r | --read-only | 若卸载失败,尝试以只读方式重新挂臷 |
-t | --types <列表> | 限制文件系统集合 |
-v | --verbose | 打印当前进行的操作 |
-q | --quiet | 不打印 'not mounted' 错误消息 |
-N | --namespace |
在另一个命名空间中执行 umount |
-h | --help | 显示此帮助 |
-V | --version | 显示版本 |
实例:
卸载文件系统(通过设备名 /dev/sdb1,卸载文件系统)
umount /dev/sdb1
卸载文件系统(通过挂载点 /home/jianrry,卸载文件系统)
umount /home/jianrry