mac命令行ls -l后显示文件带有扩展属性@的问题

2,784 阅读2分钟

前些天遇到个问题,就是我从sktech上导出的图片不知道为何变成“可执行程序”,这里加引号是因为正常看它没有任何区别,就是个.png图片。但是在终端命令行键入ls -l后,显示

ls -l
可以看到三个图片后缀都带了个@符号,尤其是banner.png,后缀还带了x@。而这个x就代表带是可执行文件。
r:可读、w:可写、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,删掉新建一个.acss就好了

参考:

Apple Communities: How to remove com.apple.quarantine from the files in a tar archive

MacKuba: "ls" on Mac and extended file attributes

Modify File Permissions with chmod