Il problema della registrazione dell'utilizzo di risorse è nato proprio per misurare, e quindi per fare pagare, i servizi utilizzati dagli utenti. In questo senso si spiega l'enfasi «contabile» che si dà al problema.
Alla base della contabilità dell'utilizzo delle risorse del sistema sta il file /var/log/wtmp
, che deve esistere perché tali registrazioni avvengano effettivamente. Per motivi storici, non si tratta di un file di testo normale, e per leggerlo si usa generalmente il programma last
, al quale si aggiungono eventualmente altri programmi più raffinati.
Oltre alla contabilità basata sul file /var/log/wtmp
si aggiunge quella legata ai processi, derivata da BSD (BSD Process Accounting). Mentre il file /var/log/wtmp
(e anche /var/run/utmp
) è gestito generalmente dai programmi init
, login
, dalla serie dei programmi Getty e da altri che sono legati al sistema di autenticazione degli utenti, la contabilità dei processi in stile BSD è gestita direttamente dal kernel. Nel caso di GNU/Linux, si tratta di attivare l'opzione relativa nel gruppo denominato General setup.
BSD Process Accounting ( 12.5.4) Y |
Come accennato, una delle caratteristiche importanti di questi file è il fatto di non essere file di testo normali. Il formato del loro contenuto varia da sistema a sistema, e anche da una versione all'altra dello stesso sistema operativo. Pertanto, può succedere alle volte che qualcosa non funzioni, nel senso che i programmi che vi accedono non riescono a interpretare i dati in modo corretto, o peggio eseguono delle registrazioni errate.
Questa annotazione serve per tenere in considerazione il problema, ma tutto quello che si può fare, quando si notano delle anomalie legate a queste componenti del sistema, è l'aggiornamento del software.
Il file /var/log/wtmp
è l'archivio storico degli accessi al sistema. Al suo interno vengono indicate le informazioni della data e dell'ora di accesso di ogni utente, assieme all'indicazione della provenienza degli accessi. I dati contenuti in questo file hanno valore solo se sono completi, nel senso che per ogni accesso si deve trovare anche la registrazione della conclusione della sessione di lavoro, altrimenti non possono essere calcolati i tempi di utilizzo.
Purtroppo, questo file non offre le garanzie di una base di dati vera e propria, e le registrazioni che vengono fatte al suo interno non sono mai sicure. Pertanto, i dati che si riescono a estrapolare sono da considerare approssimativi in generale.
Questo file tende a ingrandirsi rapidamente, tanto che periodicamente conviene fare pulizia. Di solito, le distribuzioni GNU/Linux provvedono a fornire degli script necessari per gestire in modo elegante, attraverso il sistema Cron, l'archiviazione e rotazione dei file delle registrazioni, compreso /var/log/wtmp
.
last [<opzioni>] [<nome>...] |
Visualizza il contenuto del file delle registrazioni degli accessi (login) e disconnessioni (logout) per le informazioni riguardanti gli utenti e i terminali. Il file dal quale queste informazioni vengono attinte è /var/log/wtmp
. L'esempio seguente mostra una parte dell'output che potrebbe essere generato da questo programma.
daniele tty5 Tue Mar 30 16:18 still logged in daniele tty5 Tue Mar 30 16:17 - 16:18 (00:01) tizio ttyp1 roggen.brot.dg Tue Mar 30 14:33 still logged in reboot system boot Tue Mar 30 14:30 root tty3 Mon Mar 29 22:18 - down (01:29) daniele tty2 Mon Mar 29 21:29 - 23:47 (02:18) caio ttyp1 roggen.brot.dg Mon Mar 29 21:14 - 23:47 (02:33) reboot system boot Mon Mar 29 21:10 |
Si osserva in particolare che la prima voce rappresenta l'accesso più recente, quello dell'utente daniele
dalla quinta console virtuale, che risulta essere ancora collegato. Si vede anche che lo stesso vale per l'utente tizio
che sta utilizzando il sistema attraverso un accesso remoto proveniente dall'elaboratore roggen.brot.dg
. Si notano anche gli accessi regolarmente conclusi (quelli che hanno un orario di inizio e un orario di fine, oltre che l'indicazione della durata dell'accesso tra parentesi), e quindi si distinguono gli accessi sicuramente conclusi, di cui non è stata annotata la fine. Infatti, il giorno 30 marzo alle ore ore 14.30 il sistema è stato riavviato, e di conseguenza gli accessi in essere in precedenza sono da considerare conclusi: l'accesso dell'utente root
del 20 marzo alle ore 22.18 non è stato concluso in modo normale, probabilmente perché ha avviato il programma shutdown
e non ha fatto in tempo a concludere la sessione di lavoro.
|
Limita il numero di elementi visualizzati allo specifico valore numerico indicato.
|
Analizza il file specificato invece di utilizzare quello predefinito, cioè /var/log/wtmp
.
|
Permette di conoscere anche le informazioni sull'arresto del sistema e in generale sui cambiamenti del livello di esecuzione (runlevel).
$
last
Visualizza gli ultimi eventi del registro degli accessi.
$
last tizio root
Visualizza gli accessi e le disconnessioni da parte degli utenti tizio
e root
.
ac [<opzioni>] [<utente>...] |
ac
è un programma che si basa sul contenuto del file /var/log/wtmp
per determinare i tempi di accesso complessivi del periodo a cui si riferisce il file stesso.
Se viene utilizzato senza argomenti, si limita a emettere il tempo complessivo di tutti gli accessi, e in pratica è utile solo quando si indicano delle opzioni. Se viene indicato il nome di uno o più utenti, si ottengono soltanto i dati relativi a questi.
L'accuratezza delle informazioni ottenute con ac
dipende naturalmente dall'integrità del file che viene analizzato.
|
Mostra l'elenco dei tempi di accesso giornalieri.
|
Mostra l'elenco dei tempi di accesso suddivisi per utente.
|
Analizza il file specificato invece di utilizzare quello predefinito, cioè /var/log/wtmp
.
$
ac
Mostra il totale degli accessi, per esempio ciò che appare di seguito, tenendo conto che il valore fa riferimento alle ore. Per la precisione si tratta di 4198 ore e 51 minuti.
total 4198.85 |
$
ac
-
d
Mostra l'elenco dei tempi di accesso giornalieri, per esempio il listato seguente che viene mostrato solo nella sua parte finale.
... Mar 24 total 35.21 Mar 25 total 26.95 Mar 26 total 2.67 Mar 28 total 61.54 Mar 29 total 35.55 Today total 45.64 |
$
ac
-
p
Mostra l'elenco dei tempi di accesso suddivisi per utente.
pippo 1.84 ftp 0.99 tizio 2.93 daniele 3100.52 root 1083.21 semproni 6.41 caio 3.41 total 4199.32 |
$
ac
-
p tizio caio
Come nell'esempio precedente, ma limitatamente agli utenti tizio
e caio
.
tizio 2.93 caio 3.41 total 6.34 |
$
ac
-
p tizio caio -
f /var/log/wtmp.1
Come nell'esempio precedente, ma analizzando il file /var/log/wtmp.1
che presumibilmente è il file delle registrazioni precedente.
Come già accennato all'inizio del capitolo, la contabilità riferita ai processi è gestita direttamente dal kernel. Questa viene attivata attraverso una chiamata di sistema, acct()
, e per questo si usa un programma apposito: accton
.
accton [<file-delle-registrazioni>] |
Per la precisione, se accton
viene usato senza argomenti, la contabilizzazione da parte del kernel viene disattivata; al contrario, se si indica il file da utilizzare, la contabilizzazione viene attivata e diretta verso quel file.
Per rispettare le consuetudini, il file in questione deve essere /var/log/pacct
, per cui si attiva la registrazione contabile dei processi con il comando seguente (naturalmente è necessario che il file esista già).
#
accton /var/log/pacct
Il problema della contabilità dei processi sta nel fatto che viene ancora considerata un accessorio di minore importanza, e per questo può capitare che i programmi di cui si dispone non siano perfettamente conformi al formato del file generato dal kernel. |
Al contrario della contabilità legata al file /var/log/wtmp
, le informazioni riferite ai processi vengono considerate delle informazioni riservate, e per questo i permessi del file /var/log/pacct
dovrebbero impedire anche la lettura da parte degli utenti comuni.
lastcomm [<comando>...] [<utente>...] [<terminale>...] [<opzioni>] |
lastcomm
è il programma fondamentale per la lettura del file della contabilità dei processi. Di per sé, per funzionare, non richiede i privilegi dell'utente root
, però il file utilizzato per questa contabilità, /var/log/pacct
, è normalmente protetto contro qualunque accesso non privilegiato.
lastcomm
può essere utilizzato senza argomenti, e in tal caso mostra tutte le informazioni contenute all'interno del file /var/log/pacct
, oppure può essere avviato con l'indicazione di comandi, utenti e terminali, in modo da limitare le informazioni che si vogliono estrarre da quel file.
Il listato tipico che si dovrebbe ottenere da questo programma è simile all'esempio seguente:
... cat tizio tty1 0.03 secs Tue Mar 30 07:38 ls tizio tty1 0.04 secs Tue Mar 30 07:38 clear tizio tty1 0.01 secs Tue Mar 30 07:38 |
|
Se l'indicazione del nome di un utente può essere ambigua, nel senso che potrebbe essere confuso con un comando, si può utilizzare questa opzione.
|
Questa opzione permette di indicare un comando in modo da evitare ambiguità con i nomi degli utenti e dei terminali.
|
Questa opzione permette di indicare un terminale (il nome del dispositivo senza il prefisso /dev/
) in modo da evitare ambiguità con i nomi degli utenti e dei comandi.
|
Se si desidera consultare un file diverso da quello predefinito, si può utilizzare questa opzione per specificarlo.
#
lastcomm tizio
Mostra la contabilità dei processi riferita all'utente tizio
.
#
lastcomm
-
-
user tizio
Esattamente come nell'esempio precedente, ma con l'indicazione esplicita che tizio
è inteso essere un utente.
sa [<opzioni>] [<file-della-contabilità>] |
sa
è un programma che genera delle statistiche dai dati contenuti nel file /var/log/pacct
, o in un altro che venga indicato come ultimo argomento della riga di comando. Oltre a questo, sa
utilizza altri due file: /var/log/savacct
e /var/log/usracct
. Questi gli permettono di annotare le informazioni generate; nel primo caso riferite alla situazione complessiva, nel secondo distinte in base all'utente.
---------------------------
Appunti Linux 1999.07.12 --- Copyright © 1997-1999 Daniele Giacomini -- daniele @ evo.it
[indice generale] [precedente] [successivo] [indice analitico] [note introduttive]