ip addr # 전체 인터페이스
ip -br addr # 한 줄씩 요약
ip -4 addr show eth0 # 인터페이스 하나, IPv4
hostname -I # IP 만ip -br addr 출력의 eth0 UP 10.0.0.12/24 에서 /24 가 서브넷 마스크입니다. lo 의 127.0.0.1 은 자기 자신이고 외부에서는 못 씁니다. ifconfig 는 net-tools 를 설치해야 있습니다.
ip route # default via 10.0.0.1 dev eth0
ip route get 10.20.0.5 # 이 목적지로 나가는 인터페이스와 게이트웨이default via 가 기본 게이트웨이입니다. 외부로 아예 안 나가면 이 줄이 없거나 게이트웨이가 죽은 것입니다. ip route get 은 인터페이스가 여럿일 때 어느 쪽으로 가는지 알려 줍니다.
ping -c 3 db-prod # 3번만
ping -c 3 -W 1 db-prod # 응답 1초 대기
traceroute -n 10.20.0.5 # 홉마다 IP
mtr -n 10.20.0.5 # ping + traceroute 연속 (q 로 나감)-c 없이 치면 끝없이 돕니다. ICMP 를 막는 망이 많아 ping 실패가 서버 다운을 뜻하지는 않습니다. traceroute 에서 * * * 이 시작되는 홉이 막힌 지점입니다.
| 명령 | 참조 |
|---|---|
getent hosts 이름 |
/etc/hosts 뒤 DNS |
nslookup 이름 |
DNS 만 |
dig +short 이름 |
DNS 만, 짧게 |
cat /etc/resolv.conf |
DNS 서버 주소 |
cat /etc/hosts |
수동 매핑 |
자바와 curl 은 getent 와 같은 순서로 풉니다. dig 는 되는데 getent 가 안 되면 /etc/hosts 에 잘못된 줄이 있는 것입니다. 폐쇄망은 DNS 가 없어 /etc/hosts 에 직접 적는 경우가 많습니다.
| 명령 | 뜻 |
|---|---|
ss -ltnp |
듣는 TCP 포트·프로세스 |
ss -lunp |
UDP |
ss -tnp |
맺힌 연결 |
ss -tn state time-wait |
TIME-WAIT 만 |
ss -s |
요약 |
netstat -tulnp 와 같은 정보입니다. -l 듣는 것, -t TCP, -n 숫자, -p 프로세스 네 글자를 외웁니다. 0.0.0.0:8080 은 모든 IP 에서 받고 127.0.0.1:8080 은 서버 안에서만 받습니다.
nc -zv db-prod 1521 # Connected 또는 refused
timeout 3 bash -c '</dev/tcp/db-prod/1521' && echo open || echo closed
nc -l 9000 # 내 쪽에 임시 포트 열기nc -l 로 서버에 포트를 열어 두고 다른 서버에서 nc -zv 로 닿는지 보면 방화벽 신청이 됐는지 앱 없이 확인됩니다. nc 는 nmap-ncat 패키지입니다.
curl -s URL # 본문
curl -s -o /dev/null -w '%{http_code}\n' URL # 상태 코드만
curl -sI URL # 헤더만
curl -O URL # 파일 이름 그대로 받기
wget -O app.jar URL # 이름 지정해 받기
wget -q --spider URL && echo 있음 # 존재만 확인curl 은 API 확인, wget 은 파일 받기에 편합니다. 운영 묶음 07 에서 curl 옵션과 종료 코드를 자세히 다뤘습니다.
scp app.jar deploy@server:/tmp/ # 보내기
scp deploy@server:/var/log/myapp/app.log . # 받기
scp -r conf/ deploy@server:/opt/myapp/ # 폴더
scp -P 2222 app.jar deploy@server:/tmp/ # 포트는 대문자 P사용자@서버:경로 형식이고 콜론 뒤가 원격 경로입니다. 원격 경로를 비우면 홈 폴더입니다. 받은 파일의 소유자는 로컬 사용자가 되므로 배포 후 chown 이 필요합니다.
rsync -avz build/ deploy@server:/opt/myapp/current/
rsync -avz --delete build/ deploy@server:/opt/myapp/current/
rsync -avz -e 'ssh -p 2222' src/ server:/dst/
rsync -avzn src/ dst/ # -n 미리 보기바뀐 파일만 보내 scp 보다 빠르고 중단돼도 이어서 합니다. 원본 끝의 / 가 중요합니다. build/ 는 안의 내용을, build 는 폴더 자체를 보냅니다. --delete 는 원본에 없는 파일을 대상에서 지웁니다.
ssh deploy@server # 접속
ssh -p 2222 deploy@server
ssh deploy@server 'uptime; df -h /' # 원격 명령만 실행
ssh -i ~/.ssh/deploy_key deploy@server # 키 지정
ssh -L 8080:localhost:8080 deploy@server # 로컬 8080 을 서버 8080 으로 터널원격 명령 실행은 여러 서버 점검 스크립트의 기본입니다. -L 터널은 방화벽에 막힌 관리 화면을 내 PC 브라우저에서 localhost:8080 으로 여는 방법입니다.
ssh-keygen -t ed25519 -C 'kim@pc' # ~/.ssh/id_ed25519 생성
ssh-copy-id deploy@server # 공개키를 서버 authorized_keys 에
chmod 700 ~/.ssh; chmod 600 ~/.ssh/* # 권한 필수# ~/.ssh/config
Host app1
HostName 10.0.0.12
User deploy
Port 2222
IdentityFile ~/.ssh/deploy_key설정 후 ssh app1, scp app.jar app1:/tmp/ 처럼 별칭만 씁니다. 03 레슨의 권한 규칙대로 .ssh 폴더가 700, 키가 600 이 아니면 접속이 거부됩니다.
sudo firewall-cmd --list-all
sudo firewall-cmd --add-port=8080/tcp --permanent && sudo firewall-cmd --reload
sudo tcpdump -i any port 8080 -c 10 -nn포트를 열 때는 --permanent 와 --reload 가 한 세트입니다. tcpdump 는 -c 로 개수를 제한하고 port·host 필터를 붙여 씁니다. 운영 묶음 07 의 진단 순서에서 이 둘의 위치를 봤습니다.