Linux / 명령어 / which - PATH에서 실행 파일 경로 찾기
which는 셸의 PATH에 나열된 디렉터리를 검색해 실행 가능한 파일의 경로를 보여 줍니다. 외부 명령의 설치 위치를 빠르게 확인할 수 있지만 별칭, 함수, 내장 명령까지 정확히 판별하려면 셸의 type이나 command -v가 더 적합합니다.
이 글에서는 which의 기본 문법과 주요 옵션, 실제 사용 예제, 관련 명령과의 차이, 사용할 때 주의할 점을 설명합니다.
which 명령어란?
일반적으로 PATH 디렉터리를 앞에서부터 확인해 첫 번째 실행 파일을 출력합니다. which는 외부 프로그램이거나 셸별 래퍼일 수 있어 동작과 옵션이 시스템마다 다릅니다. 셸이 실제로 어떤 명령을 선택하는지와 결과가 항상 같다고 가정하지 마세요.
기본 문법
which [옵션] 명령 ...
옵션과 세부 동작은 구현과 버전에 따라 달라질 수 있습니다. 현재 시스템에서는 which --help와 man which으로 설치된 명령의 설명을 확인하세요.
which 기본 사용법
실행 파일 경로 확인하기
PATH에서 처음 발견한 실행 가능한 파일 경로를 출력합니다.
which python3
여러 명령 확인하기
명령 이름을 여러 개 지정해 설치 여부와 경로를 한 번에 확인합니다.
which sh awk sed
모든 일치 경로 보기
지원되는 구현에서는 -a로 PATH에 있는 모든 일치를 표시합니다.
which -a python3
실행 파일 경로 출력의 한계
which는 PATH에서 찾은 실행 파일 경로를 보여줍니다. 시스템과 셸에 따라 같은 명령도 위치가 다릅니다.
which ls
예시 출력:
/usr/bin/ls
셸 별칭이나 함수는 which 출력과 실제 입력한 명령의 해석이 다를 수 있습니다. 현재 셸이 무엇을 실행할지는 type ls 또는 command -V ls로 확인하세요.
주요 옵션
| 옵션 | 설명 |
|---|---|
-a, --all |
첫 번째 결과만이 아니라 PATH의 모든 일치 경로를 출력합니다. |
--skip-alias |
GNU which 일부 구현에서 별칭 처리를 건너뜁니다. |
--skip-functions |
GNU which 일부 구현에서 함수 처리를 건너뜁니다. |
--version |
설치된 which 구현과 버전을 확인합니다. |
실전 활용 예제
동일 명령의 우선순위 확인하기
-a 결과 순서와 PATH 순서를 비교하면 어떤 외부 실행 파일이 먼저 선택되는지 알 수 있습니다.
which -a python3 printf '%s\n' "$PATH"
셸이 해석하는 명령 종류 확인하기
별칭과 함수, 내장 명령까지 포함하려면 셸 내장 기능을 함께 사용합니다.
type -a ls command -V ls command -v ls
스크립트에서 존재 여부 검사하기
POSIX 셸 이식성이 중요하면 which 출력 파싱보다 command -v의 종료 상태를 사용합니다.
if command -v curl >/dev/null 2>&1; then printf '%s\n' 'curl 사용 가능' fi
which와 관련 명령 비교
| 명령 | 주요 역할 | 적합한 상황 |
|---|---|---|
which |
PATH 외부 실행 파일 검색 | 간단한 경로 확인 |
command -v |
셸 명령 해석 결과 | 이식 가능한 스크립트 검사 |
type |
별칭·함수·내장·파일 구분 | 대화형 진단 |
whereis |
표준 위치의 관련 파일 검색 | 바이너리·소스·매뉴얼 위치 |
사용할 때 주의할 점
별칭과 함수를 놓칠 수 있습니다
셸이 외부 파일보다 별칭이나 함수를 먼저 실행할 수 있으므로 type으로 확인합니다.
구현이 시스템마다 다릅니다
옵션을 스크립트에 사용하기 전에 설치된 which의 도움말을 확인합니다.
보안 검증 도구가 아닙니다
경로를 찾았다고 파일의 소유자, 권한, 무결성이 안전하다는 뜻은 아닙니다.
FAQ
which가 아무것도 출력하지 않으면 설치되지 않은 건가요?
PATH에서 실행 파일을 찾지 못했다는 뜻입니다. 내장 명령·함수·별칭 여부는 type이나 command -v로 확인하세요.
같은 명령의 모든 경로를 보려면요?
지원되는 구현에서 which -a 명령을 사용합니다.
스크립트에서 which를 써도 되나요?
가능하지만 이식성과 셸 해석 일치를 위해 보통 command -v가 권장됩니다.
which와 whereis는 무엇이 다른가요?
which는 PATH의 실행 파일을 찾고, whereis는 정해진 검색 위치에서 바이너리·소스·매뉴얼을 찾습니다.









