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#명령어#터미널#개발자

Related Posts