有天涉及到需要对一个ci编译出来的tar包内容进行修改,于是从ci上下载了tar包,在mac解压,修改了部分配置文件,重新tar打包。
再把包放到镜像中进行运行,结果在启动的时候报错不能识别yml文件, 代码里面有个读配置的地方是会加载某个目录下的所有yml文件(包括隐藏文件)。
于是 ls -a 看了下配置目录,发现每一个文件都出现一个同名的隐藏文件,例如:

app.yml
._app.yml

._app.yml 就是 app.yml的隐藏文件,因为._app.yml的内容不是yml格式,所以程序启动出错,神奇的是在Mac上解压自己重新打的tar包,发现并没有这个隐藏文件。

也就是只有在mac下使用tar压缩,在centos,debian等其他系统进行解压后,会出现这个隐藏文件。

于是怀疑还是Mac的问题,因此配置文件的内容隐约看起来包含了mac的一些信息,后来去看了下mac的文档,是因为mac在压缩的时候会把一部分文件的附加属性放在隐藏文件中,这样就可以很好的在另一个mac电脑上还原。

所以:mac压缩 -》 mac解压,这个过程中在解压完,恢复完后,mac会自动删除这个隐藏文件,因此自然就看不到了。
而:mac压缩 -》其他系统解压,其他系统不能识别这个隐藏文件的逻辑,因此不会删除,隐藏文件就被保留了,于是启动出错。

放在隐藏文件的内容基本就是扩展的属性数据,类似一些文件的元信息,mac提供了使用COPYFILE_DISABLE来禁止产生隐藏文件,不过COPYFILE_DISABLE得Mac OS X 10.5+。
如果是10.4-,需要使用COPY_EXTENDED_ATTRIBUTES_DISABLE的工作方式相同。
用法:

COPYFILE_DISABLE=1 tar zcvf xxx.tar.gz xxx

这样产生的压缩文件就没有隐藏文件。


扫码手机观看或分享: