Developer Tools

모든 개발자가 알아야 할 Linux 커맨드라인 핵심 명령어

파일 시스템 탐색, 권한 관리, 프로세스 관리, 텍스트 처리, 네트워킹 등 개발 현장에서 매일 사용하는 Linux 명령어 실용 참고서.

9분 읽기

어두운 화면에 초록색 텍스트가 표시된 터미널

Linux 커맨드라인은 서버, 컨테이너, CI 파이프라인, 개발 환경을 아우르는 범용 인터페이스입니다. 새벽 2시에 프로덕션 서버에 SSH로 접속하든, Docker 컨테이너를 디버깅하든, 이 명령어들에 익숙한지 여부가 혼란과 자신감의 차이를 만듭니다.

탐색 및 파일 관리

# 디렉토리 탐색
pwd                      # 현재 작업 디렉토리 출력
cd /var/log              # 절대 경로로 이동
cd ..                    # 한 단계 위로
cd -                     # 이전 디렉토리로 돌아가기
cd ~                     # 홈 디렉토리로 이동

# 파일 목록 보기
ls                       # 기본 목록
ls -la                   # 상세 형식 + 숨김 파일
ls -lh                   # 사람이 읽기 쉬운 파일 크기
ls -lt                   # 수정 시간 기준 정렬 (최신순)

# 생성, 복사, 이동, 삭제
mkdir -p path/to/dir     # 디렉토리 + 상위 경로 생성
cp -r source/ dest/      # 재귀적 복사
mv oldname newname       # 이름 변경 또는 이동
rm -rf directory/        # 디렉토리 및 내용 삭제 (되돌릴 수 없음!)
touch file.txt           # 빈 파일 생성 / 타임스탬프 갱신

# 파일 보기 및 탐색
cat file.txt             # 파일 전체 출력
less file.txt            # 페이지 단위 뷰어 (q로 종료, /로 검색)
head -n 20 file.txt      # 처음 20줄
tail -n 20 file.txt      # 마지막 20줄
tail -f /var/log/app.log # 실시간 로그 추적

파일 권한

Linux 권한은 소유자, 그룹, 기타 사용자에 대한 읽기/쓰기/실행 비트 세 묶음으로 표현됩니다:

-rwxr-xr--  1 alice devs  4096 Apr 8 10:00 script.sh

권한 문자열 읽기: -rwxr-xr--

  • - — 파일 유형 (d = 디렉토리, l = 심볼릭 링크)
  • rwx — 소유자: 읽기, 쓰기, 실행
  • r-x — 그룹: 읽기, 실행 (쓰기 없음)
  • r-- — 기타: 읽기 전용

chmod — 권한 변경

# 기호 표기법
chmod u+x script.sh      # 소유자에게 실행 권한 추가
chmod g-w file.txt       # 그룹에서 쓰기 권한 제거
chmod o=r file.txt       # 기타 사용자를 읽기 전용으로 설정
chmod a+r file.txt       # 모두에게 읽기 권한 추가 (a = all)

# 숫자(8진수) 표기법
chmod 755 script.sh      # rwxr-xr-x (실행 파일에 일반적)
chmod 644 file.txt       # rw-r--r-- (파일에 일반적)
chmod 600 ~/.ssh/id_rsa  # rw------- (SSH 키에 필수)
chmod 700 ~/.ssh/        # rwx------ (.ssh 디렉토리에 필수)

Chmod Calculator를 사용하면 권한 문자열을 시각적으로 구성하고 각 8진수 값의 의미를 이해할 수 있습니다.

검색 및 텍스트 처리

# 파일 찾기
find /var/log -name "*.log"               # 이름으로 찾기
find . -name "*.ts" -newer package.json   # package.json보다 최신 파일
find . -type f -size +10M                 # 10MB 초과 파일
find . -name "node_modules" -prune        # 디렉토리 제외

# 파일 내용 검색
grep "error" app.log                      # 파일에서 검색
grep -r "TODO" ./src                      # 재귀적 검색
grep -i "error" app.log                   # 대소문자 무시
grep -n "error" app.log                   # 줄 번호 표시
grep -v "DEBUG" app.log                   # 일치하지 않는 줄
grep -E "error|warning" app.log           # 정규식: error 또는 warning

# 스트림 텍스트 처리
cat access.log | grep "404" | wc -l       # 404 에러 개수 세기
cat data.csv | cut -d',' -f1,3            # 1번, 3번 열 추출
cat file.txt | sort | uniq                # 정렬 및 중복 제거
cat file.txt | sort | uniq -c | sort -rn  # 출현 횟수 집계 후 빈도순 정렬

awk — 필드 기반 처리

# 특정 필드 출력 (기본값은 탭 구분)
awk '{print $1, $3}' file.txt

# CSV 처리 (쉼표 구분)
awk -F',' '{print $2}' data.csv

# 열 합산
awk -F',' '{sum += $3} END {print sum}' data.csv

# 패턴과 일치하는 줄 출력
awk '/ERROR/ {print $0}' app.log

sed — 스트림 편집기

# 텍스트 교체
sed 's/foo/bar/' file.txt          # 줄당 첫 번째 발생만 교체
sed 's/foo/bar/g' file.txt         # 모든 발생 교체 (전역)
sed -i 's/foo/bar/g' file.txt      # 파일 직접 수정 (파일 변경됨)

