Linux system monitoring
uname | 시스템 및 커널 정보
- "uname"은 "Uninx Name"의 약어이다.
- uname은 시스템의 정보를 표시하는데 사용되는 명령어로, 시스템의 이름 및 버전 정보를 출력한다.
- uname 명령어의 기본 사용법은 아래와 같다.
# uname [OPTION]
[yang@yang ~]$ uname
Linux
# 시스템의 모든 정보를 출력 | --all
$ uname -a
Linux yang 4.18.0-373.el8.x86_64 #1 SMP Tue Mar 22 15:11:47 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
# 위 옵션(-a) 사용시 아래에 나열된 정보를 모두 포함하여 출력한다.
# 커널 이름 출력 | --kernal-name
$ umane -s
Linux
# 네트워크 노드 이름 출력(호스트 명) | --nodename
$ uname -n
yang
# 커널 릴리스 버전 출력 | --kernel-release
$ uname -r
4.18.0-373.el8.x86_64
# 커널 버전을 출력 | --kernel-version
$ uname -v
#1 SMP Tue Mar 22 15:11:47 UTC 2022
# 시스템 아키텍처를 출력 | --machine
$ uname -m
x86_64
# 프로세서(센트럴 프로세싱 유닛) 타입 출력 | --processor
$ uname -p
x86_64
# 하드웨어 플랫폼 정보 출력 | --hardware-platform
$ uname -i
x86_64
# 운영 체제 이름을 출력 | --operating-system
$ uname -o
GNU/Linux
# 위 명령어 외 도움말 혹은 버전 정보는 아래와 같다.
# 도움말을 표시하고 사용 가능한 옵션 목록 출력
$ uname --help
-a, --all print all information, in the following order,
except omit -p and -i if unknown:
-s, --kernel-name print the kernel name
-n, --nodename print the network node hostname
-r, --kernel-release print the kernel release
-v, --kernel-version print the kernel version
-m, --machine print the machine hardware name
-p, --processor print the processor type (non-portable)
-i, --hardware-platform print the hardware platform (non-portable)
-o, --operating-system print the operating system
--help display this help and exit
--version output version information and exit
# 버전 정보를 출력
$ uname --version
- 위 명령어는 터미널에서 사용되며, 시스템 정보를 검색하거나 스크립트에서 특정 시스템 속성을 확인하는데 유용하다.
ifconfig | 네트워크 기본 모니터링
- "ifconfig"는 "Interface Configuration"의 약어이다.
- 네트워크 인터페이스를 설정하고 구성하기 위한 명령어로, 네트워크 인터페이스를 관리하는데 사용된다.
- ifconfig 명령어를 사용했을 경우 나오는 의미는 아래와 같다.
[eth0] - 랜카드라고 불리는 유선 네트워크 인터페이스이다. 랜 카드가 2개가 있는 경우 eth0, eth1 등으로 나타난다.
[lo] - 루프 백 인터페이스로 자기 자신과 통신하는데 사용하는 가상 장치이다. IP가 127.0.0.1(localhost 주소)이며, IP주소는 서버에 하나씩 부여되는 것이 아니라 네트워크 인터페이스에 할당되기 때문에, 각 네트워크 인터페이스 마다 다른 IP주소를 가지고 있다.
[HWaddr] - 네트워크 인터페이스의 하드웨어 주소(MAC Address)를 나타낸다
[inetaddr] - 네트워크 인터페이스에서 할당한 IP 주소
[Bcast] - 브로드캐스트 주소
[Mask] - 넷마스크 주소
[MTU] - 네트워크 최대 전송 단위(Maxium Transfer Unit)
[RX packets] - 받은 패킷 정보
[TX packets] - 보낸 패킷 정보
[collision] - 충돌된 패킷 수
[Interrupt] - 네트워크 인터페이스가 사용하는 인터럽트 번호
- ifconfig 명령어의 기본 사용법은 아래와 같다.
$ ifconfig [인터페이스] [옵션]
# 네트워크 인터페이스의 이름을 지정한다.
# 이 옵션을 사용하지 않으면, 모든 인터페이스의 정보가 출력된다.
$ ifconfig eth0
# 네트워크 인터페이스를 활성화(up) 및 비활성화(down)한다. 아래 명령어로 eth0 인터페이스를 활성화 할 수 있다.
$ ifconfig eth0 up
# inet은 인터페이스의 IPv4 주소를 설정하거나 표시한다. 아래 명령어로 eth0 인터페이스의 IPv4 주소를 설정할 수 있다.
# IPv4 주소 설정
$ sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
# IPv4 주소 제거
$ sudo ifconfig eth0 down
# 주의 사항 | IPv4 주소는 네트워크 환경에 따라 고유해야 하며, 중복되어서는 안된다. IPv4 주소를 설정할 때 네트워크 서브넷과 함께 설정해야 한다. IPv4 주소를 변경할 때, 네트워크 관리자 또는 시스템 관리자의 승인이 필요할 수 있다.
# inet6은 인터페이스의 IPv6 주소를 설정하거나 표시한다.
# IPv6 주소 설정
$ sudo ifconfig eth0 inet6 add 2001:0db8:0:1::1/64
# IPv6 주소 제거
$ sudo ifconfig eth0 inet6 del 2001:0db8:0:1::1/64
# 주의 사항 | IPv6 주소를 설정할 때 주의가 필요하다. 네트워크 관리자 또는 시스템 관리자의 승인이 필요할 수 있다. 설정한 IPv6 주소는 시스템이 다시 시작되거나 인터페이스가 다시 활성화될 때 유지되지 않을 수 있으므로 필요에 따라 설정을 영구적으로 저장해야 할 수 있다.
# netmask는 서버넷 마스크를 설정한다.
# 서브넷 마스크 설정
$ sudo ifconfig eth0 netmask 255.255.255.0
# 주의 사항 | 서브넷 마스크는 IP 주소와 함께 사용되어 네트워크 구조를 정의한다. 올바른 서브넷 마스크를 설정해야 하며, 이는 네트워크 환경 및 요구사항에 따라 다를 수 있다. 서브넷 마스크 설정은 일반적으로 고급 네트워크 구성에서 사용되며, 기본적인 네트워크 설정에서는 자동으로 설정될 수 있다.
# broadcast는 브로드캐스트 주소를 설정한다,
# 브로드캐스트 주소 설정
$ sudo ifconfig eth0 broadcast 192.168.1.255
# 주의 사항 | 일반적으로 브로드캐스트 주소는 자동으로 계산되므로 사용자가 수동으로 설정할 필요가 없다. 서브넷 마스크 및 IP 주소를 올바르게 설정하면 시스템이 브로드캐스트 주소를 자동으로 결정한다. 브로드캐스트 주소는 네트워크 패킷을 모든 호스트에게 전달하기 위해 사용되며, 주의해서 변경해야 한다.
# hw는 하드웨어 주소(MAC 주소)를 설정한다.
# 하드웨어 주소 확인
$ sudo ifconfig eth0 hw ether 00:11:22:33:44:55
# 주의 사항 | 하드웨어 주소는 고유하게 식별되어야 하며, 일반적으로 제조사에 의해 할당된다. 하드웨어 주소를 수동으로 변경하면 네트워크 구성에서 문제가 발생할 수 있으므로 주의가 필요하다. 하드웨어 주소를 변경할 때, 네트워크 관리자 또는 시스템 관리자의 승인이 필요할 수 있다.
# MTU는 최대 전송 단위(Maximum Transmission Unit)를 설정한다.
# MTU 값을 1500으로 변경
$ sudo ifconfig eth0 mtu 1500
# 주의 사항 | # MTU 값을 조정할 때 주의해야 한다. 일반적으로 MTU 값은 1500인데, 이 값은 이더넷 네트워크에서 표준 값이다. MTU를 변경하면 네트워크 호환성 문제가 발생할 수 있으므로 변경 시 주의가 필요하며, MTU 값을 조정하는 이유는 네트워크 환경에 따라 데이터 패킷 크기를 최적화하여 성능을 향상시키기 위함이다.
# promisc는 프로미스큐어스 모드(모든 패킷을 수신)를 활성화한다.
# 프로미스큐어스 모드 설정
$ sudo ifconfig eth0 promisc
# 프로미스큐어스 모드 해제
$ sudo ifconfig eth0 -promisc
# 주의 사항 | 프로미스큐어스 모드를 사용하면 모든 패킷을 수신하기 때문에 네트워크 트래픽이 과도하게 많아질 수 있다. 주의해서 사용해야 하며, 프로미스큐어스 모드는 보안 및 개인 정보 보호 관점에서 주의해야 한다. 이 모드를 사용하여 다른 호스트의 네트워크 패킷을 볼 수 있으므로 합법적인 사용 용도에만 사용해야 한다.
- 네트워크 인터페이스를 구성하고 모니터링하거나, 문제 해결 및 네트워크 설정을 수행하는데 유용하다.
- 현재는 ip 명령어가 infconfig를 대체하고 있으며, 더 다양한 기능을 제공한다.
top | 운영체제 작업 내역 모니터링
- top은 시스템 상태 및 리소스 사용량을 실시간으로 모니터링할 수 있으며, 문제 해경 및 성능 최적화에 도움이 된다.
- CPU 및 Memory 사용량, Process 상태 등을 추적하고, 시스템의 동작을 모니터링 할 수 있다.
- 명령어의 기본 사용법은 아래와 같다.
$ top
- top은 일반적으로 화면 상단에는 시스템의 전반적인 정보를 표시하고, 하단에는 실행 중인 프로세스 목록을 표시한다.
- 상단 정보는 아래와 같다.
# 시스템의 현재 상태, 업타임, 로드 평균 등의 정보가 출력된다.
$ top
top - 16:48:20 up 15 days, 6:46, 1 user, load average: 0.09, 0.05, 0.01
Tasks: 242 total, 1 running, 241 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.9 us, 0.9 sy, 0.0 ni, 97.3 id, 0.1 wa, 0.2 hi, 0.2 si, 0.3 st ---------------- 상단 정보
MiB Mem : 7742.5 total, 3965.9 free, 1235.0 used, 2541.6 buff/cache
MiB Swap: 7168.0 total, 7168.0 free, 0.0 used. 6097.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 242516 15352 8992 S 0.7 0.2 18:13.70 systemd
## %Cpu(s)
[us] - 사용자가 사용중인 사용률
[sy] - 시스템이 사용중인 사용률
[ni] - 프로세스 우선 순위를 기반으로 사용되는 사용률(사용자 공간에서 사용된다.)
[id] - 현재 사용하지 않는 여유율
[wa] - 입출력을 기다리는 프로세스 사용률
[hi] - 하드웨어 인터럽트 사용률
[si] - 소프트웨어 인터럽트 사용률
[st] - 가상화 환경에서 손실률
- us(User)의 값이 높으면, 사용자 코드를 수행하는데 시간이 오래 걸리며, 내부적으로 계산을 많이 하고 있다는 것이다.
- sy(system)의 값이 높다면, 시스템에 의해 사용되고 았는 시간이 오래 걸리며, 프로세스들이 시스템 호출 혹은 I/O가 많다고 할 수 있다.
- id(idle)의 값이 0이라면 CPU를 100% 사용하고 았다는 의미이다.
- 하단 정보인 프로세스 목록은 실행 중인 프로세스 목록이 표시되며, 각 열에는 아래와 같은 정보가 출력된다.
# 시스템의 현재 상태, 업타임, 로드 평균 등의 정보가 출력된다.
$ top
top - 16:48:20 up 15 days, 6:46, 1 user, load average: 0.09, 0.05, 0.01
Tasks: 242 total, 1 running, 241 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.9 us, 0.9 sy, 0.0 ni, 97.3 id, 0.1 wa, 0.2 hi, 0.2 si, 0.3 st
MiB Mem : 7742.5 total, 3965.9 free, 1235.0 used, 2541.6 buff/cache
MiB Swap: 7168.0 total, 7168.0 free, 0.0 used. 6097.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND ------------- 하단 정보
1 root 20 0 242516 15352 8992 S 0.7 0.2 18:13.70 systemd
# PID(Process ID) - 각 프로세스의 고유 식별자
# USER - 프로세스를 실행하는 사용자
# PR - 프로세스의 우선순위
# NI - 프로세스의 nice 값
# VIRT - 가상 메모리 사용량
# RES - 물리 메모리 사용량
# SHR 공유 메모리 사용량
# S - 프로세스의 상태(R:실행중,S:슬립,Z:좀비 등)
# %CPU - CPU 사용률
# %MEM - Memory 사용률
# TIME+ - 누적 CPU 시간
# COMMAND - 실행 중인 명령 또는 프로세스 이름
- top 실행 화면에서 Shift키와 영문자를 누르면, 프로세스 목록을 특정 기준에 따라 정렬할 수 있다.
# 메모리 사용률로 정렬
[SHIFT + M]
# PID 기준으로 정렬
[SHIFT + N]
# CPU 사용률로 정렬
[SHIFT + P]
# 실행시간 기준으로 정렬
[SHIFT + T]
# 정렬 기준 변경 (오름차순 -> 내림차순, 내림차순 -> 오름차순)
[SHIFT + R]
# Batch 모드 | -b
$ top -b -n 1 > top_output.txt
# 위 명령어는 top을 배치 모드로 실행하여, 출력을 터미널이 아닌 파일로 보내 실행 결과를 파일에 저장한다.
# 반복 실행 | -n <횟수>
$ top -n 5
# 위 명령어는 "-n 5"와 같이 지정된 횟수만큼 top을 반복(5번) 실행한다.
# 업데이트 간격 | -d <초>
$ top -d 5
# 화면 갱신 간격을 설정하며, 각 업데이트 간격마다 시스템 상태가 갱신된다. "-d 5"와 같이 지정된 횟수 간격으로 업데이트를 한다.
# 특정 프로세스 모니터링 | -p <PID>
$ top -p 1234
# 지정한 PID(Process ID)에 해당하는 프로세스만 모니터링한다. top -p 1234는 PID 1234에 해당하는 프로세스를 모니터링한다.
# 특정 사용자의 프로세스만 보기 | -U <사용자>
$ top -U yang
# 지정한 사용자의 프로세스만 보여준다. -U yang은 yang이라는 사용자의 프로세스만 표시한다.
# 정렬 피드 지정 | -o <필드>
$ top -o %CPU
# 표시할 프로세스 목록을 지정한 필드(Ex: %CPU, %MEM)로 정렬한다. -o %CPU은 CPU 사용률에 따라 프로세스를 정렬한다.
# 기본 정렬 필드 지정 | -O <필드>
$ top -O %MEM
# top 실행시 기본적으로 사용할 정렬 필드를 설정한다. -O %MEM은 메모리 사용률에 따라 프로세스를 정렬한다.
# 명령어 표시 | -c
$ top -c
# 도움말 표시 | -h
$ top -h
Usage:
top -hv | -bcEHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]
free | 메모리 모니터링
- 시스템의 메모리 사용 및 가용 리소스에 대한 정보를 제공하는 명령어로, 몇가지 옵션을 사용하여 출력 형식이나 특정 정보를 표시할 수 있다.
- 명령어의 기본 사용법은 아래와 같다.
$ free
total used free shared buff/cache available
Mem: 7928360 1263784 4061656 117532 2602920 6244772
Swap: 7340028 0 7340028
# byte 단위로 메모리를 표시 | --bytes
$ free -b
# KB(킬로바이트) 단위로 메모리를 표시 | --kilo
$ free -k
# MG(메가바이트) 단위로 메모리를 표시 | --mega
$ free -m
# GB(기가바이트) 단위로 메모리를 표시 | --giga
$ free -g
# 총 메모리 사용량을 표시 | --total
$ free -t
# 사용자 친화적인 형식으로 출력 | --human
$ free -h
$ free --help
Options:
-b, --bytes show output in bytes
--kilo show output in kilobytes
--mega show output in megabytes
--giga show output in gigabytes
--tera show output in terabytes
--peta show output in petabytes
-k, --kibi show output in kibibytes
-m, --mebi show output in mebibytes
-g, --gibi show output in gibibytes
--tebi show output in tebibytes
--pebi show output in pebibytes
-h, --human show human-readable output
--si use powers of 1000 not 1024
-l, --lohi show detailed low and high memory statistics
-t, --total show total for RAM + swap
-s N, --seconds N repeat printing every N seconds
-c N, --count N repeat printing N times, then exit
-w, --wide wide output
--help display this help and exit
-V, --version output version information and exi
vmstat | 시스템 정보 모니터링
- 시스템 상태와 가상 메모리 사용에 대한 시스템의 전반적인 통계를 제공하는 명령어이며, 시스템 모니터링, 디스크 I/O 성능 분석, 메모리 사용량 및 슬립 캐시 정보를 얻을 수 있다.
- 명령어의 기본 사용법은 아래와 같다.
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
# 할성한 프로세스의 통계를 표시 | --active
$ vmstat -a
# 디스크 I/O 통계를 표시 | --disk
$ vmstat -d
# 파티션별 디스크 I/O 통계를 표시 | --partition
$ vmstat -p
# 커널 슬랩 캐시 메모리의 사용량과 통계를 표시 | --slabs
$ vmstat -s
# 머신 코드, 데이터, 스택 및 사용 가능한 메모리 크기에 대한 정보를 표시 | --machine
$ vmstat -m
# 출력 행에 타임스탬프를 추가 | --timestamp
$ vmstat -t
# 출력되는 줄의 개수를 설정 | --num
$ vmstat -n 5
# "-n 5"와 같이 지정된 횟수의 샘플을 출력한다.
# vmstat 버전 정보를 표시 | --version
$ vmstat -V
$ vmstat -h
Usage:
vmstat [options] [delay [count]]
Options:
-a, --active active/inactive memory
-f, --forks number of forks since boot
-m, --slabs slabinfo
-n, --one-header do not redisplay header
-s, --stats event counter statistics
-d, --disk disk statistics
-D, --disk-sum summarize disk statistics
-p, --partition <dev> partition specific statistics
-S, --unit <char> define display unit
-w, --wide wide output
-t, --timestamp show timestamp
-y, --no-first skips first line of output
-h, --help display this help and exit
-V, --version output version information and exit
iostat | CPU, DISK 입출력 상태 모니터링
- 디스크 및 CPU 활동을 모니터링하고 보고하는 명령어이며, 시스템 성능 및 리소스 사용률을 파악하는데 유용하다.
- 명령어의 기본 사용법은 아래와 같다.
$ iostat
# CPU 및 디스크 사용률에 대한 기본 통계를 표시
$ iostat
# 특정 디스크 관련 정보 보기
$ iostat -dx /dev/sda
# 특정 시간 간격 설정 | -t
$ iostat -t 2
## 2초마다 업데이트를 표시
# 특정 횟수만큼 출력 표시 | -c
$ iostat -c 5
## 특정 횟수만큼 출력을 표시
netstat | 네트워크 상태 모니터링
- 네트워크 연결 및 네트워크 인터페이스 정보를 표시하고 관리하는 Unix 및 Unix 계열 운영 체제에서 사용되는 명령어로, 네트워크 연결의 상태, 라우팅 테이블, 네트워크 인터페이스 통계 및 기타 네트워크 곤련 정보를 출력한다.
- 명령어의 기본 사용법은 아래와 같다.
$ netstat
# 전반적인 네트워크 연결 정보 확인, 현재 활성화된 네트워크 연경 정보 표시
$ netstat
## 특정 종류의 연결 정보 표시 | -t (TCP 연결), -u (UDP 연결) 및 -n (주소 및 포트 번호를 숫자로 표시)
# TCP 연결 정보 표시
netstat -t
# UDP 연결 정보 표시
netstat -u
# 주소 및 포트 번호를 숫자로 표시하여 모든 연결 정보 표시
netstat -n
# 라우팅 테이블 정보 표시 | -r
$ netstat -r
# 네트워크 인터페이스 통계 확인 | -i
$ netstat -i
# netstat의 출력에는 다음과 같은 정보가 포함될 수 있다
로컬 및 원격 주소 및 포트 번호
프로토콜 종류 (TCP 또는 UDP)
상태 (예: LISTEN, ESTABLISHED, CLOSE_WAIT 등)
데이터 전송 및 수신 통계
라우팅 테이블 항목 (라우팅 정보를 표시할 때)
df | 디스크 모니터링
- 디스크 용량 및 사용량을 확인하는데 사용되는 명령어이며, 디스크 사용 정보를 표시하거나 특정 파일 시스템을 대상으로 조회할 수 있다.
- 명령어의 기본 사용법은 아래와 같다.
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
# 사람이 읽기 쉬운 형식으로 출력, 파일 시스템 크기 및 사용량을 KB, MB, GM 등으로 표시
$ df -h
# 파일 시스템 유형을 출력, 각 파일 시스템에 대한 유형 (ext4, nfs, tmpfs 등)을 표시
$ df -T
# 모든 파일 시스템의 총 용량과 사용량을 표시
$ df --total
# 특정 파일 시스템 유형만 표시, '-t ext4'는 ext4 파일 시스템만 출력한다. | --type=<파일시스템 유형>
$ df -t <파일시스템 유형>
# 특정 파일 시스템 유형을 제외하고 표시, -x ext4'는 ext4 파일 시스템을 제외하고 출력한다. | --exclude-type=<파일시스템 유형>
$ df -x <파일시스템 유형>