Linux Professional Institute Learning Logo.
Torna al contenuto principale
  • Home
    • Tutte le Risorse
    • LPI Learning Materials
    • Collabora
    • Publishing Partner
    • Diventa un Publishing Partner
    • FAQ
    • Collaboratori
    • Contatto
  • LPI.org
4.3 Lezione 2
Argomento 1: La Comunità Linux e una Carriera nell'Open Source
1.1 Evoluzione di Linux e Sistemi Operativi più Diffusi
  • 1.1 Lezione 1
1.2 Principali Applicazioni Open Source
  • 1.2 Lezione 1
1.3 Software e Licenze Open Source
  • 1.3 Lezione 1
1.4 Competenze ICT - Lavorare con Linux
  • 1.4 Lezione 1
Argomento 2: Trovare il Proprio Modo di Operare su un Sistema Linux
2.1 Nozioni di Base sulla Command Line
  • 2.1 Lezione 1
  • 2.1 Lezione 2
2.2 Utilizzo della Command Line per Ottenere Aiuto
  • 2.2 Lezione 1
2.3 Utilizzo di Directory e Elenchi di File
  • 2.3 Lezione 1
  • 2.3 Lezione 2
2.4 Creazione, Spostamento ed Eliminazione di File
  • 2.4 Lezione 1
Argomento 3: Il Potere della Command Line
3.1 Archiviazione dei File sulla Command Line
  • 3.1 Lezione 1
3.2 Ricerca ed Estrazione di Dati dai File
  • 3.2 Lezione 1
  • 3.2 Lezione 2
3.3 Trasformare i Comandi in uno Script
  • 3.3 Lezione 1
  • 3.3 Lezione 2
Argomento 4: Il Sistema Operativo Linux
4.1 Scelta di un Sistema Operativo
  • 4.1 Lezione 1
4.2 Comprendere l'Hardware del Computer
  • 4.2 Lezione 1
4.3 Dove Sono Memorizzati i Dati
  • 4.3 Lezione 1
  • 4.3 Lezione 2
4.4 Il Tuo Computer in Rete
  • 4.4 Lezione 1
Argomento 5: Sicurezza e Permessi sui File
5.1 Sicurezza di Base e Identificazione dei Tipi di Utente
  • 5.1 Lezione 1
5.2 Creazione di Utenti e Gruppi
  • 5.2 Lezione 1
5.3 Gestione delle Autorizzazioni e delle Proprietà dei File
  • 5.3 Lezione 1
5.4 Directory e File Speciali
  • 5.4 Lezione 1
How to get certified
  1. Argomento 4: Il Sistema Operativo Linux
  2. 4.3 Dove Sono Memorizzati i Dati
  3. 4.3 Lezione 2

4.3 Lezione 2

Certificazione:

Linux Essentials

Versione:

1.6

Argomento:

4 Il Sistema Operativo Linux

Obiettivo:

4.3 Dove Sono Memorizzati i Dati

Lezione:

2 di 2

Introduzione

Dopo aver esplorato i programmi e i loro file di configurazione, in questa lezione impareremo come i comandi vengano eseguiti come processi. Allo stesso modo, ci occuperemo dei messaggi di sistema, dell’uso del kernel ring buffer e di come l’avvento di systemd e del suo demone di journal, journald, abbiano cambiato il tradizionale modo di trattare i log di sistema.

Processi

Ogni volta che un utente lancia un comando, viene eseguito un programma e vengono generati uno o più processi.

I processi sono organizzati gerarchicamente. Dopo che il kernel è stato caricato in memoria durante l’avvio, viene avviato il primo processo che, a sua volta, avvia altri processi che, a loro volta, possono avviare altri processi. Ogni processo ha un identificativo univoco (PID) e un identificativo del processo padre (PPID). Questi sono numeri interi positivi assegnati in ordine sequenziale.

Esplorare i Processi in Modo Dinamico: top

Puoi ottenere un elenco dinamico di tutti i processi in esecuzione con il comando top:

$ top

