Linux专栏6:磁盘管理和文件压缩

磁盘管理

1 磁盘设备文件

1 准备一个FAT32格式的U盘(U盘中有 “磁盘挂载测试文件.txt” 和 “disk_test.txt”);

2 /dev/sd* 文件,此类文件是磁盘设备文件,并不能直接访问磁盘,必须要将磁盘挂载到某一个目录下才可以访问;

ding@ding-ubuntu:/dev$ ls sd*       // 插上U盘
sda  sda1  sdb
ding@ding-ubuntu:/dev$ ls sd*       // 拔掉U盘
sda  sda1

可以看到,在我的电脑上,sdb是U盘的设备文件;

2 磁盘和目录的容量查询

df:列出文件系统的整体磁盘使用量。主要查看个文件系统的使用量;

ding@ding-ubuntu:/dev$ df
文件系统           1K-块      已用      可用 已用% 挂载点
udev             4038152         0   4038152    0% /dev
tmpfs             812492      2104    810388    1% /run
/dev/sda1      153767376   9971372 135915404    7% /
tmpfs            4062456         0   4062456    0% /dev/shm
tmpfs               5120         4      5116    1% /run/lock
tmpfs            4062456         0   4062456    0% /sys/fs/cgroup
tmpfs             812488        16    812472    1% /run/user/121
vmhgfs-fuse    500106236 195046568 305059668   40% /mnt/hgfs
tmpfs             812488        44    812444    1% /run/user/1000
// U盘,设备文件是/dev/sdb,挂载点为/media/ding/
/dev/sdb        30285824        64  30285760    1% /media/ding/D0FA-3DBF

du:评估文件系统的磁盘使用量。主要查看单个文件的大小;

ding@ding-ubuntu:/media/ding$ du -sh D0FA-3DBF/     // 查看U盘使用量
64K	D0FA-3DBF/          // U盘使用了64KB

3 磁盘的挂载和卸载,分区和格式化

mount 和 umount 命令

ding@ding-ubuntu:~$ mount /dev/sdb /mnt    // 挂载设备
ding@ding-ubuntu:~$ umount /dev/sdb        // 卸载设备

1 因为ubuntu默认会将U盘挂载到 /media/ding/目录下,所以要先使用 umount 取消挂载;

ding@ding-ubuntu:/dev$ umount -v /dev/sdb     // 通过设备名卸载
ding@ding-ubuntu:/dev$ umount -v /media/ding/D0FA-3DBF     // 通过挂载点卸载
命令说明:umount -v 表示卸载时显示详细的信息

2 要挂载设备,先要创建挂载点(文件夹);

ding@ding-ubuntu:/media/ding$ sudo mkdir ding_disk

3 重新挂载文件(挂载至 /media/ding/ding_disk/);

ding@ding-ubuntu:/dev$ sudo mount /dev/sdb /media/ding/ding_disk/

4 查看U盘文件及内容;

ding@ding-ubuntu:/media/ding/ding_disk$ ls
 disk_test.txt  'System Volume Information'  '????????.txt'

ding@ding-ubuntu:/media/ding/ding_disk$ cat *.txt
disk_test
do not use chinese这是一个磁盘挂载测试文件
用于测试挂载是否成功

下面是U盘原始文件:

可以看到,英文文件名正常显示,中文文件名乱码,但文件内容都能正常显示。这肯定有问题,怎么解决?

使用 UTF-8 字符集

命令:ding@ding-ubuntu:~$ sudo mount -o iocharset=utf8 /dev/sdb /media/ding/ding_disk/

// 使用utf8字符集
ding@ding-ubuntu:~$ sudo mount -o iocharset=utf8 /dev/sdb /media/ding/ding_disk/
ding@ding-ubuntu:~$ ls -l /media/ding/ding_disk/
总用量 48
-rwxr-xr-x 1 root root    29 2月   7  2020  disk_test.txt
drwxr-xr-x 2 root root 16384 2月   7  2020 'System Volume Information'
-rwxr-xr-x 1 root root   100 2月   7  2020  磁盘挂载测试文件.txt

4 磁盘分区

fdisk 命令

1 查看所有分区:

ding@ding-ubuntu:~$ sudo fdisk -l

Disk /dev/sda:150 GiB,161061273600 字节,314572800 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xea08d66b

设备       启动  起点      末尾      扇区  大小 Id 类型
/dev/sda1  *     2048 314570751 314568704  150G 83 Linux


Disk /dev/sdb:28.9 GiB,31029460992 字节,60604416 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x500a0dff

可以看到,/dev/sda 是虚拟机分配给的150GB空间,有一个分区 /dev/sda1 ;/dev/sdb 为U盘设备。

2 创建分区(命令: fdisk + 设备路径):

ding@ding-ubuntu:~$ sudo fdisk /dev/sdb    // 使用 fdisk 命令

结果如下:

ding@ding-ubuntu:~$ sudo fdisk /dev/sdb
[sudo] ding 的密码: 

欢迎使用 fdisk (util-linux 2.31.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 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 获取帮助): 

这里可以输入命令:p  打印分区;d  删除分区;n  新建分区;

