🐧

리눅스 서버 운영 명령어 치트시트

이 트랙 37개 모듈의 핵심 명령어·단축키 478를 한 곳에 모았습니다. 실무 중 “그 명령어 뭐였지?” 할 때 검색해 바로 꺼내 쓰세요. 각 모듈 제목을 누르면 해당 강의로 이동합니다.

478개 명령 · 37개 모듈
명령어/단축키용도자주 쓰는 예
cat /etc/os-release배포판·버전 확인(첫 접속 시 1순위)cat /etc/os-release | grep -E "^NAME|^ID="
uname -r / uname -a커널 버전 / 전체 시스템 정보호스트·컨테이너에서 각각 실행해 커널 공유 확인
apt (Debian 계열)Ubuntu/Debian 패키지 관리sudo apt install nginx / apt search nginx
dnf / yum (RHEL 계열)Amazon Linux·Rocky·RHEL 패키지 관리sudo dnf install nginx / dnf search nginx
apk (Alpine)컨테이너 경량 이미지 패키지 관리apk add nginx / apk add bash
<명령> --help옵션·사용법 빠른 확인ls --help | head -20
man <명령>상세 매뉴얼(/=검색, n=다음, q=종료)man ls/human 검색
which / type명령 설치 여부·경로 확인which nginx / type nginx
ssh -i <키> <user>@<IP>원격 서버 접속ssh -i ~/.ssh/prod-key.pem ubuntu@<IP>
명령어/단축키용도자주 쓰는 예
uname -a / uptime / whoami접속 직후 서버 파악uname -a && uptime && whoami
cat /etc/os-release배포판·버전 확인cat /etc/os-release | grep -E "^NAME|^VERSION"
ls -la파일 목록(숨김·상세)ls -la /etc/ssh (권한·소유자 확인)
Tab경로·명령 자동완성cd /et + Tab/etc/
Ctrl+R히스토리 역방향 검색Ctrl+Rssh 입력 → 이전 ssh 명령
history명령 이력 보기·재실행history | tail -10, !123(번호로 재실행)
ssh-keygen -t ed25519SSH 키 생성ssh-keygen -t ed25519 → Enter로 기본 경로
ssh원격 서버 접속ssh -i ~/.ssh/key.pem ubuntu@54.123.45.67
~/.ssh/config접속 별칭 등록Host prod 블록 작성 → ssh prod
tmux new / ls / attachSSH 끊겨도 세션 유지tmux new -s workCtrl+B Dtmux attach -t work
wsl --installWindows에 Linux 설치관리자 PowerShell에서 실행
명령어/단축키용도자주 쓰는 예
pwd현재 절대 경로 확인pwd(논리) vs pwd -P(심볼릭 링크 푼 물리)
cd디렉토리 이동cd .., cd ~, cd -(이전), cd -P ..(물리)
ls -la목록·권한·숨김 파일ls -lath(최신·용량), ls -lS(용량순)
ls -R / ls -lt재귀 목록 / 최근 수정순ls -lt /var/log/nginx/ | head
mkdir -p중첩 디렉토리 한 번에 생성mkdir -p app/src/utils
touch빈 파일 생성·시각 갱신touch app.log error.log
cp -r디렉토리 복사(원본 유지)cp -r app/ app-backup/
mv이동·이름 변경(원본 사라짐)mv old.conf old.conf.bak
rm -i / -r확인 삭제·디렉토리 삭제rm -r app-backup/, 삭제 전 echo·ls로 확인
du -sh디렉토리 총 용량du -sh /var/log/nginx/
find이름·시간·크기 조건 검색find . -name '*.log'
ln -s / readlink -f심볼릭 링크 생성·실제 경로 확인readlink -f /var/www/current
명령어/단축키편집기용도
vi 파일 / vim 파일vi·vim파일 열기 (대개 vivim 심볼릭 링크)
vim -R / view 파일vi·vim읽기 전용으로 열기(대용량 로그 조회·실수 편집 방지)
i / ovi·vim입력(Insert) 모드 진입 — 커서 앞 / 아랫줄에 새 줄
Escvi·vim입력 모드에서 명령(Normal) 모드로 빠져나오기
gg / Gvi·vim파일 맨 위 / 맨 아래로 이동(로그는 G로 최신부터)
:N (예: :42)vi·vimN번째 줄로 점프(:set nu로 줄 번호 표시)
/패턴n / Nvi·vim아래로 검색 후 다음 / 이전 매치로 이동(위로는 ?패턴)
Ctrl+f / Ctrl+bvi·vim한 화면 아래 / 위로(페이지 넘김)
:w / :wqvi·vim저장 / 저장 후 종료
:q!vi·vim저장하지 않고 강제 종료(편집 취소)
dd / uvi·vim현재 줄 삭제 / 직전 편집 실행 취소(undo)
:%s/old/new/gvi·vim파일 전체에서 old를 new로 일괄 치환
nano 파일nano쉬운 편집기로 열기
Ctrl+O / Ctrl+Xnano저장(Write Out) / 종료
Ctrl+W / Ctrl+Knano검색 / 현재 줄 잘라내기
명령어/단축키용도자주 쓰는 예
id / whoami / groups현재 사용자·그룹 확인id && whoami && groups
su사용자 전환su -(root 전환), su - deploy
sudo단일 명령 권한 위임sudo systemctl restart myapp, sudo -i(root 쉘)
sudo -l내 sudo 권한 확인어떤 명령이 허용됐는지 목록
useradd -m -s -G계정 생성sudo useradd -m -s /bin/bash -G docker,sudo deploy
usermod -aG보조 그룹 추가sudo usermod -aG docker $USER (반드시 -a)
newgrp재로그인 없이 새 그룹 적용newgrp docker (현재 세션에 즉시 반영)
passwd패스워드 설정sudo passwd deploy
chage -l패스워드 만료 정책 확인sudo chage -l deploy
visudosudoers 안전 편집(문법 검사)sudo visudo -f /etc/sudoers.d/deploy
/etc/passwd·shadow·group계정·해시·그룹 저장 파일grep deploy /etc/passwd
명령어/단축키용도자주 쓰는 예
ls -la권한·소유자·타입 읽기첫 글자 타입(d/-/l), 끝의 +는 ACL
chmod(숫자)권한 절대값 지정chmod 750 deploy.sh(rwxr-x---)
chmod(기호)특정 비트만 가감chmod u+x,g-w,o-r file
chown / chgrp소유자·그룹 변경sudo chown -R deploy:www-data app/
umask새 파일 기본 권한 마스크umask 027(파일 640·디렉토리 750), umask -S
chmod 4755 (SUID)소유자 권한으로 실행passwd처럼 -rwsr-xr-x
chmod 2775 (SGID)디렉토리 그룹 상속팀 공유 디렉토리 그룹 자동 부여
chmod 1777 (Sticky)본인 파일만 삭제/tmpdrwxrwxrwt
find -permSUID·world-writable 감사find / -perm -4000 -type f 2>/dev/null
getfacl / setfacl특정 사용자·그룹 개별 권한setfacl -m u:www-data:r /app/config.yml
namei -om경로상 각 단계 권한 추적namei -om /var/www/html/app/index.html(403 원인)
chattr +i / lsattr불변(immutable) 잠금·확인sudo chattr +i app.yml(root도 삭제 불가)
명령어용도
sudo mkdir -p /etc/apt/keyrings1. 키링 저장 디렉토리 생성
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \2. GPG 키 다운로드 및 저장
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg2. GPG 키 다운로드 및 저장
sudo chmod a+r /etc/apt/keyrings/docker.gpg2. GPG 키 다운로드 및 저장
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \3. sources.list.d에 signed-by 옵션으로 리포 등록
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \3. sources.list.d에 signed-by 옵션으로 리포 등록
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null3. sources.list.d에 signed-by 옵션으로 리포 등록
sudo apt update4. 업데이트 및 설치
sudo apt install docker-ce docker-ce-cli4. 업데이트 및 설치
curl -fsSL https://example.com/key.gpg | sudo apt-key add -이렇게 하면 안 됨 — 모든 리포에서 해당 키 신뢰
sudo tee /etc/apt/preferences.d/nginx << 'EOF'nginx를 특정 버전으로 고정
Package: nginxnginx를 특정 버전으로 고정
Pin: version 1.24.*nginx를 특정 버전으로 고정
Pin-Priority: 1001nginx를 특정 버전으로 고정
EOFnginx를 특정 버전으로 고정
sudo tee /etc/apt/preferences.d/docker << 'EOF'리포지토리 전체 우선순위 낮추기 (외부 리포 패키지가 시스템 패키지 덮어쓰지 않도록)
명령어/단축키용도자주 쓰는 예
command & / jobs / fg / bg셸 작업 제어sleep 300 &jobsfg %1
Ctrl+Z포그라운드 명령 일시정지Ctrl+Zbg(백그라운드 재개)
nohup … &SSH 끊겨도 유지nohup ./migrate.sh > out.log 2>&1 &
disown실행 중 작업을 셸에서 분리disown %1 (nohup 없이 시작한 뒤)
tmux new -s이름 있는 새 세션tmux new -s deploy
tmux ls / attach -t세션 목록·재접속tmux attach -t deploy (짧게 tmux a -t)
tmux kill-session -t세션 종료tmux kill-session -t deploy
Ctrl+b d세션 분리(detach)가장 자주 씀 — SSH 끊겨도 유지
Ctrl+b % / Ctrl+b "패널 좌우/상하 분할%=수직, "=수평, 이동은 Ctrl+b 방향키
Ctrl+b z현재 패널 전체화면 토글로그 자세히 볼 때
Ctrl+b c / Ctrl+b w새 윈도우 / 윈도우 목록Ctrl+b n(다음), Ctrl+b p(이전)
Ctrl+b [스크롤 모드 진입q로 종료
set -g prefix C-aprefix 키 변경(~/.tmux.conf)unbind C-b + bind C-a send-prefix
명령어/단축키용도자주 쓰는 예
export변수를 자식 프로세스에 전달export PATH="/opt/app/bin:$PATH"
unset변수 제거(민감정보 소거)unset DB_PASSWORD
env / printenv환경변수 목록·단일 조회env | sort, printenv HOME
set지역변수·함수까지 전체 조회set | grep MY_VAR
echo $PATH | tr ':' '\n'PATH를 한 줄씩 확인검색 순서(왼→오) 파악
which / type명령 위치·종류 확인type ls(alias·builtin 구분)
source / .설정을 현재 셸에 즉시 적용source ~/.bashrc
alias / unalias명령 단축 정의·해제alias rm='rm -i'
~/.bashrc대화형 셸 개인 설정(alias·PATH)새 터미널마다 로드
~/.bash_profile로그인 셸 설정(보통 .bashrc 호출)[ -f ~/.bashrc ] && . ~/.bashrc
/etc/environment시스템 전역 KEY=VALUE(셸 문법 불가)JAVA_HOME=/usr/lib/jvm/...
/proc/PID/environ실행 중 프로세스의 실제 환경값tr '\0' '\n' < /proc/PID/environ
명령어/단축키용도자주 쓰는 예
ps aux전체 프로세스 스냅샷ps aux --sort=-%cpu | head (CPU 상위)
ps -ef --forest부모-자식(PPID) 트리로 보기좀비의 부모 추적 시 유용
top / htop실시간 자원 모니터top -o %MEM (메모리순 정렬)
pgrep / pkill이름으로 찾기·종료pgrep -a nginx / pkill -f myapp
kill시그널 전송(기본 TERM)kill -15 PID → 안 죽으면 kill -9 PID
nice / renice실행 우선순위 조절renice -n 10 -p PID (낮은 우선순위로)
jobs / fg / bg셸 작업 제어Ctrl+Z(정지) → bg(백그라운드) → jobs
nohup … &로그아웃해도 유지되는 백그라운드 실행nohup ./run.sh > out.log 2>&1 &
cat /sys/fs/cgroup/…/cpu.statcgroup CPU 스로틀 확인nr_throttled가 늘면 CFS 쿼터 제한
명령어용도
kill -TERM <PID>PID로 시그널 전송
kill -KILL <PID>PID로 시그널 전송
kill -HUP <PID>PID로 시그널 전송
kill -STOP <PID>PID로 시그널 전송
kill -CONT <PID>PID로 시그널 전송
kill -0 <PID>PID로 시그널 전송
killall -15 nginx이름으로 시그널 전송
pkill -f "python3 app.py"이름으로 시그널 전송
pgrep -a nginxPID 조회
pgrep -u www-data -lPID 조회
nohup command > out.log 2>&1 &백그라운드 실행
disown $!백그라운드 실행
jobs작업 제어
fg %1작업 제어
bg %2작업 제어
tmux new -s 이름tmux 세션
명령어/단축키용도자주 쓰는 예
systemctl status <svc>서비스 상태 확인systemctl status nginx (가장 자주 씀)
systemctl start/stop/restart서비스 제어sudo systemctl restart nginx
systemctl reload무중단 설정 재적용sudo systemctl reload nginx
systemctl enable --now부팅 자동시작 + 즉시 시작sudo systemctl enable --now myapp
systemctl mask서비스 완전 차단(start도 막음)sudo systemctl mask <svc>
systemctl list-units --type=service유닛 목록 탐색systemctl --failed (실패한 것만)
systemctl list-dependencies의존성 트리 확인systemctl list-dependencies nginx
systemctl cat <svc>유닛 파일 원본 바로 보기편집기 없이 원본+override 확인
systemctl daemon-reload유닛 파일 수정 후 반영파일 편집 뒤 항상 실행
systemctl edit <svc>Drop-in override 생성sudo systemctl edit nginx (패키지 기본값 덮기)
journalctl -u <svc>서비스 로그 조회journalctl -u myapp -p err -b
명령어/단축키용도자주 쓰는 예
less 파일대용량 파일을 스트리밍으로 조회(cat 대신)less -SN app.log, 안에서 /·G·&패턴·F(추적)
zless / zcat / zgrep압축(.gz) 회전 로그 조회·검색zgrep -h ERROR app.log*.gz | less (여러 날치 한 번에)
grep패턴 검색grep -rn -i "error" /var/log (재귀·대소문자·줄번호)
grep -E정규식 검색grep -E "4[0-9]{2}|5[0-9]{2}" access.log (4xx·5xx)
grep -A/-B/-C매칭 줄 전후 맥락grep -C 2 "ERROR" app.log
awk필드 단위 처리·조건awk '$9!=200 {print $1, $9}' access.log
awk -F구분자 지정awk -F: '{print $1}' /etc/passwd
sed스트림 치환·삭제sed -i.bak 's/old/new/g' config.txt (백업 남기고)
sort / uniq -c정렬·빈도 집계… | sort | uniq -c | sort -rn (Top-N)
cut열 추출cut -d' ' -f1 access.log (IP만)
tail -f실시간 로그 추적tail -f app.log | grep --line-buffered ERROR
jqJSON 로그 파싱jq 'select(.level=="ERROR") .msg' app.json
| (파이프) / tee출력 연결·중간 저장cmd 2>&1 | tee out.log | wc -l
명령어/단축키용도자주 쓰는 예
#!/bin/bash셰뱅 — 인터프리터 지정첫 줄 고정, 이식성은 #!/usr/bin/env bash
chmod +x스크립트 실행 권한 부여chmod +x deploy.sh && ./deploy.sh
set -euo pipefail실패 즉시 중단·미정의 변수 차단셰뱅 바로 아래 항상 추가
$? / $# / $@종료코드·인자 개수·전체 인자if [[ $? -ne 0 ]]; then …; fi
[[ ]] / [ ]조건 검사(test)[[ -f "$F" && "$p" =~ ^[0-9]+$ ]]
for / while / until반복문for f in *.log; do …; done, until curl -sf "$URL"; do …
$(( ))정수 산술echo $((A % B)), ((COUNT++))
${var%…} / ${var:-기본}문자열 조작·기본값${FILE%.tar.gz}, PORT="${PORT:-8080}"
함수(){ } / local / return함수·지역변수·종료코드log(){ local m="$1"; echo "$m"; }
read입력 받기read -r -s -p "pw: " PW, read -r -a ARR
getopts옵션 파싱while getopts "e:v:d" o; do …; done
> / >> / 2>&1리다이렉션(덮기·추가·에러 합침)cmd >> app.log 2>&1
| / && / ||파이프·조건 연쇄ps aux | grep nginx, mkdir d && cd d
tee / xargs / <(…)분기 저장·인자 전달·프로세스 치환find … | xargs rm -f, diff <(ls a) <(ls b)
명령어/단축키용도자주 쓰는 예
df -hT / df -i용량·inode 사용률 확인df -h | sort -rk5, df -i(inode 고갈 확인)
du -sh디렉토리별 실제 용량du -sh /var/log/* | sort -rh | head
lsblk -f블록 장치·파티션 트리FSTYPE·UUID·마운트 한눈에
fdisk -l파티션 테이블 상세sudo fdisk -l /dev/nvme0n1
mount / umount파일시스템 연결·해제sudo mount -o ro /dev/sdd1 /mnt
/etc/fstab + mount -a영구 마운트·문법 검증sudo mount -a(재부팅 전 테스트), nofail 필수
blkid장치 UUID 확인blkid /dev/sdb1
iostat -x디스크 I/O 통계iostat -x 1(%iowait·util·await 확인)
iotop프로세스별 I/O 실시간sudo iotop -o -d 2
lsof | grep deleted삭제됐지만 열린 파일 추적sudo lsof | grep "(deleted)"
find -size대용량 파일 찾기find /var -type f -size +100M 2>/dev/null
dd디스크 쓰기 속도 측정dd if=/dev/zero of=/tmp/t bs=1M count=1000 conv=fdatasync
mkfs.ext4 / mkfs.xfs파일시스템 포맷(주의)mkfs.ext4 -i 4096 /dev/sdd1(inode 밀도↑)
fstrim -av미사용 블록 하부 반환(TRIM)sudo fstrim -av, fstrim.timer로 주기화
명령어/단축키용도자주 쓰는 예
pvcreate물리 디스크·파티션을 LVM PV로 초기화pvcreate /dev/sdb1 (여러 개: pvcreate /dev/sdb1 /dev/sdc1)
vgcreatePV들을 묶어 VG(스토리지 풀) 생성vgcreate vg_data /dev/sdb1 /dev/sdc1
vgextend기존 VG에 새 PV를 추가해 풀 확장vgextend vg_data /dev/sdd1
lvcreateVG에서 LV를 잘라내 할당lvcreate -L 15G -n lv_mysql vg_data / 남은 전부 -l 100%FREE
lvcreate -s백업용 스냅샷 LV 생성lvcreate -L 5G -s -n lv_mysql_snap /dev/vg_data/lv_mysql
lvextendLV 확장(+ 파일시스템까지 -r)lvextend -L +5G -r /dev/vg_data/lv_mysql
resize2fsext4 파일시스템 온라인 확장resize2fs /dev/vg_data/lv_mysql
xfs_growfsxfs 파일시스템 온라인 확장(마운트 경로 인자)xfs_growfs /var/log/app
pvs / vgs / lvsPV·VG·LV 상태 요약 확인vgs vg_data(VFree 확인), lvs -o +snap_percent,lv_attr
vgdisplayVG 상세(여유 PE·크기) 확인vgdisplay vg_data | grep "Free PE"
lvremoveLV·스냅샷 삭제(언마운트 후)lvremove /dev/vg_data/lv_mysql_snap
pvmovePV 데이터를 다른 PV로 이동(디스크 제거 전)pvmove /dev/sdb1
mdadm --create소프트웨어 RAID 어레이 생성mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sde /dev/sdf
mdadm --fail/--remove/--addRAID 디스크 핫스왑 교체mdadm /dev/md0 --fail /dev/sdf--remove--add /dev/sdg, cat /proc/mdstat로 rebuild 확인
명령어설명
df -h파티션별 블록(용량) 사용률 확인
df -i파티션별 inode 사용률 확인
du -sh /* | sort -hr | head -n 5루트 하위 디렉토리 용량 상위 5개
du -sh --max-depth=1 /var/log특정 디렉토리 1단계 깊이만 분석
lsof | grep deleted삭제됐지만 점유 중인 파일 확인
find / -xdev -printf '%h\n' | sort | uniq -c | sort -rn파일 수 많은 디렉토리 찾기
find /path -type f -mtime +30 -delete30일 이상 된 파일 삭제
find /path -type f -size +100M -delete100MB 이상 파일 삭제
find /path -xtype l -deleteBroken 심볼릭 링크 삭제
truncate -s 0 /proc/PID/fd/N고스트 파일 내용 즉시 비우기
rsync -a --delete /tmp/empty/ /path/대량 파일 빠른 삭제 (rsync 트릭)
ln -s /원본/경로 /링크/경로심볼릭 링크 생성
ln -sfn /새원본 /기존링크기존 링크 대상 변경
readlink -f /링크경로링크의 실제 최종 경로 확인
find /path -type l심볼릭 링크만 찾기
find /path -xtype lBroken 심볼릭 링크만 찾기
명령어/단축키용도자주 쓰는 예
ip addr show인터페이스·IP(inet) 확인ip -br addr show (한 줄 요약)
ip link show / ip link setL2 인터페이스 상태·UP/DOWNip link set eth0 up
ip route show / get / add라우팅 테이블·경로·기본 게이트웨이ip route get 8.8.8.8 / ip route add default via <GW>
ss -tlnp / ss -ulnpLISTEN 중 TCP/UDP 포트와 프로세스ss -tlnp sport = :8080
ss -s / ss -ant state time-wait소켓 상태 요약·TIME_WAIT 폭증 확인ss -ant | grep TIME-WAIT | wc -l
ping / ping -M do -sL3 도달성 / MTU 탐색(DF 비트)ping -M do -s 1472 8.8.8.8
traceroute / mtr --report홉별 지연·손실 추적mtr --report --report-cycles 10 8.8.8.8
tcpdump -i eth0패킷 캡처(파일 저장 후 Wireshark)sudo tcpdump -i eth0 port 80 -w /tmp/cap.pcap
curl -v / -I / -wL7 HTTP 단계별 디버깅·응답시간 측정curl -o /dev/null -s -w "%{http_code}" <url>
dig / nslookup / getent hostsDNS 이름 해석 확인dig +short example.com / dig example.com @8.8.8.8
nc -zv / telnet특정 포트 TCP 연결 테스트nc -zv 10.0.1.15 8080
lsof -i / fuser포트를 점유한 프로세스 찾기sudo lsof -i :8080 / sudo fuser 8080/tcp
iptables -L / ufw status방화벽 인바운드 차단 여부 확인sudo iptables -L INPUT -n | grep 8080
명령어/단축키용도자주 쓰는 예
digDNS 조회 상세dig @8.8.8.8 api.example.com +short
dig +traceRoot→Authoritative 위임 추적dig +trace api.example.com
dig +tcp / +dnssecTCP 폴백·큰 응답 확인dig +tcp example.com(무응답이면 TCP 53 차단)
dig <타입> / -x레코드 타입·역방향 조회dig example.com MX, dig -x 93.184.216.34
resolvectl statussystemd-resolved DNS 설정resolvectl status eth0(per-link DNS)
resolvectl queryresolved 경유 이름 조회resolvectl query api.example.com
resolvectl flush-cachesDNS 캐시 비우기레코드 변경 후 스테일 캐시 제거
getent hostsNSS 경로(앱이 쓰는 길)로 조회getent hosts api.example.com
cat /etc/resolv.conf현재 리졸버 확인ls -la /etc/resolv.conf(stub 링크 여부)
grep ^hosts: /etc/nsswitch.conf해석 순서(files→dns) 확인/etc/hosts가 가로채는지 점검
nmcli dev showRHEL 계열 DNS 설정 확인nmcli dev show | grep DNS
ss -ulnp | grep 53127.0.0.53 리스닝 확인resolved 포트 열림 여부
tcpdump port 53DNS 패킷 실시간 확인sudo tcpdump -i any -n port 53
ln -sf / readlink -fresolv.conf 링크 복원·확인sudo ln -sf …/stub-resolv.conf /etc/resolv.conf
명령어/단축키용도자주 쓰는 예
ss -tulnpTCP/UDP LISTEN 포트+프로세스 한눈에ss -tulnp | grep :8080 (특정 포트 점유 확인)
ss -tnp state established현재 활성(ESTABLISHED) 연결 확인ss -tn state established | wc -l (동시 접속 수)
ss -ltnLISTEN 소켓의 Accept 큐(Recv-Q/Send-Q) 점검ss -ltnRecv-QSend-Q(상한)에 닿으면 큐 오버플로
ss -s소켓 상태별 요약 통계ss -s (timewait·estab 급증 여부 파악)
netstat -s커널 누적 카운터(오버플로·드롭) 확인netstat -s | grep -iE 'listen|SYN' (Accept 큐 오버플로)
nc -zv원격 포트 열림 여부 빠른 테스트nc -zv -w 5 192.168.1.20 5432 (5초 타임아웃)
nc -l임시 TCP 서버(포트 테스트) 기동nc -l 9999 (수신 대기 → 다른 터미널에서 접속)
telnetnc 없는 환경에서 포트 프로빙telnet 10.0.0.1 80 (Connected 뜨면 열림)
lsof -i포트를 점유한 프로세스·fd 확인sudo lsof -i :8080 또는 sudo lsof -i tcp:5432
fuser포트 점유 프로세스 즉시 조회sudo fuser 8080/tcp
tcpdump패킷 레벨 캡처·핸드셰이크 확인sudo tcpdump -i eth0 port 5432 -w cap.pcap-r로 재분석
curl -vHTTP/HTTPS 응답·연결 단계 추적curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/health
openssl s_clientTLS 핸드셰이크·인증서 진단openssl s_client -connect example.com:443 -servername example.com
sysctl net.core.somaxconnAccept 큐 상한 조정(버스트 흡수)sudo sysctl net.core.somaxconn=1024
명령어/단축키용도자주 쓰는 예
ssh-keygen -t ed25519키 쌍 생성(강한 알고리즘)ssh-keygen -t ed25519 -C "alice@laptop"
ssh-copy-id공개키를 서버에 배포ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@host
~/.ssh/config (Host 별칭)다중 서버 접속 단순화Host prod + ProxyJump bastionssh prod
ssh -L로컬 포워딩(내부 DB 등 접근)ssh -N -f -L 15432:10.0.1.20:5432 bastion
ssh -R원격 포워딩(내 로컬을 외부에 노출)ssh -R 9090:localhost:3000 jump
ssh -D동적(SOCKS5) 프록시ssh -D 1080 bastioncurl --socks5 localhost:1080 …
scp / rsync파일 복사·증분 동기화rsync -avz --delete ./dist/ prod:/var/www/
ssh-agent / ssh-add패스프레이즈 키 세션 캐시eval $(ssh-agent)ssh-add ~/.ssh/id_ed25519
sshd -tsshd_config 문법 검사재시작 전 필수 — 오류 있으면 해당 줄 출력
systemctl reload sshd설정 반영(기존 연결 유지)하드닝 적용은 반드시 별도 세션 열어두고
ssh-keygen -sCA로 사용자 키 서명(인증서 발급)ssh-keygen -s ssh_ca -I alice -V +30d alice.pub
명령어/단축키용도자주 쓰는 예
pingL3 서버 도달성·루프백 스택 확인ping -c 3 <서버IP> (0% loss면 정상) / ping -c 2 127.0.0.1
ss -tlnpLISTEN 포트와 바인딩 프로세스 확인ss -tlnp | grep :8080 (포트 없으면 프로세스 문제)
ss -s / ss -tn연결 상태 요약·연결원 집계ss -s (TIME_WAIT/CLOSE_WAIT 누수) / ss -tn state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn
curlL7 앱 응답·상태코드 확인curl --connect-timeout 5 --max-time 10 -o /dev/null -w "%{http_code}" http://localhost:8080/
journalctl서비스·커널 로그 확인journalctl -u nginx -n 50 --no-pager / journalctl -k --since "30 minutes ago"
strace멈춘 프로세스의 시스템콜 추적sudo strace -p <PID> -e trace=network,read,write -T
cat /proc/<PID>/wchan프로세스가 무엇을 대기 중인지출력 ep_poll=정상 대기 / futex_wait=락 대기(데드락 의심)
uptime + nproc로드 평균을 코어 수와 비교uptimenproc — load average > 코어 수면 CPU 포화
ps aux --sortCPU·메모리 상위 프로세스 특정ps aux --sort=-%cpu | head -11 / --sort=-%mem
free -m메모리·available 확인free -m — available이 0에 근접하면 OOM 위험
df -h / df -i디스크 용량·inode 고갈 확인df -h / df -i | grep -v tmpfs (Use% 85%↑ 즉시 정리)
kill증거 수집 후 단계적 종료kill -15 PID → 10초 후 kill -9 PID / kill -3 PID(Java 스레드 덤프)
script / scriptreplay장애 대응 세션 전체 기록·재생script -a -t 2>/tmp/x.timing /tmp/x.logscriptreplay -t …
명령어/단축키용도자주 쓰는 예
iptables -L -n -v규칙·정책·카운터 조회iptables -L INPUT -n -v --line-numbers
iptables -A / -I규칙 추가(끝)·삽입(위치)-A INPUT -p tcp --dport 22 -j ACCEPT, -I INPUT 1 …
iptables -D / -F규칙 삭제·체인 초기화iptables -D INPUT 3, iptables -F INPUT
iptables -P체인 기본 정책iptables -P INPUT DROP(SSH 허용 룰 먼저!)
-m conntrack --ctstate상태 기반 응답 허용--ctstate ESTABLISHED,RELATED -j ACCEPT(거의 1번 룰)
iptables -t natNAT·포트포워딩-t nat -A POSTROUTING -j MASQUERADE, DNAT
iptables-save / -restore규칙 영구 저장·복원iptables-save > /etc/iptables/rules.v4
firewall-cmdfirewalld zone·포트 관리firewall-cmd --permanent --add-port=8080/tcp && firewall-cmd --reload
firewall-cmd --list-all현재 zone 규칙 조회firewall-cmd --get-active-zones
ufw allow / enableUbuntu 간편 방화벽ufw allow ssh(먼저) → ufw enable
ufw statusufw 규칙 확인ufw status verbose, ufw status numbered
nft list rulesetnftables 규칙 조회·추가nft add rule inet filter input tcp dport 80 accept
nc -zv / tcpdump포트 연결·패킷 도달 테스트nc -zv 서버IP 80, tcpdump -i eth0 port 80 -n
nf_conntrack_count/max상태 테이블 포화 확인cat /proc/sys/net/netfilter/nf_conntrack_count
at잘못된 규칙 자동 복원 예약at now + 10 minutesiptables -F 안전망
명령어/단축키용도자주 쓰는 예
journalctl부팅·서비스 로그 추적journalctl -b --no-pager | head (이번 부팅), journalctl -u sshd -n 30
systemd-analyze부팅 소요 시간·병목 분석systemd-analyze blame | head (느린 서비스 순)
systemctl rescue복구·긴급 모드 전환systemctl rescue (root PW) → 네트워크까지 끄려면 systemctl emergency
grub2-mkconfigGRUB 설정 변경 반영grub2-mkconfig -o /boot/grub2/grub.cfg (Ubuntu는 update-grub)
cloud-init첫 부팅 초기화 상태·재실행cloud-init status --long, 다시 돌리려면 sudo cloud-init clean --logs 후 재부팅
aws ec2 run-instancesEC2 인스턴스 시작aws ec2 run-instances --image-id ami-... --instance-type t3.micro --key-name my-server-key
ssh-keygenSSH 키페어 생성ssh-keygen -t ed25519 -C "admin@company.com" -f ~/.ssh/id_ed25519
ssh-copy-id서버에 공개키 등록ssh-copy-id -i ~/.ssh/id_ed25519.pub ec2-user@HOST
ssh -vvv접속 실패 단계 추적ssh -vvv ec2-user@HOST (Offering/denied 위치 확인)
sshd -t / sshd -Tsshd 설정 문법 검사·값 조회sshd -t (재시작 전 필수), sshd -T | grep permitrootlogin
systemctl reload sshdsshd 설정 반영(기존 세션 유지)systemctl reload sshd, 안 되면 systemctl restart sshd
chmod키·설정 파일 권한 교정chmod 600 ~/.ssh/id_ed25519, chmod 700 ~/.ssh (과한 권한이면 접속 거부)
nc -zv포트 도달 여부 확인nc -zv HOST 22 (refused=sshd 미구동/방화벽)
mount -o remount,rw /복구 모드에서 루트 RW 재마운트mount -o remount,rw /vi /etc/fstab 수정
fail2ban-clientSSH 브루트포스 차단 상태fail2ban-client status sshd (차단 IP 목록 확인)
명령어/단축키용도자주 쓰는 예
crontab -e현재 사용자 crontab 편집sudo crontab -e -u www-data
crontab -lcrontab 조회·백업crontab -l > ~/crontab-$(date +%F).bak
crontab -r / -ricrontab 삭제(위험)·확인 삭제-e와 인접 — 항상 crontab -ri
분 시 일 월 요일5-필드 스케줄 문법30 2 * * 1(월 02:30), */15 * * * *(15분마다)
@daily / @reboot단축 스케줄@reboot /usr/local/bin/start-vpn.sh
>> … 2>&1cron 출력·에러 로그 저장0 2 * * * backup.sh >> /var/log/backup.log 2>&1
MAILTO=""cron 메일 발송 비활성화crontab 상단에 한 줄
\% 이스케이프crontab에서 %는 개행 → 이스케이프date +\%Y-\%m-\%d
grep CRON /var/log/syslog실행 로그 확인(Debian)grep CRON /var/log/syslog | tail -20
journalctl -u cron실행 로그 확인(journald)journalctl -u cron --since today
/etc/cron.d/패키지·앱별 crontab(사용자 필드 포함)*/5 * * * * www-data /opt/app/run.sh
run-parts+cron.daily/디렉토리 배치 실행(확장자 금지)스크립트를 /etc/cron.daily/에 두고 chmod +x
systemd .timer로그·의존성 있는 스케줄OnCalendar=*-*-* 02:00:00, Persistent=true
systemctl list-timers타이머 다음 실행 확인systemctl list-timers --all
명령어/단축키용도자주 쓰는 예
timedatectl시간·시간대·NTP 동기화 상태 한눈에timedatectlSystem clock synchronized: yes 확인
timedatectl set-timezone시스템 시간대 영구 변경sudo timedatectl set-timezone Asia/Seoul
timedatectl set-ntpNTP 자동 동기화 켜기/끄기sudo timedatectl set-ntp true (수동 설정은 false)
chronyc sources -v타임서버 목록·선택 상태 확인chronyc sources -v^* 마크가 현재 동기화 소스
chronyc trackingNTP 기준 대비 현재 오차(offset) 확인chronyc tracking | grep "System time"
chronyc makestep큰 오차를 즉시 강제 보정sudo chronyc makestep (VM 마이그레이션 후)
systemctl restart chronydchrony 데몬 재시작sudo systemctl restart chronyd (설정 변경 후)
systemctl disable --now systemd-timesyncd충돌 데몬 정지(데몬 1개 원칙)sudo systemctl disable --now systemd-timesyncd
hwclock하드웨어(RTC) 시계 읽기·저장sudo hwclock --systohc (시스템→HW 저장)
date현재 시각 확인·포맷 출력date -u (UTC) / date +%s (Unix 타임스탬프)
nc -uzv <서버> 123UDP 123 포트 도달 여부 테스트nc -uzv pool.ntp.org 123
journalctl -u chronydchrony 로그 실시간 추적sudo journalctl -u chronyd -f
명령어/단축키용도자주 쓰는 예
logrotate -d설정 검증(dry-run, 실제 실행 안 함)logrotate -d /etc/logrotate.d/myapp (배포 전 필수)
logrotate -f조건 무시하고 강제 로테이션logrotate -vf /etc/logrotate.conf (-v로 상세 출력)
journalctl저널 로그 조회·필터journalctl -u nginx -p err --since "1 hour ago"
journalctl -f저널 실시간 스트리밍journalctl -fu myapp.service (배포 직후 모니터링)
journalctl --disk-usage저널이 차지한 디스크 확인journalctl --disk-usage → 크면 vacuum 고려
journalctl --vacuum-*오래된 저널 즉시 정리journalctl --vacuum-size=200M 또는 --vacuum-time=2weeks
du로그 디렉터리 용량 상위 확인du -sh /var/log/* | sort -rh | head
df -h파티션 사용률 확인df -h /var/log (rotate 개수 산정 전 여유 확인)
find큰·오래된 로그 탐색/삭제find /var/log -name "*.gz" -mtime +7 -delete
lsof로그 파일을 연 프로세스 확인lsof /var/log/myapp/app.log (fd 잡은 데몬 추적)
truncate -s 0열린 로그를 비움(rm 금지)truncate -s 0 /var/log/myapp/app.log
kill -USR1데몬에 로그 재오픈 신호 전송kill -USR1 $(cat /var/run/nginx.pid)
systemctljournald 재시작·서비스 reloadsystemctl restart systemd-journald / systemctl reload nginx
systemd-tmpfiles영구 저널 디렉터리 활성화systemd-tmpfiles --create --prefix /var/log/journal
명령어/단축키용도자주 쓰는 예
journalctl -u <unit>특정 서비스 로그journalctl -u nginx -f (실시간 스트리밍)
-p <level>우선순위 필터journalctl -u nginx -p err --since '1 hour ago'
--since / --until시간 범위 지정journalctl --since '14:00' --until '15:00'
-o json-pretty구조화(JSON) 출력journalctl -u api -o json-pretty (필드 전체 확인)
-F <필드>필드 값 목록만 조회journalctl -F _EXE (로그 남긴 실행파일 목록)
_EXE= / _PID= / _UID=유닛명 없이 필드로 추적journalctl _PID=1234 (크래시 직전 프로세스)
-k커널 메시지만journalctl -k -b -1 (직전 부팅 커널 로그·OOM)
-b / -b -1부팅 단위 조회journalctl --list-boots 로 부팅 목록 먼저
--disk-usage저널 용량 확인1GB 이상이면 vacuum 권장
--vacuum-time오래된 로그 삭제journalctl --vacuum-time=7d (7일 이전 삭제)
--verify저널 파일 손상 검사sudo journalctl --verify
journalctl -u a -u b다중 유닛 타임라인게이트웨이+백엔드 연관 추적
명령어/단축키용도자주 쓰는 예
free -h메모리 현황 스냅샷 (used·free·available)free -h -s 2 (2초 갱신) · watch -n 1 free -h
vmstat가상메모리·Swap I/O 시계열, 스래싱 감지vmstat 1 5si·so가 지속 0 초과면 메모리 부족
swapon --show현재 Swap 파티션/파일 크기·사용량 확인swapon --show · cat /proc/swaps
mkswap + swaponswapfile 포맷 후 활성화sudo mkswap /swapfile && sudo swapon /swapfile
swapoffSwap 비활성화sudo swapoff /swapfile · 전체 sudo swapoff -a
fallocate / ddswapfile 공간 생성sudo fallocate -l 2G /swapfile · dd if=/dev/zero of=/swapfile bs=1M count=2048
sysctl vm.swappinessSwap 적극성 조정 (기본 60)sudo sysctl vm.swappiness=10 (서버 10~20 권장)
ps aux --sort=-%mem메모리(%MEM) 상위 프로세스 파악ps aux --sort=-%mem | head -10
journalctl -k / dmesgOOM Killer 발동 로그 확인journalctl -k | grep -i oom · dmesg | grep -i killed
oom_score_adj프로세스 OOM 우선순위 보정 (-1000~+1000)echo -500 > /proc/$(pgrep nginx)/oom_score_adj (보호)
drop_cachesPage Cache 수동 해제 (프로덕션 주의)sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
smem -r -kPSS 기준 프로세스별 실제 메모리 측정smem -r -k | head -20
cat /proc/meminfo커널 메모리 지표 원본 (MemAvailable·Huge*)cat /proc/meminfo | grep -i huge
numactl --hardwareNUMA 노드별 메모리·거리 확인numactl --hardware · numastat -m (노드별 사용량)
명령어용도
tar -czf backup.tar.gz /path/to/source/생성 (gzip 압축)
tar -czf backup-$(date +%Y-%m-%d).tar.gz /path/생성 (날짜 포함)
tar -czf backup.tar.gz /path/ --exclude="*.log" --exclude="cache/"생성 (특정 파일 제외)
tar -tzf backup.tar.gz내용 확인 (해제 없이)
tar -xzf backup.tar.gz해제 (현재 위치)
tar -xzf backup.tar.gz -C /restore/해제 (특정 위치)
rsync -avz /source/ /destination/로컬 동기화 (기본)
rsync -avz --delete /source/ /destination/삭제 포함 완전 동기화
rsync -avzn --delete /source/ /destination/미리 보기 (dry-run)
rsync -avz -e "ssh -i /root/.ssh/key" /source/ user@remote:/dest/SSH 원격 동기화
rsync -avz --link-dest=/backup/latest /source/ /backup/$(date +%Y-%m-%d)/증분 백업 (하드링크)
rsync -avz --partial --progress /source/ user@remote:/dest/부분 전송 재개
rsync -avz --no-perms --no-owner --no-group /source/ /dest/권한 무시
scp /local/file.conf user@remote:/remote/path/단일 파일 전송
scp user@remote:/remote/file.conf /local/path/원격에서 다운로드
scp -r /local/dir/ user@remote:/remote/디렉토리 전송
명령어/단축키용도자주 쓰는 예
sshd -t / sshd -T설정 문법 검사 / 적용값 확인sudo sshd -t (재시작 전 필수) / sshd -T | grep -i permitroot
fail2ban-client브루트포스 차단 상태·수동 밴/언밴sudo fail2ban-client status sshd / … set sshd unbanip 1.2.3.4
ss -tulnp열린 포트와 바인딩 프로세스 확인sudo ss -tulnp | grep LISTEN
systemctl list-units --type=service --state=running실행 중 서비스 점검(불필요 서비스 발견)불필요 서비스는 sudo systemctl disable --now <서비스>
find / -perm -4000 -type fSUID 바이너리 전체 감사sudo find / -perm -4000 -type f 2>/dev/null | sort
chmod u-s불필요한 SUID 비트 제거sudo chmod u-s /usr/bin/python3
getenforce / setenforceSELinux 모드 확인·임시 변경getenforce / sudo setenforce 0 (확인 후 1로 복구)
restorecon / semanage fcontextSELinux 컨텍스트 복구·영구 규칙sudo restorecon -Rv /var/www/html/
ausearchauditd 감사 로그 검색sudo ausearch -k identity_changes / ausearch -m avc -ts recent
chattr +i / lsattr파일 불변 속성 설정·확인sudo chattr +i /etc/passwd / lsattr /etc/passwd
chage계정 비밀번호 만료 정책sudo chage -l user / sudo chage -M 90 -m 1 -W 7 user
faillock로그인 실패 잠금 상태·해제sudo faillock --user user / … --user user --reset
sysctl -p커널 보안 파라미터 적용sudo sysctl -p /etc/sysctl.d/99-security-hardening.conf
lynis audit systemCIS 스타일 전체 보안 점수 감사sudo lynis audit system (Hardening Index 확인)
명령어/단축키용도자주 쓰는 예
systemctl is-active서비스 활성 여부 감지(멱등)systemctl is-active --quiet nginx || systemctl restart nginx
curlHTTP 상태코드로 엔드포인트 헬스체크curl -s -o /dev/null -w "%{http_code}" --max-time 5 http://localhost/health
ncTCP 포트 개방 여부 확인nc -z -w 3 localhost 5432 && echo open
bash /dev/tcpnc 없는 환경의 포트 체크(내장)timeout 3 bash -c 'echo >/dev/tcp/localhost/6379'
df디스크 사용률 임계값 감시df -h -x tmpfs / | awk 'NR==2{gsub(/%/,"",$5);print $5}'
free메모리 사용률 계산free -m | awk '/^Mem:/{printf "%.0f%%",($2-$7)/$2*100}'
timeout명령 hang 방지(실행 시간 상한)timeout 10 curl -s http://localhost/health → 초과 시 종료코드 124
flock스크립트 중복 실행 방지(락)exec 200>/var/lock/hc.lock; flock -n 200 || exit 0
crontab헬스체크 주기 실행 등록crontab -e*/5 * * * * /opt/healthcheck/check.sh
journalctlcron·서비스 로그 확인journalctl -u cron --since "1 hour ago"
trap종료 시 락·임시파일 정리trap 'rm -f "$LOCK_FILE"' EXIT
ss리스닝 포트 직접 확인ss -tlnp | grep ':80 '
watch대시보드 주기 갱신watch -n 5 /opt/healthcheck/dashboard.sh
명령어물리 서버클라우드 VM (예: AWS EC2)
lscpu실제 CPU 모델가상 CPU (vCPU) 개수, 실제 모델 다를 수 있음
dmidecode -t memory실제 DIMM 정보"Unknown" 또는 가상 메모리 정보
lsblk실제 디스크EBS 볼륨 (네트워크 스토리지)
ethtool eth0물리 NIC 정보가상 NIC (ENI)
명령어/단축키용도자주 쓰는 예
sysctl커널 파라미터 조회·임시 변경sysctl net.core.somaxconn (조회), sudo sysctl -w net.ipv4.tcp_tw_reuse=1 (임시)
sysctl -a전체 파라미터 목록 조회sysctl -a | grep tcp_tw (관련 항목만)
sysctl --system / -p설정 파일 반영(재부팅 없이)sudo sysctl --system (/etc/sysctl.d/ 전체), sudo sysctl -p (/etc/sysctl.conf)
cat /proc/sys/...파라미터 파일 직접 읽기cat /proc/sys/fs/file-nr (현재·미반환·최대 FD 수)
ulimit쉘·프로세스 리소스 한도 조회·설정ulimit -a (전체), ulimit -n 65536 (FD 한도)
ulimit -Sn / -Hnsoft·hard 파일 한도 분리 조회ulimit -Sn (soft), ulimit -Hn (hard)
cat /proc/PID/limits실행 중 프로세스의 실제 한도 확인cat /proc/$(pgrep -o nginx)/limits
prlimit실행 중 프로세스 한도 변경(재시작 없이)sudo prlimit --nofile=1048576:1048576 --pid PID
lsof -p프로세스가 연 파일·소켓 나열lsof -p $(pgrep -o nginx) | wc -l (열린 수)
ss소켓·연결 큐 상태 확인ss -s (요약·timewait), ss -lnt (리스닝 Recv-Q/Send-Q)
nstat / netstat -saccept 큐 오버플로 카운터 확인nstat -az | grep -i ListenOverflows
systemctl editsystemd 서비스 리소스 한도 overridesudo systemctl edit nginxLimitNOFILE=1048576
lsmod로드된 커널 모듈 목록lsmod | grep bbr (특정 모듈 확인)
modprobe커널 모듈 로드·언로드sudo modprobe tcp_bbr (로드), modprobe -r br_netfilter (언로드)
modinfo모듈 상세·파라미터 조회modinfo -p br_netfilter (파라미터만)
목적명령어핵심 확인 포인트
전체 조감vmstat 1 10r, b, si, so, wa
CPU 코어별 분석mpstat -P ALL 2 5특정 코어 집중 여부
디스크 성능iostat -xm 2 5%util, await, aqu-sz
프로세스별 I/Oiotop -o상위 I/O 프로세스
이력 데이터sar -u / -r / -b장애 시점 소급 분석
네트워크 이력sar -n DEV 2 5%ifutil, rxkB/s
CPU 핫스팟perf top어떤 함수가 CPU 소비
종합 실시간dstat -cdnms --top-cpu한 화면에서 전체
Load 분석uptime + nprocLoad/코어 비율
명령어/단축키용도자주 쓰는 예
set -euo pipefail프로덕션 셸 3대 안전 옵션(에러·미정의변수·파이프실패 시 즉시 중단)스크립트 첫 줄에 set -euo pipefail, 실패해도 되는 곳만 cmd || true
trap종료·에러·인터럽트 신호를 가로채 정리·롤백 실행trap cleanup EXIT · trap on_error ERR · trap on_interrupt INT TERM
ssh원격 서버에 명령 실행(자동화용 무중단 옵션)ssh -i key -o BatchMode=yes -o ConnectTimeout=10 user@host "df -h /"
ssh-keygen / ssh-copy-id패스워드 없는 키 기반 인증 준비ssh-keygen -t ed25519 && ssh-copy-id user@target-host
flock파일 디스크립터 락으로 스크립트 중복 실행 방지exec 200>lock; flock -n 200 || exit 1
grep -qF내용이 없을 때만 추가하는 멱등성 검사grep -qF "$LINE" ~/.bashrc || echo "$LINE" >> ~/.bashrc
id사용자 존재 확인 후 조건부 생성(멱등)id deploy-user &>/dev/null || useradd -m -s /bin/bash deploy-user
xargs -P서버 목록을 받아 SSH를 병렬 실행get_servers list | xargs -P10 -I{} ssh {} "uptime"
parallel (GNU)결과·joblog를 남기는 고급 병렬 실행parallel --jobs 20 --timeout 60 --joblog log.txt --tag ssh {} "df -h /"
df -h마운트별 디스크 사용량 점검df -h --output=target,size,used,avail,pcent
dpkg-query로케일과 무관하게 패키지 설치 여부 확인dpkg-query -W -f='${Status}' nginx | grep -q "install ok installed"
systemctl서비스 상태 확인 후 조건부 기동(멱등)systemctl is-active --quiet fail2ban || systemctl enable --now fail2ban
sort -V문자열 비교 함정을 피한 버전 비교printf '%s\n' "$A" "$B" | sort -V | head -1
bash -x실행 명령을 추적해 예기치 않은 종료 디버깅bash -x your-script.sh 2>&1 | head -50
명령어/단축키용도자주 쓰는 예
promtool check configprometheus.yml 문법 검증(시작 전 필수)promtool check config /etc/prometheus/prometheus.yml
promtool check rules알람 규칙 파일 문법 검증promtool check rules /etc/prometheus/rules/node-alerts.yml
curl .../metricsNode Exporter 메트릭 원본 확인curl -s http://localhost:9100/metrics | grep node_memory
curl .../-/healthy살아있음(healthy)·준비(ready) 상태 확인curl -s http://localhost:9090/-/healthy (준비 여부는 /-/ready)
curl -X POST .../-/reload재시작 없이 설정 리로드(WAL replay 회피)curl -s -X POST http://localhost:9090/-/reload
curl .../api/v1/targets스크랩 타깃 UP/DOWN 상태 조회curl -s http://localhost:9090/api/v1/targets | python3 -m json.tool
journalctl -uPrometheus·exporter 서비스 로그 확인journalctl -u prometheus -n 50 --no-pager (replaying WAL 확인)
ss -tlnpexporter 포트 리스닝 여부 확인ss -tlnp | grep 9100
amtoolAlertmanager 설정 검증·테스트 알람 발송amtool check-config /etc/alertmanager/alertmanager.yml
up{job="..."}타깃 생사 확인(0=스크랩 실패)up{job="node"} → 0이면 포트·방화벽부터 점검
rate(v[5m])Counter의 초당 평균 증가율(CPU·트래픽)100 * (1 - avg by (instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])))
predict_linear()추세로 소진 시점 예측(디스크)predict_linear(node_filesystem_avail_bytes[1h], 4*3600) < 0
node_memory_MemAvailable_bytes가용 메모리 Gauge(메모리 사용률 계산)100 * (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)
topk(k, v)상위 k개 시계열 추출topk(5, rate(node_network_receive_bytes_total[5m]))