打包命令:tar

目录

1.打包命令:tar

前面提到的压缩命令【gzip】【bzip2】【xz】仅仅是针对单一文件的压缩。
tar】可将多个目录或软件打包成一个大文件,同时还可以通过【gzip】【bzip2】【xz】的支持,将该文件同时进行压缩。

1.1 tar用法

用法:

[dmtsai@study ~] tar [-z][-j][-J]  [cv] [-f 待建立的新文件名] filename... #打包与压缩
[dmtsai@study ~] tar [-z][-j][-J]  [tv] [-f 既有的tar文件名] #查看文件名
[dmtsai@study ~] tar [-z][-j][-J]  [xv] [-f 既有的tar文件名] [-C 目录] #解压缩
选项与参数:
-A : 新增文件到以存在的备份文件
-B : 设置区块大小
-c : 建立新的备份文件
-C : <目录>	切换工作目录,先进入指定目录再执行压缩/解压缩操作,可用于仅压缩特定目录里的内容或解压缩到特定目录
-d : 记录文件的差别
-x : 从归档文件中提取文件
-t : 列出备份文件的内容
-z : 通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz
-Z : 通过compress指令处理备份文件
-f : <备份文件>	指定备份文件
-v : 显示指令执行过程
-r : 添加文件到已经压缩的文件
-u : 添加改变了和现有的文件到已经存在的压缩文件
-j : 通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2
-v : 显示操作过程
-l : 文件系统边界设置
-k : 保留原有文件不覆盖
-m : 保留文件不被覆盖
-w : 确认压缩文件的正确性
-p : 保留原来的文件权限与属性
-P : 使用文件名的绝对路径,不移除文件名称前的“/”号
-N : <日期格式>	只将较指定日期更新的文件保存到备份文件里
-- -exclude=<范本样式>	排除符合范本样式的文件
-- -remove-files	归档/压缩之后删除源文件

最简单的使用【tar】只要记住:

压缩: tar -jcv -f filename.tar.bz2 [要被压缩的文件或目录名称]
查询: tar -jtv -f filename.tar.bz2
解压缩: tar -jxv -f filename.tar.bz2 -C [要解压缩的目录]
【-j】选项代表有bzip2的支持,文件名最好取为【*.tar.bz2】
【-z】选项代表有gzip的支持,文件名最好取为【*.tar.gz】

打包命令:tar
上图中的【-f】不能写成这样,如:【-jvfc filename.tar.bz2】,这样的话文件名就会变成c

1.2 使用【tar】加入【-z】、【-j】、【-J】参数分别来备份【/etc】目录

[dmtsai@study ~] su - #备份【/etc】需要root权限
[root@study ~] time tar -zpcv -f /root/etc.tar.gz /etc #【time】会显示程序运行的时间
#【-z】 : 通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz
#【-p】 : 保留原来的文件权限与属性
#【-c】 : 建立新的备份文件
#【-v】 : 显示操作过程
...
real  0m0.799s
user  0m0.767s
sys   0m0.046s
[root@study ~] time tar -jpcv -f /root/etc.tar.bz2 /etc
#【-j】 : 通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2
#【-p】 : 保留原来的文件权限与属性
#【-c】 : 建立新的备份文件
#【-v】 : 显示操作过程
...
real  0m1.913s
user  0m1.881s
sys   0m0.038s
[root@study ~] time tar -Jpcv -f /root/etc.tar.xz /etc
#【-J】 :通过xz的支持进行压缩/解压缩
#【-p】 : 保留原来的文件权限与属性
#【-c】 : 建立新的备份文件
#【-v】 : 显示操作过程
...
real  0m9.023s
user  0m8.984s
sys   0m0.086s
[root@study ~] ll /root/etc* #列出当前文件或目录的详细信息,含有时间、读写权限、大小、时间等信息
-rw-r--r--  1  root  root  6721809  Jun  1  00:16  /root/etc.tar.bz2
-rw-r--r--  1  root  root  7758826  Jun  1  00:14  /root/etc.tar.gz
-rw-r--r--  1  root  root  5511500  Jun  1  00:16  /root/etc.tar.xz
[root@study ~] du -sm /etc #【du】Disk Usage,查看磁盘占用空间
#【-s】仅显示总计
#【-m】以MB为单位显示文件大小
28    /etc #实际目录约占28MB

1.3 查看【tar】文件的数据内容(可查看文件名)与备份文件名是否有根目录的意义

[root@study ~] tar -jtv -f /root/etc.tar.bz2
#【-j】:选项代表有bzip2的支持,文件名最好取为【*.tar.bz2】
#【-t】 : 列出备份文件的内容
#【-v】 : 显示操作过程
...
-rw-r--r-- root/root    131  2015-05-25  17:48  etc/locale.conf
-rw-r--r-- root/root     19  2015-05-25  17:56  etc/hostname
-rw-r--r-- root/root  12288  2015-05-25  17:59  etc/aliases.db

从上可知每个文件名都没有了根目录,去掉根目录的目的:主要是为了安全。
打包命令:tar

1.4 将备份的数据解压缩,并考虑特定目录的解压缩操作(-C 选项的应用)

打包命令:tar
具体过程:
解打包操作

