리눅스 명령어 정리: 실무 필수 40선 총정리

핵심 요약
  • 실무에서 매일 쓰는 리눅스 명령어 40개를 8개 그룹으로 나눠 표와 실행 예시로 정리했습니다.
  • 모든 명령어를 코드 스타일로 표기하고, 복사해 바로 써볼 수 있는 실제 터미널 예시를 함께 넣었습니다.
  • 로그 분석 파이프라인, 권한 숫자 표기, 백업(tar) 등 현장에서 바로 쓰는 조합 예시를 다룹니다.
  • rm·chmod 777처럼 자주 실수하는 부분과 안전 습관도 짚어드립니다.

리눅스 명령어는 옵션까지 포함하면 수천 개가 넘지만, 실무에서 매일 반복해서 쓰는 명령어는 40개 남짓으로 좁혀집니다. 이 글에서는 파일 관리부터 권한·검색·텍스트 처리·프로세스·네트워크까지, 서버를 운영하며 실제로 손에 붙는 핵심 명령어 40개를 그룹별로 정리했습니다. 각 명령어는 표에 기능대표 예시를 함께 담았고, 중요한 부분에는 복사해 바로 실행해볼 수 있는 터미널 예시를 넣었습니다.

리눅스 명령어, 왜 알아야 할까

한국 사무직 근로자가 검은 터미널 창에서 빛나는 명령어를 보며 당황한 표정을 짓는 모습

서버 운영체제는 대부분 리눅스 기반입니다. 개발은 윈도우나 macOS에서 하더라도 실제 서비스는 리눅스 서버에서 돌아가는 경우가 압도적으로 많습니다. GUI 없이 CLI(Command Line Interface)만으로 서버를 점검·관리해야 하는 상황이 잦기 때문에, 기본 명령어를 익혀두면 장애 대응이나 배포 작업에서 시간을 크게 아낄 수 있습니다.

어떤 환경에서 연습하면 좋을까

개인 PC에서 리눅스를 연습하는 방법은 여러 가지입니다. WSL(Windows Subsystem for Linux)은 설치가 간단하고 실제 리눅스와 거의 동일하게 동작해 입문자에게 적합합니다. VMware나 VirtualBox 같은 가상머신은 완전히 독립된 환경을 만들 수 있지만 상대적으로 느리고, Docker는 훨씬 가볍지만 개념을 익히는 데 시간이 걸립니다. 집에서 시놀로지 나스홈서버를 직접 구축ssh로 접속해보는 것도 명령어를 몸으로 익히는 좋은 방법입니다.

배포판이 달라도 기본 명령어는 같다

Ubuntu, CentOS, Rocky Linux, Oracle Linux 등 배포판은 수십 종류지만 기본 명령어 체계는 거의 동일합니다. 실무에서는 Ubuntu 계열과 RHEL(Red Hat Enterprise Linux) 계열이 가장 널리 쓰이며, 이 글에서 소개하는 명령어는 두 계열 모두에서 그대로 사용할 수 있습니다. 차이가 나는 부분은 패키지 설치 명령 정도입니다(apt vs dnf).

1. 파일·디렉터리 관리 명령어 (10개)

파일 시스템을 탐색하고 조작하는 명령어는 리눅스 사용의 기본입니다. 가장 자주 쓰는 10개를 표로 정리했습니다.

명령어 기능 대표 예시
ls 파일 목록 확인 ls -al (숨김 파일까지 자세히)
cd 디렉터리 이동 cd /var/log
pwd 현재 경로 출력 pwd
mkdir 디렉터리 생성 mkdir -p app/src (중간 경로까지)
rmdir 빈 디렉터리 삭제 rmdir old
touch 빈 파일 생성·시간 갱신 touch test.txt
cp 파일·디렉터리 복사 cp -r src backup
mv 이동·이름 변경 mv old.txt new.txt
rm 파일·디렉터리 삭제 rm -r folder
ln 링크(바로가기) 생성 ln -s /opt/app app (심볼릭 링크)

아래는 프로젝트 디렉터리를 하나 만들어 파일을 다루는 전형적인 흐름입니다. #으로 시작하는 줄은 설명용 주석입니다.

# 작업 디렉터리 생성 후 이동
mkdir -p ~/project/logs
cd ~/project

# 빈 파일 만들고 목록 확인
touch app.conf
ls -al

# 복사 → 이름 변경 → 삭제
cp app.conf app.conf.bak
mv app.conf.bak backup.conf
rm backup.conf

경로 표기(...)를 헷갈리지 않는 법

초보자가 가장 자주 헷갈리는 부분이 .(현재 디렉터리)..(상위 디렉터리)입니다. 예를 들어 cp ../lib/abc .는 “상위 디렉터리 아래 lib 폴더의 abc 파일을 현재 위치(.)로 복사하라”는 뜻입니다. 맨 앞이 /로 시작하는 절대경로와, 현재 위치 기준의 상대경로를 구분해 쓰는 습관을 들이면 실수를 크게 줄일 수 있습니다.

