Linux에서 파일 권한을 나열하는 방법이 내장되어 있습니까?

Linux에서 파일 권한을 나열하는 방법이 내장되어 있습니까?

외부 명령을 사용하지 않고 파일 권한을 나열하는 옵션은 무엇입니까?

test내장되어 있지만 AFAIK 파일의 소유자에게만 작동합니다. 저는 모든 것을 추구합니다. 내가 뭔가를하고 있다고 생각했지만 inodes(내장 기능을 사용하여!) 읽을 방법도 찾을 수 없습니다.

bash제발요. 모든 버전 및/또는 형식이 허용됩니다.

편집하다:

stat외부 명령( , 등) 을 사용하여 이 작업을 수행하는 방법이 무수히 많다는 것을 알고 있습니다 ls. 이것은 단지 생각 연습일 뿐입니다. 제가 하는 작업에는 builtin유일한 해결책이 "필요"하지 않습니다.

편집2:

Glenn Jackman의 로드 가능한 명령 답변은 내장 기능을 사용하므로 기술적으로 정확합니다. 그러나 내 질문이 제대로 정의되지 않았음을 보여주는 것 같습니다.

나열된 대로 순수 bash(모든 버전) builtin명령 사용여기매뉴얼 및 기타 내장 기능 bash(리디렉션, 대체, 키워드, 내가 알지도 못하는 기타 사항...) 에서 linux시스템에서 파일이 갖는 전체 권한을 어떻게 나열할 수 있습니까? 출력은 아래 출력과 유사하지만 umask 값도 작동합니다.

user@hostname$ stat test -c %A
-rw-rw-r--

user@hostname$ stat test -c %a
664

답변1

일반 bash를 사용하면 얻을 수 있는 최고는 다음과 같다고 생각합니다.당신의그룹이나 기타 권한이 아닙니다.

myperms() {
  local file=$1
  local perms=""
  if [[ -d $file ]]; then
    perms+='d'
  elif [[ -L $file ]]; then
    perms+='l'
  else
    perms+='-'
  fi
  [[ -r $file ]] && perms+='r' || perms+='-'
  [[ -w $file ]] && perms+='w' || perms+='-'
  [[ -x $file ]] && perms+='x' || perms+='-'
  echo "$perms $file"
}

그 다음에:

$ myperms /bin/bash
-r-x /bin/bash
$ touch afile
$ myperms afile
-rw- afile
$ chmod u+x afile
$ myperms afile
-rwx afile
$ ln -s afile alink
$ myperms alink
lrwx alink
$ chmod u-wx afile
$ myperms alink
lr-- alink

$ ls -l afile alink
-r--r--r-- 1 glennjackman staff 0 Dec 16 14:28 afile
lrwxr-xr-x 1 glennjackman staff 5 Dec 16 14:29 alink -> afile

답변2

Bash 버전 5에는 "로드 가능한 명령"이 있습니다. 즉, 내장 bash 명령은 아니지만 활성화하여 내장할 수 있는 명령입니다.

  1. bash git repo를 복제하십시오.https://savannah.gnu.org/git/?group=bash
  2. ./configure --prefix=/path/where/you/want/it/installed
  3. 만들기 && 설치하기
  4. stat여기에 존재하더라도 "지원되는" 로드 가능 항목이 아니므로
    1. cd ./examples/loadables
    2. make others
    3. cp stat /path/where/you/want/it/installed/lib/bash

그 다음에

  1. Bash 셸을 시작합니다./path/where/you/want/it/installed/bin/bash
  2. 쉘 변수를 설정하십시오.BASH_LOADABLES=/path/where/you/want/it/installed/lib/bash
  3. stat 명령을 활성화합니다:enable -f stat stat
  4. 그리고 그것을 사용하십시오 :stat -A statarray /some/file

stat연관 배열을 채웁니다. 데모("STAT"라는 기본 배열 사용)

$ ~/bash/5.0/bin/bash

$ echo $BASH_LOADABLES_PATH
/Users/glennjackman/bash/5.0/lib/bash

$ enable -f stat stat

$ stat ~/.bashrc

$ declare -p STAT
declare -A STAT=([nlink]="1" [link]="/Users/glennjackman/.bashrc" [perms]="0644" [inode]="14482796" [blksize]="4096" [device]="16777220" [atime]="1574454147" [type]="-" [blocks]="8" [uid]="502" [size]="2767" [rdev]="0" [name]="/Users/glennjackman/.bashrc" [mtime]="1574454147" [ctime]="1574454147" [gid]="20" )

$ for key in "${!STAT[@]}"; do printf "%s\t%s\n" "$key" "${STAT[$key]}"; done
nlink   1
link    /Users/glennjackman/.bashrc
perms   0644
inode   14482796
blksize 4096
device  16777220
atime   1574454147
type    -
blocks  8
uid 502
size    2767
rdev    0
name    /Users/glennjackman/.bashrc
mtime   1574454147
ctime   1574454147
gid 20

BASH_LOADABLE_PATH 변수를 자동으로 설정하려면 ~/.bashrc에 다음을 입력했습니다.

# for loadable builtins
bash_root=${BASH%/bin/bash}
[[ -d "$bash_root/lib/bash" ]] && BASH_LOADABLES_PATH="$bash_root/lib/bash"
unset bash_root

관련 정보