top - 11:10:29 up  2:21,  1 user,  load average: 0,11, 0,20, 0,14
Tasks:  73 total,   1 running,  72 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0,0 us,  0,3 sy,  0,0 ni, 99,7 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
KiB Mem :  1020332 total,   909492 free,    38796 used,    72044 buff/cache
KiB Swap:  1046524 total,  1046524 free,        0 used.   873264 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
   436 carol     20   0   42696   3624   3060 R  0,7  0,4   0:00.30 top
     4 root      20   0       0      0      0 S  0,3  0,0   0:00.12 kworker/0:0
   399 root      20   0   95204   6748   5780 S  0,3  0,7   0:00.22 sshd
     1 root      20   0   56872   6596   5208 S  0,0  0,6   0:01.29 systemd
     2 root      20   0       0      0      0 S  0,0  0,0   0:00.00 kthreadd
     3 root      20   0       0      0      0 S  0,0  0,0   0:00.02 ksoftirqd/0
     5 root       0 -20       0      0      0 S  0,0  0,0   0:00.00 kworker/0:0H
     6 root      20   0       0      0      0 S  0,0  0,0   0:00.00 kworker/u2:0
     7 root      20   0       0      0      0 S  0,0  0,0   0:00.08 rcu_sched
     8 root      20   0       0      0      0 S  0,0  0,0   0:00.00 rcu_bh
     9 root      rt   0       0      0      0 S  0,0  0,0   0:00.00 migration/0
    10 root       0 -20       0      0      0 S  0,0  0,0   0:00.00 lru-add-drain
    (...)

Come mostrato nell’esempio sopra riportato, top fornisce anche informazioni sulla memoria e sul consumo di CPU dell’intero sistema così pure per ogni processo.

top consente all’utente alcune interazioni.

Per impostazione predefinita, l’output viene ordinato, in ordine descrescente, in base alla percentuale del tempo di CPU utilizzato da ciascun processo. Questo comportamento può essere modificato premendo i seguenti tasti all’interno di top:

M

Ordina per utilizzo della memoria.

N

Ordina in base al numero di ID di processo.

T

Ordina per tempo di esecuzione.

P

Ordina per percentuale di utilizzo della CPU.

Per cambiare ordinamento decrescente/crescente, basta premere R.

Tip

Una versione più carina e più facile da utilizzare di top è htop. Un’altra alternativa, forse più esaustiva, è atop. Se non sono già installati sul tuo sistema, ti invito a utilizzare il tuo gestore di pacchetti per installarli e provarli.

Un’Istantanea dei Processi: ps

Un altro comando molto utile per ottenere informazioni sui processi è ps. Mentre top fornisce informazioni dinamiche, quelle di ps sono statiche.

Se invocato senza opzioni, l’output di ps è abbastanza soddisfacente e si riferisce solo ai processi collegati alla shell corrente:

$ ps
  PID TTY          TIME CMD
 2318 pts/0    00:00:00 bash
 2443 pts/0    00:00:00 ps

Le informazioni visualizzate includono l’identificativo di processo (PID), il terminale in cui viene eseguito il processo (TTY), il tempo di CPU utilizzato dal processo (TIME) e il comando che ha avviato il processo (CMD).

Un’opzione utile per ps è -f che mostra l’elenco in formato completo:

$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
carol     2318  1682  0 08:38 pts/1    00:00:00 bash
carol     2443  2318  0 08:46 pts/1    00:00:00 ps -f

In combinazione con altre opzioni, -f mostra la relazione tra i processi “padre” e “figlio”:

$ ps -uf
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
carol       2318  0.0  0.1  21336  5140 pts/1    Ss   08:38   0:00 bash
carol       2492  0.0  0.0  38304  3332 pts/1    R+   08:51   0:00  \_ ps -uf
carol       1780  0.0  0.1  21440  5412 pts/0    Ss   08:28   0:00 bash
carol       2291  0.0  0.7 305352 28736 pts/0    Sl+  08:35   0:00  \_ emacs index.en.adoc -nw
(...)

Allo stesso modo, ps può mostrare la percentuale di memoria utilizzata quando viene invocato con l’opzione -v:

$ ps -v
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
 1163 tty2     Ssl+   0:00      1    67 201224 5576  0.1 /usr/lib/gdm3/gdm-x-session (...)
 (...)
Note

Un altro comando, carino dal punto di vista estetico, che mostra la gerarchia dei processi è pstree incluso in tutte le principali distribuzioni.

Informazioni sui Processi nella Directory /proc

Abbiamo già visto il filesystem /proc. /proc include una sottodirectory numerata per ogni processo in esecuzione nel sistema (il numero è il PID del processo):

carol@debian:~# ls /proc
1    108  13   17   21   27   354  41   665  8    9
10   109  14   173  22   28   355  42   7    804  915
103  11   140  18   23   29   356  428  749  810  918
104  111  148  181  24   3    367  432  75   811
105  112  149  19   244  349  370  433  768  83
106  115  15   195  25   350  371  5    797  838
107  12   16   2    26   353  404  507  798  899
(...)