주의: rm -r은 디렉터리 전체를 되돌릴 수 없이 삭제합니다. 실무에서는 삭제 전 반드시 ls로 대상을 재확인하거나, 확인 프롬프트가 뜨는 rm -i를 습관적으로 쓰는 것이 안전합니다. 특히 rm -rf /처럼 최상위 경로를 지우는 명령은 절대 입력하지 마세요.

2. 파일 내용 확인 명령어 (5개)

돋보기로 펼쳐진 문서의 텍스트 줄들을 검토하는 모습

파일을 열어보거나 로그를 확인할 때 쓰는 명령어들입니다. 설정 파일 점검이나 장애 로그 분석에서 특히 자주 사용됩니다.

명령어 기능 대표 예시
cat 파일 전체 출력 cat /etc/hostname
less 페이지 단위로 열람(위아래 스크롤) less access.log
head 앞부분 출력 head -n 20 app.log
tail 뒷부분 출력·실시간 추적 tail -f app.log
wc 줄·단어·바이트 수 세기 wc -l access.log (줄 수)

로그 모니터링에서 가장 많이 쓰는 조합이 tail -f입니다. 새로 쌓이는 로그를 실시간으로 화면에 흘려보내며, 특정 문자열만 보고 싶다면 grep과 이어 붙입니다.

# 로그가 쌓이는 것을 실시간으로 보되, ERROR가 포함된 줄만
tail -f app.log | grep ERROR

# 파일 앞 5줄과 뒤 5줄만 빠르게 확인
head -n 5 access.log
tail -n 5 access.log

3. 검색·필터·정렬 명령어 (6개)

수천 줄짜리 로그에서 원하는 정보를 뽑아낼 때 쓰는 명령어들입니다. 파이프(|)로 연결하면 강력한 분석 도구가 됩니다.

명령어 기능 대표 예시
grep 문자열이 포함된 줄 검색 grep "error" app.log
find 조건으로 파일 검색 find /etc -name "*.conf"
sort 줄 정렬 sort -rn nums.txt (숫자 내림차순)
uniq 중복 줄 제거·집계 uniq -c (중복 개수 표시)
cut 구분자로 특정 필드 추출 cut -d',' -f1 data.csv
xargs 앞 명령 결과를 다음 명령의 인자로 전달 find . -name "*.tmp" | xargs rm

아래는 웹 서버 접속 로그에서 가장 많이 접속한 IP 상위 5개를 뽑는, 실무에서 매우 자주 쓰는 파이프라인입니다. 명령어 4개를 파이프로 이어 붙였습니다.

# access.log에서 IP(첫 번째 필드)만 추출 → 정렬 → 중복 집계 → 많은 순 정렬 → 상위 5개
cut -d' ' -f1 access.log | sort | uniq -c | sort -rn | head -n 5

# 결과 예시
#   1420 203.0.113.45
#    880 198.51.100.7
#    512 203.0.113.9

팁: grep -r "검색어" .는 현재 디렉터리 아래 모든 파일을 재귀 검색하고, grep -i는 대소문자를 무시합니다. 어떤 설정값이 어느 파일에 있는지 찾을 때 grep -rn(줄 번호까지 표시)이 특히 유용합니다.

4. 텍스트 스트림 처리 명령어 (2개)

로그 가공이나 설정 파일 일괄 수정에는 텍스트 전용 명령어가 효율적입니다. sedawk는 조금 어렵지만, 아래 기본 형태만 알아도 활용도가 높습니다.

명령어 기능 대표 예시
sed 스트림 단위 치환·삭제 sed 's/old/new/g' file.txt
awk 필드 단위 처리·집계 awk '{print $1}' access.log
# 파일 안의 'localhost'를 모두 '127.0.0.1'로 치환해 화면에 출력
sed 's/localhost/127.0.0.1/g' config.txt

# -i 옵션은 파일을 실제로 수정(백업을 남기려면 -i.bak)
sed -i.bak 's/DEBUG/INFO/g' app.conf

# awk로 특정 열만 뽑고 합계 구하기 (예: 3번째 열의 합)
awk '{ sum += $3 } END { print sum }' data.txt

5. 권한(permission)과 소유자 관리 (4개)

자물쇠가 달린 폴더를 열기 위해 열쇠를 주고받는 두 한국인

리눅스는 파일마다 소유자(owner)·그룹(group)·기타(other) 세 주체에 대해 읽기(r)·쓰기(w)·실행(x) 권한을 따로 관리합니다. 이 구조를 이해하지 못하면 권한 오류로 작업이 막히는 경우가 많습니다.

