linux命令-压缩-12
大纲
| 压缩格式 | 生成命令示例 | 解压命令示例 | 特点 |
|---|---|---|---|
| .tar.gz | tar -zcvf archive.tar.gz dir/ | tar -zxvf archive.tar.gz | 打包并gzip压缩,支持目录 |
| .tar.bz2 | tar -jcvf archive.tar.bz2 dir/ | tar -jxvf archive.tar.bz2 | 打包并bzip2压缩,压缩率更高 |
| .zip | zip -r archive.zip dir/ | unzip archive.zip | 跨平台格 |
| .jar | jar uvf jar包 文件 | unzip jar包 | |
| .rar | unrar archive.zip dir/ | ||
| .gz | gzip file.txt | gunzip file.txt.gz | 压缩快,仅单文件,源文件删除 |
| .bz2 | bzip2 file.txt | bunzip2 file.txt.bz2 | 压缩率高于gzip,单文件 |
tar
-
参数
功能 选项组合 命令示例 适用场景 创建普通归档 -cvftar -cvf docs.tar file1.txt dir/仅打包,用于临时整理文件 gzip 压缩 -zcvftar -zcvf data.tar.gz /var/log/平衡压缩速度与体积,最常用 解压到指定目录 -xvf -C 目录tar -xvf docs.tar -C /tmp/extract/避免解压文件散落在当前目录 保留权限 -zcvpftar -zcvpf backup.tar.gz /etc/备份系统文件(保留原权限) 查看压缩包内容 -ztvf(gzip)tar -ztvf data.tar.gz快速确认压缩包内文件清单 -
示例
-
创建普通归档
[root@localhost opt]# tar cfv cfg.tar *.cfg grub1.cfg grub2.cfg grub3.cfg [root@localhost opt]# ll -h 总用量 88K -rw-r--r-- 1 root root 40K 11月 2 18:28 cfg.tar -rw-r--r-- 1 root root 20K 11月 2 18:28 grub1.cfg -rw-r--r-- 1 root root 4.2K 11月 2 17:59 grub2.cfg -rw-r--r-- 1 root root 4.2K 11月 2 18:28 grub3.cfg -
gzip 压缩
# /bin/tar zcf savefile.tar.gz 源文件1 源文件2 [root@localhost opt]# tar zcf gzcfg.tar.gz *.cfg [root@localhost opt]# ll -h 总用量 92K -rw-r--r-- 1 root root 20K 11月 2 18:28 grub1.cfg -rw-r--r-- 1 root root 4.2K 11月 2 17:59 grub2.cfg -rw-r--r-- 1 root root 4.2K 11月 2 18:28 grub3.cfg -rw-r--r-- 1 root root 1.7K 11月 2 18:29 gzcfg.tar.gz <-- 注意大小 -
解压到指定目录
[root@localhost opt]# mkdir a [root@localhost opt]# tar xf cfg.tar -C a [root@localhost opt]# ls a grub1.cfg grub2.cfg grub3.cfg -
过滤掉某文件
-
语法:
/bin/tar zcf savefile.tar.gz 源文件1 源文件2 --exclude=logs -
用tar打包时想剔除打包目录中的某个子目录或文件:
-
比如你想打包/home这个目录,但是/home/afish/目录和/home/www/afish.php文件你都不想打包,方法是:
tar -zcvf home.tar.gz /home --exclude=/home/afish --exclude=/home/www/afish.php # 如果要排除一个目录是 --exclude=dir1,而不是 --exclude=dir1/
-
-
不解压查看压缩
[root@localhost a]# tar zcf savefile.tar.gz *.cfg --exclude=grub4.cfg [root@localhost a]# tar -ztvf savefile.tar.gz -rw-r--r-- root/root 20480 2025-11-02 18:28 grub1.cfg -rw-r--r-- root/root 4253 2025-11-02 17:59 grub2.cfg -rw-r--r-- root/root 4253 2025-11-02 18:28 grub3.cfg -
压缩文件夹并删除源文件
[root@localhost opt]# tar zcf 20251102.tar.gz a --remove-files [root@localhost opt]# ll -h -rw-r--r-- 1 root root 3.7K 11月 2 18:36 20251102.tar.gz[root@localhost opt]# tar ztvf 20251102.tar.gz drwxr-xr-x root/root 0 2025-11-02 18:33 a/ -rw-r--r-- root/root 20480 2025-11-02 18:28 a/grub1.cfg ... -rw-r--r-- root/root 1729 2025-11-02 18:33 a/savefile.tar.gz -
压缩时不带上目录 <–生产用的蛮多
⚠️:-C 是临时切换工作目录,-P是绝对路径,在这里只用到-C参数就行了
-
压缩文件不带目录-标准
# 备份时会先进入/tmp/temp目录然后在将test打包 tar zvcf /备份路径/xx.tar.gz -C /tmp/temp/ test/ -
压缩过滤
# 这种就是过滤掉 logs下的所有以wrapper.log开头的文件,然后将test给它打包 tar zvcf /备份路径/xx.tar.gz -C /tmp/temp/ --exclude=logs/wrapper.log* test/ [root@localhost test]# pwd /tmp/temp/test [root@localhost test]# tree . ├── a.txt ├── b.txt └── logs├── wrapper.log.1├── wrapper.log.2└── wrapper.log.3[root@localhost test]# tar zcvf /opt/temp.tar.gz -C /tmp/temp/ --exclude=logs/wrapper.log.* test test/ test/a.txt test/b.txt test/logs/[root@localhost test]# tar ztf /opt/temp.tar.gz test/ test/a.txt test/b.txt test/logs
-
-
过滤四层 然后压缩data目录
# 过滤四层 然后压缩data目录 tar --strip-components=4 -zcf /opt/xx/elasticsearch_data.tar.gz -C /opt/EETRUST/common/elasticsearch data
-
zip
yum -y instll zip unzip
-
参数
选项 功能描述 示例命令 -r递归压缩目录 zip -r archive.zip docs/(压缩 docs 目录及子内容)-e加密压缩 zip -e secret.zip file.txt(需输入密码)-m压缩后删除原文件 zip -m temp.zip temp.txt(压缩后删除 temp.txt )-x排除指定文件 zip -r archive.zip docs/ -x "*.log"(排除 .log 文件)-0至-9压缩级别(0=不压缩,9=最高压缩) zip -9 large.zip data/(最高压缩率) -
示例
-
压缩文件
[root@localhost test]# zip x1.zip *adding: a.txt (deflated 92%)adding: b.txt (deflated 92%)# 不加-r就是当前文件 [root@localhost test]# zip -r xx.zip *adding: a.txt (deflated 92%)adding: b.txt (deflated 92%)...adding: test.zip (stored 0%) -
添加新文件
[root@localhost test]# zip -u x1.zip c.txt adding: c.txt (deflated 92%) -
过滤文件
# 过滤 test目录所有的 *.log.*文件 [root@localhost test]# zip -r x2.zip * -x "*.log.*" updating: logs/ (stored 0%)adding: a.txt (deflated 92%)adding: b.txt (deflated 92%)
-
unzip
-
参数
功能需求 zip选项示例 unzip选项示例 说明 覆盖现有文件 -f(更新文件)-o(自动覆盖)zip无直接覆盖压缩包选项 不覆盖现有文件 (默认不覆盖压缩包内文件) -n(不解压已存在文件)unzip需显式指定保护文件 安静模式(无输出) -q-q两者通用选项 加密处理 -e(手动输入密码)-P 密码(命令行明文指定,不安全)zip加密更安全(无明文) -
示例
-
加解密
[root@localhost test]# zip -r x3.zip * -x "*.log.*" -e Enter password: Verify password: updating: a.txt (deflated 92%) updating: b.txt (deflated 92%)# 解压当前目录, 这里就需要输入密码 [root@localhost test]# unzip x3.zip Archive: x3.zip [x3.zip] a.txt password: replace a.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
-
jar
仅压缩
-
示例, 如隐藏tomcat版本号
-
进入tomcat的lib目录找到catalina.jar文件
unzip catalina.jar之后会多出两个文件夹 -
进入cd org/apache/catalina/util 编辑配置文件ServerInfo.properties
将类似以下3行 server.info=Apache Tomcat/8.5.xx server.number=8.5.xx.0 server.built=Sep 9 2021 18:43:14 UTC 修改为 info 根据实际名称修改,built写当前时间 server.info=当前服务名称 server.number=0.0.0.0 server.built=2022/09/08 -
压缩回文件
# 将解压并修改的文件在打回文件内 jar uvf catalina.jar org/apache/catalina/util/ServerInfo.properties -
最后将修改的版本号 在 tomcat/lib下做个记录
然后 在 tomcat/lib 目录生成 readme.txt 文件将以下内容写入后保存,以备后续查询 server.info=Apache Tomcat/8.5.xx server.number=8.5.xx.0 server.built=Nov 11 2021 13:14:36 UTC
-
rar
有些国产化机器需要适配包,别折腾了,用zip或tar.gz吧
-
参数
功能 命令 示例及说明 创建压缩包 a(添加)rar a test.rar file1.txt:创建或更新 test.rar ,保留原文件;rar a -r test.rar dir/:递归压缩目录解压文件 x(带路径)rar x test.rar /home/:保持目录结构解压至指定路径,目标目录需以/结尾e(当前目录)rar e test.rar:所有文件解压到当前目录,不保留子目录更新/删除 u(更新)rar u test.rar newfile.txt:添加新文件并更新已有文件d(删除)rar d test.rar oldfile.txt:从压缩包中删除文件加密压缩 -p选项rar a -p123 test.rar secret.txt:用密码“123”加密,解压需输入密码
gzip
-
参数
参数 功能描述 示例命令 -d, --decompress 解压缩文件(等同于gunzip) gzip -d filename.txt.gz或gunzip filename.txt.gz-r, --recursive 递归压缩目录下所有文件 gzip -r /path/to/directory-v, --verbose 显示压缩/解压详细信息 gzip -v filename.txt-1至-9 压缩级别(1最快,9最高压缩率,默认6) gzip -9 filename.txt(最高压缩)-t, --test 测试压缩文件完整性 gzip -t filename.txt.gz -
示例
-
正常压缩
# 如果不加任何参数,会删除原始文件 [root@localhost test]# gzip g1.tgz *.txt -
解压缩文件
[root@localhost test]# gzip -d a.txt.gz -
递归压缩目录
[root@localhost test]# gzip -r logs/ -rw-r--r-- 1 root root 1582 11月 2 18:44 wrapper.log.1.gz -rw-r--r-- 1 root root 1582 11月 2 18:44 wrapper.log.2.gz -rw-r--r-- 1 root root 1582 11月 2 18:44 wrapper.log.3.gz -
查看压缩内文件
[root@localhost test]# gzip -l logs/wrapper.log.1.gz compressed uncompressed ratio uncompressed_name1582 20480 92.4% logs/wrapper.log.1
-
后续有示例在补充
