GNU/Linux >> Linux Esercitazione >  >> Linux

Risolvere i problemi utilizzando il filesystem proc su Linux

Il processo il filesystem è una caratteristica importante di Linux che non puoi ignorare. processo è un filesystem pseudo o virtuale che fornisce un'interfaccia alle strutture di dati del kernel. In altre parole, proc non è un vero filesystem nel senso del mondo reale; piuttosto, risiede solo in memoria e non su un disco. Viene montato automaticamente dal sistema.

La maggior parte dei suoi contenuti sono file e directory normali, quindi puoi utilizzare la maggior parte dei normali strumenti Linux per navigare nel proc filesystem. Gli esempi in questo articolo dovrebbero essere eseguiti allo stesso modo su qualsiasi distribuzione Linux. Il mio sistema utilizza:

$ cat /etc/redhat-release 
Red Hat Enterprise Linux Server versione 7.8 (Maipo)
$
 
$ uname  -r
3.10.0- 1127.el7.x86_64
$

Utilizzo di base del processo

Per scoprire dove si trova il /proc risiede il filesystem, esegui il mount comando e cerca proc . Qui puoi vedere che proc è montato su /proc directory:

$ monta | grep proc 
proc su /proc type proc (rw,nosuid,nodev,noexec,relatime)
systemd-1 su /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=26, pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=9506)
nfsd su /proc/fs/nfsd tipo nfsd (rw,relatime)
binfmt_misc su /proc/ sys/fs/binfmt_misc tipo binfmt_misc (rw,relatime)
$

Passa a /proc directory ed esplorarlo. Vedrai molte directory con numeri; i numeri sono solo ID di processo (PID) per i processi in esecuzione. I file con i nomi sono file generali applicabili a livello di sistema e non correlati a un processo specifico:

 $ cd / proc / 
$ PWD
/ PROC
$ ls
1 157 22827 3413 3618 384 4709 512 511571 66 741 798 88 88 consolle Keys SCSI
10 15868 23 3340 3414 362 385444414 362 385 4768 513 5581 6723 513 5581 6723 742 799 880 CPUINFO Self Key-utenti
101 15900 23323 3341 3415 3622 39 4769 514 56 68 7469 514 56 68 7466 514 56 68 7466 8 891 Crypto KMSG SLABINFO
1033 16 23370 3342 346 363 392 4770 515 5637 69 747 80 9 Dispositivi KpageCount Softirqs
104 17 23380 3343 3467 3338344 3467 364 394 48 516 5652 7 75 800 906 Diskstats Kpageflags stat
10416 17580 23383 3344 347 365 4 4804 517 57 70 76 8367 928 DMA Loadavg Swap
105 18 23469 3346 349 37 40 4805 518 587070 77 839 96 96 Driver Locks Sys
106 19 23491 3365 35 37 4 4094 4807 519 59 71 78 840 98 Execdomains MDSTAT Sysrq-trigger
107 2 23524 3366 3375 4096 482 52 6 7199 783 842 9838 783 842 9838 fb meminfo sysvipc
11 20767 23527 3392 352 376 41 483 53 601 € 784 8446 99 Filesystems MISC Timer_list
11412 21 24 3397 3523 377 4180 49 5347 61 73 785 85 85 993 Moduli FS Timer_stats
12 21014 26 3398 358 378 42 494 5348 62 735 786 86 994 Interrupt Moni /> 120 21035 24 34 359 379 428 459 379 428 495 54 624 736 79 869 9970 Iomem MTRR Tempo di attività
1263 21059 28 3408 36 38 43 508 5421 38 43 508 5421 625 737 793 87 ACPI Ioports Versione netta
1265 21083 29 3409 360 380 44    509   5463  63    738   794   870   buddyinfo  ipmi      PageTypeInfo VMALLocinfo
1272 22 30 3410 3602 381 30 3410 3602 381 45 51 5464 636 739 795 874 874 Bus irq partitions vmstat
13 22055 3411 3603 382 44 3411 3603 382 44 3411 3603 382 44 510 5500 64 74 74 796 878 cgroups Kallsyms Sched_debug ZoneInfo
14 22074 32     3412  361   383   47    511   5519  65    740   797   879   cmdline    kcore        schedstat
$