Pertanto, tutte le informazioni su un particolare processo sono incluse nella sua directory. Elenchiamo il contenuto del primo processo, ovvero quello il cui PID è 1 (l’output è stato troncato per una migliore leggibilità):

# ls /proc/1/
attr        cmdline          environ  io        mem	      ns
autogroup   comm             exe      limits    mountinfo numa_maps
auxv        coredump_filter  fd       loginuid  mounts    oom_adj
...

Puoi controllare, per esempio, l’eseguibile del processo:

# cat /proc/1/cmdline; echo
/sbin/init

Come puoi vedere il binario che ha avviato la gerarchia dei processi è /sbin/init.

Note

I comandi possono essere concatenati con il punto e virgola (;). Abbiamo utilizzato il comando echo nell’esempio sopra riportato per stampare un carattere di nuova riga. Prova a eseguire semplicemente cat /proc/1/cmdline per vedere la differenza.

Il Carico di Sistema

In un sistema ogni processo può potenzialmente consumare risorse. Il così detto carico di sistema cerca di aggregare il carico complessivo del sistema in un unico indicatore numerico. Puoi vedere il carico corrente con il comando uptime:

$ uptime
 22:12:54 up 13 days, 20:26,  1 user,  load average: 2.91, 1.59, 0.39

Le ultime tre cifre indicano rispettivamente il carico medio del sistema nell’ultimo minuto (2.91), negli ultimi cinque minuti (1.59) e negli ultimi quindici minuti (0.39).

Ciascuno di questi numeri indica quanti processi erano in attesa o delle risorse della CPU o del completamento delle operazioni di input/output. Ciò significa che questi processi erano pronti per essere eseguiti se avessero ricevuto le rispettive risorse.

Log di Sistema e Messaggistica di Sistema

Non appena il kernel e i processi iniziano a essere eseguiti e a comunicare tra loro, vengono prodotte molte informazioni. La maggior parte viene inviata ai file: i cosiddetti file di log o, semplicemente, log.

Senza i log, la ricerca di un evento accaduto su un server darebbe molti grattacapi agli amministratori di sistema: da qui l’importanza di avere un modo standardizzato e centralizzato per tenere traccia di tutti gli eventi di sistema. Inoltre, i log sono fondamentali e danno indicazioni quando si tratta di individuare e risolvere problemi e per la sicurezza, nonché sono fonti di dati affidabili per comprendere le statistiche di sistema e fare previsioni future.

Log con il Demone syslog

Tradizionalmente, i messaggi di sistema venivano gestiti dallo strumento di log standard, syslog, o da uno qualsiasi dei suoi derivati: syslog-ng o rsyslog. Il demone di log raccoglie i messaggi da altri servizi e programmi e li memorizza in file di log, tipicamente sotto /var/log. Tuttavia, alcuni servizi si occupano dei propri log (considera, per esempio, il server web Apache HTTPD). Allo stesso modo, il kernel Linux utilizza un ring buffer in memoria per archiviare i propri messaggi di log.

File di Log in /var/log

Poiché i log sono dati che variano nel tempo, normalmente si trovano in /var/log.

Se esplori /var/log, ti renderai conto che i nomi dei log sono, in una certo modo, abbastanza autoesplicativi. Alcuni esempi includono:

/var/log/auth.log

Memorizza informazioni sull’autenticazione.

/var/log/kern.log

Memorizza informazioni del kernel.

/var/log/syslog

Memorizza informazioni di sistema.

/var/log/messages

Memorizza i dati di sistema e delle applicazioni.

Note

Il nome preciso e il contenuto dei file di log possono variare a seconda della distribuzione Linux utilizzata .

Accedere ai File di Log

Quando esplori i file di log, ricorda di essere root (se non hai i permessi di lettura) e usa un paginatore come less;

