리눅스 기초 명령어
- 단순히 명령어를 외우는 것이 아니라, ‘데이터가 흐르는 통로’로서의 리눅스 구조를 이해하는 데 집중
1. 입문용 기초 커맨드
1.1 파일 및 디렉토리 관리
- pwd
현재 작업 디렉토리(Present Working Directory)의 경로 출력
pwd
- ls
- 현재 디렉토리의 파일 및 하위 디렉토리 목록 표시
ls -l: 파일의 상세 정보(권한, 소유자, 크기, 수정 시간 등)를 함께 출력ls -a: 숨김 파일(이름이.으로 시작하는 파일)까지 모두 표시ls -h: 파일 크기를 사람이 읽기 쉬운 단위(예: KB, MB, GB)로 표시ls -r: 역순으로 정렬하여 표시ls -t: 수정 시간 순으로 정렬하여 표시
ls ls -l ls -a ls -lh ls -rt
- 현재 디렉토리의 파일 및 하위 디렉토리 목록 표시
- cd
- Change Directory의 약자, 디렉토리를 변경
cd <디렉토리_이름>: 지정된 디렉토리로 이동cd ..: 상위 디렉토리로 이동cd ~또는cd: 현재 사용자의 홈 디렉토리로 이동cd -: 이전 작업 디렉토리로 이동
cd myproject cd .. cd cd -
- Change Directory의 약자, 디렉토리를 변경
- mkdir
- Make Directory의 약자, 새로운 디렉토리 생성
mkdir <디렉토리_이름>: 지정된 이름의 디렉토리 생성mkdir -p <경로/디렉토리_이름>: 지정된 경로에 없는 상위 디렉토리까지 모두 생성
mkdir new_directory mkdir -p /home/user/nested/directory
- Make Directory의 약자, 새로운 디렉토리 생성
- rmdir
Remove Directory의 약자, 비어 있는 디렉토리 삭제
rmdir empty_directory
- rm
- Remove의 약자, 파일 또는 디렉토리 삭제
rm <파일_이름>: 지정된 파일 삭제rm -r <디렉토리_이름>: 지정된 디렉토리와 그 안의 모든 파일 및 하위 디렉토리 삭제 (주의해서 사용할 것!)rm -f <파일_이름>: 강제로 파일 삭제 (삭제 여부를 묻지 않음)rm -rf <디렉토리_이름>: 강제로 디렉토리와 그 안의 모든 내용 삭제 (매우 주의해서 사용할 것!)
rm myfile.txt rm -r old_directory rm -f important.log # 정말 필요한 경우에만 사용할 것!
- Remove의 약자, 파일 또는 디렉토리 삭제
- cp
- Copy의 약자, 파일 또는 디렉토리 복사
cp <원본_파일> <대상_파일>: 원본 파일을 대상 파일 이름으로 복사cp <원본_파일> <대상_디렉토리>/: 원본 파일을 대상 디렉토리 안으로 복사cp -r <원본_디렉토리> <대상_디렉토리>/: 원본 디렉토리와 그 안의 모든 내용을 대상 디렉토리 안으로 복사
cp original.txt backup.txt cp report.pdf /home/user/documents/ cp -r source_folder /opt/backup/
- Copy의 약자, 파일 또는 디렉토리 복사
- mv
- Move의 약자, 파일 또는 디렉토리의 위치를 변경하거나 이름 변경
mv <원본_파일> <대상_파일>: 원본 파일의 이름을 대상 파일 이름으로 변경mv <원본_파일> <대상_디렉토리>/: 원본 파일을 대상 디렉토리로 이동mv <원본_디렉토리> <새로운_디렉토리_이름>: 원본 디렉토리의 이름을 새로운 디렉토리 이름으로 변경mv <원본_디렉토리> <대상_디렉토리>/: 원본 디렉토리를 대상 디렉토리 안으로 이동
mv old_name.txt new_name.txt mv data.csv /tmp/ mv project_a project_b mv logs /var/archive/
- Move의 약자, 파일 또는 디렉토리의 위치를 변경하거나 이름 변경
- cat
파일의 내용을 화면에 출력
cat logfile.txt
- less
- 파일 내용을 페이지 단위로 넘겨가며 볼 수 있음
긴 파일 내용을 확인할 때 유용함 (Spacebar로 다음 페이지,
b로 이전 페이지,q로 종료)less very_long_file.txt
- head
- 파일의 처음 몇 줄(기본적으로 10줄)을 표시
-n <숫자>옵션으로 줄 수를 지정 가능head config.ini head -n 20 error.log
- tail
- 파일의 마지막 몇 줄을 표시
- 실시간 로그를 확인할 때 유용함
-f옵션 사용 시, 파일 내용이 추가될 때마다 계속해서 출력tail access.log tail -n 5 status.log tail -f application.log
- touch
빈 파일을 생성하거나 파일의 접근 및 수정 시간을 업데이트
touch new_file.txt touch existing_file.txt # 파일의 타임스탬프 업데이트
1.2 사용자 및 권한 관리
- sudo
- Superuser Do의 약자, 관리자 권한으로 명령어 실행
대부분의 시스템 관리 작업에 필요함
sudo apt update
- chmod
- 파일 또는 디렉토리의 권한(mode) 변경
- 숫자 모드 (예: 755, 644) 또는 심볼릭 모드 (예:
u+rwx,g+rx,o-w)를 사용함 u: 사용자(owner),g: 그룹(group),o: 기타(others),a: 모두(all)+: 권한 추가,-: 권한 제거,**=** : 권한 설정r: 읽기,w: 쓰기,x: 실행
chmod 755 script.sh # 사용자에게 읽기, 쓰기, 실행 권한; 그룹과 기타 사용자에게 읽기, 실행 권한 부여 chmod u+x script.sh # 사용자에게 실행 권한 추가 chmod g-w data.txt # 그룹에게 쓰기 권한 제거 - 숫자 모드 (예: 755, 644) 또는 심볼릭 모드 (예:
- 파일 또는 디렉토리의 권한(mode) 변경
- chown
- 파일 또는 디렉토리의 소유자(owner)와 그룹(group) 변경
chown <새로운_소유자> <파일_또는_디렉토리>chown <새로운_소유자>:<새로운_그룹> <파일_또는_디렉토리>
sudo chown user1 myfile.txt sudo chown root:admin mydirectory
- 파일 또는 디렉토리의 소유자(owner)와 그룹(group) 변경
- useradd
새로운 사용자 추가 (일반적으로
sudo와 함께 사용)sudo useradd newuser
- passwd
사용자 계정의 비밀번호를 설정하거나 변경
passwd # 현재 사용자 비밀번호 변경 sudo passwd newuser # 'newuser'의 비밀번호 변경
- userdel
- 사용자 삭제
-r옵션 사용 시 사용자의 홈 디렉토리와 메일 스풀도 함께 삭제 (주의해서 사용할 것!)sudo userdel olduser sudo userdel -r olduser
- groupadd
새로운 그룹 추가
sudo groupadd newgroup
- groupdel
그룹 삭제
sudo groupdel oldgroup
- usermod
- 사용자 계정의 속성 수정 (그룹 변경, 로그인 셸 변경 등)
usermod -aG <그룹_이름> <사용자_이름>: 사용자를 추가 그룹에 추가 (-a는 append,-G는 groups)
sudo usermod -aG developers myuser
- 사용자 계정의 속성 수정 (그룹 변경, 로그인 셸 변경 등)
1.3 프로세스 관리
- ps
- 현재 실행 중인 프로세스 목록 표시
ps aux: 모든 사용자의 자세한 프로세스 정보 표시ps -ef: 시스템에서 실행 중인 모든 프로세스의 전체 정보 표시
ps ps aux | less ps -ef | grep myapp
- 현재 실행 중인 프로세스 목록 표시
- top 또는 htop
- 시스템의 실시간 프로세스 활동과 자원 사용률(CPU, 메모리 등) 표시
htop: 더 사용자 친화적인 인터페이스 제공, 설치가 필요할 수 있음sudo apt install htop또는sudo yum install htop
top htop
- 시스템의 실시간 프로세스 활동과 자원 사용률(CPU, 메모리 등) 표시
- kill
- 실행 중인 프로세스에 시그널 전송. 일반적으로 프로세스 종료에 사용
kill <PID>: 지정된 프로세스 ID(PID)에 TERM(종료) 시그널 전송kill -9 <PID>또는kill -KILL <PID>: 지정된 프로세스 강제 종료 (SIGKILL 시그널)
→ 데이터 손실의 위험이 있으므로 최후의 수단으로 사용할 것!
kill 1234 kill -9 5678
- 실행 중인 프로세스에 시그널 전송. 일반적으로 프로세스 종료에 사용
- pgrep
지정된 패턴과 일치하는 프로세스의 PID 검색
pgrep nginx pgrep -u myuser java
- pkill
이름 또는 다른 속성을 이용하여 프로세스 종료
pkill -f myapp # 'myapp'을 포함하는 모든 프로세스 종료 pkill -u otheruser firefox # 'otheruser'가 실행한 'firefox' 프로세스 종료
- bg
- 백그라운드로 중단된 작업 다시 실행
- fg
- 백그라운드 작업을 포그라운드로 가져옴
- jobs
- 현재 백그라운드 작업 목록 표시
1.4 네트워크 관리
- ip addr 또는 ifconfig
- 네트워크 인터페이스 정보 확인
ifconfig는 더 이상 기본 명령어가 아닐 수 있으며,net-tools패키지를 설치해야 할 수도 있음ip addr show ifconfig
- netstat
- 네트워크 연결, 라우팅 테이블, 인터페이스 통계 등 표시
netstat -tuln: 현재 열려 있는 TCP 및 UDP 포트 목록 표시netstat -rn: 라우팅 테이블 표시
netstat -tuln netstat -rn
- 네트워크 연결, 라우팅 테이블, 인터페이스 통계 등 표시
- ss
- netstat`의 최신 버전, 더 많은 정보를 효율적으로 보여줌
ss -tuln: 현재 열려 있는 TCP 및 UDP 포트 목록 표시ss -rn: 라우팅 테이블 표시
ss -tuln ss -rn
- netstat`의 최신 버전, 더 많은 정보를 효율적으로 보여줌
- ping
특정 호스트에 네트워크 연결이 가능한지 확인
ping google.com ping 192.168.1.1
- traceroute 또는 tracepath
특정 호스트까지의 네트워크 경로 추적
traceroute google.com tracepath google.com
- ssh
Secure Shell의 약자, 원격 서버에 안전하게 접속
ssh <사용자_이름>@<호스트_IP_또는_도메인> ssh -i <개인키_파일> <사용자_이름>@<호스트_IP_또는_도메인>
- scp
- Secure Copy의 약자, 로컬과 원격 서버 간에 파일을 안전하게 복사
- 로컬 -> 원격:
scp <로컬_파일> <원격_사용자>@<원격_호스트>:<원격_경로> - 원격 -> 로컬:
scp <원격_사용자>@<원격_호스트>:<원격_파일> <로컬_경로> - 디렉토리 복사 시
-r옵션 사용
scp mylocal.txt user@192.168.1.10:/home/user/ scp -r mydir user@example.com:/opt/backup/ scp user@remote.server:/var/log/app.log /tmp/ - 로컬 -> 원격:
- Secure Copy의 약자, 로컬과 원격 서버 간에 파일을 안전하게 복사
- firewall-cmd (CentOS/RHEL) 또는 ufw (Ubuntu)
- 방화벽 설정을 관리하는 명령어
- GCP에서는 네트워크 방화벽 규칙을 콘솔에서 설정하는 것이 일반적이지만, 인스턴스 내부 방화벽을 관리해야 할 경우 사용될 수 있음
1.5 패키지 관리
- Debian/Ubuntu 계열 (apt)
sudo apt update: 패키지 목록 업데이트sudo apt upgrade: 설치된 모든 패키지를 최신 버전으로 업그레이드sudo apt install <패키지_이름>: 새로운 패키지 설치sudo apt remove <패키지_이름>: 패키지 제거 (설정 파일은 남김)sudo apt purge <패키지_이름>: 패키지와 설정 파일을 모두 제거sudo apt search <검색어>: 패키지 목록에서 검색어를 포함하는 패키지를 검색sudo apt show <패키지_이름>: 특정 패키지의 상세 정보 표시
- CentOS/RHEL 계열 (yum 또는 dnf)
sudo yum update/sudo dnf update: 패키지 목록을 업데이트하고 설치된 패키지를 업그레이드sudo yum install <패키지_이름>/sudo dnf install <패키지_이름>: 새로운 패키지 설치sudo yum remove <패키지_이름>/sudo dnf remove <패키지_이름>: 패키지 제거sudo yum search <검색어>/sudo dnf search <검색어>: 패키지 목록에서 검색어를 포함하는 패키지를 검색sudo yum info <패키지_이름>/sudo dnf info <패키지_이름>: 특정 패키지의 상세 정보 표시
1.6 텍스트 처리 및 검색
- grep
- 주어진 패턴과 일치하는 텍스트를 파일에서 검색
grep <패턴> <파일>: 파일에서 패턴을 검색grep -i <패턴> <파일>: 대소문자를 구분하지 않고 검색합grep -r <패턴> <디렉토리>: 디렉토리 및 하위 디렉토리의 모든 파일에서 패턴을 검색grep -n <패턴> <파일>: 패턴이 발견된 줄 번호를 함께 출력grep -v <패턴> <파일>: 패턴과 일치하지 않는 줄만 출력
grep "error" logfile.txt grep -i "warning" access.log grep -r "config" /etc/
- 주어진 패턴과 일치하는 텍스트를 파일에서 검색
- sed
- 스트림 편집기(Stream EDitor)
- 텍스트 스트림에 대한 기본적인 텍스트 변환 수행
파일의 내용을 변경하거나, 찾아서 바꾸는 작업 등에 사용
sed 's/old_string/new_string/g' input.txt > output.txt # 'input.txt'에서 'old_string'을 'new_string'으로 모두 바꾸어 'output.txt'에 저장 sed -i 's/original/modified/g
2. 추가로 알아두어야 할 실무 커맨드
2.1 고급 텍스트 처리 및 데이터 가공
- awk
- 패턴 탐색 및 처리 언어
- 텍스트 파일에서 특정 열(column)만 추출하거나 계산할 때 사용
- 예: 로그 파일의 3번째 열인 ‘응답 시간’의 평균 구하기
- 텍스트 파일을 행(Row)과 열(Column) 단위로 인식하여 데이터를 추출하거나 통계 계산을 수행
로그 분석 시 특정 필드만 골라내거나 합계를 구할 때 매우 강력함
awk '{print $3}' access.log # 로그 파일의 3번째 열(필드)만 출력 awk '$3 >= 400 {print $0}' access.log # 3번째 열이 400 이상인 행(에러 로그 등) 전체 출력
- find
- 파일 검색 도구
- 이름, 크기, 수정 날짜, 권한 등 다양한 조건을 기반으로 파일을 검색
- 단순히 파일을 찾는 것을 넘어, 특정 조건(날짜, 크기 등)에 맞는 파일을 찾아 명령어를 일괄 실행
검색된 파일에 대해 특정 명령을 즉시 실행(
-exec)할 수 있어 자동화에 필수적임find /var/log -name "*.log" -mtime +30 # /var/log에서 30일 이상 된 로그 파일 찾기 find . -type f -size +100M -exec ls -lh {} \; # 100MB가 넘는 파일을 찾아 상세 정보 출력
- xargs
- 표준 입력 전달 도구
- 앞선 명령의 결과를 다음 명령의 인자(Argument)로 변환하여 전달할 때 사용
find와 조합하여 특정 로그들을 한꺼번에 삭제하는 등
파일 목록을 받아 일괄 삭제하거나 압축할 때 주로 사용
find . -name "*.tmp" | xargs rm # .tmp 파일을 모두 찾아 한꺼번에 삭제 cat servers.txt | xargs -I {} ssh {} # 파일에 적힌 서버 목록에 순차적으로 접속 시도
- diff / patch:
- 파일 차이 비교 및 업데이트 적용
diff는 두 파일의 내용 차이를 보여주고,patch는 그 차이점(diff 파일)을 원본에 적용하여 업데이트함형상 관리(Git)의 기초 원리이며, 서버 설정 파일의 변경 사항을 배포할 때 유용함
diff config.old config.new > update.patch # 두 파일의 차이점을 패치 파일로 저장 patch config.old < update.patch # 패치 파일을 사용하여 원본 파일을 업데이트
- sort
- 텍스트 정렬 도구
- 텍스트 파일의 내용을 행 단위로 알파벳순이나 숫자순으로 정렬
데이터 엔지니어가 흩어져 있는 로그를 시간순이나 크기순으로 나열할 때 필수적임
sort data.txt # 파일을 알파벳 순서대로 정렬 sort -n -r numbers.txt # 숫자를(n) 역순으로(r) 정렬
- uniq
- 중복 행 제거 도구
- 연속되는 중복 행을 하나로 합치거나, 중복된 횟수를 출력
반드시
sort와 함께 사용해야 하며(정렬되어 있어야 중복을 찾음), “가장 많이 접속한 IP Top 10” 같은 통계를 낼 때 사용함sort access.log | uniq -c # 로그에서 각 행이 몇 번씩 나타났는지 카운트(c) sort data.txt | uniq -u # 중복되지 않는 유일한 행만 출력
2.2 디스크 및 시스템 자원 분석 (시스템 진단)
데이터 엔지니어는 대용량 데이터를 다루므로 디스크 용량 관리가 매우 중요함
- df -h / du -sh
- 디스크 공간 확인(Disk Free / Disk Usage)
- df: 전체 디스크 용량과 남은 공간을 사람이 보기 편한 단위로 확인
- du: 특정 디렉토리나 파일이 차지하는 용량을 확인
- 어떤 녀석이 용량을 다 먹고 있는지 찾을 때 필수
데이터 엔지니어링 중 디스크 풀(Full) 장애 예방을 위한 필수 명령어
df -h # 사람이 보기 편한 단위(GB, MB)로 전체 디스크 용량 확인 du -sh /var/log # /var/log 디렉토리의 전체 크기 요약 출력
- free -m / -g
- 메모리 사용량 확인
- 시스템의 물리적 메모리(RAM)와 스왑(Swap) 메모리의 전체, 사용 중, 여유량을 확인
-m(MB),-g(GB) 옵션을 통해 원하는 단위로 출력하여 메모리 부족 여부를 판단free -m # 메모리 상태를 MB 단위로 확인 free -h # 사용자가 읽기 편한 최적의 단위(Human-readable)로 확인
- lsof
- 열린 파일 확인(LiSt Open Files)
- 어떤 프로세스가 어떤 파일이나 네트워크 포트를 점유하고 있는지 확인
포트 충돌 해결이나 사용 중인 파일 삭제가 안 될 때 원인 파악에 사용
lsof -i :8080 # 8080번 포트를 사용 중인 프로세스 정보 확인 lsof /var/log/myapp.log # 특정 로그 파일을 잡고 있는 프로그램 확인
- uptime
- 시스템 가동 시간 및 부하 확인
- 서버가 마지막으로 켜진 후 경과된 시간, 현재 접속자 수, 시스템 평균 부하(Load Average)를 한 줄로 출력
“서버가 왜 이렇게 느리지?” 싶을 때 가장 먼저 입력해서 전반적인 부하 상황을 파악하는 용도
uptime # 가동 시간과 1분, 5분, 15분간의 평균 부하 확인 uptime -p # 예쁘게(pretty) 가동 시간만 출력 (예: up 2 weeks, 3 days)
2.3 네트워크 트러블슈팅 및 외부 통신
API를 연동하거나 원격 서버의 데이터를 가져올 때 필요함
- nslookup / dig
- DNS(도메인 네임 시스템) 질의 도구
- 도메인 이름(DNS)이 IP로 잘 변환되는지 확인
- 특정 도메인이 어떤 IP 주소로 연결되어 있는지, 혹은 그 반대의 경우를 확인
네트워크 연결 문제 발생 시 도메인 설정(DNS) 문제인지 서버 문제인지 판별할 때 사용
nslookup www.google.com # 도메인에 연결된 IP 주소 확인 dig www.google.com # DNS 레코드 정보를 더 상세하고 기술적으로 확인
- curl / wget
- 데이터 전송 도구 (Client URL)
- 웹 서버에 요청을 보내거나 파일을 다운로드함 (API 테스트 시
curl은 필수 항목) - HTTP, HTTPS, FTP 등 다양한 프로토콜을 이용해 서버와 데이터를 주고받음
REST API 테스트, 웹 페이지 응답 확인, 파일 다운로드 시 사용
curl -X GET https://api.example.com/data # API 서버에 GET 요청 보내기 curl -I https://www.google.com # 웹사이트의 헤더(상태 코드 등) 정보만 확인
- nc (netcat)
- 네트워크의 맥가이버 칼
- 임의의 TCP/UDP 연결을 생성하거나 데이터를 주고받음
서버의 특정 포트가 열려있는지, 방화벽에 막혀 있는지, 네트워크 통신이 가능한지 체크(테스트)할 때 가장 많이 사용
nc -zv 192.168.0.10 3306 # 원격지의 3306(DB) 포트가 열려 있는지 확인
2.4 파일 아카이브 및 압축 (데이터 전송)**
서버 간 데이터를 옮길 때 묶음 처리는 기본
- tar
- 파일 아카이브 도구 (Tape ARchive)
- 여러 파일을 하나로 묶거나(Archive,
-cvf), 묶인 파일을 다시 풂(압축 해제,-xvf) 대부분의 리눅스 배포용 소프트웨어나 로그 백업 시 사용
tar -cvzf backup.tar.gz /home/user # /home/user 디렉토리를 압축해서 backup.tar.gz 생성 tar -xvzf backup.tar.gz # 압축된 파일을 현재 디렉토리에 해제
- gzip / gunzip
- 단일 파일 압축 및 해제
- 리눅스에서 가장 표준적으로 사용되는 압축 방식 중 하나
tar와 조합되어.tar.gz형태로 가장 많이 쓰이며, 대용량 로그 파일 하나를 빠르게 압축할 때 유리함gzip access.log # access.log를 압축하여 access.log.gz 생성 (원본은 사라짐) gunzip access.log.gz # 압축을 해제하여 원본 파일 복원
- zip / unzip
- 범용 압축 및 해제
- 윈도우 등 타 OS와 파일을 주고받을 때 가장 호환성이 좋은 방식
여러 파일을 하나로 묶으면서 동시에 압축하며, 리눅스 서버에서 자료를 전달받을 때 자주 사용됨
zip backup.zip file1.txt file2.txt # 여러 파일을 하나의 zip으로 압축 unzip data.zip -d ./target_dir # 특정 디렉토리에 압축 해제
분야별 종합 체크리스트 (수정 제안)
파일/디스크 `find`, `du`, `df` 용량 부족 및 파일 위치 추적은 데이터 엔지니어의 숙명 고급 텍스트 처리 `awk`, `xargs`, `sort`, `uniq` 로그 데이터 가공 및 통계 추출의 핵심 도구 네트워크 `curl`, `nc`, `nslookup` 마이크로서비스(MSA) 환경에서 통신 장애 진단 필수 시스템 정보 `free`, `lsof`, `uptime` 시스템 부하 원인 파악 및 메모리 부족 진단 압축/전송 `tar`, `gzip` 로그 백업 및 데이터 전송을 위한 아카이브 관리
- 위 명령어들은 단독으로 쓰일 때보다 파이프(
|)로 연결될 때 진정한 위력을 발휘함
- 예시
du -ah | sort -rh | head -n 5🡲 “현재 폴더에서 가장 용량을 많이 차지하는 파일 5개 찾기”sort+uniq🡲 “에러 로그 중 가장 빈번한 에러 5개만 뽑아줘” (데이터 엔지니어 단골 과제)uptime🡲 “지금 서버 터지기 직전인가요?” (운영자 필수 체크)find는 현업에서xargs와 짝꿍처럼 쓰임free에서available항목이 실제 앱이 사용 가능한 메모리이므로free수치보다 더 중요하게 보아야 함dig는 데이터 엔지니어가 분산 환경(Hadoop, Spark 등)에서 노드 간 통신이 안 될 때 호스트네임 해석 문제를 찾기 위해 매우 자주 사용하는 도구임