![Mac에서 coreutils ls를 사용하여 확장 속성 보기](https://linux55.com/image/49388/Mac%EC%97%90%EC%84%9C%20coreutils%20ls%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%99%95%EC%9E%A5%20%EC%86%8D%EC%84%B1%20%EB%B3%B4%EA%B8%B0.png)
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가 권한 뒤에 기호를 넣는 위치에 연결했습니다. 세 가지 변경 사항은 다음과 같습니다.listxattr
ls
- 포함하다
xattr.h
- 목록에 확장 속성이 있는지 여부를 설정합니다
any_has_acl
. 이는 확장 속성이 없는 목록이 배열 권한 뒤에 공백을 삽입하는 데 필요합니다. listxattr
@
기호를 호출하고 조건부로 설정하여 실제 확인 - 작성된 방식은 확장된 속성과 ACL이 모두 존재하는 경우에만 표시된다는 점에 주목할 가치가 있을 것입니다.@
이 매개변수는 심볼릭 링크를 따르지 않도록 XATTR_NOFOLLOW
지시합니다 . 이 매개변수는 OS X listxattr
에서 사용됩니다.ls
답변2
저는 Mark Cohen의 의견이 정확하다고 생각합니다. 이 기능은 coreutils 버전에는 없는 것 같습니다 ls
. 실제로 coreutils를 사용할 이유가 없었기 ls
때문에 내장 BSD 버전으로 다시 전환했습니다.