I comandi per le informazioni sugli utenti e il sistema

4 / 100

Tratteremo in questa sezione una serie di comandi utilizzabili per ottenere informazioni sulle identita degli utenti, i gruppi cui appartengono, gli accessi al sistema e altre caratteristiche generali del sistema. Un primo comando, che permette di veri care con quale utente ci si e collegati al sistema, e whoami, che stampa il valore del proprio username con qualcosa del tipo:

[email protected]:~$ whoami

piccardi

e se puo sembrare superfluo verificare con quale utente ci si e collegati (cosa che di norma ci viene ricordata anche dal prompt della shell) si pensi invece a quanto puo essere utile nel caso di uno script di shell che debba eseguire compiti diversi in base all’utente che lo esegue.

Per veri care di quali gruppi fa parte un utente si puo usare invece il comando groups. Questo, se invocato senza nessun argomento, stampa l’elenco dei nomi dei gruppi a cui si appartiene, ad esempio:

[email protected]:~$ groups

piccardi voice cdrom audio video plugdev lpadmin fuse scanner saned vboxusers

se invece si specifica come argomento un nome utente, il comando stampa la lista di gruppi cui appartiene l’utente indicato. Sia groups che whoami non hanno opzioni se non quelle standard GNU

Il comando piu generale e pero id, che consente di ottenere i valori di tutti gli identificativi associati ad un utente. Il comando stampa i valori di utente e relativi gruppi sia in forma letterale che numerica, e permette di scegliere se stampare quelli reali o quelli effettivi un esempio del suo utilizzo è:

[email protected]:~$ id

uid=1002(piccardi) gid=1002(piccardi) groups=22(voice),24(cdrom),29(audio),44(vi deo),46(plugdev),117(lpadmin),119(fuse),120(scanner),122(saned),124(vboxusers),1 002(piccardi)

in cui, invocato senza argomenti, stampa tutti gli identificativi associati all’utente corrente.

Oltre alla possibilita di passare un argomento che specifica l’utente di cui si vogliono ottenere gli identificativi, il comando prende molte opzioni che permettono di indicare nei dettagli quali informazioni si vogliono stampare ed in che formato; con -u si puo chiedere di mostrare solo l’user ID, con -g il group ID, e inoltre possibile chiedere la visualizzazione dei identificativi del gruppo reali (quelli dell’utente che ha lanciato il processo) invece degli e ective (quelli per conto di cui gira il processo, mostrati di default) con l’opzione -r.

Al solito si puo fare riferimento alla pagina di manuale, accessibile con man id, per la documentazione completa. Oltre ai dati relativi agli identi cativi associati ai singoli utenti, il sistema mantiene anche una serie di informazioni sulle loro attività, che possono essere richieste con altrettanti comandi. In particolare tutte le volte che un utente si collega al sistema e avvia un terminale l’evento viene registrato in uno specifico formato nei file /var/log/wtmp e /var/run/utmp (il primo contiene le informazioni storiche, il secondo quelle correnti) insieme ad altre informazioni relative sia alla modalit in cui avviene l’accesso che ad altri eventi di sistema. In particolare vengono registrati in questi le tutti i riavvii ed in generale tutti i cambiamenti di runlevel che sono stati eseguiti.

I dati vengono registrati in questi le in forma binaria, ma possono essere consultati con l’ausilio di alcuni comandi dedicati, che consentono di ottenere informazioni sugli accessi degli utenti ed anche sulle attivit svolte nel sistema.

Ad esempio l’elenco degli utenti attualmente collegati si puo ottenere con l’uso del comando users che stampa a video una semplice lista degli stessi, da usare ad esempio in uno script che debba inviare avvisi, con qualcosa del tipo:

[email protected]:~$ users

root piccardi

Una lista piu dettagliata puo essere ottenuta con il comando who, che stampa l’elenco in forma di tabella, riportando per ciascun utente collegato al sistema il relativo username seguito dal terminale su cui questo e attivo, dall’ora in cui e avvenuto l’accesso e dall’eventuale macchina remota o dal display dell’interfaccia grafica da cui questo e avvenuto, cioe qualcosa del tipo:

[email protected]:~$ who  
piccardi tty12008-03-2600:02 
piccardi pts/02008-03-2712:45 (192.168.0.3)
piccardi pts/12008-03-2312:07(:0.0)

che mostra tre sessioni dello stesso utente, una e ettuata da una console locale, una da una macchina remota ed una dall’interfaccia gra ca.

