Linux / 명령어 / type - 명령어 유형과 실행 대상 확인
type은 Bash가 입력한 명령 이름을 별칭, 예약어, 함수, 내장 명령 또는 실행 파일 중 무엇으로 해석하는지 보여 주는 내장 명령입니다. 같은 이름이 여러 형태로 존재하거나 예상과 다른 프로그램이 실행될 때 원인을 찾는 데 유용합니다.
which가 주로 PATH에서 실행 파일을 찾는 데 초점을 맞춘다면, type은 현재 셸의 별칭과 함수까지 포함한 실제 명령 해석을 설명합니다. Bash 환경을 진단할 때 먼저 사용하기 좋은 명령입니다.
type 명령어란?
셸은 명령 이름을 실행하기 전에 별칭, 함수, 내장 명령과 PATH의 실행 파일 등을 일정한 규칙으로 탐색합니다. type은 현재 Bash가 그 이름을 어떤 종류로 판단하고 무엇을 실행할지 알려 줍니다.
type 자체도 Bash 내장 명령입니다. 다른 셸에도 비슷한 명령이 있지만 옵션과 출력 형식은 다를 수 있으므로 이 글의 예제는 Bash를 기준으로 합니다.
기본 문법과 결과 유형
type [-afptP] [이름...]
하나 이상의 명령 이름을 지정할 수 있습니다.
type ls type cd type if type printf
기본 출력은 사람이 읽기 좋은 문장입니다. 환경 설정에 따라 다음과 같은 종류가 나올 수 있습니다.
| 종류 | 의미 |
|---|---|
alias |
입력 전에 다른 문자열로 확장되는 셸 별칭입니다. |
keyword |
if, for 같은 셸 예약어입니다. |
function |
현재 셸에 정의된 함수입니다. |
builtin |
Bash 자체에 포함된 내장 명령입니다. |
file |
PATH 검색으로 찾은 외부 실행 파일입니다. |
같은 이름의 모든 후보 확인하기
-a는 별칭, 함수, 내장 명령과 PATH에서 찾을 수 있는 실행 파일을 포함하여 이름과 일치하는 모든 위치를 출력합니다.
type -a printf type -a test type -a ls
printf는 Bash 내장 명령과 외부 실행 파일이 함께 존재할 수 있습니다. 기본 type printf는 실제로 먼저 선택될 항목만 보여 주지만, -a는 뒤에 가려진 후보까지 조사할 때 유용합니다.
출력 형식을 선택하는 옵션
종류만 출력하는 -t
-t는 설명 문장 대신 alias, keyword, function, builtin, file 중 하나를 출력합니다. 이름을 찾지 못하면 아무것도 출력하지 않고 실패 상태를 반환합니다.
type -t cd type -t if type -t ls
실행 파일 경로를 출력하는 -p와 -P
-p는 해당 이름이 외부 파일로 해석될 때 실행 파일 경로를 출력합니다. 별칭, 함수 또는 내장 명령이 먼저 선택되면 출력하지 않을 수 있습니다.
type -p ls type -p cd
-P는 현재 이름이 별칭이나 내장 명령이더라도 PATH 검색을 강제하여 실행 파일 후보를 찾습니다.
type -P printf type -P test
Bash가 기억한 해시 경로가 있으면 -p와 -P가 현재 PATH의 첫 번째 항목과 다른 저장된 경로를 보여 줄 수 있습니다. 의심스러우면 hash -r로 해시를 비운 뒤 다시 확인하세요.
type 옵션 정리
| 옵션 | 설명 |
|---|---|
-a |
이름과 일치하는 모든 후보를 출력합니다. |
-f |
함수 검색을 생략합니다. -a와 함께 사용하지 않으면 효과가 제한적일 수 있습니다. |
-p |
기본 해석 결과가 외부 실행 파일일 때 경로를 출력합니다. |
-P |
다른 종류보다 우선하여 PATH에서 실행 파일을 찾습니다. |
-t |
명령 종류를 한 단어로 출력합니다. |
별칭과 함수 때문에 명령이 달라질 때
별칭 확인하기
대화형 셸에서는 자주 쓰는 옵션이 별칭에 포함될 수 있습니다.
type ls alias ls
별칭을 적용하지 않고 원래 이름을 실행하려면 상황에 따라 백슬래시 또는 절대 경로를 사용할 수 있습니다.
\ls /usr/bin/ls
함수 정의 확인하기
셸 함수가 외부 명령과 같은 이름으로 정의되면 함수가 먼저 실행될 수 있습니다. type 기본 출력에는 함수 정의가 표시될 수 있습니다.
type deploy type -t deploy
함수 안에서 같은 이름의 외부 명령을 호출해야 한다면 command 이름을 사용해 함수 검색을 건너뛸 수 있습니다.
type, command -v, which 비교
| 방법 | 특징 |
|---|---|
type 이름 |
Bash에서 별칭, 예약어, 함수, 내장 명령과 파일을 자세히 설명합니다. |
type -a 이름 |
같은 이름으로 찾을 수 있는 모든 후보를 확인합니다. |
command -v 이름 |
셸 스크립트에서 명령 존재 여부와 해석 결과를 확인하기에 비교적 이식성이 좋습니다. |
which 이름 |
구현에 따라 주로 PATH의 실행 파일을 찾으며 셸 함수나 별칭을 정확히 반영하지 못할 수 있습니다. |
Bash에서 대화형 진단을 할 때는 type, POSIX 셸 스크립트에서 명령 존재 여부를 검사할 때는 command -v가 일반적으로 적합합니다.
셸 스크립트에서 안전하게 사용하기
명령 종류에 따라 분기하기
kind=$(type -t "$1") || {
printf '명령을 찾지 못했습니다: %s\n' "$1" >&2
exit 1
}
case $kind in
alias|function|builtin|file|keyword)
printf '%s: %s\n' "$1" "$kind"
;;
esac
이 예제는 Bash의 type -t 출력에 의존하므로 스크립트의 인터프리터가 Bash인지 확인해야 합니다.
출력 문장 대신 종료 상태 사용하기
기본 출력은 버전이나 로케일에 따라 달라질 수 있습니다. 명령 존재 여부만 확인하려면 결과 문자열을 분석하지 말고 종료 상태를 검사합니다.
if type git >/dev/null 2>&1; then printf '%s\n' 'git을 사용할 수 있습니다.' fi
자주 묻는 질문
type -p가 아무것도 출력하지 않습니다
해당 이름이 별칭, 함수 또는 내장 명령으로 먼저 해석되거나 외부 실행 파일이 없을 수 있습니다. type -a 이름으로 전체 후보를 보고, 외부 파일만 강제로 찾으려면 type -P 이름을 사용하세요.
PATH를 바꿨는데 이전 경로가 나옵니다
Bash의 해시 테이블에 이전 실행 경로가 남아 있을 수 있습니다. 현재 해시를 확인하고 필요하면 비운 뒤 다시 검색합니다.
hash hash -r type -P 명령어
스크립트에서는 별칭이 보이지 않습니다
비대화형 Bash에서는 기본적으로 별칭 확장이 활성화되지 않습니다. 대화형 셸과 스크립트의 명령 해석 결과가 다를 수 있으므로 자동화에서는 별칭에 의존하지 않는 것이 좋습니다.
type은 실행 파일 위치만 찾는 명령인가요?
아닙니다. 현재 Bash가 이름을 어떻게 해석하는지 보여 주며 별칭, 예약어, 함수와 내장 명령도 구분합니다.
type -a의 출력 순서가 실행 우선순위인가요?
첫 번째 항목은 일반적으로 현재 셸에서 선택되는 대상을 이해하는 데 도움이 됩니다. 다만 해시, 셸 옵션과 실행 문맥이 영향을 줄 수 있으므로 중요한 작업에서는 실제 환경을 함께 확인하세요.
다른 셸에서도 옵션이 같나요?
그렇지 않을 수 있습니다. 이 글의 옵션은 Bash 기준입니다. Zsh, Dash 등에서는 해당 셸의 도움말을 확인하세요.
정리
type은 같은 이름의 별칭, 함수, 내장 명령과 실행 파일을 구분하고 실제 명령 해석을 진단하는 도구입니다. 기본 출력으로 설명을 읽고, -a로 모든 후보를 찾으며, -t로 종류만 얻고, -P로 외부 실행 파일을 강제 검색할 수 있습니다.
명령이 예상과 다르게 동작할 때는 type -a 이름부터 실행해 보세요. 다른 기본 명령은 리눅스 명령어 목록과 개요에서 확인할 수 있습니다.









