Linux命令 磁盘管理

8. 磁盘,文件管理

8.1 fdisk

Linux fdisk是一个创建和维护分区表的程序,它兼容DOS类型的分区表、BSD或者SUN类型的磁盘列表。

语法

fdisk [必要参数][选择参数]

必要参数:

-l 列出素所有分区表 -u 与"-l"搭配使用,显示分区数目

选择参数:

-s<分区编号> 指定分区 -v 版本信息

菜单操作说明

m :显示菜单和帮助信息
a :活动分区标记/引导分区
d :删除分区
l :显示分区类型
n :新建分区
p :显示分区信息
q :退出不保存
t :设置分区号
v :进行分区检查
w :保存修改
x :扩展应用,高级功能

例子

root@leco:~# fdisk -l
Disk /dev/loop0: 253.5 MiB, 265785344 bytes, 519112 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop2: 89.1 MiB, 93454336 bytes, 182528 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop3: 89.1 MiB, 93429760 bytes, 182480 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes




Disk /dev/sda: 223.6 GiB, 240057409536 bytes, 468862128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 19EDA916-28A9-4CBE-B561-893ECC2FDC4D

设备           Start    末尾    扇区   Size 类型
/dev/sda1       2048   1050623   1048576   512M EFI System
/dev/sda2    1050624 443797503 442746880 211.1G Linux filesystem
/dev/sda3  443797504 468860927  25063424    12G Linux swap

8.2 partprobe

partprobe: 通知系统分区表的变化

root@leco:~# partprobe /dev/sda

8.3 mkfs

Linux mkfs命令用于在特定的分区上建立 linux 文件系统

mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
- device : 预备检查的硬盘分区,例如:/dev/sda1 - V : 详细显示模式 - t : 给定档案系统的型式,Linux 的预设值为 ext2 - c : 在制做档案系统前,检查该partition 是否有坏轨 - l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面block : 给定 block 的大小

将sda6分区格式化为ext3格式
mfks -t ext3 /dev/sda6  

8.5 mount

Linux mount命令是经常会使用到的命令,它用于挂载Linux系统外的文件。

mount [-hV]
mount -a [-fFnrsvw] [-t vfstype]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir

  • V:显示程序版本
  • h:显示辅助讯息
  • v:显示较讯息,通常和 -f 用来除错。
  • a:将 /etc/fstab 中定义的所有档案系统挂上。
  • F:这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。
  • f:通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。
  • n:一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。
  • s-r:等于 -o ro
  • w:等于 -o rw
  • L:将含有特定标签的硬盘分割挂上。
  • U:将档案分割序号为 的档案系统挂下。-L 和 -U 必须在/proc/partition 这种档案存在时才有意义。
  • t:指定档案系统的型态,通常不必指定。mount 会自动选择正确的型态。
  • o async:打开非同步模式,所有的档案读写动作都会用非同步模式执行。
  • o sync:在同步模式下执行。
  • o atime、-o noatime:当 atime 打开时,系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。
  • o auto、-o noauto:打开/关闭自动挂上模式。
  • o defaults:使用预设的选项 rw, suid, dev, exec, auto, nouser, and async.
  • o dev、-o nodev-o exec、-o noexec允许执行档被执行。
  • o suid、-o nosuid: 允 许执行档在 root 权限下执行。
  • o user、-o nouser:使用者可以执行 mount/umount 的动作。
  • o remount:将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统,现在用可读写的模式重新挂上。
  • o ro:用唯读模式挂上。
  • o rw:用可读写模式挂上。
  • o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。

将 /dev/hda1 挂在 /mnt 之下

mount /dev/hda1 /mnt

将 /dev/hda1 用唯读模式挂在 /mnt 之下。

mount -o ro /dev/hda1 /mnt

将 /tmp/image.iso 这个光碟的 image 档使用 loop 模式挂在 /mnt/cdrom之下。用这种方法可以将一般网络上可以找到的 Linux 光 碟 ISO 档在不烧录成光碟的情况下检视其内容。

mount -o loop /tmp/image.iso /mnt/cdrom

8.6 umount

Linux umount命令用于卸除文件系统。

umount可卸除目前挂在Linux目录中的文件系统。

