파일 소유자 찾기

파일 소유자 찾기

Bash 스크립트에서 파일 소유자를 반환하는 방법을 찾고 있습니다. "gawk"를 사용하면 가능할 것 같지만 솔직히 실마리도 없고 온라인에 게시된 이해 가능한 답변도 없는 것 같습니다.

답변1

이를 위해 사용됩니다 stat.

GNU 시스템에서:

  • 소유자의 사용자 이름을 얻으려면:

    stat -c '%U' file.txt
    
  • 소유자의 사용자 ID(UID)를 얻으려면:

    stat -c '%u' file.txt
    

파일이 file.txt.


FreeBSD 및 Mac OS X에서 사용 가능(@cas님 감사합니다):

  • 사용자 이름:

    stat -f '%Su' file.txt
    
  • UID의 경우:

    stat -f '%u' file.txt
    

답변2

ls -l foo

필드 #3은 소유자이고 필드 #4는 그룹입니다. 그러므로:

set -- $(ls -l foo) ; echo $3

하지만통계자료가능하다면 더 좋을 것 같습니다.

답변3

zsh쉘에는 모듈에 자체 내장 명령이 있다는 점에 유의하십시오 stat(그리고 GNU 및 BSD가 자체 명령을 추가하기 오래 전에 해당 명령이 있었습니다) zsh/stat.

zmodload zsh/stat
stat +uid file

심볼릭 링크의 확인된 소유자 uid를 출력합니다 file. 심볼릭 링크의 경우 궁극적으로 파일 대신 심볼릭 링크의 소유자를 확인하려면 이 -L옵션을 추가하세요( stata lstat()대신 a stat()).

-s사용자 이름으로 번역하는 옵션을 추가합니다 uid. 해당 uid에 사용자 이름이 여러 개 있으면 보고됩니다 getpwuid(). uid에 사용자 이름이 없으면 uid는 번역되지 않은 상태로 유지됩니다.

GNU coreutils stat명령이 추가되기 오래 전에 GNU는 조건자를 통해 이 작업을 수행 find할 수 있었습니다 .-printf

find file -prune -printf '%U\n'

uid를 일치하는 사용자 이름으로 변환하여 %U대체 되었습니다 . 기호 링크를 따라 최종 대상의 소유자를 얻는 옵션이 %u추가되었습니다 .-H

POSIXly에서는 다음에 의존해야 합니다 ls.

LC_ALL=C ls -nd file | LC_ALL=C awk '{print $3; exit}'

-nuid를 사용자 이름 으로 변환하는 것으로 대체합니다 -l(사용자 이름에 공백이나 탭이 포함되어 있지 않다고 가정). -L심볼릭 링크를 따라가는 옵션을 추가합니다 .

관련 정보