OS X 10.8.4を実行しているMacにMacPorts経由でcoreutilsをインストールしました。ls
可能であれば、[]を使用してcoreutilsのバージョンを設定しました。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
xattrsが存在するときにフラグを表示するためのcoreutilsバージョンを取得するにはどうすればよいですかls
?@
答え1
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のソースコードから@(call)ls
を印刷するロジックを見て、それをcoreutilsが権限の後ろにシンボルを置く場所にリンクしました。 3つの変更は次のとおりです。listxattr
ls
- 含む
xattr.h
- リストに拡張属性があるかどうかを設定します
any_has_acl
。これは、拡張属性を持たないリストが配列権限の後にスペースを挿入するために必要です。 listxattr
@
シンボルを呼び出して条件付きに設定して実際に検証 - 作成された方法は、拡張属性とACLの両方が存在する場合にのみ表示されることに注目する価値があります。@
このパラメータはシンボリックリンクに従わないようにXATTR_NOFOLLOW
指示します。このパラメータはOS Xlistxattr
で使用されます。ls
答え2
私はMark Cohenのコメントが正しいと思います。この機能はcoreutilsバージョンにはないようですls
。実際にcoreutilsを使用する理由がなかったls
ので、組み込みのBSDバージョンに戻りました。