[shell script] $PATH를 조회하며 실행 파일 찾기 예제

HYEOB KIM·2022년 4월 20일
0

Shell

목록 보기
31/71

리눅스 시스템에서 사용할 수 있는 실행 파일들의 목록을 출력해보는 예제 스크립트입니다.

커맨드라인에서 프로그램을 실행하면 리눅스 시스템은 실행 파일을 찾기 위해 $PATH 환경 변수에 정의 된 경로를 탐색합니다.

$ echo $PATH
/home/hyeob/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

내용을 보면, :을 통해 각 경로들이 구분되어 있는 것을 볼 수 있습니다.

한 예로 첫 번째 경로의 파일 내용을 살펴보겠습니다.

$ cd /home/hyeob/.local/bin

$ ll
total 104
drwxrwxr-x 2 hyeob hyeob  4096 Mar 27 04:41 ./
drwx------ 5 hyeob hyeob  4096 Mar 25 05:00 ../
-rwxrwxr-x 1 hyeob hyeob  5915 Mar 21 08:45 ansible*
-rwxrwxr-x 1 hyeob hyeob  5915 Mar 21 08:45 ansible-config*
-rwxrwxr-x 1 hyeob hyeob 13397 Mar 21 08:45 ansible-connection*
-rwxrwxr-x 1 hyeob hyeob  5915 Mar 21 08:45 ansible-console*
-rwxrwxr-x 1 hyeob hyeob  5915 Mar 21 08:45 ansible-doc*
-rwxrwxr-x 1 hyeob hyeob  5915 Mar 21 08:45 ansible-galaxy*
-rwxrwxr-x 1 hyeob hyeob  5915 Mar 21 08:45 ansible-inventory*
-rwxrwxr-x 1 hyeob hyeob  5915 Mar 21 08:45 ansible-playbook*
-rwxrwxr-x 1 hyeob hyeob  5915 Mar 21 08:45 ansible-pull*
-rwxrwxr-x 1 hyeob hyeob  1474 Mar 21 08:45 ansible-test*
-rwxrwxr-x 1 hyeob hyeob  5915 Mar 21 08:45 ansible-vault*
-rwxrwxr-x 1 hyeob hyeob   210 Mar 27 04:41 netaddr*

실행 파일들이 엄청 많이 보입니다.

시스템 내 모든 실행 파일 출력하기

그렇다면 이제부터 시스템 내에 존재하는 모든 실행 파일에 대해 출력해보는 스크립트를 작성해보겠습니다.

$ cat test1
#!/bin/bash
IFS=:
for folder in $PATH
do
        for file in $folder/*
        do
                if [ -x $file ]
                then
                        echo "$file"
                fi
        done
done

$ ./test1
/home/hyeob/.local/bin/ansible
/home/hyeob/.local/bin/ansible-config
/home/hyeob/.local/bin/ansible-connection
/home/hyeob/.local/bin/ansible-console
/home/hyeob/.local/bin/ansible-doc
/home/hyeob/.local/bin/ansible-galaxy
/home/hyeob/.local/bin/ansible-inventory
/home/hyeob/.local/bin/ansible-playbook
/home/hyeob/.local/bin/ansible-pull
/home/hyeob/.local/bin/ansible-test
/home/hyeob/.local/bin/ansible-vault
/home/hyeob/.local/bin/netaddr
/usr/local/bin/aws
/usr/local/bin/aws_completer
/usr/local/bin/docker-compose
  • 내부 필드 구분자IFS:으로 설정해주어 스크립트를 실행할 때는 :을 기준으로 필드를 구분하도록 했습니다.
  • $PATH 환경 변수의 경로들을 :를 기준으로 구분해서 하나씩 참조합니다(첫 번째 for).
  • 각 경로 내에 모든 파일들을 하나씩 참조합니다(두 번째 for).
  • $file 변수가 실행 파일(-x)이라면 해당 파일명을 출력합니다(if).
profile
Devops Engineer

0개의 댓글