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 / 디스크 관리 / 파티션, 포맷, 마운트

Linux / 디스크 관리 / 파티션, 포맷, 마운트

Linux에서 디스크를 관리할 때 필요한 파티션 생성, 파일 시스템 포맷, 마운트 방법을 정리했습니다.

Linux / 명령어 / unzip - ZIP 파일 목록 확인과 안전한 압축 해제

Linux / 명령어 / unzip - ZIP 파일 목록 확인과 안전한 압축 해제

Linux unzip 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / df - 파일 시스템의 남은 용량 확인

Linux / 명령어 / df - 파일 시스템의 남은 용량 확인

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

Linux / 명령어 / ssh-copy-id - SSH 공개키를 원격 계정에 등록

Linux / 명령어 / ssh-copy-id - SSH 공개키를 원격 계정에 등록

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

Linux / 명령어 / ip - 인터페이스·주소·라우팅 상태와 설정

Linux / 명령어 / ip - 인터페이스·주소·라우팅 상태와 설정

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

Linux 강좌 / PID와 PPID 이해하기 - 프로세스 확인과 관리

Linux 강좌 / PID와 PPID 이해하기 - 프로세스 확인과 관리

PID와 PPID의 의미와 부모·자식 프로세스의 관계를 설명합니다. ps와 pgrep으로 확인하고, 직접 만든 실습 프로세스를 안전하게 종료하는 방법을 익힙니다.

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

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

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

Linux / 명령어 / chmod - 파일·디렉터리 접근 권한 변경

Linux / 명령어 / chmod - 파일·디렉터리 접근 권한 변경

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

Linux / 명령어 / getent - NSS 사용자·그룹·호스트 정보 조회

Linux / 명령어 / getent - NSS 사용자·그룹·호스트 정보 조회

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

Linux / 명령어 / shutdown - 시스템 종료·재시작 예약과 취소

Linux / 명령어 / shutdown - 시스템 종료·재시작 예약과 취소

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