명령어 기능 대표 예시
chmod 권한 변경 chmod 755 run.sh
chown 소유자(·그룹) 변경 chown www-data:www-data index.html
chgrp 그룹만 변경 chgrp developers app.log
umask 새 파일의 기본 권한 설정 umask 022

권한 숫자 표기 이해하기

읽기는 4, 쓰기는 2, 실행은 1의 값을 가지며 이를 합산해 세 자리 숫자로 표기합니다. 예를 들어 chmod 755는 소유자에게 읽기+쓰기+실행(4+2+1=7), 그룹과 기타 사용자에게는 읽기+실행(4+1=5)만 부여한다는 의미입니다.

숫자 권한 의미
7 rwx 읽기+쓰기+실행
6 rw- 읽기+쓰기
5 r-x 읽기+실행
4 r– 읽기만

ls -l로 권한을 읽는 법과 변경 예시입니다. 웹 서버의 정적 파일은 보통 644, 실행 스크립트는 755로 설정합니다.

$ ls -l run.sh
-rw-r--r-- 1 deploy deploy 320 Jul 24 10:12 run.sh
# 맨 앞 rw-r--r-- 이 권한. 소유자 rw-, 그룹 r--, 기타 r--  (=644)

# 실행 권한을 부여해 스크립트로 만들기
chmod 755 run.sh          # 또는 chmod +x run.sh

# 소유자와 그룹을 한 번에 변경
chown deploy:www-data run.sh

실무에서 흔한 실수: 권한 오류가 날 때 무작정 chmod 777(모든 사용자에게 전권한)로 해결하는 경우가 있는데, 이는 보안상 매우 위험합니다. 웹 디렉터리를 777로 열어두면 제3자가 파일을 임의로 수정·삭제할 수 있으므로, 반드시 필요한 최소 권한만 부여해야 합니다.

6. 압축·아카이브 명령어 (3개)

백업을 만들거나 여러 파일을 하나로 묶어 전송할 때 쓰는 명령어입니다. 리눅스에서는 tar로 묶고 gzip으로 압축하는 방식이 표준입니다.

명령어 기능 대표 예시
tar 여러 파일을 하나로 묶기·풀기 tar -czf log.tar.gz logs/
gzip 단일 파일 압축·해제 gzip access.log
unzip zip 파일 해제 unzip data.zip
# logs 디렉터리를 통째로 묶어 gzip 압축 (c=생성, z=gzip, f=파일명, v=진행표시)
tar -czvf backup-$(date +%Y%m%d).tar.gz logs/

# 압축 해제 (x=풀기)
tar -xzvf backup-20260724.tar.gz

# 내용만 미리 확인 (t=목록 보기)
tar -tzf backup-20260724.tar.gz

7. 프로세스·시스템 관리 명령어 (6개)

시스템 프로세스와 리소스 사용량을 나타내는 게이지와 기어로 구성된 대시보드

서버가 느려지거나 특정 프로그램이 응답하지 않을 때, 무엇이 자원을 쓰고 있는지 확인하고 제어하는 명령어입니다.

명령어 기능 대표 예시
ps 실행 중인 프로세스 목록 ps aux
top CPU·메모리 실시간 모니터 top (종료는 q)
kill 프로세스 종료 kill -9 1234 (강제 종료)
df 디스크 전체 용량·여유 공간 df -h
du 디렉터리별 사용량 du -sh /var/log
systemctl 서비스 시작·중지·상태 확인 systemctl status nginx

특정 프로세스를 찾아 종료하는 흐름입니다. 서버 운영 중 응답 없는 프로세스를 정리할 때 자주 씁니다.

# nginx 관련 프로세스 찾기
ps aux | grep nginx

# 찾은 PID(예: 1234)로 정상 종료 시도 → 안 되면 강제 종료(-9)
kill 1234
kill -9 1234

# 서비스는 systemctl로 다루는 것이 안전
systemctl restart nginx
systemctl status nginx

디스크 부족은 서비스 중단의 흔한 원인입니다. df -h로 전체 여유 공간을 보고, 어느 디렉터리가 용량을 많이 쓰는지는 du -sh *로 좁혀 들어가면 됩니다. 로그 파일이 쌓이는 /var/log는 주기적으로 점검하세요.

8. 네트워크·원격 접속 명령어 (4개)

서버 간 통신 상태를 점검하거나 원격 서버에 접속·파일을 내려받을 때 쓰는 명령어입니다.

명령어 기능 대표 예시
ping 대상 서버 연결 확인 ping -c 4 google.com
curl URL 요청·API 호출 curl -I https://example.com
wget 파일 다운로드 wget https://example.com/app.tar.gz
ssh 원격 서버 접속 ssh user@서버IP
# 서버가 살아있는지 4번만 확인
ping -c 4 example.com

# HTTP 응답 헤더만 확인 (-I), 상태 코드·서버 종류 점검에 유용
curl -I https://example.com

