学习tar命令之前,我们应该先了解一个概念叫做归档(archiving):归档是将多个文件或目录打包成一个文件,以便于备份,日后还原,和文件传输操作。tar应该就是磁带的英文tape和归档的英文前面的ar简写组合而来。
tar命令就是Linux系统下标准的归档/打包工具。和Windows下的压缩软件略有不同的是:tar命令默认并不压缩文件,所以用tar打包后的文件文件可能不会变小。不过tar命令内部支持gzip、gunzip和bizip2几种压缩解压方式。
要正确地使用tar命令我们需要熟悉tar命令的几个选项:
主要选项 c 选项表示create,创建新的tar文件 x 选项表示extract,从tar包中抽取文件(解包) z 选项表示zip,使用gzip、gunzip方式压缩或解压(一般针对.tar.gz和.tgz文件) f 选项表示file,后接tar文件的路径,来指定创建或者解包的对象 辅助选项 t 选项表示list,列出文件中的内容 v 选项表示verbose,显示打包文件的详细信息 j 表示使用bzip2方式来压缩或解压文件(一般针对.bz2文件) PS:tar命令在使用选项时也和其它Linux命令略有不同,不需要在选项前加上一个-,不过加上也可以
打包当前目录下的文件为archive.tar tar cvf archive.tar . ./ ./149791020-VM-backup/ ./ITdafei.txt ./log-analyzer.sh ./unzip.sh 这里archive.tar是我们f选项的指定对象,即我们要创建的tar包文件名。 . 表示打包对象是当前目录下的所有文件。.tar后缀是为了我们方便日后理解文件类型而添加的。 打包之后我们可以先用 ls -l archive.tar 来查看这个新创建的文件: -rwxrwxrwx 1 itdafei itdafei 3665920 Dec 11 09:56 archive.tar 以后要查看 archive.tar 中的详细文件列表,可以: tar tvf archive.tar drwxrwxrwx itdafei/itdafei 0 2022-12-11 09:56 ./ drwxrwxrwx itdafei/itdafei 0 2022-12-10 19:38 ./149791020-VM-backup/ drwxrwxrwx itdafei/itdafei 0 2022-12-10 19:39 ./149791020-VM-backup/archive_08_25_2022_04_21_25/ ... -rwxrwxrwx itdafei/itdafei 33 2022-12-11 08:38 ./ITdafei.txt -rwxrwxrwx itdafei/itdafei 1023 2022-10-29 10:48 ./log-analyzer.sh -rwxrwxrwx itdafei/itdafei 1818 2022-12-11 08:38 ./unzip.sh
打包时我们使用了c选项来创建新的归档文件,解包时我们将c选项换成x选项即可, 后接的解包对象 archive.tar 是一个已存在的tar包文件: tar xvf archive.tar drwxrwxrwx itdafei/itdafei 0 2022-12-11 09:56 ./ drwxrwxrwx itdafei/itdafei 0 2022-12-10 19:38 ./149791020-VM-backup/ drwxrwxrwx itdafei/itdafei 0 2022-12-10 19:39 ./149791020-VM-backup/archive_08_25_2022_04_21_25/ ... ls -l total 3588 drwxrwxrwx 1 itdafei itdafei 512 Dec 10 19:38 149791020-VM-backup -rwxrwxrwx 1 itdafei itdafei 33 Dec 11 08:38 ITdafei.txt -rwxrwxrwx 1 itdafei itdafei 3665920 Dec 11 09:56 archive.tar drwxrwxrwx 1 itdafei itdafei 512 Dec 11 08:38 archive_08_08_2022_15_47_28 -rwxrwxrwx 1 itdafei itdafei 1023 Oct 29 10:48 log-analyzer.sh -rwxrwxrwx 1 itdafei itdafei 1818 Dec 11 08:38 unzip.sh
日常使用中,如果仅仅是打包往往无法满足需求。因为存储和传输都需要耗费资源。我们更多情况下还是会在打包同时进行压缩。一般做法是在打包命令的基础上再添加一个z选项,以gzip方式压缩。或者可以选择j选项,以bzip2方式压缩。
tar czvf archive.tar.gz . 这里的.tar.gz后缀也是我们使用gzip方式压缩tar包的文件一般写法,方便日后辨认。常见写法还可能有:archive.tgz ls查看新创建的压缩包,可以看到它的大小不到原来的30% (视文件类型不同而有所差异): ls -l archive.tar.gz -rwxrwxrwx 1 itdafei itdafei 1055847 Dec 11 10:24 archive.tar.gz 日后要解该类型的压缩包也很简单,将c选项换成x选项,z选项保留: tar xzvf archive.tar.gz 注意:目录下如果存在和压缩包内同名的文件,解包后将会被直接替换掉。 对比我们在Windows下的解包命令,上面的tar命令会直接将解包后的内容放在同级目录下。很多时候我们可能更希望指定一个目录来解包。对此,tar命令有个 -C 选项,表示change,更改解包后的目标路径: tar xzvf archive.tar.gz -C /tmp/archive
bzip2是一种更新的压缩方式。以bzip2方式压缩有可能达到更高的压缩率,不过速度也可能偏慢。
如果要使用bzip2方式压缩解压。我们须将z选项换成j选项,文件名后缀也相应地改成.tar.bz2。
bzip2方式压缩打包: tar cjvf archive.tar.bz2 ./ ./149791020-VM-backup/ ./149791020-VM-backup/archive_08_25_2022_04_21_25/ ... ./ITdafei.txt ./log-analyzer.sh ./unzip.sh 查看: ls -l archive.tar.bz2 -rwxrwxrwx 1 itdafei itdafei 957572 Dec 11 10:43 archive.tar.bz2 解包: tar xjvf archive.tar.bz2
上述命令和选项,如果有英文基础的话,通过英文字母的含义可能更容易记住。所以学习Linux会英文是一个优势。通过已知的概念来类比记忆新的知识是非常科学和高效的。如果没有,可能就要通过多次练习,学习后在过一些时间再次回顾和复用的方式了。