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를 익히면 어떤 텍스트 처리 작업도 거뜬히 해낼 수 있습니다.