tar是Linux上最常用的归档工具,和gzip/bzip2/xz组合后就是打包+压缩一条龙。别被那些”tar.gz””tar.bz2″后缀搞晕,核心就几个参数。
基本语法
tar [选项] [归档文件] [源文件/目录]
创建归档(不打压缩)
tar -cf archive.tar /path/to/dir
-c 创建归档,-f 指定归档文件名。不加压缩参数,生成的就是.tar裸归档,只打包不压缩,体积不变。
常用压缩组合
# gzip压缩(最常用,速度适中,压缩率还行)
tar -czf archive.tar.gz /path/to/dir
# bzip2压缩(压缩率更高,速度慢)
tar -cjf archive.tar.bz2 /path/to/dir
# xz压缩(压缩率最高,速度最慢)
tar -cJf archive.tar.xz /path/to/dir
参数:-z 调用gzip,-j 调用bzip2,-J 调用xz。记不住?看后缀选对应的字母就行。
解压
# 自动识别压缩格式解压
tar -xf archive.tar.gz
tar -xf archive.tar.bz2
tar -xf archive.tar.xz
# 解压到指定目录
tar -xf archive.tar.gz -C /target/path
-x 解压,-C 指定解压目标目录。tar会自动检测压缩格式,不用手动指定-z/-j/-J。
查看归档内容(不解压)
tar -tf archive.tar.gz
-t 列出归档内的文件列表。想确认里面有什么东西,先用这个命令看一眼,免得解压出一堆文件散落当前目录。
常用附加参数
# 显示处理过程(看哪些文件被处理了)
tar -czvf archive.tar.gz /path/to/dir
# 排除某些文件/目录
tar -czf archive.tar.gz /path/to/dir --exclude='*.log' --exclude='cache'
# 保留权限和所有者
tar -cpzf archive.tar.gz /path/to/dir
# 增量备份(只备份比指定文件新的文件)
tar -czf archive.tar.gz -N /path/to/reference/file /path/to/dir
-v 显示详细信息,-p 保留权限,–exclude 排除模式匹配的文件。
几个实战场景
场景1:备份网站目录,排除日志和缓存
tar -czf backup-2024-01-15.tar.gz /var/www/html --exclude='*.log' --exclude='cache' --exclude='node_modules'
场景2:解压后直接查看某个文件内容
tar -xf archive.tar.gz --to-stdout path/inside/archive/file.txt
–to-stdout 把文件内容输出到标准输出,配合管道可以grep搜索。
场景3:将多个目录打包成一个归档
tar -czf combined.tar.gz /etc/nginx /etc/ssl /var/www
场景4:从归档中提取单个文件
tar -xf archive.tar.gz path/inside/archive/specific-file.txt
直接指定归档内的文件路径,tar只提取这一个文件。
压缩格式选择建议
– 日常备份用gzip(.tar.gz),速度快,兼容性好。雨云的服务器备份脚本我一般用这个,系统自带gzip不用额外装,而且雨云服务器IO性能不错,压缩解压效率很高。
– 归档历史数据用xz(.tar.xz),能省30%-50%空间,但压缩解压慢,适合不常访问的冷数据。
– 跨平台传输用gzip,Windows下7-Zip、WinRAR都能打开。
注意事项
1. 归档路径尽量用相对路径或用-C切换目录,避免解压时覆盖系统文件。比如 `tar -czf backup.tar.gz -C /var/www/html .` 这样归档内路径是相对当前目录的。
2. 解压前先用 `tar -tf` 检查归档结构,防止解压出一堆文件污染当前目录。
3. 文件名不要用绝对路径,否则解压时直接写到绝对路径下,很危险。
4. 大文件压缩建议加上 `–checkpoint=1000` 显示进度,否则干等看不到任何输出。
管道组合骚操作
# 边压缩边加密
tar -czf - /path/to/dir | openssl enc -aes-256-cbc -e > archive.tar.gz.enc
# 解压加密归档
openssl enc -aes-256-cbc -d -in archive.tar.gz.enc | tar -xzf - -C /target/path
-f – 表示输出到标准输出,管道传给下一个命令。这样不用生成中间文件,直接加密或远程传输。
tar其实就是个包装器,真正干压缩活的是gzip/bzip2/xz。记住 `-czf` 打包压缩,`-xf` 解压,`-tf` 查看,90%的场景够用了。剩下的参数遇到具体需求再查man手册。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容