Explorant el sistema de fitxers /proc a Linux


Avui farem una ullada al directori /proc i ens familiaritzarem amb ell. El directori /proc està present a tots els sistemes Linux, independentment del seu gust o arquitectura.

Una idea errònia que hem d'aclarir immediatament és que el directori /proc NO és un sistema de fitxers real, en el sentit del terme. És un sistema de fitxers virtual. Dins dels procfs hi ha informació sobre processos i altra informació del sistema. S'assigna a /proc i es munta en el moment de l'arrencada.

Primer, entrem al directori /proc i mirem al voltant:

# cd /proc

El primer que notareu és que hi ha alguns fitxers de sons familiars, i després un munt de directoris numerats. Els directoris numerats representen processos, més coneguts com a PID, i dins d'ells, una ordre que els ocupa. Els fitxers contenen informació del sistema com ara memòria (meminfo), informació de CPU (cpuinfo) i sistemes de fitxers disponibles.

Llegiu també:  Comandament gratuït de Linux per comprovar la memòria física i la memòria d'intercanvi

Mirem primer un dels fitxers:

# cat /proc/meminfo

que retorna una cosa semblant a això:

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
...

Com podeu veure, /proc/meminfo conté un munt d'informació sobre la memòria del vostre sistema, inclosa la quantitat total disponible (en kb) i la quantitat gratuïta a les dues línies superiors.

Si executeu l'ordre cat en qualsevol dels fitxers de /proc, sortirà el seu contingut. La informació sobre qualsevol fitxer està disponible a la pàgina de manual executant:

# man 5 /proc/<filename>

Us donaré un resum ràpid dels fitxers de /proc:

  1. /proc/cmdline: informació de la línia d'ordres del nucli.
  2. /proc/console: informació sobre les consoles actuals, inclosa tty.
  3. /proc/devices: controladors de dispositiu configurats actualment per al nucli en execució.
  4. /proc/dma: informació sobre els canals DMA actuals.
  5. /proc/fb – Dispositius de framebuffer.
  6. /proc/filesystems: sistemes de fitxers actuals suportats pel nucli.
  7. /proc/iomem: mapa actual de memòria del sistema per als dispositius.
  8. /proc/ioports: regions de ports registrades per a la comunicació d'entrada i sortida amb el dispositiu.
  9. /proc/loadavg: mitjana de càrrega del sistema.
  10. /proc/locks: fitxers bloquejats actualment pel nucli.
  11. /proc/meminfo: informació sobre la memòria del sistema (vegeu l'exemple anterior).
  12. /proc/misc: controladors diversos registrats per a diversos dispositius principals.
  13. /proc/modules: mòduls del nucli carregats actualment.
  14. /proc/mounts: llista de tots els muntatges en ús pel sistema.
  15. /proc/partitions: informació detallada sobre les particions disponibles per al sistema.
  16. /proc/pci: informació sobre cada dispositiu PCI.
  17. /proc/stat: Registre o diverses estadístiques conservades de l'últim reinici.
  18. /proc/swap: informació sobre l'espai d'intercanvi.
  19. /proc/uptime: informació del temps de funcionament (en segons).
  20. /proc/version: versió del nucli, versió gcc i distribució de Linux instal·lada.

Dins dels directoris numerats de /proc trobareu alguns fitxers i enllaços. Recordeu que els números d'aquests directoris es correlacionen amb el PID de l'ordre que s'executa dins d'ells. Utilitzem un exemple. Al meu sistema, hi ha un nom de carpeta /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

Si corro:

# cat /proc/12/status

Rebo el següent:

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

Aleshores, què vol dir això? Bé, la part important està a la part superior. Des del fitxer d'estat podem veure que aquest procés pertany a xenwatch. El seu estat actual està en repòs i el seu ID de procés és 12, òbviament. També podem veure qui està executant això, ja que UID i GID són 0, cosa que indica que aquest procés pertany a l'usuari root.

En qualsevol directori numerat, tindreu una estructura de fitxers similar. Les més importants, i les seves descripcions, són les següents:

  1. cmdline: línia d'ordres del procés
  2. entorn – variables ambientals
  3. fd: descriptors de fitxers
  4. límits: conté informació sobre els límits del procés
  5. muntatges: informació relacionada

També notareu una sèrie d'enllaços al directori numerat:

  1. cwd: un enllaç al directori de treball actual del procés
  2. exe: enllaç a l'executable del procés
  3. arrel: enllaç al directori de treball del procés

Això us hauria de començar a familiaritzar-vos amb el directori /proc. També hauria de proporcionar informació sobre com una sèrie d'ordres obtenen la seva informació, com ara el temps d'activitat, lsof, mount i ps, només per citar-ne algunes.