umount [-ahnrvV][-t <文件系统类型>][文件系统]

  • a 卸除/etc/mtab中记录的所有文件系统。
  • h 显示帮助。
  • n 卸除时不要将信息存入/etc/mtab文件中。
  • r 若无法成功卸除,则尝试以只读的方式重新挂入文件系统。
  • t<文件系统类型> 仅卸除选项中所指定的文件系统。
  • v 执行时显示详细的信息。
  • V 显示版本信息。
  • [文件系统] 除了直接指定文件系统外,也可以用设备名称或挂入点来表示文件系统。
# umount -v /dev/sda1          通过设备名卸载  
/dev/sda1 umounted  

# umount -v /mnt/mymount/      通过挂载点卸载  
/tmp/diskboot.img umounted 

如果设备正忙,卸载即告失败。卸载失败的常见原因是,某个打开的shell当前目录为挂载点里的某个目录:

# umount -v /mnt/mymount/  
umount: /mnt/mymount: device is busy  
umount: /mnt/mymount: device is busy 
可以使用-l 强制卸载

8.7 df

Linux df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计。

df [选项]... [FILE]...

  • 文件-a, --all 包含所有的具有 0 Blocks 的文件系统
  • 文件--block-size={SIZE} 使用 {SIZE} 大小的 Blocks
  • 文件-h, --human-readable 使用人类可读的格式(预设值是不加这个选项的...)
  • 文件-H, --si 很像 -h, 但是用 1000 为单位而不是用 1024
  • 文件-i, --inodes 列出 inode 资讯,不列出已使用 block
  • 文件-k, --kilobytes 就像是 --block-size=1024
  • 文件-l, --local 限制列出的文件结构
  • 文件-m, --megabytes 就像 --block-size=1048576
  • 文件--no-sync 取得资讯前不 sync (预设值)
  • 文件-P, --portability 使用 POSIX 输出格式
  • 文件--sync 在取得资讯前 sync
  • 文件-t, --type=TYPE 限制列出文件系统的 TYPE
  • 文件-T, --print-type 显示文件系统的形式
  • 文件-x, --exclude-type=TYPE 限制列出文件系统不要显示 TYPE
  • 文件-v (忽略)
  • 文件--help 显示这个帮手并且离开
  • 文件--version 输出版本资讯并且离开

显示文件系统的磁盘使用情况统计:

root@leco:~# df 
文件系统           1K-块      已用     可用 已用% 挂载点
udev             6028460         0  6028460    0% /dev
tmpfs            1211664    128196  1083468   11% /run
/dev/sda2      217768884 195109476 11574352   95% /
tmpfs            6058316    137964  5920352    3% /dev/shm
tmpfs               5120         4     5116    1% /run/lock
tmpfs            6058316         0  6058316    0% /sys/fs/cgroup
/dev/loop2         91264     91264        0  100% /snap/core/7917
/dev/sda1         523248      3496   519752    1% /cmz
cgmfs                100         0      100    0% /run/cgmanager/fs
tmpfs            1211664        36  1211628    1% /run/user/108
tmpfs            1211664       128  1211536    1% /run/user/1000
/dev/loop0        259584    259584        0  100% /media/leco/disk
/dev/loop3         91264     91264        0  100% /snap/core/8039

# -h选项,通过它可以产生可读的格式df命令的输出:
root@leco:~# df -h
文件系统        容量  已用  可用 已用% 挂载点
udev            5.8G     0  5.8G    0% /dev
tmpfs           1.2G  126M  1.1G   11% /run
/dev/sda2       208G  187G   12G   95% /
tmpfs           5.8G  135M  5.7G    3% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           5.8G     0  5.8G    0% /sys/fs/cgroup
/dev/loop2       90M   90M     0  100% /snap/core/7917
/dev/sda1       511M  3.5M  508M    1% /cmz
cgmfs           100K     0  100K    0% /run/cgmanager/fs
tmpfs           1.2G   36K  1.2G    1% /run/user/108
tmpfs           1.2G  128K  1.2G    1% /run/user/1000
/dev/loop0      254M  254M     0  100% /media/leco/disk
/dev/loop3       90M   90M     0  100% /snap/core/8039

