目录
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】
上图中的【-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
从上可知每个文件名都没有了根目录,去掉根目录的目的:主要是为了安全。
1.4 将备份的数据解压缩,并考虑特定目录的解压缩操作(-C 选项的应用)
具体过程:
解打包操作
[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 打包某目录,但不含该目录下的某些文件
假设想打包【/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
1.9 利用管道命令与数据流
范例:
将【/etc】整个目录一边打包一边在【/tmp】中解开
[root@study ~] cd /tmp
[root@study tmp] tar -cvf - /etc | tar -xvf -
# 输出文件变成【-】输入文件也变成【-】
# 管道命令【|】
1.9 解压缩后的SELinux问题
如因某些缘故,系统必须要以备份的数据来恢复到原本的系统中,那要特别注意恢复后,系统的SELinux问题,尤其在系统文件上面(如/etc下的文件)SELinux是比较特别的详细权限设置。SELinux的权限问题可能会让你的系统无法读写某些配置文件内容,导致影响到系统的正常使用