当前位置:首页>Linux>Linux 打包压缩实战甲方要日志,我打了一个 zip 发过去,他打开全是乱码

Linux 打包压缩实战甲方要日志,我打了一个 zip 发过去,他打开全是乱码

  • 2026-10-11 05:42:42
Linux 打包压缩实战甲方要日志,我打了一个 zip 发过去,他打开全是乱码

Linux 打包压缩实战

甲方要日志,我打了一个 zip 发过去,他打开全是乱码

Linux基础  实战课 

Linux 基础实战课 · 进阶篇

————————————————

💬 有一回项目验收,甲方让把最近三个月的应用日志打包发过去。我很快,找到目录,zip -r logs.zip ./logs/,文件也不大,发了过去。

十分钟后对方回复:「打开全是乱码,文件名也都变成了问号。」——原来日志里全是中文,Windows 上 zip 默认用的 GBK 和 Linux 的 UTF-8 打架了。换个 unzip -O cp936 参数解压才搞定。

打包压缩比你想的坑多。今天把 tar 和 zip 的常见用法一次讲完,顺便避坑。

————————————————

一、tar vs zip:什么时候用哪个

工具

用途

特点

tar

归档+压缩,Linux 标准格式

保留权限、时间戳,适合服务器间传

zip

压缩,跨平台通用格式

丢权限,换通用性,适合发给 Windows 用户

💡 简单记:服务器之间传 → tar.gz;发给 Windows 电脑的人 → zip。

二、tar 核心操作(记住 5 个参数就够了)

tar 命令的规律:c=创建 x=解压 z=gzip v=显示过程 f=指定文件

tar -czf 备份.tar.gz /需要打包的目录/

打包+压缩

tar -xzf 备份.tar.gz

解压到当前目录

tar -xzf 备份.tar.gz -C /目标目录/

解压到指定目录

tar -tzf 备份.tar.gz

只看里面有什么,不解压

tar -czf 备份.tar.gz /目录/ --exclude='*.log'

打包时排除 .log 文件

参数拆解记忆法:

● c = create 创建,x = extract 解压

● z = gzip 压缩/解压

● v = verbose 显示过程(可选,不想要输出就去掉 v)

● f = file 指定文件名(必须放最后)

● t = list 只看内容不解压

● C = 指定解压到哪个目录(大写)

⚠️ f 参数必须放最后!tar -czf 没错,tar -fcz 就会报错——f 后面跟文件名,你把 z 写在 f 后面它会把 z 当文件名。

三、zip / unzip 操作

zip -r 输出.zip 要打包的目录/

打包整个目录

unzip 文件.zip

解压到当前目录

unzip 文件.zip -d /目标目录/

解压到指定目录

unzip -l 文件.zip

只看内容,不解压

unzip -O cp936 文件.zip

解决 Windows 乱码(GBK→UTF-8)

那个乱码的坑再解释一下:Windows 上生成的 zip 用 GBK 编码文件名,Linux 默认 UTF-8,直接 unzip 中文文件名就坏了。加 -O cp936 告诉 unzip「源文件是 GBK 编码」,它就能正确转换。

反过来,你在 Linux 上打包 zip 发给 Windows 用户,也要注意:

zip -r 文件.zip 目录/

Linux 打包的 zip,Windows 自带解压通常没问题

四、实战场景

场景一:备份数据库文件并压缩(一条命令)

tar -czf /backup/db_$(date +%Y%m%d).tar.gz /var/lib/mysql/

按日期命名备份

场景二:把项目代码打包发给同事

tar -czf project.tar.gz ./myproject/ --exclude='node_modules' --exclude='.git'

排除 node_modules 和 .git

场景三:磁盘快满了,日志又大又多,只打包不压缩(快)

tar -cf logs_archive.tar /var/log/nginx/*.log-202605

只打包不压缩,速度快

场景四:解压前先看看里面有什么

tar -tzf 不确定来源的文件.tar.gz | head -20

先看前 20 个文件再决定要不要解压

⚠️ 永远不要对来源不明的 tar.gz 直接解压到根目录——可能有恶意文件覆盖系统文件。先 -tzf 看一眼内容。

五、分卷压缩:文件太大传不了怎么办

单文件超过邮件附件限制(通常 25MB),需要拆成小块:

tar -czf - /大目录/ | split -b 20M - 分卷名.tar.gz.

拆成每个 20MB 的小文件

解压时先把小文件拼回去:

cat 分卷名.tar.gz.* | tar -xzf -

拼回去再解压

💡 生成的文件名会是 分卷名.tar.gz.aa、分卷名.tar.gz.ab……依次拆开。要合并直接用 cat * > 拼就行。

打包压缩说到底就这些用法。tar 管 Linux 内部流转,zip 管跨平台对接。最实用的就三个:打包备份、打包传送、排除不要的文件。多敲几次肌肉记忆就形成了。

————————————————

下篇预告:《Linux 重定向与管道:命令输出的魔法,一条命令干完以前 5 步的活》

💬 你传文件给 Windows 用户的时候遇到过乱码吗?

平时用 tar 多还是 zip 多?评论区分享一下你的偏好

👍 点赞💬 留言🔄 转发给需要的朋友

有问题欢迎评论区留言,看到都会回复

请在微信客户端打开

最新文章

随机文章