新建分区过程:

// 输入n 创建新分区
命令(输入 m 获取帮助): n
分区类型
   p   主分区 (2个主分区,0个扩展分区,2空闲)
   e   扩展分区 (逻辑分区容器)
// 输入p 选择主分区
选择 (默认 p): p
// 选择分区号3,那么就会有1个设备 /dev/sdb3
已选择分区 3
// 第一个扇区编号默认2048
第一个扇区 (2048-60604415, 默认 2048): 2048
// 创建1GB分区,则结束扇区为:1024^3(字节)/512(扇区大小)+2048(起始扇区)=2,099,200
上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-28049407, 默认 28049407): 2099200
// 创建成功
创建了一个新分区 3,类型为“Linux”,大小为 1 GiB。

新分区创建完成。查询如下:

命令(输入 m 获取帮助): p
Disk /dev/sdb:28.9 GiB,31029460992 字节,60604416 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x500a0dff

设备       启动       起点       末尾       扇区   大小 Id 类型
/dev/sdb1       1948285285 3650263507 1701978223 811.6G 6e 未知
/dev/sdb2                0          0          0     0B 74 未知
// 1GB新分区    起始扇区:2048    末尾扇区:2099200    大小:1GB
/dev/sdb3             2048    2099200    2097153     1G 83 Linux    
/dev/sdb4         28049408   28049848        441 220.5K  0 空

分区设置好后,输入 w ,保存分区表并退出。如下所示:

命令(输入 m 获取帮助): w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。

分区创建完成后,需要对分区进行格式化,使用的命令如下:

mkfs -t vfat /dev/sdx

文件压缩

1 压缩文件格式:Linux下常用的压缩扩展名有:.tar、.tar.bz2、.tar.gz,其中 .tar.bz2.tar.gz 这两种格式比较常用,因此需要在Windows上安装 7-ZIP 这个软件。

2 打包文件:

a) 打包成 .tar 格式;

2 将 .tar 文件在进行打包成 .tar.bz2 格式;

3 gzip 压缩工具

命令说明

ding@ding-ubuntu:~/bzip2test$ gzip --help       // gizp 压缩文件
Usage: gzip [OPTION]... [FILE]...
Compress or uncompress FILEs (by default, compress FILES in-place).

Mandatory arguments to long options are mandatory for short options too.

  -d, --decompress  decompress                  // 解压缩文件
  -r, --recursive   operate recursively on directories      // 目录递归操作

gzip工具负责压缩和解压缩 .gz 格式的压缩包

gzip xxx        // 压缩
gzip -d xxx.gz  // 解压缩

文件进行压缩和解压缩:

ding@ding-ubuntu:~/gztest$ ls   // gztest目录下有3个文件
a.c  b.c  c.c
ding@ding-ubuntu:~/gztest$ gzip a.c     // 使用gzip压缩a.c
ding@ding-ubuntu:~/gztest$ ls
a.c.gz  b.c  c.c                // 压缩完成,a.c不见了,被压缩成a.c.gz
ding@ding-ubuntu:~/gztest$ gzip -d a.c.gz   // 解压缩a.c.gz文件
ding@ding-ubuntu:~/gztest$ ls
a.c  b.c  c.c                   // 解压完成

文件夹进行压缩和解压缩:

ding@ding-ubuntu:~$ gzip -r gztest/         // 对文件夹进行压缩
ding@ding-ubuntu:~$ ls
// 此时目录中没有出现 .gz 结尾的压缩文件
examples.desktop  gztest  snap  test  公共的  模板  软件  视频  图片  文档  下载  音乐  桌面
ding@ding-ubuntu:~$ cd gztest/      // 进入压缩文件夹
ding@ding-ubuntu:~/gztest$ ls
a.c.gz  b.c.gz  c.c.gz              // gzip -r 实际上是对文件夹中的每个文件都进行压缩
// 只是对每个文件进行了压缩,但没有打包成整个的文件

总结:gzip 虽然可以对文件夹进行压缩,但是并不能提供打包的服务,只是对文件夹中的所有文件进行了单独的压缩。

4 bzip2 压缩工具

命令帮助:

ding@ding-ubuntu:~$ bzip2 --help
bzip2, a block-sorting file compressor.  Version 1.0.6, 6-Sept-2010.

   usage: bzip2 [flags and input files in any order]

   -d --decompress     force decompression      // 强制解压缩
   -z --compress       force compression        // 强制压缩

和 gzip 类似,只是 bzip2 工具负责压缩和解压缩 .bz2 格式的压缩包

bzip2 - z xxx       // 压缩
bzip2 -d xxx.gz     // 解压缩

bzip2 文件的压缩和解压缩测试:

ding@ding-ubuntu:~/bzip2test$ bzip2 -z a.c      // 压缩a.c文件
ding@ding-ubuntu:~/bzip2test$ ls
a.c.bz2  b.c  c.c           // 压缩完成,a.c不见了,被压缩成a.c.bz2
ding@ding-ubuntu:~/bzip2test$ bzip2 -d a.c.bz2  // 解压缩a.c.bz2文件
ding@ding-ubuntu:~/bzip2test$ ls
a.c  b.c  c.c               // 解压缩完成

