Linux:打包和压、解压缩命令

在 Windows 上一般都是用一个应用比如 BandZip 处理压缩和解压缩。

但在历史上的 Unix 设计工具时有一个理念是「一个工具只做一件事」。也就是说,在面对多个文件需要归档一起时使用「打包」,在「打包」后想对文件体积进行处理再使用「压缩」。

其中处理「打包」的应用一般为「tar」。而处理「压缩」的应用一般为「gzip」或者「bzip2」。一般「tar」文件代表的是打包好但是没压缩的文件,而打包好且压缩的文件采用双后缀名格式如「.tar.gz」、「.tar.bz2」。

tar 打包

# 假设想把 /etc 这个目录打包到主目录下,命名为 bak.tar
# -c 表示创建一个打包文件
# -f 表示目标文件名
sudo tar -cf /home/conners/bak.tar /etc
# 看一下打包后的文件信息
ls -lh /home/conners

返回:
total 3.3M
-rw-r--r-- 1 root root 3.3M Aug 13 09:54 test.tar

可以看到打包后的文件体积还是比较大的。

⚠️注意:此处进行 tar 操作时因为涉及到 /etc 目录有权限问题,所以使用普通用户操作时需要加上 sudo 提权。

gzip 或 bzip2 压缩

在打包完成后可以分别使用 gzipbzip2 进行压缩。但其实 tar 已经集成了这个功能,可以在打包的时候连带压缩。

tar 压缩

# 使用 gzip 压缩,注意文件名要加上双后缀名
sudo tar -czf /home/conners/bak.tar.gz /etc
# 属于 bzip2 压缩,注意文件名要加上双后缀名
sudo tar -cjf /home/conners/bak.tar.bz2 /etc

压缩完成后来看看两者和为压缩的打包文件的体积对比

ls -lh

返回:
total 4.5M
-rw-r--r-- 1 root root 3.3M Aug 13 10:01 bak.tar
-rw-r--r-- 1 root root 591K Aug 13 10:03 bak.tar.bz2
-rw-r--r-- 1 root root 637K Aug 13 10:03 bak.tar.gz

从结果来看「.tar」因为仅仅是打包文件所以体积较大,而「.tar.bz2」体积最小但是时间比体积稍大的「.tar.gz」要长。

tar 解压

有压缩就有解压,打包压缩使用 -z 反过来解压则使用 -x

# 在当前目录中解压 bak.tar
tar -xf bak.tar
# 在当前目录中解压 bak.tar.gz
tar -xzf bak.tar.gz
# 在当前目录中解压 bak.tar.bz2
tar -xjf bak.tar.bz2

# 当然还可以指定解压到的目录
# 在当前目录创建一个名为 bak 的文件夹
mkdir bak
# 使用 -C 参数(注意是大小)指定目录
tar -xzf bak.tar.gz -C ./bak

同样算法但不同后缀名

其实为了简化和传播, gzip 和 bzip2还有单后缀名格式。如下:

  • .tar.gz > .tgz
  • .tar.bz2 > .tbz2

更智能的 -a 参数

对于 gzip 的 -z 参数和 bzip2 的 -j 参数,其参数名和自身程序名没有太大关联,让人觉得不直观不好记。

幸好有一个 -a 参数可以智能的根据后缀名自动处理。

# 压缩 gzip
sudo tar -caf /home/conners/bak.tar.gz /etc
sudo tar -caf /home/conners/bak.tgz /etc
# 压缩 bzip2
sudo tar -caf /home/conners/bak.tar.bz2 /etc
sudo tar -caf /home/conners/bak.tbz2 /etc
# 解压
tar -xaf bak.tar.gz
tar -xaf bak.tbz2

延伸

Conners Hua

这个家伙很懒,什么都没有留下。

您可能还喜欢...

发表评论

电子邮件地址不会被公开。 必填项已用*标注