공공부하자개발 · 영어 학습 노트
리눅스
리눅스 명령어리눅스 자체를 익히는 명령 중심 학습0/10 완료
  • 01파일·디렉터리 명령
  • 02텍스트 보기·편집 (less·vi)
  • 03사용자·그룹·권한·sudo
  • 04패키지·시스템 정보 (dnf·rpm)
  • 05프로세스·자원 (ps·top·free·df)
  • 06네트워크 명령 (ip·ss·ping·scp)
  • 07압축·아카이브·검색 (tar·gzip·find)
  • 08셸 활용 (히스토리·별칭·단축키)
  • 09sed · awk 한 줄 처리 (치환·필드·집계)
  • 10링크 · 디스크 · 예약 작업 (ln·mount·crontab)
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 리눅스 명령어 › 06 / 10

네트워크 명령 (ip·ss·ping·scp)

섹션 7진행 0 / 10
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

2. 핵심 원리

2.1 내 주소: ip addr

bash
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 를 설치해야 있습니다.

2.2 경로: ip route

bash
ip route                    # default via 10.0.0.1 dev eth0
ip route get 10.20.0.5      # 이 목적지로 나가는 인터페이스와 게이트웨이

default via 가 기본 게이트웨이입니다. 외부로 아예 안 나가면 이 줄이 없거나 게이트웨이가 죽은 것입니다. ip route get 은 인터페이스가 여럿일 때 어느 쪽으로 가는지 알려 줍니다.

2.3 닿는가: ping·traceroute·mtr

bash
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 에서 * * * 이 시작되는 홉이 막힌 지점입니다.

2.4 이름 풀기

명령 참조
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 에 직접 적는 경우가 많습니다.

2.5 포트: ss

명령 뜻
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 은 서버 안에서만 받습니다.

2.6 포트가 열렸나: nc 와 /dev/tcp

bash
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 패키지입니다.

2.7 HTTP: curl 과 wget

bash
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 옵션과 종료 코드를 자세히 다뤘습니다.

2.8 파일 보내기·받기: scp

bash
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 이 필요합니다.

2.9 동기화: rsync

bash
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 는 원본에 없는 파일을 대상에서 지웁니다.

2.10 ssh 활용

bash
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 으로 여는 방법입니다.

2.11 키와 config

bash
ssh-keygen -t ed25519 -C 'kim@pc'            # ~/.ssh/id_ed25519 생성
ssh-copy-id deploy@server                    # 공개키를 서버 authorized_keys 에
chmod 700 ~/.ssh; chmod 600 ~/.ssh/*         # 권한 필수
text
# ~/.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 이 아니면 접속이 거부됩니다.

2.12 방화벽과 패킷

bash
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 의 진단 순서에서 이 둘의 위치를 봤습니다.

핵심 원리
  • 2.1 내 주소: ip addr
  • 2.2 경로: ip route
  • 2.3 닿는가: ping·traceroute·mtr
  • 2.4 이름 풀기
  • 2.5 포트: ss
  • 2.6 포트가 열렸나: nc 와 /dev/tcp
  • 2.7 HTTP: curl 과 wget
  • 2.8 파일 보내기·받기: scp
  • 2.9 동기화: rsync
  • 2.10 ssh 활용
  • 2.11 키와 config
  • 2.12 방화벽과 패킷
이전 섹션1 왜 배우는가2 / 7다음 섹션3 코드 예제