Linux下常用压缩/解压命令小结

最近又时常在Linux下打包东西,所以整理一下常用格式的打包/解压命令。
后续有其他格式就继续在这片文章里更新。

tar

1
2
3
4
tar -cf data.tar dir1 dir1 file1 file2 # 将dir1 dir2 file1 file2 打包为 data.tar
tar -tf data.tar # 列出包内容
tar -xf data.tar # 解压data.tar
tar -xf data.tar file1 # 解压出指定文件

PS1:选项前面的-也可以省略,如tar xf xx.tar.
PS2:可以用v查看详细信息或日志输出,如tar -xvf xx.tar.
PS3tar包是包含了文件的用户权限信息的。

gz/gzip

1
2
3
gzip file       # 将file压缩为file.gz
gzip -d file.gz # 将file.gz还原为file
gunzip file.gz # 同上

PSgip/gunzip默认都是在文件本身进行操作,所以要保留原始文件的话需要加上-k参数。

tar.gz/tgz

tar.gz是对tar包用gzip进行压缩,所以可以用两个命令进行操作,也可以用tar-z参数直接操作:

1
2
tar -czf data.tgz file1 file2 dir1 dir2 # 将file1 file2 dir1 dir2 打包为 data.tgz
tar -xzf data.tgz # 解压 data.tgz

tar.xz

同样,tar.xz是用xz压缩 tar包。一般很少见单独的xz包。 xz命令与 gzip参数几乎一致:

1
2
3
xz data.tar        # 压缩为 data.tar.xz
xz -d data.tar.xz # 解压为 data.tar
xz -dk data.tar.xz # 保留源文件解压

tar.xz可以直接用tar命令的 -J参数直接处理:

1
2
tar -cJf data.tar.xz dir1 dir2 file1 file2
tar -xJf data.tar.xz

PS:其实,tar.gztar.xz等格式,都可以用-a参数让tar命令自动检测:

1
2
tar -xaf data.tar.xz
tar -xaf data.tgz

rar

rar包提供了rar命令和 unrar命令。可以这样安装它:

1
2
yay -S rar      # archlinux
apt install rar # ubuntu

unrarrar的子集,只包含了解压相关操作,所以一般可以只用rar命令。

常规命令如下:

1
2
3
4
rar a data.rar file1           # 将 file1 压缩为 data.rar
rar l data.rar # 列出 data.rar 内容
rar a data.rar file2 dir1 dir2 # 将 file2 dir1 dir2 添加到 data.rar中
rar x data.rar # 解压 data.rar

添加密码及压缩分卷:

1
2
# 压缩 file1, 分卷大小为1M, 密码为 #123, 
rar a -v1m -p\#123 data.rar file1 file2

压缩完成后,得到data.part01.rar, data.part02.rar等等。
注意:命令行特殊字符需要转义,例如上面的\#.

解压可以指定任意分卷:

1
2
rar x data.part02.rar
rar x -p \#123 data.part01.rar

解压时如果参数没有提供密码,会在命令行提示输入密码,并询问是否用于所有文件:

1
2
3
4
5
6
$ rar x data.part01.rar 
...
Enter password (will not be echoed) for file1:
...
file2 - use current password ? [Y]es, [N]o, [A]ll A
...

PS:无法向分卷继续添加文件。

jar

以jar包形式运行服务时,常用jar命令来查看、更新包内配置文件,甚至是类文件:

1
2
3
4
jar -tf svc.jar                 # 列出jar包内容,可以用-v参数查看文件时间戳、大小等
jar -xf svc.jar # 解压整个jar
jar -xf svc.jar application.yml # 解压确定文件
jar -uf svc.jar application.yml # 更新确定文件

同样,命令中的-可以省略:jar xf svc.jar.
需要注意的是,解压某一文件的时候,路径可以从jar tf svc.jar的输出中得到,解压后,也会以相同的路径被存放。
更新时,也需要本地文件具有相同的目录结构。

META-INF/MANIFEST.MF为例。

  • 执行jar xf svc.jar META-INF/MANIFEST.MF,得到./META-INF/MANIFEST.MF
  • 执行jar uf svc.jar META-INF/MANIFEST.MF,会将./META-INF/MANIFEST.MF更新到svc.jar内的META-INF/MANIFEST.MF