文章目录
- 序
- 实操
- 相对路径
- 绝对路径
- 强行操作会怎么样
- 结论
序
使用tar命令打包时,如果打包目标是绝对路径会出现警告tar: 从成员名中删除开头的“/”
根本原因是tar打包时会把目录结构打进去,解包时也会把对应的目录结构解出来
实操
目录结构:/data/dir/a.txt
,打包dir目录
相对路径
通常建议相对路径打包,会先cd到目标所在目录data
打包
归档管理器打开tar包是这样的。0字节是因为a.txt里边没东西,都是空的
删除dir,然后解包。这是正常,也是我们想要的样子
绝对路径
tar在打包时,如果打包目标是绝对路径,会警告
tar: 从成员名中删除开头的“/”
打包,目标是绝对路径,警告tar: 从成员名中删除开头的“/”
归档管理器打开tar包是这样的。(0字节是因为a.txt
里没数据,空内容)
删除dir,然后解包。可以看到,是以data开始的。所以刚才的警告:从成员名中删除开头的“/”
,意思是把打包目标的目录结构从/data/dir
变成data/dir
,这样我们无论在哪个路径下解压,解压出的文件目录结构都是相对于当前路径的。
所以根本原因是因为tar打包时会把目录结构打进去,解包时也会把对应的目录结构解出来
这就造成,如果打入的是绝对路径,解包时就会把原本的/data
下的内容覆盖掉,如果我们是打的是home、root等比较重要的包,解包时很可能会把重要数据覆盖
强行操作会怎么样
现在测试一下,绝对路径解包时会不会覆盖。tar指令有
-P
选项,作用是不去掉开头的/
tar指令man文档
为了测试的更全面,新增了/data/dir/b.txt
,并且写入hello
打包dir,带上-P
(有些选项写法是有顺序的,这里-P
写在前边)
归档管理器打开tar包是这样的
在a.txt写入"哈哈",删除b.txt
解压tar。(同样需要带-P
,否则还是会自动去掉/
变为相对路径的目录结构)
可以看到,文件被覆盖了(b.txt
解包回来了,a.txt
内容被覆盖了)
结论
可以看到,用绝对路径打包时,不加-P
选项,其实也不会造成(解压时覆盖等)安全问题,因为系统自动帮我们去掉了开头的"/"
,将绝对路径变成了相对路径,但是包结构会冗余很多,包含了上层目录。
所以,平时用tar指令打包时,最好是先cd到目标目录下使用相对路径 。用相对路径打包,解包后的文件就是想要打包的文件,不会出现多余的目录结构。