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:
- /proc/cmdline: informació de la línia d'ordres del nucli.
- /proc/console: informació sobre les consoles actuals, inclosa tty.
- /proc/devices: controladors de dispositiu configurats actualment per al nucli en execució.
- /proc/dma: informació sobre els canals DMA actuals.
- /proc/fb – Dispositius de framebuffer.
- /proc/filesystems: sistemes de fitxers actuals suportats pel nucli.
- /proc/iomem: mapa actual de memòria del sistema per als dispositius.
- /proc/ioports: regions de ports registrades per a la comunicació d'entrada i sortida amb el dispositiu.
- /proc/loadavg: mitjana de càrrega del sistema.
- /proc/locks: fitxers bloquejats actualment pel nucli.
- /proc/meminfo: informació sobre la memòria del sistema (vegeu l'exemple anterior).
- /proc/misc: controladors diversos registrats per a diversos dispositius principals.
- /proc/modules: mòduls del nucli carregats actualment.
- /proc/mounts: llista de tots els muntatges en ús pel sistema.
- /proc/partitions: informació detallada sobre les particions disponibles per al sistema.
- /proc/pci: informació sobre cada dispositiu PCI.
- /proc/stat: Registre o diverses estadístiques conservades de l'últim reinici.
- /proc/swap: informació sobre l'espai d'intercanvi.
- /proc/uptime: informació del temps de funcionament (en segons).
- /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:
- cmdline: línia d'ordres del procés
- entorn – variables ambientals
- fd: descriptors de fitxers
- límits: conté informació sobre els límits del procés
- muntatges: informació relacionada
També notareu una sèrie d'enllaços al directori numerat:
- cwd: un enllaç al directori de treball actual del procés
- exe: enllaç a l'executable del procés
- 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.