今天测试一个打包/var/log下log文件的脚本,但是在执行的时候报错:tar: 从成员名中删除开头的“/”,在反复检测脚本文件后确认没有什么错误,虽然报错,但还是成功进行打包了,如下图:

wKioL1cZ6P2zl7YTAADvAWWJbeA407.jpgwKiom1cZ6G6QI9G5AAFQ2Qa_eVU205.jpg

后来通过查询资料,得知是由绝对路径搞的,下面详细说明一下该情况:

PS:在/tmp/test下新建文件ok.txt和hi.txt,hi.txt内容为空,ok.txt内容如下:

wKioL1cde9mRnUPcAAB6xCtksTw298.jpg

wKiom1cZ6tCRZL-2AACZdOWnmio059.jpg

  1. 手动压缩ok.txt文件

wKioL1cZ69aDhgidAAC3VuPxOOg016.jpgwKiom1cZ66jSf6wvAADdtT5mfFs647.jpg

  1. 当前目录是/root(注意当前目录下没有tmp目录)。进行压缩时报错,但依然成功压缩(同我的脚本如出一辙)。

  2. 解压缩

    经过解压后会在/root(当前目录)下,自动创建tmp目录,此时你会发现,压缩之前的目录是/tmp/test(绝对路径),但是解压之后变成了tmp/test(绝对路径是/root/tmp/test),这其实可以可上面的报错对上了(tar: 从成员名中删除开头的“/”

wKioL1cdfw_SV6stAAEvci2gm1M466.jpg

wKioL1cdgGCiOC5tAACcKrPYzio068.jpg


注:系统默认将开头的“/”删除,其实是出于安全考虑。试想:如果没有删除“/”,在解压缩时很可能将原文件进行覆盖,就算不会覆盖,也可能造成系统错乱,尤其是“/etc”等这些非

常敏感的目录。


  •   如果确实需要将文件压缩为绝对路径的方式,可以使用参数-P(大写P),但是不建议使用。

  1. 首先将当前目录(/root)下的tmp文件夹及压缩文件ok.tar.gz删除

wKiom1cdhgnC6giFAAD_J1J8b4Q033.jpg

  1. 加参数-P进行压缩(注意原文件内容为hello world!)

wKioL1cdiCaxY7CMAAE2zTRvGsM084.jpg

    PS:加参数-P后没有提示删除“/”,而且当前目录也没创建tmp文件夹,说明已压缩为绝对路径。

  3. 在原文件ok.txt里添加任意内容

 wKiom1cdiYGwS-7aAADA9u-EiMA117.jpg

    4. 解压缩

    注:解压时也需要加参数-P,否则依然会报错 wKioL1cdi3Dzqr6QAAEgPtwKt-4321.jpg

    5. 再次查看原文件,发现已被覆盖为压缩前的文件内容

wKioL1cdjB7A7qfxAAB25mrpGQk765.jpg

 PS:如果不是特殊需要,不建议大家使用参数-P