Linux“tar: 从成员名中删除开头的“/”” 问题权威解答[小白加油站]


当使用Linux打包文件时往往出现如本文标题的提示,该怎么办,到底是为什么?

且看老男孩老师的解答。

[root@oldboy ~]# tar zcvf hosts.tar.gz /etc/hosts
tar: 从成员名中删除开头的“/”

1.出现这个提示,并不是语法错误,只是一个打包的安全提示,当做没有看见忽略即可。

 

2.当打包采用全路径,如/etc/hosts路径打包时,就会产生提示。系统提示并自动去掉了/,目的是防止将来解压数据,覆盖备份时的文件

网上充斥着大量的加-P即,tar zcvfP 方式来禁止出现提示是不合适的,误导了很多小白,包括老男孩的学生,其实这样加-P打包是极其不安全的。

因为这有可能在解压时候完全覆盖解压前的文件,即/etc/hosts,导致数据丢失。

 

3.测试区别和覆盖数据的问题

测试加不加-P区别和覆盖数据的问题
1)增加test.txt,并加入数据
[root@oldboy ~]# echo "I am oldboy" >/tmp/test.txt
[root@oldboy ~]# cat /tmp/test.txt 
I am oldboy

2)正常打包(不带-P)
[root@oldboy ~]# tar zcf test.tar.gz /tmp/test.txt 
tar: 从成员名中删除开头的“/”  #<==出现提示。

[root@oldboy ~]# tar tf test.tar.gz 
tmp/test.txt  #<==查看打包后是相对路径,系统自动去掉了/。

3)加-P打包屏蔽提示。
[root@oldboy ~]# tar zcfP test1.tar.gz /tmp/test.txt #<==没了提示。
[root@oldboy ~]# tar tf test1.tar.gz 
tar: 从成员名中删除开头的“/” #<==查看和解压,默认还会出现提示,双重保护。
/tmp/test.txt #<==查看数据是绝对路径,这就是打包数据保留了/。

4)此时如果加-P解压前面用-P打包的压缩包,就会覆盖原始的打包前的文件

a.模拟原始文件改动了内容。
[root@oldboy ~]# echo "good boy" >>/tmp/test.txt 
[root@oldboy ~]# cat /tmp/test.txt
I am oldboy
good boy #<==这是增加的内容

b.解压还原带-P打包的文件,且带-P解压
[root@oldboy ~]# tar xfP test1.tar.gz 
[root@oldboy ~]# cat /tmp/test.txt
I am oldboy ##原始文件已被覆盖了。。刚刚追加的数据没有了。

4.结论:

忽略提示,直接打包就好了,千万不要加-P。

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM