4.4 Struttura del File System in Linux Parte 2
Introduzione
Dopo aver esplorato i programmi e i loro file di configurazione, in questa lezione impareremo come i comandi vengono eseguiti come processi. Allo stesso modo, commenteremo la messaggistica di sistema, l’uso del buffer ring del kernel e come l’arrivo di systemd e del suo demone journal — journald — ha cambiato il modo in cui le cose erano state fatte finora per quanto riguarda la registrazione del sistema.
Processi
Ogni volta che un utente emette un comando, viene eseguito un programma e vengono generati uno o più processi.
I processi esistono in una gerarchia. Dopo che il kernel è stato caricato in memoria all’avvio, viene avviato il primo processo che, a sua volta, avvia altri processi, che, di nuovo, possono avviare altri processi. Ogni processo ha un identificatore univoco (PID) e un identificatore di processo padre (PPID). Si tratta di numeri interi positivi assegnati in ordine sequenziale.
Esplorare i processi in modo dinamico: top
È possibile ottenere un elenco dinamico di tutti i processi in esecuzione con il comando superiore:
$in alto
in alto – 11:10:29 fino 2:21, 1 utente, carico medio: 0,11, 0,20, 0,14
Compiti: 73 totale, 1 in esecuzione, 72 dormire, 0 fermati, 0 zombie
%Cpu: 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 totale, 909492 gratis, 38796 usato, 72044 buff/cache
KiB Swap: 1046524 totale, 1046524 gratis, 0 usato. 873264 avail Mem
PID USER PR NI VIRT RES SHR S%CPU%MEM TIME+ COMANDO
436 carol 20 0 42696 3624 3060 R 0,7 0,4 0:00 .30 top
4 radice 20 0 0 0 S 0,3 0,0 0:00 .12 kworker/ 0:0
399 radice 20 0 95204 6748 5780 S 0,3 0,7 0:00 .22 sshd
1 radice 20 0 56872 6596 5208 S 0,0 0,6 0:01 .29 systemd
2 radice 20 0 0 0 0 S 0,0 0,0 0:00 .00 kthreadd
3 radice 20 0 0 0 S 0,0 0,0 0:00 .02 ksoftirqd/0
5 radice 0 -20 0 0 0 S 0,0 0:00 .00 kworker/ 0:0 H
6 radice 20 0 0 0 S 0,0 0,0 0:00 .00 kworker/u 2:0
7 radice 20 0 0 0 S 0,0 0,0 0:00 .08 rcu_sched
8 radice 20 0 0 0 S 0,0 0,0 0:00 .00 rcu_bh
9 radice rt 0 0 0 0 S 0,0 0,0 0:00 Migrazione/0
10 radice 0 -20 0 0 0 S 0,0 0,0 0:00 .00 lru-add-drain
(…)
Come abbiamo visto sopra, top può anche darci informazioni sulla memoria e il consumo della CPU del sistema complessivo così come per ogni processo.
superiore permette all’utente una certa interazione.
Per impostazione predefinita, l’output viene ordinato in base alla percentuale di tempo della CPU utilizzata da ciascun processo in ordine decrescente. Questo comportamento può essere modificato premendo i seguenti tasti dall’interno in alto: M
Ordina per utilizzo della memoria.N
Ordina per numero ID processo.T
Ordina per tempo di esecuzione.P
Ordina per percentuale di utilizzo della CPU.
Per passare dall’ordine discendente all’ordine crescente basta premere R.
TiPA più fantasioso e più user-friendly versione di top è htop. Un’altra alternativa — forse più esaustiva — è in cima. Se non è già installato nel tuo sistema, ti incoraggio a utilizzare il gestore di pacchetti per installarli e provarli.
Un’istantanea di processi: ps
Un altro comando molto utile per ottenere informazioni sui processi è ps. Mentre top fornisce informazioni dinamiche, quella di ps è statica.
Se invocato senza opzioni, l’output di ps è abbastanza discreto e si riferisce solo ai processi collegati alla shell corrente:
$ps
PID TTY TEMPO CMD
2318 pts/0 00:00:00 bash
2443 pts/0 00:00:00 ps
Le informazioni visualizzate riguardano l’identificatore di processo (PID), il terminale in cui viene eseguito il processo (TTY), il tempo di CPU impiegato dal processo (TIME) e il comando che ha avviato il processo (CMD).
Un utile interruttore per ps è -f che mostra l’elenco full-format:
$ps -f
UID PID PPID C STIME TTY TEMPO 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 altri switch, -f mostra la relazione tra i processi padre e figlio:
$ps -uf
UTENTE PID%CPU%MEM VSZ RSS TTY STAT COMANDO START TIME
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.it.adoc -nw
(…)
Allo stesso modo, ps può mostrare la percentuale di memoria utilizzata quando invocata con l’opzione -v:
$ps -v
PID TTY STAT TIME MAJFL TRS DRS RSS%MEM COMANDO
1163 tty2 Ssl+ 0:00 1 67 201224 5576 0.1 /usr/lib/gdm3/gdm-x-session (…)
(…)
NotaUn altro comando visivamente attraente che mostra la gerarchia dei processi è pstree. Viene fornito con tutte le principali distribuzioni.
Informazioni sul processo 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: ~# l/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 – quello il cui PID è 1 (l’output è stato troncato per la leggibilità):
# il/proc/1/
attr cmdline environ io mem ns
autogroup comm exe limita mountinfo numa_maps
auxv coredump_filter fd loginuid monta oom_adj
…
È possibile controllare, ad esempio, l’eseguibile del processo:
# cat /proc/1/cmdline; echo
/sbin/init
Come puoi vedere, il binario che ha avviato la gerarchia dei processi era /sbin/init.
NotaComandi possono essere concatenati con il punto e virgola (;). Il punto nell’usare il comando echo sopra è quello di fornire una nuova riga. Prova ad eseguire semplicemente cat /proc/1/cmdline per vedere la differenza.
Il carico del sistema
Ogni processo su un sistema può potenzialmente consumare risorse di sistema. Il cosiddetto carico di sistema tenta 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 fino 13 giorni, 20:26, 1 utente, media di carico: 2.91, 1.59, 0.39
Le ultime tre cifre indicano la media di carico del sistema rispettivamente per l’ultimo minuto (2,91), gli ultimi cinque minuti (1,59) e gli ultimi quindici minuti (0,39).
Ognuno di questi numeri indica quanti processi erano in attesa per le risorse della CPU o per le operazioni di input/output per il completamento. Ciò significa che questi processi erano pronti per l’esecuzione se avevano ricevuto le rispettive risorse.
Registrazione di sistema e messaggistica di sistema
Non appena il kernel e i processi iniziano a eseguire e comunicare tra loro, vengono prodotte molte informazioni. La maggior parte viene inviata ai file — i cosiddetti file di log o, semplicemente, i log.
Senza registrazione, la ricerca di un evento che si è verificato su un server darebbe fastidio a molti sysadmin, da qui l’importanza di avere un modo standardizzato e centralizzato di tenere traccia di qualsiasi evento di sistema. Inoltre, i log sono determinanti e dicono quando si tratta di risoluzione dei problemi e sicurezza, nonché fonti di dati affidabili per comprendere le statistiche di sistema e fare previsioni di tendenza.
Registrazione con il demone syslog
Tradizionalmente, i messaggi di sistema sono stati gestiti dal sistema di registrazione standard — syslog — o da uno qualsiasi dei suoi derivati — syslog-ng o rsyslog. Il demone di registrazione raccoglie i messaggi provenienti da altri servizi e programmi e li memorizza in file di registro, in genere sotto /var/log. Tuttavia, alcuni servizi si occupano dei propri log (ad esempio, del server Web Apache HTTPD). Allo stesso modo, il kernel Linux usa un buffer ad anello in memoria per archiviare i suoi messaggi di log.
Registra file 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 certa misura, abbastanza esplicativi. Alcuni esempi includono: /var/log/auth.log
Memorizza le informazioni sull’autenticazione. /var/log/kern.log
Memorizza le informazioni del kernel. /var/log/syslog
Memorizza le informazioni di sistema. /var/log/messages
Memorizza i dati di sistema e delle applicazioni.
NotaIl nome esatto e il contenuto dei file di registro possono variare tra le distribuzioni Linux.
Accesso ai file di registro
Quando si esplorano i file di registro, ricordarsi di essere root (se non si dispone di autorizzazioni di lettura) e utilizzare un cercapersone come meno;
# meno/var/log/messages
4 Jun 18:22:48 debian liblogging-stdlog: [origin software=”rsyslogd» swversion=”8.24.0″ x-pid=”285″ x-info=» http://www.rsyslog.com «] rsyslogd è stato hUPed
29 giugno 16:57:10 kernel debian: [dias_laborables_feriados_] Linux versione 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc versione 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)) #1 SMP Debian 4.9.130-2 (2018-10-27)
29 giugno 16:57:10 kernel debian: [] riga di comando: 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:
# coda -f /var/log/messages
9 luglio 18:39:37 kernel debian: [2.350572] RAPL PMU: hw unità di dominio psys 2^-0 Joule
9 luglio 18:39:37 kernel debian: [2.512802] input: VirtualBox USB Tablet come/dispositivi/PCI0000:00/0000:00:06.0/USB1/1-1/1-1:1.0/0003:80EE:0021.0001/Input/Input7
9 luglio 18:39:37 kernel debian: [2.513861] Aggiunta di 1046524k swap on /dev/sda5. Priorità: -1 estensioni:1 attraverso:1046524k FS
9 luglio 18:39:37 kernel debian: [2.519301] hid-generic 0003:80 EE:0021.0001: input, hidraw0: USB HID v1.10 Mouse [VirtualBox USB Tablet] su USB- 0000:00:06 .0-1/input0
9 luglio 18:39:37 kernel debian: [2.623947] snd_intel8x0 0000:00:05 .0: tasso di liste bianche per 1028:0177 è 48000
9 luglio 18:39:37 kernel debian: [2.914805] IPv6: ADDRCONF (NETDEV_UP): enp0s3: il collegamento non è pronto
9 luglio 18:39:39 kernel debian: [4.937283] e1000: enp0s3 NIC Link è fino a 1000 Mbps Full Duplex, controllo del flusso: RX
9 luglio 18:39:39 kernel debian: [4.938493] IPv6: ADDRCONF (NETDEV_CHANGE): enp0s3: il collegamento diventa pronto
9 luglio 18:39:40 kernel debian: [5.315603] casuale: crng init done
9 lug 18:39:40 kernel debian: [5.315608] casuale: 7 urandom warning (s) perso a causa della limitazione del tasso
Troverete l’output nel seguente formato:
TimestampHostName da cui proviene il messaggio daName del programma/servizio che ha generato il messaggioIl PID del programma che ha generato il messageDescription dell’azione che ha avuto luogo
La maggior parte dei file di registro sono scritti in testo normale; tuttavia, alcuni possono contenere dati binari come nel caso /var/log/wtmp — che memorizza i dati relativi agli accessi di successo. È possibile utilizzare il comando file per determinare qual è il caso:
$file /var/log/wtmp
/var/log/wtmp: dBase III DBT, versione numero 0, successivo indice di blocco libero 8
Questi file sono normalmente letti utilizzando comandi speciali. ultimo è usato per interpretare i dati in /var/log/wtmp:
$ultimo
carol tty2:0 Thu May 30 10:53 ancora effettuato l’accesso
avvio del sistema di riavvio 4.9.0-9-amd64 gio 30 maggio 10:52 ancora in esecuzione
carol tty2:0 gio mag 30 10:47 – crash (00:05)
avvio del sistema di riavvio 4.9.0-9-amd64 gio maggio 30 09:11 ancora in esecuzione
carol tty2:0 mar 28 mag 08:28 – 14:11 (05:42)
avvio del sistema di riavvio 4.9.0-9-amd64 mar 28 mag 08:27 – 14:11 (05:43)
carol tty2:0 lun 27 mag 19:40 – 19:52 (00:11)
avvio del sistema di riavvio 4.9.0-9-amd64 lun 27 mag 19:38 – 19:52 (00:13)
carol tty2:0 lun 27 mag 19:35 – giù (00:03)
avvio del sistema di riavvio 4.9.0-9-amd64 Lun 27 Maggio 19:34 – 19:38 (00:04)
NotaSimile a /var/log/wtmp, /var/log/btmp memorizza informazioni sui tentativi di accesso falliti e il comando speciale per leggerne il contenuto è lastb.
Rotazione dei log
I file di registro possono crescere molto nel corso di poche settimane o mesi e occupare tutto lo spazio libero su disco. Per affrontare questo problema, viene utilizzata l’utilità logrotate. Implementa la rotazione dei log o il ciclo che implica azioni come spostare i file di registro in un nuovo nome, archiviarli e/o comprimerli, a volte inviarli via email al sysadmin e infine eliminarli man mano che invecchiano. Le convenzioni utilizzate per nominare questi file di log ruotati sono diverse (aggiungendo un suffisso con la data, ad esempio); tuttavia, è semplice aggiungere un suffisso con un numero intero:
# ls /var/log/apache2/
error.log error.log.1 error.log.2.gz other_vhosts_access.log
Nota come error.log.2.gz è già stato compresso con gunzip (da qui il suffisso .gz).
Il buffer dell’anello del kernel
Il buffer ring del kernel è una struttura dati di dimensioni fisse che registra i messaggi di avvio del kernel. La funzione di questo buffer — molto importante — è quella di registrare tutti i messaggi del kernel prodotti all’avvio — quando syslog non è ancora disponibile. Il comando dmesg stampa il buffer ring del kernel (che era anche memorizzato in /var/log/dmesg). A causa dell’estensione del buffer ring, questo comando viene normalmente utilizzato in combinazione con l’utilità di filtraggio del testo grep (ricorda, devi anche essere root). Ad esempio, per cercare i messaggi di avvio:
$dmesg | grep boot
[] Riga di comando: boot_image=/boot/vmlinuz-4.9.0-9-amd64 root=uuuid = 5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro tranquillo
[] smpboot: Consentire 1 CPU, 0 CPU hotplug
[] Riga di comando del kernel: boot_image=/boot/vmlinuz-4.9.0-9-amd64 root=uuuid = 5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro tranquillo
[0.144986] AppArmor: AppArmor disabilitato dal parametro del tempo di avvio
(…)
NotaPoiché il buffer dell’anello del kernel cresce con nuovi messaggi nel tempo, i più vecchi svaniscono.
The System Journal: systemd-journald
A partire dal 2015, systemd ha sostituito SysV Init come gestore di sistema e servizi di fatto nella maggior parte delle principali distribuzioni Linux. Di conseguenza, il daemon journal — journald — è diventato il componente di registrazione standard, sostituendo syslog nella maggior parte degli aspetti. I dati non sono più memorizzati in testo normale ma in forma binaria. Pertanto, l’utilità journalctl è necessaria per leggere i registri. Inoltre, journald è compatibile con syslog e può essere integrato con syslog.
journalctl è l’utilità che devi usare per interrogare il journal del systemd. Devi essere root o usare sudo per richiamarlo. Se invocato senza opzioni, stampa l’intero diario:
# Journalctl
— I log iniziano dal mar 2019-06-04 17:49:40 CEST, terminano al mar 2019-06-04 18:13:10 CEST. —
04 giu 17:49:40 debian systemd-journald [339]: Runtime journal (/run/log/journal/) è 8.0M, max 159.6M, 151.6M gratis.
giugno 04 17:49:40 kernel debian: microcodice: microcodice aggiornato all’inizio della revisione 0xcc, data = 2019-04-01
Jun 04 17:49:40 kernel debian: Linux versione 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc versione 6.3.0 20170516 (Debian 6.3.0-18+deb9u1))
Jun 04 17:49:40 kernel debian: riga di comando: boot_image=/boot/vmlinuz-4.9.0-8-AMD64 root=/dev/sda1 ro quiet
(…)
Tuttavia, se richiamato con gli switch -k o —dmesg, sarà equivalente all’utilizzo del comando dmesg:
# Journalctl -k
[] Linux versione 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (versione gcc 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)) #1 SMP Debian 4.9.168-1+deb9u2 (2019-05-13)
[] Riga di comando: boot_image=/boot/vmlinuz-4.9.0-9-amd64 root=uuuid = 5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro tranquillo
(…)
Altre opzioni interessanti per journalctl includono: -b, —boot
Mostra le informazioni di avvio. -u
Mostra i messaggi relativi a un’unità specificata. Approssimativamente, un’unità può essere definita come qualsiasi risorsa gestita da systemd. Ad esempio journalctl -u apache2.service viene utilizzato per leggere i messaggi sul server web apache2. -f
Mostra i messaggi di giornale più recenti e continua a stampare nuove voci mentre vengono aggiunte al journal – molto simile alla coda -f.
Esercizi Guidati
Dai un’occhiata al seguente elenco di top e rispondi alle seguenti domande:carol @debian: ~$ top
top – 13:39:16 fino a 31 min, 1 utente, media di carico: 0.12, 0.15, 0.10
Compiti: 73 totale, 2 in esecuzione, 71 dormire, 0 fermati, 0 zombie
%CPU: 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 totale, 698700 gratis, 170664 usato, 150968 buff/cache
KiB Swap: 1046524 totale, 1046524 gratis, 0 usato. 710956 avail Mem
PID USER PR NI VIRT RES SHR S%CPU%MEM TIME+ COMANDO
605 nessuno 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 radice 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 radice 20 0 56988 6688 5240 S 0.0 0.7 0:00 .42 systemd
2 radice 20 0 0 0 0 S 0.0 0.0 0:00 .00 kthreadd
3 radice 20 0 0 0 0 S 0.0 0:00 .09 ksoftirqd/0
4 radice 20 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 di /proc dovresti visitare per cercare i dati relativi al comando superiore? Quale processo è stato eseguito per primo? Come fai a dirlo? Completare la tabella specificando in quale area di output superiore si trovano le seguenti informazioni:Informazioni su… Sommario AreaTask areaMemorySwapPIDCPU TimeCommandsWhat comando viene utilizzato per leggere i seguenti registri binari? /var/log/wtmp/var/log/btmp/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journalin combinazione con grep, quali comandi useresti 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 l’ultimo login ocurred (auth.log) Quali due comandi useresti per visualizzare il buffer ring del kernel? Indicare dove appartengono i seguenti messaggi di log: 10 lug 13:37:39 debian dbus [303]: [system] attivato correttamente il servizio ‘org.freedesktop.nm_dispatcher’/var/log/auth.log/var/log/kern.log/var/syslog/log/log/messagesjul 10 11:23:58 kernel debian: [1.923349] drive: USB HID core: USB HID /var/log/ auth.log/var/log/kern.log/var/log/syslog/var/log/messagesjul 10 14:02:53 debian sudo: pam_unix (sudo:session): sessione aperta per utente root da carol (uid=0) /var/log/auth.log/var/log/kern.log/var/syslog/log/log/log/messagesjul 10 11:23:58 debian debian debian NetworkManager [322]: info [1562750638.8672] NetworkManager (versione 1.6 .2) sta iniziando… /var/log/auth.log/var/log/kern.log/var/log/syslog/var/log/messagesHe journalctl informazioni sulle seguenti unità? UnitCommandsSHNetworkIngrSysLogcron
Esercizi esplorativi
Riconsiderare l’output superiore degli esercizi guidati e rispondere alle seguenti domande:Quali due passi seguiresti per uccidere il server web di Apache? Nell’area di riepilogo, come è possibile visualizzare le informazioni sulla memoria fisica e lo scambio utilizzando le barre di avanzamento? Ora, ordinare i processi in base all’utilizzo della memoria:Ora che si dispone di informazioni di memoria visualizzate nelle barre di avanzamento e processi ordinati in base all’utilizzo della memoria, salvare queste configurazioni in modo da ottenere come predefinito la prossima volta che si utilizza Top:Quale file memorizza le impostazioni di configurazione di top? Dove vive? Come si può verificare la sua esistenza? Scopri il comando exec in Bash. Prova a dimostrare la sua funzionalità avviando una sessione Bash, trovando il processo Bash con ps, quindi esegui exec /bin/sh e cerca nuovamente il processo con lo stesso PID. Segui questi passaggi per esplorare gli eventi del kernel e la gestione dinamica di udev dei dispositivi: Hotplug un’unità USB nel computer. Esegui dmesg e fai attenzione alle ultime righe. Qual è la linea più recente? Tenendo presente l’output del comando precedente, esegui ls /dev/sd * e assicurati che l’unità USB venga visualizzata nell’elenco. Qual è l’output? Ora rimuovi l’unità USB ed esegui di nuovo dmesg. Come si legge la riga più recente? Esegui nuovamente ls /dev/sd * e assicurati che il tuo dispositivo sia scomparso dall’elenco. Qual è l’output?
Riepilogo
Nel contesto dell’archiviazione dei dati, in questa lezione sono stati discussi i seguenti argomenti: gestione dei processi e registrazione e messaggistica del sistema.
Per quanto riguarda la gestione dei processi, abbiamo appreso quanto segue:
I programmi generano processi e processi esistono in una gerarchia.Ogni processo ha un identificatore univoco (PID) e un identificatore di processo genitore (PPID) .top è un comando molto utile per esplorare dinamicamente e interattivamente i processi in esecuzione del sistema.ps può essere utilizzato per ottenere un’istantanea dell’esecuzione corrente nel sistema.La directory /proc include directory per ogni processo in esecuzione nel sistema chiamato dopo il loro PID.Il concetto di media di carico del sistema – che è molto utile per controllare l’utilizzo della CPU o sovraccarico.
Per quanto riguarda la registrazione del sistema, dobbiamo ricordare che:
Un registro è un file in cui vengono registrati gli eventi di sistema. I log sono preziosi quando si tratta di risoluzione dei problemi.La registrazione è tradizionalmente gestita da servizi speciali come syslog, syslog-ng o rsyslog. Tuttavia, alcuni programmi utilizzano i propri daemons.Poiché i log sono dati variabili, sono tenuti in/var e — a volte — i loro nomi possono darvi un indizio sul loro contenuto (kern.log, auth.log, ecc.) La maggior parte dei log sono scritti in testo normale e possono essere letti con qualsiasi editor di testo purché tu abbia il diritto permessi. Tuttavia, alcuni di loro sono binari e devono essere letti utilizzando comandi speciali.Per evitare problemi con lo spazio su disco, la rotazione del registro viene effettuata dall’utilità logrotate. Per quanto riguarda il kernel, utilizza una struttura dati circolare — il buffer ad anello — dove vengono mantenuti i messaggi di avvio (vecchi messaggi svaniscono nel tempo) .Il sistema e systemd ha sostituito System V init in praticamente tutte le distribuzioni con journald diventando il servizio di registrazione standard.Per leggere il journal di systemd, è necessaria l’utilità journalctl.
Comandi utilizzati in questa lezione:cat
Concatenata/stampa file content.dmesg
Stampa il buffer dell’anello del kernel. echo
Visualizzare una riga di testo o un nuovo file.
Determina il tipo di file.grep
Stampa linee che corrispondono a un pattern.last
Mostra un elenco dell’ultimo accesso users.less
Visualizza il contenuto del file una pagina alla volta.ls
Elenco directory contents.journalctl
Interrogare il journal.tail systemd
Visualizzare le ultime righe di un file.
Risposte agli esercizi guidati
Date un’occhiata al seguente elenco di top e rispondere alle seguenti domande:carol @debian: ~$ top
top – 13:39:16 fino a 31 min, 1 utente, media di carico: 0.12, 0.15, 0.10
Compiti: 73 totale, 2 in esecuzione, 71 dormire, 0 fermati, 0 zombie
%CPU: 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 totale, 698700 gratis, 170664 usato, 150968 buff/cache
KiB Swap: 1046524 totale, 1046524 gratis, 0 usato. 710956 avail Mem
PID USER PR NI VIRT RES SHR S%CPU%MEM TIME+ COMANDO
605 nessuno 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 radice 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 radice 20 0 56988 6688 5240 S 0.0 0.7 0:00 .42 systemd
2 radice 20 0 0 0 0 S 0.0 0.0 0:00 .00 kthreadd
3 radice 20 0 0 0 0 S 0.0 0:00 .09 ksoftirqd/0
4 radice 20 0 0 0 S 0.0 0.0 0:00 .87 kworker/ 0:0
(…) Quali processi sono stati avviati dall’utente carol? Risposta: Solo uno: top.Quale directory virtuale di /proc dovresti visitare per cercare i dati relativi al comando superiore? Risposta: /proc/887Quale processo è stato eseguito per primo? Come fai a dirlo? Risposta: systemd. Perché è quello con PID #1 .Completa la tabella specificando in quale area di output superiore vengono trovate le seguenti informazioni:Informazioni su… Sommario areaTask areaMemoryYesYesSnopidNoyesScpu TimeYesYesCommandsNoyesWhat comando viene utilizzato per leggere i seguenti registri binari? /var/log/wtMPanswer: last/var/log/btmPanswer: lastb/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.JournalAnswer: combinazione JournalTlin con grep, quali comandi useresti per scoprire le seguenti informazioni sul tuo sistema Linux? Quando il sistema è stato riavviato l’ultima volta (wtmp) Risposta: lastQuale disco rigido sono installati (kern.log) Risposta: less /var/log/kern.logQuando l’ultimo login ocurred (auth.log) Risposta: meno/var/log/auth.logQuali due comandi useresti per avere visualizzato il buffer dell’anello del kernel? dmesg e journalctl -k (anche journalctl —dmesg) .Indicare dove appartengono i seguenti messaggi di log: 10 lug 13:37:39 debian dbus [303]: [system] Servizio attivato correttamente ‘org.freedesktop.nm_dispatcher’/var/log/auth.log/log/kern.log/var/log/syslogx/log/log/messagesjul 10 kernel debian 23:58: [1.923349] usbhid: USB HID core driver/var/log/auth.log/var/log/kern.logx/var/log/syslog/var/log/messagesxjul 10 14:02:53 debian sudo: pam_unix (sudo:session): sessione aperta per root utente da carol (uid=0) /var/log/auth.logx/var/kern.log/kern.log/log Log/syslog/var/log/messagesJul 10 11:23:58 debian NetworkManager [322]: info [ 1562750638.8672] NetworkManager (versione 1.6.2) sta iniziando… /var/log/auth.log/var/log/kern.log/var/log/syslog/var/log/messagesXHE journalctl informazioni sulle seguenti unit:UnitCommandSSHJournalCTL -u ssh.servicenetworkingjournalctl -u networking.servicersylogjournalctl -u networkjournalctl -u -u rsyslog. servicecronjournalctl -u cron.service
Risposte agli esercizi esplorativi
Riconsiderare l’output superiore degli esercizi guidati e rispondere alle seguenti domande:Quali due passi seguiresti per uccidere il server web di Apache? In primo luogo, premere k; quindi fornire un valore kill. Nell’area di riepilogo, come è possibile visualizzare le informazioni sulla memoria fisica e scambiare utilizzando le barre di avanzamento? Premendo m una volta o due volte.Now, ordinare i processi in base all’utilizzo della memoria:MNow che si dispone di informazioni di memoria visualizzate nelle barre di avanzamento e processi ordinati in base all’utilizzo della memoria, salvare queste configurazioni in modo da ottenere come predefinito la prossima volta che si utilizza Top:Wwhat file memorizza le impostazioni di configurazione di top? Dove vive? Come si può verificare la sua esistenza? Il file è ~/.toprc e vive nella home directory dell’utente (~). Poiché è un file nascosto (inizia con un punto), possiamo verificare la sua esistenza con ls -a (elenca tutti i file) .Scopri il comando exec in Bash. Prova a dimostrare la sua funzionalità avviando una sessione Bash, trovando il processo Bash con ps, quindi esegui exec /bin/sh e cerca nuovamente il processo con lo stesso PID.exec sostituisce un processo con un altro comando. Nel seguente esempio possiamo vedere che il processo Bash è sostituito da /bin/sh (invece di /bin/sh diventare un processo figlio): $echo $$
19877
$ps auxf | grep 19877 | testa -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 | testa -1
carol 19877 0.0 0.0 7448 3896 pts/25 Ss 21:17 0:00 _ /bin/SHSegui questi passaggi per esplorare gli eventi del kernel e la gestione dinamica dei dispositivi di udev: Hotplug un’unità USB nel computer. Esegui dmesg e fai attenzione alle ultime righe. Qual è la linea più recente? Si dovrebbe ottenere qualcosa sulla falsariga di [1967.700468] sd 6:0:0: [sdb] Allegato SCSI disco rimovibile. Tenendo presente l’output dal comando precedente, eseguire ls /dev/sd * e assicurarsi che l’unità USB appare nell’elenco. Qual è l’output? A seconda del numero di dispositivi collegati al tuo sistema, dovresti ottenere qualcosa come /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. Come si legge la riga più recente? Si dovrebbe ottenere qualcosa sulla falsariga di [2458.881695] usb 1-9: scollegare USB, numero di dispositivo 6.Eseguire ls /dev/sd * di nuovo e assicurarsi che il dispositivo sia scomparso dall’elenco. Qual è l’output? Nel nostro caso, /dev/sda /dev/sda1.