前些天遇到个问题,就是我从sktech上导出的图片不知道为何变成“可执行程序”,这里加引号是因为正常看它没有任何区别,就是个.png图片。但是在终端命令行键入ls -l
后,显示
可以看到三个图片后缀都带了个@符号,尤其是banner.png,后缀还带了x@。而这个x就代表带是可执行文件。
r:可读、w:可写、x:可执行
而正常的文件
ls -l
后是显示什么样的呢?正常情况后缀显示
那么问题来了,ls -l的结果中, 后缀@是什么意思?
在网上查找一番后得出结论:
这个符号的意思是指该文件有一些扩展属性。这些属性是一种元数据,存储在HFS文件系统的特殊位置,通常情况下是不可见的。
在命令行输入ls -l后添加-@选项可以打印这些元数据,如下三种方式均可
ls -l -@
ls -@l
ls -l@
ls -l@
这里展示了文件有一个或多个元数据,比如
com.apple.quarantine
属性,通过Google了解到
File Quarantine是Leopard中的一项新功能,旨在保护用户免受特洛伊木马攻击。它允许从Internet下载文件内容的应用程序将文件置于“隔离”中,以指示该文件可能来自不值得信任的来源。应用程序仅通过将值分配给一个或多个隔离属性来隔离文件,该隔离属性保留有关文件来源的时间和位置的信息。
其他属性大家有兴趣可以自行了解。
如何删除文件的@扩展属性?
可以使用xattr命令,MacOS系统自带的,通过它可以操作 '文件系统的扩展属性'。
- 您可以使用以下命令删除属性:
xattr -d com.apple.quarantine filename
- 或者从整个目录中删除:
xattr -dr com.apple.quarantine diretoryName
最后还是没有弄明白-x是为什么弄上去的,就是为什么banner.png变成了可执行文件了。
倒是知道了为啥小程序自定义组件中的.acss文件也是可执行文件了,因为用支付宝小程序IDE新建组件就会生成可执行文件,是个IDE的bug
参考:
Apple Communities: How to remove com.apple.quarantine from the files in a tar archive
MacKuba: "ls" on Mac and extended file attributes
网友评论