# 줄 삭제
sed '/^#/d' file.txt               # 주석 줄 삭제
sed '5,10d' file.txt               # 5~10번 줄 삭제

# 특정 줄 출력
sed -n '10,20p' file.txt           # 10~20번 줄 출력

프로세스 관리

# 실행 중인 프로세스 보기
ps aux                             # 모든 프로세스 상세 정보
ps aux | grep nginx                # nginx 프로세스 찾기
top                                # 대화형 프로세스 뷰어
htop                               # 더 나은 대화형 뷰어 (설치된 경우)

# 프로세스 제어
kill PID                           # SIGTERM 전송 (정상 종료)
kill -9 PID                        # SIGKILL 전송 (강제 종료)
pkill nginx                        # 이름으로 종료
killall node                       # 일치하는 모든 프로세스 종료

# 백그라운드 작업
command &                          # 백그라운드에서 실행
jobs                               # 백그라운드 작업 목록
fg %1                              # 작업 1을 포그라운드로 가져오기
nohup command &                    # 행업에 영향받지 않고 실행 (로그아웃 후에도 유지)

# 시스템 리소스
free -h                            # 메모리 사용량
df -h                              # 디스크 공간 사용량
du -sh /var/log/                   # 디렉토리 크기
lsof -i :3000                      # 포트 3000을 사용 중인 프로세스

네트워킹 명령어

# 연결 확인
ping google.com                    # 연결 테스트
curl -I https://example.com        # HTTP 헤더만 확인
curl -o file.zip https://example.com/file.zip  # 파일 다운로드
wget https://example.com/file.zip  # 대체 다운로드 도구

# 연결 상태 확인
ss -tulpn                          # 수신 대기 포트 및 프로세스
netstat -tulpn                     # 대체 명령어 (구형 시스템)
lsof -i :80                        # 포트 80을 사용 중인 프로세스

# DNS
dig example.com                    # DNS 조회
dig example.com MX                 # MX 레코드 조회
host example.com                   # 간단한 DNS 조회
nslookup example.com               # 대화형 DNS 쿼리

SSH 및 원격 접속

# 서버에 연결
ssh user@server.com
ssh -p 2222 user@server.com        # 비표준 포트
ssh -i ~/.ssh/id_rsa user@server.com  # 특정 키 사용

# 파일 복사
scp file.txt user@server.com:~/    # 원격 홈 디렉토리로 복사
scp user@server.com:~/file.txt .   # 원격에서 복사
scp -r ./dist user@server.com:~/app/  # 재귀적 복사

# SSH 터널링 (포트 포워딩)
ssh -L 5432:localhost:5432 user@server.com  # 원격 DB를 로컬 포트로 터널링

SSH Key Generator로 안전한 인증을 위한 SSH 키 쌍을 생성하세요.

환경 및 셸

# 환경 변수
export API_KEY=abc123              # 현재 세션 및 자식 프로세스에 설정
echo $API_KEY                      # 변수 출력
env                                # 모든 환경 변수 목록
printenv PATH                      # 특정 변수 출력
unset API_KEY                      # 변수 제거

# 셸 히스토리
history                            # 이전 명령어 목록
!!                                 # 마지막 명령어 반복
!grep                              # 마지막 grep 명령어 반복
Ctrl+R                             # 히스토리 역방향 검색 (입력하여 검색)

# 유용한 단축키
Ctrl+C                             # 현재 프로세스 중단
Ctrl+Z                             # 백그라운드로 일시 중지
Ctrl+L                             # 화면 지우기 (clear와 동일)
Ctrl+A                             # 줄의 맨 앞으로 이동
Ctrl+E                             # 줄의 맨 끝으로 이동
Ctrl+U                             # 커서 앞의 줄 내용 지우기

파이프 및 리다이렉션

# 파이프 — 명령어 연결
ls -la | grep ".log" | wc -l

# 출력 리다이렉션
command > file.txt                 # stdout으로 파일 덮어쓰기
command >> file.txt                # stdout을 파일에 추가
command 2> errors.txt              # stderr 리다이렉션
command > all.txt 2>&1             # stdout + stderr를 같은 파일로 리다이렉션
command &> all.txt                 # 위의 축약형

# /dev/null — 출력 버리기
command > /dev/null 2>&1           # 모든 출력 버리기 (조용히 실행)

개발자를 위한 유용한 원라이너

# 디렉토리 내 모든 파일에서 찾아 바꾸기
find . -name "*.tsx" | xargs sed -i 's/OldComponent/NewComponent/g'

# 공인 IP 확인
curl -s ifconfig.me

# 파일 변경 사항 모니터링
watch -n 2 "ls -la uploads/"

# 디렉토리 압축
tar -czf archive.tar.gz ./directory/

# tar.gz 압축 해제
tar -xzf archive.tar.gz

# 현재 디렉토리에서 가장 큰 파일 10개 표시
du -sh * | sort -rh | head -10

# 파일 유형별 코드 줄 수 세기
find . -name "*.ts" | xargs wc -l | sort -rn | head -20

커맨드라인은 투자한 만큼 돌아옵니다. 배운 명령어 하나하나가 더 강력한 조합을 위한 빌딩 블록이 됩니다. 탐색과 grep부터 시작해서 파이프를 추가하고, 그다음 awk를 익히면 어떤 텍스트 처리 작업도 거뜬히 해낼 수 있습니다.