Linux which 명령어: 명령어 위치 찾기

LinuxBeginner
지금 연습하기

소개

이번 실습에서는 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에 포함된 어떤 디렉터리에도 존재하지 않는다는 것을 의미합니다.

이 동작을 더 명확하게 확인하기 위해 간단한 셸 스크립트를 사용해 보겠습니다. 여기서는 두 가지 새로운 개념을 도입합니다.

  1. 셸 스크립트는 명령어들을 저장하고 순서대로 실행하는 텍스트 파일입니다.
  2. 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에서 실행 파일의 위치를 찾는 방법을 배웠습니다. 다음 내용을 익혔습니다.

  1. 설치된 프로그램의 위치 찾기
  2. 존재하지 않는 명령어 처리하기
  3. 동일한 명령어의 여러 설치 경로 확인하기
  4. PATH 우선순위 이해하기
  5. 사용자 정의 명령어 생성 및 위치 찾기

또한 간단한 셸 스크립트 작성, chmod +x를 이용한 파일 실행 권한 부여, 그리고 실행될 명령어를 제어하기 위한 PATH 조정 방법을 연습했습니다.

이러한 기술들은 TechCorp의 개발자로서, 그리고 그 이후의 여정에서도 매우 귀중한 자산이 될 것입니다.