# API에서 JSON 받아오기
curl -s https://api.example.com/status

# 원격 서버 접속 (포트 지정은 -p)
ssh -p 22 deploy@203.0.113.10

텍스트 편집기(vi·nano) 기본 사용법

텍스트 에디터 창에서 차분하게 글을 작성하는 한국인

서버에는 GUI 편집기가 없으므로 vi(vim)로 파일을 직접 수정하는 경우가 많습니다. 처음엔 종료 방법조차 헷갈리기 쉬운데, 아래 순서만 기억하면 충분합니다.

  1. vi 파일명으로 파일을 엽니다.
  2. i 키를 눌러 입력(insert) 모드로 전환한 뒤 내용을 수정합니다.
  3. 수정이 끝나면 Esc 키로 입력 모드를 빠져나옵니다.
  4. 저장 후 종료하려면 :wq를 입력하고 엔터를 누릅니다.
  5. 저장하지 않고 종료하려면 :q!를 입력합니다.

간단한 수정만 필요하다면 nano 편집기가 더 직관적입니다. 화면 하단에 저장(Ctrl+O)·종료(Ctrl+X) 단축키가 항상 표시되어 있어 vi보다 진입 장벽이 낮습니다.

명령어를 더 강력하게: 파이프·리다이렉트·권한 상승

위 40개 명령어의 진짜 위력은 서로 이어 붙일 때 나옵니다. 아래 세 가지 문법만 익히면 대부분의 실무 작업을 한 줄로 처리할 수 있습니다.

# | (파이프): 앞 명령의 출력을 뒤 명령의 입력으로 전달
ps aux | grep python

# > (리다이렉트): 출력을 파일로 저장 (>>는 이어쓰기)
df -h > disk-report.txt
echo "점검 완료" >> disk-report.txt

# sudo: 관리자(root) 권한이 필요한 작업 앞에 붙임
sudo systemctl restart nginx

# man: 명령어의 전체 옵션과 사용법을 확인
man ls          # 종료는 q,  간단히 보려면 ls --help

정리: 이 글에서 다룬 40개 명령어에 |·>·sudo·man만 더하면 실무 대부분을 커버할 수 있습니다. 모든 옵션을 외우기보다, 자주 쓰는 기본형을 손에 익히고 상세 옵션은 man으로 그때그때 찾아 쓰는 것이 가장 효율적입니다.

자주 묻는 질문

Q. 리눅스 명령어를 다 외워야 하나요?

아닙니다. 리눅스 명령어는 옵션까지 포함하면 수천 개가 넘지만, 실무에서 반복적으로 쓰는 명령어는 이 글에서 소개한 40개 수준입니다. 처음에는 자주 쓰는 명령어의 기본 옵션 위주로 익히고, 필요할 때마다 man 명령어로 상세 옵션을 찾아보는 방식이 효율적입니다.

Q. Ubuntu와 CentOS(또는 Rocky Linux) 명령어가 다른가요?

기본 명령어(ls, cd, cp, rm 등)는 동일하게 동작합니다. 다만 패키지 관리 명령어는 계열별로 다릅니다. Ubuntu 계열은 apt를, CentOS·Rocky Linux 등 RHEL 계열은 yum 또는 dnf를 사용합니다.

Q. rm으로 삭제한 파일을 복구할 수 있나요?

기본적으로는 복구가 어렵습니다. 리눅스의 rm은 휴지통을 거치지 않고 즉시 삭제하므로, 중요한 파일을 다룰 때는 삭제 전 백업을 하거나 확인 옵션(rm -i)을 사용하는 것이 안전합니다.

Q. kill -9는 아무 때나 써도 되나요?

kill -9는 프로세스를 강제로 즉시 종료하기 때문에, 작업 중이던 데이터를 저장하지 못하고 끊길 수 있습니다. 먼저 옵션 없는 kill(정상 종료 신호)로 시도하고, 그래도 응답이 없을 때만 -9를 쓰는 것이 안전합니다. 서비스라면 systemctl stop을 우선 사용하세요.

Q. WSL과 실제 리눅스 서버는 완전히 같나요?

대부분의 명령어와 사용법은 동일하지만, WSL은 윈도우 위에서 동작하는 구조라 일부 시스템 레벨 기능(디바이스 접근, 커널 모듈 등)에는 제약이 있습니다. 명령어 연습용으로는 충분하지만, 실제 서버 운영 환경과 완전히 동일하지는 않다는 점을 참고하세요.

Q. 명령어 옵션은 어떻게 확인하나요?

대부분의 명령어는 man 명령어(예: man ls)를 입력하면 전체 옵션과 사용법을 볼 수 있습니다. man 페이지가 없는 경우 명령어 --help로 간단한 옵션 목록을 확인할 수 있습니다.

관련 글 보기