tar命令路径问题分析:`tar: 从成员名中删除开头的“/”`

文章目录

  • 实操
    • 相对路径
    • 绝对路径
      • 强行操作会怎么样
  • 结论

使用tar命令打包时,如果打包目标是绝对路径会出现警告tar: 从成员名中删除开头的“/”

根本原因是tar打包时会把目录结构打进去,解包时也会把对应的目录结构解出来

实操

目录结构:/data/dir/a.txt,打包dir目录

相对路径

通常建议相对路径打包,会先cd到目标所在目录data

打包
在这里插入图片描述
tar命令路径问题分析:`tar: 从成员名中删除开头的“/”`_第1张图片

归档管理器打开tar包是这样的。0字节是因为a.txt里边没东西,都是空的
tar命令路径问题分析:`tar: 从成员名中删除开头的“/”`_第2张图片

删除dir,然后解包。这是正常,也是我们想要的样子
tar命令路径问题分析:`tar: 从成员名中删除开头的“/”`_第3张图片

绝对路径

tar在打包时,如果打包目标是绝对路径,会警告tar: 从成员名中删除开头的“/”

打包,目标是绝对路径,警告tar: 从成员名中删除开头的“/”
tar命令路径问题分析:`tar: 从成员名中删除开头的“/”`_第4张图片
归档管理器打开tar包是这样的。(0字节是因为a.txt里没数据,空内容)
tar命令路径问题分析:`tar: 从成员名中删除开头的“/”`_第5张图片
删除dir,然后解包。可以看到,是以data开始的。所以刚才的警告:从成员名中删除开头的“/”,意思是把打包目标的目录结构从/data/dir变成data/dir,这样我们无论在哪个路径下解压,解压出的文件目录结构都是相对于当前路径的。

所以根本原因是因为tar打包时会把目录结构打进去,解包时也会把对应的目录结构解出来
这就造成,如果打入的是绝对路径,解包时就会把原本的/data下的内容覆盖掉,如果我们是打的是home、root等比较重要的包,解包时很可能会把重要数据覆盖

tar命令路径问题分析:`tar: 从成员名中删除开头的“/”`_第6张图片

强行操作会怎么样

现在测试一下,绝对路径解包时会不会覆盖。tar指令有-P选项,作用是不去掉开头的 /

tar指令man文档
tar命令路径问题分析:`tar: 从成员名中删除开头的“/”`_第7张图片为了测试的更全面,新增了/data/dir/b.txt,并且写入hello
tar命令路径问题分析:`tar: 从成员名中删除开头的“/”`_第8张图片
打包dir,带上-P (有些选项写法是有顺序的,这里-P写在前边)
tar命令路径问题分析:`tar: 从成员名中删除开头的“/”`_第9张图片
归档管理器打开tar包是这样的
tar命令路径问题分析:`tar: 从成员名中删除开头的“/”`_第10张图片
在a.txt写入"哈哈",删除b.txt
tar命令路径问题分析:`tar: 从成员名中删除开头的“/”`_第11张图片
解压tar。(同样需要带-P,否则还是会自动去掉/变为相对路径的目录结构)
tar命令路径问题分析:`tar: 从成员名中删除开头的“/”`_第12张图片
可以看到,文件被覆盖了(b.txt解包回来了,a.txt内容被覆盖了)


结论

可以看到,用绝对路径打包时,不加-P选项,其实也不会造成(解压时覆盖等)安全问题,因为系统自动帮我们去掉了开头的"/",将绝对路径变成了相对路径,但是包结构会冗余很多,包含了上层目录。

所以,平时用tar指令打包时,最好是先cd到目标目录下使用相对路径 。用相对路径打包,解包后的文件就是想要打包的文件,不会出现多余的目录结构。


你可能感兴趣的:(Linux,linux,运维,服务器,shell)