MacOS执行ls -l显示@符号的意思是什么?

2018-05-23  本文已影响16人  fullee

原文:https://mackuba.eu/2008/06/30/ls-on-mac-and-extended-file-attributes/
Issue:https://github.com/icngor/icngor.github.io/issues/5

昨天我在使用terminal执行ls -al时,得到了意外对结果:

image
这个符号时什么?我google了一下关键词“mac ls at sign”,但是很多结果告诉我“@”是“symbolic link”符号链接。好吧,我非常确定这些文件并不是符号链接,那么它们究竟是什么?

我在苹果邮件列表中找到了答案。这个符号的意思文件有一些扩展属性。这些属性是一种元数据,存储在HFS文件系统的特殊位置,通常情况下是不可见的。我从Wikipedia page上了解到,很多流行的文件系统都支持元数据——虽然我从未在windows或者linux上听说过。邮件中提到除了“@”,还有“+”这个符号,这意味着它们是一种非标准的权限。

邮件中解释道,可以在ls命令后添加-@选项来打印元数据。我照做后,发现这种文件有一个属性“com.apple.TextEncoding”,还有一些其它的——“com.apple.quarantine”。TextEncoding可以很容易理解,但是quarantine是什么鬼?WTF?

再次google解决了我的疑惑——quarantine标志的意思是,当第一次运行这个程序时提示“xxx是一个应用,是从Internet下载的,你真的想打开它?”所有从Internet下载的文件(不只是应用)都被打上了这个标记。当用户确认打开这个文件时,这个标记被移除,弹窗就不再出现了。

可以通过命令行工具xattr查看和管理这些元数据。它能打印出元数据的属性和值,修改并且移除它们,如下:

$ xattr macruby-interview.html
com.apple.quarantine
$ xattr -l macruby-interview.html
com.apple.quarantine: 0000;485e5e65;Firefox;|org.mozilla.firefox
$ xattr -w pl.psionides foo macruby-interview.html
$ xattr macruby-interview.html
com.apple.quarantine
pl.psionides
$ xattr -l macruby-interview.html
com.apple.quarantine: 0000;485e5e65;Firefox;|org.mozilla.firefox
pl.psionides: foo
$ xattr -d pl.psionides macruby-interview.html
$ xattr -d com.apple.quarantine macruby-interview.html
$ xattr macruby-interview.html
$ ls -l macruby-interview.html
-rw-r--r-- 1 psionides staff 40066 22 cze 16:15 macruby-interview.html

可以看到,元数据不仅存储了文件是从Internet上下载的,还存储了通过什么下载的(firefox),何时被下载的(hex值)。-d属性可以用于移除quarantine属性。

上一篇 下一篇

猜你喜欢

热点阅读