# less /var/log/messages
Jun  4 18:22:48 debian liblogging-stdlog:  [origin software="rsyslogd" swVersion="8.24.0" x-pid="285" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Jun 29 16:57:10 debian kernel: [    0.000000] Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.130-2 (2018-10-27)
Jun 29 16:57:10 debian kernel: [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet

In alternativa, puoi usare tail con l’opzione -f per leggere i messaggi più recenti del file e mostrare dinamicamente le nuove righe man mano che vengono aggiunte:

# tail -f /var/log/messages
Jul  9 18:39:37 debian kernel: [    2.350572] RAPL PMU: hw unit of domain psys 2^-0 Joules
Jul  9 18:39:37 debian kernel: [    2.512802] input: VirtualBox USB Tablet as /devices/pci0000:00/0000:00:06.0/usb1/1-1/1-1:1.0/0003:80EE:0021.0001/input/input7
Jul  9 18:39:37 debian kernel: [    2.513861] Adding 1046524k swap on /dev/sda5.  Priority:-1 extents:1 across:1046524k FS
Jul  9 18:39:37 debian kernel: [    2.519301] hid-generic 0003:80EE:0021.0001: input,hidraw0: USB HID v1.10 Mouse [VirtualBox USB Tablet] on usb-0000:00:06.0-1/input0
Jul  9 18:39:37 debian kernel: [    2.623947] snd_intel8x0 0000:00:05.0: white list rate for 1028:0177 is 48000
Jul  9 18:39:37 debian kernel: [    2.914805] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready
Jul  9 18:39:39 debian kernel: [    4.937283] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
Jul  9 18:39:39 debian kernel: [    4.938493] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready
Jul  9 18:39:40 debian kernel: [    5.315603] random: crng init done
Jul  9 18:39:40 debian kernel: [    5.315608] random: 7 urandom warning(s) missed due to ratelimiting

L’output avrà il seguente formato:

  • Timestamp

  • Nome dell’host da cui proviene il messaggio

  • Nome del programma/servizio che ha generato il messaggio

  • Il PID del programma che ha generato il messaggio

  • Descrizione del fatto che si è verificato

La maggior parte dei file di log sono scritti in testo normale; tuttavia, alcuni possono contenere dati binari come /var/log/wtmp, che memorizza i dati relativi agli accessi riusciti. Puoi utilizzare il comando file per determinare di volta in volta qual è il caso:

$ file /var/log/wtmp
/var/log/wtmp: dBase III DBT, version number 0, next free block index 8

Questi file vengono normalmente letti utilizzando comandi speciali. last viene utilizzato per interpretare i dati in /var/log/wtmp:

$ last
carol    tty2         :0               Thu May 30 10:53   still logged in
reboot   system boot  4.9.0-9-amd64    Thu May 30 10:52   still running
carol    tty2         :0               Thu May 30 10:47 - crash  (00:05)
reboot   system boot  4.9.0-9-amd64    Thu May 30 09:11   still running
carol    tty2         :0               Tue May 28 08:28 - 14:11  (05:42)
reboot   system boot  4.9.0-9-amd64    Tue May 28 08:27 - 14:11  (05:43)
carol    tty2         :0               Mon May 27 19:40 - 19:52  (00:11)
reboot   system boot  4.9.0-9-amd64    Mon May 27 19:38 - 19:52  (00:13)
carol    tty2         :0               Mon May 27 19:35 - down   (00:03)
reboot   system boot  4.9.0-9-amd64    Mon May 27 19:34 - 19:38  (00:04)
Note

Analogamente a /var/log/wtmp, / var/log/btmp memorizza le informazioni sui tentativi di accesso falliti e il comando speciale per leggerne il contenuto è lastb.

Rotazione dei Log

I file di log possono crescere molto in poche settimane o in pochi mesi e occupare tutto lo spazio libero sul disco. Per risolvere questo problema, viene utilizzata l’utility logrotate. Implementa la rotazione o il ciclo dei log che implica azioni come rinominare i file di log, archiviarli e/o comprimerli, a volte inviandoli tramite e-mail all’amministratore di sistema, ed eventualmente eliminandoli man mano che invecchiano. Esistono diverse convenzioni utilizzate per assegnare i nomi a questi file di log ruotati (per esempio l’aggiunta di un suffisso con la data); tuttavia, è pratica comune aggiungere semplicemente un suffisso con un numero intero:

# ls /var/log/apache2/
access.log  error.log  error.log.1  error.log.2.gz  other_vhosts_access.log

Nota come error.log.2.gz sia già stato compresso con gzip (da qui il suffisso .gz).

Il Kernel Ring Buffer

Il kernel ring buffer è una struttura dati a dimensione fissa che registra i messaggi del kernel sia durante il processo di avvio sia in tempo reale. La funzione di questo buffer è molto importante e consiste nel registrare tutti i messaggi del kernel generati all’avvio quando syslog non è ancora disponibile. Il comando dmesg stampa il kernel ring buffer (che era anche memorizzato in /var/log/dmesg). A causa delle grandi dimensioni del ring buffer, questo comando viene normalmente utilizzato in combinazione con l’utilità di filtraggio del testo grep o con un paginatore come less. Per esempio, per cercare i messaggi di avvio:

$ dmesg | grep boot
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet
[    0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet
[    0.144986] AppArmor: AppArmor disabled by boot time parameter
(...)
Note

Man mano che il kernel ring buffer cresce nel tempo con nuovi messaggi, quelli più vecchi scompaiono.

Il Journal di Sistema: systemd-journald

A partire dal 2015, systemd ha sostituito SysV Init come gestore di sistema e dei servizi de facto nella maggior parte delle principali distribuzioni Linux. Di conseguenza, il demone del journal — journald — è diventato il componente di log standard, sostituendo syslog per la maggior parte degli aspetti. I dati non vengono più memorizzati in testo normale ma in formato binario. Quindi, l’utility journalctl è necessaria per leggere i log. Inoltre, journald è compatibile con syslog e può essere integrato con esso.

journalctl è l’utility usata per leggere e interrogare il database del journal di systemd. Se invocato senza opzioni, stampa l’intero journal:

# journalctl
-- Logs begin at Tue 2019-06-04 17:49:40 CEST, end at Tue 2019-06-04 18:13:10 CEST. --
jun 04 17:49:40 debian systemd-journald[339]: Runtime journal (/run/log/journal/) is 8.0M, max 159.6M, 151.6M free.
jun 04 17:49:40 debian kernel: microcode: microcode updated early to revision 0xcc, date = 2019-04-01
Jun 04 17:49:40 debian kernel: Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) )
Jun 04 17:49:40 debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet
(...)

Tuttavia, se invocato con le opzioni -k o --dmesg, è equivalente all’uso del comando dmesg:

# journalctl -k
[    0.000000] Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.168-1+deb9u2 (2019-05-13)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet
(...)

Altre opzioni interessanti per journalctl sono:

-b, --boot

Mostra le informazioni di avvio.

-u

Mostra i messaggi relativi a un’unità specificata. Grosso modo, una unità può essere definita come una qualsiasi risorsa gestita da systemd. Per esempio, il comando journalctl -u apache2.service viene utilizzato per leggere i messaggi relativi al server web apache2.

-f

Mostra i messaggi più recenti del journal e continua a stampare le nuove voci man mano che vengono aggiunte al journal, in modo molto simile a tail -f.

Esercizi Guidati

  1. Dai un’occhiata al seguente elenco prodotto dal comando top e rispondi alle domande di seguito riportate:

    carol@debian:~$ top
    
    top - 13:39:16 up 31 min,  1 user,  load average: 0.12, 0.15, 0.10
    Tasks:  73 total,   2 running,  71 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  1.1 us,  0.4 sy,  0.0 ni, 98.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  1020332 total,   698700 free,   170664 used,   150968 buff/cache
    KiB Swap:  1046524 total,  1046524 free,        0 used.   710956 avail Mem
    
      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
      605 nobody    20   0 1137620 132424  34256 S  6.3 13.0   1:47.24 ntopng
      444 www-data  20   0  364780   4132   2572 S  0.3  0.4   0:00.44 apache2
      734 root      20   0   95212   7004   6036 S  0.3  0.7   0:00.36 sshd
      887 carol     20   0   46608   3680   3104 R  0.3  0.4   0:00.03 top
        1 root      20   0   56988   6688   5240 S  0.0  0.7   0:00.42 systemd
        2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
        3 root      20   0       0      0      0 S  0.0  0.0   0:00.09 ksoftirqd/0
        4 root      20   0       0      0      0 S  0.0  0.0   0:00.87 kworker/0:0
    (...)
    • Quali processi sono stati avviati dall’utente carol?

    • Quale directory virtuale in /proc dovresti visitare per cercare i dati riguardanti il ​​comando top?

    • Quale processo è stato eseguito per primo? Come l’hai capito?

    • Completa la seguente tabella specificando in quale zona dell’output di top si trovano le seguenti informazioni:

      Informazioni su …​ Area di Riepilogo Area delle Attività

      Memoria

      Swap

      PID

      Tempo di CPU

      Comandi

  2. Quale comando viene utilizzato per leggere i seguenti log binari?

    • /var/log/wtmp

    • /var/log/btmp

    • /run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal

  3. Quali comandi potresti utilizzare, in combinazione con grep, per scoprire le seguenti informazioni sul tuo sistema Linux?

    • Quando il sistema è stato riavviato l’ultima volta (wtmp)

    • Quali dischi rigidi sono installati (kern.log)

    • Quando è avvenuto l’ultimo login (auth.log)

  4. Indica i due comandi che potresti utilizzare per visualizzare il kernel ring buffer.

  5. Indica dove puoi trovare i seguenti messaggi di log:

    • Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'

      /var/log/auth.log

      /var/log/kern.log

      /var/log/syslog

      /var/log/messages

    • Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver

      /var/log/auth.log

      /var/log/kern.log

      /var/log/syslog

      /var/log/messages

    • Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)

      /var/log/auth.log

      /var/log/kern.log

      /var/log/syslog

      /var/log/messages

    • Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…​

      /var/log/auth.log

      /var/log/kern.log

      /var/log/syslog

      /var/log/messages

  6. Usa journalctl per trovare informazioni sulle seguenti unità:

    Unità Comando

    ssh

    networking

    rsyslog

    cron

