Linux中文件与文件系统的压缩命令
本文主要是《鸟哥的Linux私房菜》一书中第八章的学习汇总,包括Linux系统文件压缩、打包命令
一、压缩技术
目前所用的计算机系统都是使用字节单位来计量,但是最小的单位却是 bit,而 1B=8bit,所以比如要记录数字 7,就应该是 00000111,显然前面的 0 很占空间。那么这里讲了两种压缩技术,一种是通过一些方式将这些没有用到的空间腾出来,另一种方式是将上述数字合并一下,即记录为“5个0,3个1”。
二、Linux
常见压缩命令
在Linux
环境下,压缩文件扩展名大多为:
1 |
|
可见最常见的压缩命令就是gzip
、bzip2
和xz
了,而compress
已经不流行了,然后zip
只是为了支持Windows
更常见的zip
而搞的 (不过我感觉我个人用 WinRAR 更多捏)
然后这仨都只能用于单个文件的压缩与解压缩,如果想要一大堆文件或者目录一起搞,就需要tar
命令进行打包
gzip
gzip
采用 Lempel-Ziv 算法进行压缩,所创建的压缩文件为*.gz
,用法如下:
1 |
|
如上即可将单个文件进行压缩,但是注意原文件会“消失”,也就是原有的文件变成了同名的压缩文件,那么可以利用重定向来保留原本文件:
1 |
|
如果想查看压缩文件的内容,可利用如下命令而非将文件解压缩:
1 |
|
bzip2
& xz
这两个命令和gzip
几乎一模一样,具体内容可以直接 man
然后需要了解的就是压缩效果:gzip
最弱,xz
最强(xzgg最强😧)。当然压缩效果越强,花的时间就越久,具体可以自己试试,然后自行衡量时间成本
三、打包命令tar
tar
可以将多个目录或文件打包成一个大文件,并且可以通过前面所述的三种压缩命令(同时)进行压缩。而且目前 Windows 的 WinRAR 也支持 .tar.gz 文件名的解压缩。下面介绍基础的三个命令(其余请自行 man)
1 |
|
这里需要注意的几点有:
[-f filename]
是紧连在一起的,也就是说,可以写成:
1 |
|
但是不能写成:
1 |
|
因为这样一来,文件名就变成了 c 😮
- 在备份重要的系统数据 (/etc) 时,最好加上
-p
参数,这个是为了保存原本文件的权限与属性,也就是去掉根目录,因为如果没有去掉的话,解压缩的文件名就是绝对路径,也就是说解压缩出来的数据直接覆盖到原本的位置上去了,这就牙白了。而加上之后,比如压缩了 /etc,然后在 /tmp 目录下解压缩,就会得到 /tmp/etc - 而如果想保留根目录的话,就加上
-P
参数即可 - 在特定目录解压缩用
[-C 特定目录]
即可 - 想要打包某个目录,但是不想包括其中的某些文件时(类似于 .gitignore 的作用,常用于在本目录进行打包压缩,但是不包括自身的情况),直接用
[--exclude filename]
就行,可用通配符,多个--exclude
中间需要保留空格。
📝 例题
现在需要备份如下几个目录:
- /etc/ (配置文件)
- /home/ (用户的家目录)
- /var/spool/mail/ (系统中所有账号的邮箱)
- /var/spool/cron/ (所有账号的定时任务配置文件)
- /root/ (系统管理员的家目录)
然后 /home/loop* 不需要备份,/root 下的压缩文件也不需要备份。假设备份后的数据需要保存到目录 /backup 里,且该目录仅有 root 有权限进入。备份的文件名取作:backup-system-20220810.tar.bz2
🌆 参考答案
1 |
|
四、总结
好久没写博客了,这段时间属于是摆烂到极致了,不过马上就回去了,期待开学的生活,当然也不期待,一直摆烂一直爽,《鸟哥的Linux私房菜》这本书不是很推荐阅读,778页,太多了,前两部分一共八章就看了我好几周,属实是有点慢,推荐看狂神的课入个门,然后关于shell脚本编程我暂时没有好的资源推荐,因为我还没学到这来👋
一点私货🌠:08年的谍战剧《潜伏》,孙红雷主演