linux tar命令疑难解析(经验总结)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介:

linux tar命令疑难解析(多年经验总结)

一、-T:从文件名清单创建tar归档

1、名单文件                                     
# find / -name "*.txt" -o -name "*.log" > txtlog.lst
2、从文件名清单创建tar归档
# tar -czPf log.tgz -T txtlog.lst
3、补充:文件名匹配选项(同时影响排除和包括模式串):
      --ignore-case          忽略大小写
      --no-ignore-case       匹配大小写(默认)
      --no-wildcards         逐字匹配字符串
      --no-wildcards-match-slash   通配符不匹配‘/’
      --wildcards            use wildcards (default)

二、-P, --absolute-names:不要从文件名中清除引导符‘/’

1、有-P——默认还原到原绝对目录下
# rm -rf /a1;rm -rf /tmp/*;mkdir -p /a1/a2/a3

# tar -cvPWf a1.tar  /a1  补充:-W, --verify在写入以后尝试校验归档
/a1/
/a1/a2/
/a1/a2/a3/
Verify /a1/
Verify /a1/a2/
Verify /a1/a2/a3/

# rm -rf /a1
# tar -xvPf a1.tar
/a1/
/a1/a2/
/a1/a2/a3/
# tree /a1
/a1
`-- a2
    `-- a3

2、无-P——默认还原到当前目录下
# rm -rf /a1
# rm -rf /tmp/*
# mkdir -p /a1/a2/a3
# tar -cvf a1.tar  /a1
tar: Removing leading `/' from member names
/a1/
/a1/a2/
/a1/a2/a3/

# rm -rf /a1
# tar -xvPf a1.tar
a1/
a1/a2/
a1/a2/a3/
# tree /a1
/a1 [error opening dir]
# tree ./a1
./a1
`-- a2
    `-- a3

三、-N,--newer=DATE:只打包更新过的文件

# date
Tue Jul 15 16:23:54 CST 2014
# tar -N "2014/07/14" -cf 15.tar /u01/crs_1/racg        打包压缩比2014/07/14新的文件

# tar -tvf 15.tar |grep -v ^d|awk '{print $4,$NF}'
2014-07-15 u01/crs_1/racg/tmp/ora.rac1.ons.tmp
2014-07-15 u01/crs_1/racg/tmp/ora.RACDB.RACDB1.inst.mode

四、--exclude:打包目录时排除子目录或排除目录中的文件

# mkdir -p /dir1/dir2
# touch    /dir1/{a2.txt,a2.log,f2,jpg}
# ls /dir1
a2.log  a2.txt  dir2  f2  jpg
# touch    /dir1/dir2/{f3.txt,f3.log,f3.jpg}
# ls /dir1/dir2
f3.jpg  f3.log  f3.txt
# tar -cvf dir1.tar /dir1 --exclude dir2 --exclude a2.txt --exclude *.log   (排除子目录dir2时不要加/)
tar: Removing leading `/' from member names     
/dir1/
/dir1/f2
/dir1/jpg

五、打包压缩并分割成多个文件

1、打包并分割
# tar cf - /boot |split -b 5m - boot.tar
# ls
boot.taraa  boot.tarab  boot.tarac  boot.tarad 
2、作为整体解包
# cat boot.tara* | tar x
# du -sh boot
18M    boot
# du -sh /boot
18M    /boot

六、老式的tar增量备份不支持压缩:-u, --update

1、第一次增量
# rm -rf test;mkdir test;touch test/a    #建立测试路径与文件 
# tar   cvf backup.tar test              #备份资料 
test/            
test/a 
2、第二次增量
# touch test/b;echo 123 > test/a         #新增一个档案, 并改动一个档案内容
# tar uvf test.tar test                  #更新 (-u 只能处理未压缩的 tarball)
test/
test/a
test/b
3、还原
# rm -rf test             #清除测试资料  
# tar xf test.tar         #解包 tarball
# tree test               #查看测试资料
test
|-- a
`-- b

七、GNU 格式的tar增量备份支持压缩:-g

1、完整备份 
# rm -rf test;mkdir test;touch test/a               #建立测试环境
# tar -g snapshot -zvcf test_full.tgz test          #执行完整备份
test/
test/a
2、第一次增量备份
# touch test/b                                       #新增
# tar -g snapshot -zvcf test_incremental_1.tgz test  #执行第一次的差量备份
test/
test/b
3、第二次增量备份 
# touch test/c;echo 123 > test/a                       #新增+改变
# tar -g snapshot -zcf test_incremental_2.tgz test   #执行第二次的差量备份 (注意 tarball 名)
# tar ztf test_incremental_2.tgz                     #查看 tarball 内容
test/
test/a
test/c
4、还原
# rm -rf test                                         #清空测试资料 
# tar zxf test_full.tgz                               #开始进行资料还原
# tar zxf test_incremental_1.tgz
# tar zxf test_incremental_2.tgz
5、验证
# ls test
a b c

八、其它技巧

1、解压其中的两个文件
# tar -cf  etc.tar /etc
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets

# tar -xvf etc.tar  etc/sysconfig/network  etc/inittab
etc/inittab
etc/sysconfig/network
# tree etc
etc
|-- inittab
`-- sysconfig
    `-- network
1 directory, 2 files

2、-r, --append:追加文件至归档结尾
# tar -tvf etc.tar etc/sysconfig/network
-rw-r--r-- root/root        48 2011-06-03 23:22:26 etc/sysconfig/network 
# tar -vf etc.tar --delete etc/sysconfig/network
# tar -tvf etc.tar etc/sysconfig/network
tar: etc/sysconfig/network: Not found in archive
tar: Error exit delayed from previous errors
# tar -rvf etc.tar /etc/sysconfig/network
tar: Removing leading `/' from member names
/etc/sysconfig/network