可以看到,gzip 和 bzip2 都只能提供压缩服务,并不能打包。

5 tar 打包工具

命令参数:

ding@ding-ubuntu:~$ tar --help
用法: tar [选项...] [FILE]...
GNU ‘tar’
将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。

// 归档就是打包的意思
主操作模式:
  -c, --create               创建一个新归档
  -x, --extract, --get       从归档中解出文件
  -f, --file=ARCHIVE         使用归档文件或 ARCHIVE 设备
  -v, --verbose              详细地列出处理的文件

压缩选项:
  -j, --bzip2                通过 bzip2 过滤归档
  -z, --gzip, --gunzip, --ungzip   通过 gzip 过滤归档

tar 打包文件夹格式:

tar -vcf test.tar test      // 将 test 目录打包成 test.tar
tar -vxf test.tar           // 解包 test.tar

tar 工具打包和解包测试:

ding@ding-ubuntu:~$ tar -vcf bzip2test.tar bzip2test/   // 将 bzip2test 目录打包
bzip2test/
bzip2test/a.c
bzip2test/b.c
bzip2test/c.c
ding@ding-ubuntu:~$ ls          // 生成 bzip2test.tar,只打包不压缩
bzip2test      examples.desktop  test    模板  视频  文档  音乐
bzip2test.tar  snap              公共的  软件  图片  下载  桌面

ding@ding-ubuntu:~$ tar -vxf bzip2test.tar      // 解包 bzip2test.tar

上面的 tar 命令只提供了打包和解包的功能,tar 在提供打包和解包的同时使用 gzip / bzip2 进行压缩。

6 对 .tar.bz2 进行压缩和解压缩

tar -jvcf test.tar.bz2 /目录     // 目录压缩成 tar.bz2
tar -jvxf test.tar.bz2          // 解包 tar.bz2

 .tar.bz2 压缩和解压测试:

// bzip2test 目录压缩成 bzip2test.tar.bz2
ding@ding-ubuntu:~$ tar -jvcf bzip2test.tar.bz2 bzip2test/ 
// 这是 -v 列出的文件 
bzip2test/
bzip2test/a.c
bzip2test/b.c
bzip2test/c.c
ding@ding-ubuntu:~$ ls      // 出现 bzip2test.tar.bz2
bzip2test          examples.desktop  test    模板  视频  文档  音乐
bzip2test.tar.bz2  snap              公共的  软件  图片  下载  桌面 
// 移除 bzip2test 文件夹
ding@ding-ubuntu:~$ rm -rf bzip2test
ding@ding-ubuntu:~$ ls
bzip2test.tar.bz2  examples.desktop  snap  test  公共的  模板  软件  视频  图片  文档  下载  音乐  桌面
// 解压 bzip2test.tar.bz2 
ding@ding-ubuntu:~$ tar -jvxf bzip2test.tar.bz2 
bzip2test/
bzip2test/a.c
bzip2test/b.c
bzip2test/c.c
ding@ding-ubuntu:~$ ls      // 重新出现了 bzip2test 文件夹
bzip2test          examples.desktop  test    模板  视频  文档  音乐
bzip2test.tar.bz2  snap              公共的  软件  图片  下载  桌面

7 对 .tar.gz 进行压缩和解压缩

tar -zvcf test.tar.gz /目录     // 目录压缩成 tar.gz
tar -zvxf test.tar.gz           // 解包 tar.gz

 .tar.gz 压缩和解压测试:

// bzip2test 目录压缩成 bzip2test.tar.gz
ding@ding-ubuntu:~$ tar -zvcf bzip2test.tar.gz bzip2test/   
bzip2test/
bzip2test/a.c
bzip2test/b.c
bzip2test/c.c
ding@ding-ubuntu:~$ ls      // 压缩成功
bzip2test         examples.desktop  test    模板  视频  文档  音乐
bzip2test.tar.gz  snap              公共的  软件  图片  下载  桌面
ding@ding-ubuntu:~$ rm -rf bzip2test/       // 删除原目录
ding@ding-ubuntu:~$ ls
bzip2test.tar.gz  examples.desktop  snap  test  公共的  模板  软件  视频  图片  文档  下载  音乐  桌面
ding@ding-ubuntu:~$ tar -zvxf bzip2test.tar.gz  // 解压缩
bzip2test/
bzip2test/a.c
bzip2test/b.c
bzip2test/c.c
ding@ding-ubuntu:~$ ls                      // 原目录还原成功
bzip2test         examples.desktop  test    模板  视频  文档  音乐
bzip2test.tar.gz  snap              公共的  软件  图片  下载  桌面

8 其他压缩格式

1 .rar 格式

需要先安装rar:sudo apt-get install rar

rar a xxx.rar xxx		// 压缩
rar x xxx.rar			// 解压缩

2 .zip 格式

zip -rv xxx.zip xxx		// 压缩文件
unzip -v xxx.zip		// 解压缩文件
发布了184 篇原创文章 · 获赞 100 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/dingyc_ee/article/details/104189807