Inizia esplorando alcuni file generali a livello di sistema. Ad esempio, /proc/cpuinfo mostra informazioni sulla CPU del sistema, in particolare marca, modello, numero di core, velocità, flag della CPU, ecc.:

$ cat /proc/cpuinfo 

Allo stesso modo, /proc/meminfo fornisce informazioni sulla memoria principale o sulla RAM del sistema. Fornisce inoltre statistiche aggiuntive, come la quantità di memoria utilizzata, libera e così via:

$ cat /proc/meminfo 

Per visualizzare tutti i moduli del kernel caricati, guarda /proc/modules file:

$ cat /proc/modules 

Per vedere quali filesystem sono supportati dal tuo sistema, guarda /proc/filesystems :

$ cat /proc/filesystems 

Quindi, guarda i file per processo; ad esempio, sistema di sistema , che ha un PID di 1:

$ ps aux | grep -i systemd | head -1
root         1  0.0  0.0 195976  9088 ? Ss   Mar03   0:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
$

Passa alla directory denominata 1 all'interno di /proc e guarda cosa c'è. Sono presenti molti file e i loro nomi sono in qualche modo autoesplicativi:

$ cd /proc/1
$ pwd
/proc/1
$

$ ls
attr        cmdline          environ  io         mem         ns             pagemap      sched Attività Stack
Autogroup Comm EXE Limits MountInfo Numa_maps Patch_State Schedat Timer Statistiche
Auxv Coredump_Filter FD Loginuid supporti OOM_ADJ Personality SessityID Statm Uid_Map
CGUPUT CPUSET FDINFO MAP_FILES MOUNTSTATS OOM_SCORE PROJID_MAP STATIGROUTS STATO WCHAN
CLEAR_REFS CWD gid_map  maps       net         oom_score_adj  root         smaps      syscall
$

Per scoprire se questi file sono presenti per ciascuno dei processi, seleziona l'ID della shell corrente. Puoi ottenere queste informazioni eseguendo echo $$ . $$ è una variabile speciale che salva il PID della shell corrente. Vai a /proc e cd nella rubrica con lo stesso numero del PID. I file sono quasi identici a quelli per PID 1 o systemd:

$ echo $$
21059
$
$ cd /proc/21059
$ pwd
/proc/21059
$
$ ls
attr cmdline ambientali IO MEM NS PAGEMAP SCHED STACK Task
AUTOGROUND Comm EXE Limits MountInfo Numa_maps Patch_State Schedat STATI TIMERS
AUXV COREDUMP_FILTER FD Loginuid supporti oom_adj personalità sessityid stam uid_map fdinfo   map_files  mountstats  oom_score      projid_map   setgroups  status   wchan
clear_refs  cwd              gid_map  maps      net         oom_score_adj  root       /> $ pre smaps      syscall<     syscall

Per vedere cosa contengono questi file, esegui un processo di lunga durata. Apri un terminale ed esegui tty comando per vedere quale terminale stai usando. Quindi digita il gatto comando e premi Invio . Questo comando si siederà e attenderà il tuo input:

$ tty
/dev/pts/2
$
$ cat

Apri un altro terminale e trova il PID di cat utilizzando il pgrep comando:

$ pgrep cat
24335
$

Ora, esplora il primo file per processo, cmdline . Questo file mostra come viene eseguita la riga di comando, se vengono utilizzati parametri, ecc.:

$ cat /proc/24335/cmdline 
cat$

Quindi, guarda la directory chiamata cwd , che è una specie di collegamento simbolico (collegamento simbolico) alla directory in cui si trova il cat il comando è stato eseguito; in questo caso, è /root :

$ ls -l  /proc/24335/cwd
lrwxrwxrwx. 1 radice radice 0 4 marzo 03:35 /proc/24335/cwd -> /root
$

Se viene eseguito un file binario e viene generato un processo, per impostazione predefinita vengono aperti alcuni file. In generale, apre uno standard in (stdin ), uscita standard (stdout ) e un errore standard (stderr ). Se elenchi fd directory in /proc/ seguito dal PID, puoi vedere che restituisce tre link simbolici, tutti rivolti al terminale (pts2 ) utilizzato per eseguire il comando:

$ ls -l  /proc/24335/fd/
totale 0
lrwx------. 1 radice radice 64 4 marzo 03:35 0 -> /dev/pts/2
lrwx------. 1 radice radice 64 4 marzo 03:35 1 -> /dev/pts/2
lrwx------. 1 radice radice 64 4 marzo 03:35 2 -> /dev/pts/2
$

Un altro file importante è exe , che è un collegamento simbolico che punta al percorso assoluto del binario che è stato eseguito. In questo caso, è il percorso del gatto comando:

$ ls -l /proc/24335/exe
lrwxrwxrwx. 1 radice radice 0 4 marzo 03:35 /proc/24335/exe -> /usr/bin/cat
$

Allo stesso modo, se gatto l'ambiente per-process, puoi visualizzare tutte le variabili di ambiente definite per il cat processo:

$ cat /proc/24335/environ 

File importanti in proc

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

Gli esempi sopra fornire molte informazioni sui processi in esecuzione e sul sistema in generale che possono aiutare nel debug e nella risoluzione dei problemi.

File importanti per processo

I seguenti sono file importanti per processo da cercare in /proc/ filesystem:

  • /proc/$pid/cmdline Contiene la riga di comando completa per il processo
  • /proc/$pid/cwd Collegamento simbolico alla directory di lavoro corrente del processo
  • /proc/$pid/environ Contiene l'ambiente iniziale impostato all'avvio del programma
  • /proc/$pid/exe Collegamento simbolico al percorso del file che è stato eseguito
  • /proc/$pid/fd Sottodirectory per elencare i file che sono stati aperti dal processo
  • /proc/$pid/io Contiene le statistiche di I/O per il processo
  • /proc/$pid/limits Visualizza il limite delle risorse di processo
  • /proc/$pid/maps Aree di memoria attualmente mappate e autorizzazioni di accesso
  • /proc/$pid/stack Traccia delle chiamate di funzione nello stack del kernel del processo
  • /proc/$pid/stat Informazioni sullo stato del processo
  • /proc/$pid/task/ Directory che contiene informazioni sui thread

File importanti a livello di sistema

Ecco un elenco di importanti file generali (cioè non specifici per nessun processo):

  • /proc/cmdline Argomenti passati al kernel Linux durante l'avvio
  • /proc/cpuinfo Informazioni relative alla CPU
  • /proc/meminfo Statistiche sull'utilizzo della memoria
  • /proc/filesystems Elenco dei filesystem supportati dal kernel
  • /proc/modules Moduli del kernel attualmente caricati
  • /proc/partitions Informazioni su ciascuna partizione del sistema
  • /proc/swaps Informazioni sullo spazio di scambio sul sistema
  • /proc/self Directory si riferisce al processo di accesso a /proc filesystem
  • /proc/slabinfo Informazioni sulle cache del kernel
  • /proc/sys Vari file e sottodirectory sulle variabili del kernel

Ulteriori passaggi

Questa panoramica del proc il filesystem tocca solo le possibilità che offre. Per ulteriori informazioni, controlla proc 's pagina man accedendo al man proc comando o accedendo alla versione online della pagina man di proc.


Linux
  1. Un'introduzione all'uso di tcpdump nella riga di comando di Linux

  2. Usando la forza sulla riga di comando di Linux

  3. Controlla lo spazio su disco in Linux usando df e du Commands

  4. Utilizzo del comando mkfs in Linux per formattare il filesystem su un disco o una partizione

  5. Dove si trova il filesystem del sottosistema Linux in Windows 10?

Una guida per principianti alla navigazione nel filesystem Linux

Come eseguire il backup del filesystem Linux utilizzando il comando dump

Utilizzando l'antivirus ClamAV su Ubuntu 18.04

Tutorial sull'uso del comando Timeout su Linux

Tutorial sull'utilizzo dell'ultimo comando nel terminale Linux

Utilizzo di vmstat per risolvere i problemi di prestazioni in Linux