# tar -tvf etc.tar etc/sysconfig/network
-rw-r--r-- root/root        48 2011-06-03 23:22:26 etc/sysconfig/network       选项-r向归档文件中添加文件
3、-C解到指定目录
# rm -rf /etc1;mkdir /etc1
# tar -xf etc.tar -C /etc1 
# ls /etc1
etc

4、用-A拼接两个压缩文件
# tar -cPf a1.tar /etc/inittab
# tar -cPf a2.tar /etc/hosts
# tar -Avf a1.tar a2.tar
# tar -tvf a1.tar
-rw-r--r-- root/root      1869 2014-07-11 14:07:39 /etc/inittab
-rw-r--r-- root/root       322 2011-06-03 23:22:26 /etc/hosts
5、-v, --verbose:详细地列出处理的文件
# tar -cPf b.tar /etc/inittab /etc/hosts
# tar tf b.tar
/etc/inittab
/etc/hosts
# tar tvf b.tar
-rw-r--r-- root/root      1869 2014-07-11 14:07:39 /etc/inittab
-rw-r--r-- root/root       322 2011-06-03 23:22:26 /etc/hosts

6、linux磁带操作
# tar -tf /dev/st0                         查看磁带文件清单
# tar -cf /dev/st0 /var/log               备份指定内容到磁带中
# tar -r  /etc/inittab -f /dev/st0        将文件附加到磁带后面
# tar -xf /dev/st0 /etc/                  解压指定的文件

九、补充:tar --help帮助翻译(摘要)

1、主操作模式:
  -A, --catenate,--concatenate   追加 tar 文件至归档
  -c, --create               创建一个新归档
  -d, --diff, --compare      找出归档和文件系统的差异
      --delete               从归档(非磁带!)中删除
  -r, --append               追加文件至归档结尾
  -t, --list                 列出归档内容
  -u, --update               仅追加比归档中副本更新的文件
  -x, --extract, --get       从归档中解出文件
2、操作修饰符:
  -g, --listed-incremental=FILE  处理新式的 GNU 格式的增量备份
  -G, --incremental              处理老式的 GNU 格式的增量备份
3、重写控制:
  -k, --keep-old-files       解压时不要替换存在的文件
      --keep-newer-files     不要替换比归档中副本更新的已存在的文件
  -W, --verify               在写入以后尝试校验归档
4、操作文件属性:
  -p, --preserve-permissions, --same-permissions 用原来的文件权限还原文件(默认只为root户服务)
5、压缩选项:
  -a, --auto-compress        使用归档后缀名来决定压缩程序
  -j, --bzip2                使用 bzip2 处理归档
  -z, --gzip, --gunzip       使用 gzip 处理归档
  -Z, --compress, --uncompress   使用 compress 处理归档
6、本地文件选择:
  -C, --directory=DIR        改变至目录 DIR
  -T, --files-from=FILE      从 FILE中获取文件名来解压或创建文件
  -X, --exclude-from=FILE    排除 FILE 中列出的模式串
7、提示性输出:
  -v, --verbose              详细地列出处理的文件
  -w, --interactive, --confirmation 每次操作都要求确认

zcs0237 
2014.07.16
More cleaner and more efficient!

本文转自ICT时空dbasdk的博客,原文链接:link,如需转载请自行联系原博主。

相关文章
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
95 8
|
1月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
276 6
|
1月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
80 3
|
1月前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
74 2
|
16天前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
45 14
Linux 10 个“who”命令示例
|
5天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
61 20
|
5天前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
26 7
|
25天前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
31 9
|
24天前
|
缓存 并行计算 Linux
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
29 2
|
23天前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解