리눅스 명령어 which 사용법 및 2가지 옵션

리눅스 명령어 which는 다양한 명령어를 사용할 때 해당 명령어가 시스템 어디에 위치하고 있는지 확인해야 할 경우에 유용하게 사용할 수 있습니다. 예를 들어, 같은 이름의 명령어가 여러 디렉터리에 존재할 때, 시스템이 어떤 경로의 명령어를 우선적으로 사용하는지 알고 싶을 때 which 명령어가 큰 도움이 됩니다. 이번 포스팅에서는 리눅스 명령어인 which의 사용법과 주요 옵션들, 그리고 활용 방법에 대해 알아보겠습니다.

리눅스 명령어 which란?

리눅스 명령어 which는 사용자가 입력한 명령어의 실제 경로를 찾아주는 리눅스 유틸리티입니다. 다시 말해, 특정 명령어가 시스템의 어느 위치에 있는지 확인할 수 있습니다. 이를 통해 어떤 프로그램이 실행되는지, 그리고 경로 문제로 인한 충돌을 예방할 수 있습니다.

기본 사용법

which 명령어의 기본적인 사용법은 매우 간단합니다. 다음과 같이 사용하면 됩니다:

which [명령어 이름]
ShellScript

예를 들어, python 명령어가 어느 위치에 있는지 확인하고 싶다면, 다음과 같이 입력할 수 있습니다:

which python
ShellScript

이 명령어를 실행하면, 시스템이 PATH 환경 변수에 정의된 디렉터리들에서 python이라는 이름을 가진 실행 파일의 경로 중 첫번째 경로만을 출력합니다. 아래 그림에서는 홈 디렉토리 하위의 anaconda3/bin 하위에 python 파일이 있음을 확인할 수 있습니다.

그림 1. 리눅스 명령어 which: 사용 결과
그림 1. 리눅스 명령어 which: 사용 결과

PATH 환경 변수란?

which 명령어를 이해하려면 PATH 환경 변수를 알아야 합니다. PATH는 쉘(명령어 해석기)이 명령어를 실행할 때, 실행 파일을 찾기 위해 검색하는 디렉터리 목록을 담고 있는 환경 변수입니다. which 명령어는 이 PATH에 정의된 디렉터리를 순서대로 탐색하여 명령어의 경로를 찾아냅니다.

PATH 변수는 다음 명령어로 확인할 수 있습니다:

echo $PATH
ShellScript

이 명령어를 실행하면 아래 그림과 같이 콜론(:)으로 구분된 여러 경로들이 출력됩니다. 이 경로들은 쉘이 명령어를 찾기 위해 검색하는 순서입니다.

그림 2. 환경 변수 $PATH 확인
그림 2. 환경 변수 $PATH 확인

주요 옵션 설명

which 명령어에는 몇 가지 유용한 옵션이 있습니다. 이 옵션들을 사용하면 더 세부적인 정보를 얻을 수 있습니다.

-a 옵션: 모든 경로 표시

기본적으로 which 명령어는 첫 번째로 발견된 경로만 출력합니다. 하지만 -a 옵션을 사용하면 같은 이름을 가진 모든 실행 파일의 경로를 출력할 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다:

which -a conda
ShellScript

이 명령어를 사용하면, conda라는 이름의 모든 실행 파일이 있는 경로들이 출력됩니다. 만약 특정 명령어가 여러 디렉터리에 존재한다면, 이를 통해 충돌을 방지하거나 우선순위를 확인할 수 있습니다.

그림 3. 리눅스 명령어 which: -a 옵션 사용해서 PATH에 있는 모든 실행파일 출력
그림 3. 리눅스 명령어 which: -a 옵션 사용해서 PATH에 있는 모든 실행파일 출력

-s 옵션: 출력 억제

때로는 경로를 출력하지 않고 단순히 명령어가 존재하는지만 확인하고 싶을 때가 있습니다. 이럴 때 -s 옵션을 사용하면 됩니다. 이 옵션을 사용하면 경로가 출력되지 않으며, 명령어가 존재하면 성공 코드(0)를, 존재하지 않으면 실패 코드(1)를 반환합니다.

which -s python
ShellScript

아래 그림을 보면 python은 존재하며, python5는 존재하지 않음을 알 수 있습니다.

그림 4. 리눅스 명령어 which: -s 옵션으로 출력 억제 및 변수로 받기
그림 4. 리눅스 명령어 which: -s 옵션으로 출력 억제 및 변수로 받기

이 명령어는 아무 출력도 하지 않지만, $?를 사용하여 반환 코드를 확인할 수 있습니다. 이 방법은 쉘 상에서 사용하기보다는 스크립트에서 특정 명령어가 설치되어 있는지 여부를 확인할 때 유용합니다.

활용 예제

스크립트에서의 활용

예를 들어, 스크립트에서 특정 명령어가 존재하는지 확인하고, 존재하지 않으면 오류 메시지를 출력하고 종료하도록 만들 수 있습니다:

#!/bin/bash

if which -s python; then
    echo "Python is installed."
else
    echo "Python is not installed."
    exit 1
fi
ShellScript

이 스크립트는 python 명령어가 존재하는지 확인한 후, 결과에 따라 메시지를 출력합니다. 만약 python이 설치되어 있지 않다면, 스크립트는 종료 코드 1과 함께 종료됩니다.

python이 설치되어 있는 경우에는 위의 스크립트를 실행하면 아래와 같이 나타납니다.

그림 5. 리눅스 명령어 which: 스크립트에서의 활용
그림 5. 리눅스 명령어 which: 스크립트에서의 활용

명령어 경로 확인 및 문제 해결

리눅스 시스템에서 프로그램이 예상치 못한 동작을 할 때, which 명령어를 사용하여 어떤 경로의 프로그램이 실행되고 있는지 확인할 수 있습니다. 예를 들어, 특정 프로그램의 버전을 확인했을 때 의도한 버전이 아니라면, which 명령어로 프로그램 경로를 확인하여 경로가 올바른지 점검할 수 있습니다.

주의사항

which 명령어는 PATH 변수에 설정된 디렉터리에서만 명령어를 검색합니다. 만약 PATH에 포함되지 않은 디렉터리에 있는 명령어를 찾으려 한다면, which 명령어는 해당 명령어를 찾지 못합니다. 따라서 특정 디렉터리에 설치된 프로그램을 찾고자 할 때는 PATH 변수 설정을 먼저 확인하거나 해당 디렉터리를 직접 탐색해야 합니다.

또한, which는 일반적으로 bash, zsh 등의 쉘에서 사용되며, 시스템 환경이나 사용자의 쉘 설정에 따라 동작이 다를 수 있습니다.

정리

리눅스 명령어 which는 간단하면서도 매우 유용한 도구입니다. 명령어의 경로를 확인하고, 여러 버전의 프로그램이 존재할 때 우선순위를 점검하는 데 도움을 줍니다. 스크립트 작성 시에도 명령어의 존재 여부를 빠르게 확인할 수 있어 오류를 예방할 수 있습니다. 하지만 which 명령어가 검색할 수 있는 범위는 PATH 변수에 한정되므로, 이 점을 고려하여 사용해야 합니다.

이제 which 명령어를 활용하여 시스템 관리 및 스크립트 작성에 유용하게 활용해 보세요!

참고자료

관련 포스트

Leave a Comment