$PATH의 모든 바이너리 나열

$PATH의 모든 바이너리 나열

Bash의 $PATH에 있는 모든 실행 파일을 나열하는 코드 줄이 있습니까?

답변1

이것은 답변은 아니지만 실행할 수 있는 바이너리와 명령을 보여줍니다.

compgen -c

(가설 bash)

기타 유용한 명령

compgen -a # will list all the aliases you could run.
compgen -b # will list all the built-ins you could run.
compgen -k # will list all the keywords you could run.
compgen -A function # will list all the functions you could run.
compgen -A function -abck # will list all the above in one go.

답변2

zsh 사용:

whence -pm '*'

또는:

print -rC1 -- $commands

(여러 구성 요소에 나타나는 명령의 경우 $PATH첫 번째 구성 요소만 나열됩니다.)

전체 경로 없이 명령을 원하고 더 나은 측정을 위해 정렬하려면 다음을 수행하십시오.

print -rC1 -- ${(ko)commands}

(즉, 해당 연관 배열의 값이 아닌 키를 가져옵니다.)

답변3

POSIX 셸에서 최종 정렬 이외의 외부 명령( printf폴백이 없는 경우 내장된 것으로 가정)을 사용하지 않고 실행 파일 이름에 개행 문자가 포함되어 있지 않다고 가정합니다.echo

{ set -f; IFS=:; for d in $PATH; do set +f; [ -n "$d" ] || d=.; for f in "$d"/.[!.]* "$d"/..?* "$d"/*; do [ -f "$f" ] && [ -x "$f" ] && printf '%s\n' "${f##*/}"; done; done; } | sort

빈 구성 요소 $PATH( .재정의 사용), 로 시작하는 구성 요소 -, PATH 구성 요소 또는 실행 파일 이름에 와일드카드가 없고 \[?*로 시작하는 실행 파일이 없는 경우 .다음과 같이 단순화할 수 있습니다.

{ IFS=:; for d in $PATH; do for f in $d/*; do [ -f $f ] && [ -x $f ] && echo ${f##*/}; done; done; } | sort

POSIX를 사용 find하고 다음을 수행하십시오 sed.

{ IFS=:; set -f; find -H $PATH -prune -type f -perm -100 -print; } | sed 's!.*/!!' | sort

경로에 드물게 실행 불가능하거나 비정규 파일을 나열하려는 경우 더 쉬운 방법이 있습니다.

{ IFS=:; ls -H $PATH; } | sort

이는 도트 파일을 건너뜁니다. 필요한 경우 해당 -A플래그를 추가하거나( ls있는 경우) POSIX를 계속 사용하려면 다음을 수행합니다.ls -aH $PATH | grep -Fxv -e . -e ..

더 간단한 해결책이 있습니다배쉬에서그리고zsh에서.

답변4

나는 이것을 생각해 냈습니다 :

IFS=':';for i in $PATH; do test -d "$i" && find "$i" -maxdepth 1 -executable -type f -exec basename {} \;; done

편집하다: 이는 Apache 사용자가 bin 디렉터리의 특정 파일을 읽을 때 SELinux 경고를 트리거하지 않는 유일한 명령인 것 같습니다.

관련 정보