Esercizi Esplorativi

  1. Prendi nuovamente in considerazione l’output del comando top mostrato negli esercizi guidati e rispondi alle seguenti domande:

    • Quali sono i due passaggi per terminare il server web apache?

    • Nell’area di riepilogo, come puoi visualizzare le informazioni sulla memoria fisica e di swap utilizzando delle barre di avanzamento?

    • Ora, ordina i processi in base all’utilizzo della memoria:

    • Ora che le informazioni sulla memoria sono visualizzate con delle barre di avanzamento e che i processi sono ordinati in base all’utilizzo della memoria, salva queste configurazioni in modo da averle come predefinite per la prossima volta che utilizzerai top:

    • Quale file memorizza le impostazioni di configurazione di top? Dove si trova? Come puoi verificarne l’esistenza?

  2. Approfondisci il comando exec in Bash. Prova a mostrarne il funzionamento: avvia una sessione Bash e trova il processo Bash con ps; esegui poi exec /bin/sh e cerca di nuovo il processo con lo stesso PID.

  3. Segui questi passaggi per esplorare gli eventi del kernel e la gestione dinamica dei dispositivi da parte di udev:

    • Collega un’unità USB al tuo computer. Esegui dmesg e presta attenzione alle ultime righe. Qual è la riga più recente?

    • Tenendo presente l’output del comando precedente, esegui ls /dev/sd* e assicurati che la tua unità USB sia visualizzata nell’elenco. Qual è l’output?

    • Ora rimuovi l’unità USB ed esegui di nuovo dmesg. Che cosa mostra la riga più recente?

    • Esegui di nuovo ls /dev/sd* e assicurati che il tuo dispositivo sia scomparso dall’elenco. Qual è l’output?

