4. tar 命令
tar 是 Linux/Unix 系统中用于 打包(归档) 和 压缩/解压 文件的命令。tar 命令可以将多个文件或文件夹打包成为一个单独的 .tar 文件,但并不压缩。
tar 命令可以使用选项结合其他压缩工具(如 gzip、bzip2、xz等)在归档的同时生成压缩归档文件(如 .tar.gz、.tar.bz2、.tar.xz等格式)。
tar 命令可以通过选项解压缩用 tar 命令归档的包,提取包内的数据文件。
命令格式:
tar [选项] [输出文件名] [输入文件/文件夹]
常用选项
-c-x-f <文件名>-v-zgzip 压缩/解压(.tar.gz 或 .tgz)-jbzip2 压缩/解压(.tar.bz2)-Jxz 压缩/解压(.tar.xz)-t-r-C 路径示例:
使用 tar 命令将文件 hello.py 和 下载 文件夹打包为 .tar 文件。但并不压缩。
weimingze@mzstudio:~$ ls
hello.py 下载 公共 图片 文档 桌面 模板 视频 音乐
weimingze@mzstudio:~$ tar -cf myfiles.tar hello.py 下载/
weimingze@mzstudio:~$ ls
hello.py myfiles.tar 下载 公共 图片 文档 桌面 模板 视频 音乐
weimingze@mzstudio:~$ ls -l myfiles.tar
-rw-rw-r-- 1 weimingze weimingze 583680 May 19 16:23 myfiles.tar
使用 tar命令将 文件 hello.py 和 下载 文件夹打包为 .tar.gz 文件。并使用 gzip 压缩。
weimingze@mzstudio:~$ ls
hello.py myfiles.tar 下载 公共 图片 文档 桌面 模板 视频 音乐
weimingze@mzstudio:~$ tar -czf myfiles.tar.gz hello.py 下载/
weimingze@mzstudio:~$ ls
hello.py myfiles.tar.gz 下载 图片 桌面 视频
myfiles.tar 公共 文档 模板 音乐
weimingze@mzstudio:~$ ls -l myfiles.tar.gz myfiles.tar
-rw-rw-r-- 1 weimingze weimingze 583680 May 19 16:23 myfiles.tar
-rw-rw-r-- 1 weimingze weimingze 40091 May 19 16:25 myfiles.tar.gz
从上述程序中可以看出 myfiles.tar.gz 要比 myfiles.tar 小很多。但是他们的内容是一样的。
使用 tar 命令将上述生成的 .tar.gz 文件解压缩到 桌面 文件夹下。
weimingze@mzstudio:~$ ls 桌面/
weimingze@mzstudio:~$ tar -xzf myfiles.tar.gz -C 桌面/
weimingze@mzstudio:~$ ls 桌面/
hello.py 下载
注意: 如果不写 -C 选项,则默认会将文件解压缩到当前文件夹。
下面我们尝试一下各种压缩算法
同上述打包一样,使用 tar 命令将 文件 hello.py 和 下载 文件夹打包为归档文件。
使用 xz 压缩为 .tar.xz。
weimingze@mzstudio:~$ tar -cJf myfiles.tar.xz hello.py 下载/
使用 bzip2 压缩为 .tar.bz2。
weimingze@mzstudio:~$ tar -cjf myfiles.tar.bz2 hello.py 下载/
/bin/sh: 1: bzip2: not found
tar: myfiles.tar.bz2: Cannot write: Broken pipe
tar: Child returned status 127
tar: Error is not recoverable: exiting now
weimingze@mzstudio:~$ sudo apt install bzip2
[sudo] password for weimingze:
weimingze@mzstudio:~$ sudo apt install bzip2
[sudo] weimingze 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
... # 此处省略了安装过程。
weimingze@mzstudio:~$ tar -cjf myfiles.tar.bz2 hello.py 下载/
weimingze@mzstudio:~$ ls -l myfiles.tar myfiles.tar.gz myfiles.tar.bz2 myfiles.tar.xz
-rw-rw-r-- 1 weimingze weimingze 583680 May 19 16:23 myfiles.tar
-rw-rw-r-- 1 weimingze weimingze 25199 May 19 16:50 myfiles.tar.bz2
-rw-rw-r-- 1 weimingze weimingze 40091 May 19 16:25 myfiles.tar.gz
-rw-rw-r-- 1 weimingze weimingze 25032 May 19 16:39 myfiles.tar.xz
weimingze@mzstudio:~$ ls -l myfiles.tar*
-rw-rw-r-- 1 weimingze weimingze 583680 May 19 16:23 myfiles.tar
-rw-rw-r-- 1 weimingze weimingze 25199 May 19 16:50 myfiles.tar.bz2
-rw-rw-r-- 1 weimingze weimingze 40091 May 19 16:25 myfiles.tar.gz
-rw-rw-r-- 1 weimingze weimingze 25032 May 19 16:39 myfiles.tar.xz
此处会报告 bzip2 这个命令没有找到这样一个错误。如果你想尝试使用这个命令,需要你使用
sudo apt install bzip2这个命令安装bzip2这个命令。Ubuntu 24.04 已经不再预安装这个高不成低不就的 bzip2 命令了。
上述我们在使用 tar 命令打包是分别使用了 -z、-j 和 -J 压缩成了不同格式的文件。通过 ls -l 我们可以看出 没有压缩的 myfiles.tar 最大,使用 -J 选择压缩的 myfiles.tar.xz 文件最小。
在使用 tar 命令打包时如果打包使用了 -z 选项,那么解包时也必须使用 -z 选项。
.tar.xz 使用 xz 压缩算法压缩的文件。这是我目前看到的最优秀的无损压缩算法。现在 Linux 内核 普遍使用 xz 算法压缩。Linux 6.14.7 内核源码的压缩文件包 linux-6.14.7.tar.xz 才 149.5M 大小,解压缩后为 1622M,压缩比超过了 10比1。 超赞!
上述示例中 我在命令行中使用了 星号 * 号通配符,即 * 可以代表 0 或多个任意字母。所以 ls -l myfiles.tar* 和 ls -l myfiles.tar myfiles.tar.gz myfiles.tar.bz2 myfiles.tar.xz 得到了相同的效果。
tar压缩格式对比
-cvf.tar-czvf.tar.gz / .tgz-cjvf.tar.bz2-cJvf.tar.xz练习:
- 将
/etc/apt文件夹复制到家文件夹~。 - 使用 du 命令查看
~/apt文件夹的大小。 - 将
~/apt文件使用 tar 命令打包为apt.tar,然后查看打包后文件的大小。 - 使用
gzip命令对apt.tar文件进行压缩并生成apt.tar.gz。 - 计算文件
apt.tar.gz命令对apt文件夹的压缩率(压缩率 = (压缩后文件大小 / 原始文件大小) × 100%)。 - 删除压缩后的
apt.tar.gz文件。