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는 정해진 검색 위치에서 바이너리·소스·매뉴얼을 찾습니다.

관련 글과 공식 문서

같은 카테고리의 다른 글
Linux / 명령어 / ls - 파일과 디렉터리 목록 확인

Linux / 명령어 / ls - 파일과 디렉터리 목록 확인

Linux ls 명령어로 파일과 디렉터리 목록, 숨김 파일, 권한과 소유자, 크기 및 수정 시간을 확인하는 방법을 설명합니다. 자주 쓰는 옵션 조합과 정렬 방법, 스크립트에서 ls 출력을 안전하게 다루는 기준도 정리합니다.

Linux / 명령어 / passwd - 사용자 비밀번호 변경

Linux / 명령어 / passwd - 사용자 비밀번호 변경

Linux passwd 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / who - 현재 로그인 세션 확인

Linux / 명령어 / who - 현재 로그인 세션 확인

Linux who 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux 강좌 / 파일 권한 읽고 바꾸기와 sudo 사용법

Linux 강좌 / 파일 권한 읽고 바꾸기와 sudo 사용법

리눅스 파일과 디렉터리의 읽기·쓰기·실행 권한을 해석하고 chmod로 실습 파일의 권한을 바꿉니다. sudo의 사용 범위와 권한 오류를 진단하는 순서도 설명합니다.

Linux / 명령어 / ethtool - 네트워크 링크·드라이버 정보 확인

Linux / 명령어 / ethtool - 네트워크 링크·드라이버 정보 확인

Linux ethtool 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / rmdir - 빈 디렉터리 삭제

Linux / 명령어 / rmdir - 빈 디렉터리 삭제

Linux rmdir 명령어로 빈 디렉터리와 비어 있는 상위 경로를 안전하게 삭제하는 방법을 설명합니다. rm -r과의 차이, 실패 원인과 스크립트 사용법도 알아봅니다.

Linux / 명령어 / fmt - 일반 텍스트 문단의 줄바꿈 조정

Linux / 명령어 / fmt - 일반 텍스트 문단의 줄바꿈 조정

Linux fmt 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / column - 텍스트를 읽기 좋은 표 형태로 정렬

Linux / 명령어 / column - 텍스트를 읽기 좋은 표 형태로 정렬

Linux column 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / cd - 디렉터리 이동

Linux / 명령어 / cd - 디렉터리 이동

Linux cd 명령어로 절대·상대 경로, 홈과 이전 디렉터리로 이동하는 방법을 설명합니다. 심볼릭 링크 처리, CDPATH, 스크립트와 sudo cd의 한계 및 오류 해결법도 정리합니다.

Linux / 명령어 / apt-get - APT 패키지 작업을 스크립트와 명령행에서 실행

Linux / 명령어 / apt-get - APT 패키지 작업을 스크립트와 명령행에서 실행

Linux apt-get 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.