运行 'ls -al' 后的 + 或 @ 标记

pro*_*eek 30 osx ls

在 Mac OS X 中,运行 'ls -al' 会给我这样的结果。

drwxrwxrwx+ 4 smcho 工作人员 136 May 5 09:18 Public
drwxr-xr-x+ 6 smcho 员工 2010 年 2 月 1 日 204 站点
drwxrwxrwx 9 smcho 员工 306 2010 年 2 月 2 日备份
drwxr-xr-x@ 36 smcho 员工 1224 Sep 4 22:51 bin
  • 第一列末尾的 + 或 @ 是什么意思?
  • 这是 Mac 独有的,还是 UNIX 中常见的?

添加

在 Michael Mrozek 的回答之后,我运行了 'ls -ale' 以获得以下信息。

drwx------+ 66 smcho 工作人员 2244 八月 30 日 13:40 图书馆
 0: group:com.apple.sharepoint.group.3 允许搜索
 1: group:everyone 拒绝删除
drwxr-xr-x 3 smcho 工作人员 102 Sep 4 15:01 邮件
drwx------+ 13 smcho 工作人员 442 八月 28 日 17:55 电影
 0: group:everyone 拒绝删除
drwx------+ 6 smcho 工作人员 204 Jul 9 09:37 音乐
 0: group:everyone 拒绝删除
drwx------+ 11 smcho 员工 374 Aug 28 16:55 图片
 0: group:everyone 拒绝删除
drwxr-xr-x 3 smcho 员工 102 Mar 18 15:43 项目
drwxrwxrwx+ 4 smcho 工作人员 136 May 5 09:18 Public
 0: group:everyone 拒绝删除
drwxr-xr-x+ 6 smcho 员工 2010 年 2 月 1 日 204 站点
 0: group:everyone 拒绝删除

那些附加的消息是什么意思?为什么我有一些文件?我不记得为他们做过什么特别的事。

Mic*_*zek 40

@后缀是唯一的Mac OS和被水覆盖着这个问题,所以我从那里抄我的答案,这部分; 这意味着该文件具有扩展属性。您可以使用xattr命令行实用程序来查看和修改它们:

xattr --list filename
xattr --set propname propvalue filename
xattr --delete propname filename
Run Code Online (Sandbox Code Playgroud)

+后缀表示该文件有一个访问控制列表,并共同在任何* nix的支持ACL的。给予ls-e标志将使其显示相关的ACL文件后,并chmod可以用来修改即可。其中大部分来自chmod手册页:

您可以使用 来添加 ACL chmod +a "type:name flag permission,...",然后使用 将其删除chmod -a。的论点chmod相当复杂:

  • 类型usergroup,以阐明name是指用户名还是组名。如果name是明确的,则可以省略类型
  • name是 ACL 适用的用户名或组
  • 标志allow此 ACL 条目是否授予权限,或者deny是否拒绝权限
  • 权限是被修改的实际权限;您可以列出任意数量的列表,以逗号分隔
    • delete -- 允许删除文件/目录
    • readattr -- 读取基本属性
    • writeattr -- 写入基本属性
    • readextattr -- 读取扩展属性(使用xattr, 从上面)
    • writeextattr -- 写入扩展属性
    • readsecurity -- 读取 ACL 信息
    • writesecurity -- 写入 ACL 信息
    • chown -- 更改所有者
    • 特定于目录的权限
      • list -- 显示目录中的文件/文件夹
      • search -- 按名称查找目录中的文件/文件夹
      • add_file -- 在目录中创建一个新文件
      • add_subdirectory -- 在目录中新建一个目录
      • delete_child -- 删除目录中的文件/目录
      • 继承控制
        • file_inherit -- 目录上的 ACL 由文件继承
        • directory_inherit --目录上的 ACL 由子目录继承
        • limit_inherit -- 阻止此目录继承的 ACL 被子目录继承
        • only_inherit -- 由所有新创建的项目继承但被忽略
    • 特定于文件的权限
      • read -- 打开文件进行读取
      • write -- 打开文件进行写入
      • append -- 打开要追加的文件
      • 执行——运行文件

在您的特定示例中,大多数 ACL 条目都是group:everyone deny delete. 即该everyone组中的所有用户(自然是所有人)都没有删除文件夹的权限。我相信,虽然我找不到任何关于它的文档,但这些是阻止您删除基本根文件夹的默认 ACL——如果不是这种情况,有人会纠正这一点。唯一的其他条目是group:com.apple.sharepoint.group.3 allow search,它允许目录服务按名称搜索文件/Library夹中的文件