Sommario

Nel contesto dell’archiviazione dei dati, in questa lezione sono stati discussi i seguenti argomenti: gestione dei processi e log e messaggistica di sistema.

Per quanto riguarda la gestione dei processi, abbiamo appreso quanto segue:

  • I programmi generano processi e i processi sono organizzati gerarchicamente;

  • Ogni processo ha un identificativo univoco (PID) e un identificativo del processo padre (PPID);

  • top è un comando molto utile per esplorare in modo dinamico e interattivo i processi in esecuzione in un sistema;

  • È possibile utilizzare ps per ottenere un’istantanea dei processi correnti in esecuzione in un sistema;

  • La directory /proc include delle directory per ogni processo in esecuzione nel sistema che prendono il nome dai relativi PID;

  • Il concetto di carico medio del sistema, che è molto utile per controllare l’utilizzo/sovraccarico della CPU.

Per quanto riguarda i log di sistema, dobbiamo ricordare che:

  • Un log è un file in cui vengono registrati gli eventi di sistema. I log sono preziosi per la risoluzione dei problemi;

  • I log sono stati tradizionalmente gestiti da servizi speciali come syslog, syslog-ng o rsyslog. Tuttavia, alcuni programmi utilizzano i propri demoni di log;

  • Poiché i log sono dati variabili, sono conservati in /var e, a volte, i loro nomi possono darti un’idea del loro contenuto (kern.log, auth.log, etc.);

  • La maggior parte dei log sono scritti in testo normale e possono essere letti con un qualsiasi editor di testo purché si disponga delle autorizzazioni appropriate. Tuttavia, alcuni di essi sono binari e devono essere letti utilizzando comandi speciali;

  • Per evitare problemi di spazio su disco, l’utility logrotate esegue la rotazione dei log;

  • Per quanto riguarda il kernel, utilizza una struttura dati circolare, il ring buffer, dove vengono conservati i messaggi di avvio (i vecchi messaggi scompaiono nel tempo);

  • Il gestore di sistema e dei servizi systemd ha sostituito System V init praticamente in tutte le distribuzioni e journald è diventato il servizio di log standard;

  • Per leggere il journal di systemd, è necessaria l’utility journalctl.

