소개
이번 실습에서는 which 명령어를 사용하여 셸이 특정 명령어 이름으로 실행할 실행 파일의 위치를 찾는 방법을 배웁니다. 설치된 명령어를 확인하고, 사용할 수 없는 명령어를 처리하며, 여러 개의 일치 항목을 나열하고, PATH 변수가 결과에 어떤 영향을 미치는지 살펴봅니다.
which의 동작 방식을 쉽게 이해할 수 있도록, 이번 실습에서는 간단한 스크립트, 실행 권한, 임시 PATH 변경과 같은 몇 가지 보조적인 셸 개념도 함께 다룹니다. 각 개념은 실습 과정에서 설명되므로, which가 왜 특정 경로를 반환하는지 그 원리를 집중적으로 학습할 수 있습니다.
which 명령어의 기초 이해
TechCorp에 새로 입사한 당신에게 팀장은 주요 개발 도구들이 제대로 설치되었는지 확인해 달라고 요청했습니다. 이 작업에는 which 명령어가 가장 유용합니다.
which 명령어는 PATH 환경 변수에 나열된 디렉터리를 검색하여 특정 명령어와 연결된 실행 파일의 위치를 찾는 데 사용됩니다.
먼저 gcc 컴파일러의 위치를 찾아보겠습니다.
which gcc
다음과 유사한 출력이 나타날 것입니다.
/usr/bin/gcc
이 출력은 gcc 실행 파일이 /usr/bin 디렉터리에 있음을 의미합니다. 즉, 터미널에 gcc를 입력하면 시스템은 /usr/bin/gcc에 있는 파일을 실행하게 됩니다.
이제 또 다른 필수 도구인 python의 위치를 찾아보겠습니다.
which python
다음과 같은 결과가 나올 수 있습니다.
/usr/local/bin/python
which 명령어는 PATH 환경 변수에 나열된 디렉터리를 순서대로 검색하여 처음 발견된 일치 항목을 반환합니다. 만약 다른 경로가 표시되더라도 걱정하지 마세요. 단순히 시스템 내 Python이 다른 위치에 설치되어 있다는 뜻입니다.
존재하지 않는 명령어 처리
팀장은 TechCorp에서 예전에 techbuild라는 사용자 정의 빌드 도구를 사용했다고 언급했습니다. 이 도구가 여전히 설치되어 있는지 확인해 봅시다.
which techbuild
아무런 출력이 나타나지 않거나(Bash 셸), techbuild not found와 같은 오류 메시지(Zsh 셸)가 표시될 수 있습니다.
이는 which가 PATH 내에서 해당 명령어를 찾을 수 없을 때 아무것도 반환하지 않기 때문입니다. 출력이 없다고 당황하지 마세요. 이는 techbuild가 PATH에 포함된 어떤 디렉터리에도 존재하지 않는다는 것을 의미합니다.
이 동작을 더 명확하게 확인하기 위해 간단한 셸 스크립트를 사용해 보겠습니다. 여기서는 두 가지 새로운 개념을 도입합니다.
- 셸 스크립트는 명령어들을 저장하고 순서대로 실행하는 텍스트 파일입니다.
cat <<'EOF' ... EOF패턴은 여러 줄의 내용을 파일에 작성할 때 복잡한 따옴표 처리를 할 필요 없이 편리하게 사용할 수 있게 해줍니다.
techbuild를 확인하는 스크립트를 만들어 보겠습니다.
cat > ~/check_techbuild.sh <<'EOF'
#!/bin/bash
if which techbuild >/dev/null 2>&1; then
echo "techbuild is installed"
else
echo "techbuild is not installed"
fi
EOF
이 명령어는 ~/check_techbuild.sh라는 파일을 생성하고 그 안에 간단한 Bash 스크립트를 작성합니다.
주요 라인의 의미는 다음과 같습니다.
#!/bin/bash: Linux에게 이 스크립트를 Bash로 실행하라고 지시합니다.which techbuild: 명령어를PATH에서 찾을 수 있는지 확인합니다.>/dev/null 2>&1: 일반 출력과 오류 출력을 숨겨 스크립트가 자체적인 결과 메시지만 깔끔하게 출력하도록 합니다.
이제 파일에 실행 권한을 부여하고 실행해 봅니다.
chmod +x ~/check_techbuild.sh
chmod +x 명령어는 실행 권한을 추가하여 Linux가 해당 파일을 명령어로 실행할 수 있게 합니다.
~/check_techbuild.sh
which가 해당 명령어를 찾을 수 없었기 때문에 스크립트는 techbuild is not installed를 출력합니다.
여러 설치 경로 확인
환경 설정을 계속 진행하다 보면, TechCorp에서 프로젝트별로 여러 버전의 Python을 사용하고 있다는 것을 알게 될 것입니다. which의 -a 옵션을 사용하면 명령어의 모든 설치 경로를 확인할 수 있습니다.
which -a python
다음과 같은 출력이 나타날 수 있습니다.
/usr/local/bin/python
/usr/bin/python
/bin/python
이 출력은 시스템에 여러 개의 Python이 설치되어 있음을 나타냅니다. -a 옵션은 which에게 PATH 내의 모든 일치하는 실행 파일을 출력하도록 지시합니다.
이것을 이해하는 것은 매우 중요합니다. PATH 설정에 따라 실제로 실행될 수 있는 모든 Python 실행 파일을 보여주기 때문입니다. 목록의 맨 처음에 있는 파일이 터미널에 python을 입력했을 때 실행되는 파일입니다.
PATH 우선순위 이해
팀장은 PATH 변수에 나열된 디렉터리 순서가 기본적으로 어떤 버전의 명령어가 사용될지를 결정한다고 설명합니다. PATH를 확인해 봅시다.
echo $PATH
콜론으로 구분된 디렉터리 목록이 표시됩니다. 예:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
순서가 중요합니다. 앞에 나열된 디렉터리가 더 높은 우선순위를 갖습니다. 즉, 서로 다른 디렉터리에 같은 이름의 실행 파일이 두 개 있다면, PATH에서 먼저 나타나는 디렉터리에 있는 파일이 사용됩니다.
실습 환경에는 이미 ~/custom_bin에 사용자 정의 ls 명령어가 생성되어 있습니다. 이 디렉터리를 PATH의 맨 앞에 추가하여 시스템 디렉터리보다 먼저 검색되도록 설정해 봅시다.
export PATH=$HOME/custom_bin:$PATH
이제 기본적으로 어떤 ls가 실행되는지 확인합니다.
which ls
다음과 유사한 출력이 나타날 것입니다.
/home/labex/custom_bin/ls
PATH 내의 모든 일치하는 ls 명령어를 보려면 다음을 실행하세요.
which -a ls
사용자 정의 명령어가 먼저 나오고, 그 뒤에 시스템 버전들이 표시되는 것을 볼 수 있습니다.
/home/labex/custom_bin/ls
/usr/bin/ls
/bin/ls
이는 PATH 우선순위를 명확하게 보여줍니다. which ls는 첫 번째로 일치하는 실행 파일을 반환하고, which -a ls는 전체 검색 결과 목록을 보여줍니다.
사용자 정의 명령어 만들기
팀장은 which가 PATH와 어떻게 상호작용하는지 보여주기 위해 간단한 사용자 정의 명령어를 만들어 보라고 제안합니다. 홈 디렉터리에 hello라는 스크립트를 만들어 봅시다.
cat > ~/hello <<'EOF'
#!/bin/bash
echo "Hello from TechCorp!"
EOF
chmod +x ~/hello
이 작업은 홈 디렉터리에 hello라는 새 파일을 생성하고 실행 가능하게 만듭니다. 이 스크립트는 실행 시 Hello from TechCorp!를 출력합니다.
이제 실행해 봅니다.
hello
홈 디렉터리가 PATH에 포함되어 있지 않기 때문에 "command not found" 오류가 발생합니다. PATH는 셸이 실행 파일을 찾는 디렉터리 목록입니다.
홈 디렉터리를 임시로 PATH에 추가해 봅시다.
export PATH="$PATH:$HOME"
이 명령어는 현재 터미널 세션 동안 홈 디렉터리를 PATH의 끝에 추가합니다. export 명령어는 업데이트된 PATH를 이후에 실행하는 명령어들이 사용할 수 있도록 합니다.
이제 hello를 실행할 수 있으며, which도 이를 찾을 수 있습니다.
hello
which hello
"Hello from TechCorp!"라는 문구와 스크립트 경로가 표시될 것입니다. 이는 which가 PATH에 나열된 모든 디렉터리에서 실행 파일을 찾는 방식을 잘 보여줍니다.
요약
이번 실습에서는 which 명령어를 사용하여 시스템 PATH에서 실행 파일의 위치를 찾는 방법을 배웠습니다. 다음 내용을 익혔습니다.
- 설치된 프로그램의 위치 찾기
- 존재하지 않는 명령어 처리하기
- 동일한 명령어의 여러 설치 경로 확인하기
- PATH 우선순위 이해하기
- 사용자 정의 명령어 생성 및 위치 찾기
또한 간단한 셸 스크립트 작성, chmod +x를 이용한 파일 실행 권한 부여, 그리고 실행될 명령어를 제어하기 위한 PATH 조정 방법을 연습했습니다.
이러한 기술들은 TechCorp의 개발자로서, 그리고 그 이후의 여정에서도 매우 귀중한 자산이 될 것입니다.



