Просмотреть расширенные атрибуты с помощью coreutils ls на Mac

У меня есть coreutils, установленный через MacPorts на моем Mac с OS X 10.8.4. Я хотел бы использовать версию coreuss ls [ (GNU coreutils) 8.21 ], если она доступна:

 if [ -e /opt/local/libexec/gnubin ]; then alias ls='/opt/local/libexec/gnubin/ls --color=auto' else alias ls='/bin/ls -G' fi 

Когда я запускаю ls -l в каталоге с файлами, имеющими расширенные атрибуты (xattrs), я ожидаю увидеть знак @ после разрешений в этих списках. Однако я не вижу знака @ . Если я запустил /bin/ls -l , я получаю знак @ .

Список файлов из /bin/ls -l :

 -rw-r--r--@ 1 zev.eisenberg staff 132887 Jul 19 16:24 flowchart.graffle 

Список файлов из ls -l (с использованием coreutils):

 -rw-r--r-- 1 zev.eisenberg staff 132887 Jul 19 16:24 flowchart.graffle 

Как я могу получить версию ядра lss, чтобы показать мне знак @ когда присутствуют xattrs?

2 Solutions collect form web for “Просмотреть расширенные атрибуты с помощью coreutils ls на Mac”

Я считаю, что комментарий Марка Коэна верен: эта функциональность, по-видимому, отсутствует в версии ядра ls . У меня на самом деле не было веских оснований для использования coreutils ls , поэтому я переключился на встроенную версию BSD.

Вы можете добавить расширенные атрибуты в coreutils ls. Это основано на coreutils-8.22:

 *************** *** 59,62 **** --- 59,64 ---- #include <wchar.h> + #include <sys/xattr.h> + #if HAVE_LANGINFO_CODESET # include <langinfo.h> *************** *** 3056,3059 **** --- 3058,3062 ---- : ACL_T_YES)); any_has_acl |= f->acl_type != ACL_T_NONE; + any_has_acl |= listxattr(f->name, NULL, 0, XATTR_NOFOLLOW); if (err) *************** *** 3811,3814 **** --- 3814,3819 ---- if (! any_has_acl) modebuf[10] = '\0'; + else if (listxattr(f->name, NULL, 0, XATTR_NOFOLLOW) > 0) + modebuf[10] = '@'; else if (f->acl_type == ACL_T_SELINUX_ONLY) modebuf[10] = '.'; 

В основном я смотрел в источнике OS X ls чтобы найти логику для печати @ (вызов listxattr ) и подключил его к тому, где coreutils ls помещает символ после разрешений. Эти три изменения:

  1. В том числе xattr.h
  2. Установите any_has_acl если какой-либо из списков имеет расширенные атрибуты – это необходимо для того, чтобы листинги, у которых нет расширенных атрибутов, имеют место, вставленное после разрешений на линию
  3. listxattr фактическую проверку, вызывая listxattr и условно устанавливая символ @ – может быть, стоит отметить, что они, как это написано, будут отображаться только @ если есть как расширенные атрибуты, так и ACL

Аргумент XATTR_NOFOLLOW указывает listxattr не следовать символическим listxattr . Этот аргумент используется в OS X ls .

  • Как использовать расширенные атрибуты для предварительного просмотра изображения?
  • Невозможно установить атрибут файла
  • найти файлы с расширенными атрибутами
  • Каков эффект «chattr + a» в каталоге
  • пусть rm обрезает файлы
  • Нормально ли, что мне нужно u + w для установки расширенных атрибутов файловой системы?
  • что делает «а» в chattr + ia?
  • Скажите, скрыта ли папка / файл в Mac OS X
  • Возможности файла Linux теряются при изменении файла. Это ожидаемое поведение?
  • Не удалось запустить 'sudo chmod + w / etc / hosts'
  • Что делает команда chattr + c / some / dir /?
  • Linux и Unix - лучшая ОС в мире.