今天測試一個打包/var/log下log文件的腳本,但是在執行的時候報錯:tar: 從成員名中刪除開頭的“/”,在反覆檢測腳本文件後確認沒有什麼錯誤,雖然報錯,但還是成功進行打包了,如下圖:
後來通過查詢資料,得知是由絕對路徑搞的,下面詳細說明一下該情況:
PS:在/tmp/test下新建文件ok.txt和hi.txt,hi.txt內容爲空,ok.txt內容如下:
手動壓縮ok.txt文件
當前目錄是/root(注意當前目錄下沒有tmp目錄)。進行壓縮時報錯,但依然成功壓縮(同我的腳本如出一轍)。
解壓縮
經過解壓後會在/root(當前目錄)下,自動創建tmp目錄,此時你會發現,壓縮之前的目錄是/tmp/test(絕對路徑),但是解壓之後變成了tmp/test(絕對路徑是/root/tmp/test),這其實可以可上面的報錯對上了(tar: 從成員名中刪除開頭的“/”)
注:系統默認將開頭的“/”刪除,其實是出於安全考慮。試想:如果沒有刪除“/”,在解壓縮時很可能將原文件進行覆蓋,就算不會覆蓋,也可能造成系統錯亂,尤其是“/etc”等這些非
常敏感的目錄。
如果確實需要將文件壓縮爲絕對路徑的方式,可以使用參數-P(大寫P),但是不建議使用。
首先將當前目錄(/root)下的tmp文件夾及壓縮文件ok.tar.gz刪除
加參數-P進行壓縮(注意原文件內容爲hello world!)
PS:加參數-P後沒有提示刪除“/”,而且當前目錄也沒創建tmp文件夾,說明已壓縮爲絕對路徑。
3. 在原文件ok.txt裏添加任意內容
4. 解壓縮
5. 再次查看原文件,發現已被覆蓋爲壓縮前的文件內容