37. shell命令--tar
功能说明
tar 命令是 Linux 和 Unix 系统中用于打包和解包文件的工具。它可以用来归档多个文件和目录到一个 .tar 文件中,也可以从这些归档文件中解出文件。tar 命令本身不提供压缩功能,但它可以与压缩程序(如 gzip, bzip2, xz 等)结合使用,以减小归档文件的大小。
tar 命令可以为 linux 的文件和目录创建档案。利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用 tar 命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
为什么要区分这两个概念呢?这源于 Linux 中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包( tar 命令),然后再用压缩程序进行压缩( gzip bzip2 命令)。
tar作为一款开源于磁带备份技术的命令行工具,主要负责生成归档文件。该工具能把多个文件和目录整合为单一文件,同时还可以选择是否附加压缩功能。例如,在 Linux 系统环境下,经常利用 tar 命令来制作诸如.tar无压缩版本、.tar.gz 基于 gzip 的压缩版、以及 .tar.bz2 基于 bzip2 的压缩版等各类归档文件。
利用 tar 指令,可便捷地实现多文件乃至整个目录的打包为一个档案文件,便于数据转移、储存及备份。同时,该指令亦提供了解压与解包功能,便于提取所需文档。
语法格式
tar [选项]... [文件]...
SYNOPSIS
tar [OPTION...] [FILE]..
选项说明
选项1
-A或--catenate 新增文件到已存在的备份文件。
-b<区块数目>或--blocking-factor=<区块数目> 设置每笔记录的区块数目,每个区块大小为12Bytes。
-B或--read-full-records 读取数据时重设区块大小。
-c或--create 建立新的备份文件。
-C<目的目录>或--directory=<目的目录> 切换到指定的目录。
-d或--diff或--compare 对比备份文件内和文件系统上的文件的差异。
-f<备份文件>或--file=<备份文件> 指定备份文件。(指定归档文件的名称。注意,-f 选项通常放在选项的最后,后面紧跟归档文件的名称)
-F<Script文件>或--info-script=<Script文件> 每次更换磁带时,就执行指定的Script文件。
-g或--listed-incremental 处理GNU格式的大量备份。
-G或--incremental 处理旧的GNU格式的大量备份。
-h或--dereference 不建立符号连接,直接复制该连接所指向的原始文件。
-i或--ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF。
-j 通过 bzip2 压缩或解压缩归档文件。
-J 通过 xz 压缩或解压缩归档文件。
-k或--keep-old-files 解开备份文件时,不覆盖已有的文件。
-K<文件>或--starting-file=<文件> 从指定的文件开始还原。
-l或--one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制。
-L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算。
-m或--modification-time 还原文件时,不变更文件的更改时间。
-M或--multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
-N<日期格式>或--newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
-o或--old-archive或--portability 将资料写入备份文件时使用V7格式。
-O或--stdout 把从备份文件里还原的文件输出到标准输出设备。
-p或--same-permissions 用原来的文件权限还原文件。
-P或--absolute-names 文件名使用绝对名称,不移除文件名称前的"/"号。
-r或--append 新增文件到已存在的备份文件的结尾部分。(向归档文件中追加文件。)
-R或--block-number 列出每个信息在备份文件中的区块编号。
-s或--same-order 还原文件的顺序和备份文件内的存放顺序相同。
-S或--sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
-t或--list 列出备份文件的内容。(列出归档文件中的内容,不解压)
-T<范本文件>或--files-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件。
-u或--update 仅置换较备份文件内的文件更新的文件。(只将比归档文件中同名文件更新的文件添加到归档文件中)
-U或--unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
-v或--verbose 显示指令执行过程。(在处理文件时显示详细信息)
-V<卷册名称>或--label=<卷册名称> 建立使用指定的卷册名称的备份文件。
-w或--interactive 遭遇问题时先询问用户。
-W或--verify 写入备份文件后,确认文件正确无误。
-x或--extract或--get 从备份文件中还原文件(从归档文件中提取文件)。
-X<范本文件>或--exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件。
-z或--gzip或--ungzip 通过gzip指令处理备份文件。(通过 gzip 压缩或解压缩归档文件)
-Z或--compress或--uncompress 通过compress指令处理备份文件。
-<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度。
--after-date=<日期时间> 此参数的效果和指定"-N"参数相同。
--atime-preserve 不变更文件的存取时间。
--backup=<备份方式>或--backup 移除文件前先进行备份。
--checkpoint 读取备份文件时列出目录名称。
--concatenate 此参数的效果和指定"-A"参数相同。
--confirmation 此参数的效果和指定"-w"参数相同。
--delete 从备份文件中删除指定的文件。
--exclude=<范本样式> 排除符合范本样式的文件。
--group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组。
--help 在线帮助。
--ignore-failed-read 忽略数据读取错误,不中断程序的执行。
--new-volume-script=<Script文件> 此参数的效果和指定"-F"参数相同。
--newer-mtime 只保存更改过的文件。
--no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
--null 从null设备读取文件名称。
--numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称。
--owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户。
--posix 将数据写入备份文件时使用POSIX格式。
--preserve 此参数的效果和指定"-ps"参数相同。
--preserve-order 此参数的效果和指定"-A"参数相同。
--preserve-permissions 此参数的效果和指定"-p"参数相同。
--record-size=<区块数目> 此参数的效果和指定"-b"参数相同。
--recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
--remove-files 文件加入备份文件后,就将其删除。
--rsh-command=<执行指令> 设置要在远端主机上执行的指令,以取代rsh指令。
--same-owner 尝试以相同的文件拥有者还原文件。
--suffix=<备份字尾字符串> 移除文件前先行备份。
--totals 备份文件建立后,列出文件大小。
--use-compress-program=<执行指令> 通过指定的指令处理备份文件。
--version 显示版本信息。
--volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号。
选项2
-A, --catenate, --concatenate 追加 tar 文件至归档
-c, --create 创建一个新归档
-d, --diff, --compare 找出归档和文件系统的差异
--delete 从归档(非磁带!)中删除
-r, --append 追加文件至归档结尾
-t, --list 列出归档内容
--test-label 测试归档卷标并退出
-u, --update 仅追加比归档中副本更新的文件
-x, --extract, --get 从归档中解出文件
操作修饰符:
--check-device 当创建增量归档时检查设备号(默认)
-g, --listed-incremental=FILE 处理新式的 GNU 格式的增量备份
-G, --incremental 处理老式的 GNU 格式的增量备份
--ignore-failed-read 当遇上不可读文件时不要以非零值退出
--level=NUMBER 所创建的增量列表归档的输出级别
-n, --seek 归档可检索
--no-check-device 当创建增量归档时不要检查设备号
--no-seek 归档不可检索
--occurrence[=NUMBER] 仅处理归档中每个文件的第 NUMBER 个事件;
仅当与以下子命令 --delete, --diff, --extract 或是 --list中的一个联合使用时,
此选项才有效。而且不管文件列表是以命令行形式给出或是通过 -T 选项指定的;NUMBER 值默认为 1
--sparse-version=MAJOR[.MINOR] 设置所用的离散格式版本(隐含--sparse)
-S, --sparse 高效处理离散文件
重写控制:
-k, --keep-old-files don't replace existing files when extracting,
treat them as errors
--keep-directory-symlink preserve existing symlinks to directories when
extracting
--keep-newer-files
不要替换比归档中副本更新的已存在的文件
--no-overwrite-dir 保留已存在目录的元数据
--overwrite 解压时重写存在的文件
--overwrite-dir 解压时重写已存在目录的元数据(默认)
--recursive-unlink 解压目录之前先清除目录层次
--remove-files 在添加文件至归档后删除它们
--skip-old-files don't replace existing files when extracting,silently skip over them
-U, --unlink-first 在解压要重写的文件之前先删除它们
-W, --verify 在写入以后尝试校验归档
选择输出流:
--ignore-command-error 忽略子进程的退出代码
--no-ignore-command-error 将子进程的非零退出代码认为发生错误
-O, --to-stdout 解压文件至标准输出
--to-command=COMMAND 将解压的文件通过管道传送至另一个程序
操作文件属性:
--atime-preserve[=METHOD]
在输出的文件上保留访问时间,要么通过在读取(默认
METHOD=‘replace’)后还原时间,要不就不要在第一次(METHOD=‘system’)设置时间
--delay-directory-restore
直到解压结束才设置修改时间和所解目录的权限
--group=名称 强制将 NAME
作为所添加的文件的组所有者
--mode=CHANGES 强制将所添加的文件(符号)更改为权限
CHANGES
--mtime=DATE-OR-FILE 从 DATE-OR-FILE 中为添加的文件设置
mtime
-m, --touch 不要解压文件的修改时间
--no-delay-directory-restore
取消 --delay-directory-restore 选项的效果
--no-same-owner
将文件解压为您所有(普通用户默认此项)
--no-same-permissions
从归档中解压权限时使用用户的掩码位(默认为普通用户服务)
--numeric-owner 总是以数字代表用户/组的名称
--owner=名称 强制将 NAME
作为所添加的文件的所有者
-p, --preserve-permissions, --same-permissions
解压文件权限信息(默认只为超级用户服务)
--preserve 与 -p 和 -s 一样
--same-owner
尝试解压时保持所有者关系一致(超级用户默认此项)
-s, --preserve-order, --same-order
member arguments are listed in the same order as
the files in the archive
Handling of extended file attributes:
--acls Enable the POSIX ACLs support
--no-acls Disable the POSIX ACLs support
--no-selinux Disable the SELinux context support
--no-xattrs Disable extended attributes support
--selinux Enable the SELinux context support
--xattrs Enable extended attributes support
--xattrs-exclude=MASK specify the exclude pattern for xattr keys
--xattrs-include=MASK specify the include pattern for xattr keys
设备选择和切换:
-f, --file=ARCHIVE 使用归档文件或 ARCHIVE 设备
--force-local
即使归档文件存在副本还是把它认为是本地归档
-F, --info-script=名称, --new-volume-script=名称
在每卷磁带最后运行脚本(隐含 -M)
-L, --tape-length=NUMBER 写入 NUMBER × 1024 字节后更换磁带
-M, --multi-volume 创建/列出/解压多卷归档文件
--rmt-command=COMMAND 使用指定的 rmt COMMAND 代替 rmt
--rsh-command=COMMAND 使用远程 COMMAND 代替 rsh
--volno-file=FILE 使用/更新 FILE 中的卷数
设备分块:
-b, --blocking-factor=BLOCKS 每个记录 BLOCKS x 512 字节
-B, --read-full-records 读取时重新分块(只对 4.2BSD 管道有效)
-i, --ignore-zeros 忽略归档中的零字节块(即文件结尾)
--record-size=NUMBER 每个记录的字节数 NUMBER,乘以 512
选择归档格式:
-H, --format=FORMAT 创建指定格式的归档
FORMAT 是以下格式中的一种:
gnu GNU tar 1.13.x 格式
oldgnu GNU 格式 as per tar <= 1.12
pax POSIX 1003.1-2001 (pax) 格式
posix 等同于 pax
ustar POSIX 1003.1-1988 (ustar) 格式
v7 old V7 tar 格式
--old-archive, --portability
等同于 --format=v7
--pax-option=关键字[[:]=值][,关键字[[:]=值]]...
控制 pax 关键字
--posix 等同于 --format=posix
-V, --label=TEXT 创建带有卷名 TEXT
的归档;在列出/解压时,使用 TEXT
作为卷名的模式串
压缩选项:
-a, --auto-compress 使用归档后缀名来决定压缩程序
-I, --use-compress-program=PROG
通过 PROG 过滤(必须是能接受 -d
选项的程序)
-j, --bzip2 通过 bzip2 过滤归档
-J, --xz 通过 xz 过滤归档
--lzip 通过 lzip 过滤归档
--lzma 通过 lzma 过滤归档
--lzop
--no-auto-compress 不使用归档后缀名来决定压缩程序
-z, --gzip, --gunzip, --ungzip 通过 gzip 过滤归档
-Z, --compress, --uncompress 通过 compress 过滤归档
本地文件选择:
--add-file=FILE 添加指定的 FILE 至归档(如果名字以 -
开始会很有用的)
--backup[=CONTROL] 在删除前备份,选择 CONTROL 版本
-C, --directory=DIR 改变至目录 DIR
--exclude=PATTERN 排除以 PATTERN 指定的文件
--exclude-backups 排除备份和锁文件
--exclude-caches 除标识文件本身外,排除包含
CACHEDIR.TAG 的目录中的内容
--exclude-caches-all 排除包含 CACHEDIR.TAG 的目录
--exclude-caches-under 排除包含 CACHEDIR.TAG 的目录中所有内容
--exclude-tag=FILE 除 FILE 自身外,排除包含 FILE
的目录中的内容
--exclude-tag-all=FILE 排除包含 FILE 的目录
--exclude-tag-under=FILE 排除包含 FILE 的目录中的所有内容
--exclude-vcs 排除版本控制系统目录
-h, --dereference
跟踪符号链接;将它们所指向的文件归档并输出
--hard-dereference
跟踪硬链接;将它们所指向的文件归档并输出
-K, --starting-file=MEMBER-NAME
begin at member MEMBER-NAME when reading the
archive
--newer-mtime=DATE 当只有数据改变时比较数据和时间
--no-null 禁用上一次的效果 --null 选项
--no-recursion 避免目录中的自动降级
--no-unquote 不以 -T 读取的文件名作为引用结束
--null -T 读取以空终止的名字,-C 禁用
-N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE
只保存比 DATE-OR-FILE 更新的文件
--one-file-system 创建归档时保存在本地文件系统中
-P, --absolute-names 不要从文件名中清除引导符‘/’
--recursion 目录递归(默认)
--suffix=STRING 在删除前备份,除非被环境变量
SIMPLE_BACKUP_SUFFIX
覆盖,否则覆盖常用后缀(‘’)
-T, --files-from=FILE 从 FILE
中获取文件名来解压或创建文件
--unquote 以 -T
读取的文件名作为引用结束(默认)
-X, --exclude-from=FILE 排除 FILE 中列出的模式串
文件名变换:
--strip-components=NUMBER 解压时从文件名中清除 NUMBER 个引导部分
--transform=EXPRESSION, --xform=EXPRESSION 使用 sed 代替 EXPRESSION 来进行文件名变换
文件名匹配选项(同时影响排除和包括模式串):
--anchored 模式串匹配文件名头部
--ignore-case 忽略大小写
--no-anchored 模式串匹配任意‘/’后字符(默认对
exclusion 有效)
--no-ignore-case 匹配大小写(默认)
--no-wildcards 逐字匹配字符串
--no-wildcards-match-slash 通配符不匹配‘/’
--wildcards use wildcards (default)
--wildcards-match-slash
通配符匹配‘/’(默认对排除操作有效)
提示性输出:
--checkpoint[=NUMBER] 每隔 NUMBER
个记录显示进度信息(默认为 10 个)
--checkpoint-action=ACTION 在每个检查点上执行 ACTION
--full-time print file time to its full resolution
--index-file=FILE 将详细输出发送至 FILE
-l, --check-links
只要不是所有链接都被输出就打印信息
--no-quote-chars=STRING 禁用来自 STRING 的字符引用
--quote-chars=STRING 来自 STRING 的额外的引用字符
--quoting-style=STYLE 设置名称引用风格;有效的 STYLE
值请参阅以下说明
-R, --block-number 每个信息都显示归档内的块数
--show-defaults 显示 tar 默认选项
--show-omitted-dirs
列表或解压时,列出每个不匹配查找标准的目录
--show-transformed-names, --show-stored-names
显示变换后的文件名或归档名
--totals[=SIGNAL] 处理归档后打印出总字节数;当此
SIGNAL 被触发时带参数 -
打印总字节数;允许的信号为:
SIGHUP,SIGQUIT,SIGINT,SIGUSR1 和
SIGUSR2;同时也接受不带 SIG
前缀的信号名称
--utc 以 UTC 格式打印文件修改时间
-v, --verbose 详细地列出处理的文件
--warning=KEYWORD 警告控制:
-w, --interactive, --confirmation
每次操作都要求确认
兼容性选项:
-o 创建归档时,相当于
--old-archive;展开归档时,相当于
--no-same-owner
其它选项:
-?, --help 显示此帮助列表
--restrict 禁用某些潜在的有危险的选项
--usage 显示简短的用法说明
--version 打印程序版本
长选项和相应短选项具有相同的强制参数或可选参数。
除非以 --suffix 或 SIMPLE_BACKUP_SUFFIX
设置备份后缀,否则备份后缀就是“~”。
可以用 --backup 或 VERSION_CONTROL 设置版本控制,可能的值为:
none, off 从不做备份
t, numbered 进行编号备份
nil, existing
如果编号备份存在则进行编号备份,否则进行简单备份
never, simple 总是使用简单备份
--quoting-style 选项的有效参数为:
literal
shell
shell-always
c
c-maybe
escape
locale
clocale
此 tar 默认为:
--format=gnu -f- -b20 --quoting-style=escape --rmt-command=/etc/rmt
--rsh-command=/usr/bin/ssh
实践操作
0. 环境准备
mkdir -p /test/tar/dir1
cd /test/tar
touch dir1/file1.txt
ls
ls dir1/
1. 创建归档文件(打包)
1.1 归档文件(不压缩)
tar -cf test1.tar dir1/ #创建一个名为 test1.tar 的归档文件,包含 dir1/ 目录下的所有文件和子目录
tar cvf test1.tar dir1/ #前面 - 可以省略,-v 选项显示创建过程
1.2 压缩归档文件
tar zcf test2.tar.gz dir1/ #使用 gzip 压缩归档文件(压缩文件)格式为 .tar.gz 或 .tgz
tar jcf test3.tar.bz2 dir1/ #使用 bzip2 压缩归档文件(压缩文件)格式为 .tar.bz2 或 .tbz2
ll #发现大小不一样
2. 查看(列出)归档文件中的内容
ls
tar tf test1.tar #这会列出归档文件中的所有文件和目录,但不会解压它们
tar tvf test2.tar.gz
tar tvf test3.tar.bz2
3. 从归档文件中提取文件(解包,解压)
3.1 默认位置
ls
rm -rf dir1/
ls
tar xf test1.tar #使用 xf 选项进行提取文件
ls
ls dir1/
rm -rf dir1/
tar xf test2.tar.gz #杠可以省略,压缩的归档文件,也可以,若不可以,加个 zxf 选项
ls
ls dir1/
rm -rf dir1/
tar -xf test3.tar.bz2 #使用 xf 选项也可以提取此类压缩文件
ls dir1/
3.2 指定路径
mkdir dir2
ls dir2
tar xf test2.tar.gz -C dir2 #使用 -C 选项后边加上指定的文件的路径,指定解压位置
ls dir2
ls dir2/dir1/
4. 向归档文件中追加文件
#注:在压缩过的 tar 文件中无法进行追加文件操作
ls
touch file2.txt
tar tf test1.tar
tar rf test1.tar file2.txt
tar tf test1.tar
touch dir1/file3.txt
tar tf test2.tar.gz
tar rf test2.tar.gz dir1/file3.txt #报错
tar rf test2.tar.gz file2.txt #报错
tar rf test3.tar.bz2 file2.txt #报错
tar rjf test3.tar.bz2 dir1/file3.txt #报错
tar tf test1.tar
tar rf test1.tar dir1/file3.txt #所以归档文件可以追加,而压缩文件不行追加
tar tf test1.tar
5. 排除特定文件或目录后创建 tar 文件
5.1 忽略文件方法1
ls
mv file2.txt test* dir1/
ls
tar zcf exclude1.tar.gz --exclude=./dir1/'test*' dir1/ #这种 ./ 写法并未生效,原因百度看看
#在使用tar命令打包时,如果你想排除当前目录下的某个文件或文件夹,使用./是不正确的。
#tar命令中使用--exclude选项时,./是多余的,可以直接写文件或文件夹名。
#如果你尝试使用./,比如--exclude=./file_or_directory_to_exclude,这实际上是在指定一个相对路径
#tar会尝试在包内搜索这个相对路径,而不是当前目录下的文件
#这就是为什么你看到--exclude使用./不生效的原因
ls
tar tf exclude1.tar.gz
tar zcf exclude2.tar.gz --exclude=dir1/'test*' dir1/ #直接跟文件的路径就行
tar tf exclude2.tar.gz #成功排除指定
tar zcf exclude3.tar.gz --exclude=dir1/'test*' --exclude=dir1/file3.txt dir1/ #还可以添加
tar tf exclude2.tar.gz
5.2 忽略文件方法2
ls
mv exclude* dir1/
ls
ls dir1/
echo -e "exclude*\ntest*" >excludefile
cat excludefile
tar zcf exclude4.tar.gz --exclude-from excludefile dir1/
tar tf exclude4.tar.gz
5.3 忽略目录路径
ls
mv exclude* dir1
ls dir1/
tar zcf exclude_dirname1.tar.gz -C dir1/ file1.txt #先写一个看看
tar zcf exclude_dirname2.tar.gz -C dir1/ file1.txt file2.txt file3.txt #要打包哪个写哪个
tar tf exclude_dirname1.tar.gz
tar tf exclude_dirname2.tar.gz
tar tf dir1/exclude4.tar.gz
tar zcf exclude_dirname3.tar.gz -C dir1/ *.txt #这样写,不行
tar tf exclude_dirname3.tar.gz #没有内容
tar zcf exclude_dirname3.tar.gz -C dir1/ dir1/*.txt #这样写也不行
tar zcf exclude_dirname3.tar.gz -C dir1/ file{1..3}.txt #这样可以
tar tf exclude_dirname3.tar.gz
tar zcf exclude_dirname4.tar.gz -C dir1/ $(ls dir1/) #使用这种方法进行取所有
tar tf exclude_dirname4.tar.gz
echo $(ls dir1/)
6. 差异与增量备份
6.1 各种备份
a> 完整备份(第一次备份)
ls
mv exclude_dirname* dir1/
ls
ls dir2/
ls dir2/dir1/
cat dir2/dir1/file1.txt
tar -g snapshot -zcf full-1.tar.gz dir2/
tar tf full-1.tar.gz
ls
cat snapshot
b> 差异备份(第二次备份)
echo test >dir2/dir1/file1.txt
cat dir2/dir1/file1.txt
tar -g snapshot -zcf difference-2.tar.gz dir2/
tar tf difference-2.tar.gz
c> 增量备份(第三次备份)
touch dir2/file2.txt
ll dir2/file2.txt
tar -g snapshot -zcf increment-3.tar.gz dir2/
tar tf increment-3.tar.gz
6.2 顺序还原
#按打包顺序进行还原
ls
rm -rf dir2/
tar xf full-1.tar.gz
ls
ls dir2/
ls dir2/dir1/file1.txt
cat dir2/dir1/file1.txt
tar xf difference-2.tar.gz
ls dir2/
cat dir2/dir1/file1.txt
tar xf increment-3.tar.gz
cat dir2/dir1/file1.txt
ls dir2/
6.3 非顺序还原
a 顺序1
ls
rm -rf dir2
tar xf increment-3.tar.gz
ls
ls dir2/
ls dir2/dir1/
tar xf full-1.tar.gz
ls dir2/dir1/
cat dir2/dir1/file1.txt
tar xf difference-2.tar.gz
cat dir2/dir1/file1.txt
ls dir2/
b 顺序2
ls
rm -rf dir2
tar xf increment-3.tar.gz
tar xf difference-2.tar.gz
tar xf full-1.tar.gz
cat dir2/dir1/file1.txt
ls dir2/
tar xf difference-2.tar.gz
tar xf full-1.tar.gz
cat dir2/dir1/file1.txt
ls dir2/
tar xf difference-2.tar.gz
cat dir2/dir1/file1.txt
ls dir2/
7. 使用 -T 及 -X 创建压缩归档文件
ls
echo dir2 >tar_include #要进行归档的目录
echo dir1 >tar_exclude #排除归档的目录
tar zcf mybackup_$(date +%F).tgz -T tar_include -X tar_exclude
ls
tar tf mybackup*
8. 查看压缩包大小
ls dir1/
ll dir1/test*
tar zcf - dir1/test1.tar |wc -c
tar zcf - dir1/test2.tar.gz |wc -c
tar zcf - dir1/test3.tar.bz2 |wc -c
wc -c dir1/test3.tar.bz2
9. 打包软链接文件(参数:-h)
9.1 环境准备
echo test soft link > testfile
ln -s testfile testfile_soft_link
ll testfile*
9.2 分别打包
tar zcf soft1.tar.gz testfile_soft_link #不加参数-h
tar zcfh soft2.tar.gz testfile_soft_link #加参数-h
tar tf soft1.tar.gz
tar tf soft2.tar.gz
9.3 分别解压
mkdir test{1,2}
tar xf soft1.tar.gz -C test1
tar xf soft2.tar.gz -C test2
ls test1/
ls test2/
ll test1/testfile_soft_link
ll test2/testfile_soft_link
cat test1/testfile_soft_link
cat test2/testfile_soft_link
注意事项
- 使用 tar 时,请确保 -f 选项紧跟在选项之后,并直接指向要创建的或要提取的档案文件的名称。
- 压缩和解压缩时,请确保使用与打包时相同的压缩选项(z、j 或 J)。
- tar 的输出默认是写入标准输出的,但使用 -f 选项可以指定输出到文件。
- tar 还可以用于文件的备份和恢复,因为它能够保留文件的所有权限、时间戳、链接等属性。
- tar命令的选项前可以省略“-”,在解压时无需选择“-z”或“-j”,命令可以自行识别
- tar命令通过-zcf 选项创建打包压缩文件时(.tar.gz = .tgz)
其它拓展
zip格式
压缩: zip -r [目标文件名].zip [原文件/目录名]
解压: unzip [原文件名].zip
注:-r参数代表递归
tar格式(该格式仅仅打包,不压缩)
打包:tar -cvf [目标文件名].tar [原文件名/目录名]
解包:tar -xvf [原文件名].tar
注:c参数代表create(创建),x参数代表extract(解包),v参数代表verbose(详细信息),f参数代表filename(文件名),所以f后必须接文件名。
tar.gz格式
方式一:利用前面已经打包好的tar文件,直接用压缩命令。
压缩:gzip [原文件名].tar
解压:gunzip [原文件名].tar.gz
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -zcvf [目标文件名].tar.gz [原文件名/目录名]
解压并解包: tar -zxvf [原文件名].tar.gz
注:z代表用gzip算法来压缩/解压。
tar.bz2格式
方式一:利用已经打包好的tar文件,直接执行压缩命令:
压缩:bzip2 [原文件名].tar
解压:bunzip2 [原文件名].tar.bz2
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -jcvf [目标文件名].tar.bz2 [原文件名/目录名]
解压并解包: tar -jxvf [原文件名].tar.bz2
注:小写j代表用bzip2算法来压缩/解压。
tar.xz格式
方式一:利用已经打包好的tar文件,直接用压缩命令:
压缩:xz [原文件名].tar
解压:unxz [原文件名].tar.xz
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Jcvf [目标文件名].tar.xz [原文件名/目录名]
解压并解包: tar -Jxvf [原文件名].tar.xz
注:大写J代表用xz算法来压缩/解压。
tar.Z格式(已过时)
方式一:利用已经打包好的tar文件,直接用压缩命令:
压缩:compress [原文件名].tar
解压:uncompress [原文件名].tar.Z
方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Zcvf [目标文件名].tar.Z [原文件名/目录名]
解压并解包: tar -Zxvf [原文件名].tar.Z
注:大写Z代表用ncompress算法来压缩/解压。另,ncompress是早期Unix系统的压缩格式,但由于ncompress的压缩率太低,现已过时。
jar格式
压缩:jar -cvf [目标文件名].jar [原文件名/目录名]
解压:jar -xvf [原文件名].jar
注:如果是打包的是Java类库,并且该类库中存在主类,那么需要写一个META-INF/MANIFEST.MF配置文件,内容如下:
Manifest-Version: 1.0
Created-By: 1.6.0_27 (Sun Microsystems Inc.)
Main-class: the_name_of_the_main_class_should_be_put_here
然后用如下命令打包:
jar -cvfm [目标文件名].jar META-INF/MANIFEST.MF [原文件名/目录名]
这样以后就能用“java -jar [文件名].jar”命令直接运行主类中的public static void main方法了。
7z格式
压缩:7z a [目标文件名].7z [原文件名/目录名]
解压:7z x [原文件名].7z
注:这个7z解压命令支持rar格式,即:
7z x [原文件名].rar
2231

被折叠的 条评论
为什么被折叠?



