본문으로 건너뛰기

/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/cpuinfolscpu, cat /proc/cpuinfo
메모리 정보/proc/meminfofree -m, vmstat
시스템 부하/proc/loadavguptime, w
마운트 정보/proc/mountsmount, df -h
네트워크 통계/proc/net/devifconfig, ip -s link
커널 버전/proc/versionuname -r
로드된 모듈/proc/moduleslsmod

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

  1. 모니터링 스크립트 작성 시: /proc 파일을 직접 읽는 것이 외부 명령어 실행보다 빠르고 효율적입니다.
  2. 성능 분석: /proc/stat, /proc/meminfo, /proc/net/dev 등을 주기적으로 수집하여 시스템 성능 추세를 파악하세요.
  3. 프로세스별 정보: /proc/[PID]/ 디렉토리를 통해 특정 프로세스의 상세 정보(메모리 맵, 열린 파일, 환경변수 등)를 확인할 수 있습니다.

예시:

# PID 1234 프로세스의 환경변수 확인
[root@cafe24 ~]# cat /proc/1234/environ | tr '\0' '\n'

# PID 1234 프로세스가 열고 있는 파일 목록
[root@cafe24 ~]# ls -l /proc/1234/fd

참고 문서