▣ 리눅스 내부 명령어- Shell Builtin 명령어 정리 ( By chat GPT)

리눅스를 공부하면서 쉽게 이해하는 방법이, 잘 알고 있는 윈도우(Windows)나 도스(DOS)와 비교해서 이해하면 이해가 좀 더 쉬운 것 같습니다.
MS계열 OS의 경우 내부명령어는 COMMAND.COM 에 포함되어 있어서 부팅 시 로딩되어 메모리에 올라가면, 경로에 상관없이 실행파일이 없어도 사용자가 편리하게 명령어를 손쉽게 사용할 수 있도록 해 주는 유익한 것이 내부명령어 입니다.
리눅스에도 이러한 내부명령어가 역시 존재하고 어떠한 명령어들이 있는지를 알아보았습니다.
이번에도 챗GPT가 잘 정리해 주었습니다.
리눅스에서는 이러한 내부명령어를 셀빌트인(Shell Builtin) 명령어 라고 부릅니다.
아래 표는 Bash(가장 널리 쓰이는 리눅스 셸) 기준으로 자주 활용되는 Shell Builtin 명령어를 정리한 것입니다.
간단한 사용 예와 함께 어떤 상황에서 쓰이는지도 덧붙였으니 참고하세요. (By Chat GPT)
구분 | Built‑in | 핵심 용도 | 기본 사용법 / 예시 | 비고·사용 팁 |
디렉터리·경로 | cd | 작업 디렉터리 변경 | cd /var/logcd - (이전 폴더) | 셸 내부 상태이므로 builtin이어야 함 |
pwd | 현재 디렉터리 출력 | pwd | echo $PWD와 동일 효과 | |
환경/변수 | export | 환경변수 등록 | export PATH=$PATH:/opt/bin | 자식 프로세스에 전파 |
unset | 변수·함수·배열 삭제 | unset MYVAR | -f 함수 삭제, -v 변수 삭제 | |
readonly | 값 고정 | readonly LANG | 수정/삭제 방지 | |
프로세스·작업 | jobs | 백그라운드 작업 목록 | jobs -l | %1, %+ 같은 작업 제어 기호와 함께 |
fg / bg | 포그라운드·백그라운드 전환 | fg %1, bg %1 | Ctrl+Z 일시정지 후 활용 | |
kill | 신호 보내기 | kill -9 1234 | /bin/kill 외부도 동일 이름 존재 | |
입출력 | echo | 문자열·변수 출력 | echo "$HOME" | -e로 특수문자 해석 |
read | 표준입력 읽기 | read name && echo "Hi $name" | -p 프롬프트, -s 비밀번호 입력 숨김 | |
printf | 서식 지정 출력 | printf "%04d\n" 7 | C의 printf와 거의 동일 | |
흐름 제어 | if/then/fi | 조건 분기 | if [[ -f file ]]; then … fi | Bash 키워드(내장) |
case | 패턴 매칭 분기 | case $var in pat1) … ;; esac | ||
for while | 반복 루프 | for f in *.txt; do …; done | ||
break / continue | 루프 탈출·건너뛰기 | break 2 (2중 루프 탈출) | ||
산술·논리 | let | 산술 연산 | let i++ | (( i++ )) 구문이 더 현대적 |
test / [ ] | 조건 평가 | [ -d /etc ] && echo dir | [[ … ]] (Bash 확장)가 더 안전 | |
: (콜론) | null 명령(무동작) | : ${var:=default} | 자리 채우기·NOP | |
셸 설정·제어 | alias / unalias | 명령 별칭 | alias ll='ls -l' | alias만 입력하면 목록 |
history | 명령 기록 조회 | `history | grep ssh` | |
type / command | 명령 종류 확인 | type cd → builtin | command ls : alias 무시 | |
shopt | Bash 옵션 토글 | shopt -s globstar | 패턴 확장, autocd 등 | |
set / unset -o | 셸 옵션 설정 | set -o noclobber | set -x 디버깅(trace) | |
source / . | 스크립트 현재 셸에서 실행 | source ~/.bashrc | 하위 셸 생성 안 함 | |
종료 | exit | 셸 종료, 상태값 반환 | exit 0 | $?로 직전 명령 종료코드 확인 |
logout | 로그인 셸 종료 | logout | GUI 터미널이 아닌 로그인 셸에서 |
✅ 사용 팁 & 학습 포인트
- type <명령> 으로 builtin 여부를 빠르게 판별하세요.
- 성능: 빈번히 호출되는 echo, printf, cd 등이 builtin이라서 별도 프로세스 생성 비용이 없습니다.
- 셸 상태 변경(디렉터리, 변수, 옵션)은 반드시 builtin이어야 합니다. 외부 프로그램은 부모 셸을 바꿀 수 없습니다.
- help <builtin> 으로 Bash 내장 매뉴얼(맨페이지보다 더 간략)을 볼 수 있습니다. 예) help read.
- 일부 명령(kill, printf)은 동일 이름 외부 명령도 존재하므로, alias·PATH 순서에 따라 호출 대상이 달라질 수 있습니다.
- 필요 시 command kill …처럼 외부 버전을 강제로 호출하세요.
🔍 리눅스에도 내부명령어가 있는지에 대한 질문에 대한 Chat GPT의 답변
리눅스에도 DOS 시절의 “내부 명령어(Internal Command)”에 해당하는 기능이 있습니다.
다만 DOS · Windows CMD에서 쓰이던 표현 대신 **“셸 내장 명령어(shell builtin)”**라고 부르는 것이 일반적입니다.
개념 DOS / CMD 리눅스(Bash 등) 공통점
이름 | Internal command | Shell builtin | 셸 프로그램 자체에 포함됨 |
위치 | COMMAND.COM 또는 cmd.exe 코드 내부 | bash, zsh, fish 등의 셸 바이너리 내부 | 디스크의 별도 실행 파일 없이 동작 |
예시 | DIR, CD, COPY, DEL, CLS, SET | cd, echo, alias, export, read, ulimit, history, pwd, test | 프로세스를 새로 만들지 않고 즉시 실행 |
✅ 셸 내장 명령어가 필요한 이유
- 프로세스 생성 비용 절감 – 파일 하나를 지우려고 매번 새로운 프로세스를 만들면 느리므로, 자주 쓰는 명령은 셸이 직접 처리합니다.
- 셸 내부 상태 변경 – cd, export처럼 “현재 작업 디렉터리”나 환경 변수 등 셸 자신의 상태를 바꾸는 명령은 외부 프로그램으로 만들 수 없습니다.
- 스크립트 편의 – 조건 분기(test 또는 [[ ... ]]), 산술 연산(let, (( ... ))) 같은 구문과 결합되어 스크립트를 간결하게 만듭니다.
✅ 어떻게 구분할까?
type cd # → cd is a shell builtin type ls # → ls is /usr/bin/ls (외부 명령)
또는 Bash 전용으로:
enable # 모든 builtin 목록 출력
✅ 외부 명령과의 차이
- 내장 명령어: 셸 프로세스 내부에서 실행 → 빠르며 셸 상태를 직접 수정 가능
- 외부 명령어: /bin, /usr/bin 등에 있는 실행 파일 → 기능이 방대하고 독립적으로 업데이트 가능
정리하면, 리눅스에도 DOS·Windows처럼 “내부 명령어”가 있으며, 이를 “셸 빌트인(builtin)”이라고 부른다는 점만 이름이 다를 뿐 개념은 동일합니다.
이어지는 포스팅은 너무 흔하게 사용하고 있어서 지나칠 수 있는 MS OS(= DOS, Windows) 의 내부명령어에 대해서 Chat GPT의 도움을 받아서 작성해 보았습니다.
'정보보안' 카테고리의 다른 글
🛠 리눅스 서버에서 악성코드에 감염된 파일을 찾는 방법 + 특수 문자열을 포함하고 있는 파일 찾는 방법-By Chat GPT(반말 주의!) (0) | 2025.04.28 |
---|---|
🚚 Windows에서 사용하는 PowerShell 명령어 정리- By Chat GPT (0) | 2025.04.24 |
📖 MS OS ( DOS, Windows)에서 사용되는 내부명령어에 대해서 정리 - Chat GPT (0) | 2025.04.24 |
🧠리눅스에서 커널(Kernel)과 운영체제(OS)의 역할- Chat GPT (0) | 2025.04.23 |
🛡️ CentOS 7 오프라인 커널 업그레이드 방법-Chat GPT (0) | 2025.04.23 |