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