天天看点

linux常用命令之tar

这两天在研究tar命令,看了很多前辈的博客。参考前辈的文章自己做实验写一下心得。

擒贼先擒王这篇文章写的很仔细。参数详情请参考链接。

只用tar命令是打包的意思,发现一个有意思的事。先写一下吧

在根目录下创建名为tar的文件夹,并创建四个文本文件。

这里多用了几个命令,是为了练习一下。

rm -rf 是删除命令,-r 是删除目录的意思, -f 是强制删除。生产环境下不要乱用!!

例一
[[email protected] /]# mkdir tar
[[email protected] /]# cd tar
[[email protected] tar]# ls
[[email protected] tar]# man help > 1.txt 		//将help命令的详细信息重定向到1.txt
[[email protected] tar]# cat 1.txt > 2.txt		//将1.txt文件内容重定向到2.txt
[[email protected] tar]# cp 2.txt 3.txt		//复制2.txt并重命名为3.txt
[[email protected] tar]# touch 4.txt		//新建4.txt空文档
[[email protected] tar]# ls
1.txt  2.txt  3.txt  4.txt

           

用 du 命令查看文档大小

例二
[[email protected] tar]# du -sh *		//查看本目录所有文件的大小
104K	1.txt
104K	2.txt
104K	3.txt
0	4.txt

           

将 tar 文件夹下所有的txt文件打包(仅打包)成 all.tar

例三
[[email protected] tar]# tar -cvf all.tar *.txt		//加上-v参数显示打包过程
1.txt
2.txt
3.txt
4.txt

           

查看打包后文件大小

例四
[[email protected] tar]# du -sh all.tar		//查看指定文件的大小
312K	all.tar

           

重新写入内容并查看其大小

例五
[[email protected] tar]# man ls > 4.txt				//将信息重定向到文件内
[[email protected] tar]# tar -uf all.tar 4.txt		//用-u参数更新包内内容
[[email protected] tar]# man ls >> 4.txt			//将信息追加重定向到文件
[[email protected] tar]# du -sh 4.txt
20K	4.txt


           

不知道这是什么情况?明明已经更新文件了可是包里有好几个 4.txt 文件。

例六
[[email protected] tar]# tar -uf all.tar 4.txt		//用-u参数更新包内内容
[[email protected] tar]# tar -tf all.tar			//-t参数不解压的情况下查看包内文件
1.txt
2.txt
3.txt
4.txt
4.txt


           

包的大小也不对,可是解压出来后就只有一个 4.txt 了?这是咋回事,没弄明白。只是包内文件确实更新了!先记下,有空再仔细研究下原理。

例七
[[email protected] tar]# du -sh all.tar		
768K	all.tar
[[email protected] tar]# mkdir new			//新建文件夹
[[email protected] tar]# tar -xf all.tar -C /tar/new	 	//	-x参数解压,-C (大写)用于指定解压文件夹
[[email protected] tar]# cd new
[[email protected] new]# ls
1.txt  2.txt  3.txt  4.txt
[[email protected] new]# du -sh 
332K	.

           

增加新文件

先把原来的文件删了,再重新创建一个。查看包内内容那么别扭呢?

例八
[[email protected] tar]# rm -rf all.tar
[[email protected] tar]# tar -cf all.tar *.txt
[[email protected] tar]# ls
1.txt  2.txt  3.txt  4.txt  all.tar  
[[email protected] tar]# touch 5.txt
[[email protected] tar]# tar -rf all.tar 5.txt		//-r 参数追加写入文件
[[email protected] tar]# tar -tf all.tar
1.txt
2.txt
3.txt
4.txt
5.txt

           

以上几个参数不能叠加使用,即 tar 后必须且只能出现一个,不能同时打包、更新、追加、解压、查看。

-f 参数只能是最后一个参数,-f 参数后紧跟打包后的文件名。

压缩参数 -z -j

下面再玩玩压缩参数吧,单独使用 tar 不加 -z 或 -j 参数文件只会是打包。不会压缩

先试试 -z 参数,gzip格式打包一下看一下效果吧!

例九
[[email protected] tar]# tar -czvf all.tar.gz *.txt && du -sh *
1.txt
2.txt
3.txt
4.txt
232K	1.txt
104K	2.txt
104K	3.txt
20K	4.txt
112K	all.tar.gz

           

效果显而易见,压缩率还是很高的

下面来玩一下解压某个文件夹内的指定文件/文件夹吧!

又学了一招,命令回传码 (与 或)

与 || 前面的命令执行失败后执行后面的命令。

或 && 是前面的命令执行成功后执行后面的命令

例十
[[email protected] tar]# ls /tar/new || mkdir /tar/new && touch /tar/new/5.txt && ls
ls: cannot access /tar/new: No such file or directory
1.txt  2.txt  3.txt  4.txt  new
[[email protected] tar]# tar -czvf all.tar.gz * && rm -rf new && ls
1.txt
2.txt
3.txt
4.txt
new/
new/5.txt
1.txt  2.txt  3.txt  4.txt  all.tar.gz

           

首先在本目录下解压

要知道路径是个什么东西

绝对路径 :从根目录开始写起的文件或目录名称

相对路径 :相对于当前路径的写法

需要注意的是命令后的路径为 相对路径,实验多次如果路径输错会报警,命令执行不成功。

看看错误的示例

例十一
[[email protected] tar]# tar -xzvf all.tar.gz /tar/new/5.txt && ls
tar: /tar/new/5.txt: Not found in archive
tar: Exiting with failure status due to previous errors

           

以下是正确的示例

例十二
[[email protected] tar]# tar -xzvf all.tar.gz new/5.txt
										//注意路径为相对路径
new/5.txt		//成功

           

再来玩一下在别的目录下解压到某一个指定的目标吧

例十三
[[email protected] tar]# rm -rf all.tar.gz
[[email protected] tar]# ll
total 268
-rw-r--r--. 1 root root  54284 May 16 16:42 1.txt
-rw-r--r--. 1 root root 103499 May  8 05:53 2.txt
-rw-r--r--. 1 root root 103499 May  8 05:53 3.txt
-rw-r--r--. 1 root root     11 May 15 17:10 4.txt
drwxr-xr-x. 2 root root     18 May 16 17:40 new
[[email protected] tar]# cd /home
[[email protected] home]# tar -czvf all.tar.gz /tar/* && rm -rf /tar/new
tar: Removing leading `/' from member names		//试了很多遍也没有把这个警给去掉,没找到原因
/tar/1.txt
/tar/2.txt
/tar/3.txt
/tar/4.txt
/tar/new/
/tar/new/5.txt
[[email protected] home]# tar -xzvf all.tar.gz tar/new/5.txt -C /tar/ && ll /tar
//-C 参数指解压到指定目录,						这个路径是相对于 /home 目录的
tar/new/5.txt
total 268
-rw-r--r--. 1 root root  54284 May 16 16:42 1.txt
-rw-r--r--. 1 root root 103499 May  8 05:53 2.txt
-rw-r--r--. 1 root root 103499 May  8 05:53 3.txt
-rw-r--r--. 1 root root     11 May 15 17:10 4.txt


           

哎呀大功告成总算完工了,继续研究下一个命令。