
클라우드 서버를 관리하든, Docker 컨테이너를 다루든, WSL로 개발 환경을 세팅하든 결국 마주하는 건 까만 터미널 화면과 깜빡이는 커서입니다. 2026년 현재, GUI 도구가 아무리 좋아져도 리눅스 명령어를 직접 다룰 수 있느냐 없느냐는 IT 작업 생산성에서 큰 차이를 만듭니다. 서버 장애가 났을 때, Docker 로그를 확인해야 할 때, 대용량 파일에서 특정 문자열을 찾아야 할 때 — 이 순간들에 명령어 하나를 아는 것과 모르는 것은 문제 해결 속도를 10배 이상 벌려 놓습니다.
이 글에서는 일상적으로 가장 자주 쓰이는 리눅스 명령어 40개를 실전 예제와 함께 카테고리별로 정리합니다. 단순히 명령어 이름과 옵션을 나열하는 것이 아니라, 실제 상황에서 어떻게 조합해서 쓰는지에 초점을 맞췄습니다. 리눅스를 처음 접하는 분도 이 가이드 하나면 터미널 앞에서 당황하지 않을 겁니다.

파일과 디렉토리 — 모든 작업의 출발점
리눅스에서 가장 먼저 익혀야 할 것은 파일과 디렉토리를 다루는 기본 명령어입니다. 윈도우의 파일 탐색기에서 마우스로 하던 일을 터미널에서 키보드로 하는 것이라 생각하면 됩니다.
1. ls — 파일 목록 보기
ls는 현재 디렉토리의 파일과 폴더를 보여주는 가장 기본적인 명령어입니다. 하지만 옵션에 따라 훨씬 강력해집니다.
ls -la: 숨김 파일 포함, 상세 정보(권한·크기·수정일)를 모두 표시합니다. 서버 설정 파일은 대부분 점(.)으로 시작하는 숨김 파일이라-a옵션 없이는 보이지 않습니다.ls -lh: 파일 크기를 KB, MB, GB 단위로 읽기 쉽게 표시합니다.ls -lt: 최근 수정된 파일 순서로 정렬합니다. 로그 파일이 많을 때 가장 최근 파일을 빠르게 찾을 수 있습니다.ls -lS: 파일 크기 순으로 정렬합니다. 디스크 공간이 부족할 때 큰 파일부터 확인하는 데 유용합니다.
2. cd — 디렉토리 이동
cd는 change directory의 약자입니다. 단순해 보이지만 알아두면 편리한 사용법이 있습니다.
cd ~: 홈 디렉토리로 이동합니다.cd만 입력해도 같은 효과입니다.cd -: 직전에 있던 디렉토리로 돌아갑니다. 두 디렉토리를 번갈아 작업할 때 매우 편리합니다.cd ..: 상위 디렉토리로 이동합니다.cd ../..으로 두 단계 위로 올라갈 수도 있습니다.
3. pwd — 현재 위치 확인
터미널에서 길을 잃었다면 pwd(print working directory)를 입력하세요. 현재 절대 경로를 보여줍니다. 스크립트를 작성할 때 현재 작업 디렉토리를 변수에 저장하는 용도로도 자주 씁니다.
4. mkdir — 디렉토리 생성
mkdir 프로젝트이름으로 폴더를 만듭니다. mkdir -p a/b/c를 쓰면 중간 경로가 없어도 한 번에 여러 단계의 디렉토리를 생성합니다. Docker 볼륨 경로나 프로젝트 구조를 세팅할 때 -p 옵션은 거의 필수입니다.
5. cp — 파일·디렉토리 복사
cp 원본 대상 형태로 씁니다. 디렉토리를 복사할 때는 cp -r(recursive)을 반드시 붙여야 합니다. 설정 파일을 백업할 때 cp nginx.conf nginx.conf.bak처럼 습관적으로 사본을 만들어 두면 실수를 되돌리기 쉽습니다.
6. mv — 이동 및 이름 변경
mv는 파일을 이동하거나 이름을 변경할 때 씁니다. mv old_name.txt new_name.txt는 이름 변경, mv file.txt /home/user/docs/는 이동입니다. cp와 달리 원본이 사라진다는 점을 주의하세요.
7. rm — 파일·디렉토리 삭제
rm file.txt로 파일을 삭제합니다. 리눅스에는 휴지통이 없습니다. 한 번 지우면 복구가 매우 어렵습니다.
rm -r 디렉토리명: 디렉토리와 하위 내용 전체를 삭제합니다.rm -i file.txt: 삭제 전 확인을 물어봅니다. 중요한 서버에서는 이 습관을 들이는 것이 좋습니다.rm -rf /: 절대 실행하지 마세요. 시스템 전체가 삭제됩니다. 이것은 농담이 아니라 실제로 벌어지는 사고입니다.
8. touch — 빈 파일 생성
touch newfile.txt는 빈 파일을 만듭니다. 이미 파일이 존재하면 수정 시간만 갱신합니다. 테스트용 파일을 빠르게 만들거나, Makefile 등에서 타임스탬프 관리에 쓰입니다.
9. find — 파일 검색
find는 조건에 맞는 파일을 디렉토리 트리에서 찾아주는 강력한 명령어입니다.
find . -name "*.log": 현재 디렉토리 아래에서 확장자가 .log인 파일을 모두 찾습니다.find /var -size +100M: /var 아래에서 100MB 이상인 파일을 찾습니다. 디스크 정리할 때 유용합니다.find . -mtime -7: 최근 7일 이내에 수정된 파일을 찾습니다.find . -name "*.tmp" -delete: 조건에 맞는 파일을 찾아서 바로 삭제합니다.
10. ln — 심볼릭 링크(바로가기) 생성
ln -s /실제/경로 /링크/경로로 심볼릭 링크를 만듭니다. 윈도우의 바로가기와 비슷한 개념입니다. Nginx 설정에서 sites-available과 sites-enabled 사이의 연결이 대표적인 활용 사례입니다.
텍스트 처리와 검색 — 로그 분석의 핵심 도구
서버 관리에서 가장 많이 하는 작업이 로그 파일을 들여다보고, 특정 패턴을 찾고, 데이터를 가공하는 일입니다. 여기서 소개하는 명령어들은 조합하면 엑셀 없이도 대부분의 텍스트 데이터를 처리할 수 있습니다.

