외부 명령을 사용하지 않고 파일 권한을 나열하는 옵션은 무엇입니까?
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 명령은 아니지만 활성화하여 내장할 수 있는 명령입니다.
- bash git repo를 복제하십시오.https://savannah.gnu.org/git/?group=bash
./configure --prefix=/path/where/you/want/it/installed
- 만들기 && 설치하기
stat
여기에 존재하더라도 "지원되는" 로드 가능 항목이 아니므로cd ./examples/loadables
make others
cp stat /path/where/you/want/it/installed/lib/bash
그 다음에
- Bash 셸을 시작합니다.
/path/where/you/want/it/installed/bin/bash
- 쉘 변수를 설정하십시오.
BASH_LOADABLES=/path/where/you/want/it/installed/lib/bash
- stat 명령을 활성화합니다:
enable -f stat stat
- 그리고 그것을 사용하십시오 :
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