# Linux系统中的tar命令怎么用 ## 一、tar命令概述 ### 1.1 tar命令简介 tar(Tape Archive)是Linux/Unix系统中经典的归档工具,起源于1979年AT&T贝尔实验室。其名称源于"Tape Archive",最初设计用于将文件打包到磁带备份设备。经过40余年的发展,tar已成为Linux系统文件归档的事实标准。 作为GNU核心工具集的一部分,现代tar命令不仅支持基础的打包功能,还集成了压缩(通过调用gzip、bzip2等)、加密、增量备份等高级特性。据统计,在主流Linux发行版的软件仓库中,约83%的源码包采用tar格式分发,足见其重要性。 ### 1.2 基本功能特性 - **归档能力**:将多个文件/目录合并为单个.tar文件 - **保留属性**:完整保存文件权限、所有者、时间戳等元数据 - **压缩支持**:通过参数调用gzip(.gz)、bzip2(.bz2)、xz(.xz)等压缩算法 - **流处理**:支持通过管道与其他命令协同工作 - **大文件支持**:可处理超过8GB的单个文件(取决于具体实现) ## 二、安装与版本检查 ### 2.1 安装方法 大多数Linux发行版已预装GNU tar,如需手动安装: ```bash # Debian/Ubuntu sudo apt install tar # RHEL/CentOS sudo yum install tar # Arch Linux sudo pacman -S tar # 从源码编译安装 wget https://ftp.gnu.org/gnu/tar/tar-latest.tar.gz tar xzf tar-latest.tar.gz cd tar-* ./configure && make && sudo make install
检查当前版本:
tar --version
典型输出:
tar (GNU tar) 1.34 ...
不同版本的特性差异: - 1.30+ 支持稀疏文件(sparse files)的自动检测 - 1.32+ 改进的xz压缩性能 - 1.33+ 新增–zstd压缩选项
基本语法:
tar -cvf 归档名.tar 文件1 文件2 目录1...
参数说明: - -c
:创建新归档 - -v
:显示详细过程 - -f
:指定归档文件名
示例:
# 打包当前目录所有.txt文件 tar -cvf text_files.tar *.txt # 打包整个目录(排除临时文件) tar -cvf project_backup.tar --exclude='*.tmp' my_project/
不解压查看内容:
tar -tvf archive.tar
输出示例:
-rw-r--r-- user/user 1024 2023-05-01 10:00 file1.txt drwxr-xr-x user/user 0 2023-05-01 10:01 dir1/
基础提取:
tar -xvf archive.tar
高级用法:
# 提取到指定目录 tar -xvf archive.tar -C /target/path # 仅提取特定文件 tar -xvf archive.tar file1.txt dir1/file2.log # 保持原始权限(需root) sudo tar -xvpzf backup.tar.gz
算法 | 扩展名 | 压缩率 | 速度 | CPU占用 | 适用场景 |
---|---|---|---|---|---|
gzip | .gz | 中等 | 快 | 低 | 通用场景 |
bzip2 | .bz2 | 高 | 慢 | 中高 | 需要高压缩率 |
xz | .xz | 最高 | 最慢 | 高 | 长期存储/网络传输 |
zstd | .zst | 可调 | 最快 | 低 | 实时压缩/大型文件 |
# gzip压缩(-z) tar -czvf archive.tar.gz /path/to/files # bzip2压缩(-j) tar -cjvf archive.tar.bz2 /path/to/files # xz压缩(-J) tar -cJvf archive.tar.xz /path/to/files # zstd压缩(需要tar 1.31+) tar --zstd -cvf archive.tar.zst /path/to/files # 多线程压缩(pigz替代gzip) tar -cvf - /path/to/files | pigz > archive.tar.gz
# 设置gzip压缩级别(1-9) tar -czvf archive.tar.gz --use-compress-program="gzip -9" /path # xz多线程压缩(需xz 5.2+) tar -cvf - /path | xz -T0 > archive.tar.xz # zstd超快压缩模式 tar --zstd -cvf archive.tar.zst --fast=3 /path
创建完整备份:
tar -g snapshot.snar -czvf full_backup.tar.gz /data
进行增量备份:
tar -g snapshot.snar -czvf incr_backup_$(date +%F).tar.gz /data
恢复流程:
# 先恢复完整备份 tar -xzvf full_backup.tar.gz # 按顺序应用增量备份 tar -g /dev/null -xzvf incr_backup_2023-05-01.tar.gz
使用GPG加密:
# 创建加密归档 tar -czvf - sensitive_data | gpg -c > archive.tar.gz.gpg # 解密提取 gpg -d archive.tar.gz.gpg | tar -xzvf -
# 创建每卷1GB的分卷压缩包 tar -czvf - big_data | split -d -b 1G - big_data.tar.gz.part # 合并并解压 cat big_data.tar.gz.part* | tar -xzvf -
完整系统备份(排除特殊目录):
sudo tar --exclude=/proc --exclude=/sys --exclude=/dev \ --exclude=/mnt --exclude=/tmp --exclude=/run \ -cvpzf system_backup_$(date +%F).tar.gz /
# 压缩30天前的日志 find /var/log -name "*.log" -mtime +30 -exec tar -rvf old_logs.tar {} \; gzip old_logs.tar # 自动清理方案(配合cron) 0 2 * * * /usr/bin/find /var/log -name "*.log" -mtime +30 -exec tar -czf /backup/logs/$(date +\%Y\%m\%d).tar.gz {} +
# 创建规范的源码包 VERSION="1.2.3" tar -czvf project-${VERSION}.tar.gz \ --transform "s,^,project-${VERSION}/," \ --exclude=.git \ --exclude=*.tmp \ src/ docs/ LICENSE README.md
空间不足:
tar: /archive.tar: Wrote only 4096 of 10240 bytes
解决方案:使用-C
参数指定有足够空间的目录
路径过长:
tar: 文件名太长
解决方案:使用--transform
缩短路径或--force-local
参数
权限拒绝:
tar: file: Cannot open: Permission denied
解决方案:使用sudo或检查SELinux上下文
# 创建带校验的归档 tar -cvWf archive.tar /data # 验证已有归档 tar -tvWf archive.tar # 使用sha256sum双重验证 tar -cf - /data | tee >(sha256sum > archive.sha256) | gzip > archive.tar.gz
# 使用支持硬件加速的压缩(如zstd) tar -I zstd -cvf archive.tar.zst /large_dataset # 利用NVMe临时文件 TMPDIR=/nvme_ramdisk tar -czvf archive.tar.gz /data
# 最佳性能参数组合 tar \ --ignore-failed-read \ # 跳过不可读文件 --no-seek \ # 禁用seek优化(提高流处理速度) --blocking-factor=64 \ # 增大块大小 -cf archive.tar /data
特性 | tar | zip |
---|---|---|
权限保留 | 完整保留 | 部分保留 |
符号链接 | 支持 | 需参数支持 |
压缩效率 | 依赖压缩算法 | 中等 |
Windows兼容性 | 需额外软件 | 原生支持 |
--absolute-names
参数(可能覆盖系统文件)--restrict
参数限制危险操作# 记录tar操作到syslog function tar() { logger -t "TAR_CMD" "User $USER ran: tar $@" /bin/tar "$@" }
操作 | 命令示例 |
---|---|
创建压缩包 | tar -czvf file.tar.gz files |
解压到指定目录 | tar -xzvf file.tar.gz -C /path |
列出内容 | tar -tvf file.tar |
追加文件 | tar -rvf file.tar newfile |
验证完整性 | tar -Wvf file.tar |
排除特定文件 | tar --exclude='*.tmp' -czvf... |
”`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。