11. cat — 파일 내용 출력
cat file.txt는 파일 전체 내용을 화면에 출력합니다. 짧은 설정 파일을 빠르게 확인할 때 좋습니다. 여러 파일을 합칠 때 cat a.txt b.txt > merged.txt처럼 쓸 수도 있습니다. 단, 수천 줄짜리 로그를 cat으로 열면 터미널이 폭주하니 큰 파일에는 다른 도구를 쓰세요.
12. head / tail — 파일의 앞·뒤 확인
head -n 20 access.log는 파일의 처음 20줄을, tail -n 20 access.log는 마지막 20줄을 보여줍니다. 특히 tail -f access.log는 실시간으로 추가되는 로그를 계속 출력합니다. 서버 디버깅할 때 이 명령어 하나면 별도의 로그 뷰어가 필요 없습니다.
13. grep — 텍스트 패턴 검색
grep은 리눅스에서 가장 자주 쓰이는 명령어 중 하나입니다. 파일 내용에서 특정 문자열이 포함된 줄을 찾아줍니다.
grep "ERROR" app.log: 로그에서 에러 메시지만 추출합니다.grep -i "error" app.log: 대소문자를 구분하지 않고 검색합니다.grep -r "TODO" ./src/: 디렉토리 아래 모든 파일에서 TODO를 찾습니다.grep -c "404" access.log: 404 에러가 몇 건인지 세어줍니다.grep -v "DEBUG" app.log: DEBUG가 포함되지 않은 줄만 출력합니다(반전 검색).
14. less — 대용량 파일 탐색
less large_file.log는 파일을 한 화면씩 보여줍니다. 위아래 스크롤이 가능하고, /검색어로 파일 내 검색도 됩니다. q를 누르면 종료합니다. cat과 달리 파일 전체를 메모리에 올리지 않아서 수 GB짜리 로그도 부담 없이 열 수 있습니다.
15. wc — 줄·단어·문자 수 세기
wc -l file.txt는 줄 수를 셉니다. 로그 파일의 요청 건수를 빠르게 파악하거나, 코드 라인 수를 확인할 때 유용합니다. find . -name "*.py" | wc -l처럼 파이프와 조합하면 파이썬 파일이 몇 개인지도 바로 알 수 있습니다.
16. sort — 정렬
sort file.txt는 줄 단위로 알파벳순 정렬합니다. sort -n은 숫자순, sort -r은 역순, sort -u는 중복 제거 후 정렬합니다. 접속 로그에서 IP별 요청 수를 분석할 때 sort와 uniq를 함께 쓰는 패턴이 매우 자주 등장합니다.
17. uniq — 중복 제거
uniq는 연속된 중복 줄을 제거합니다. 반드시 sort와 함께 써야 제대로 동작합니다. sort access.log | uniq -c | sort -rn | head는 “가장 많이 등장하는 항목 상위 10개”를 보여주는 리눅스 원라이너의 정석입니다.
18. awk — 구조화된 텍스트 처리
awk는 열(column) 단위로 텍스트를 처리하는 데 특화된 도구입니다. CSV나 공백으로 구분된 데이터를 다룰 때 빛을 발합니다.
awk '{print $1}' access.log: 각 줄의 첫 번째 필드(보통 IP 주소)만 출력합니다.awk -F',' '{print $2, $3}' data.csv: 쉼표로 구분된 CSV에서 2, 3번째 열을 추출합니다.df -h | awk '$5 > 80 {print $0}': 디스크 사용률이 80%를 넘는 파티션만 출력합니다.
19. sed — 텍스트 치환
sed는 스트림 에디터로, 파일을 열지 않고 텍스트를 바꿀 수 있습니다.
sed 's/old/new/g' file.txt: old를 new로 모두 치환하여 출력합니다.sed -i 's/old/new/g' file.txt:-i옵션을 붙이면 파일 자체를 직접 수정합니다. 설정 파일의 값을 스크립트로 일괄 변경할 때 필수입니다.sed -n '10,20p' file.txt: 10줄부터 20줄까지만 출력합니다.
20. cut — 필드 추출
cut -d':' -f1 /etc/passwd는 콜론으로 구분된 /etc/passwd 파일에서 첫 번째 필드(사용자 이름)만 추출합니다. 간단한 필드 추출에는 awk보다 가볍고 빠릅니다.
시스템 모니터링과 프로세스 관리
서버가 느려졌거나 특정 서비스가 먹통일 때, 원인을 빠르게 파악하려면 시스템 상태를 확인하는 명령어를 알아야 합니다. 이 섹션의 명령어들은 서버 관리자라면 매일 쓰게 됩니다.
21. top / htop — 실시간 시스템 모니터링
top은 윈도우의 작업 관리자와 비슷합니다. CPU, 메모리 사용량과 실행 중인 프로세스 목록을 실시간으로 보여줍니다. htop은 top의 개선 버전으로 색상 표시, 마우스 지원, 프로세스 트리 보기 등 훨씬 직관적입니다. 대부분의 서버에서 apt install htop으로 설치할 수 있으니 반드시 설치하세요.
22. ps — 프로세스 목록 확인
ps aux는 현재 실행 중인 모든 프로세스를 보여줍니다. ps aux | grep nginx처럼 grep과 조합하면 특정 프로세스가 돌아가고 있는지 확인할 수 있습니다. Docker 컨테이너 내부에서 실행 중인 프로세스를 확인할 때도 유용합니다.
23. kill / killall — 프로세스 종료
kill PID로 특정 프로세스를 종료합니다. 정상 종료 요청은 kill PID(SIGTERM), 강제 종료는 kill -9 PID(SIGKILL)입니다. killall nginx는 이름이 nginx인 모든 프로세스를 종료합니다. 응답하지 않는 서비스를 재시작해야 할 때 자주 씁니다.

