百度云搭建网站商城网站的建设方案
tar 命令是 Linux/Unix 系统中最常用的文件归档工具,用于将多个文件或目录打包成一个单独的归档文件(通常称为“tar 包”),方便传输、备份或存储。它本身不具备压缩功能,但可以与 gzip、bzip2、xz 等压缩工具结合,实现“打包+压缩”的效果。
一、tar 命令的基本语法
tar 命令的核心语法结构如下:
tar [选项] [归档文件名] [源文件/目录...]
- 选项:控制 tar 的行为(如创建、提取、查看归档等);
- 归档文件名:指定生成的 tar 包名称(通常以 .tar为后缀,若结合压缩则加相应后缀,如.tar.gz);
- 源文件/目录:需要打包的文件或目录(提取时无需指定,只需指定归档文件)。
二、核心选项(必知必会)
tar 的选项非常多,以下是最常用的核心选项(可组合使用):
| 选项 | 英文含义 | 功能说明 | 
|---|---|---|
| -c | create | 创建新的归档文件(打包)。 | 
| -x | extract | 从归档文件中提取文件/目录。 | 
| -t | list | 查看归档文件中的内容(不解压)。 | 
| -f | file | 指定归档文件的名称(必须放在选项的最后,后面直接跟文件名)。 | 
| -v | verbose | 显示详细操作过程(列出处理的文件/目录,推荐加上,方便确认)。 | 
| -z | gzip | 结合 gzip 压缩/解压(归档文件通常以 .tar.gz或.tgz为后缀)。 | 
| -j | bzip2 | 结合 bzip2 压缩/解压(归档文件通常以 .tar.bz2为后缀)。 | 
| -J | xz | 结合 xz 压缩/解压(归档文件通常以 .tar.xz为后缀,压缩率更高,速度较慢)。 | 
| -C | directory | 提取文件时指定目标目录(默认解压到当前目录)。 | 
| -P | absolute-names | 保留文件的绝对路径(默认会去掉路径开头的 /,避免覆盖系统文件)。 | 
| -p | preserve-permissions | 提取文件时保留原文件的权限(默认可能会根据当前用户权限调整)。 | 
| --exclude | exclude | 打包时排除指定的文件/目录(支持通配符 *)。 | 
三、常用场景与示例
1. 仅打包(不压缩,生成 .tar 文件)
- 
创建 tar 包(将 file1.txt、dir1打包为archive.tar):tar -cvf archive.tar file1.txt dir1/- 选项解析:-c(创建)、-v(详细)、-f(指定文件archive.tar)。
- 执行后会显示打包的文件列表(因 -v选项)。
 
- 选项解析:
- 
查看 tar 包内容(不解压,确认里面有哪些文件): tar -tvf archive.tar- 输出会显示文件权限、大小、修改时间等信息。
 
- 
提取 tar 包(解压到当前目录): tar -xvf archive.tar
- 
提取到指定目录(如解压到 ./target_dir,需确保目录存在):tar -xvf archive.tar -C ./target_dir
2. 打包并压缩(结合不同压缩工具)
tar 常与压缩工具结合,生成更小的归档文件,常见组合如下:
| 压缩方式 | 选项 | 归档文件后缀 | 特点(压缩率:xz > bzip2 > gzip;速度:gzip > bzip2 > xz) | 
|---|---|---|---|
| gzip | -z | .tar.gz或.tgz | 最常用,平衡压缩率和速度 | 
| bzip2 | -j | .tar.bz2 | 压缩率略高于 gzip,速度稍慢 | 
| xz | -J | .tar.xz | 压缩率最高,速度最慢(适合归档大文件) | 
示例:
- 
创建 gzip 压缩包(将 docs/打包为docs.tar.gz):tar -czvf docs.tar.gz docs/
- 
解压 gzip 压缩包: tar -xzvf docs.tar.gz # 解压到当前目录 tar -xzvf docs.tar.gz -C ./backup # 解压到 ./backup 目录
- 
创建 xz 压缩包(压缩率更高,适合大文件): tar -cJvf large_files.tar.xz video.mp4 data/
- 
查看 bzip2 压缩包内容: tar -tjvf logs.tar.bz2
3. 高级用法
- 
打包时排除指定文件/目录: 
 例如,打包project/但排除临时文件project/tmp/和.log后缀文件:tar -czvf project.tar.gz --exclude=project/tmp --exclude=*.log project/
- 
保留绝对路径打包/解压: 
 默认情况下,tar 会去掉文件路径开头的/(避免解压时覆盖系统文件)。若需保留绝对路径,需加-P选项:# 打包绝对路径文件(如 /etc/nginx/) tar -czvPf nginx_conf.tar.gz /etc/nginx/# 解压时保留绝对路径(会直接解压到 /etc/nginx/,谨慎使用!) tar -xzvPf nginx_conf.tar.gz
- 
仅提取 tar 包中的特定文件: 
 例如,从archive.tar中只提取file1.txt和dir1/subfile.txt:tar -xvf archive.tar file1.txt dir1/subfile.txt
- 
增量备份(仅打包修改过的文件): 
 结合--newer选项,只打包指定时间后修改的文件(如 2025-08-01 之后):tar -czvf backup_20250801.tar.gz --newer "2025-08-01" /home/user/
四、常见错误与注意事项
- 
忘记 -f选项或位置错误:
 -f必须放在选项最后,且后面直接跟文件名。例如,tar -cvfz archive.tar.gz dir/是错误的(z后面不是文件名),正确应为tar -czvf archive.tar.gz dir/。
- 
压缩选项与文件后缀不匹配: 
 例如,用-z解压.tar.bz2文件会失败,需对应使用-j选项。
- 
权限问题: 
 提取系统目录的 tar 包时(如/etc),需用sudo权限,否则可能因权限不足导致部分文件无法提取。
- 
大型归档文件处理: 
 对于几个 GB 以上的 tar 包,建议加-v选项观察进度,避免误以为命令卡住。
五、总结:常用命令速记
| 功能 | 命令示例 | 
|---|---|
| 创建 gzip 压缩包 | tar -czvf 包名.tar.gz 源文件/目录 | 
| 解压 gzip 压缩包 | tar -xzvf 包名.tar.gz | 
| 创建 bzip2 压缩包 | tar -cjvf 包名.tar.bz2 源文件/目录 | 
| 解压 bzip2 压缩包 | tar -xjvf 包名.tar.bz2 | 
| 查看压缩包内容 | tar -tzf 包名.tar.gz(gzip 格式) | 
| 解压到指定目录 | tar -xzvf 包名.tar.gz -C 目标目录 | 
| 打包时排除文件 | tar -czvf 包名.tar.gz --exclude=排除项 源 | 
掌握这些用法,基本可以应对 Linux 系统中绝大多数文件归档和备份场景。
