개요
오늘은 네트워크를 확인하거나 트러블 슈팅할 때 사용하는 명령어 또는 프로그램을 정리해보고자 한다.
리눅스에서 네트워크를 확인하거나 트러블 슈팅할 때 내가 중요하게 느꼈던 점은 일단 내 네트워크의 상태가 어떤지 먼저 확인하고 대상 서버의 상태를 확인하는 것이다. 그래서 아래에는 내 네트워크의 상태가 어떤지 확인하는 명령어와 내 네트워크의 상태를 기준으로 대상 서버의 상태를 확인하는 명령어가 있다.
명령어 또는 프로그램은 사실 굉장히 많으나 사용해봤거나 검색을 통해 나온 대중적인 명령어만 작성했음을 인지해주면 좋을 것 같다.
각종 확인 명령어
netstat
netstat [-a] [-b] [-e] [-n] [-o] [-p <Protocol>] [-r] [-s] [<interval>]
netstat 명령어는 네트워크 연결 상태, 라우팅 테이블, 인터페이스 상태 등을 보여주는 명령어입니다.
"Active Internet connections"(인터넷 연결상태) 부분과 "Active UNIX domain sockets"(도메인 소켓 연결 상태)으로 나뉘어져서 표시되며 netstat -an 옵션을 입력할 경우, 현재 시스템의 모든 네트워크 연결 목록을 표시해 줍니다.
# 주요 옵션
-n : 호스트명, 포트명을 lookup하지 않고 그대로 IP, Port번호로 보여준다.
-a : 모든 네트웍 상태를 보여준다.
-l : LINTEN 상태인 서비스 포트를 보여준다.
-t : TCP 프로토콜만 보여준다.
-u : UDP 프로토콜만 보여준다.
-p : 해당 포트를 사용하는 프로그램과 프로세스ID(PID)를 보여준다.
-r : 라우팅 테이블 출력
-s : 프로토콜별(IP, ICMP, TCP, UDP 등)로 통계를 보여준다
-c : 1초 단위로 결과값을 연속적으로 보여준다.
# 주로 사용하는 명령어
netstat -nap : 연결을 기다리는 목록과 프로그램을 보여준다.
netstat -an | grep 포트번호 : 특정 포트가 사용 중인지 확인한다.
netstat -nlpt : TCP listening 상태의 포트와 프로그램을 보여준다.
netstat -anb : 자세한 라이브러리까지 보여주어 유용성이 커 보이지만 결과를 호출하는 시간이 오래걸린다.
netstat -ano : -anb 대용으로 사용되어서 PID를 표시한다.
netstat 명령어 뒤에 숫자를 붙이면 ex) 5 5초에 한 번씩 명령어를 친 결과가 출력된다.
netstat -na --ip : tcp/udp의 세션 목록 표시
netstat -na | grep ESTABLISHED | wc -l : 활성화된 세션수 확인
netstat -nap | grep :80 | grep ESTABLISHED | wc -l : 80포트 동시 접속자수
netstat -r : 서버의 라우팅 테이블 출력 == route 명령어 출력결과
실제로 netstat을 확인하면 이와 같은 결과를 반환하게 된다.
Active Internet connections (servers and established) 항목의 경우 프로토콜, 송/수신 큐, IP:Port 에 해당하는 부분도 확인할 수 있다. 또한 tcp protocol인 경우 State 항목도 확인 가능하다.
# 출력 값 컬럼 별 설명
Proto: 이 소켓에서 사용되는 프로토콜(예: TCP 또는 UDP)입니다.
Recv-Q: 수신 큐입니다. 이는 수신되어 버퍼링되어 이 연결을 사용하는 로컬 프로세스가 이를 읽고 소비할 때까지 기다리는 수신 바이트입니다.
Send-Q: 보내기 큐입니다. 이는 전송 대기열에서 전송될 준비가 된 바이트를 표시합니다.
Local Address: 연결의 로컬 끝 주소 세부정보입니다. 기본값은 netstat주소에 대한 로컬 호스트 이름과 포트에 대한 서비스 이름을 표시하는 것입니다.
Foreign Address: 연결의 remote end 부분의 주소 및 포트 번호입니다.
State: 로컬 소켓의 상태입니다. UDP 소켓의 경우 일반적으로 비어 있습니다. 아래의 상태 테이블을 참조하세요.
# tcp state 값
LISTEN : accepting connections
ESTABLISHED : connection up and passing data
SYN_SENT : TCP 세션이 요청되었습니다. 원격 엔드포인트에서 응답을 기다리는 중입니다.
SYN_RECV : 원격 엔드포인트에서 수신 중인 소켓에 대한 TCP 세션을 요청했습니다.
LAST_ACK : TCP 소켓이 닫혔습니다. 원격 엔드포인트도 종료되었습니다. 최종 승인을 기다리는 중입니다.
CLOSE_WAIT : TCP 원격 엔드포인트가 종료되었습니다. 커널이 애플리케이션이 소켓을 닫을 때까지 대기 중입니다.
TIME_WAIT : TCP 소켓이 네트워크에 남아 있는 패킷을 닫은 후 대기 중입니다.
CLOSED : 소켓이 사용 중이 아닙니다.
CLOSING : TCP 우리 소켓이 종료됨, 원격 엔드포인트가 종료됨, 모든 데이터가 전송되지 않음
FIN_WAIT1 : TCP 소켓이 닫혔습니다. 연결을 끊는 중입니다.
FIN_WAIT2 : TCP 연결이 닫혔습니다. 소켓이 원격 엔드포인트가 종료되기를 기다리고 있습니다.
Active UNIX domain sockets (servers and established) 의 경우 아래와 같다.
- Proto: 이 소켓에서 사용되는 프로토콜입니다. "unix"가 될 것입니다.
- RefCnt: 참조 횟수. 이 소켓에 연결된 프로세스의 수입니다.
- Flags: 일반적으로 SO_ACCEPTION을 나타내는 ACC로 설정되며, 이는 소켓이 연결 요청을 대기 중임을 의미합니다. SO_WAITDATA는 W로 표시되며, 읽기를 기다리는 데이터가 있음을 의미합니다. SO_NOSPACE가 N으로 표시되면 소켓에 데이터를 쓸 공간이 없음을 의미합니다(즉, 전송 버퍼가 꽉 찼음).
- Type: 소켓 유형입니다. Type은 보통 “DGRAM(Datagram)”과 “STREAM”으로 표시된다.
- State : 소켓의 상태입니다.
- I-Node: 이 소켓과 연결된 파일 시스템 inode입니다.
- Path : 소켓에 대한 파일 시스템 경로입니다.
# 도메인 소켓 Type
DGRAM: 소켓이 고정 길이의 메시지를 사용하여 데이터그램 모드로 사용 중입니다. 데이터그램은 신뢰성, 순서, 중복되지 않음을 보장하지 않습니다.
STREAM: 이 소켓은 스트림 소켓입니다. 이것은 일반적인 "일반" 소켓 연결 유형입니다. 이 소켓은 패킷을 안정적으로 순차적으로(순서대로) 전달하도록 설계되었습니다.
RAW: 이 소켓은 원시 소켓으로 사용됩니다. 원시 소켓은 OSI 모델의 네트워크 수준에서 작동하며 전송 수준에서 TCP 및 UDP 헤더를 참조하지 않습니다.
RDM: 이 소켓은 안정적으로 전달되는 메시지 연결의 한쪽 끝에 위치합니다.
SEQPACKET: 이 소켓은 순차적 패킷 소켓으로 작동하며, 안정적이고 순차적이며 중복되지 않은 패킷 전송을 제공하는 또 다른 수단입니다.
PACKET: 원시 인터페이스 액세스 소켓입니다. 패킷 소켓은 OSI 모델의 장치 드라이버(즉, 데이터 링크 계층) 수준에서 원시 패킷을 수신하거나 전송하는 데 사용됩니다.
# 도메인 소켓 state 값
FREE: 소켓이 할당되지 않은 유휴 상태입니다.
LISTENING: 소켓이 연결 요청을 기다리고 있는 상태입니다.
CONNECTING: 이 소켓은 연결 중입니다.
CONNECTED: 연결이 설정되었으며 소켓이 데이터를 송수신할 수 있습니다.
DISCONNECTING: 소켓 연결이 해제되는 과정 중입니다.
netstat 명령어는 주로 내 컴퓨터 환경에서 어떤 포트가 열려 있으며, 어떤 프로세스가 어떤 포트를 사용하고 있는지 확인하기 위한 용도로 사용된다.
[참조] :
- https://www.howtogeek.com/513003/how-to-use-netstat-on-linux/
- https://cafe24.zendesk.com/hc/ko/articles/9801441063449-LINUX-netstat-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%83%81%EC%84%B8-%EC%84%A4%EB%AA%85
- https://blog.skills.kro.kr/9
curl
curl [options...] <url>
curl은 Client Url 이란 의미로 클라이언트에서 url을 사용해서 터미널을 통해 장치와 서버 간의 데이터 교환을 가능하게 하는 명령줄 도구.
Linux, MacOS, Window 등 다양한 환경에서 HTTP, HTTPS, SMTP, TELNET, FTP, LDAP 등 다양한 프로토콜을 지원하여 통신 환경에서 자주 쓰인다.
# 주요 옵션
-k : --insecure https URL 접속 시 SSL 인증서 검사 없이 연결
-i : --head HTTP 응답 헤더를 표시
-d : --data POST 요청이나 JSON 방식과 같이 request body에 데이터를 담을 때 사용
-o : --output -o [파일명] 을 사용하면 출력 결과를 파일로 저장
-O : --remote-name 파일 저장 시 remote의 file 이름으로 저장
-s : --silent 진행 내역이나 메시지 등을 출력하지 않는다.
-X : --request Request에 사용할 메서드(GET, POST, PUT 등)를 지정
-v : --verbose 동작하는 과정을 출력
-A : --user-agent 특정 브라우저인 것처럼 동작하기위한 설정
-H : --header 요청할 헤더 설정
-L : --location 서버에서 HTTP (301,302 -리다이렉트) 응답이 오면 리다이렉트 URL로 따라감 (--max-redirs 횟수)로 지정 가능
-D : --dump-header<file> 파일에 응답 헤더를 기록
-u : --user 사용자 아이디 / 비밀번호 입력
-f : --fail 오류 발생 시 출력 없이 실패
-T : --upload-file 로컬 파일을 서버로 전송
-C : --continue-at 중지된 다운로드를 재시작
-J : --remote-header-name 응답 헤더에 있는 파일 이름으로 파일 저장 (curl 7.20 이상)
-I : --head 응답 헤더만 출력
--limit-rate : 데이터 전송 속도를 제한
# 주로 사용하는 명령어
curl -X GET www.example.com : GET 요청으로 해당 웹 사이트에 요청을 보낸다.
curl -o output.html www.dataden.tech : o 옵션을 이용해서 해당 url을 이용해 output.html 파일로 저장한다.
curl -# -LJO https://github.com/argoproj/argo-cd/releases/download/v2.0.1/argocd-util-linux-amd64 : # 옵션은 #으로 다운로드 진행률을 표기하는, L 옵션은 리다이렉트 시 요청을 따라가는, J 옵션은 헤더에 있는 파일명으로 다운로드
curl -u [사용자]:[비밀번호] -x [프록시_이름]:[포트] [URL...] : 사용자 및 프록시를 사용할 경우 u 또는 x 옵션을 이용해준다.
curl -v -L -X POST -H 'Accept: application/json' -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9' 'http://localhost:8080' : 특정 토큰을 사용해 POST 요청을 할 경우 H 옵션을 이용해서 헤더에 토큰 정보를 삽입 후 요청 전송
curl -X POST -d '{"name": "cURL", "type": "article"}' -H "Content-Type: application/json" https://jsonplaceholder.typicode.com/posts : d 옵션을 이용해서 원하는 json 데이터를 POST 할수도 있음
curl -d "@data.txt" -X POST http://localhost:3000/data : 특정 파일을 기반으로 json 데이터를 보낼수도 있다.
curl 의 경우 보통 API에 테스트 목적으로 통신을 하거나, 특정 파일을 다운로드 하거나, A 서버에서 B 서버로 curl 통신을 보내 서버 간 통신이 잘 되는지 체크하는 목적으로 사용하기도 한다.
[참조] :
dig
dig [@server domain] [query-type] [query-class]
dig는 네트워크 문제 해결 및 교육 목적으로 유용합니다.
명령줄 옵션 및 플래그 인수를 기반으로 작동하거나 운영 체제 파일에서 요청을 읽어 일괄 처리 모드로 작동할 수 있습니다.
명령 호출에 특정 네임 서버가 지정되지 않은 경우, 일반적으로 resolv.conf 파일에 구성된 운영 체제의 기본 확인자를 사용합니다. 인수가 없으면 DNS 루트 영역을 쿼리합니다.
# 주요 옵션
-b : source IP를 다른 IP로 설정
-f : batch 모두 동작시 파일이름을 지정
-m : debugging
-p : 53 이외의 포트번호를 지정
-4 or -6 : IPv4 또는 IPv6 강제 지정
-t : Type를 지정
-c : Class 지정
-x : reverse lookup
+tcp : TCP 프로토콜 사용
+trace : delegation path 추적
+short : Answer Section 결과만 표시
+comments : Comments Section 표시
+question : Question Section 표시
+answer : AnsWer Section 표시
+authority : Authority Section 표시
+additional : Additional Section 표시
+stats : Statistics Section 표시
+all : Comments부터 Statistics Section 모두 표시
+multiline : 긴 record를 여러 줄로 보기 좋게 표시
# 주로 사용하는 명령어
dig 8.8.8.8 google.com : dig 명령어를 특정 Name Server를 이용해서 조회하기
dig @8.8.8.8 google.com : 특정 네임서버 기반으로 도메인 조회하기
dig google.com +trace : 조회 과정을 출력하기
dig google.com +short : 조회 결과만 출력하기
dig mx google.com : 도메인에 쿼리 타입 지정. mx 의 경우 메일 서버 정보 질의
dig any google.com : any로 지정하면 다양한 타입 확인 가능
dig -f domain_list.txt : 파일에 있는 모든 도메인을 한번에 질의할 수 있다.
- query type
- a : 도메인의 아이피 정보 ( network address )
- any : 지정된 도메인의 모두/임의의 정보
- mx : mail exchanger 정보
- ns : name server 정보
- soa : Zone 파일 상단의 authority 레코드
- hinfo : host 정보
- axft : zone transfer ( authority를 갖는 특정 네임서버에 질의 )
- txt : 임의의 수의 캐릭터 라인 (arbitrary number of strings)
- zone transfer : 해당 도메인의 zone에 대한 복사본을 얻기 위해 primary 로부터 zone 데이타베이스를 끌어오는 작업
- qyery class
- 기본적으로 IN 이고, 생략하면 IN이다.
- in : 인터넷 클래스 도메인 (internet class domain)
- any : 모든 클래스 정보 (all/any class information)
- zone transfer : 해당 도메인의 zone 에 대한 복사본을 얻기 위해 primary 로부터 zone 데이타베이스를 끌어오는 작업
- QUESTION SECTION
- 말 그대로 질의에 대한 섹션이다. 전송된 쿼리 데이터가 표시된다.
- ANSWER SECTION
- 말 그대로 질의에 대한 답변이다. 여러가지 열로 구성되어 있다.
- 첫 번째 열은 쿼리된 서버의 이름을 표시한다.
- 두 번째 열은 기록이 새로 고쳐지는 설정된 기간이다. TTL(Time To Live)이다.
- 세 번째 열은 쿼리 클래스를 보여준다. IN의 경우 INTERNET을 나타낸다.
- 네 번째 열은 쿼리 유형을 표시해준다. A의 경우 IPv4, AAAA의 경우 IPv6이다.
- 다섯 번째 열은 도메인 이름과 연결된 IP 주소를 나타낸다.
주로 도메인 설정 후 잘 설정 되었는지 확인하거나, 해당 도메인에 대한 IP를 확인하는 데 사용한다.
[참조] :
https://aury524.tistory.com/20
https://www.geeksforgeeks.org/dig-command-in-linux-with-examples/
nslookup
nslookup [options] [domain-name]
Nslookup (“Name Server Lookup”을 나타냄)은 DNS 서버에서 정보를 얻는 데 유용한 명령입니다. 이는 도메인 이름 시스템(DNS)에 쿼리하여 도메인 이름이나 IP 주소 매핑 또는 기타 특정 DNS 레코드를 얻기 위한 네트워크 관리 도구입니다. 또한 DNS 관련 문제를 해결하는 데에도 사용됩니다.
# 주요 옵션
-domain=[domain-name] : 기본 DNS 이름을 변경할 수 있습니다.
-debug : 디버깅 정보를 표시할 수 있습니다.
-port=[port-number] : -port 옵션을 사용하여 쿼리용 포트 번호를 지정합니다. 기본적으로 nslookup은 DNS 쿼리에 포트 53을 사용합니다.
-timeout=[seconds] : DNS 서버가 응답하는 데 허용되는 시간을 지정할 수 있습니다. 기본적으로 timeout은 몇 초로 설정됩니다.
-type=a : 레코드 조회-type=a옵션을 사용하여 특정 레코드에 대해 사용 가능한 모든 DNS 레코드를 볼 수도 있습니다.
-type=any : 모든 레코드 조회-type=any 옵션을 사용하여 사용 가능한 모든 DNS 레코드를 볼 수도 있습니다.
-type=hinfo : 호스트에 대한 하드웨어 관련 정보를 표시합니다. 운영 체제 및 하드웨어 플랫폼에 대한 세부 정보를 제공합니다.
-type=mx : mx 레코드 조회. MX(Mail Exchange)는 도메인 이름을 해당 도메인의 메일 교환 서버 목록에 매핑합니다. MX 레코드에는 'google.com'으로 전송된 모든 메일이 해당 도메인의 메일 서버로 라우팅되어야 한다고 나와 있습니다.
-type=ns : ns 레코드 조회. NS(네임 서버) 레코드는 도메인 이름을 해당 도메인에 대해 권한이 있는 DNS 서버 목록에 매핑합니다. 주어진 도메인과 연관된 네임서버를 출력합니다.
-type=ptr : 역방향 DNS 조회에 사용. IP 주소를 도메인 이름에 매핑하는 포인터(PTR) 레코드를 검색합니다.
-type=soa : SOA 레코드 조회. SOA 레코드(권한 시작)는 도메인에 대한 신뢰할 수 있는 정보, 도메인 관리자의 이메일 주소, 도메인 일련 번호 등을 제공합니다.
# 주로 사용하는 명령어
nslookup -q=txt gmail.com : 특정 레코드 값을 기준으로 질의할 수 있다.
nslookup -debug [domain-name] : 디버그 모드를 활성화하여 자세한 정보를 표시한다.
nslookup 209.132.183.181 : 역방향으로 조회한다. IP를 기준으로 도메인을 질의하는 것이다. -q=ptr 과 동일하다.
nslookup redhat.com 8.8.8.8 : 특정 네임 서버를 기준으로 도메인에 질의한다. nslookup [domain-name] [name-server]와 같은 형태로 사용하면 된다.
- SOA 레코드의 경우 해당 도메인 또는 영역에 대한 중요한 정보를 저장한다. 예를들어 관리자의 이메일 주소, 도메인이 마지막으로 업데이트된 시간, 새로고침 사이 서버가 대기해야하는 시간 등등
- origin : 해당 존 또는 도메인을 관리하는 네임 서버
- mail addr : 네임 서버를 관리하는 관리자
- serial : 언제 업데이트 했는지를 나타냄
- refresh : 도메인 존을 갱신하는 주기 시간 (초 단위)
- retry : 도메인 존 갱신여부 확인에 실패한 경우, 재시도 주기 시간 (초 단위)
- expire : 도메인 존 갱신이 실패하여 도메인에 대한 DNS 질의 응답을 중단해야 하는 기간
- minimum : 존에 없는 도메인/레코드 응답 경우, 이 도메인/레코드(부재 도메인/레코드) 부재정보의 캐싱에 적용하는 TTL 값
dig 와 동일하게 도메인에 대한 질의를 하며 dig보다 출력이 간단하게 나오는 것 같다. 이것도 주로 도메인에 대한 IP를 확인하는 데 사용한다.
[참조] :
https://phoenixnap.com/kb/nslookup-command
ip
ip [ OPTIONS ] OBJECT { COMMAND | help }
네트워크 구성 및 관리를 위한 강력한 유틸리티입니다. 이를 통해 사용자는 네트워크 인터페이스, 라우팅 테이블, 주소 등과 같은 다양한 네트워킹 구성 요소와 상호 작용할 수 있습니다.
# 주요 옵션
-a : 명령이 옵션을 지원하는 경우 모든 오브젝트를 처리합니다.
-d : 출력에 추가 세부정보를 추가합니다.
-f : 프로토콜 계열을 지정합니다. 일부 일반 제품군에는 고유한 단축키가 있습니다. -4는 IPv4의 약어이며 -6는 IPv6를 나타내며 M은 MPLS를 나타냅니다.
-j : 출력을 JSON 형식으로 표시합니다.
-p : 더 읽기 쉬운 형식으로 출력을 표시합니다.
-s : 전송 및 수신된 패킷을 포함한 추가 통계를 표시합니다. 이 -s -s옵션은 더 많은 정보를 표시합니다.
-t : 출력에 타임스탬프를 포함합니다.
# 주로 사용하는 명령어
ip addr show : ip 주소와 ip 주소에 대한 특징 출력
ip addr show eth0 : 특정 네트워크 인터페이스를 출력함
ip addr add 123.123.5.10/24 dev eth0 : 지정된 ip 주소를 지정된 인터페이스에 추가하는 명령어
ip addr del 123.123.5.10/24 dev eth0 : 지정된 ip 주소를 제거하는 명령어
ip link show : 모든 네트워크 인터페이스를 출력함
ip link set eth0 up : 특정 인터페이스 활성화
ip link set eth0 down : 특정 인터페이스 비활성화
ip route show : 라우팅 테이블 확인
ip maddr : 구성된 멀티캐스트 주소 출력
- OBJECT 에는 address, addrlabel, fou, help, ila, ioam, l2tp, link, macsec, maddress, monitor, mptcp, mroute, mrule, neighbor, neighbour, netconf, netns, nexthop, ntable, ntbl, route, rule, sr, tap, tcpmetrics, token, tunnel, tuntap, vrf, xfrm 등 다양한 항목이 들어갈 수 있다.
- link (l) : link는 네트워크 장치를 나타낸다. 루프백 링크를 제외한 대부분의 링크는 서버를 더 넓은 컴퓨터 네트워크에 연결한다. 링크는 논리적/추상적이거나 물리적일 수 있다.
- route (r) : 라우팅 테이블의 항목을 나타낸다. 주소를 기반으로 보내는 패킷을 보내는 방법과 위치를 결정하는 데 사용된다.
- address (a) : link와 연결된 IPv4 또는 IPv6 주소이다.
- maddress (m) : link에 구성된 멀티캐스트 주소이다.
- neighbour (n) : 이웃 인터페이스에 대한 정보를 나타낸다. 여기에는 캐시된 ARP 또는 IPv6 이웃 검색 (NDISC) 정보가 포함된다.
- rule (ru) : 패킷 라우팅을 위한 정책 규칙이다. 라우팅 데이터베이스에서 경로의 우선 순위를 제어한다.
[참조] :
https://m.blog.naver.com/jooeun0502/221949714425
https://www.javatpoint.com/linux-ip
ping
ping [options] <destination>
Ping은 네트워크 연결이 가능한 거의 모든 운영 체제에서 사용할 수 있는 명령줄 유틸리티로, 네트워크로 연결된 장치에 연결할 수 있는지 확인하는 테스트 역할을 합니다 . ICMP 기반의 통신
# 주요 옵션
-a : 피어에 도달할 수 있을 때 소리를 생성합니다.
-c [count] : 대상으로 전송되는 ping 요청 수를 제한합니다.
-i [interval] : ping 요청 전송 사이에 대기하는 시간(초)을 설정합니다.
-I [interface_address] : 소스 IP 주소를 지정된 인터페이스 IP 주소 로 설정합니다 . IPv6 링크-로컬 주소를 ping할 때 이 옵션이 필요합니다. IP 주소나 장치 이름을 사용할 수 있습니다.
-n : 숫자 출력(호스트 이름 대신 IP 주소)만 표시합니다.
-q : 소스 IP 주소를 지정된 인터페이스 IP 주소로 설정합니다. IPv6 링크-로컬 주소를 ping할 때 이 옵션이 필요합니다. IP 주소나 장치 이름을 사용할 수 있습니다.
-s [packet_size] : 각 핑 요청 에 포함된 데이터의 크기( 바이트 )를 지정합니다 .
-t [ttl] : ttlping 요청이 삭제되기 전에 통과할 수 있는 최대 홉 수(= TTL(Time to Live))를 설정합니다 .
-v : 각 핑 요청 및 응답에 대한 더 자세한 출력을 제공합니다.
-w [deadline] : 전체 ping 작업이 실행되는 최대 시간(초)을 설정합니다.
-W [timeout] : 응답을 기다리는 시간(초)을 결정합니다.
# 주로 사용하는 명령어
ping 8.8.8.8
ping google.com
ping -c 5 google.com : ping 횟수를 5번으로 제한
ping -a google.com : ping이 완료되면 소리가 난다.
ping -i 0.5 google.com : ping 인터벌 시간을 기본 1초에서 더 세밀하게 조정하고 싶은 경우. 소수점 자리로 지정해주면 된다.
ping -4 google.com : IPv4 기반으로 통신
ping -6 google.com : IPv6 기반으로 통신
ping -s 1000 google.com : 패킷 사이즈를 지정해서 ping 요청을 송신
ping -D google.com : ping 요청에 대한 Timestamp를 출력
[참조] :
https://www.hostinger.com/tutorials/linux-ping-command-with-examples
https://phoenixnap.com/kb/linux-ping-command-examples
route
route [-nNvee] [-FC] [<AF>]
route는 컴퓨팅에서 유닉스 계열과 마이크로소프트 윈도우의 IP 라우팅 테이블을 보고 조작하기 위해 사용되는 명령어이다. IBM OS/2, ReactOS도 지원한다. 라우팅 테이블을 수동으로 조작하는 일은 정적 라우팅의 한 특징이다.
# 주요 옵션
-f : 네트워크 인터페이스와 연결되지 않은 라우팅 테이블의 모든 항목을 제거합니다.
-i : 워크로드 파티션(WPAR)에 대한 워크로드 파티션별 라우팅을 활성화합니다. 기본적으로 WPAR에서 나가는 네트워크 트래픽은 글로벌 환경에서 전송되는 것처럼 라우팅됩니다. 동일한 글로벌 시스템에서 호스팅되는 주소 간의 트래픽은 루프백 인터페이스를 통해 전송됩니다. 기본 경로를 포함하여 글로벌 시스템에 구성된 라우팅 테이블 항목은 작업 부하 파티션 트래픽을 전송하는 데 사용됩니다.
-i : 플래그를 지정하여 WPAR 특정 라우팅을 활성화하면 WPAR은 나가는 트래픽에 대한 자체 라우팅 테이블을 만들고 사용합니다. 브로드캐스트, 루프백 및 서브넷 경로를 수용하기 위해 WPAR의 각 네트워크 주소에 대해 라우팅 항목이 자동으로 생성됩니다.
-n : 플러시 결과나 상세 모드의 작업 결과를 보고할 때 호스트 및 네트워크 이름을 기호가 아닌 숫자로 표시합니다.
-q : 자동 모드를 지정하고 모든 출력을 억제합니다.
-C : 경로를 추가하고 제거하기 위해 라우팅 메시지보다 ioctl 호출 에 대한 기본 설정을 지정합니다 .
-v : 상세 모드를 지정하고 추가 세부 정보를 인쇄합니다.
-net : Destination 매개변수가 네트워크로 해석되어야 함 을 나타냅니다 .
-netmask : 대상 주소에 대한 네트워크 마스크를 지정합니다. 이 옵션이 대상 매개변수 뒤에 오는지 확인하십시오 .
-host : Destination 매개변수가 호스트로 해석되어야 함 을 나타냅니다 .
-prefixlen : n 대상 접두사의 길이(넷마스크의 비트 수)를 지정합니다.
-@WparName : WPAR, 즉 @ WparName 플래그와 연관된 네트워크 통계를 표시합니다 . @WparName 플래그 를 지정하지 않으면 모든 WPAR에 대한 네트워크 통계가 표시됩니다.
# 주로 사용하는 명령어
route -n : 라우팅 테이블 확인
route -Cn : 커널 라우팅 캐시 정보 출력
route add -net 192.168.23.0 netmask 255.255.255.0 gw 192.168.219.1 : 특정 네트워크로 향하는 라우팅을 추가한다.
route add -host 192.168.23.10 gw 192.168.219.1 dev enp0s8 : 특정 호스트로 향하는 라우팅을 추가한다.
route -f : flush를 의미하며 모든 게이트웨이에 있는 라우팅 항목을 지울수 있다.
route add 192.158.2.2 192.158.2.5 -weight 5 -policy 4 : 다중 경로 라우팅을 추가 ,weight의 경우 다중 경로 라우팅 기능으로 가중치 정책에 사용할 경로의 가중치를 지정한다.
route set 192.158.2.2 192.158.2.5 -weight 3 -policy 1 : 기존 다중경로 route의 속성을 변경
# Policy 넘버 별 뜻
# 1. Weighted Round-Robin
# 2. Random
# 3. Weighted Random
# 4. Lowest Utilization
# 5. Hash-based
route를 추가하거나 제거해야할 일은 거의 없고 보통 확인하는 용도로만 사용을 했다. EC2 기반으로 서버를 올리다보면 이것도 사실 크게 사용하지는 않았던 것 같다.
Docker를 설치하거나 서버 내부에서 작업하게 되면 조금은 신경써서 봐야할듯 함
[참조] :
https://www.ibm.com/docs/en/aix/7.2?topic=r-route-command
https://sh-safer.tistory.com/155
https://www.geeksforgeeks.org/route-command-in-linux-with-examples/
telnet
telnet [Host] [Port]
텔넷 ("teletype network"의 약어) 은 근거리 통신망 이나 인터넷 에 있는 원격 시스템 의 가상 터미널 에 대한 액세스를 제공하는 클라이언트/서버 애플리케이션 프로토콜 입니다 . 양방향 8비트 통신을 위한 프로토콜입니다. 주요 목표는 터미널 장치와 터미널 지향 프로세스를 연결하는 것이었습니다.
# 주요 옵션
-l : 자동 로그인할 사용자를 지정합니다.
-b : 나가는 연결에 사용할 로컬 인터페이스를 지정합니다.
-f : 디버깅 출력을 위한 파일을 지정합니다.
-n : 네트워크 데이터 기록을 위한 파일을 지정합니다.
-r : Kerberos에 대한 사용자 매핑을 사용하도록 지정합니다.
-x : 세션에 대한 암호화를 요청합니다.
-K : 원격 시스템에 자동으로 로그인하지 않도록 지정합니다.
-a : 자동 로그인을 시도합니다.
-e : 이스케이프 문자를 설정합니다.
-k : Kerberos에 대한 영역을 지정합니다.
-X : 지정된 유형의 인증을 사용하지 않도록 지정합니다.
# 주로 사용하는 명령어
telnet 192.168.10.32 3306 : 3306 포트를 이용해서 192.168.10.32 IP에 통신 시도
위와 같은 상황에서 유의해야할 점은 9013 포트를 허용시켜준 뒤 telnet 명령어를 입력하고 9013 포트로 접근하게 되면 아무런 반응이 없게 되는데 이와 같은 상태가 정상적으로 연결이 된 상태라는 것이다.
만약 비정상적인 통신인 경우에는 연결하지 못했다고 출력되니 telnet 확인에 유의해야한다.
물론 윈도우 환경의 cmd에서 입력 시 이렇고 리눅스에선 다를 것이다.
주로 ping으로 먼저 통신을 보내 해당 서버와의 통신이 잘 되는지, 서버가 정상적으로 실행 중인지 체크한 후 특정 포트를 확인해야 하는 경우 telnet으로 통신해 특정 포트의 Open을 확인해준다.
[참조] :
https://ioflood.com/blog/telnet-linux-command/
lsof
lsof 는 "열린 파일 목록, list open files"을 의미하는 명령으로, 많은 Unix 계열 시스템에서 열려 있는 모든 파일과 이를 연 프로세스 목록을 보고하는 데 사용됩니다.
# 주요 옵션
-u : 특정 사용자가 연 파일을 나열합니다.
-c : 특정 명령으로 열린 파일을 나열합니다.
-p : 특정 프로세스 ID로 열린 파일을 나열합니다.
-i : 모든 네트워크 연결을 나열합니다.
-d : 특정 파일 설명자로 열린 파일을 나열합니다.
-a : 여러 조건을 결합합니다.
-r : 몇 초마다 'lsof' 명령을 반복합니다.
-t : 프로세스 ID(PID)만 출력합니다.
-n : DNS 확인을 방지합니다(더 빠른 결과).
-P : 서비스 이름 확인을 방지합니다(더 빠른 결과).
# 주로 사용하는 명령어
lsof -u John : John 사용자가 오픈한 파일 출력
lsof -u ^John : John 사용자를 제외한 나머지의 사용자가 오픈한 파일 출력, lsof에서 ^는 포함하지 않겠다는 것을 의미함
lsof -c sshd : 특정 명령어가 사용하는 파일 출력
lsof -p PID : 특정 프로세스가 사용하는 파일 출력
lsof -i 4 : ipv4 로 오픈한 파일 출력
lsof -i 6 : ipv6 로 오픈한 파일 출력
lsof -i TCP : TCP로 오픈한 파일 출력
lsof -i TCP:22 : TCP 22 포트로 오픈한 파일 출력
lsof -i TCP:22-1024 : TCP 22에서 1024 범위의 포트로 오픈한 파일 출력
lsof -d fd : File Discriptor를 기준으로 출력한다.
lsof -r 5 : 주기적으로 파일을 출력한다. refresh를 의미하는 것 같음. Default 값은 15초이다.
lsof -t /path/to/file : 특정 파일이 어떤 PID로 인해 오픈 되었는지 확인
lsof -n : 호스트네임 대신 IP 기반으로 출력한다.
lsof -P : 포트를 출력할 때 숫자로 출력
lsof -R /path/to/file : 부모 프로세스가 오픈한 파일 출력
lsof +D /path : 특정 디렉토리의 열린 파일 출력
kill -9 `lsof -t /Users/user/temp/temp_file` : 이런식으로 응용해서 PID 기반의 kill 명령어를 수행할 수도 있다.
생각보다 많이 사용해본적은 없는 명령어이다. 프로세스가 어떤 파일을 사용하고 있는지 확인하는 용도로 알고있다.
[참조] :
https://bigsun84.tistory.com/295
traceroute
traceroute [도메인명 혹은 IP주소]
컴퓨터에서 traceroute와 tracert는 인터넷 프로토콜(IP) 네트워크에서 가능한 경로를 표시하고 패킷의 전송 지연을 측정하기 위한 컴퓨터 네트워크 진단 명령어입니다. 경로의 기록은 경로의 각 연속 호스트(원격 노드)로부터 수신한 패킷의 왕복 시간으로 기록됩니다.
# 주요 옵션
-4 : IPv4 사용
-6 : IPv6 사용
-F : 패킷이 조각화되지 않도록 보장한다. traceroute 중에 패킷이 조각화 되어 발생하는 문제를 해결할 때 유용하다.
-f first_ttl : 기본 시작점이 아니라 지정된 ttl 홉에서부터 경로 추적을 시작하려는 경우에 사용한다.
-g 192.168.43.45 google.com : 게이트를 통해 패킷 라우팅. -g 옵션 뒤에 게이트웨이의 IP 주소를 입력해주면 해당 IP를 이용해 패킷을 라우팅한다.
-m max_ttl : 최대 홉 수 설정. Default 홉 수는 30이다.
-n IP : 주소를 도메인 이름으로 확인하지 않도록 설정.
-p port : 대상 포트 설정. Default는 33434
-q nqueries : 각 홉당 프로브 수 설정. Default는 홉 당 세 개의 프로브가 전송됨
packetlen : 전체 패킷 길이 설정. Default는 60 바이트
# 주로 사용하는 명령어
traceroute -4 google.com
traceroute -6 google.com
traceroute -F google.com
traceroute -f 10 google.com
traceroute -g 192.168.43.45 google.com
traceroute -m 5 google.com
traceroute -n google.com
traceroute -p 20292 google.com
traceroute -q 1 google.com
traceroute google.com 100 : 패킷의 길이 조절. 기본 60 바이트
위와 같이 홉을 거쳐서 원하는 대상까지의 경로를 보여주게 된다.
[참조] :
https://www.geeksforgeeks.org/traceroute-command-in-linux-with-examples/
'서버 관리 > 운영체제' 카테고리의 다른 글
[Linux] 출력결과 변형 명령어 정리 (0) | 2024.06.26 |
---|---|
[Linux] 표준 입력, 표준 출력, 표준 에러란? (0) | 2023.09.20 |