리눅스 터미널 기본 명령어 정리 – 초보자가 실제로 막히는 지점까지 해결
리눅스 터미널, 처음 열었을 때 그 깜박이는 커서가 낯설게 느껴지셨던 분 많을 겁니다. 이 글은 “명령어 목록만 나열한 치트시트”가 아닙니다. 실제로 초보자가 막히는 지점을 중심으로, 명령어의 동작 원리와 흔한 실수, 안전하게 쓰는 방법까지 함께 정리했습니다.
Ubuntu, Rocky Linux, WSL 등 어떤 환경이든 여기 나오는 기본 명령어는 거의 그대로 동작합니다.
Table of Contents
먼저 알아야 할 것: 터미널과 셸의 관계
터미널을 열면 실제로 실행되는 것은 셸(Shell)입니다. 우분투 기본은 bash, macOS 카탈리나 이후는 zsh이 기본값입니다. 명령어 대부분은 두 셸에서 동일하게 동작하지만, 자동완성 동작이나 기본 alias(별칭) 설정이 일부 다를 수 있습니다.
> WSL 사용자 주의: Windows 파일시스템은 /mnt/c/ 경로로 접근합니다. 권한(permission) 구조가 순수 리눅스와 다르게 취급될 수 있어, 일부 chmod 동작이 예상과 다를 수 있습니다.
학습 우선순위 로드맵
명령어 목록을 한꺼번에 외우려 하면 금방 지칩니다. 단계별로 익히는 것을 권장합니다.
| 단계 | 익혀야 할 명령어 | 목적 |
|---|---|---|
| 1단계 (필수) | pwd, ls, cd, mkdir, rm, cp, mv, touch | 파일·디렉터리 기본 조작 |
| 2단계 (핵심) | cat, less, head, tail, grep, find, man | 파일 내용 확인·검색 |
| 3단계 (실무) | chmod, chown, ps, top, kill, history, echo | 권한·프로세스·환경 관리 |
1단계: 위치 파악과 디렉터리 탐색
pwd – 지금 어디에 있는지 확인
“`bash
pwd
“`
pwd는 print working directory의 약자입니다. 터미널을 열면 항상 pwd로 시작하는 습관을 들이면 “파일이 어디 갔지?”라는 혼란이 크게 줄어듭니다.

