WebPiki
tutorial

개발자 필수 리눅스 명령어 30선 — 매일 쓰는 것만 골랐다

파일 조작부터 프로세스 관리, 네트워크, 디스크까지. 개발자가 실무에서 실제로 자주 쓰는 리눅스 명령어 30개를 정리.

리눅스 명령어 모음 글은 넘치는데, 정작 필요한 상황에서 "이거 어떻게 하더라?" 하면서 또 검색하게 된다. 교과서식으로 A부터 Z까지 나열하는 건 참고서지 실용 가이드가 아니다.

여기서는 서버를 다루거나 개발 환경에서 실제로 자주 마주치는 상황별로 정리했다. "이 상황에서 이 명령어"를 빠르게 찾을 수 있도록.

파일과 디렉토리

1. ls — 목록 보기

ls -la          # 숨김 파일 포함, 상세 정보
ls -lh          # 파일 크기를 사람이 읽기 쉽게 (KB, MB)
ls -lt          # 수정 시간 순 정렬

-l은 거의 항상 붙인다. -a.env 같은 숨김 파일을 확인할 때 필수.

2. cd — 디렉토리 이동

cd ~            # 홈 디렉토리
cd -            # 직전 디렉토리로 돌아가기
cd ../..        # 두 단계 상위

cd -를 모르는 사람이 의외로 많은데, 두 폴더를 왔다갔다 할 때 엄청 편하다.

3. cp, mv, rm — 복사, 이동, 삭제

cp -r src/ backup/        # 디렉토리 통째로 복사
mv old-name.txt new.txt   # 이름 변경 (이동과 같은 명령)
rm -rf node_modules/      # 디렉토리 강제 삭제 (주의!)

rm -rf는 확인 없이 삭제하니까 항상 경로를 두 번 확인해야 한다. 특히 변수가 포함된 경로(rm -rf $DIR/)는 변수가 비어있으면 끔찍한 일이 벌어질 수 있다.

4. mkdir — 디렉토리 생성

mkdir -p src/components/ui    # 중간 경로까지 한번에 생성

-p 옵션 없이 하면 중간 디렉토리가 없을 때 에러가 난다.

5. find — 파일 찾기

find . -name "*.log"                    # 현재 디렉토리에서 .log 파일 찾기
find . -name "*.tmp" -delete            # 찾아서 삭제
find . -type f -mtime -1                # 최근 1일 내 수정된 파일
find . -size +100M                      # 100MB 넘는 파일

find는 옵션 조합이 강력하다. -name에는 와일드카드 쓸 때 따옴표로 감싸야 쉘이 먼저 해석하는 걸 막을 수 있다.

파일 내용 다루기

6. cat — 파일 내용 출력

cat config.yml              # 전체 출력
cat file1.txt file2.txt     # 여러 파일 연결 출력

짧은 파일 확인용. 긴 파일은 less를 쓰는 게 낫다.

7. less — 페이지 단위 보기

less /var/log/syslog

j/k로 위아래 이동, /검색어로 검색, q로 종료. vim 키바인딩이랑 비슷하다.

8. head, tail — 앞/뒤 일부만 보기

head -n 20 file.txt         # 앞 20줄
tail -n 50 file.txt         # 뒤 50줄
tail -f /var/log/app.log    # 실시간 로그 추적

tail -f는 서버 로그를 실시간으로 모니터링할 때 쓴다. Ctrl+C로 종료.

9. grep — 텍스트 검색

grep "error" app.log                    # 파일에서 검색
grep -r "TODO" src/                     # 디렉토리 재귀 검색
grep -i "warning" log.txt               # 대소문자 무시
grep -n "function" script.js            # 줄 번호 표시
grep -c "404" access.log                # 매칭 횟수

개발할 때 가장 많이 쓰는 명령어 중 하나다. -r-n을 자주 조합한다. 더 빠른 대안으로 ripgrep(rg)도 있다.

10. wc — 줄/단어/바이트 수 세기

wc -l file.txt              # 줄 수
find src/ -name "*.ts" | wc -l   # TypeScript 파일 개수

11. sort, uniq — 정렬과 중복 제거

sort access.log | uniq -c | sort -rn | head -20

이 조합은 로그에서 가장 많이 나타나는 패턴을 찾을 때 유용하다. 접속 로그에서 가장 많이 요청된 URL이나 IP를 찾는다든지.

권한과 소유자

12. chmod — 권한 변경

chmod 755 deploy.sh          # rwxr-xr-x (스크립트 실행 가능)
chmod 600 .env               # rw------- (본인만 읽기/쓰기)
chmod +x script.sh           # 실행 권한 추가

숫자가 뭘 뜻하는지: 4=읽기, 2=쓰기, 1=실행. 세 자리가 각각 소유자/그룹/기타에 대응. 7=4+2+1(전부), 5=4+1(읽기+실행), 0(없음).

13. chown — 소유자 변경

chown -R www-data:www-data /var/www/    # 디렉토리 소유자 변경

웹 서버 배포할 때 파일 소유자가 안 맞아서 403 에러 나는 경우가 종종 있다.

프로세스 관리

14. ps — 프로세스 목록

ps aux                      # 전체 프로세스
ps aux | grep node          # node 관련 프로세스만

15. kill — 프로세스 종료