24. df — 디스크 사용량 확인
df -h는 마운트된 디스크 파티션별 사용량을 사람이 읽기 쉬운 단위로 보여줍니다. Docker 이미지와 볼륨이 쌓이면 디스크가 금방 차기 때문에, 서버 관리자라면 df -h를 습관적으로 확인해야 합니다.
25. du — 디렉토리별 용량 확인
du -sh *는 현재 디렉토리의 각 하위 항목별 용량을 보여줍니다. du -sh /var/log/*로 어떤 로그가 디스크를 많이 차지하는지 한눈에 파악할 수 있습니다. du -sh * | sort -rh | head -10을 조합하면 가장 큰 폴더/파일 10개를 바로 찾을 수 있습니다.
26. free — 메모리 사용량 확인
free -h는 시스템의 전체 메모리, 사용 중인 메모리, 캐시, 스왑 사용량을 보여줍니다. 서버에 OOM(Out of Memory) 이슈가 발생할 때 가장 먼저 확인하는 명령어입니다.
27. uptime — 서버 가동 시간과 부하 확인
uptime은 서버가 얼마나 오래 켜져 있는지, 그리고 load average(시스템 부하)를 보여줍니다. load average 숫자가 CPU 코어 수보다 높으면 시스템에 과부하가 걸려 있다는 신호입니다.
28. systemctl — 서비스 관리
최신 리눅스 배포판에서 서비스를 관리하는 핵심 명령어입니다.
systemctl status nginx: Nginx의 실행 상태를 확인합니다.systemctl restart nginx: Nginx를 재시작합니다.systemctl enable nginx: 부팅 시 자동 시작되도록 설정합니다.systemctl list-units --failed: 실패한 서비스 목록을 확인합니다. 서버 부팅 후 문제가 있는지 체크할 때 유용합니다.
29. journalctl — 시스템 로그 조회
journalctl은 systemd 기반 시스템의 로그를 조회하는 통합 도구입니다.
journalctl -u nginx --since today: 오늘 발생한 Nginx 로그만 봅니다.journalctl -f: 실시간 로그 스트림을 봅니다(tail -f와 비슷).journalctl --disk-usage: 저널 로그가 차지하는 디스크 용량을 확인합니다.
네트워크와 권한 — 서버 운영의 양대 축
네트워크 상태를 확인하고, 파일 권한을 올바르게 설정하는 것은 서버 보안과 안정성의 기본입니다. 이 영역의 명령어를 모르면 서버 운영에서 반드시 벽에 부딪힙니다.
30. curl — HTTP 요청 보내기
curl은 터미널에서 웹 요청을 보내는 만능 도구입니다. API 테스트, 서버 상태 확인, 파일 다운로드까지 다양하게 활용됩니다.
curl -I https://example.com: 응답 헤더만 확인합니다. 서버가 살아있는지 빠르게 체크할 때 좋습니다.curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' URL: JSON 데이터로 POST 요청을 보냅니다.curl -o file.zip URL: 파일을 다운로드합니다.curl -sS URL | jq: API 응답을jq로 깔끔하게 포맷팅합니다.
31. wget — 파일 다운로드
wget URL은 파일 다운로드에 특화된 명령어입니다. curl과 달리 끊긴 다운로드를 이어받기(wget -c)가 기본 지원되고, 재귀 다운로드(wget -r)도 가능합니다. 서버에 설치 파일을 받을 때 주로 사용합니다.
32. ping — 네트워크 연결 확인
ping google.com은 해당 서버까지 네트워크가 연결되는지, 응답 시간은 얼마인지 확인합니다. 네트워크 문제의 1차 진단 도구입니다. ping -c 5 google.com으로 5번만 핑을 보내고 멈출 수 있습니다.
33. ss — 네트워크 포트 확인
ss -tlnp는 현재 열려 있는 TCP 포트와 해당 포트를 사용 중인 프로세스를 보여줍니다. 예전에는 netstat을 썼지만 현재는 ss가 표준입니다. 포트 충돌이 발생하거나, 특정 서비스가 제대로 리슨하고 있는지 확인할 때 필수입니다.
34. chmod — 파일 권한 변경
리눅스 파일 권한은 읽기(r=4), 쓰기(w=2), 실행(x=1)의 조합으로 소유자, 그룹, 기타 사용자에 대해 각각 설정됩니다.
chmod 755 script.sh: 소유자는 읽기+쓰기+실행, 나머지는 읽기+실행 권한을 부여합니다. 실행 스크립트에 주로 쓰는 권한입니다.chmod 644 config.yaml: 소유자만 쓰기 가능, 나머지는 읽기만 가능합니다. 설정 파일의 일반적인 권한입니다.chmod +x deploy.sh: 실행 권한만 추가합니다.
35. chown — 파일 소유자 변경
chown user:group file.txt로 파일의 소유자와 그룹을 변경합니다. Docker에서 마운트된 볼륨의 권한 문제가 발생하면 chown -R 1000:1000 /data처럼 소유권을 맞춰주는 것이 일반적인 해결 방법입니다.
36. sudo — 관리자 권한으로 실행
sudo는 일반 사용자가 관리자(root) 권한으로 명령어를 실행하게 해 줍니다. 패키지 설치, 시스템 설정 변경 등 대부분의 관리 작업에 필요합니다. sudo -i로 root 셸에 진입할 수 있지만, 상시 root로 작업하는 것은 보안상 권장하지 않습니다.
압축·전송·기타 필수 유틸리티
일상적인 서버 운영에서 빠질 수 없는 나머지 실전 명령어들을 정리합니다.
37. tar — 압축 및 해제
tar는 리눅스 세계의 ZIP입니다. 옵션 조합이 다양하지만, 실전에서는 이 두 가지만 기억하면 됩니다.
tar -czf backup.tar.gz /target/dir: gzip 압축으로 아카이브를 생성합니다. (c=create, z=gzip, f=filename)tar -xzf backup.tar.gz: gzip 아카이브를 해제합니다. (x=extract)tar -xzf backup.tar.gz -C /target/dir: 특정 디렉토리에 풀어놓습니다.
38. scp / rsync — 원격 파일 전송
scp local_file user@server:/remote/path는 SSH를 통해 파일을 전송합니다. 단순 복사에는 scp가 편하지만, 대량 파일이나 반복 백업에는 rsync가 훨씬 낫습니다.
rsync -avz /local/dir/ user@server:/remote/dir/: 변경된 파일만 전송하고, 진행 상황을 표시합니다.rsync --delete: 원본에서 삭제된 파일을 대상에서도 삭제합니다. 완전한 미러링에 쓰입니다.
39. xargs — 파이프 결과를 명령어 인자로 변환
xargs는 표준 입력을 받아서 다른 명령어의 인자로 넘겨주는 접착제 역할을 합니다. find . -name "*.log" -mtime +30 | xargs rm은 30일 이상 된 로그 파일을 찾아서 일괄 삭제하는 실전 원라이너입니다.
40. alias — 명령어 단축키 만들기
자주 쓰는 긴 명령어를 짧게 줄여주는 기능입니다.
alias ll='ls -alh': ll만 입력하면 상세 목록을 봅니다.alias dps='docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"': Docker 컨테이너 상태를 깔끔하게 보여줍니다.
이 설정을 ~/.bashrc나 ~/.zshrc에 추가하면 터미널을 열 때마다 자동으로 적용됩니다.

실전 원라이너 — 명령어 조합의 위력
리눅스 명령어의 진짜 힘은 파이프(|)로 여러 명령어를 연결하는 데 있습니다. 하나하나는 단순한 도구지만, 조합하면 복잡한 작업을 한 줄로 해결할 수 있습니다. 실무에서 바로 복사해서 쓸 수 있는 원라이너 모음을 소개합니다.
접속 로그에서 IP별 요청 수 상위 10개 추출
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
웹 서버 접속 로그에서 어떤 IP가 가장 많은 요청을 보냈는지 한눈에 파악할 수 있습니다. 비정상적인 트래픽이나 봇 공격을 탐지하는 첫 번째 단계입니다.
디스크를 가장 많이 차지하는 디렉토리 찾기
du -h --max-depth=1 / 2>/dev/null | sort -rh | head -10
루트 디렉토리부터 한 단계 아래까지의 용량을 큰 순서대로 보여줍니다. 디스크가 꽉 찼을 때 원인을 빠르게 찾는 정석 명령어입니다.
특정 포트를 사용 중인 프로세스 찾기
ss -tlnp | grep :8080
8080 포트를 점유하고 있는 프로세스를 확인합니다. 포트 충돌로 서비스가 시작되지 않을 때 반드시 필요한 진단 명령어입니다.
여러 서버에 동시에 명령어 실행
for host in server1 server2 server3; do ssh $host 'df -h' ; done
여러 서버의 디스크 상태를 한 번에 확인하는 간단한 루프입니다. 본격적인 자동화에는 Ansible 같은 도구를 쓰지만, 서버가 2~3대일 때는 이 정도면 충분합니다.
Docker 사용하지 않는 리소스 정리
docker system prune -af --volumes
중지된 컨테이너, 미사용 이미지, 네트워크, 볼륨을 모두 정리합니다. Docker를 오래 쓰면 디스크가 점점 차는데, 이 명령어 하나로 깔끔하게 공간을 확보할 수 있습니다. 단, 보존해야 할 볼륨이 있다면 --volumes는 빼세요.
변경된 설정 파일 빠르게 찾기
find /etc -mtime -1 -type f
/etc 디렉토리에서 최근 24시간 이내에 수정된 설정 파일을 찾습니다. 서버 설정이 언제 누구에 의해 바뀌었는지 추적할 때 유용합니다.
효율적인 터미널 작업을 위한 습관
명령어를 아는 것과 잘 쓰는 것은 다릅니다. 몇 가지 습관을 들이면 터미널 작업 속도가 눈에 띄게 빨라집니다.
Tab 자동완성을 적극 활용하세요
파일 이름이나 명령어를 몇 글자 입력하고 Tab 키를 누르면 자동으로 완성됩니다. 오타를 줄이고 속도를 높이는 가장 기본적인 습관입니다. 두 번 연속 Tab을 누르면 가능한 후보 목록을 보여줍니다.
명령어 히스토리를 활용하세요
위 화살표로 이전 명령어를 불러올 수 있고, Ctrl+R을 누르면 히스토리에서 검색할 수 있습니다. 과거에 실행했던 복잡한 명령어를 다시 입력할 필요 없이 몇 글자만 치면 찾을 수 있습니다. history | grep docker로 이전에 실행한 Docker 관련 명령어를 모두 확인할 수도 있습니다.
위험한 명령어 전에 dry-run 하세요
rm이나 rsync --delete 같은 파괴적인 명령어를 실행하기 전에 먼저 대상을 확인하세요. 예를 들어 find . -name "*.tmp"으로 삭제 대상 목록을 먼저 보고, 문제가 없으면 find . -name "*.tmp" -delete를 실행하는 식입니다. rsync에는 --dry-run 옵션이 있어서 실제 전송 없이 어떤 파일이 전송될지 미리 볼 수 있습니다.
스크립트로 발전시키세요
같은 명령어 조합을 세 번 이상 반복한다면 쉘 스크립트로 만드세요. #!/bin/bash로 시작하는 .sh 파일에 명령어를 적고 chmod +x로 실행 권한을 주면 됩니다. 서버 점검, 백업, 로그 정리 같은 반복 작업을 자동화하는 첫걸음이 바로 쉘 스크립트입니다.
마무리 — 꾸준히 써야 손에 익는다
40개 명령어를 한 번에 외우려고 하지 마세요. 처음에는 이 글을 북마크해 두고, 필요할 때마다 찾아보면 됩니다. 자연스럽게 자주 쓰는 명령어가 손에 익고, 익숙해진 명령어들을 파이프로 연결하는 순간 터미널이 가장 강력한 도구가 됩니다.
리눅스 명령어는 한 번 배우면 어디서든 통합니다. AWS 서버든, NAS든, Docker 컨테이너 안이든, WSL이든 같은 명령어가 동작합니다. 이 보편성이야말로 터미널 명령어를 배우는 가장 큰 이유입니다. 오늘 하나라도 직접 터미널에 입력해 보세요. 읽는 것과 직접 쳐보는 것은 완전히 다른 경험입니다.
이미지는 Leonardo AI 로 생성되었습니다.
이미지는 Claude AI 로 생성되었습니다.