Comandi utilizzati in questa lezione:

cat

Concatena/stampa il contenuto di un file.

dmesg

Stampa il kernel ring buffer.

echo

Visualizza una riga di testo o una nuova riga.

file

Determina il tipo di file.

grep

Stampa le righe che hanno corrispondenza con un pattern.

last

Mostra un elenco degli ultimi utenti che hanno effettuato l’accesso.

less

Visualizza il contenuto di un file una pagina alla volta.

ls

Elenca il contenuto di una directory.

journalctl

Interroga il journal di systemd.

tail

Visualizza le ultime righe di un file.

Risposte agli Esercizi Guidati

  1. Dai un’occhiata al seguente elenco prodotto dal comando top e rispondi alle domande di seguito riportate:

    carol@debian:~$ top
    
    top - 13:39:16 up 31 min,  1 user,  load average: 0.12, 0.15, 0.10
    Tasks:  73 total,   2 running,  71 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  1.1 us,  0.4 sy,  0.0 ni, 98.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  1020332 total,   698700 free,   170664 used,   150968 buff/cache
    KiB Swap:  1046524 total,  1046524 free,        0 used.   710956 avail Mem
    
      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
      605 nobody    20   0 1137620 132424  34256 S  6.3 13.0   1:47.24 ntopng
      444 www-data  20   0  364780   4132   2572 S  0.3  0.4   0:00.44 apache2
      734 root      20   0   95212   7004   6036 S  0.3  0.7   0:00.36 sshd
      887 carol     20   0   46608   3680   3104 R  0.3  0.4   0:00.03 top
        1 root      20   0   56988   6688   5240 S  0.0  0.7   0:00.42 systemd
        2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
        3 root      20   0       0      0      0 S  0.0  0.0   0:00.09 ksoftirqd/0
        4 root      20   0       0      0      0 S  0.0  0.0   0:00.87 kworker/0:0
    (...)
    • Quali processi sono stati avviati dall’utente carol?

      Soluzione: Solo uno: top.

    • Quale directory virtuale in /proc dovresti visitare per cercare i dati riguardanti il ​​comando top?

      Soluzione: /proc/887

    • Quale processo è stato eseguito per primo? Come l’hai capito?

      Soluzione: systemd, poiché è quello con PID #1.

    • Completa la seguente tabella specificando in quale zona dell’output di top si trovano le seguenti informazioni:

      Informazioni su …​ Area di Riepilogo Area delle Attività

      Memoria

      Si

      Si

      Swap

      Si

      No

      PID

      No

      Si

      Tempo di CPU

      Si

      Si

      Comandi

      No

      Si

  2. Quale comando viene utilizzato per leggere i seguenti log binari?

    • /var/log/wtmp

      Soluzione: last

    • /var/log/btmp

      Soluzione: lastb

    • /run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal

      Soluzione: journalctl

  3. Quali comandi potresti utilizzare, in combinazione con grep, per scoprire le seguenti informazioni sul tuo sistema Linux?

    • Quando il sistema è stato riavviato l’ultima volta (wtmp)

      Soluzione: last

    • Quali dischi rigidi sono installati (kern.log)

      Soluzione: less /var/log/kern.log

    • Quando è avvenuto l’ultimo login (auth.log)

      Soluzione: less /var/log/auth.log

  4. Indica i due comandi che potresti utilizzare per visualizzare il kernel ring buffer.

    dmesg e journalctl -k (o anche journalctl --dmesg).

  5. Indica dove puoi trovare i seguenti messaggi di log:

    • Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'

      /var/log/auth.log

      /var/log/kern.log

      /var/log/syslog

      X

      /var/log/messages

    • Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver

      /var/log/auth.log

      /var/log/kern.log

      X

      /var/log/syslog

      /var/log/messages

      X

      Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)

      /var/log/auth.log

      X

      /var/log/kern.log

      /var/log/syslog

      /var/log/messages

    • Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…​

      /var/log/auth.log

      /var/log/kern.log

      /var/log/syslog

      /var/log/messages

      X

  6. Usa journalctl per trovare informazioni sulle seguenti unità:

    Unità Comando

    ssh

    journalctl -u ssh.service

    networking

    journalctl -u networking.service

    rsyslog

    journalctl -u rsyslog.service

    cron

    journalctl -u cron.service

