Udforskning/proc filsystem i Linux


I dag skal vi kigge ind i/proc-biblioteket og udvikle en fortrolighed med det. Kataloget/proc findes på alle Linux-systemer, uanset smag eller arkitektur.

En misforståelse, som vi straks skal rydde op i, er, at/proc-biblioteket IKKE er et rigtigt filsystem i betydningen af udtrykket. Det er et virtuelt filsystem. Indeholdt i procfs er information om processer og anden systeminformation. Det kortlægges til/proc og monteres ved opstartstidspunktet.

Lad os først komme ind i/proc-biblioteket og se os rundt:

# cd /proc

Den første ting, du vil bemærke, er, at der er nogle velkendte lydfiler og derefter en hel masse nummererede mapper. De nummererede mapper repræsenterer processer, bedre kendt som PID'er, og inden for dem er en kommando, der optager dem. Filerne indeholder systemoplysninger såsom hukommelse (meminfo), CPU-information (cpuinfo) og tilgængelige filsystemer.

Læs også: Linux Free Command til at kontrollere fysisk hukommelse og bytte hukommelse

Lad os først se på en af filerne:

# cat /proc/meminfo

som returnerer noget der ligner dette:

MemTotal:         604340 kB
MemFree:           54240 kB
Buffers:           18700 kB
Cached:           369020 kB
SwapCached:            0 kB
Active:           312556 kB
Inactive:         164856 kB
Active(anon):      89744 kB
Inactive(anon):      360 kB
Active(file):     222812 kB
Inactive(file):   164496 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         89724 kB
Mapped:            18012 kB
Shmem:               412 kB
Slab:              50104 kB
SReclaimable:      40224 kB
...

Som du kan se, indeholder/proc/meminfo en masse information om dit systems hukommelse, inklusive den samlede tilgængelige mængde (i kb) og det gratis beløb på de to øverste linjer.

Kørsel af kat-kommandoen på en af filerne i/proc vil output deres indhold. Oplysninger om eventuelle filer er tilgængelige på mandsiden ved at køre:

# man 5 /proc/<filename>

Jeg giver dig hurtig gennemgang af/proc's filer:

  1. /proc/cmdline - Kernel kommandolinieinformation.
  2. /proc/console - Oplysninger om aktuelle konsoller inklusive tty.
  3. /proc/devices - Enhedsdrivere er i øjeblikket konfigureret til den kørende kerne.
  4. /proc/dma - Info om aktuelle DMA-kanaler.
  5. /proc/fb - Framebuffer-enheder.
  6. /proc/filesystems - Aktuelle filsystemer understøttet af kernen.
  7. /proc/iomem - Aktuelt systemhukommelseskort for enheder.
  8. /proc/ioports - Registrerede havneregioner til input output kommunikation med enheden.
  9. /proc/loadavg - Gennemsnit af systembelastning.
  10. /proc/locks - Filer, der i øjeblikket er låst af kernen.
  11. /proc/meminfo - Info om systemhukommelse (se eksemplet ovenfor).
  12. /proc/misc - Diverse drivere, der er registreret for diverse større enheder.
  13. /proc/modules - Aktuelt indlæste kernemoduler.
  14. /proc/mounts - Liste over alle monteringer, der bruges af systemet.
  15. /proc/partitions - Detaljeret info om partitioner, der er tilgængelige for systemet.
  16. /proc/pci - Oplysninger om hver PCI-enhed.
  17. /proc/stat - Registrer eller forskellige statistikker, der er gemt fra sidste genstart.
  18. /proc/swap - Oplysninger om swap-plads.
  19. /proc/oppetid - Information om driftstid (i sekunder).
  20. /proc/version - Kerneversion, gcc-version og Linux-distribution installeret.

Inden for/procs nummererede mapper finder du et par filer og links. Husk, at disse katalogers numre korrelerer med PID for den kommando, der køres inden for dem. Lad os bruge et eksempel. På mit system er der et mappenavn/proc/12:

# cd /proc/12
# ls
attr        coredump_filter  io         mounts      oom_score_adj  smaps    wchan
autogroup   cpuset           latency    mountstats  pagemap        stack
auxv        cwd              limits     net         personality    stat
cgroup      environ          loginuid   ns          root           statm
clear_refs  exe              maps       numa_maps   sched          status
cmdline     fd               mem        oom_adj     schedstat      syscall
comm        fdinfo           mountinfo  oom_score   sessionid      task

Hvis jeg løber:

# cat /proc/12/status

Jeg får følgende:

Name:	xenwatch
State:	S (sleeping)
Tgid:	12
Pid:	12
PPid:	2
TracerPid:	0
Uid:	0	0	0	0
Gid:	0	0	0	0
FDSize:	64
Groups:
Threads:	1
SigQ:	1/4592
SigPnd:	0000000000000000
ShdPnd:	0000000000000000
SigBlk:	0000000000000000
SigIgn:	ffffffffffffffff
SigCgt:	0000000000000000
CapInh:	0000000000000000
CapPrm:	ffffffffffffffff
CapEff:	ffffffffffffffff
CapBnd:	ffffffffffffffff
Cpus_allowed:	1
Cpus_allowed_list:	0
Mems_allowed:	00000000,00000001
Mems_allowed_list:	0
voluntary_ctxt_switches:	84
nonvoluntary_ctxt_switches:	0

Så hvad betyder det? Nå, den vigtige del er øverst. Vi kan se fra statusfilen, at denne proces tilhører xenwatch. Dens nuværende tilstand sover, og dens proces-id er naturligvis 12. Vi kan også se, hvem der kører dette, da UID og GID er 0, hvilket indikerer, at denne proces tilhører rodbrugeren.

I ethvert nummereret bibliotek har du en lignende filstruktur. De vigtigste og deres beskrivelser er som følger:

  1. cmdline - kommandolinjen i processen
  2. miljø - miljøvariabler
  3. fd - filbeskrivelser
  4. grænser - indeholder oplysninger om grænserne for processen
  5. monteringsrelaterede oplysninger

Du vil også bemærke et antal links i det nummererede bibliotek:

  1. cwd - et link til den aktuelle arbejdsmappe i processen
  2. exe - link til eksekverbar af processen
  3. rod - link til arbejdsmappen i processen

Dette skulle komme i gang med at gøre dig bekendt med/proc-biblioteket. Det skal også give indsigt i, hvordan et antal kommandoer får deres info, såsom oppetid, lsof, mount og ps, bare for at nævne nogle få.