【Linux运维】Linux“tar: 从成员名中删除开头的“/”” 问题权威解答
老男孩IT教育
技术博客
2021年11月5日 16:59
当使用Linux打包文件时往往出现如本文标题的提示,该怎么办,到底是为什么?且看老男孩老师的解答。
当使用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。
推荐阅读:
【Linux学习教程】CentOS7系统root密码丢失找回方法(史上最好)
