感谢支持
我们一直在努力

Linux基础教程:关于tar

tar这个软件非常强大,光看那help里面的参数就海多了…..我只说一些常用的指令。

-j 使用bzip2来压缩 ; -z 使用gzip来压缩  这两者当然不能同时使用了

-t 查看打包文件内有哪些文件  -x 解压或解打包  -c 打包  这三个指令也只能单一的存在,不能共存

-v 将在解压或压缩过程中的处理的文件显示出来

-f 后面接处理后的名字,比如我们压缩文件,那么-f后面接的一定是压缩后的文件名而不是被压缩的文件!如果是解压的话,那么-f后面接的一定是压缩文件名,而不是解压缩后的文件名。也可以这么说,-f后面就是接的压缩或打包文件。

-C 指定解压缩的目录。

-p 保存被压缩文件的权限不变。

–exclude=file  排除指定的文件

用gzip,bzip2方式来压缩多个文件
 [sunjiebin@rhel6 test]$ ls
libgtkmm-2.4.so.1  loo  ssh_config
以gzip打包多个文件并压缩,并显示被压缩的文件,指定文件名为gzip.tar.gz
[sunjiebin@rhel6 test]$ tar -zcvf gzip.tar.gz libgtkmm-2.4.so.1 loo/ ssh_config
libgtkmm-2.4.so.1
loo/
loo/ab.gz
loo/abc.gz
loo/lo/
loo/lo/abcd.gz
ssh_config
以bzip2打包并压缩,不显示处理的文件,指定文件名为bzip2.tar.gz
[sunjiebin@rhel6 test]$ tar -jcf bzip2.tar.bz2 libgtkmm-2.4.so.1 loo/ ssh_config
[sunjiebin@rhel6 test]$ ll
总用量 7296
-rw-r–r–. 1 sunjiebin hzh  969974 11月 12 15:52 bzip2.tar.bz2
-rw-r–r–. 1 sunjiebin hzh  1116181 11月 12 15:51 gzip.tar.gz
-rw-r–r–. 1 sunjiebin hzh  5373110 11月 12 14:40 libgtkmm-2.4.so.1
drwxr-xr-x. 3 root      root    4096 11月 11 00:43 loo
-rw-r–r–. 1 root      root    2047 11月 11 00:29 ssh_config

注意:f选项只能放在最后,因为f后面直接接的是处理后的文件名,如果用-jcfv的话,处理出来的文件就是v了!如:
[sunjiebin@rhel6 test]$ tar -jcfv test.tar.bz2 ssh_config
tar: test.tar.bz2:无法 stat: 没有那个文件或目录
tar: 由于前次错误,将以上次的错误状态退出
[sunjiebin@rhel6 test]$ tar -jcfv  ssh_config
[sunjiebin@rhel6 test]$ ls
bzip2.tar.bz2  gzip.tar.gz  libgtkmm-2.4.so.1  loo  ssh_config  v

查看压缩的文件内容
[sunjiebin@rhel6 test]$ tar -tvf gzip.tar.gz
-rw-r–r– sunjiebin/hzh 5373110 2011-11-12 14:40 libgtkmm-2.4.so.1
drwxr-xr-x root/root          0 2011-11-11 00:43 loo/
-rw-r–r– root/root          23 2011-11-11 00:40 loo/ab.gz
-rw-r–r– root/root          24 2011-11-11 00:41 loo/abc.gz
drwxr-xr-x root/root          0 2011-11-11 00:43 loo/lo/
-rw-r–r– root/root          25 2011-11-11 00:43 loo/lo/abcd.gz
-rw-r–r– root/root        2047 2011-11-11 00:29 ssh_config
注意,t,x,c是不能共存的!查看bzip2的压缩档也可以这样查看。

解压压缩文件内容
我们先用root用户建一个文件夹root,然后用jxf来解压
[root@rhel6 test]# mkdir root
[root@rhel6 test]# tar -jxf bzip2.tar.bz2 -C root/
[root@rhel6 test]# ll root/
总用量 5256
-rw-r–r–. 1 sunjiebin hzh  5373110 11月 12 14:40 libgtkmm-2.4.so.1
drwxr-xr-x. 3 root      root    4096 11月 11 00:43 loo
-rw-r–r–. 1 sunjiebin hzh    2047 11月 11 00:29 ssh_config
我们再切换到普通用户sunjiebin,再解压看
[root@rhel6 test]# su sunjiebin
[sunjiebin@rhel6 test]$ mkdir user
[sunjiebin@rhel6 test]$ tar -jxf bzip2.tar.bz2 -C user/
[sunjiebin@rhel6 test]$ ll user/
总用量 5256
-rw-r–r–. 1 sunjiebin hzh 5373110 11月 12 14:40 libgtkmm-2.4.so.1
drwxr-xr-x. 3 sunjiebin hzh    4096 11月 11 00:43 loo
-rw-r–r–. 1 sunjiebin hzh    2047 11月 11 00:29 ssh_config
这时候我们会发现解压出来的文件所属者并不一样了。这里就涉及到了tar的两个默认参数-m -p。默认情况下,普通用户tar会加上一个-m的参数,即代表将文件解压为用户自身所有,且权限改为用户默认权限。而超级用户执行tar时,会加上一个-p参数,即保存文件原有的所有者及权限。

解压指定文件
我们先删除libgtkmm-2.4.so.1,然后再将它解压至当前目录
[sunjiebin@rhel6 test]$ rm libgtkmm-2.4.so.1
[sunjiebin@rhel6 test]$ ls
bzip2.tar.bz2  etc.tar.bz2  loo  pbzip2.tar.bz2  root  single  ssh_config  user
[sunjiebin@rhel6 test]$ tar -tf bzip2.tar.bz2
loo/
loo/ab.gz
loo/abc.gz
loo/lo/
loo/lo/abcd.gz
libgtkmm-2.4.so.1
ssh_config
[sunjiebin@rhel6 test]$ tar -jxvf bzip2.tar.bz2 libgtkmm-2.4.so.1
libgtkmm-2.4.so.1
[sunjiebin@rhel6 test]$ ls
bzip2.tar.bz2  libgtkmm-2.4.so.1  pbzip2.tar.bz2  single      user
etc.tar.bz2    loo                root            ssh_config
可以看到,解压成功了。
我们将压缩文件目录下的内容解压至指定目录试试
[root@rhel6 test]# rm loo/ab* -f
[root@rhel6 test]# ls loo/
lo
[root@rhel6 test]# tar -jxvf bzip2.tar.bz2 loo/ab.gz loo/abc.gz -C loo/
loo/ab.gz
loo/abc.gz
[root@rhel6 test]# ls loo/
abc.gz  ab.gz  lo
从这里可以看到,我们将压缩文件中loo/ab.gz  loo/abc.gz两个文件成功解压到了当前目录的loo目录下!


指定不压缩某些文档
–exclude=file,指定的file即为排除在外的列表
[root@rhel6 test]# ls loo/
abc.gz  ab.gz  lo
[root@rhel6 test]# tar -jcvf loo.tar.bz2 loo/ –exclude=ab.gz
loo/
loo/abc.gz
loo/lo/
loo/lo/abcd.gz
[root@rhel6 test]# tar -tf loo.tar.bz2
loo/
loo/abc.gz
loo/lo/
loo/lo/abcd.gz
可以看到我们已经将loo/ab.gz排除在外了。loo.tar.bz2并没有被压缩进来。


将较新的文件添加进压缩包
–newer可以将ctime,mtime比指定时间新的文件添加进去
–newer-mtime则指定只是mtime比较新的被添加
[root@rhel6 test]# tar -tf bzip2.tar.bz2
loo/
loo/ab.gz
loo/abc.gz
loo/lo/
loo/lo/abcd.gz
ssh_config
libgtkmm-2.4.so.1
[root@rhel6 test]# date
2011年 11月 15日 星期二 23:31:50 CST
[root@rhel6 test]# ls
bzip2.tar.bz2  libgtkmm-2.4.so.1  loo  root  single  ssh_config  user
[root@rhel6 test]# touch 2332
[root@rhel6 test]# mkdir -p 2333/2334
[root@rhel6 test]# tar -jcf bzip2.tar.bz2 –newer=”2011/11/15 23:31:50″ *
[root@rhel6 test]# tar -tf bzip2.tar.bz2
2332
2333/
2333/2334/
loo/
loo/lo/
root/
root/loo/
root/loo/lo/
single/
user/
user/loo/
user/loo/lo/
这里可以看到,我们新建的文件2332和新建的目录2333及子目录2334都被添加进了bzip2.tar.bz2里面。而以前的文件则未被添加。

赞(0) 打赏
转载请注明出处:服务器评测 » Linux基础教程:关于tar
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