4.4. proc-filsystemet

Som systemadministrator (root) har man gode muligheder for at følge, hvad Linux-kernen foretager sig. Prøv at skrive mount. En af de linjer, som kommer frem er

none on /proc type proc (rw)

I modsætning til de almindelige filsystemer, som er monteret (f.eks. /dev/hda1, /dev/hda2 osv.), så er /proc meget speciel. Prøv f.eks. som det første eksperiment at se følgende fil.

[tyge@hven ~]$ ls -l /proc/kcore
-r--------    1 root     root     134156288 jan 22 23:18 /proc/kcore   

Betyder dette, at der ligger en ca. 128 Mb stor fil? Nej – alt hvad der ligger under /proc er virtuelt. Det er Linux-kernen som på en elegant måde giver adgang til en række nyttige kerne-informationer. I eksemplet er /proc/kcore en adgang til hele den fysiske RAM i maskinen. Lad os se mere på hvad der sker i /proc

[tyge@hven ~]$ ls -l /proc/
1/     1150/  529/ 741/  9725/ 9794/       fs/        partitions
10023/ 15656/ 539/ 765/  9726/ 9795/       ide/       pci
10030/ 15657/ 554/ 809/  9727/ 9797/       interrupts rtc
10043/ 15658/ 570/ 825/  9765/ 9798/       ioports    scsi/
1017/  17917/ 571/ 961/  9767/ 9800/       kcore      self@
10313/ 17931/ 581/ 965/  9769/ 984/        kmsg       slabinfo
10317/ 17964/ 596/ 966/  9771/ 9950/       ksyms      sound
1051/  18243/ 6/   967/  9776/ 9958/       loadavg    stat
1052/  18246/ 61/  968/  9777/ apm         locks      swaps
1053/  18250/ 698/ 969/  9780/ bus/        mdstat     sys/
1054/  18524/ 701/ 970/  9782/ cmdline     meminfo    tty/
1055/  2/     702/ 971/  9784/ cpuinfo     misc       uptime
10571/ 3/     703/ 9717/ 9786/ devices     modules    version
10723/ 307/   704/ 972/  9788/ dma         mounts
1083/  4/     717/ 9722/ 9789/ fb          mtrr
11294/ 5/     732/ 9723/ 9791/ filesystems net/                          

Som det kan ses, er der en mængde kataloger med numre. Der er et katalog for hver proces på maskinen. Lad os se på et af katalogerne mere detaljeret. Der kører netop nu en emacs på maskinen med pid=18243 (PID betyder proces-ID). Dette findes ved brug af ps. Tilsvarende kan vi se hvad kataloget i /proc/18243 indeholder.

[tyge@hven ~]$ ps aux | grep emacs
pto  18243  0.1  4.7  8940 6076 pts/1   S  22:11  0:09 emacs kerne.sgml 
[tyge@hven ~]$ ls /proc/18243
cmdline  cwd   environ  exe    fd  maps  
mem      root  stat     statm  status       

Det første underlige er, at filerne har filstørrelse nul. Det skal man ikke lade sig snyde af. Alt er virtuelt her – og nogle gange kan filer i /proc have indhold. Prøv selv at køre more /proc/PID/cmdline, hvor PID er en proces-ID på din maskine, f.eks. for en editor, du har startet på kommando-linjen.

Via /proc/PID/cwd er der direkte adgang til det katalog, som programmet blev startet op i. Filerne /proc/PID/stat* (tre filer) fortæller mere om f.eks. hukommelsesforbrug og andre status-parametre.

Nu har vi set på hvad der gemmes for den enkelte proces. Lad os nu se på hvad der ellers kan findes i /proc.

Belastning af maskinen (load) – eller rettere – hvor mange processer, der prøver at tilgå kernen i snit, kan ses direkte ud fra /proc/loadavg. Det er samme tal som uptime har til sidst – belastning det sidste minut, sidste 5 minutter, og endelig de sidste 15 minutter.

Vil du vide mere om, hvor meget hukommelse der er brugt, så kan du få dette fra kommandoen free, men en endnu mere detaljeret visning kan hentes fra filen /proc/meminfo.

[tyge@hven ~]$ free 
             total   used  free shared buffers cached
Mem:        127760 124336  3424 135860    4684  52104
-/+ buffers/cache:  67548 60212
Swap:        68504   7120 61384       
[tyge@hven ~]$ more /proc/meminfo
        total:    used:    free:  shared: buffers:  cached:
Mem:  130826240 127242240  3584000 139255808  4788224 53280768
Swap: 70148096  7290880 62857216
MemTotal:    127760 kB
MemFree:       3500 kB
MemShared:   135992 kB
Buffers:       4676 kB
Cached:       52032 kB
BigTotal:         0 kB
BigFree:          0 kB
SwapTotal:    68504 kB
SwapFree:     61384 kB

I /proc/net/ er der en masse nyttig information om hvordan netværket ser ud lige nu. De fleste filer er direkte læsbare for alle, mens f.eks. firewall-filerne (for kerne 2.2) /proc/net/ip_fwchains (med firewall-opsætningen) og /proc/net/ip_fwnames kun kan læses af root (sikkerhed).