Amministrare GNU/Linux è il libro di Simone Piccardi, giunto da qualche mese alla seconda edizione, che accompagna il lettore all´utilizzo ed all´amministrazione di un sistema Linux generico.
Il testo copre gli argomenti previsti negli esami di certificazione LPIC-1 del Linux Professional Institute; è pubblicato con licenza GNU FDL ed è scaricabile gratuitamente dal sito truelite, oppure risulta possibile acquistarlo in formato cartaceo sul sito lulu.com (munitevi di pazienza: il mio ordine ha impiegato un bel mesetto per essermi consegnato, ma, come vedremo, l´attesa sarà ben ripagata).
L´occasione di parlare di quest´ottima opera ci è di spunto al fine di elencare gli argomenti esposti nel libro, con una breve spiegazione o ampliati mediante link (limitatamente agli argomenti base) a vantaggio dei lettori neofiti che si affaccino per la prima (ma anche seconda) volta a Linux anche a mezzo di questo nostro blog.
CAPITOLO 1
Il primo capitolo introduce un sistema Linux (Linux è il kernel; i programmi di sistema e applicativi, di installazione ed aggiornamento software sono forniti dalle sue distribuzioni). Linux è un sistema operativo derivato da UNIX (riscritto "per divertimento" su ispirazione di questo) multitasking e multiutente, monolitico ma modulare (espandibile mediante moduli del kernel), capace di memoria virtuale e che opera in modalità protetta: l´ambiente (processi) disponibile agli utenti ("user space") comunica con il kernel, che gira in kernel space, attraverso opportune e definite chiamate di sistema (system call, che seguono lo standard POSIX). È quindi solo il kernel a poter accedere alle risorse hardware della macchina (memoria, CPU, disco), che le applicazioni possono usare solo tramite le dette interfacce, messe a disposizione dalla GNU C library (per gli amici, glibc), uno dei componenti fondamentali di ogni sistema Linux.
Sui file: sono organizzati mediante filesystem, i quali devono esser "montati" in modo che i file siano resi visibili all´interno di una certa directory. Per accedere ad un device, il kernel necessita sia degli opportuni driver (moduli) che di "capire" in quale modo sono memorizzate le informazioni. Tutto è un file: oltre ai file in senso stretto, le periferiche sono accessibili con le normali operazioni su file (a mezzo di file di device) e si hanno Unix Domain Socket per il colloquio tra processi sul medesimo host.
Per convenzione, i file il cui nome inizia con un punto sono normalmente non visibili (nascosti). Ciascun file è associato ad un inode in cui sono mantenute le informazioni che lo riguardano, come il tipo, i permessi di accesso, l´utente ed il gruppo proprietario, le dimensioni, i tempi, ed anche tutti i riferimenti ai settori del disco (blocchi fisici) che contengono i dati. In un sistema UNIX-derivato l´albero delle directory è unico (tutti i device vengono montati in opportune sottocartelle della radice). L´organizzazione dell´albero delle directory è standardizzata dallo standard Filesystem Hierarchy Standard.
Proseguendo nella lettura, vengono esplorati i concetti di processo, processo non interattivo (servizio o demone), processID, stato dei processi (runnable, sleep, uninterruptible sleep, stopped, zombie), utente con cui il processo gira, segnali di comunicazione tra processi, priorità dei processi e politica di scheduling; uso di nice (e renice) per modificarne la priorità.
Vengono elencati alcuni comandi per i file ed i processi da shell: ls (lista file), touch, rm (cancellazione file e cartelle), cp (copia), mv (spostamento), link, cd (change dir), pwd (print working directory), mkdir (creazione cartelle), ps (lista processi attivi), kill, top ed alcuni altri.
ls -l consente la visualizzazione di tutte le proprietà di un file: tipo (i più noti: file normale, directory, link simbolico, socket), permessi, numero di hard link, utente e gruppo proprietari del file, dimensione, tempo di ultima modifica (non esiste il tempo di creazione) e nome del file.
A conclusione del capitolo vengono infine trattati più nello specifico i permessi dei processi sui file: lettura, scrittura ed esecuzione, per utente / gruppo di appartenenza / altri. Bit suid e sgid. Concetto di umask e comandi chmod e chown.
CAPITOLO 2
Il Capitolo 2 verte sulla shell ed i suoi comandi. La shell è il programma che implementa l´interfaccia a linea di comando (programma chè può esser lanciato da getty, ssh(d) oppure dall´ambiente grafico). La shell di utilizzo comune nei sistemi GNU/Linux è la shell bash, che viene studiata nel dettaglio.
Vengono introdotti e spiegati i concetti di standard input, standard output, standard error, di cosa siano i comandi e la loro generica sintassi, di come "sganciare", mediante l´operatore &, l´esecuzione di un comando dalla shell corrente e porlo in background (si discute anche del comando jobs e delle combinazioni di tasti per il job-control), delle variabili shell (compresa le variabili "speciale" PATH ed il path search e LANG), del concetto e della modifica del prompt (corrispondente alla variabile shell PS1) e dei comandi echo ed export.
I comandi detti lanciati dalla shell sono suddivisi in due tipologie: eseguibili richiamati dalla stessa bash (posti in particolari locazioni quali /bin, /sbin, /usr/bin o /usr/sbin) oppure comandi interni alla stessa, come ad esempio cd.
Seguono i concetti di: alias, filename globbing e caratteri di escape, l´espansione dei comandi (con l´operatore $), la history della shell e la sua essenziale funzione di autocompletamento, i comandi di redirezione (>, >, 2>, &>) e l´operatore | per il pipelining delle istruzioni e quindi un´ampia illustrazione dei costrutti bash e su come programmare la stessa (vedere anche questa interessante risorsa su tldp.org).
Il capitolo prosegue descrivendo la configurazione delle shell di login, mediante il file (system-wide) /etc/profile (che generalmente setta PATH, prompt e umask) ed il file (valido per il singolo utente) .bash_profile (nella HOME), il quale esegue anche .bashrc. Viene quindi discusso dell´utilizzo di .bashrc (locale) e /etc/bash.bashrc (globale) per le shell non di login, i quali file in genere contengono alias.
Questo secondo, lungo, capitolo, si conclude con una panoramica di alcuni tra i comandi più usati (oltre ai già visti cp, mv, mkdir, ln, rm). Nell´ordine, vengono trattati i comandi per la ricerca di file (locate e updatedb, per la ricerca di file indicizzati, e find), quindi per la loro lettura e modifica (cat, more, less, zcat, head, tail - utilissimo per leggere i file di log - split e sort) e per ricerche ed elaborazioni attraverso regexp (grep, egrep, sed), per terminare con gli editor di testo built-in (vi ed emacs), ed altri comandi più o meno avanzati (quale ad esempio dmesg).
CAPITOLO 3
Il Capitolo 3 verte sui principali servizi di un sistema Linux (e un qualunque UNIX derivato) e la loro configurazione. Partendo dal posizionamento dei file di configurazione di servizi e programmi system-wide (/etc) e quello inerente le configurazioni personali degli utenti (/home/nomeUtente) per programmi ed impostazioni, viene spiegato il ruolo delle librerie dinamiche condivise (shared object, file con estensione .so), linkate runtime ad opera del link-loader quando un programma viene lanciato (a meno che esso non sia stato compilato staticamente).
Si continua con la loro nomenclatura: viene suddivisa in major e minor version; per convenzione, le interfacce pubbliche cambiano solo assieme alle major version, per cui aggiornando le librerie all´ultima minor version i programmi che le utilizzano non dovrebbero (condizionale) risentirne; il loro posizionamento di default (/lib e /usr/lib), l´utilizzo del comando ldd -v (lista delle librerie necessarie per un dato eseguibile, leggendo i valori dalla cache sulle funzioni presenti, /etc/ld.so.cache, cache modificata da ldconfig ad ogni modifica di libreria) ed il ruolo della più importante tra le librerie, la glibc.
Viene annotato come ldconfig crei anche i link simbolici dalla major alla minor version (di quella major) più recente, dato che le librerie vengono cercate per major version. Al fine di configurare ldconfig affinché cerchi librerie in altre cartelle che quelle di default, si deve modificare il suo file /etc/ld.so.conf.
Continuando con la lettura del capitolo, troviamo la localizzazione (i10n) ed internazionalizzazione (i18n) del sistema: modificare le lingue, salvo installazione degli opportuni pacchetti dati, viene fatto via variabile LANG (su Debian settata da /etc/default/locale), ad esempio LANG=it_IT.UTF-8: lingua, stato, codifica caratteri del sistema.
Sul tempo, il kernel "ragiona" in tempo universale UTC; la timezone contiene invece le informazioni (fuso orario, ora legale) circa la propria area, e viene definita negli zonefile, modificati via tzselect.
Segue la lista di alcuni tra i servizi comuni a tutti i sistemi Linux: cron (operazioni periodiche generali contenute in /etc/crontab e per l´utente editabili mediante crontab -u nomeUser -e), il demone per locate, at, syslog (il demone syslog crea log su disco dei messaggi ad esso inviati da programmi e kernel, via unix domain socket o socket di rete) e logrotate (programma lanciato periodicamente che gestisce i file di log: li suddivide in più file, li comprime e rimuove i più vecchi, ad evitare di riempire il filesystem).
Viene quindi trattato il server grafico X (X.Org) (che ricordiamo non fa parte del kernel, venendo eseguito in user-space come un qualsiasi altro programma) che utilizza una logica client-server (le applicazioni inviano informazioni al server grafico affinché questo disegni le finestre sul monitor; lo stack esemplificato della comunicazione prevede: X-client, GTK o Qt, Xlib -> X-protocol -> X-server, driver). L´avvio di una sessione X Server può avvenire via console oppure con login direttamente dall´ambiente grafico, via login manager (es.: gdm), che si occupa di lanciare il server grafico e di gestire il login.
L´argomento prosegue con la configurazione di X (trattazione che, in realtà, oggi risulta datata), con l´importante variabile DISPLAY (poiché è possibile lanciare più server grafici, questi devono definire il display, cioè l´identificativo, su cui girare; di default è lo 0) e coi concetti di window manager e desktop environment.
Il capitolo, infine, chiude proponendo una panoramica sul Common Unux Printing System (CUPS per gli amici).
I rimanenti capitoli vertono sull´amministrazione (ordinaria, straordinaria, avanzata e delle reti) del sistema, focalizzandosi sulla gestione dei servizi.
In definitiva, uno dei migliori libri sull´argomento che si possano trovare: consigliatissimo per tutti, dato che è scritto (e concepito) in Italiano.