[root@study ~] tar -jxv -f /root/etc.tar.bz2
#【-j】选项代表有bzip2的支持,文件名最好取为【*.tar.bz2】
#【-x】: 从归档文件中提取文件
#【-v】: 显示操作过程
[root@study ~] ll
...
drwxr-xr-x  131  root  root  8192  Jun  26  22:14  etc

此时该打包文件会在本目录下进行解压缩操作

如果想将该文件在【/tmp】下解开,可以【cd /tmp】再执行【tar -jxv -f /root/etc.tar.bz2】可以简化(加入【-C】选项)

[root@study ~] tar -jxv -f /root/etc.tar.bz2 -C /tmp
#【-j】选项代表有bzip2的支持,文件名最好取为【*.tar.bz2】
#【-x】: 从归档文件中提取文件
#【-v】: 显示操作过程
[root@study ~] ll /tmp
...
drwxr-xr-x  131  root  root  8192  Jun  26  22:14  etc
...

1.5 仅解开单一文件的方法

  • 上面我们是将整个打包文件的内容全部解开
  • 如果只想解开打包文件内的其中一个文件,使用【-jtv】找到你要的文件名,然后将该文件名解开

范例1:
步骤1:先找到我们要的文件名,假设解开shadow文件

[root@study ~] tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'
#【-j】选项代表有bzip2的支持,文件名最好取为【*.tar.bz2】
#【-t】: 列出备份文件的内容
#【-v】: 显示操作过程
#【grep】全面搜索正则表达式,并将其打印出来。
----------  root/root   721  2015-06-17  00:20  etc/gshadow
----------  root/root  1183  2015-06-17  00:20  etc/shadow-
----------  root/root  1210  2015-06-17  00:20  etc/shadow #要找的文件
----------  root/root   707  2015-06-17  00:20  etc/gshadow-

步骤2:将该文件解开
用法:

[root@study ~] tar -jxv -f 打包文件.tar.bz2 待解开文件名
[root@study ~] tar -jxv -f /root/etc.tar.bz2 etc/shadow #etc.tar.bz2内没有 /etc/shadow
etc/shadow
[root@study ~] ll etc
total 4
----------  1  root  root 1210  Jun  17  00:20  shadow

1.6 打包某目录,但不含该目录下的某些文件

打包命令:tar
假设想打包【/etc/】【/root】这两个目录,但却不想打包【/root/etc*】开头的文件,假设将新的打包文件要放置成为【/root/system.tar.bz2】,打包时应将此文件排除出去(文件自己不要打包自己)此时使用【exclude】

[root@study ~] tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* \
> --exclude=/root/system.tar.bz2  /etc/  /root # \后接【Enter】接 > 只是为了换行接命令
等价于
[root@study ~] tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2  /etc/  /root
# tar -jcv -f [filename] [--exclude ... --exclude...] [/etc/] [/root]
#【-j】选项代表有bzip2的支持,文件名最好取为【*.tar.bz2】
#【-c】 : 建立新的备份文件
#【-v】: 显示操作过程

1.7 仅备份比某时刻还要新的文件

某些情况下,会想要备份新的文件,而非旧文件。以下为两个选项:

选项 包含项
- -newer 表示后续日期包含mtime和ctime
- -newer-mtime 表示后续日期仅包含mtime

步骤1:先由【find】找出比【/etc/passwd】还要新的文件

[root@study ~] find /etc -newer /etc/passwd #此时会显示出比/etc/passwd这个文件的 mtime 还要新的文件名
[root@study ~] ll /etc/passwd
-rw-r--r--  1  root  root  2092  Jun  17  00:20  /etc/passwd

步骤2:使用【tar】进行打包

[root@study ~] tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 --newer-mtime="2015/06/17" /etc/*
#【-j】选项代表有bzip2的支持,文件名最好取为【*.tar.bz2】
#【-c】 : 建立新的备份文件
#【-v】: 显示操作过程
...

步骤3:显示出文件

[root@study ~] tar -jtv -f /root/etc.newer.then.passwd.tar.bz2 | grep -v '/$'
#通过此命令可调出 tar.bz2 内的结尾非 / 的文件名
#【-j】选项代表有bzip2的支持,文件名最好取为【*.tar.bz2】
#【-t】: 列出备份文件的内容
#【-v】: 显示操作过程
#【grep】全面搜索正则表达式,并将其打印出来。

1.8 基本名称:tarfile、tarball

打包命令:tar

1.9 利用管道命令与数据流

打包命令:tar
范例:
将【/etc】整个目录一边打包一边在【/tmp】中解开

[root@study ~] cd /tmp
[root@study tmp] tar -cvf - /etc | tar -xvf -
 # 输出文件变成【-】输入文件也变成【-】
 # 管道命令【|】

打包命令:tar

1.9 解压缩后的SELinux问题

如因某些缘故,系统必须要以备份的数据来恢复到原本的系统中,那要特别注意恢复后,系统的SELinux问题,尤其在系统文件上面(如/etc下的文件)SELinux是比较特别的详细权限设置。SELinux的权限问题可能会让你的系统无法读写某些配置文件内容,导致影响到系统的正常使用

上一篇:10.文件搜索命令5---压缩解压命令()


下一篇:Linux解压文件