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 이름부터 실행해 보세요. 다른 기본 명령은 리눅스 명령어 목록과 개요에서 확인할 수 있습니다.

공식 문서 참고

같은 카테고리의 다른 글
Linux / 명령어 / tr - 표준 입력의 문자 치환과 삭제

Linux / 명령어 / tr - 표준 입력의 문자 치환과 삭제

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

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

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

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

Linux 강좌 / 파일 시스템 이해하기 - 절대·상대 경로와 주요 디렉터리

Linux 강좌 / 파일 시스템 이해하기 - 절대·상대 경로와 주요 디렉터리

리눅스 파일 시스템의 트리 구조와 절대·상대 경로를 이해하고, /home·/etc·/var 등 주요 디렉터리의 역할과 경로를 읽는 방법을 익힙니다.

Linux 강좌 / 사용자·그룹과 파일 소유권 이해하기

Linux 강좌 / 사용자·그룹과 파일 소유권 이해하기

UID, GID, 기본·추가 그룹과 파일 소유권의 의미를 설명합니다. id, groups, getent, ls, stat으로 현재 계정과 파일의 소유 정보를 안전하게 확인합니다.

Linux / 명령어 / which - PATH에서 실행 파일 경로 찾기

Linux / 명령어 / which - PATH에서 실행 파일 경로 찾기

Linux which 명령어로 PATH에서 실행 파일 경로를 찾는 방법을 설명합니다. type과 command -v의 차이, 별칭·함수 확인과 스크립트 이식성도 정리합니다.

Linux / 명령어 / rsync - 파일·디렉터리의 변경분 동기화

Linux / 명령어 / rsync - 파일·디렉터리의 변경분 동기화

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

Linux / 명령어 / gunzip - gzip 압축 파일 풀기

Linux / 명령어 / gunzip - gzip 압축 파일 풀기

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

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

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

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

Linux / 명령어 / history - 명령어 실행 기록 확인

Linux / 명령어 / history - 명령어 실행 기록 확인

Bash history 명령어로 이전 명령을 조회·검색·재실행·삭제하는 방법을 설명합니다. ~/.bash_history, HISTCONTROL, HISTTIMEFORMAT, histappend와 여러 터미널 기록 동기화 방법도 함께 정리합니다.

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

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

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