压缩和解压缩 一、系统运维 1、日志管理 定期压缩旧日志节省空间 find /var/log -name "*.log" -mtime +30 -exec gzip -v {} \; find /var/log -name "*.log" -mtime +30 -exec sh -c 'gzip -v "{}" && rm -f "{}"' \; 0 0 1 * * /usr/bin/find /var/log -name "*.log" -mtime +30 -exec gzip {} \;
应用场景 :
Apache/Nginx日志归档
应用服务日志轮转
审计日志长期保存
关键参数 :
-mtime +30:30天前的文件
-exec:对找到的文件执行操作
gzip -v:显示压缩详情
2、备份操作 cp 原文件 备份文件.back tar -g /backup/snamshot -czvf backup tar -czvf backup_full_$(date +%F).tar.gz /data tar -g /backup/snapshot -czvf backup_inc_$(date +%F).tar.gz /data tar -g /backup/snapshot -czvf backup_diff.tar.gz -N "$(cat /backup/snapshot) " /data tar -czvf - /sensitive_data | openssl enc -aes-256-cbc -out backup_encrypted.tar.gz.enc
恢复流程
openssl enc -d -aes-256-cbc -in backup_encrypted.tar.gz.enc | tar -xzvf - tar -xzvf backup_full.tar.gz tar -xzvf backup_inc_1.tar.gz tar -xzvf backup_inc_2.tar.gz
3、软件部署 分发压缩包 tar -czvf app_v2.3.tar.gz --exclude=".git" --exclude="node_modules" ./app/ scp -i ~/.ssh/deploy_key app_v2.3.tar.gz user@server:/tmp/ ssh -i ~/.ssh/deploy_key user@server " tar -xzvf /tmp/app_v2.3.tar.gz -C /opt/apps/ && systemctl restart app_service "
自动化方案 ansible all -m copy -a "src=app_v2.3.tar.gz dest=/tmp/" ansible all -m shell -a "tar -xzvf /tmp/app_v2.3.tar.gz -C /opt/apps/" ansible all -m service -a "name=app_service state=restarted"
4、系统维护 df -h | awk '$5 > 80% {print $6 " is " $5}' watch -n 60 'ps aux --sort=-%mem | head -10' find /tmp -type f -mtime +7 -delete dnf update -y && dnf clean all
二、安全运维 1、安全审计 加密压缩敏感日志
tar -czvf - /var/log/audit/* | gpg --symmetric --cipher-algo AES256 -o audit_$(date +%F).tar.gz.gpg gpg -d audit_2025-08-04.tar.gz.gpg | tar -xzvf -
日志完整性保护 :
sha256sum audit.log > audit.log.sha256sha256sum -c audit.log.sha256
2、安全传输 加密传输
tar -czvf - /data | openssl enc -aes-256-cbc -pass pass:密钥 | nc -l 12345 nc server_ip 12345 | openssl enc -d -aes-256-cbc -pass pass:密钥 | tar -xzvf - tar -czvf - /sensitive | ssh user@remote "cat > backup.tar.gz"
证书加密传输
tar -czvf - /data | openssl smime -encrypt -aes256 -binary -outform DER remote_cert.pem > data.tar.enc openssl smime -decrypt -in data.tar.enc -inform DER -inkey private.key | tar -xzvf -
3、应急响应 快速收集系统信息 :
#!/bin/bash OUTDIR="/forensics/$(hostname) _$(date +%F_%H%M) " mkdir -p $OUTDIR uname -a > $OUTDIR /system_info.txtip a > $OUTDIR /network_config.txt ps aux > $OUTDIR /process_list.txt netstat -tulnpe > $OUTDIR /network_connections.txt lsof -i > $OUTDIR /open_ports.txt find / -mtime -1 -type f -exec tar -rvf $OUTDIR /suspicious_files.tar {} + gzip $OUTDIR /suspicious_files.tar dd if =/dev/mem of=$OUTDIR /memory_dump.bin bs=1M count=1024
恶意样本分析流程:
mkdir /quarantine && mv suspicious_file /quarantine/sha256sum /quarantine/suspicious_file > hashes.txtchmod 400 /quarantine/suspicious_filetar -czvf - /quarantine | gpg --encrypt --recipient security-team@company.com > malware_analysis.tar.gz.gpg curl -X POST -F "file=@malware_analysis.tar.gz.gpg" https://malware-analysis-api.com
生成测试文件 /dev/zero文件,能够输出无限连续的0x00字节,用作创建空白文件,初始化存储空间
/dev/null文件,是黑洞设备可以丢弃所有写入,用于屏蔽程序输出
[root@wickt tmp]# dd if =/dev/zero of=/tmp/testfile bs=1M count=100 [root@wickt tmp]# ls -lh testfile -rw-r--r--. 1 root root 100M 8月 4 18:24 testfile
查看文件 [root@wickt tmp]# file test.txt test.txt: ASCII text [root@wickt tmp]# file testfile testfile: data [root@wickt tmp]# hexdump testfile 0000000 0000 0000 0000 0000 0000 0000 0000 0000 * 6400000
file 文件名,查看文件类型
test.txt文件中写入了单词apple用file命令查看时ASCII文件。
刚才创建的testfile文件显示为data,表示file命令无法识别该文件的具体格式。从/dev/zero文件创建的全是0的空数据,被系统理解为纯二进制的数据或是非标准格式,所以无法识别。
压缩文件 gzip命令 gzip 是 Linux/Unix 系统中一个非常常用的文件压缩工具,它使用 LZ77 和 Huffman 编码算法(DEFLATE)来减小文件大小。压缩后的文件通常以 .gz 为扩展名,并且 gzip 默认会删除原始文件 (除非使用 -k 选项)。
gzip [选项] 文件名 gunzip [选项] 文件名.gz
压缩与解压基础:
-c 或 --stdout 或 --to-stdout:将压缩或解压后的输出写到标准输出(屏幕),不改变原始文件。 这是将结果通过管道传递给其他命令或保存到不同文件的关键。
压缩到屏幕:gzip -c file.txt
压缩并保存为新文件:gzip -c file.txt > file.txt.gz
解压到屏幕:gzip -cd file.txt.gz
解压并保存为新文件:gzip -cd file.txt.gz > file.txt
-d 或 --decompress 或 --uncompress:解压缩文件。 这是 gunzip 命令的等效方式。
gzip -d file.txt.gz (解压后得到 file.txt, 并删除 file.txt.gz)
-k 或 --keep:压缩或解压时保留原始文件。 这是防止 gzip 默认删除源文件的关键选项。
gzip -k file.txt (压缩后得到 file.txt.gz, 并且 file.txt 仍然存在)
gzip -dk file.txt.gz (解压后得到 file.txt, 并且 file.txt.gz 仍然存在)
-f 或 --force:强制执行操作。
强制覆盖已存在的输出文件。
即使文件有多个硬链接、是终端设备或压缩数据看起来不完整也尝试压缩。
当与 -c 结合使用时,即使输入数据不是常规文件(如管道、设备),也尝试压缩。
压缩级别控制 (速度 vs 压缩率):
-# 或 --fast 或 --best:设置压缩级别。 # 是一个从 1 到 9 的数字。
-1 或 --fast:最快压缩 ,但压缩率最低(文件压缩后相对较大)。
-9 或 --best:最慢压缩 ,但压缩率最高(文件压缩后相对最小)。
-6:默认压缩级别 ,在速度和压缩率之间取得较好的平衡。
通常,级别 6-9 之间的压缩率差异不大,但级别 9 会显著增加压缩时间。级别 1 非常快,但压缩效果较差。
选项
速度
压缩率
说明
-1 --fast
最快
最低
牺牲压缩率换取速度
-6
默认
默认
较好的平衡点 (默认级别)
-9 --best
最慢
最高
牺牲速度换取最大压缩率
信息查看:
-l 或 --list:列出压缩文件的信息。 显示每个压缩文件的压缩大小、未压缩大小、压缩比(百分比)和未压缩文件名。不解压文件。
gzip -l file.txt.gz
常用组合 -lv 查看更详细的信息(包括校验和、时间戳)。
-v 或 --verbose:详细模式。 在处理文件时显示文件名和压缩比。
gzip -v file.txt (压缩时显示压缩比)
gzip -dv file.txt.gz (解压时显示信息)
gzip -lv file.txt.gz (查看列表时显示更详细信息)
递归操作 (需要结合其他命令):
gzip 本身不能递归压缩目录及其子目录下的所有文件。 你需要先使用 tar 打包目录,然后再压缩打包后的 .tar 文件。
tar -czvf archive.tar.gz directory/:打包并压缩目录(常用)
tar -xzvf archive.tar.gz:解压 .tar.gz 文件
gzip 也可以直接压缩 .tar 文件:gzip archive.tar -> archive.tar.gz
文件属性:
-N 或 --name:解压时,如果原始文件名和文件时间戳信息存储在压缩文件中,则恢复原始文件名和时间戳。 这是默认行为。如果压缩时使用了 --no-name,则解压时需要用 -N 来强制恢复原始名和时间戳。
-n 或 --no-name:压缩时,不存储原始文件名和时间戳。 解压时,如果压缩文件没有存储原始名,则使用压缩文件名去掉 .gz 后缀(即使这样可能不准确)。解压时不恢复原始时间戳,使用当前时间。
-T 或 --test:测试压缩文件的完整性。 检查文件是否有错误,但不解压输出任何内容。如果文件完好,命令正常退出(退出码为 0)。
文件压缩 [root@wickt tmp]# gzip testfile [root@wickt tmp]# ls -lh testfile.gz -rw-r--r--. 1 root root 100K 8月 4 18:24 testfile.gz [root@wickt tmp]# file testfile.gz testfile.gz: gzip compressed data, was "testfile" , last modified: Mon Aug 4 10:24:55 2025, from Unix, original size 104857600
可以看到在使用gzip压缩时不加参数默认删除原文件
[root@wickt tmp]# mkdir test1 [root@wickt tmp]# mv testfile ./test1 [root@wickt tmp]# gzip -k ./test1 gzip: ./test1 is a directory -- ignored
!!!gzip无法压缩文件夹
文件解压 [root@wickt tmp]# gunzip testfile.gz [root@wickt tmp]# ls -lh testfile -rw-r--r--. 1 root root 100M 8月 4 18:24 testfile [root@wickt tmp]# [root@wickt tmp]# gzip -d -k testfile.gz gzip: testfile already exists; do you wish to overwrite (y or n)? y [root@wickt tmp]# ls -lh | grep testfile -rw-r--r--. 1 root root 100M 8月 4 18:24 testfile -rw-r--r--. 1 root root 100K 8月 4 18:24 testfile.gz
文件解压不加参数也是默认删除原文件
bzip2命令 bzip2 是 Linux/Unix 系统中一个高效的文件压缩工具,使用 Burrows-Wheeler 变换 (BWT) 和 Huffman 编码 算法,通常能提供比 gzip 更高的压缩率 (尤其是文本文件),但压缩/解压速度相对较慢。压缩后的文件扩展名为 .bz2。
bzip2 [选项] 文件名 bunzip2 [选项] 文件名.bz2
压缩与解压基础
选项
说明
无选项
压缩文件(默认删除原始文件),生成 .bz2 文件: bzip2 file.txt → file.txt.bz2
-d --decompress
解压文件(默认删除 .bz2 文件): bzip2 -d file.txt.bz2 → file.txt bunzip2 file.txt.bz2 效果相同
-k --keep
保留原始文件 (压缩或解压后): bzip2 -k file.txt(保留 file.txt) bzip2 -dk file.txt.bz2(保留 file.txt.bz2)
-c --stdout
输出到标准输出(不修改文件),用于管道操作: bzip2 -c file.txt > file.txt.bz2 bzip2 -dc file.txt.bz2 > file.txt
-f --force
强制覆盖输出文件,忽略错误(如文件已存在)
压缩级别控制 (1-9)
选项
速度
压缩率
说明
-1 (或 --fast)
最快
最低
快速压缩(牺牲压缩率)
-9 (或 --best)
最慢
最高
最佳压缩(默认级别)
-#
中间值
平衡
# 为 1-9 的数字(例如 -5)
注意 :级别 -9 是默认值,比低级别多占用 10% 内存,但压缩率显著提升。
文件检查与测试
选项
说明
-t --test
测试压缩文件完整性 (不输出数据): bzip2 -t file.txt.bz2 (成功返回 0,失败返回 1)
-v --verbose
显示操作详情(文件名、压缩率等): bzip2 -v file.txt bzip2 -tv file.txt.bz2(测试+详情)
解压专用工具
命令
等效操作
用途
bunzip2
bzip2 -d
解压 .bz2 文件
bzcat
bzip2 -dc
不解压直接查看内容 : `bzcat file.txt.bz2
压缩 [root@wickt tmp]# bzip2 ./test1/testfile [root@wickt tmp]# ls -lh ./test1/ 总用量 4.0K -rw-r--r--. 1 root root 113 8月 4 18:24 testfile.bz2 [root@wickt tmp]#
bzip2默认压缩删除原文件,使用-k参数保留原文件
同样bzip2不能压缩目录文件(文件夹)
解压 [root@wickt tmp]# bunzip2 ./test1/testfile.bz2 [root@wickt tmp]# ls -lh ./test1/ 总用量 100M -rw-r--r--. 1 root root 100M 8月 4 18:24 testfile [root@wickt tmp]# bzip2 -dk ./test1/testfile.bz2 [root@wickt tmp]# ls -lh ./test1/ 总用量 101M -rw-r--r--. 1 root root 100M 8月 4 18:24 testfile -rw-r--r--. 1 root root 113 8月 4 18:24 testfile.bz2 [root@wickt tmp]#
bzip2默认解压缩也是删除原文件
bzcat ./test1/testfile.bz2
打包命令tar tar(Tape ARchiver)是 Linux/Unix 系统中用于打包和解包文件 的核心工具,可将多个文件/目录合并为单个归档文件(tarball),常与压缩工具(如 gzip, bzip2, xz)结合使用。
tar [操作模式] [选项] [归档文件] [文件/目录...]
操作模式(必须选一个)
选项
全称
说明
-c
--create
创建 新归档
-x
--extract
解包 归档文件
-t
--list
列出 归档内容
-r
--append
向归档追加 文件
-u
--update
仅追加比归档内新的文件
关键选项 1. 文件指定
选项
说明
-f
指定归档文件名 (必须选项) tar -cf archive.tar dir/
-v
显示操作详情(verbose 模式 )
-C
解压到指定目录 tar -xf file.tar -C /target
2. 压缩类型
选项
压缩工具
典型扩展名
-z
gzip
.tar.gz, .tgz
-j
bzip2
.tar.bz2, .tbz2
-J
xz
.tar.xz, .txz
--zstd
zstd
.tar.zst
3. 权限与路径
选项
说明
-p
保留文件权限 (解压时默认保留)
--same-owner
保留文件所有者 (需 root 权限)
-P
允许使用绝对路径 (默认移除根目录 /)
--strip-components=N
解压时移除前 N 层目录
4. 过滤文件
选项
说明
--exclude="PATTERN"
排除 匹配文件/目录 --exclude="*.log"
--wildcards
使用通配符匹配文件名(配合 -t 使用)
压缩效率对比
格式
压缩率
速度
典型用途
.tar
-
最快
临时打包
.tar.gz
中
快
通用压缩(日志/文本)
.tar.bz2
高
慢
高压缩率需求
.tar.xz
最高
最慢
长期存储/分发
压缩 [root@wickt tmp]# ls -l ./test1/ 总用量 102404 -rw-r--r--. 1 root root 104857600 8月 4 18:24 testfile -rw-r--r--. 1 root root 113 8月 4 18:24 testfile.bz2 [root@wickt tmp]# tar -cf ./test2/test1.tar ./test1 [root@wickt tmp]# ls -lh ./test2/ 总用量 101M -rw-r--r--. 1 root root 101M 8月 4 19:23 test1.tar
与gzip、bzip2和xz联动
[root@wickt tmp]# tar -zcf ./test2/test1.tar.gz ./test1 [root@wickt tmp]# tar -cjvf ./test2/test1.tar.bz2 ./test1 ./test1/ ./test1/testfile.bz2 ./test1/testfile [root@wickt tmp]# tar -cJvf ./test2/test1.tar.xz ./test1 ./test1/ ./test1/testfile.bz2 ./test1/testfile [root@wickt tmp]# ls ./test2 test1.tar test1.tar.bz2 test1.tar.gz test1.tar.xz
解压 [root@wickt tmp]# tar -xf ./test2/test1.tar [root@wickt tmp]# ll -h | grep test1 drwxr-xr-x. 2 root root 42 8月 4 19:10 test1 [root@wickt tmp]# tar -xf ./test2/test1.tar -C ./test2 [root@wickt tmp]# ls -lh ./test2/ | grep test1 drwxr-xr-x. 2 root root 42 8月 4 19:10 test1 [root@wickt tmp]# tar -zxf ./test2/test1.tar.gz -C ./ttw/ [root@wickt tmp]# ls -lh ./ttw/ 总用量 0 drwxr-xr-x. 2 root root 42 8月 4 19:10 test1 [root@wickt tmp]# tar -xjvf ./test2/test1.tar.bz2 -C [root@wickt tmp]# ls -lh ./ttn2/ 总用量 0 drwxr-xr-x. 2 root root 42 8月 4 19:10 test1
查看 [root@wickt tmp]# tar -tf ./test2/test1.tar ./test1/ ./test1/testfile.bz2 ./test1/testfile [root@wickt tmp]# tar -ztf ./test2/test1.tar.gz ./test1/ ./test1/testfile.bz2 ./test1/testfile [root@wickt tmp]# tar -tzvf ./test2/test1.tar.gz | grep "test" drwxr-xr-x root/root 0 2025-08-04 19:10 ./test1/ -rw-r--r-- root/root 113 2025-08-04 18:24 ./test1/testfile.bz2 -rw-r--r-- root/root 104857600 2025-08-04 18:24 ./test1/testfile
其他用法 tar -czvf site.tar.gz --exclude="*.tmp" --exclude="cache/" /var/www/ tar -czvf logs.tar.gz /var/log/*.log tar -czvf incremental_backup.tar.gz --newer-mtime="2023-01-01" /data/