🐧
리눅스 서버 운영 명령어 치트시트
이 트랙 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+R 후 ssh 입력 → 이전 ssh 명령 |
history | 명령 이력 보기·재실행 | history | tail -10, !123(번호로 재실행) |
ssh-keygen -t ed25519 | SSH 키 생성 | 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 / attach | SSH 끊겨도 세션 유지 | tmux new -s work → Ctrl+B D → tmux attach -t work |
wsl --install | Windows에 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 | 파일 열기 (대개 vi는 vim 심볼릭 링크) |
vim -R / view 파일 | vi·vim | 읽기 전용으로 열기(대용량 로그 조회·실수 편집 방지) |
i / o | vi·vim | 입력(Insert) 모드 진입 — 커서 앞 / 아랫줄에 새 줄 |
Esc | vi·vim | 입력 모드에서 명령(Normal) 모드로 빠져나오기 |
gg / G | vi·vim | 파일 맨 위 / 맨 아래로 이동(로그는 G로 최신부터) |
:N (예: :42) | vi·vim | N번째 줄로 점프(:set nu로 줄 번호 표시) |
/패턴 → n / N | vi·vim | 아래로 검색 후 다음 / 이전 매치로 이동(위로는 ?패턴) |
Ctrl+f / Ctrl+b | vi·vim | 한 화면 아래 / 위로(페이지 넘김) |
:w / :wq | vi·vim | 저장 / 저장 후 종료 |
:q! | vi·vim | 저장하지 않고 강제 종료(편집 취소) |
dd / u | vi·vim | 현재 줄 삭제 / 직전 편집 실행 취소(undo) |
:%s/old/new/g | vi·vim | 파일 전체에서 old를 new로 일괄 치환 |
nano 파일 | nano | 쉬운 편집기로 열기 |
Ctrl+O / Ctrl+X | nano | 저장(Write Out) / 종료 |
Ctrl+W / Ctrl+K | nano | 검색 / 현재 줄 잘라내기 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
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 |
visudo | sudoers 안전 편집(문법 검사) | 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) | 본인 파일만 삭제 | /tmp의 drwxrwxrwt |
find -perm | SUID·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/keyrings | 1. 키링 저장 디렉토리 생성 |
| curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ | 2. GPG 키 다운로드 및 저장 |
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg | 2. GPG 키 다운로드 및 저장 |
| sudo chmod a+r /etc/apt/keyrings/docker.gpg | 2. 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/null | 3. sources.list.d에 signed-by 옵션으로 리포 등록 |
| sudo apt update | 4. 업데이트 및 설치 |
| sudo apt install docker-ce docker-ce-cli | 4. 업데이트 및 설치 |
| curl -fsSL https://example.com/key.gpg | sudo apt-key add - | 이렇게 하면 안 됨 — 모든 리포에서 해당 키 신뢰 |
| sudo tee /etc/apt/preferences.d/nginx << 'EOF' | nginx를 특정 버전으로 고정 |
| Package: nginx | nginx를 특정 버전으로 고정 |
| Pin: version 1.24.* | nginx를 특정 버전으로 고정 |
| Pin-Priority: 1001 | nginx를 특정 버전으로 고정 |
| EOF | nginx를 특정 버전으로 고정 |
| sudo tee /etc/apt/preferences.d/docker << 'EOF' | 리포지토리 전체 우선순위 낮추기 (외부 리포 패키지가 시스템 패키지 덮어쓰지 않도록) |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
command & / jobs / fg / bg | 셸 작업 제어 | sleep 300 & → jobs → fg %1 |
Ctrl+Z | 포그라운드 명령 일시정지 | Ctrl+Z → bg(백그라운드 재개) |
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-a | prefix 키 변경(~/.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.stat | cgroup 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 nginx | PID 조회 |
| pgrep -u www-data -l | PID 조회 |
| 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 |
jq | JSON 로그 파싱 | 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) |
vgcreate | PV들을 묶어 VG(스토리지 풀) 생성 | vgcreate vg_data /dev/sdb1 /dev/sdc1 |
vgextend | 기존 VG에 새 PV를 추가해 풀 확장 | vgextend vg_data /dev/sdd1 |
lvcreate | VG에서 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 |
lvextend | LV 확장(+ 파일시스템까지 -r) | lvextend -L +5G -r /dev/vg_data/lv_mysql |
resize2fs | ext4 파일시스템 온라인 확장 | resize2fs /dev/vg_data/lv_mysql |
xfs_growfs | xfs 파일시스템 온라인 확장(마운트 경로 인자) | xfs_growfs /var/log/app |
pvs / vgs / lvs | PV·VG·LV 상태 요약 확인 | vgs vg_data(VFree 확인), lvs -o +snap_percent,lv_attr |
vgdisplay | VG 상세(여유 PE·크기) 확인 | vgdisplay vg_data | grep "Free PE" |
lvremove | LV·스냅샷 삭제(언마운트 후) | lvremove /dev/vg_data/lv_mysql_snap |
pvmove | PV 데이터를 다른 PV로 이동(디스크 제거 전) | pvmove /dev/sdb1 |
mdadm --create | 소프트웨어 RAID 어레이 생성 | mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sde /dev/sdf |
mdadm --fail/--remove/--add | RAID 디스크 핫스왑 교체 | 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 -delete | 30일 이상 된 파일 삭제 |
find /path -type f -size +100M -delete | 100MB 이상 파일 삭제 |
find /path -xtype l -delete | Broken 심볼릭 링크 삭제 |
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 l | Broken 심볼릭 링크만 찾기 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
ip addr show | 인터페이스·IP(inet) 확인 | ip -br addr show (한 줄 요약) |
ip link show / ip link set | L2 인터페이스 상태·UP/DOWN | ip 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 -ulnp | LISTEN 중 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 -s | L3 도달성 / 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 / -w | L7 HTTP 단계별 디버깅·응답시간 측정 | curl -o /dev/null -s -w "%{http_code}" <url> |
dig / nslookup / getent hosts | DNS 이름 해석 확인 | 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 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
dig | DNS 조회 상세 | dig @8.8.8.8 api.example.com +short |
dig +trace | Root→Authoritative 위임 추적 | dig +trace api.example.com |
dig +tcp / +dnssec | TCP 폴백·큰 응답 확인 | dig +tcp example.com(무응답이면 TCP 53 차단) |
dig <타입> / -x | 레코드 타입·역방향 조회 | dig example.com MX, dig -x 93.184.216.34 |
resolvectl status | systemd-resolved DNS 설정 | resolvectl status eth0(per-link DNS) |
resolvectl query | resolved 경유 이름 조회 | resolvectl query api.example.com |
resolvectl flush-caches | DNS 캐시 비우기 | 레코드 변경 후 스테일 캐시 제거 |
getent hosts | NSS 경로(앱이 쓰는 길)로 조회 | 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 show | RHEL 계열 DNS 설정 확인 | nmcli dev show | grep DNS |
ss -ulnp | grep 53 | 127.0.0.53 리스닝 확인 | resolved 포트 열림 여부 |
tcpdump port 53 | DNS 패킷 실시간 확인 | sudo tcpdump -i any -n port 53 |
ln -sf / readlink -f | resolv.conf 링크 복원·확인 | sudo ln -sf …/stub-resolv.conf /etc/resolv.conf |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
ss -tulnp | TCP/UDP LISTEN 포트+프로세스 한눈에 | ss -tulnp | grep :8080 (특정 포트 점유 확인) |
ss -tnp state established | 현재 활성(ESTABLISHED) 연결 확인 | ss -tn state established | wc -l (동시 접속 수) |
ss -ltn | LISTEN 소켓의 Accept 큐(Recv-Q/Send-Q) 점검 | ss -ltn → Recv-Q가 Send-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 (수신 대기 → 다른 터미널에서 접속) |
telnet | nc 없는 환경에서 포트 프로빙 | 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 -v | HTTP/HTTPS 응답·연결 단계 추적 | curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/health |
openssl s_client | TLS 핸드셰이크·인증서 진단 | openssl s_client -connect example.com:443 -servername example.com |
sysctl net.core.somaxconn | Accept 큐 상한 조정(버스트 흡수) | 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 bastion → ssh 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 bastion → curl --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 -t | sshd_config 문법 검사 | 재시작 전 필수 — 오류 있으면 해당 줄 출력 |
systemctl reload sshd | 설정 반영(기존 연결 유지) | 하드닝 적용은 반드시 별도 세션 열어두고 |
ssh-keygen -s | CA로 사용자 키 서명(인증서 발급) | ssh-keygen -s ssh_ca -I alice -V +30d alice.pub |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
ping | L3 서버 도달성·루프백 스택 확인 | ping -c 3 <서버IP> (0% loss면 정상) / ping -c 2 127.0.0.1 |
ss -tlnp | LISTEN 포트와 바인딩 프로세스 확인 | 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 |
curl | L7 앱 응답·상태코드 확인 | 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 | 로드 평균을 코어 수와 비교 | uptime 후 nproc — load average > 코어 수면 CPU 포화 |
ps aux --sort | CPU·메모리 상위 프로세스 특정 | 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.log → scriptreplay -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 nat | NAT·포트포워딩 | -t nat -A POSTROUTING -j MASQUERADE, DNAT |
iptables-save / -restore | 규칙 영구 저장·복원 | iptables-save > /etc/iptables/rules.v4 |
firewall-cmd | firewalld zone·포트 관리 | firewall-cmd --permanent --add-port=8080/tcp && firewall-cmd --reload |
firewall-cmd --list-all | 현재 zone 규칙 조회 | firewall-cmd --get-active-zones |
ufw allow / enable | Ubuntu 간편 방화벽 | ufw allow ssh(먼저) → ufw enable |
ufw status | ufw 규칙 확인 | ufw status verbose, ufw status numbered |
nft list ruleset | nftables 규칙 조회·추가 | 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 minutes로 iptables -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-mkconfig | GRUB 설정 변경 반영 | grub2-mkconfig -o /boot/grub2/grub.cfg (Ubuntu는 update-grub) |
cloud-init | 첫 부팅 초기화 상태·재실행 | cloud-init status --long, 다시 돌리려면 sudo cloud-init clean --logs 후 재부팅 |
aws ec2 run-instances | EC2 인스턴스 시작 | aws ec2 run-instances --image-id ami-... --instance-type t3.micro --key-name my-server-key |
ssh-keygen | SSH 키페어 생성 | 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 -T | sshd 설정 문법 검사·값 조회 | sshd -t (재시작 전 필수), sshd -T | grep permitrootlogin |
systemctl reload sshd | sshd 설정 반영(기존 세션 유지) | 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-client | SSH 브루트포스 차단 상태 | fail2ban-client status sshd (차단 IP 목록 확인) |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
crontab -e | 현재 사용자 crontab 편집 | sudo crontab -e -u www-data |
crontab -l | crontab 조회·백업 | crontab -l > ~/crontab-$(date +%F).bak |
crontab -r / -ri | crontab 삭제(위험)·확인 삭제 | -e와 인접 — 항상 crontab -ri |
분 시 일 월 요일 | 5-필드 스케줄 문법 | 30 2 * * 1(월 02:30), */15 * * * *(15분마다) |
@daily / @reboot | 단축 스케줄 | @reboot /usr/local/bin/start-vpn.sh |
>> … 2>&1 | cron 출력·에러 로그 저장 | 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 동기화 상태 한눈에 | timedatectl → System clock synchronized: yes 확인 |
timedatectl set-timezone | 시스템 시간대 영구 변경 | sudo timedatectl set-timezone Asia/Seoul |
timedatectl set-ntp | NTP 자동 동기화 켜기/끄기 | sudo timedatectl set-ntp true (수동 설정은 false) |
chronyc sources -v | 타임서버 목록·선택 상태 확인 | chronyc sources -v → ^* 마크가 현재 동기화 소스 |
chronyc tracking | NTP 기준 대비 현재 오차(offset) 확인 | chronyc tracking | grep "System time" |
chronyc makestep | 큰 오차를 즉시 강제 보정 | sudo chronyc makestep (VM 마이그레이션 후) |
systemctl restart chronyd | chrony 데몬 재시작 | 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 <서버> 123 | UDP 123 포트 도달 여부 테스트 | nc -uzv pool.ntp.org 123 |
journalctl -u chronyd | chrony 로그 실시간 추적 | 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) |
systemctl | journald 재시작·서비스 reload | systemctl 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 5 → si·so가 지속 0 초과면 메모리 부족 |
swapon --show | 현재 Swap 파티션/파일 크기·사용량 확인 | swapon --show · cat /proc/swaps |
mkswap + swapon | swapfile 포맷 후 활성화 | sudo mkswap /swapfile && sudo swapon /swapfile |
swapoff | Swap 비활성화 | sudo swapoff /swapfile · 전체 sudo swapoff -a |
fallocate / dd | swapfile 공간 생성 | sudo fallocate -l 2G /swapfile · dd if=/dev/zero of=/swapfile bs=1M count=2048 |
sysctl vm.swappiness | Swap 적극성 조정 (기본 60) | sudo sysctl vm.swappiness=10 (서버 10~20 권장) |
ps aux --sort=-%mem | 메모리(%MEM) 상위 프로세스 파악 | ps aux --sort=-%mem | head -10 |
journalctl -k / dmesg | OOM 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_caches | Page Cache 수동 해제 (프로덕션 주의) | sync && echo 3 | sudo tee /proc/sys/vm/drop_caches |
smem -r -k | PSS 기준 프로세스별 실제 메모리 측정 | smem -r -k | head -20 |
cat /proc/meminfo | 커널 메모리 지표 원본 (MemAvailable·Huge*) | cat /proc/meminfo | grep -i huge |
numactl --hardware | NUMA 노드별 메모리·거리 확인 | 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 f | SUID 바이너리 전체 감사 | sudo find / -perm -4000 -type f 2>/dev/null | sort |
chmod u-s | 불필요한 SUID 비트 제거 | sudo chmod u-s /usr/bin/python3 |
getenforce / setenforce | SELinux 모드 확인·임시 변경 | getenforce / sudo setenforce 0 (확인 후 1로 복구) |
restorecon / semanage fcontext | SELinux 컨텍스트 복구·영구 규칙 | sudo restorecon -Rv /var/www/html/ |
ausearch | auditd 감사 로그 검색 | 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 system | CIS 스타일 전체 보안 점수 감사 | sudo lynis audit system (Hardening Index 확인) |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
systemctl is-active | 서비스 활성 여부 감지(멱등) | systemctl is-active --quiet nginx || systemctl restart nginx |
curl | HTTP 상태코드로 엔드포인트 헬스체크 | curl -s -o /dev/null -w "%{http_code}" --max-time 5 http://localhost/health |
nc | TCP 포트 개방 여부 확인 | nc -z -w 3 localhost 5432 && echo open |
bash /dev/tcp | nc 없는 환경의 포트 체크(내장) | 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 |
journalctl | cron·서비스 로그 확인 | 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 / -Hn | soft·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 -s | accept 큐 오버플로 카운터 확인 | nstat -az | grep -i ListenOverflows |
systemctl edit | systemd 서비스 리소스 한도 override | sudo systemctl edit nginx → LimitNOFILE=1048576 |
lsmod | 로드된 커널 모듈 목록 | lsmod | grep bbr (특정 모듈 확인) |
modprobe | 커널 모듈 로드·언로드 | sudo modprobe tcp_bbr (로드), modprobe -r br_netfilter (언로드) |
modinfo | 모듈 상세·파라미터 조회 | modinfo -p br_netfilter (파라미터만) |
| 목적 | 명령어 | 핵심 확인 포인트 |
|---|---|---|
| 전체 조감 | vmstat 1 10 | r, b, si, so, wa |
| CPU 코어별 분석 | mpstat -P ALL 2 5 | 특정 코어 집중 여부 |
| 디스크 성능 | iostat -xm 2 5 | %util, await, aqu-sz |
| 프로세스별 I/O | iotop -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 + nproc | Load/코어 비율 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
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 config | prometheus.yml 문법 검증(시작 전 필수) | promtool check config /etc/prometheus/prometheus.yml |
promtool check rules | 알람 규칙 파일 문법 검증 | promtool check rules /etc/prometheus/rules/node-alerts.yml |
curl .../metrics | Node 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 -u | Prometheus·exporter 서비스 로그 확인 | journalctl -u prometheus -n 50 --no-pager (replaying WAL 확인) |
ss -tlnp | exporter 포트 리스닝 여부 확인 | ss -tlnp | grep 9100 |
amtool | Alertmanager 설정 검증·테스트 알람 발송 | 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])) |