Il comando supporta molte opzioni (al solito per i dettagli si consulti la pagina di manuale), volte a stampare le varie informazioni disponibili, ma in generale lo si usa senza argomenti per avere la lista degli utenti come illustrato. Se gli si passa un argomento questo verra considerato il nome del le da cui leggere le informazioni, mentre con due argomenti stampa soltanto la voce relativa all’utente che lo ha lanciato.

In quest’ultimo caso si tende ad usarlo nella forma discorsiva who am i, che ricorda il prece-dente whoami, ma oltre al risultato, che presenta il nome dell’utente insieme al terminale e alle altre informazioni mostrate nel precedente esempio, e diverso anche il significato, whoami infatti riporta il nome dell’utente associato all’user ID del processo corrente e da sempre un risultato, mentre who am i fa riferimento all’utente effettivamente collegato, per cui se usato all’interno di uno script eseguito in modalità non interattiva non dar nessun risultato.

Come alternativa a who esiste anche il comando w, che esegue lo stesso compito ma stampa delle informazioni piu dettagliate. In particolare il comando stampa sempre una riga introduttiva, analoga a quella mostrata anche da top, che riporta ora, tempo trascorso dall’ultimo riavvio (l’uptime), numero di utenti connessi e carico medio della macchina, cui segue la lista degli utenti in cui, oltre alle informazioni gia riportate da who ci sono pure i dati relativi al tempo di CPU usato dall’utente ed il comando corrente; si avrà cioe:

[email protected]:~$ w

14:49:36 up 4 days,

USER      TTY         FROM

piccardi tty1

piccardipts/0192.168.0.312:450.00s0.49s0.01sw
piccardipts/1:0.0Sun123days1:001:00top

Infine oltre alle informazioni riguardo gli utenti e le attivit di sistema correnti, si possono consultare quelle archiviate riguardo gli accessi passati con il comando last. In genere il periodo coperto e quello dell’ultimo mese, in quanto, il file /var/log/wtmp da cui vengono ricavate le informazioni viene ruotato mensilmente.

Il comando stampa una lista degli ultimi accessi avvenuti in forma analoga a who, ma riporta oltre alla data di ingresso anche quella di uscita e la durata di ciascuna sessione, vengono stampate inoltre informazioni generali, come le date del riavvio del sistema; si avr cioe qualcosa del tipo:

[email protected]:~$ last       
piccardi pts/0192.168.0.3Thu Mar 2712:45still loggedin
piccardi pts/0192.168.0.3Wed Mar 2622:22 – 01:29(03:07)
piccardipts/0192.168.0.3WedMar2612:11 – 16:20(04:09)
piccarditty1 WedMar2600:02still loggedin

reboot     system boot    2.6.17-12-powerp Sun Mar 23 12:05 – 15:03 (4+02:57)

wtmp begins Fri Mar    2 17:17:47 2007

Il comando prevede varie opzioni, come -n seguita da un numero, che consente di indicare quante righe stampare o -t seguita da una data, che stampa lo stato a quella data; si puo cos vedere chi era collegato osservando le righe con still logged in. Al solito per una descrizione completa si faccia riferimento alla pagina di manuale.

In ne oltre last altri comandi che vengono in genere utilizzati per ottenere informazioni sugli accessi sono lastb, che stampa l’elenco dei tentativi falliti, e uptime, che e quello che produce la riga iniziale con i dati relativi a utenti collegati e tempo dall’ultimo avvio che viene usata come prima riga da top e w. Per tutti i dettagli come sempre si consultino le pagine di manuale.

Un ultimo comando che permette di ottenere informazioni sul sistema e uname, che stampa una serie di informazioni generiche.

Se invocato senza argomenti il comando si limita a stampare il nome del proprio kernel (vale a dire Linux), che non e una informazione particolarmente signi cativa. Piu interessanti sono le informazioni relative all’architettura hardware o al tipo di processore stampabili rispettivamente con le opzioni -m e -p, mentre con -n si puo stampare il nome assegnato alla macchina stessa e con -a tutte le informazioni disponibili, ottenendo qualcosa del tipo:

[email protected]:~$ uname -a

Linux anarres 2.6.32-5-686 #1 SMP Mon Jan 16 16:04:25 UTC 2012 i686 GNU/Linux L’uso piu frequente del comando pero e quello in cui esso viene invocato con l’opzione -r per ottenere soltanto la versione del kernel corrente (nel caso 2.6.32-5-686), informazione che viene usata spesso nella gestione dei moduli dello stesso