Risposte agli Esercizi Esplorativi

  1. Prendi nuovamente in considerazione l’output del comando top mostrato negli esercizi guidati e rispondi alle seguenti domande:

    • Quali sono i due passaggi per terminare il server web apache?

      Prima premi k e poi indica un valore per kill.

    • Nell’area di riepilogo, come puoi visualizzare le informazioni sulla memoria fisica e di swap utilizzando delle barre di avanzamento?

      Premendo m una o due volte.

    • Ora, ordina i processi in base all’utilizzo della memoria:

      M

    • Ora che le informazioni sulla memoria sono visualizzate con delle barre di avanzamento e che i processi sono ordinati in base all’utilizzo della memoria, salva queste configurazioni in modo da averle come predefinite per la prossima volta che utilizzerai top:

      W

    • Quale file memorizza le impostazioni di configurazione di top? Dove si trova? Come puoi verificarne l’esistenza?

      Il file è ~/.config/procps/toprc e si trova nella directory home dell’utente (~). Dato che è un file nascosto (si trova in una directory il cui nome inizia con un punto), possiamo verificarne l’esistenza con ls -a (il comando elenca tutti i file). Questo file può essere generato premendo kbd:[Shift+W] mentre ci si trova in top.

  2. Approfondisci il comando exec in Bash. Prova a mostrarne il funzionamento: avvia una sessione Bash e trova il processo Bash con ps; esegui poi exec /bin/sh e cerca di nuovo il processo con lo stesso PID.

    exec sostituisce un processo con un altro comando. Nell’esempio di seguito riportato possiamo vedere che il processo Bash viene sostituito da /bin/sh (invece che dal diventare /bin/sh un processo figlio):

    $ echo $$
    19877
    $ ps auxf | grep 19877 | head -1
    carol  19877  0.0  0.0   7448  3984 pts/25   Ss   21:17   0:00  \_ bash
    $ exec /bin/sh
    sh-5.0$ ps auxf | grep 19877 | head -1
    carol  19877  0.0  0.0   7448  3896 pts/25   Ss   21:17   0:00  \_ /bin/sh
  3. Segui questi passaggi per esplorare gli eventi del kernel e la gestione dinamica dei dispositivi da parte di udev:

    • Collega un’unità USB al tuo computer. Esegui dmesg e presta attenzione alle ultime righe. Qual è la riga più recente?

      Dovresti ottenere qualcosa di simile a [ 1967.700468] sd 6:0:0:0: [sdb] Attached SCSI removable disk.

    • Tenendo presente l’output del comando precedente, esegui ls /dev/sd* e assicurati che la tua unità USB appaia nell’elenco. Qual è l’output?

      A seconda del numero di dispositivi collegati al tuo sistema, dovresti ottenere qualcosa di simile a /dev/sda /dev/sda1 /dev/sdb /dev/sdb1 /dev/sdb2. Nel nostro caso troviamo la nostra unità USB (/dev/sdb) e le sue due partizioni (/dev/sdb1 e /dev/sdb2).

    • Ora rimuovi l’unità USB ed esegui di nuovo dmesg. Che cosa mostra la riga più recente?

      Dovresti ottenere qualcosa di simile a [ 2458.881695] usb 1-9: USB disconnect, device number 6.

    • Esegui di nuovo ls /dev/sd* e assicurati che il tuo dispositivo sia scomparso dall’elenco. Qual è l’output?

      Nel nostro caso, /dev/sda /dev/sda1.

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

Prossima Lezione

4.4 Il Tuo Computer in Rete (4.4 Lezione 1)

Leggi la prossima Lezione

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

LPI è una organizzazione non-profit.

© 2023 Linux Professional Institute (LPI) è lo standard di certificazione globale e l'organizzazione di supporto alla carriera per i Professionisti Open Source. Con più di 200,000 titolari di Certificazione, è il primo e il più grande ente di Certificazione Open Source e Linux vendor-neutral. LPI ha professionisti certificati in oltre 180 Paesi, offre i suoi Esami in più lingue e ha centinaia di Partner di formazione in tutto il mondo.

La nostra missione è promuovere l'uso dell'Open Source supportando le persone che vi lavorano.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contattaci
  • Privacy & Cookie Policy

Trovato un errore? Per favore scrivi a contattaci.

© 1999–2023 The Linux Professional Institute Inc. Tutti i diritti riservati.