/proc 디렉토리로 시스템 정보를 확인하는 방법은 무엇인가요?
💡 Linux의 /proc 디렉토리는 커널과 프로세스 정보를 제공하는 가상 파일시스템으로, 다양한 시스템 리소스 상태를 실시간으로 확인할 수 있습니다.
설치 환경
- CentOS 5.x (64bit)
1. /proc 디렉토리 개요
/proc 디렉토리는 실제 디스크에 저장된 파일이 아니라, 시스템이 부팅되면서 메모리에 생성되는 **가상 파일시스템(Virtual Filesystem)**입니다. 프로세스와 시스템 정보가 실시간으로 저장되어 있으며, 이를 읽어서 시스템 상태를 확인할 수 있습니다.
주요 특징:
- 실제로는 빈 디렉토리 (디스크 공간 사용 없음)
- 시스템 부팅 시 커널이 자동으로 정보를 채움
- 실시간으로 업데이트되는 시스템 정보 제공
cat명령어로 간단하게 내용 확인 가능
2. 주요 /proc 파일 목록
2.1 하드웨어 정보
/proc/cpuinfo - CPU 정보
CPU의 수, 타입, 클럭, 모델, 제조회사 등 프로세서에 대한 상세 정보를 확인할 수 있습니다.
[root@cafe24 ~]# cat /proc/cpuinfo
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 44
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
stepping : 2
cpu MHz : 2400.084
cache size : 12288 KB
physical id : 1
siblings : 1
core id : 0
cpu cores : 1
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu de tsc msr pae cx8 apic sep cmov pat clflush acpi mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc pni ssse3 cx16 sse4_1 sse4_2 popcnt lahf_lm
bogomips : 6001.95
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
주요 필드:
- processor: CPU 코어 번호
- model name: CPU 제품명
- cpu MHz: CPU 동작 클럭
- cache size: CPU 캐시 크기
- flags: CPU가 지원하는 기능 플래그
/proc/devices - 커널 장치 목록
현재 커널에 설정되어 있는 Character 및 Block 장치 목록을 출력합니다.
[root@cafe24 ~]# cat /proc/devices
Character devices:
1 mem
4 /dev/vc/0
4 tty
5 /dev/tty
5 /dev/console
5 /dev/ptmx
6 lp
7 vcs
10 misc
13 input
29 fb
89 i2c
128 ptm
136 pts
162 raw
180 usb
189 usb_device
202 cpu/msr
203 cpu/cpuid
204 xvc
254 pcmcia
Block devices:
1 ramdisk
9 md
202 xvd
253 device-mapper
254 mdp
/proc/dma - DMA 채널 정보
현재 사용 중인 Direct Memory Access(DMA) 채널을 출력합니다.
[root@cafe24 ~]# cat /proc/dma
4: cascade
/proc/interrupts - 인터럽트 정보
CPU별 인터럽트 발생 횟수와 인터럽트를 사용하는 장치 정보를 출력합니다.
[root@cafe24 ~]# cat /proc/interrupts
CPU0 CPU1
256: 10290770 0 Dynamic-irq timer0
257: 598640 0 Dynamic-irq resched0
258: 59 0 Dynamic-irq callfunc0
259: 155522 55 Dynamic-irq xenbus
260: 0 609744 Dynamic-irq resched1
261: 0 168 Dynamic-irq callfunc1
262: 0 7527933 Dynamic-irq timer1
263: 191 0 Dynamic-irq xencons
264: 944209 16006 Dynamic-irq blkif
265: 295966 15926 Dynamic-irq blkif
266: 2213490 0 Dynamic-irq eth0
267: 11538 0 Dynamic-irq eth1
NMI: 0 0
LOC: 0 0
ERR: 0
MIS: 0
주요 정보:
- CPU0, CPU1: 각 CPU 코어별 인터럽트 발생 횟수
- Dynamic-irq: 동적 인터럽트 타입
- 장치명: eth0(네트워크 카드), blkif(블록 디바이스) 등
/proc/ioports - I/O 포트 정보
사용 중인 I/O 포트의 주소 범위와 연결된 장치를 출력합니다.
[root@cafe24 ~]# cat /proc/ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0064-0064 : keyboard
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
2.2 파일시스템 정보
/proc/filesystems - 지원 파일시스템
커널이 지원하는 파일시스템 목록을 출력합니다. nodev는 블록 장치가 필요 없는 가상 파일시스템을 의미합니다.
[root@cafe24 ~]# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev bdev
nodev proc
nodev cpuset
nodev binfmt_misc
nodev debugfs
nodev securityfs
nodev sockfs
nodev usbfs
nodev pipefs
nodev anon_inodefs
nodev futexfs
nodev tmpfs
nodev inotifyfs
nodev eventpollfs
nodev devpts
ext2
nodev ramfs
iso9660
nodev mqueue
ext3
nodev fuse
fuseblk
nodev fusectl
ext4
ext4dev
/proc/mounts - 마운트 정보
현재 마운트된 파일시스템 목록을 출력합니다. mount 명령어의 출력과 동일한 정보입니다.
[root@cafe24 ~]# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / ext3 rw,data=ordered 0 0
/dev /dev tmpfs rw 0 0
/proc /proc proc rw 0 0
/sys /sys sysfs rw 0 0
/proc/bus/usb /proc/bus/usb usbfs rw 0 0
devpts /dev/pts devpts rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
2.3 시스템 성능 정보
/proc/loadavg - 시스템 부하
현재 시스템의 평균 부하량을 출력합니다. w 또는 uptime 명령어와 동일한 정보입니다.
[root@cafe24 ~]# cat /proc/loadavg
0.00 0.00 0.00 1/107 17830
필드 설명:
- 0.00 0.00 0.00: 1분, 5분, 15분 평균 부하
- 1/107: 현재 실행 중인 프로세스 / 전체 프로세스
- 17830: 마지막으로 실행된 프로세스 ID
/proc/meminfo - 메모리 정보
메모리 사용량에 대한 상세 정보를 출력합니다. free 명령어의 원본 데이터입니다.
[root@cafe24 ~]# cat /proc/meminfo
MemTotal: 2097152 kB
MemFree: 580748 kB
Buffers: 228708 kB
Cached: 874536 kB
SwapCached: 52 kB
Active: 914464 kB
Inactive: 422448 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 2097152 kB
LowFree: 580748 kB
SwapTotal: 2048276 kB
SwapFree: 2048224 kB
Dirty: 152 kB
Writeback: 0 kB
AnonPages: 233752 kB
Mapped: 25944 kB
Slab: 107612 kB
PageTables: 5516 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 3096852 kB
Committed_AS: 445180 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 270388 kB
VmallocChunk: 34359467643 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB
주요 필드:
- MemTotal: 전체 메모리
- MemFree: 사용 가능한 메모리
- Buffers: 버퍼 캐시
- Cached: 페이지 캐시
- SwapTotal/SwapFree: 스왑 메모리
/proc/stat - 시스템 통계
CPU 사용량, 프로세스 생성 수, 부팅 시간 등 시스템 전반적인 통계 정보를 출력합니다.
[root@cafe24 ~]# cat /proc/stat
cpu 156611 8 178794 17449530 7950 8 3004 0
cpu0 76894 4 92302 8728038 4133 4 1497 0
cpu1 79716 4 86492 8721492 3817 3 1507 0
intr 15842145 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10291201 598740 59 155542 609844 168 7528364 191 944428 296085 2213824 11576
ctxt 23842913
btime 1361305433
processes 5850
procs_running 2
procs_blocked 0
주요 필드:
- cpu: 전체 CPU 사용 시간 (user, nice, system, idle, iowait, irq, softirq)
- intr: 총 인터럽트 발생 횟수
- ctxt: 컨텍스트 스위칭 횟수
- btime: 시스템 부팅 시간 (Unix timestamp)
- processes: 생성된 프로세스 총 개수
/proc/uptime - 시스템 가동 시간
시스템이 부팅된 이후 경과 시간과 유휴 시간을 초 단위로 출력합니다.
[root@cafe24 ~]# cat /proc/uptime
144231.53 17455088.29
필드 설명:
- 144231.53: 시스템 부팅 후 경과 시간 (초)
- 17455088.29: CPU 유휴 시간의 총합 (초, 멀티코어는 각 코어 합산)
2.4 커널 및 모듈 정보
/proc/version - 커널 버전
현재 실행 중인 리눅스 커널 버전과 컴파일 정보를 출력합니다.
[root@cafe24 ~]# cat /proc/version
Linux version 2.6.18-308.el5xen (mockbuild@builder10.centos.org)
(gcc version 4.1.2 20080704 (Red Hat 4.1.2-52))
#1 SMP Tue Feb 21 20:42:14 EST 2012
정보 포함:
- 커널 버전 (2.6.18)
- 배포판 정보 (CentOS 5, Xen 커널)
- 컴파일러 버전 (gcc 4.1.2)
- 빌드 날짜
/proc/modules - 로드된 커널 모듈
현재 커널에 로드되어 있는 모듈 목록을 출력합니다. lsmod 명령어와 동일한 정보입니다.
[root@cafe24 ~]# cat /proc/modules
autofs4 29893 3 - Live 0xffffffffa01ba000
hidp 23105 2 - Live 0xffffffffa01b3000
rfcomm 42457 0 - Live 0xffffffffa01a7000
l2cap 29505 10 hidp,rfcomm, Live 0xffffffffa019f000
bluetooth 61669 5 hidp,rfcomm,l2cap, Live 0xffffffffa018e000
sunrpc 144517 1 - Live 0xffffffffa0169000
video 21193 0 - Live 0xffffffffa0162000
backlight 9673 1 video, Live 0xffffffffa015e000
dm_snapshot 18149 0 - Live 0xffffffffa0158000
dm_zero 6209 0 - Live 0xffffffffa0155000
dm_mirror 24393 0 - Live 0xffffffffa014d000
필드 설명:
- 모듈명: 커널 모듈 이름
- 크기: 메모리 사용량 (바이트)
- 사용 카운트: 해당 모듈을 사용 중인 프로세스 수
- 메모리 주소: 커널 메모리에 로드된 위치
2.5 네트워크 정보
/proc/net/dev - 네트워크 인터페이스 통계
네트워크 인터페이스별 송수신 패킷 및 바이트 통계를 출력합니다.
[root@cafe24 ~]# cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 31880 368 0 0 0 0 0 0 31880 368 0 0 0 0 0 0
eth0: 5697636 36994 0 0 0 0 0 0 2387717 30831 0 0 0 0 0 0
eth1: 690 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0
sit0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
주요 필드:
- Receive bytes/packets: 수신한 바이트 수 / 패킷 수
- Transmit bytes/packets: 송신한 바이트 수 / 패킷 수
- errs: 에러 발생 횟수
- drop: 드롭된 패킷 수
2.6 디스크 및 SCSI 정보
/proc/swaps - 스왑 공간 정보
현재 활성화된 스왑 파티션 또는 스왑 파일 정보를 출력합니다.
[root@cafe24 ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/xvda2 partition 2048276 52 -1
필드 설명:
- Filename: 스왑 장치 또는 파일 경로
- Type: partition(파티션) 또는 file(파일)
- Size: 총 크기 (KB)
- Used: 사용 중인 크기 (KB)
- Priority: 우선순위 (-1은 기본값)
/proc/scsi/scsi - SCSI 장치 정보
SCSI 컨트롤러에 연결된 디스크와 광학 드라이브 정보를 출력합니다.
[root@cafe24 ~]# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: WDC WD5003ABYX-1 Rev: 01.0
Type: Direct-Access ANSI SCSI revision: 05
3. 실전 활용 예제
3.1 CPU 코어 수 확인
[root@cafe24 ~]# grep -c processor /proc/cpuinfo
2
3.2 메모리 사용률 계산
[root@cafe24 ~]# awk '/MemTotal/{total=$2} /MemFree/{free=$2} END{print "Used: "(total-free)" KB ("int((total-free)/total*100)"%)"}' /proc/meminfo
Used: 1516404 KB (72%)
3.3 네트워크 트래픽 실시간 모니터링
[root@cafe24 ~]# while true; do
grep eth0 /proc/net/dev | awk '{print "RX: "$2" bytes, TX: "$10" bytes"}';
sleep 1;
done
RX: 5698234 bytes, TX: 2388145 bytes
RX: 5698890 bytes, TX: 2388567 bytes
3.4 시스템 부팅 후 경과 시간 변환
[root@cafe24 ~]# awk '{print int($1/86400)"일 "int($1%86400/3600)"시간 "int($1%3600/60)"분"}' /proc/uptime
1일 16시간 3분
4. /proc vs 일반 명령어 비교
| 정보 | /proc 파일 | 일반 명령어 |
|---|---|---|
| CPU 정보 | /proc/cpuinfo | lscpu, cat /proc/cpuinfo |
| 메모리 정보 | /proc/meminfo | free -m, vmstat |
| 시스템 부하 | /proc/loadavg | uptime, w |
| 마운트 정보 | /proc/mounts | mount, df -h |
| 네트워크 통계 | /proc/net/dev | ifconfig, ip -s link |
| 커널 버전 | /proc/version | uname -r |
| 로드된 모듈 | /proc/modules | lsmod |
5. 주의사항
/proc디렉토리의 파일은 읽기 전용이며, 직접 수정할 수 없습니다.- 일부 파일(예:
/proc/sys/*)은sysctl명령어 또는echo리다이렉션으로 값을 변경할 수 있습니다. /proc디렉토리는 메모리에만 존재하므로, 시스템이 재부팅되면 내용이 초기화됩니다.- Root 권한이 필요한 파일:
/proc/kcore(커널 메모리 이미지) 등 일부 파일은 일반 사용자가 읽을 수 없습니다.
6. 관련 도구
- procinfo:
/proc정보를 보기 좋게 포맷팅하여 출력 - htop:
/proc정보를 활용한 고급 프로세스 모니터링 도구 - sysctl:
/proc/sys/*경로의 커널 파라미터 조회 및 변경 - lsof: 프로세스별 열린 파일 목록 확인 (
/proc/[pid]/fd활용)
7. Best Practices
- 모니터링 스크립트 작성 시:
/proc파일을 직접 읽는 것이 외부 명령어 실행보다 빠르고 효율적입니다. - 성능 분석:
/proc/stat,/proc/meminfo,/proc/net/dev등을 주기적으로 수집하여 시스템 성능 추세를 파악하세요. - 프로세스별 정보:
/proc/[PID]/디렉토리를 통해 특정 프로세스의 상세 정보(메모리 맵, 열린 파일, 환경변수 등)를 확인할 수 있습니다.
예시:
# PID 1234 프로세스의 환경변수 확인
[root@cafe24 ~]# cat /proc/1234/environ | tr '\0' '\n'
# PID 1234 프로세스가 열고 있는 파일 목록
[root@cafe24 ~]# ls -l /proc/1234/fd
참고 문서
- man proc:
/proc파일시스템 전체 매뉴얼 - Kernel Documentation: https://www.kernel.org/doc/Documentation/filesystems/proc.txt