tar命令(对目录有rx权限,root权限)
创建tar包
# 创建tar包,确保用户有权限访问目标文件
[lyk@centos7 ~]$ tar -cf etc.tar /etc
tar: 从成员名中删除开头的“/”
tar: /etc/crypttab:无法 open: 权限不够
tar: /etc/logrotate.d/named:无法 open: 权限不够
# 没有权限读取的文件,无法打包
#创建归档文件
[root@server ~ 14:27:48]# tar -cf etc.tar /etc
tar: 从成员名中删除开头的“/”
# 再次打包,如果存在相同的tar包,不会提示是否覆盖
[root@centos7 ~]# tar -cf etc.tar /etc
#查看归档内容
[root@server ~ 14:54:31]# tar -t -f etc.tar
etc/
etc/fstab
etc/crypttab
etc/mtab
etc/resolv.conf
......
#搜索特定文件,配合grep过滤
[root@server ~ 14:55:08]# tar -t -f etc.tar | grep limits.conf
etc/security/limits.conf
#提取特定文件
[root@server ~ 14:56:09]# tar -x -f etc.tar etc/security/limits.conf
#安装 tree 命令
[root@server ~ 14:56:41]# yum install -y tree
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
......
#查看提取的文件结构
[root@server ~ 14:57:03]# tree etc
etc
└── security
└── limits.conf
1 directory, 1 file
# 提取部分文件
[root@centos7 ~]# tar -t -f etc.tar|grep etc/host
etc/host.conf
etc/hosts
etc/hostname
[root@centos7 ~]# tar -xf etc.tar $(tar -t -f etc.tar|grep etc/host)
[root@centos7 ~]# tree etc
etc
├── host.conf
├── hostname
└── hosts
0 directories, 3 files
tar包压缩管理
# **三种压缩工具安装**
[root@centos7 ~]# yum install gzip bzip2 xz
# gzip压缩,时间最快
[root@server ~ 15:18:04]# time tar -czf etc.tar.gz /etc
tar: 从成员名中删除开头的“/”
real 0m0.813s
user 0m0.741s
sys 0m0.069s
# bzip2 压缩
[root@server ~ 15:23:35]# time tar -cjf etc.tar.bz2 /etc
tar: 从成员名中删除开头的“/”
real 0m1.772s
user 0m1.710s
sys 0m0.058s
# xz 压缩,时间最长
[root@server ~ 15:23:02]# time tar -cJf etc.tar.xz /etc
tar: 从成员名中删除开头的“/”
real 0m8.961s
user 0m8.517s
sys 0m0.404s
# 查看压缩的 tar 包不需要指定压缩选项
[root@centos7 ~]# tar -tf etc.tar.gz
tar包中追加文件
#创建一个文件
[root@client ~ 17:17:41]# touch 321.txt
[root@client ~ 17:17:50]# pwd
/root
#追加放入tar包,!!无法放入etc.tar.gz
# -r 选项(追加文件到归档)不能用于压缩的 tar 文件(如 .tar.gz、.tar.bz2、.tar.xz)。压缩后的归档文件是一个整体,无法直接追加内容。
#报错
[root@client ~ 17:18:02]# tar -r -f etc.tar.gz /root/321.txt
tar: 无法更新压缩归档文件
tar: Error is not recoverable: exiting now
#放入
[root@client ~ 17:18:37]# tar -r -f etc.tar /root/321.txt
tar: 从成员名中删除开头的“/”
#过滤查看
[root@client ~ 17:19:33]# tar -tf etc.tar |grep 321.txt
root/321.txt
删除tar包中文件
#删除
[root@client ~ 17:23:07]# tar --delete -f etc.tar root/321.txt
#过滤查不到已经删除
[root@client ~ 17:23:42]# tar -tf etc.tar |grep 321.txt