CentOS系统通常预装tar,可通过tar --version检查,若未安装可用yum或dnf安装;tar用于打包和调用gzip、bzip2、xz等工具压缩,常用格式为.tar.gz、.tar.bz2、.tar.xz,支持排除文件、分卷、进度监控及优先级调整等高级功能。

在CentOS系统下,
tar通常是默认安装的,因为它是Linux系统中最基础的文件归档工具之一。如果你的系统确实缺少它,可以通过包管理器轻松安装,然后就可以利用它进行文件的打包、解包以及结合压缩工具进行归档压缩操作了。
解决方案
要使用
tar,首先得确认它在不在你的系统里。最直接的办法是打开终端,输入
tar --version。如果能看到版本信息,说明它已经就位了。要是提示“command not found”之类的错误,那咱们就得动手安装一下。
1. 检查 tar
是否安装
tar --version which tar
如果上述命令有输出,比如显示
tar (GNU tar) 1.26或类似的版本号,那就说明
tar已经安装好了。
which tar会告诉你
tar可执行文件的路径。
2. 安装 tar
(如果缺失)
对于CentOS 7或更早的版本,使用
yum:
sudo yum install tar
对于CentOS 8或更新的版本,
yum已经被
dnf取代了,但通常
yum命令会重定向到
dnf,或者你直接用
dnf:
sudo dnf install tar
安装过程通常很快,因为它是个很小的核心工具。
3. tar
的基本使用
tar最核心的功能就是把多个文件或目录打包成一个单一的归档文件,或者从归档文件中提取内容。它本身不负责压缩,但可以调用其他压缩工具(如
gzip、
bzip2、
xz)来完成压缩。
-
打包文件/目录 (不压缩):
tar -cvf myarchive.tar /path/to/directory /path/to/file1 /path/to/file2 # -c: 创建归档 # -v: 显示详细过程 (verbose) # -f: 指定归档文件名
这个命令会将
/path/to/directory
、/path/to/file1
和/path/to/file2
打包成myarchive.tar
。 -
打包并使用
gzip
压缩 (.tar.gz 或 .tgz):tar -czvf myarchive.tar.gz /path/to/directory # -z: 调用gzip进行压缩/解压缩
这是最常用的方式,生成的文件后缀通常是
.tar.gz
或简写.tgz
。 -
打包并使用
bzip2
压缩 (.tar.bz2 或 .tbz):tar -cjvf myarchive.tar.bz2 /path/to/directory # -j: 调用bzip2进行压缩/解压缩
bzip2
通常比gzip
压缩率更高,但速度稍慢。 -
打包并使用
xz
压缩 (.tar.xz 或 .txz):tar -cJvf myarchive.tar.xz /path/to/directory # -J: 调用xz进行压缩/解压缩 (注意是大写J)
xz
提供最高的压缩率,但速度也最慢,对CPU资源消耗也更大。 -
解压归档文件 (到当前目录):
tar -xvf myarchive.tar # 解压 .tar tar -xzvf myarchive.tar.gz # 解压 .tar.gz 或 .tgz tar -xjvf myarchive.tar.bz2 # 解压 .tar.bz2 或 .tbz tar -xJvf myarchive.tar.xz # 解压 .tar.xz 或 .txz # -x: 提取文件
解压时,
tar
会自动识别压缩类型(如果文件后缀正确),但显式指定-z
,-j
,-j
是个好习惯。 -
解压到指定目录:
tar -xzvf myarchive.tar.gz -C /path/to/destination # -C: 指定解压目录 (Change directory)
-
查看归档文件内容 (不解压):
tar -tvf myarchive.tar tar -tzvf myarchive.tar.gz # -t: 列出归档内容
这个命令可以让你在解压前先看看里面有什么,避免不必要的解压操作,特别是当你对文件内容不确定时。
CentOS上tar命令的基本用法与高级技巧
tar命令在CentOS上是系统管理和数据备份的基石,它的基础用法大家基本都清楚,但有些高级技巧和参数,在实际操作中能帮上大忙。比如,有时候我们只想打包某个目录下的特定文件类型,或者需要排除一些不必要的文件,
tar都能很好地应对。
一个我经常用到的场景是,打包一个项目目录,但要排除掉
node_modules、
.git这种体积庞大或不需要备份的目录。这时候
--exclude参数就显得尤为重要了。
# 打包当前目录,排除node_modules和.git目录 tar -czvf myproject_backup.tar.gz . --exclude=./node_modules --exclude=./.git # 注意:路径要和tar命令操作的相对路径一致,如果tar . 则exclude也要用./
另外,如果你想打包后直接通过网络传输,或者在处理非常大的文件时,可以考虑使用管道(pipe)。比如,直接将
tar的输出通过
ssh发送到另一台服务器,而不在本地创建临时文件:
tar -czf - /path/to/source | ssh user@remote_host "cat > /path/to/destination/backup.tar.gz"
这里
-表示
tar的输出是标准输出,而不是文件。这种方式在远程备份或迁移数据时特别高效。
tar与gzip、bzip2、xz:性能、压缩率与适用场景
很多人刚接触
tar时,会把它的打包功能和压缩功能混为一谈,觉得
tar本身就能压缩。其实不是,
tar只负责归档,也就是把一堆文件和目录塞到一个
.tar文件里,而压缩是
gzip、
bzip2、
xz这些独立工具的活儿。
tar命令中的
-z、
-j、
-j选项,只是方便地调用了这些外部工具。
-
gzip
(选项-z
):- 特点: 压缩速度最快,但压缩率相对最低。
-
适用场景: 对速度要求高,或者数据量不是特别巨大,或者CPU资源有限的场景。比如日常的日志文件打包、小规模备份。文件后缀通常是
.tar.gz
或.tgz
。
-
bzip2
(选项-j
):-
特点: 压缩率比
gzip
高,但压缩和解压速度都比gzip
慢。 -
适用场景: 当你希望在可接受的速度范围内获得更好的压缩率时。例如,对不太频繁访问但需要长期存储的归档文件。文件后缀通常是
.tar.bz2
或.tbz
。
-
特点: 压缩率比
-
xz
(选项-j
):- 特点: 压缩率最高,但压缩和解压速度最慢,对CPU和内存的消耗也最大。
-
适用场景: 对压缩率有极致要求,且不那么看重时间成本的场景。比如,发布软件的源代码包、长期归档的数据、或者在存储空间非常宝贵的情况下。文件后缀通常是
.tar.xz
或.txz
。
在我个人的经验中,如果不是特别大的文件或者对存储空间有严格限制,我通常会选择
gzip。它在速度和压缩率之间找到了一个很好的平衡点。但如果需要归档一个几百GB甚至几TB的数据库备份,并且希望尽可能节省磁盘空间,那我可能会倾向于
xz,即使它需要更长的时间来完成。选择哪个工具,真的要根据具体的应用场景和资源限制来权衡。
处理大型文件或目录:tar的性能考量与优化技巧
当我们在CentOS上使用
tar处理动辄几十GB甚至TB级别的大型文件或目录时,性能问题就变得尤为突出。我记得有一次需要打包一个存储了大量历史数据的日志服务器,目录结构复杂,文件数量庞大,直接
tar -czvf下去,不仅慢得让人心焦,而且还可能遇到各种资源瓶颈。这时候,一些优化技巧就显得非常必要了。
-
分卷打包 (Splitting Archives): 如果你打包的文件最终会超过某个文件系统或传输协议的限制(比如FAT32不支持大于4GB的文件,或者你只想通过邮件发送小块数据),可以使用
split
命令配合tar
进行分卷。# 先打包但不压缩 tar -cvf - /path/to/large_directory | split -b 2G -d -a 3 large_directory.tar. # 这会生成 large_directory.tar.000, large_directory.tar.001 等文件,每个2GB。 # -b 2G: 每2GB一个文件 # -d: 使用数字后缀 # -a 3: 后缀长度为3位 # 解包时: cat large_directory.tar.* | tar -xvf -
这种方式在分发大型归档时非常实用,也避免了单一大文件可能带来的问题。
-
排除不必要的文件/目录 (
--exclude
): 这是最直接也最有效的优化手段之一。在打包前仔细分析源目录,排除掉那些临时文件、缓存、日志、版本控制元数据(如.git
、.svn
)或编译生成物(如node_modules
、target
)等。这些文件往往占据大量空间,但对备份来说价值不大。tar -czvf my_backup.tar.gz /path/to/project \ --exclude='*.log' \ --exclude='tmp/' \ --exclude='cache/' \ --exclude='node_modules'注意
--exclude
的路径匹配规则,它通常是相对于你tar
命令所操作的根目录。 -
监控进度 (
pv
命令): 对于长时间运行的tar
操作,没有进度条会让人很焦虑。pv
(Pipe Viewer) 是一个非常棒的工具,可以显示数据通过管道的进度。tar -czf - /path/to/large_directory | pv -s $(du -sb /path/to/large_directory | awk '{print $1}') | cat > my_backup.tar.gz # 或者更简单,但无法预估总大小: # tar -czf - /path/to/large_directory | pv > my_backup.tar.gzpv
会给你一个实时的进度条、传输速度和预计剩余时间,大大提升用户体验。 -
使用
ionice
或nice
调整优先级: 如果tar
操作在生产服务器上运行,你可能不希望它占用过多的I/O或CPU资源,影响其他服务的性能。ionice
可以调整I/O优先级,nice
可以调整CPU优先级。# 以较低的I/O优先级运行tar ionice -c 3 tar -czvf my_backup.tar.gz /path/to/large_directory # 以较低的CPU优先级运行tar nice -n 19 tar -czvf my_backup.tar.gz /path/to/large_directory
这能让
tar
在后台“安静地”工作,减少对前台服务的影响。 考虑文件系统缓存和I/O优化: 对于非常大的归档,文件系统的读写性能是关键。确保你的磁盘I/O不是瓶颈。如果可能,在高速存储(如SSD)上进行打包和解包操作。此外,Linux的内核会进行文件系统缓存,对于重复读写同一个文件,第二次会快很多。但对于一次性的大文件归档,这个效果不明显。
这些技巧的运用,能让
tar这个看似简单的工具,在面对真实世界复杂和庞大的数据时,变得更加高效和可控。毕竟,不是所有场景都允许我们“等它慢慢跑完”。