我们可以看到输出显示的数字形式的'G'(千兆字节),"M"(兆字节)和"K"(千字节)。 这使输出容易阅读和理解,从而使显示可读的。请注意,第二列的名称也发生了变化,为了使显示可读的"大小"。

  • 第一列指定文件系统的名称,
  • 第二列指定一个特定的文件系统1K-块1K是1024字节为单位的总内存。用和可用列正在使用中,分别指定的内存量。使用列指定使用的内存的百分比
  • 最后一栏"安装在"指定的文件系统的挂载点。

df也可以显示磁盘使用的文件系统信息:

root@leco:~# ls data.sql 
data.sql
root@leco:~# du -sh data.sql 
251M    data.sql
root@leco:~# df data.sql 
文件系统           1K-块      已用     可用 已用% 挂载点
/dev/sda2      217768884 195109788 11574040   95% /

用一个-i选项的df命令的输出显示inode信息而非块使用量。

root@leco:~# df -i 
文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
udev            1507115     514  1506601       1% /dev
tmpfs           1514579    3973  1510606       1% /run
/dev/sda2      13836288 1099589 12736699       8% /
tmpfs           1514579     113  1514466       1% /dev/shm
tmpfs           1514579       9  1514570       1% /run/lock
tmpfs           1514579      19  1514560       1% /sys/fs/cgroup
/dev/loop2        12829   12829        0     100% /snap/core/7917
/dev/sda1             0       0        0        - /cmz
cgmfs           1514579      15  1514564       1% /run/cgmanager/fs
tmpfs           1514579      28  1514551       1% /run/user/108
tmpfs           1514579      48  1514531       1% /run/user/1000
/dev/loop0        28782   28782        0     100% /media/leco/disk
/dev/loop3        12842   12842        0     100% /snap/core/8039
root@leco:~# 

8.8 du

Linux du命令用于显示目录或文件的大小。du会显示指定的目录或文件所占用的磁盘空间。

du[-abcDhHklmsSx][-L<符号连接>][-X<文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件]
  • -a或-all 显示目录中个别文件的大小。
  • -b或-bytes 显示目录或文件大小时,以byte为单位。
  • -c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
  • -D或--dereference-args 显示指定符号连接的源文件大小。
  • -h或--human-readable 以K,M,G为单位,提高信息的可读性。
  • -H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
  • -k或--kilobytes 以1024 bytes为单位。
  • -l或--count-links 重复计算硬件连接的文件。
  • -L<符号连接>或--dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
  • -m或--megabytes 以1MB为单位。
  • -s或--summarize 仅显示总计。
  • -S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
  • -x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
  • -X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
  • --exclude=<目录或文件> 略过指定的目录或文件。
  • --max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
  • --help 显示帮助。
  • --version 显示版本信息。

root@leco:~/cmz# du|head
108 ./vue-devtools/src/backend
16  ./vue-devtools/src/devtools/plugins
56  ./vue-devtools/src/devtools/components
8   ./vue-devtools/src/devtools/locales
120 ./vue-devtools/src/devtools/assets
20  ./vue-devtools/src/devtools/style
24  ./vue-devtools/src/devtools/mixins
24  ./vue-devtools/src/devtools/views/events
24  ./vue-devtools/src/devtools/views/routes
16  ./vue-devtools/src/devtools/views/settings
只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的数字为当前目录的总大小显示指定文件所占空间

查看单个文件大小
root@leco:~/cmz# du -sh 1.py 
4.0K    1.py

查看单个目录
root@leco:~/cmz# du -h chain/ | head
4.0K    chain/ven3/include
8.0K    chain/ven3/lib/python3.6/distutils/__pycache__
20K chain/ven3/lib/python3.6/distutils
672K    chain/ven3/lib/python3.6/__pycache__
108K    chain/ven3/lib/python3.6/site-packages/pkg_resources/__pycache__
256K    chain/ven3/lib/python3.6/site-packages/pkg_resources/_vendor/__pycache__
72K chain/ven3/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/__pycache__
156K    chain/ven3/lib/python3.6/site-packages/pkg_resources/_vendor/packaging
704K    chain/ven3/lib/python3.6/site-packages/pkg_resources/_vendor
8.0K    chain/ven3/lib/python3.6/site-packages/pkg_resources/extern/__pycache__