ls – 디렉터리 내용 나열
“`bash
ls # 기본 목록
ls -l # 상세 정보 (권한, 소유자, 크기, 수정 시간)
ls -a # 숨김 파일(.으로 시작하는 항목) 포함
ls -al # 위 두 옵션 조합 (가장 자주 씀)
ls -lh # 파일 크기를 사람이 읽기 쉽게 표시 (KB, MB 단위)
“`
> 옵션 조합 팁: ls -al은 ls -a -l과 완전히 동일합니다. 플래그를 붙여 쓰는 것이 관례입니다.
cd – 디렉터리 이동
“`bash
cd /home/username/projects # 절대경로로 이동
cd projects # 상대경로로 이동 (현재 위치 기준)
cd .. # 상위 디렉터리로 이동
cd ~ # 홈 디렉터리로 이동 (/home/username과 동일)
cd – # 직전에 있던 디렉터리로 이동
“`
#### 🚨 초보자 마찰 포인트: 절대경로 vs 상대경로
| 구분 | 형태 | 예시 |
|---|---|---|
| 절대경로 | /로 시작 | /home/username/Downloads |
| 상대경로 | 현재 위치 기준 | ./mydir, ../otherdir |
cd mydir과 cd ./mydir은 결과가 같지만, 스크립트에서는 ./를 명시하는 것이 안전합니다. 경로에 공백이나 한글이 포함된 경우에는 따옴표로 감싸야 합니다.
“`bash
cd “My Folder” # 올바른 방법
cd My\ Folder # 백슬래시로 공백 이스케이프
cd My Folder # ❌ 에러: No such file or directory
“`
2단계: 파일과 디렉터리 조작
mkdir – 디렉터리 생성
“`bash
mkdir mydir # 단일 디렉터리 생성
mkdir -p a/b/c # 부모 디렉터리가 없어도 한 번에 생성
mkdir -p existing/dir # 이미 존재해도 에러 없이 넘어감
“`
-p 옵션은 중첩 구조를 한 번에 만들 때 유용합니다. -p 없이 존재하지 않는 부모 경로를 지정하면 에러가 납니다.
touch – 파일 생성 및 시간 갱신
“`bash
touch newfile.txt # 새 파일 생성
touch existing.txt # 이미 있는 파일이면 수정 시간만 현재로 갱신
“`
빈 파일을 빠르게 만들거나, 빌드 시스템에서 파일 타임스탬프를 갱신할 때 자주 씁니다.
cp – 파일·디렉터리 복사
“`bash

cp source.txt dest.txt # 파일 복사
cp -r source_dir dest_dir # 디렉터리 재귀 복사 (필수: -r 없으면 에러)
cp -f source.txt dest.txt # 대상 파일이 있으면 강제 덮어쓰기
“`
#### 🚨 초보자 마찰 포인트: 인자 순서
cp 명령어는 항상 원본(source) → 대상(destination) 순서입니다. 반대로 입력하면 원본이 덮어써져 복구가 어렵습니다. 디렉터리를 복사할 때 -r 옵션을 빠뜨리면 오류가 발생하므로 습관적으로 확인하세요.
mv – 파일·디렉터리 이동 또는 이름 변경
“`bash
mv oldname.txt newname.txt # 이름 변경
mv file.txt /home/user/docs/ # 다른 디렉터리로 이동
mv dir1 /tmp/ # 디렉터리 이동 (-r 옵션 불필요)
“`
mv는 같은 파일시스템 내에서는 실제 데이터를 옮기지 않고 경로(링크)만 변경하므로 매우 빠릅니다. 다른 파일시스템 간 이동은 복사 후 삭제 방식으로 동작합니다.
rm – 파일·디렉터리 삭제 ⚠️ 가장 위험한 명령어
“`bash
rm file.txt # 파일 삭제
rm -r mydir # 디렉터리와 내부 전체 재귀 삭제
rm -rf mydir # 확인 없이 강제 삭제 (-r + -f 조합)
rmdir emptydir # 비어있는 디렉터리만 삭제 가능
“`
#### 🚨 rm -rf 안전 가이드
리눅스 터미널에는 휴지통이 없습니다. rm으로 삭제한 파일은 특수한 복구 도구 없이는 돌아오지 않습니다.
위험한 패턴과 안전한 대안:
| 위험한 패턴 | 왜 위험한가 | 안전한 방법 |
|---|---|---|
rm -rf / | 시스템 전체 삭제 | 최신 시스템은 --no-preserve-root 없이 차단 |
rm -rf /* | / 하위 전체 삭제 | 작업 전 pwd 확인 필수 |
rm -rf ~/ | 홈 디렉터리 전체 삭제 | ~/ 뒤에 슬래시 하나 실수로 대참사 |
와일드카드 rm -rf *.log | 의도치 않은 파일 일치 | ls *.log로 대상 먼저 확인 |
> 실전 안전 루틴: rm -rf를 실행하기 전에 동일한 경로를 ls로 먼저 확인하는 습관을 들이세요.
rmdir은 비어있는 디렉터리만 삭제할 수 있습니다. 안에 파일이 하나라도 있으면 rmdir: failed to remove 'dir': Directory not empty 오류가 납니다. 내용물이 있는 디렉터리는 rm -r을 사용해야 합니다.
3단계: 파일 내용 확인
cat – 파일 전체 출력
“`bash
cat file.txt # 파일 내용을 터미널에 출력
cat file1.txt file2.txt # 두 파일을 이어서 출력
“`
짧은 파일 확인에 적합합니다. 긴 파일을 cat으로 열면 터미널이 텍스트로 가득 차 스크롤이 밀려버립니다. 이때는 less를 사용하세요.
less – 페이지 단위로 스크롤
“`bash
less largefile.log
“`
| 키 | 동작 |
|---|---|
Space / f | 다음 페이지 |
b | 이전 페이지 |
/검색어 | 아래 방향 검색 |
n | 다음 검색 결과 |
q | 종료 |
#### 🚨 초보자 마찰 포인트
긴 로그 파일을 cat으로 열어 터미널이 넘친 경험이 있다면, 앞으로는 less를 먼저 떠올리세요.
head / tail – 파일 앞뒤 출력
“`bash
head file.txt # 앞에서 10줄 (기본값)
head -n 20 file.txt # 앞에서 20줄
tail file.txt # 뒤에서 10줄 (기본값)
tail -n 50 file.txt # 뒤에서 50줄
tail -f access.log # 파일 실시간 모니터링 (로그 추적에 필수)
“`
tail -f는 서버 로그를 실시간으로 모니터링할 때 매우 자주 쓰입니다. 로그 파일에 새 내용이 추가될 때마다 즉시 터미널에 출력됩니다.
—
4단계: 검색과 필터링
grep – 텍스트 패턴 검색
“`bash
grep “ERROR” server.log # 파일에서 “ERROR” 포함 줄 출력
grep -i “error” server.log # 대소문자 구분 없이 검색
grep -r “config” /etc/ # 디렉터리 재귀 검색
grep -n “TODO” *.py # 줄 번호 함께 출력
grep -v “DEBUG” server.log # 해당 패턴 제외하고 출력
“`
find – 파일·디렉터리 검색
“`bash
find . -name “*.txt” # 현재 디렉터리 이하에서 .txt 파일 검색
find /home -name “config.json” # 특정 디렉터리에서 파일명으로 검색
find . -type d -name “logs” # 디렉터리(-type d) 이름으로 검색
find . -mtime -7 # 7일 이내 수정된 파일 검색
find . -size +100M # 100MB 이상인 파일 검색
“`
파이프(|)와 리다이렉션으로 명령어 연결하기
기본 명령어들은 파이프(|)로 연결할 때 진짜 위력이 발휘됩니다. 경쟁 글들이 거의 다루지 않는 부분입니다.
“`bash
tail -f /var/log/syslog | grep “ERROR”
ls -al | grep “2025”
ls -al > filelist.txt # 덮어쓰기
ls -al >> filelist.txt # 이어서 추가
ps aux | grep “nginx”
du -sh * | sort -rh | head -10
“`
5단계: 권한 관리
chmod – 파일 권한 변경
리눅스의 파일 권한은 소유자(owner) / 그룹(group) / 기타(others) 세 구분으로 나뉩니다.
“`bash
chmod 755 script.sh # rwxr-xr-x
chmod 644 file.txt # rw-r–r–
chmod +x script.sh # 실행 권한만 추가 (기호 표기)
chmod -w file.txt # 쓰기 권한 제거
“`
숫자 표기법 이해:
| 숫자 | 권한 | 의미 |
|---|---|---|
| 4 | r | 읽기 |
| 2 | w | 쓰기 |
| 1 | x | 실행 |
| 7 | rwx | 읽기+쓰기+실행 |
| 6 | rw- | 읽기+쓰기 |
| 5 | r-x | 읽기+실행 |
755 = 소유자(7=rwx) / 그룹(5=r-x) / 기타(5=r-x)
644 = 소유자(6=rw-) / 그룹(4=r–) / 기타(4=r–)
chown – 소유자 변경
“`bash
sudo chown username file.txt # 소유자 변경
sudo chown username:groupname dir/ # 소유자+그룹 동시 변경
sudo chown -R username /var/www/ # 재귀적으로 하위 전체 변경
“`
#### 🚨 Permission denied 에러 해결
Permission denied가 뜰 때 초보자가 흔히 하는 실수는 무조건 sudo를 붙이는 것입니다. 먼저 파일 소유권과 권한을 확인하세요.
“`bash
ls -l 문제파일 # 권한과 소유자 확인
whoami # 현재 사용자 확인
“`
시스템 디렉터리(/etc, /usr, /var 등)가 아닌 내 홈 디렉터리에서 Permission denied가 난다면, 권한이 잘못 설정된 것이므로 chmod로 수정하는 것이 올바른 접근입니다.
6단계: 프로세스 및 시스템 정보
프로세스 관리
“`bash
ps aux # 실행 중인 모든 프로세스 목록
ps aux | grep “python” # 특정 프로세스 찾기
top # 실시간 프로세스 모니터링 (q로 종료)
kill 1234 # 프로세스 ID(PID)로 종료
kill -9 1234 # 강제 종료 (SIGKILL)
“`
시스템 정보 확인
“`bash
uname -a # 커널 버전 및 시스템 정보
df -h # 디스크 사용량 (사람이 읽기 쉬운 단위)
du -sh /home/user/ # 특정 디렉터리 용량 확인
free -h # 메모리 사용량
“`
7단계: 도움말과 명령어 환경 이해
man과 –help – 구글 검색 전에 먼저 확인
많은 초보자가 모르는 것을 구글에서만 찾는데, 사실 가장 정확한 설명은 이미 터미널 안에 있습니다.
“`bash
man ls # ls 명령어 전체 매뉴얼 (q로 종료)
ls –help # 간단한 사용법과 옵션 요약
man grep # grep 정규표현식 옵션까지 상세 설명
“`
man 페이지 안에서도 /검색어로 원하는 내용을 찾을 수 있습니다.
history / clear / which
“`bash
history # 실행한 명령어 이력 (번호 포함)
!150 # history에서 150번 명령어 재실행
clear # 터미널 화면 지우기
which python3 # python3 명령어가 어디 있는지 경로 확인
echo $PATH # 셸이 명령어를 찾는 경로 목록 확인
“`
#### 🚨 command not found 에러 해결
“`
bash: somecommand: command not found
“`
이 에러는 두 가지 원인 중 하나입니다.
- 패키지가 설치되지 않음 →
sudo apt install 패키지명(Ubuntu) 또는sudo dnf install 패키지명(Rocky/RHEL 계열) - PATH에 경로가 없음 →
which somecommand로 위치 확인 후 PATH에 추가
주요 명령어 한눈에 보기
| 분류 | 명령어 | 핵심 기능 | |
|---|---|---|---|
| 탐색 | pwd | 현재 경로 출력 | |
| 탐색 | ls -al | 숨김 파일 포함 상세 목록 | |
| 탐색 | cd ~ | 홈 디렉터리 이동 | |
| 디렉터리 | mkdir -p | 중첩 디렉터리 한 번에 생성 | |
| 디렉터리 | rmdir | 빈 디렉터리만 삭제 | |
| 파일 | touch | 빈 파일 생성 | |
| 파일 | cp -r | 디렉터리 재귀 복사 | |
| 파일 | mv | 이동/이름 변경 | |
| 파일 | rm -rf | 강제 재귀 삭제 ⚠️ | |
| 내용 확인 | cat | 짧은 파일 전체 출력 | |
| 내용 확인 | less | 긴 파일 페이지 스크롤 | |
| 내용 확인 | tail -f | 로그 실시간 추적 | |
| 검색 | grep -r | 디렉터리 재귀 텍스트 검색 | |
| 검색 | find . -name | 파일명으로 검색 | |
| 권한 | chmod 755 | 권한 변경 | |
| 권한 | chown | 소유자 변경 | |
| 프로세스 | `ps aux \ | grep` | 특정 프로세스 찾기 |
| 도움말 | man | 공식 매뉴얼 | |
| 환경 | which | 명령어 위치 확인 |
환경별 주의사항 요약
WSL(Windows Subsystem for Linux)
- Windows 파일은
/mnt/c/경로로 접근 - 파일 권한이 순수 Linux와 다르게 동작할 수 있음
- 줄바꿈 문자가
\r\n(CRLF)으로 저장된 스크립트는 실행 오류 발생 가능 →dos2unix변환 필요
컨테이너(Docker 등)
- 컨테이너 내부에서
rm -rf /를 실행해도 호스트가 삭제되지 않으나, 컨테이너 자체는 망가짐 - BusyBox 기반 경량 이미지에서는 일부 옵션이 지원되지 않을 수 있음
클라우드 서버
- 학습용·무료 계정은
sudo권한이 제한될 수 있음 - 항상
whoami와pwd로 현재 컨텍스트를 확인하는 습관 필요
자주 묻는 질문
rm으로 삭제한 파일을 복구할 수 있나요?
기본적으로 리눅스 터미널의 rm은 파일을 휴지통으로 보내지 않고 즉시 삭제합니다. 일반적인 방법으로는 복구가 어렵습니다. 중요한 작업 전에는 cp로 백업하거나, trash-cli 같은 도구를 설치해 휴지통 개념을 도입하는 것을 권장합니다. 서버 환경이라면 스냅샷이나 백업 정책을 미리 구성하는 것이 최선입니다.
`sudo`를 붙이면 항상 Permission denied 문제가 해결되나요?
항상은 아닙니다. sudo는 관리자 권한으로 명령어를 실행하는 것이며, 무분별하게 사용하면 시스템 파일을 실수로 삭제하는 등의 사고로 이어질 수 있습니다. 먼저 ls -l로 해당 파일의 소유자와 권한을 확인하고, 내 홈 디렉터리 내 파일이라면 chmod로 권한을 수정하는 것이 올바른 접근입니다. 시스템 파일(/etc, /usr 등)을 다룰 때만 sudo를 사용하는 것이 원칙입니다.
명령어 옵션이 너무 많아서 외우기 어렵습니다. 어떻게 하면 좋을까요?
모두 외울 필요가 없습니다. man ls나 ls --help를 습관적으로 활용하면 됩니다. 실무에서 자주 쓰는 옵션은 반복하다 보면 자연스럽게 익혀집니다. 처음에는 1단계 명령어 8개(pwd, ls, cd, mkdir, rm, cp, mv, touch)만 손에 익히고, 나머지는 필요할 때 man으로 찾아보는 방식이 훨씬 효율적입니다.
