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

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

可以看到三个图片后缀都带了个@符号,尤其是banner.png,后缀还带了x@。而这个x就代表带是可执行文件。
r:可读、w:可写、x:可执行

而正常的文件ls -l后是显示什么样的呢?

那么问题来了,ls -l的结果中, 后缀@是什么意思? 在网上查找一番后得出结论:

这个符号的意思是指该文件有一些扩展属性。这些属性是一种元数据,存储在HFS文件系统的特殊位置,通常情况下是不可见的。

在命令行输入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

转载于:https://juejin.im/post/5d073bfb6fb9a07ef06f941c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值