kill 12345                  # PID로 종료 (SIGTERM)
kill -9 12345               # 강제 종료 (SIGKILL)

포트 충돌로 서버가 안 뜰 때, 해당 포트를 쓰는 프로세스를 찾아서 죽이는 패턴:

lsof -i :3000               # 3000번 포트 사용 중인 프로세스
kill $(lsof -t -i :3000)    # 해당 프로세스 종료

16. top / htop — 시스템 모니터링

top                         # 기본 모니터
htop                        # 더 보기 좋은 버전 (설치 필요)

CPU, 메모리 사용량을 실시간으로 보여준다. 서버가 느려졌을 때 뭐가 자원을 잡아먹고 있는지 확인하는 첫 번째 도구.

17. nohup / & — 백그라운드 실행

nohup node server.js > output.log 2>&1 &

SSH 세션이 끊겨도 프로세스가 계속 돌게 하려면 nohup을 쓴다. 프로덕션에서는 PM2나 systemd를 쓰는 게 맞지만, 급할 때 임시로 쓸 수 있다.

네트워크

18. curl — HTTP 요청

curl https://api.example.com/data           # GET 요청
curl -X POST -d '{"key":"value"}' -H "Content-Type: application/json" URL
curl -o file.zip https://example.com/file   # 파일 다운로드
curl -I https://example.com                 # 헤더만 확인

API 테스트할 때 Postman 대신 빠르게 쓸 수 있다. -v 옵션을 붙이면 요청/응답 헤더를 전부 볼 수 있어서 디버깅에 좋다.

19. wget — 파일 다운로드

wget https://example.com/file.tar.gz
wget -r -l 1 https://example.com/docs/     # 재귀 다운로드

20. ss (또는 netstat) — 네트워크 연결 확인

ss -tlnp                    # 리스닝 중인 TCP 포트와 프로세스

"이 포트에서 뭐가 돌고 있지?" 할 때 쓴다. 예전에는 netstat을 썼는데 ss가 더 빠르다.

21. ping — 연결 확인

ping -c 4 google.com        # 4번만 핑

서버 간 네트워크가 통하는지 가장 기본적인 확인.

디스크와 시스템

22. df — 디스크 사용량

df -h                       # 파티션별 사용량 (사람이 읽기 쉽게)

서버 디스크가 100% 차면 앱이 죽는다. 정기적으로 확인하는 습관이 필요하다.

23. du — 디렉토리별 용량

du -sh *                    # 현재 디렉토리의 각 항목 크기
du -sh node_modules/        # 특정 디렉토리 크기
du -h --max-depth=1 | sort -rh    # 큰 디렉토리부터 정렬

디스크가 부족할 때 뭐가 공간을 잡아먹고 있는지 찾는 용도.

24. tar — 압축/해제

tar -czf backup.tar.gz src/        # 압축
tar -xzf backup.tar.gz             # 해제
tar -tzf backup.tar.gz             # 내용물만 확인

-create, e-xtract, -z gzip, -f file. "-czf는 압축, -xzf는 해제"로 외우면 된다.

텍스트 처리

25. sed — 스트림 편집

sed -i 's/old/new/g' file.txt           # 파일 내 텍스트 치환
sed -n '10,20p' file.txt                # 10~20번째 줄만 출력

26. awk — 필드 기반 텍스트 처리

awk '{print $1}' access.log             # 첫 번째 필드 (보통 IP)
awk -F: '{print $1}' /etc/passwd        # 구분자 지정
docker ps | awk '{print $1, $2}'        # 컨테이너 ID와 이미지

sedawk는 깊게 파면 한없이 깊은데, 위의 패턴 정도만 알아도 실무에서 대부분 해결된다.

기타 유용한 것들

27. xargs — 파이프 결과를 인자로 전달

find . -name "*.log" | xargs rm        # 찾은 파일 전부 삭제
git branch --merged | grep -v main | xargs git branch -d

28. watch — 명령어 반복 실행

watch -n 2 "docker ps"      # 2초마다 컨테이너 상태 확인

29. history — 명령어 히스토리

history | grep "docker"     # docker 관련 히스토리
!234                        # 히스토리 234번 명령어 재실행

30. alias — 별칭 만들기

alias ll='ls -la'
alias gs='git status'
alias dc='docker compose'

~/.bashrc~/.zshrc에 넣어두면 매번 긴 명령어를 안 쳐도 된다.

파이프와 리디렉션만 알면 조합이 무한대

리눅스 명령어의 진짜 힘은 개별 명령어가 아니라 조합에 있다.

# 파이프 (|) — 앞 명령의 출력을 뒤 명령의 입력으로
cat access.log | grep "POST" | wc -l

# 리디렉션 (>) — 출력을 파일로
echo "hello" > file.txt      # 덮어쓰기
echo "world" >> file.txt     # 이어쓰기

# 에러 리디렉션
command 2>/dev/null           # 에러 메시지 숨기기
command > output.log 2>&1     # 표준 출력 + 에러를 한 파일에

30개 명령어를 전부 외울 필요는 없다. 자주 쓰는 건 손에 익고, 가끔 쓰는 건 이 글 같은 레퍼런스를 참고하면 된다. 중요한 건 "이런 게 가능하다"는 걸 아는 거다. 가능한 걸 알면 검색어가 떠오르니까.

#리눅스#Linux#명령어#터미널#개발자

관련 글