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:
- /proc/cmdline - Kernel kommandolinieinformation.
- /proc/console - Oplysninger om aktuelle konsoller inklusive tty.
- /proc/devices - Enhedsdrivere er i øjeblikket konfigureret til den kørende kerne.
- /proc/dma - Info om aktuelle DMA-kanaler.
- /proc/fb - Framebuffer-enheder.
- /proc/filesystems - Aktuelle filsystemer understøttet af kernen.
- /proc/iomem - Aktuelt systemhukommelseskort for enheder.
- /proc/ioports - Registrerede havneregioner til input output kommunikation med enheden.
- /proc/loadavg - Gennemsnit af systembelastning.
- /proc/locks - Filer, der i øjeblikket er låst af kernen.
- /proc/meminfo - Info om systemhukommelse (se eksemplet ovenfor).
- /proc/misc - Diverse drivere, der er registreret for diverse større enheder.
- /proc/modules - Aktuelt indlæste kernemoduler.
- /proc/mounts - Liste over alle monteringer, der bruges af systemet.
- /proc/partitions - Detaljeret info om partitioner, der er tilgængelige for systemet.
- /proc/pci - Oplysninger om hver PCI-enhed.
- /proc/stat - Registrer eller forskellige statistikker, der er gemt fra sidste genstart.
- /proc/swap - Oplysninger om swap-plads.
- /proc/oppetid - Information om driftstid (i sekunder).
- /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:
- cmdline - kommandolinjen i processen
- miljø - miljøvariabler
- fd - filbeskrivelser
- grænser - indeholder oplysninger om grænserne for processen
- monteringsrelaterede oplysninger
Du vil også bemærke et antal links i det nummererede bibliotek:
- cwd - et link til den aktuelle arbejdsmappe i processen
- exe - link til eksekverbar af processen
- 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å.