Debian-Reference It
Debian-Reference It
Debian Reference
Osamu Aoki
Debian Reference ii
Questa guida di riferimento Debian, Debian Reference (versione 2.125) (2024-11-15 13:32:55 UTC) è pensata per
fornire un’ampia panoramica del sistema Debian in qualità di guida post-installazione per l’utente. Copre molti aspetti
dell’amministrazione di sistema attraverso esempi di uso di comandi di shell, pensati per chi non è sviluppatore.
Debian Reference iii
Indice
1 Tutorial GNU/Linux 1
1.1 Nozioni di base sulla console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Il prompt di shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 Il prompt di shell in una GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.3 L’account root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.4 Il prompt di shell di root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.5 Strumenti di amministrazione del sistema con interfaccia utente grafica . . . . . . . . . . . . . 3
1.1.6 Console virtuali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.7 Come uscire dal prompt dei comandi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.8 Come spegnere il sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.9 Ripristinare una console funzionante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.10 Suggerimenti per pacchetti aggiuntivi per i principianti . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.11 Un account utente extra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.12 Configurazione di sudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.13 Tempo di giocare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 File system stile Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.1 Nozioni di base sui file Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.2 Aspetti tecnici del file system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.3 Permessi del file system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.4 Controllo dei permessi per i file appena creati: umask . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.5 Permessi per gruppi di utenti (gruppi) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.6 Orari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.7 Collegamenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.8 Pipe con nome (FIFO) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.9 Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.10 File di device . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2.11 File di device speciali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2.12 procfs e sysfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2.13 tmpfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3 Midnight Commander (MC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Debian Reference iv
1.3.1 Personalizzazione di MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3.2 Avvio di MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3.3 Gestore dei file in MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.4 Trucchetti per la riga di comando di MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.5 L’editor interno di MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.6 Il visualizzatore interno di MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3.7 Funzionalità di avvio automatico di MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3.8 File system virtuale di MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.4 Ambiente di lavoro di base in stile Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.4.1 La shell di login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.4.2 Personalizzare bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.4.3 Associazioni di tasti speciali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4.4 Operazioni del mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.4.5 Il paginatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.4.6 L’editor di testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.4.7 Impostare un editor di testi predefinito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.4.8 Usare vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.4.9 Registrare le attività della shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.4.10 Comandi Unix di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.5 Il semplice comando di shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.5.1 Esecuzione dei comandi e variabili d’ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.5.2 La variabile ”$LANG” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.5.3 La variabile ”$PATH” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.5.4 La variabile ”$HOME” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.5.5 Opzioni della riga di comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.5.6 Glob della shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.5.7 Valore restituito dal comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.5.8 Sequenze tipiche di comandi e ridirezione della shell . . . . . . . . . . . . . . . . . . . . . . . . 32
1.5.9 Alias di comandi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.6 Elaborazione di testo stile Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.6.1 Strumenti Unix per il testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.6.2 Espressioni regolari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.6.3 Espressioni di sostituzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.6.4 Sostituzione globale con espressioni regolari . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.6.5 Estrarre dati da file con tabelle di testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.6.6 Frammenti di script per comandi con pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Debian Reference v
12 Programmazione 241
12.1 Script shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
12.1.1 Compatibilità con la shell POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
12.1.2 Parametri di shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
12.1.3 Costrutti condizionali della shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
12.1.4 Cicli di shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
12.1.5 Variabile d’ambiente della shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
12.1.6 La sequenza di elaborazione della riga di comando di shell . . . . . . . . . . . . . . . . . . . . 245
12.1.7 Programmi di utilità per script di shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
12.2 Creazione di script in linguaggi interpretati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
12.2.1 Fare il debug di codice di linguaggi interpretati . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
12.2.2 Programma GUI con script di shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
12.2.3 Azioni personalizzate per un gestore di file con GUI . . . . . . . . . . . . . . . . . . . . . . . . 249
12.2.4 Pazzie con corti script Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
12.3 Scrivere codice in linguaggi compilati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
12.3.1 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
12.3.2 Semplice programma in C (gcc) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
12.3.3 Flex - un Lex migliorato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
12.3.4 Bison - Yacc migliorato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
12.4 Strumenti di analisi statica del codice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
12.5 Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Debian Reference xv
A Appendice 262
A.1 Il labirinto Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
A.2 Storia del copyright . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
A.3 Formato del documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Debian Reference xvi
Questo testo è libero; lo si può ridistribuire e/o modificare nei termini della GNU General Public License in qualsiasi
versione aderente alle Linee guida Debian per il Software Libero (DFSG).
Debian Reference xxii
Prefazione
Questa guida di riferimento Debian Reference (versione 2.125) (2024-11-15 13:32:55 UTC) è pensata per fornire
un’ampia panoramica dell’amministrazione di un sistema Debian in qualità di guida post-installazione per l’utente.
Si rivolge ad un lettore che abbia voglia di imparare gli script di shell, ma che non è pronto a leggere tutti i sorgenti C
per scoprire come funzioni il sistema GNU/Linux.
Per istruzioni sull’installazione, vedere:
Note legali
Non viene fornita alcuna garanzia. Tutti i marchi registrati appartengono ai rispettivi proprietari.
Il sistema Debian è, di per sé, un’entità in continuo movimento; ciò rende difficile alla sua documentazione essere
aggiornata e corretta. Sebbene come base per questo testo sia stata usata la versione testing al momento della
sua stesura, alcuni contenuti potrebbero essere obsoleti al momento della sua lettura.
Si consideri questo documento come un riferimento secondario. Esso non sostituisce nessuna guida autorevole.
L’autore e i collaboratori non si assumono responsabilità per le conseguenze di errori, omissioni o ambiguità presenti
in questo documento.
Cosa è Debian
Il Progetto Debian è un’associazione di individui che hanno fatto causa comune per creare un sistema operativo
libero. La sua distribuzione è caratterizzata dai seguenti aspetti.
• Impegno per la libertà del software: Il Contratto sociale Debian e le Linee Guida Debian per il Software Libero
(DFSG).
• Sforzo volontario non pagato, distribuito, basato su Internet https://www.debian.org.
• Vasto numero di pacchetti software di alta qualità pre-compilati.
• Attenzione alla stabilità e alla sicurezza, con facile accesso agli aggiornamenti di sicurezza.
• Attenzione ad aggiornamenti senza problemi ai pacchetti più recenti dei software negli archivi testing.
• Vasto numero di architetture hardware supportate.
I vari pezzi di Software Libero in Debian provengono da GNU, Linux, BSD, X, ISC, Apache, Ghostscript, Common
Unix Printing System , Samba, GNOME, KDE, Mozilla, LibreOffice, Vim, TeX, LaTeX, DocBook, Perl, Python, Tcl,
Java, Ruby, PHP, Berkeley DB, MariaDB, PostgreSQL, SQLite, Exim, Postfix, Mutt, FreeBSD, OpenBSD, Plan 9 e
molti altri progetti software liberi indipendenti. Debian integra questa diversità del Software Libero in un unico sistema.
Debian Reference xxiii
Linee guida
Nella stesura di questo documento sono state seguite le seguenti linee guida.
• Concentrarsi sugli strumenti senza interfaccia utente grafica e sulla console. (Usare esempi shell.)
• Essere obiettivi. (Usare popcon, ecc.)
Suggerimento
Si è cercato di spiegare aspetti gerarchici e i più bassi livelli di funzionamento del sistema.
Prerequisiti
avvertimento
Il lettore deve fare lo sforzo di cercare risposte da solo andando oltre questa documentazione. Questo
documento fornisce solo degli efficaci punti di partenza.
Nota
Per una documentazione dettagliata può essere necessario installare il corrispondente pacchetto di documenta-
zione il cui nome ha il suffisso ”-doc” .
Debian Reference xxiv
Convenzioni
Questo documento fornisce informazioni attraverso il seguente stile semplificato di rappresentazione con esempi di
comandi per la shell bash(1).
# command-in-root-account
$ command-in-user-account
Questi prompt di shell distinguono gli account usati e corrispondono a ciò che si ottiene impostando le variabili d’am-
biente in questo modo: ”PS1='\$'” e ”PS2=' '”. Questi valori sono stati scelti per aumentare la leggibilità del
documento e non sono quelli tipici di una reale installazione del sistema.
Tutti gli esempi di comandi sono nella localizzazione inglese ”LANG=en_US.UTF8”. Non aspettarsi che negli esempi
siano tradotte le stringhe segnaposto come command-in-root-account e command-in-user-account. Que-
sta è una scelta intenzionale per mantenere tutti gli esempi tradotti aggiornati.
Nota
Si veda il significato delle variabili d’ambiente ”$PS1” e ”$PS2” in bash(1).
Le azioni che gli amministratori di sistema devono eseguire sono scritte all’infinito, ad esempio ”Premere il tasto Invio
dopo ogni stringa di comando digitata nella shell.”
La colonna descrizione ed altre simili in tabelle possono contenere un sintagma nominale che segue le convenzioni
per le descrizioni brevi dei pacchetti e che perde l’articolo iniziale quali ”un” ed ”il”. Le colonne possono, in alternativa,
contenere un verbo al presente seguendo la convenzione usata nella descrizione breve dei comandi nelle pagine
man. Questa scelta potrà apparire strana per qualcuno, ma fa parte della scelta deliberata dell’autore di mantenere
più semplice possibile lo stile di questa documentazione. In entrambi i casi l’iniziale non è maiuscola e manca il punto
finale seguendo le dette convenzioni per le descrizioni brevi.
Nota
I nomi propri, inclusi i nomi dei comandi mantengono la corretta iniziale maiuscola/minuscola indipendentemente
dalla loro posizione.
Un breve comando citato all’interno di un paragrafo di testo viene reso dal carattere a spaziatura fissa racchiuso tra
virgolette doppie come in ”aptitude safe-upgrade”.
Dati testuali da un file di configurazione citati all’interno di un paragrafo di testo vengono resi dal carattere a spaziatura
fissa racchiuso tra virgolette doppie come in ”deb-src”.
Un comando viene reso dall’uso del carattere a spaziatura fissa per il suo nome, seguito eventualmente dal numero di
sezione della sua pagina man tra parentesi, come in bash(1). Ci si senta incoraggiati ad ottenere ulteriori informazioni
digitando quanto segue.
$ man 1 bash
Una pagina man viene resa dall’uso del carattere a spaziatura fissa per il suo nome seguito dal numero della sua
sezione nelle pagine man racchiuso tra parentesi, come in sources.list(5). Ci si senta incoraggiati ad ottenere
ulteriori informazioni digitando quanto segue.
$ man 5 sources.list
Una pagina info viene resa dal suo comando corrispondente in carattere a spaziatura fissa racchiuso tra virgolette
doppie, come in ”info make”. Ci si senta incoraggiati ad ottenere ulteriori informazioni digitando quanto segue.
$ info make
Un nome di file viene reso dal carattere a spaziatura fissa tra virgolette doppie, come in ”/etc/passwd”. Per quanto
riguarda i file di configurazione ci si senta incoraggiati ad ottenere ulteriori informazioni digitando quanto segue.
Debian Reference xxv
$ sensible-pager "/etc/passwd"
Un nome di directory viene reso dal carattere a spaziatura fissa tra virgolette doppie, come in «/etc/apt/». Ci si
senta incoraggiati ad esplorare il suo contenuto digitando quanto segue.
$ mc "/etc/apt/"
Un nome di pacchetto viene reso dal carattere a spaziatura fissa, come in vim. Ci si senta incoraggiati ad ottenere
ulteriori informazioni digitando quanto segue.
$ dpkg -L vim
$ apt-cache show vim
$ aptitude show vim
La posizione di una documentazione può essere indicata con il nome di file in carattere a spaziatura fissa tra virgolette
doppie, come in ”/usr/share/doc/base-passwd/users-and-groups.txt.gz” e ”/usr/share/doc/base-passwd
oppure dal suo URL, come in https://www.debian.org. Ci si senta incoraggiati a leggere la documentazione digitando
quanto segue.
$ zcat "/usr/share/doc/base-passwd/users-and-groups.txt.gz" | sensible-pager
$ sensible-browser "/usr/share/doc/base-passwd/users-and-groups.html"
$ sensible-browser "https://www.debian.org"
Una variabile d’ambiente viene resa dal suo nome preceduto dal segno ”$” in carattere a spaziatura fissa tra
virgolette doppie, come in ”$TERM”. Ci si senta incoraggiati ad ottenere il suo valore attuale digitando quanto segue.
$ echo "$TERM"
Popcon
I dati da popcon sono usati come misura oggettiva della popolarità di ciascun pacchetto. Sono stati scaricati il 2024-
03-03 11:51:37 UTC e contengono i dati totali inviati da 237734 rapporti su 198687 pacchetti binari e 27 architetture.
Nota
Notare che l’archivio amd64 unstable contiene attualmente solo 74165 pacchetti. I dati di popcon contengono
rapporti inviati da molte installazioni su sistemi vecchi.
Il numero popcon, preceduto da ”V:” che sta per ”voti”, è calcolato così: ”1000 * (rapporti popcon inviati con il pacchetto
eseguito di recente sul PC)/(numero totale di rapporti popcon inviati)”.
Il numero popcon, preceduto da ”I:” che sta per ”installazioni”, è calcolato così: ”1000 * (rapporti popcon inviati con il
pacchetto installato sul PC)/(numero totale di rapporti popcon inviati)”.
Nota
I numeri popcon non dovrebbero essere considerati una misura assoluta dell’importanza dei pacchetti. Ci sono molti
fattori che possono influenzare le statistiche. Per esempio, alcuni sistemi che partecipano a popcon possono avere
montato directory quali ”/usr/bin” con l’opzione ”noatime” per migliorare le prestazioni di sistema, influenzando
di fatto negativamente i ”voti” per quel sistema.
Debian Reference xxvi
Anche i dati sulla dimensione dei pacchetti sono usati come misura oggettiva per ciascun pacchetto. Sono basati sulla
”Installed-Size:” riportata dal comando ”apt-cache show” o ”aptitude show” (attualmente sull’architettura
amd64 per la versione unstable). La dimensione è riportata in KiB (Kibibyte = unità di 1024 byte).
Nota
Una piccola dimensione per un pacchetto può indicare che esso è, nella versione unstable un pacchetto fittizio
che installa, attraverso le dipendenze, altri pacchetti con contenuti sostanziosi. Il pacchetto fittizio permette una
transizione facile o una suddivisione di pacchetto.
Nota
Una dimensione di pacchetto seguita da ”(*)” indica che il pacchetto non è presente nella versione unstable ed
è stata quindi usata la dimensione del pacchetto in experimental al suo posto.
Se si trovano errori in questo documento segnalare i bug nel pacchetto debian-reference usando reportbug(1).
Se possibile, includere i suggerimenti di correzione come ”diff -u alla versione in puro testo o ai sorgenti.
Ecco alcune interessanti citazioni dalla mailing list di Debian che potrebbero illuminare i nuovi utenti.
• ”Questo è Unix. Ti dà abbastanza corda da impiccarti.” --- Miquel van Smoorenburg <miquels at cistron.nl>
• ”Unix È amichevole... è solo molto selettivo riguardo i suoi amici.” --- Tollef Fog Heen <tollef at add.no>
Wikipedia ha un articolo (in inglese) sulla ”Filosofia Unix” che elenca citazioni interessanti.
Debian Reference 1 / 263
Capitolo 1
Tutorial GNU/Linux
Penso che imparare un sistema informatico sia come imparare una lingua straniera. Anche se le guide e la docu-
mentazione sono utili, si deve fare pratica diretta. Per aiutare il lettore a iniziare dolcemente, ho elaborato alcuni punti
base.
Il potente design di Debian GNU/Linux deriva dal sistema operativo Unix, cioè un sistema operativo multiutente e
multitasking. Bisogna imparare a sfruttare la potenza di queste caratteristiche e le somiglianze tra Unix e GNU/Linux.
Non bisogna scappare dai testi pensati per Unix e affidarsi solamente a testi su GNU/Linux dato che in questo modo
ci si priva di molte informazioni utili.
Nota
Se si è usato tramite strumenti a riga di comando un sistema *nix per un certo tempo, probabilmente si sa già tutto
ciò che viene spiegato qui. Si usi questa sezione come un ripasso e per consultazioni.
All’avvio del sistema, se non è stata installato alcun ambiente con GUI come il sistema desktop GNOME o KDE.
Supponiamo che il proprio nome host sia pippo, il prompt di login apparirà come segue.
Se è stato installato un ambiente GUI, allora ci si può comunque spostare ad un prompt di login a caratteri premendo
Ctrl-Alt-F3 e si può ritornare alla GUI con Ctrl-Alt-F2 (vedere Sezione 1.1.6 in seguito per maggiori informazioni).
foo login:
Al prompt di login digitare il proprio nome utente, ad esempio pinguino e premere il tasto Invio, poi digitare la propria
password e premere di nuovo Invio.
Nota
Nella tradizione Unix, il nome utente e la password di un sistema Debian distinguono le lettere maiuscole dalle
minuscole. Il nome utente di solito viene scelto usando solo lettere minuscole. Il primo account utente viene nor-
malmente creato durante l’installazione. Account utente aggiuntivi possono essere creati da root con adduser(8).
Il sistema si presenta con il messaggio di benvenuto memorizzato in ”/etc/motd” (Message Of The Day, messaggio
del giorno) e fornisce un prompt dei comandi.
Debian Reference 2 / 263
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Se è stato installato un ambiente con GUI durante l’installazione, all’avvio del sistema viene presentata una schermata
grafica di login. Si inseriscono il nome utente e la password per fare il login come utente non privilegiato. Usare il
tasto Tab per spostarsi dal campo del nome utente a quello della password e viceversa, oppure usare il mouse e il
clic principale.
Si può ottenere il prompt di shell in un ambiente GUI avviando un programma emulatore di terminale X co-
me gnome-terminal(1), rxvt(1) o xterm(1). Nell’ambiente desktop GNOME può essere fatto premendo il tasto
SUPER (tasto Windows) e digitando ”terminal” per cercare il prompt.
In altri sistemi Desktop (come fluxbox), potrebbe non esserci un punto evidente per l’apertura del menu. Se si è
in questa condizione, provare a fare clic, con il tasto destro, sullo sfondo della schermata del desktop e sperare che
appaia un menu.
L’account root viene anche indicato come superutente o utente privilegiato. Da questo account si possono eseguire
i seguenti compiti amministrativi.
• Leggere, scrivere e cancellare qualsiasi file sul sistema indipendentemente dai suoi permessi.
• Impostare il proprietario e i permessi di qualunque file sul sistema.
Questi poteri illimitati dell’account root rendono necessario essere prudenti e responsabili nel loro uso.
avvertimento
Non comunicare mai la password di root ad altri.
Debian Reference 3 / 263
Nota
I permessi di un file (inclusi i device hardware come CD-ROM, ecc. che sono nient’altro che un altro file per il
sistema Debian) lo possono rendere inutilizzabile o inaccessibile per gli utenti non root. Benché usare l’account
root sia un metodo veloce per affrontare questo tipo di situazione, la sua soluzione dovrebbe essere l’impostazione
degli appropriati permessi e gruppi proprietari per il file (vedere Sezione 1.2.3).
Ecco alcuni metodi di base per ottenere il prompt di shell per root usando la password di root.
Quando il menu del desktop non avvia gli strumenti con interfaccia grafica per l’amministrazione di sistema con i
privilegi appropriati, si può avviarli dal prompt di shell di root degli emulatori di terminale, quali gnome-terminal(1),
rxvt(1) o xterm(1). Vedere Sezione 1.1.4 e Sezione 7.9.
avvertimento
Non avviare mai il gestore di sessioni/display manager della GUI dall’account root inserendo root al prompt
di un display manager come gdm3(1).
Non eseguire mai in X Window programmi con interfaccia utente grafica non fidati da remoto quando sono
visualizzate informazioni critiche, dato che potrebbero spiare lo schermo X.
Nel sistema Debian standard, ci sono sei console a caratteri in stile VT100 disponibili tra cui ci si può spostare per
avviare una shell di comando direttamente sull’host Linux. A meno che non si sia in un ambiente con interfaccia
grafica, si può passare da una console virtuale all’altra usando simultaneamente il tasto_Alt_sinistro e uno dei
tasti F1 — F6. Ogni console a caratteri permette un login indipendente nell’account e offre un ambiente multiutente.
L’ambiente multiutente è una bellissima caratteristica di Unix e ci si può abituare presto a dipendere da esso.
Se si è nell’ambiente con GUI, si accede alla console a caratteri 3 premendo i tasti Ctrl-Alt-F3, cioè premendo con-
temporaneamente il tasto_Ctrl_sinistro, il tasto_Alt_sinistro e il tasto_F3. Si può tornare all’ambiente
GUI, che di solito è in esecuzione sulla console virtuale 2, premendo Alt-F2.
In alternativa ci si può spostare in un’altra console virtuale, per esempio la console 3, dalla riga di comando.
# chvt 3
Debian Reference 4 / 263
Si digita Ctrl-D, cioè il tasto_Ctrl_sinistro e il tasto_d vengono premuti contemporaneamente al prompt dei
comandi per chiuderà l’attività della shell. Se si è nella console a caratteri, in questo modo si ritorna al prompt di login.
Anche se questi caratteri di controllo vengono indicati con le lettere maiuscole, come ”control D”, non è necessario
premere il tasto Maiusc. Per indicare Ctrl-D viene anche usata l’espressione abbreviata ^D. In alternativa si può
digitare ”exit”.
Se si sta usando x-terminal-emulator(1) , in questo modo si può chiudere la finestra dell’emulatore di terminale
(x-terminal-emulator).
Esattamente come ogni altro SO moderno in cui le operazioni su file comportano una cache dei dati in memoria per
migliorare le prestazioni, il sistema Debian ha bisogno della appropriata procedura di spegnimento prima che l’alimen-
tazione possa essere staccata in modo sicuro. Questo serve a preservare l’integrità dei file, forzando la scrittura su
disco di tutti i cambiamenti avvenuti in memoria. Se è disponibile il controllo software dell’alimentazione, la procedura
di spegnimento automaticamente toglie l’alimentazione al sistema. (In caso contrario può essere necessario tener
premuto per alcuni secondi il tasto di accensione/spegnimento.)
Si può spegnere il sistema dalla riga di comando nella normale modalità multiutente.
# shutdown -h now
Quando, dopo aver fatto qualcosa di strano come ”cat un-qualche-file-binario”, lo schermo impazzisce
digitare ”reset” al prompt dei comandi. Mentre lo si digita il comando potrebbe non essere visualizzato. Si può
anche usare ”clear” per pulire lo schermo.
Sebbene anche l’installazione minima del sistema Debian, senza alcun ambiente desktop, fornisca le funzionalità Unix
di base è una buona idea installare con apt-get(8) alcuni pacchetti aggiuntivi per la riga di comando e i terminali
a caratteri basati su curses, come mc e vim con cui i principianti possono fare i primi passi. Eseguire i comandi
seguenti.
# apt-get update
...
# apt-get install mc vim sudo aptitude
...
Se questi pacchetti sono già installati, nessun nuovo pacchetto sarà installato.
Potrebbe essere una buona idea leggere un po’ di documentazione.
Si possono installare alcuni di questi pacchetti usando i comandi seguenti.
# apt-get install package_name
Debian Reference 5 / 263
Se non si vuole usare il proprio account utente principale per le esercitazioni descritte in seguito, si può creare un
account utente per esercitarsi, ad esempio pesce con il comando seguente.
# adduser fish
Nei sistemi non Debian e Debian specializzati, le attvità descritte sopra devono usare invece le utilità a basso livello
useradd(8) e userdel(8).
Per la tipica postazione di lavoro di un unico utente, come il sistema desktop Debian su un PC portatile, è frequente
l’uso di una semplice configurazione di sudo(8), come qui di seguito descritto, per permettere all’utente non privi-
legiato, ad esempio pinguino, di ottenere privilegi di amministratore con la sola propria password, senza quella
dell’utente root.
# echo "penguin ALL=(ALL) ALL" >> /etc/sudoers
In alternativa è uso comune usare la configurazione seguente per permettere all’utente non privilegiato, ad esempio
pinguino, di ottenere privilegi di amministratore senza alcuna password.
# echo "penguin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
Debian Reference 6 / 263
Questo trucco dovrebbe essere usato esclusivamente per le postazioni di lavoro con un solo utente, in cui l’utente è
anche l’amministratore.
avvertimento
Non impostare account per utenti regolari su postazioni di lavoro multi-utente in questo modo perché ciò
sarebbe un grosso problema per la sicurezza del sistema.
Attenzione
Nell’esempio precedente la password e l’account di pinguino richiedono altrettanta protezione della pas-
sword e account dell’utente root.
I privilegi di amministrazione in questo contesto sono forniti a qualcuno che è autorizzato ad eseguire i
compiti di amministrazione del sistema sulla macchina. Non dare mai tali privilegi ad un manager del di-
partimento di Amministrazione della propria azienda o al proprio capo, a meno che non siano autorizzati e
capaci.
Nota
Per fornire privilegi di accesso a specifici device e file, si dovrebbe considerare l’uso dei gruppi per dare un accesso
limitato, invece di usare i privilegi di root attraverso sudo(8).
Con una configurazione più attenta e precisa, sudo(8) può garantire privilegi amministrativi limitati ad altri utenti
in un sistema condiviso, senza rendere nota la password di root. Questo può aiutare la tracciabilità su host con
più di un amministratore, in modo che si possa dire chi ha fatto cosa. D’altra parte si potrebbe anche volere che
nessuno abbia tali privilegi.
Si è ora pronti a giocare con il sistema Debian senza rischi fintanto che si usa l’account utente non privilegiato.
Ciò è possibile perché il sistema Debian è, anche subito dopo l’installazione predefinita, configurato con i permessi
dei file corretti che impediscono agli utenti non privilegiati di danneggiare il sistema. Ci possono essere naturalmente
ancora dei punti deboli che possono essere sfruttati, ma chi si preoccupa di tali cose non dovrebbe leggere questa
sezione ma piuttosto il manuale Securing Debian.
Si può imparare il sistema Debian, come sistema *nix nelle sezioni seguenti.
In GNU/Linux ed altri sistemi operativi *nix, i file sono organizzati in directory. Tutti i file e le directory sono organizzati
in un unico grande albero che ha la sua radice in ”/”. Viene chiamato albero perché il file system, se viene disegnato,
ha l’aspetto di un albero messo però sottosopra.
Questi file e directory possono essere sparsi su diversi dispositivi. mount(8) serve per attaccare il file system trovato
su un qualche dispositivo al grande albero dei file. Al contrario, umount(8) lo stacca. Nei kernel Linux recenti
Debian Reference 7 / 263
mount(8) con alcune opzioni può collegare parte di un albero dei file in qualche altra posizione o può montare file
system come condivisi, privati, slave o non-collegabili. Le opzioni di montaggio supportate per ciascun file system
sono disponibili in ”/usr/share/doc/linux-doc-*/Documentation/filesystems/”.
Nei sistemi Unix vengono chiamate directory quelle che in altri sistemi sono chiamate cartelle. Notare anche che
non esiste in nessun sistema Unix un concetto di unità, come ”A:”. C’è un solo unico file system e tutto vi è incluso.
Questo è un grandissimo vantaggio rispetto a Windows.
• Nei nomi dei file si distingue tra maiuscole e minuscole. I file ”MIOFILE” e ”MioFile” sono cioè file diversi.
• La directory root indica la radice del file system, indicata semplicemente con ”/”. Non la si confonda con la directory
home dell’utente root: ”/root”.
• Ogni directory ha un nome che può contenere qualsiasi lettera o simbolo tranne”/”. La directory radice è un’ec-
cezione; il suo nome è ”/” (pronunciato ”slash” o ”directory root/radice”) e il suo nome non può essere cambiato.
• Ogni file o directory è indicato da un nome di file pienamente qualificato, un nome file assoluto o un percorso,
fornendo la sequenza di directory attraverso le quali si deve passare per raggiungerlo. I tre termini sono sinonimi.
• Tutti i nomi di file pienamente qualificati iniziano con la directory ”/” e c’è un carattere ”/” tra ciascuna directory
o file nel nome del file. Il primo carattere ”/” è la directory di più alto livello e gli altri ”/” separano le directory
successive fino a che non si raggiunge l’ultima voce che è il nome del file stesso. I termini usati possono creare
confusione. Prendere in considerazione come esempio il seguente nome file pienamente qualificato come esem-
pio: ”/usr/share/keytables/us.map.gz”; anche se ci si riferisce al solo nome base, ”us.map.gz” come al
suo nome file.
• La directory radice ha un certo numero di rami, come ”/etc/” e ”/usr/”. Queste sottodirectory a loro volta si
diramano in ulteriori sottodirectory, come ”/etc/systemd/” e ”/usr/local/”. Viste tutte insieme vengono chia-
mate albero delle directory. Si può pensare ad un nome file assoluto come ad un percorso dalla base dell’albero
(”/”) alla punta di un ramo (un file). Si può anche sentir parlare dell’albero delle directory come se fosse un albero
genealogico che comprende tutti i discendenti di un’unica figura detta directory radice (”/): le sottodirectory hanno
perciò dei genitori e un percorso mostra gli antenati completi di un file. Ci sono anche percorsi relativi che iniziano
da una qualche posizione che non sia la directory radice. Si dovrebbe tenere a mente che la directory ”../” si
riferisce alla directory genitore. Questa terminologia si applica anche ad altre strutture simili a quella delle directory,
come le strutture di dati gerarchici.
• Non c’è alcun nome speciale di percorso di directory che corrisponda ad un dispositivo fisico, come il disco fisso.
Questa è una differenza rispetto a RT-11, CP/M, OpenVMS, MS-DOS, AmigaOS e Microsoft Windows, in cui il
percorso contiene una porzione con il nome di dispositivo come ”C:\”. (Esistono tuttavia directory che si riferiscono
ai dispositivi fisici come a parte del file system normale. Vedere Sezione 1.2.2.)
Nota
Benché si possa usare quasi qualsiasi lettera o simbolo nel nome di un file, in pratica farlo non è una bella idea.
È meglio evitare qualsiasi carattere che ha spesso un significato particolare sulla riga di comando, inclusi spazi,
tabulazioni, a capo e altri caratteri speciali: { } ( ) [ ] ' ̀ " \ / > < | ; ! # & ^ * % @ $. Se si
vuole separare delle parole all’interno di un nome file, buone alternative sono un punto, un trattino ed il segno di
sottolineatura. Si può anche scrivere in maiuscolo ogni parola, ”InQuestoModo”. Gli utenti Linux esperti tendono
ad evitare l’uso degli spazi nei nomi dei file.
Nota
La parola ”root” può significare l’”utente root” o la ”directory root”. Il contesto in cui il termine viene usato dovrebbe
rendere chiaro il suo significato.
Debian Reference 8 / 263
Nota
La parola percorso non è usata solamente per un nome di file pienamente qualificato come descritto in prece-
denza, ma anche per il percorso di ricerca dei comandi. Il significato è di solito reso chiaro dal contesto.
Le linee guida raccomandate per la gerarchia dei file sono descritte in dettaglio nel Filesystem Hierarchy Standard
(”/usr/share/doc/debian-policy/fhs/fhs-2.3.txt.gz” e in hier(7)). Come inizio si dovrebbe tenere a
mente quanto segue.
Nella scia della tradizione Unix, il sistema Debian GNU/Linux fornisce il file system in cui risiedono i dati fisici nel disco
fisso e negli altri dispositivi di memorizzazione, ed inoltre le interazioni con i dispositivi hardware come gli schermi
delle console e le console seriali remote vengono rappresentate in un modo unificato in ”/dev/”.
Ogni file, directory, pipe con nome (un modo per due programmi di scambiare dati) o dispositivo fisico presente in
un sistema Debian GNU/Linux ha una struttura di dati chiamata inode che descrive gli attributi ad esso associati
come l’utente che lo possiede (proprietario), il gruppo a cui appartiene, la data dell’ultimo accesso ad esso, ecc.
L’idea di rappresentare praticamente tutto nel file system è stata un’innovazione di Unix e i kernel Linux moderni
hanno sviluppato questa idea e sono andati oltre. Ora anche le informazioni sui processi in esecuzione sul computer
possono essere trovate nel file system.
La rappresentazione astratta e unificata di entità fisiche e di processi interni è molto potente dato che permette di
usare lo stesso comando per lo stesso tipo di operazione su molti tipi di device completamente diversi l’uno dall’altro.
È anche possibile cambiare il modo in cui il kernel funziona scrivendo dati in file speciali che sono collegati ai processi
in esecuzione.
Suggerimento
Per identificare la corrispondenza tra l’albero dei file e le entità fisiche, eseguire mount(8) senza opzioni.
I permessi del file system di sistemi *nix sono definiti e influenzano tre categorie di utenti.
• Il permesso di scrittura (w) permette al proprietario di aggiungere o rimuovere file dalla directory.
• Il permesso di esecuzione (x) permette al proprietario di accedere ai file nella directory.
In questo caso il permesso di esecuzione su una directory non solo significa poter leggere i file in quella directory
ma anche poterne vedere gli attributi, come la dimensione e la data di modifica.
Per visualizzare le informazioni sui permessi (ed altro) di file e directory si usa ls(1). Quando chiamato con l’opzione
”-l” mostra, nell’ordine elencato in seguito, le seguenti informazioni.
carattere significato
- file normale
d directory
l collegamento simbolico
c device a caratteri
b device a blocchi
p pipe con nome
s socket
Tabella 1.4: Elenco dei valori possibili per il primo carattere nell’output di ”ls -l”
Per cambiare il proprietario di un file da un account root si usa chown(1). Per cambiare il gruppo di un file dall’account
del proprietario o da quello di root si usa chgrp(1). Per cambiare i permessi di accesso di file o directory dall’account
del proprietario o da quello di root si usa chmod(1). La sintassi di base per manipolare un file pippo è la seguente.
# chown newowner foo
# chgrp newgroup foo
# chmod [ugoa][+-=][rwxXst][,...] foo
Per esempio si può fare in modo che l’utente pippo sia il proprietario di un albero di directory condivisa dal gruppo
pluto con i seguenti comandi.
# cd /some/location/
# chown -R foo:bar .
# chmod -R ug+rwX,o=rX .
Nell’output di ”ls -l” il valore di questi bit è maiuscolo se il bit di permesso di esecuzione nascosto da essi è non
impostato.
L’impostazione del bit set user ID per un file eseguibile permette ad un utente di eseguire quel file con l’ID del proprie-
tario del file (per esempio root). In modo simile, l’impostazione del bit set group ID per un file eseguibile permette
ad un utente di eseguire il file con l’ID del gruppo a cui appartiene il file (per esempio root). Poiché l’impostazione di
questi bit può causare rischi in termini di sicurezza, il loro uso richiede una particolare cautela.
L’impostazione del bit set group ID per una directory abilita lo schema di creazione di file in stile BSD, in cui tutti i file
creati nella directory appartengono al gruppo della directory.
L’impostazione dello sticky bit per una directory impedisce la rimozione di un file nella directory da parte dell’utente
che non ne è il proprietario. Per preservare i contenuti di un file in directory con permessi di scrittura per tutti, come
”/tmp” o in directory con permessi di scrittura per un gruppo, non solo si deve impostare il permesso di scrittura per
il file, ma anche impostare lo sticky bit per la directory. In caso contrario, qualunque utente con i permessi di scrittura
per la directory può rimuovere il file e crearne uno nuovo con lo stesso nome.
Ecco alcuni interessanti esempi di permessi dei file.
$ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4
crw------T 1 root root 108, 0 Oct 16 20:57 /dev/ppp
-rw-r--r-- 1 root root 2761 Aug 30 10:38 /etc/passwd
-rw-r----- 1 root shadow 1695 Aug 30 10:38 /etc/shadow
-rwsr-xr-x 1 root root 973824 Sep 23 20:04 /usr/sbin/exim4
$ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src
drwxrwxrwt 14 root root 20480 Oct 16 21:25 /tmp
drwxrwsr-x 10 root staff 4096 Sep 29 22:50 /usr/local
drwxr-xr-x 10 root root 4096 Oct 11 00:28 /usr/src
drwxrwsr-x 2 root mail 4096 Oct 15 21:40 /var/mail
drwxrwxrwt 3 root root 4096 Oct 16 21:20 /var/tmp
Esiste un metodo numerico alternativo per descrivere i permessi dei file con chmod(1); tale metodo numerico usa
numeri ottali (base=8) di 3 o 4 cifre.
cifra significato
1ª cifra opzionale somma di set user ID (=4), set group ID (=2) e sticky bit (=1)
2ª cifra somma dei permessi di lettura (=4), scrittura (=2) e esecuzione (=1) per l’utente
3ª cifra come sopra, ma per ilgruppo
4ª cifra come sopra, ma per gli altri
Sembra complicato, ma è in realtà piuttosto semplice. Se si guardano le prime colonne (2-10) nell’output del comando
”ls -l” e le si leggono come una rappresentazione binaria (base=2) dei permessi sui file (dove ”-” equivale a ”0”
e ”rwx” equivalgono a ”1”), le ultime 3 cifre del valore numerico dei permessi dovrebbero apparire come la corretta
rappresentazione dei permessi sui file in numerazione ottale (base=8).
Per esempio, provare a fare quanto segue.
$ touch foo bar
$ chmod u=rw,go=r foo
$ chmod 644 bar
$ ls -l foo bar
-rw-r--r-- 1 penguin penguin 0 Oct 16 21:39 bar
-rw-r--r-- 1 penguin penguin 0 Oct 16 21:35 foo
Debian Reference 11 / 263
Suggerimento
Se si deve aver accesso alle informazioni visualizzate da ”ls -l” in script di shell, si dovrebbero usare i comandi
pertinenti, come test(1), stat(1) e readlink(1). Si possono usare anche i comandi interni della shell come ”[”
o ”test”.
I permessi che vengono applicati ad un file o una directory appena creati sono limitati dal comando interno della shell
umask. Vedere dash(1), bash(1) e builtins(7).
(file permissions) = (requested file permissions) & ~(umask value)
permessi delle
umask permessi dei file creati uso
directory create
0022 -rw-r--r-- -rwxr-xr-x scrivibile solo dall’utente
0002 -rw-rw-r-- -rwxrwxr-x scrivibile solo dal gruppo
Il sistema Debian usa, in modo predefinito, uno schema UPG (User Private Group, gruppo privato dell’utente). Ogni
volta che viene aggiunto un nuovo utente al sistema, viene creato un UPG; questo ha lo stesso nome dell’utente per
il quale è stato creato e quell’utente è l’unico membro dell’UPG. Lo schema UPG rende sicura l’impostazione della
umask a 0002 dato che ogni utente ha il proprio gruppo privato. (In alcune varianti di Unix è abbastanza comune
impostare tutti gli utenti normali come appartenenti ad un unico gruppo users ed è in quel caso una buona idea
impostare umask a 0022 per ragioni di sicurezza.)
Suggerimento
Abilitare UPG inserendo ”umask 002” nel file ~/.bashrc.
avvertimento
Assicurarsi di salvare le modifiche non ancora salvate prima di fare il riavvio o azioni simili.
Qualsiasi tentativo di riavvio a caldo è un fragile sostituto di un vero riavvio completo nei sistemi desktop moderni.
Nota
In alternativa, si possono aggiungere dinamicamente gli utenti ai gruppi durante il processo di autenticazione
aggiungendo la riga ”auth optional pam_group.so” al file ”/etc/pam.d/common-auth” e configurando
”/etc/security/group.conf”. (Vedere Capitolo 4.)
I dispositivi hardware sono, in un sistema Debian, semplicemente un altro tipo di file. Se si hanno problemi ad
accedere a dispositivi quali CD-ROM e chiavette USB da un account utente, si dovrebbe inserire quell’utente nel
gruppo appropriato.
Alcuni importanti gruppi pre-impostati dal sistema permettono ai loro membri l’accesso a file e device particolari senza
i privilegi di root.
Tabella 1.7: Elenco dei principali gruppi forniti dal sistema per accesso ai file
Suggerimento
È necessario far parte del gruppo dialout per riconfigurare il modem, comporre numeri, ecc. Se però root
crea file di configurazione predefiniti per i peer fidati in ”/etc/ppp/peers/”, è necessario solamente far parte del
grupo dip per creare una connessione IP dialup a tali peer fidati usando i comandi pppd(8), pon(1) e poff(1).
Alcuni importanti gruppi pre-impostati dal sistema permettono ai loro membri di eseguire particolari comandi senza i
privilegi di root.
Per l’elenco completo degli utenti e gruppi forniti dal sistema, vedere la recente versione del documento ”Utenti e
gruppi” in ”/usr/share/doc/base-passwd/users-and-groups.html” fornito dal pacchetto base-passwd.
Vedere passwd(5), group(5), shadow(5), newgrp(1), vipw(8), vigr(8) e pam_group(8) per informazioni sui co-
mandi di gestione di utenti e gruppi sul sistema.
Debian Reference 13 / 263
Tabella 1.8: Elenco dei principali gruppi forniti dal sistema per l’esecuzione di particolari comandi
1.2.6 Orari
Nota
ctime non è l’orario di creazione del file.
Nota
L’attuale significato di atime sui sistemi GNU/Linux potrebbe essere diverso dalla sua definizione storica in Unix.
• La sovrascrittura di un file cambia tutti gli attributi mtime, ctime e atime del file.
• Il cambiamento del proprietario o dei permessi di un file cambia gli attributi ctime e atime del file.
• La lettura di un file cambia l’attributo atime di un file nei sistemi Unix storici.
• La lettura di un file cambia l’attributo atime di un file in un sistema GNU/Linux se il file system è montato con
”strictatime”.
• Leggere un file per la prima volta o dopo un giorno modifica l’attributo atime del file stesso su sistemi GNU/Linux,
se il filesystem è stato montato con ”relatime”. (comportamento di default da Linux 2.6.30)
• Leggere un file non modifica l’attributo atime del file stesso su sistemi GNU/Linux se il filesystem è stato montato
con ”noatime”.
Nota
Le opzioni di mount ”noatime” e ”relatime” sono introdotte per migliorare le prestazioni in lettura del file system
nei normali casi d’uso. Semplici operazioni di lettura dei file con l’opzione ”strictatime” comportano lunghe
operazioni di scrittura per aggiornare l’attributo atime. L’attributo atime però è raramente utilizzato, a parte per il
file mbox(5). Vedere mount(8).
$ LANG=C ls -l foo
-rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
$ LANG=en_US.UTF-8 ls -l foo
-rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
$ LANG=fr_FR.UTF-8 ls -l foo
-rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo
Suggerimento
Vedere Sezione 9.3.4 per personalizzare l’output di ”ls -l”.
1.2.7 Collegamenti
Ci sono due metodi per associale un file ”pippo” ad un diverso nome file ”pluto”.
• Collegamento fisico
Vedere l’esempio seguente per notare i cambiamenti nel conteggio dei collegamenti e le sottili differenze tra i risultati
del comando rm.
$ umask 002
$ echo "Original Content" > foo
$ ls -li foo
1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo
$ ln foo bar # hard link
$ ln -s foo baz # symlink
$ ls -li foo bar baz
1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar
1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo
1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo
$ rm foo
$ echo "New Content" > foo
$ ls -li foo bar baz
1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar
1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo
1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo
$ cat bar
Original Content
$ cat baz
New Content
Il collegamento fisico può essere creato all’interno dello stesso file system e condivide lo stesso numero di inode,
come rivela l’opzione ”-i” di ls(1).
Il collegamento simbolico ha sempre permessi di accesso nominali ”rwxrwxrwx, come mostrato nell’esempio pre-
cedente, ma con gli effettivi permessi di accesso stabiliti dai permessi del file a cui punta.
Debian Reference 15 / 263
Attenzione
In generale è una buona idea non creare collegamenti simbolici complicati o non creare collegamenti fisici
per nulla, a meno di non avere una ragione molto buona per farlo. Possono diventare degli incubi quando
la combinazione logica dei collegamenti simbolici crea cicli ricorsivi nel file system.
Nota
È in generale preferibile usare collegamenti simbolici piuttosto che fisici, a meno che non sia abbia una buona
ragione per usare un collegamento fisico.
La directory ”.” punta alla directory in cui appare, perciò il conteggio dei collegamenti per ogni nuova directory inizia
da 2. La directory ”..” punta alla directory genitore, perciò il conteggio dei collegamenti di una directory aumenta con
l’aggiunta di nuove sottodirectory.
Se si è appena passati da Windows a Linux, appare presto chiaro come sia ben progettato il collegamento dei nomi
di file in Unix se paragonato con i collegamenti in ambiente Windows che sono l’equivalente più prossimo in quel
sistema. Dato che sono implementati nel file system, le applicazioni non possono vedere alcuna differenza tra un file
collegamento ed un originale. Nel caso di collegamenti fisici, non c’è realmente nessuna differenza.
Una pipe con nome è un file che si comporta da pipe. Si mette qualcosa dentro il file e questa cosa esce dall’altra
parte. Questa è chiamata una FIFO (First-In-First_Out, primo ad entrare-primo ad uscire): la prima cosa che viene
immessa nella pipe è la prima ad uscire dall’altra estremità.
Se si scrive su una pipe con nome, il processo che sta eseguendo la scrittura nella pipe non termina fino a che
l’informazione scritta nella pipe non viene letta. Se si legge da una pipe con nome, il processo di lettura attende che
non ci sia più nulla da leggere prima di terminare. La dimensione della pipe è sempre zero: non archivia dati, ma
semplicemente collega due processi come fa la funzionalità fornita dalla sintassi per pipe ”|” della shell. Tuttavia,
dato che questa pipe ha un nome, i due processi non devono essere nella stessa riga di comando e nemmeno essere
eseguiti dallo stesso utente. Le pipe sono un’innovazione di Unix di grandissimo impatto.
Per esempio, provare a fare quanto segue.
$ cd; mkfifo mypipe
$ echo "hello" >mypipe & # put into background
[1] 8022
$ ls -l mypipe
prw-rw-r-- 1 penguin penguin 0 Oct 16 21:49 mypipe
$ cat mypipe
hello
[1]+ Done echo "hello" >mypipe
$ ls mypipe
mypipe
$ rm mypipe
1.2.9 Socket
I socket sono usati moltissimo da tutte le comunicazioni Internet, da database e dal sistema operativo stesso. Sono
simili alle pipe con nome (FIFO) e permettono ai processi di scambiare informazioni anche tra computer diversi. Per
un socket, non è necessario che questi processi siano in esecuzione contemporaneamente, né di essere eseguiti
come processi figli di uno stesso processo antenato. Questo è il punto culminante della comunicazione tra processi
(IPC). Lo scambio di informazioni può avvenire sulla rete tra host diversi. I due più comuni sono il socket Internet e
gli Unix domain socket.
Debian Reference 16 / 263
Suggerimento
”netstat -an” fornisce una vista d’insieme molto utile dei socket aperti su un dato sistema.
I file di device fanno riferimento a dispositivi fisici o virtuali sul sistema, come i dischi fissi, la scheda video, lo schermo
o la tastiera. Un esempio di dispositivo virtuale è la console, rappresentata da ”/dev/console”.
Ci sono 2 tipi di file di device.
• Device a caratteri
I file di device possono essere letti e scritti, anche se è probabile che i file contengano dati binari che appaiono come
farfuglii incomprensibili per le persone. La scrittura diretta di dati in questi file è utile a volte per trovare la soluzione
a problemi con le connessioni hardware. Si può, per esempio, fare il dump di un file di testo in un device di stampa
”/dev/lp0” o inviare comandi del modem alla porta seriale appropriata ”/dev/ttyS0”. Ma, a meno che ciò non
venga fatto con cautela, può causare grandissimi disastri. Perciò, essere prudenti.
Nota
Per il normale accesso ad una stampante, usare lp(1).
I numeri di nodo dei device sono visualizzati se si esegue ls(1) come nell’esempio seguente.
$ ls -l /dev/sda /dev/sr0 /dev/ttyS0 /dev/zero
brw-rw---T 1 root disk 8, 0 Oct 16 20:57 /dev/sda
brw-rw---T+ 1 root cdrom 11, 0 Oct 16 21:53 /dev/sr0
crw-rw---T 1 root dialout 4, 64 Oct 16 20:57 /dev/ttyS0
crw-rw-rw- 1 root root 1, 5 Oct 16 20:57 /dev/zero
• ”/dev/sda” ha major number del device 8 e minor number del device 0. È accessibile in lettura e scrittura dagli
utenti che appartengono al gruppo disk.
• ”/dev/sr0” ha major number del device 11 e minor number del device 0. È accessibile in lettura e scrittura dagli
utenti che appartengono al gruppo cdrom.
• ”/dev/ttyS0” ha major number del device 4 e minor number del device 64. È accessibile in lettura e scrittura dagli
utenti che appartengono al gruppo dialout.
• ”/dev/zero” ha major number del device 1 e minor number del device 5. È accessibile in lettura e scrittura da
chiunque.
Nei sistemi Linux moderni il file system sotto ”/dev” viene popolato automaticamente dal meccanismo udev(7).
Debian Reference 17 / 263
procfs e sysfs, montati in ”/proc” e ”/sys” sono pseudo-file system ed espongono strutture interne di dati del ker-
nel nello spazio utente. In altre parole, queste voci sono virtuali, funzionano cioè come una comoda finestra sul
funzionamento del sistema operativo.
La directory ”/proc” contiene (tra le altre cose) una sottodirectory per ciascun processo in esecuzione sul sistema
che prende nome dall’ID del processo (PID). Le utilità di sistema, come ps(1), che accedono alle informazioni sui
processi, ottengono le loro informazioni da questa struttura di directory.
Le directory in ”/proc/sys/” contengono interfacce per cambiare certi parametri del kernel durante l’esecuzione.
(Si può fare la stessa cosa tramite comandi sysctl(8) specifici o tramite il suo file di precaricamento/configurazione
”/etc/sysctl.conf”.)
Le persone spesso vanno in panico quando si accorgono di un file in particolare, ”/proc/kcore” che è particolar-
mente enorme. È (più o meno) una copia del contenuto della memoria del computer ed è usato per fare il debug del
kernel. È un file virtuale che punta alla memoria del computer perciò non ci si preoccupi della sua dimensione.
La directory ”/sys” contiene strutture dati del kernel esportate, i loro attributi e i collegamenti tra di esse. Contiene
anche interfacce per cambiare alcuni parametri del kernel durante l’esecuzione.
Vedere proc.txt(.gz)”, ”sysfs.txt(.gz)” e altri documenti correlati nella documentazione del kernel Linux
(”/usr/share/doc/linux-doc-*/Documentation/filesystems/*”) fornita dai pacchetti linux-doc-*.
1.2.13 tmpfs
tmpfs è un file system temporaneo che contiene tutti i file nella memoria virtuale. I dati del tmpfs nella page cache in
memoria possono essere spostati nello spazio di swap su disco quando necessario.
La directory ”/run” viene montata come il tmpfs nelle prime fasi del processo di avvio. Ciò vi permette la scrittura
anche quando la directory ”/” è montata in sola lettura. Questa è la nuova posizione per la memorizzazione dei file
transitori e sostituisce diverse posizioni descritte nella versione 2.3 del Filesystem Hierarchy Standard(Standard per
la gerarchia del file system):
• ”/var/run” → ”/run”
• ”/var/lock” → ”/run/lock”
Debian Reference 18 / 263
• ”/dev/shm” → ”/run/shm”
Midnight Commander (MC) è un ”coltellino svizzero” GNU per la console Linux ed altri ambienti in terminale. Dà ai
principianti la possibilità di usare una console comandata da menu che è molto più facile da imparare dei comandi
Unix standard.
Potrebbe essere necessario installare il pacchetto di Midnight Commander che si chiama ”mc” con il seguente co-
mando.
$ sudo apt-get install mc
Usare il comando mc(1) per esplorare il sistema Debian. È il modo migliore di imparare. Esplorare qualche posizione
interessante usando semplicemente i tasti freccia e il tasto Invio.
1.3.1 Personalizzazione di MC
Per far sì che MC cambi la directory di lavoro in uscita e si sposti con cd nella directory, suggerisco di modificare
”~/.bashrc” per includere uno scipt fornito nel pacchetto mc.
. /usr/lib/mc/mc.sh
Vedere mc(1) (sotto l’opzione ”-P”) per capirne la ragione. (Se non è chiaro esattamento quello di cui sto parlando,
si può tornare a questo più tardi.)
1.3.2 Avvio di MC
MC si prende cura di tutte le operazioni sui file attraverso i suoi menu, richiedendo perciò solo un minimo sforzo
da parte dell’utente. Premere semplicemente F1 per ottenere la schermata di aiuto. Si può giocherellare con MC
premendo semplicemente i tasti freccia e i tasti funzione.
Nota
In alcune console, come gnome-terminal(1), le pressioni dei tasti funzione potrebbero essere rubate dal pro-
gramma di console. Si possono disabilitare queste funzionalità per gnome-terminal nei menu ”Preferenze” →
”Generale” e ”Scorciatoie”.
Se si incontrano problemi di codifica dei caratteri con visualizzazione di caratteri spazzatura, l’aggiunta dell’opzione
”-a” alla riga di comando di MC può aiutare a prevenirli.
Se ciò non risolve i problemi di visualizzazione in MC, vedere Sezione 9.5.6.
Debian Reference 19 / 263
L’impostazione predefinita è con due pannelli di directory contenenti gli elenchi dei file. Un’altra utile modalità è
l’impostazione della finestra destra per contenere le ”informazioni” per vedere informazioni sui privilegi di accesso dei
file, ecc. Di seguito sono elencati alcuni tasti essenziali. Con il demone gpm(8) in esecuzione, si può anche usare il
mouse in una console a caratteri Linux. (Assicurarsi di premeri il tasto Maiusc per ottenere il comportamento normale
di taglia e incolla in MC.)
• Si possono specificare le directory iniziali per entrambe le finestre come argomenti per MC; per esempio, ”mc /etc
/root”.
• Esc + tasto n → Fn (cioè, Esc + 1 → F1, ecc.; Esc + 0 → F10)
• Premere Esc prima di un tasto ha lo stesso effetto di premere Alt ed il tasto contemporaneamente; premere cioè
Esc + c per Alt-C. Esc è chiamato meta-tasto ed è a volte indicato con ”M-”.
L’editor interno ha un interessante schema per il taglia e incolla. La pressione di F3 marca l’inizio di una selezione,
una seconda pressione di F3 marca la fine della selezione e la evidenzia. Si può poi muovere il cursore. Se si preme
F6, l’area selezionata viene spostata nella posizione del cursore. Se si preme F5 l’area selezionata viene copiata ed
inserita alla posizione del cursore. F2 salva il file. F10 fa uscire. La maggior parte dei tasti cursore funziona in modo
intuitivo.
Si può avviare direttamente questo editor su di un file usando uno dei comandi seguenti.
$ mc -e filename_to_edit
$ mcedit filename_to_edit
Debian Reference 20 / 263
Questo non è un editor multi-finestra, ma si possono usare più console Linux per ottenere lo stesso effetto. Per
copiare tra finestre, usare i tasti Alt-Fn per cambiare console virtuale e usare ”File→Insert file” o ”File→Copy to file”
per spostare una porzione di un file in un altro file.
Questo editor interno può essere rimpiazzato da qualsiasi editor esterno a propria scelta.
Inoltre molti programmi usano la variabile d’ambiente ”$EDITOR” o ”$VISUAL” per decidere quale editor usare.
Se inizialmente non ci si trova a proprio agio con vim(1) o nano(1), si può impostare queste variabili a ”mcedit”
aggiungendo le righe seguenti al file ”~/.bashrc”.
export EDITOR=mcedit
export VISUAL=mcedit
MC è un visualizzatore molto intelligente. È un grande strumento per cercare parole in documenti. Lo uso sempre
per i file nella directory ”/usr/share/doc”. È il metodo più veloce per navigare tra una massa di informazioni Linux.
Questo visualizzatore può essere avviato direttamente usando uno dei comandi seguenti.
$ mc -v path/to/filename_to_view
$ mcview path/to/filename_to_view
Se si preme Invio su di un file, un programma appropriato gestirà il contenuto del file (vedere Sezione 9.4.11). Questa
è una funzionalità molto comoda di MC.
tipo di file reazione al tasto Invio
file eseguibile esegue comando
file man invia i contenuti tramite pipe al software di visualizzazione
file html invia i contenuti tramite pipe al browser web
file ”*.tar.gz” e ”*.deb” naviga i suoi contenuti come se fosse una sottodirectory
Per far sì che queste funzionalità di visualizzazione dei file e di file virtuali funzionino, i file visualizzabili non dovrebbero
essere impostati come eseguibili. Cambiare il loro stato usando chmod(1) o attraverso il menu file di MC.
MC può essere usato per accedere a file in Internet. Premere F9 per andare nel menu, usare ”Invio” e ”h” per attivare
un file system Shell. Inserire un URL nella forma ”sh://[utente@]macchina[:opzioni]/[dir-remota]”, che
recupera la directory remota che apparirà come una directory locale usando ssh.
Anche se MC permette di fare quasi tutto, è bene imparare come usare gli strumenti a riga di comando invocati dal
prompt di shell e prendere familiarità con l’ambiente di lavoro in stile Unix.
Debian Reference 21 / 263
Dato che la shell di login può essere utilizzata da alcuni programmi di inizializzazione del sistema, è prudente
mantenerla come bash(1) e evitare di cambiare la shell di login in chsh(1).
Se si desidera usare un prompt di shell interattiva diverso, impostarlo dalla configurazione dell’emulatore di terminale
in GUI o avviarlo da ~/.bashrc, ad esempio mettendoci ”exec /usr/bin/zsh -i -l” o ”exec /usr/bin/fish
-i -l”.
Shell
pacchetto popcon dimensione descrizione
POSIX
V:838, Bash: GNU Bourne Again SHell (standard de
bash 7175 Sì
I:999 facto)
bash-completion
V:32, I:933 1454 N/D completamento programmabile per la shell bash
V:884,
dash 191 Sì Debian Almquist Shell, buona per script di shell
I:997
zsh V:40, I:73 2463 Sì Z shell: la shell standard con molti miglioramenti
TENEX C Shell: una versione migliorata di
tcsh V:6, I:20 1355 No
Berkeley csh
mksh V:6, I:11 1579 Sì Una versione della Korn shell
csh V:1, I:6 339 No C Shell OpenBSD, una versione di Berkeley csh
Stand-alone shell con comandi interni (non adatta
sash V:0, I:5 1157 Sì
per essere la ”/usr/bin/sh” standard)
ksh V:1, I:10 61 Sì la versione reale di AT&T della Korn shell
rc V:0, I:1 178 No implementazione della rc shell di AT&T Plan 9
Policy-compliant Ordinary SHell (derivata da
posh V:0, I:0 190 Sì
pdksh)
Suggerimento
Sebbene le shell in stile POSIX condividano la stessa sintassi di base, esse possono differire nel comportamento
relativo a cose anche basilari, come le variabili della shell e l’espansione dei modelli glob. Per i dettagli controllare
la loro documentazione.
# CD upon exiting MC
. /usr/lib/mc/mc.sh
Debian Reference 22 / 263
PATH="${PATH+$PATH:}/usr/sbin:/sbin"
# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
PATH="~/bin${PATH+:$PATH}"
fi
export PATH
EDITOR=vim
export EDITOR
Suggerimento
Si possono trovare altri suggerimenti sulla personalizzazione di bash, come Sezione 9.3.6, in Capitolo 9.
Suggerimento
Il pacchetto bash-completion permette il completamento automatico per bash.
Nell’ambiente *nix, ci sono alcune associazioni di tasti che hanno un significato speciale. Notare che in una console
a caratteri Linux normale solo i tasti Ctrl e Altsinistri funzionano come atteso. Ecco alcune combinazioni di tasti
che vale la pena ricordare.
Suggerimento
La funzionalità di Ctrl-S nel terminale può essere disabilitata usando stty(1).
Debian Reference 23 / 263
Il funzionamento del mouse per il testo nel sistema Debian mescola 2 stile con alcune peculiarità:
azione risposta
Clic sinistro e trascinamento marca l’intervallo della selezione PRINCIPALE
Clic sinistro marca l’inizio dell’intervallo per la selezione PRINCIPALE
Clic destro (tradizionale) marca la fine dell’intervallo per la selezione PRINCIPALE
Clic destro (moderno) menu dipendente dal contesto (taglia/copia/incolla)
Clic di mezzo o Maiusc-Ins inserisce la selezione PRINCIPALE alla posizione del cursore
Ctrl-X taglia la selezione PRINCIPALE negli APPUNTI
Ctrl-C (Shift-Ctrl-C nel terminale) copia la selezione PRINCIPALE negli APPUNTI
Ctrl-V incolla gli APPUNTI alla posizione del cursore
Tabella 1.15: Elenco di funzioni del mouse e relative azioni dei tasti in Debian
Qui, la selezione PRINCIPALE è l’intervallo di testo evidenziato. All’interno del programma di terminale viene usato
invece Shift-Ctrl-C per evitare di terminare un programma in esecuzione.
La rotella centrale presente nei mouse moderni viene considerata come il pulsante di mezzo e può essere usata per
fare il corrispondente clic. Cliccare contemporaneamente con i pulsanti destro e sinistro funziona da clic di mezzo
nelle situazioni in cui si hanno mouse a 2 pulsanti.
Per poter usare il mouse in una console a caratteri Linux, è necessario che gpm(8) sia in esecuzione come demone.
1.4.5 Il paginatore
Il comando less(1) è il paginatore (navigatore del contenuto dei file) migliorato. Legge il file specificato nell’argo-
mento del comando o il suo standard input. Premere ”h” se si ha bisogno di aiuto nella navigazione con il comando
less. Può fare molto di più di more(1) e può essere fornito di superpoteri eseguendo ”eval $(lesspipe)” o ”eval
$(lessfile)” nello script di avvio della shell. Vedere ulteriori informazioni in ”/usr/share/doc/less/LESSOPEN”.
L’opzione ”-R” permette output raw e abilita le sequenze di escape ANSI per i colori. Vedere less(1).
Suggerimento
Nel comando less digitare ”h” per vedere la schermata di aiuto, digitare ”/” o ”?” per cercare una stringa e digitare
”-i” per cambiare la sensibilità a maiuscole/minuscole.
Debian Reference 24 / 263
Si dovrebbe diventare competenti in una delle varianti dei programmi Vim o Emacs che sono popolari sui sistemi *nix.
Penso che abituarsi ai comandi Vim sia la cosa giusta da fare, dato che un editor Vi è sempre presente nel mondo
Linux/Unix. (In realtà, il vi originale o il nuovo nvi sono programmi che si trovano ovunque. Io ho scelto invece Vim
per i principianti dato che offre l’aiuto attraverso il tasto F1 pur essendo abbastanza simile e più potente.)
Se si sceglie invece Emacs o XEmacs come editor preferito, si sta facendo comunque davvero un’ottima scelta,
specialmente per la programmazione. Emacs ha una vastità di altre funzionalità, incluso il funzionamento come
newsreader, editor di directory, programma di posta, ecc. Quando usato per la programmazione o la scrittura di script,
riconosce intelligentemente il formato che si sta usando e cerca di fornire assistenza. Alcune persone sostengono
che l’unico programma di cui hanno bisogno su Linux è Emacs. Dieci minuti spesi ad imparare Emacs ora possono
far risparmiare ore in futuro. È caldamente raccomandato avere a portata di mano il manuale di GNU Emacs da
consultare quando si sta imparando Emacs.
Tutti questi programmi sono di solito forniti con un programma tutor che aiuta ad impararli facendo pratica. Avviare
Vim digitando ”vim” e premere il tasto F1. Si dovrebbero leggere come minimo le prime 35 righe. Poi seguire il corso
di apprendimento in linea muovendo il cursore su ”|tutor|” e premendo Ctrl-].
Nota
I buoni editor, come Vim ed Emacs, possono gestire correttamente testi UTF-8 e testi in altre codifiche esotiche. È
opportuno usare l’ambiente GUI con la localizzazione UTF-8 e installare i programmi e i tipi di carattere necessari.
Gli editor hanno opzioni per impostare la codifica dei file indipendentemente dall’ambiente GUI. Fare riferimento
alla loro documentazione sui testi multibyte.
Debian è fornita con svariati editor differenti. Si raccomanda di installare, come detto in precedenza, il pacchetto vim.
Debian fornisce un accesso unificato all’editor predefinito di sistema attraverso il comando ”/usr/bin/editor” in
modo che altri programmi (ad esempio reportbug(1)) possano richiamarlo. Lo si può modificare con il comando
seguente.
$ sudo update-alternatives --config editor
Suggerimento
Molti programmi usano la variabile d’ambiente ”$EDITOR” o ”$VISUAL” per decidere quale editor usare (ve-
dereSezione 1.3.5 e Sezione 9.4.11. Per coerenza, in un sistema Debian, impostare queste variabili a
”/usr/bin/editor”. (Storicamente ”$EDITOR” era ”ed” e ”$VISUAL” era ”vi”.)
vim(1) recente si avvia con la sana opzione ”nocompatible” e entra nella modalità NORMAL.1
Usare il programma ”vimtutor” per imparare ad usare vim attraverso un corso tutorial interattivo.
Il programma vim cambia il suo comportamento in risposta ai tasti premuti in base alla modalità (mode). La digitazio-
ne con i tasti nel buffer è fatta soprattutto in modalità INSERT e in modalità REPLACE. Spostare il cursore viene fatto
soprattutto in modalità NORMAL. La selezione interattiva viene fatta in modalità VISUAL. Se si digita ”:” in modalità
NORMAL si cambia la sua modalità in Ex-mode. Ex-mode accetta comandi.
1Anche il vecchio vim può avviarsi nella modalità ”nocompatible” sensata se lo si avvia con l’opzione ”-N”.
Debian Reference 25 / 263
Suggerimento
Vim viene distribuito con il pacchetto Netrw. Netrw supporta lettura e scrittura di file, navigazione di directory in
una rete e navigazione locale! Provare Netrw con ”vim .” (un punto come argomento) e leggere il suo manuale
con ”:help netrw”.
L’output dei comandi di shell può scorrere fuori dallo schermo e potrebbe essere perduto per sempre. È buona norma
registrare le attività di shell in un file in modo da poterle riguardare in seguito. Questo tipo di registro è essenziale
quando si fa una qualsiasi attività di amministrazione del sistema.
Suggerimento
Il nuovo Vim (versione>=8.2) può essere utilizzato per registrare in modo pulito le attività di shell usando la modalità
TERMINAL-JOB. Vedere Sezione 1.4.8.
È bene imparare i comandi Unix di base. Il termine ”Unix” è qui usato in senso lato; ogni SO clone di Unix offre di
solito comandi equivalenti. Il sistema Debian non fa eccezione. Non ci si preoccupi se, al momento, alcuni comandi
non funzionano come si vorrebbe. Se si usa alias nella shell, i corrispondenti output dei comandi sono diversi.
Questi esempi non sono pensati per essere eseguiti necessariamente in questo ordine.
Provare tutti i comandi seguenti da un account utente non privilegiato.
Nota
Unix tradizionalmente nasconde i nomi di file che iniziano con ”.”. Sono tradizionalmente file contenenti informa-
zioni di configurazione e preferenze dell’utente.
Per il comando cd vedere builtins(7).
Il paginatore predefinito del sistema di base di Debian è more(1) che non ha lo scorrimento all’indietro. Installando
il pacchetto less, con la riga di comando ”apt-get install less”, less(1) diventa il paginatore predefinito
e si può così scorrere il testo all’indietro usando i tasti freccia.
I caratteri ”[” e ”]” nella espressione regolare del comando ”ps aux | grep -e "[e]xim4*"” sopra citato,
permettono a grep di evitare di trovare corrispondenza con sé stesso. La parte ”4*” nella espressione regolare
significa 0 o più ripetizioni del carattere ”4” e perciò permette a grep di trovare corrispondenza sia con ”exim” sia
con ”exim4”. Sebbene il carattere ”*” sia usato nei nomi di file con metacaratteri della shell e nelle espressioni
regolari, il suo significato è diverso nei due casi. Si possono imparare le espressioni regolari da grep(1).
Debian Reference 27 / 263
comando descrizione
pwd mostra il nome della directory attuale/di lavoro
whoami mostra il nome dell’utente attuale
mostra l’identità dell’utente attuale (nome, uid, gid e gruppi
id
associati)
file pippo mostra che tipo di file sia il file ”pippo”
type -p nomecomando mostra la posizione del file del comando ”nomecomando”
which nomecomando ””
type nomecomando mostra informazioni sul comando ”nomecomando”
apropos parola-chiave trova comandi riguardanti ”parola-chiave”
man -k parola-chiave ””
mostra una spiegazione di una riga sul comando
whatis nomecomando
”nomecomando”
mostra una spiegazione del comando ”nomecomando” (in stile
man -a nomecomando
Unix)
mostra una spiegazione piuttosto lunga del comando
info nomecomando
”nomecomando” (in stile GNU)
ls elenca il contenuto di directory (non i file punto e le directory)
ls -a elenca il contenuto di directory (tutti i file e directory)
elenca il contenuto di directory (quasi tutti i file e directory, cioè
ls -A
salta ”..” e ”.”)
ls -la elenca tutto il contenuto di directory con informazioni dettagliate
elenca tutto il contenuto di directory con numeri di inode e
ls -lai
informazioni dettagliate
ls -d elenca tutte le directory dentro la directory attuale
tree mostra il contenuto in forma di albero
lsof pippo mostra lo stato aperto per il file ”pippo”
lsof -p pid mostra i file aperti dal processo con ID ”pid”
mkdir pippo crea una nuova directory ”pippo” nella directory attuale
rmdir pippo rimuove la directory ”pippo” nella directory attuale
cambia directory spostandosi nella directory ”pippo” nella
cd pippo directory attuale o in una directory elencata nella variabile
”$CDPATH”
cd / cambia directory spostandosi nella directory radice
cd cambia directory spostandosi nella directory home dell’utente
cambia directory spostandosi nella directory con percorso
cd /pippo
assoluto ”/pippo”
cd .. cambia directory spostandosi nella directory genitore
cambia directory spostandosi nella directory home dell’utente
cd ~pippo
”pippo”
cd - cambia directory spostandosi nella directory precedente
mostra il contenuto di ”/etc/motd” usando il paginatore
</etc/motd pager
predefinito
touch filediprova crea un file ”filediprova” vuoto
cp pippo pluto copia un file ”pippo” esistente in un nuovo file ”pluto”
rm filediprova rimuove il file ”filediprova”
rinomina un file ”pippo” esistente con il nuovo nome ”pluto”
mv pippo pluto
(”pluto” non deve esistere)
muove un file ”pippo” esistente nella nuova posizione
mv pippo pluto
”pluto/pippo” (la directory ”pluto” deve esistere)
muove un file ”pippo” esistente in una nuova posizione con il
mv pippo pluto/paperino nuovo nome ”pluto/paperino” (la directory ”pluto” deve
esistere ma non deve esistere ”bar/baz”)
fa sì che il file ”pippo” esistente sia non leggibile e non scrivibile
chmod 600 pippo
da altri (e non eseguibile per nessuno)
fa sì che il file ”pippo” esistente sia leggibile ma non scrivibile
chmod 644 pippo
da altri (e non eseguibile per nessuno)
fa sì che il file ”pippo” esistente sia leggibile ma non scrivibile
chmod 755 pippo
da altri (ed eseguibile per tutti)
find . -name modello trova nomi di file corrispondenti al ”modello” di shell (lento)
trova nomi di file corrispondenti al ”pattern” di shell (più
locate -d . modello
veloce, usa un database generato regolarmente)
trova un ”modello” in tutti i file nella directory attuale che
grep -e "modello" *.html
Debian Reference 28 / 263
Come esercizio, esplorare le directory e dare un’occhiata al sistema usando i comandi citati sopra. Se si hanno
domande su uno qualsiasi dei comandi in console, assicurarsi di leggere la pagina di manuale.
Per esempio, provare a fare quanto segue.
$ man man
$ man bash
$ man builtins
$ man grep
$ man ls
Può essere un po’ difficile abituarsi allo stile delle pagine man perché sono piuttosto concise, in particolar modo le
più vecchie e tradizionali. Una volta che ci si fa la mano, però, si apprezza la loro concisione.
Notare che molti comandi in stile Unix, inclusi quelli da GNU e BSD, mostrano una breve informazione di aiuto se li
si invoca in uno dei modi seguenti (o in alcuni casi se lo si fa senza usare opzioni).
$ commandname --help
$ commandname -h
Ora si ha un’idea di come usare il sistema Debian; è tempo di dare uno sguardo più approfondito al meccanismo
di esecuzione dei comandi nel sistema Debian. Qui la realtà è stata semplificata ad uso del principiante. Vedere
bash(1) per una spiegazione esatta.
Un semplice comando è formato da una sequenza di componenti.
3. Opzioni (opzionali)
4. Ridirezioni (opzionali, > , >> , < , << , ecc.)
5. Operatori di controllo (opzionale, && , || , a-capo , ; , & , ( , ) )
• Il sistema PAM come pam_env può impostare variabili d’ambiente con /etc/pam.conf”, ”/etc/environment”
e ”/etc/default/locale”.
• Il display manager, come gdm3 può reimpostare variabili d’ambiente per la sessione GUI con ”~/.profile”.
• L’inizializzazione dei programmi specifica per l’utente può reimpostare variabili d’ambiente con ”~/.profile”,
”~/.bash_profile” e ”~/.bashrc”.
Debian Reference 29 / 263
La localizzazione predefinita è definita nella variabile d’ambiente ”$LANG” ed è configurata nella forma ”LANG=xx_YY.UTF-8”
dall’installatore o dalla successiva configurazione della GUI, es. ”Impostazioni” → ”Regione e lingua” → ”Lingua” /
”Formati” per GNOME.
Nota
Io raccomando di configurare l’ambiente di sistema usando per il momento solo la variabile ”$LANG” e di tenersi
alla larga dalle variabili ”$LC_*” a meno che non sia strettamente necessario.
Il valore completo di localizzazione impostato nella variabile ”$LANG” consiste di 3 parti: ”xx_YY.ZZZZ”.
Una tipica esecuzione di un comando usa una sequenza sulla riga della shell come la seguente.
$ echo $LANG
en_US.UTF-8
$ date -u
Wed 19 May 2021 03:18:43 PM UTC
$ LANG=fr_FR.UTF-8 date -u
mer. 19 mai 2021 15:19:02 UTC
In questo caso il programma date(1) viene eseguito con differenti valori di localizzazione.
• Per il primo comando ”$LANG” è impostata al valore di localizzazione predefinito di sistema: ”en_US.UTF-8”.
• Per il secondo comando ”$LANG” è impostata al valore di localizzazione UTF-8 francese: fr_FR.UTF-8”.
La maggior parte delle invocazioni di comandi non è solitamente preceduta da definizioni di variabili d’ambiente. In
alternativa all’esempio precedente, si può eseguire quanto segue.
Debian Reference 30 / 263
$ LANG=fr_FR.UTF-8
$ date -u
mer. 19 mai 2021 15:19:24 UTC
Suggerimento
Quando si segnala un bug, è una buona idea, se si usa un ambiente non inglese, eseguire e controllare il comando
nella localizzazione ”en_US.UTF-8”.
Per dettagli più specifici sulla configurazione della localizzazione vedere Sezione 8.1.
Quando si digita un comando nella shell, questa cerca il comando nelle directory nell’elenco contenuto nella variabile
d’ambiente ”$PATH”. Il valore della variabile d’ambiente ”$PATH” è anche chiamato percorso di ricerca della shell.
In una installazione Debian standard, la variabile d’ambiente ”$PATH” degli account utente può non includere ”/usr/sbin”
e ”/usr/sbin”. Il comando ifconfig, per esempio, deve essere eseguito con il percorso completo, come in
”/usr/sbin/ifconfig”. (Il comando simile ip si trova in ”/usr/bin”.)
Si può modificare la variabile d’ambiente ”$PATH” della shell Bash tramite il file ”~/.bash_profile” o ”~/.bashrc”.
Molti comandi memorizzano una configurazione specifica per l’utente nella directory home e cambiano il loro com-
portamento in base al suo contenuto. La directory home è identificata dalla variabile d’ambiente ”$HOME”.
Suggerimento
La shell espande ”~/ nella directory home dell’utente attuale, cioè ”$HOME/”. La shell espande ”~pippo/” nella
directory home di pippo, cioè ”/home/pippo/”.
Alcuni comandi accettano argomenti. Gli argomenti che iniziano con ”-” o ”--” sono chiamati opzioni e controllano il
comportamento del comando.
Debian Reference 31 / 263
$ date
Thu 20 May 2021 01:08:08 AM JST
$ date -R
Thu, 20 May 2021 01:08:12 +0900
In questo caso l’opzione ”-R” sulla riga di comando cambia il comportamento di date(1) producendo in output la data
in una stringa conforme alla RFC2822.
Spesso si desidera che un comando abbia effetto su un gruppo di file senza dover digitarli tutti. I modelli di espansione
dei nomi di file che usano i glob della shell, a volte detti metacaratteri o caratteri jolly, facilitano questo compito.
Vedere glob(7).
Nota
A differenza della normale espansione dei nomi della shell, il modello shell ”*” cercato dal comando find(1) con la
ricerca ”-name” ecc., trova corrispondenza anche con nomi di file che iniziano con ”.”. (Nuova funzionalità POSIX.)
Nota
Si può manipolare il comportamento di BASH in relazione ai modelli di glob usando le sue opzioni shopt incorporate
come ”dotglob”, ”noglob”, ”nocaseglob”, ”nullglob”, ”extglob”, ecc. Vedere bash(1).
Debian Reference 32 / 263
Ogni comando restituisce il suo stato di uscita (variabile ”$?”) come valore restituito.
stato di uscita del comando valore numerico restituito valore logico restituito
successo zero, 0 VERO
errore non-zero, -1 FALSO
Nota
Notare che, nel contesto logico della shell, il successo è trattato come il valore logico VERO che ha valore numerico
0 (zero). Questo è in qualche modo non intuitivo ed è bene rimarcarlo.
È bene cercare di ricordare i seguenti idiomi per comandi di shell che vengono digitati sulla stessa riga come parte
del comando di shell.
Il sistema Debian è un sistema multi-tasking. I compiti sullo sfondo permettono agli utenti di eseguire più programmi
in una singola shell. La gestione dei processi sullo sfondo coinvolge i comandi interni della shell jobs, fg, bg e
kill. Leggere le sezioni ”SIGNALS” e ”JOB CONTROL” di bash(1) e builtins(1).
Per esempio, provare a fare quanto segue.
$ </etc/motd pager
$ pager </etc/motd
$ pager /etc/motd
Benché tutti i 4 esempi di ridirezione della shell mostrino la stessa cosa, l’ultimo esempio esegue un comando cat
aggiuntivo e spreca risorse senza motivo.
La shell permette di aprire file usando il comando interno execcon un descrittore di file arbitrario.
$ echo Hello >foo
$ exec 3<foo 4>bar # open files
$ cat <&3 >&4 # redirect stdin to 3, stdout to 4
$ exec 3<&- 4>&- # close files
$ cat bar
Hello
Ora ”la” funziona da scorciatoia per ”ls -la” che elenca tutti i file nel formato di elencazione esteso.
Si possono elencare tutti gli alias esistenti con alias (vedere la sezione ”SHELL BUILTIN COMMANDS” in bash(1)).
$ alias
...
alias la='ls -la'
Si può identificare il percorso esatto o l’identità di un comando con type (vedere la sezione ”SHELL BUILTIN
COMMANDS”) di bash(1)).
Per esempio, provare a fare quanto segue.
$ type ls
ls is hashed (/bin/ls)
$ type la
la is aliased to ls -la
$ type echo
echo is a shell builtin
$ type file
file is /usr/bin/file
In questo caso ls era stato cercato di recente mentre ”file” no, percio ”ls” risulta ”hashed”, cioè la shell ha un
record interno per un accesso veloce alla posizione del comando ”ls”.
Suggerimento
Vedere Sezione 9.3.6.
Nell’ambiente di lavoro Unix, l’elaborazione del testo viene fatta instradando il testo tramite pipe attraverso catene di
strumenti standard per l’elaborazione del testo. Questa è stata un’altra fondamentale innovazione di Unix.
Ci sono alcuni strumenti di elaborazione del testo che sono usati molto spesso in un sistema *nix.
Se non si è sicuri di cosa facciano esattamente questi comandi, usare ”man comando” per scoprirlo.
Nota
Il criterio di ordinamento e le espressioni di intervalli dipendono dalla localizzazione. Se si desidera ottenere il com-
portamento tradizionale di un comando, usare la localizzazione C o C.UTF-8 invece delle normali UTF-8 (vedere
Sezione 8.1).
Nota
Le espressioni regolari Perl (perlre(1)), le PCRE (Perl Compatible Regular Expressions) e le espressioni regolari
Python fornite dal modulo re hanno molte estensioni comuni delle normali ERE.
Le espressioni regolari sono usate in molti strumenti di elaborazione del testo. Sono analoghe ai modelli di glob della
shell, ma sono più complesse e potenti.
Una espressione regolare descrive il modello a cui trovare corrispondenza ed è composta da caratteri di testo e
metacaratteri.
Un metacarattere è semplicemente un carattere con un significato speciale. Ci sono 2 stili principali, BRE e ERE, a
seconda degli strumenti di testo descritti in precedenza.
Le espressioni regolari di emacs sono fondamentalmente BRE, ma sono state estese per trattare ”+” e ”?” come i
metacaratteri nelle ERE. Perciò, nelle espressioni regolari di emacs, non è necessario proteggerli con il carattere di
escape ”\”.
Per effettuare ricerche di testo usando espressioni regolari si può usare grep(1).
Per esempio, provare a fare quanto segue.
$ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
Debian Reference 36 / 263
Suggerimento
Vedere Sezione 9.3.6.
Per le stringhe di sostituzione Perl viene usato «$&» invece di «&» e «$n» invece di «\n».
Per esempio, provare a fare quanto segue.
$ echo zzz1abc2efg3hij4 | \
sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/'
zzz=1abc2efg3hij4=
$ echo zzz1abc2efg3hij4 | \
sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/=&=/'
zzz=1abc2efg3hij4=
$ echo zzz1abc2efg3hij4 | \
perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=$&=/'
zzz=1abc2efg3hij4=
$ echo zzz1abc2efg3hij4 | \
sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/'
zzzefg3hij4===1abc
$ echo zzz1abc2efg3hij4 | \
sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/\2===\1/'
zzzefg3hij4===1abc
$ echo zzz1abc2efg3hij4 | \
perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/'
zzzefg3hij4===1abc
In questo esempio si faccia particolare attenzione allo stile delle espressioni regolari tra parentesi e come le stringhe
corrispondenti siano usate nel processo di sostituzione del testo dai diversi strumenti.
Queste espressioni regolari possono essere usate per spostare il cursore e per fare sostituzioni di testo anche in
alcuni editor.
La barra inversa, ”\” alla fine della prima riga nella riga di comando di shell protegge il carattere di a capo rendendolo
uno spazio e continuando l’input della riga di comando di shell nella riga successiva.
Leggere tutte le pagine man relative per imparare l’uso di questi comandi.
Il comando ed(1) può sostituire tutte le occorrenze di ”DA_REGEX” con ”A_TESTO” in ”file”.
$ ed file <<EOF
,s/FROM_REGEX/TO_TEXT/g
w
q
EOF
Debian Reference 38 / 263
Il comando sed(1) può sostituire tutte le occorrenze di ”DA_REGEX” con ”A_TESTO” in ”file”.
$ sed -i -e 's/FROM_REGEX/TO_TEXT/g' file
Il comando vim(1) può sostituire tutte le occorrenze di ”DA_REGEX” with ”A_TESTO” in ”file” usando il comando
ex(1).
$ vim '+%s/FROM_REGEX/TO_TEXT/gc' '+update' '+q' file
Suggerimento
Il modificatore ”c” nell’esempio soprastante assicura che venga chiesta la conferma interattiva per ciascuna sosti-
tuzione.
Si possono elaborare file multipli (”file1”, ”file2” e ”file3”) in modo simile con vim(1) o perl(1).
$ vim '+argdo %s/FROM_REGEX/TO_TEXT/gce|update' '+q' file1 file2 file3
Suggerimento
Il modificatore ”e” nell’esempio soprastante evita che un errore di nessuna corrispondenza trovata (”No match”)
rompa il processo.
Nell’esempio perl(1), ”-i” è per la modificain-situ di ciascun file interessato, e ”-p” è perreiterare implicitamente il
comando su tutti i file specificati.
Suggerimento
L’uso dell’opzione ”-i.bak” invece di ”-i” preserva una copia del file originale aggiungendo il suffisso ”.bak” al
suo nome file. Questo permette di ripristinare le cose più facilmente in caso di errori in sostituzioni complesse.
Nota
ed(1) e vim(1) usano BRE; perl(1) usa ERE.
Considerare per esempio un file ti testo chiamato ”DPL” in cui sono elencati, in un formato separato da spazi, alcuni
nomi di leader del progetto Debian pre-2004 e la data della loro installazione.
Ian Murdock August 1993
Bruce Perens April 1996
Ian Jackson January 1998
Wichert Akkerman January 1999
Ben Collins April 2001
Bdale Garbee April 2002
Martin Michlmayr March 2003
Suggerimento
Vedere ”Una breve storia di Debian” per la storia della Guida del progetto Debian aggiornata.
Debian Reference 39 / 263
Awk viene usato spesso per estrarre dati da questo tipo di file.
Per esempio, provare a fare quanto segue.
$ awk '{ print $3 }' <DPL # month started
August
April
January
January
April
April
March
$ awk '($1=="Ian") { print }' <DPL # DPL called Ian
Ian Murdock August 1993
Ian Jackson January 1998
$ awk '($2=="Perens") { print $3,$4 }' <DPL # When Perens started
April 1996
Questo tipo di file può anche essere analizzato con le shell tipo Bash.
Per esempio, provare a fare quanto segue.
$ while read first last month year; do
echo $month
done <DPL
... same output as the first Awk example
In questo caso, il comando incorporato read usa i caratteri in ”$IFS” (internal field separator, separatore di campi
interno) per suddividere le righe in parole.
Se si modifica ”$IFS” in ”:”, si possono analizzare facilmente con la shell i file ”/etc/passwd”.
$ oldIFS="$IFS" # save old value
$ IFS=':'
$ while read user password uid gid rest_of_line; do
if [ "$user" = "bozo" ]; then
echo "$user's ID is $uid"
fi
done < /etc/passwd
bozo's ID is 1000
$ IFS="$oldIFS" # restore old value
(Se si usa Awk per fare la stessa cosa, usare ”FS=':'” per impostare il separatore di campi.)
IFS viene anche usato dalla shell per suddividere i risultati dell’espansione di parametri, sostituzione di comandi ed
espansioni aritmetiche. Queste non avvengono all’interno delle virgolette singole o doppie. Il valore predefinito di IFS
è la combinazione di spazio, tab e a capo.
Essere prudenti nell’uso di questi trucchetti di shell con IFS. Possono accadere strane cose quando la shell interpreta
alcune parti dello script come suo input.
$ IFS=":," # use ":" and "," as IFS
$ echo IFS=$IFS, IFS="$IFS" # echo is a Bash builtin
IFS= , IFS=:,
$ date -R # just a command output
Sat, 23 Aug 2003 08:30:15 +0200
$ echo $(date -R) # sub shell --> input to main shell
Sat 23 Aug 2003 08 30 36 +0200
$ unset IFS # reset IFS to the default
$ echo $(date -R)
Sat, 23 Aug 2003 08:30:50 +0200
Debian Reference 40 / 263
Gli script seguenti fanno alcune cose carine se inseriti in una pipe.
Uno script di shell di una riga può operare reiteratamente su più file usando find(1) e xargs(1) per fare compiti
piuttosto complicati. Vedere Sezione 10.1.5 e Sezione 9.4.9.
Quando usare la shell in modalità interattiva diventa troppo complicato, considerare la scrittura di uno script di shell
(vedere Sezione 12.1).
Debian Reference 41 / 263
Capitolo 2
Nota
Questo capitolo è stato scritto assumendo che il rilascio stabile più recente abbia nome in codice: bookworm.
Ci si riferisce alle fonti di dati per il sistema APT collettivamente con il nome elenco delle fonti in
questo documento . Possono essere definiti in qualsiasi tra il file ”/etc/apt/sources.list”, i file
”/etc/apt/sources.list.d/*.list” o i file ”/etc/apt/sources.list.d/*.source”.
Debian è un’organizzazione di volontari che crea distribuzioni coerenti di pacchetti binari precompilati di software
libero e li distribuisce dal suo archivio.
L’archivio Debian viene fornito da molti siti mirror remoti per l’accesso con i metodi HTTP e FTP. È anche disponibile
come CD-ROM/DVD.
L’attuale sistema di gestione dei pacchetti di Debian che può utilizzare tutte queste risorse è APT (Advanced Packa-
ging Tool).
Il sistema di gestione dei pacchetti di Debian, se usato in modo corretto, permette all’utente di installare dall’archivio
insiemi coerenti di pacchetti binari sul sistema. Attualmente ci sono 74165 pacchetti disponibili per l’architettura
amd64.
Il sistema di gestione dei pacchetti di Debian ha una storia ricca e fornisce molti programmi con interfacce per l’utente
finale e molti metodi di backend per l’accesso agli archivi tra cui scegliere. Attualmente le scelte raccomandate sono
le seguenti.
• apt(8) per tutte le operazioni interattive dalla riga di comando, incluse le installazioni e le rimozioni di pacchetti
nonché gli aggiornamenti dist-upgrade.
• apt-get(8) per chiamare il sistema di gestione dei pacchetti Debian da script. È anche un’opzione di ripiego
quando non è disponibile apt (spesso in sistemi Debian più vecchi).
• aptitude(8) per un’interfaccia testuale interattiva per gestire i pacchetti installati e per cercare i pacchetti dispo-
nibili.
Debian Reference 42 / 263
Questi sono alcuni punti fondamentali per la configurazione dei pacchetti in un sistema Debian.
• La configurazione manuale fatta dall’amministratore di sistema viene rispettata. In altre parole, il sistema di confi-
gurazione dei pacchetti non fa configurazioni invadenti per ragioni di comodità.
• Ogni pacchetto viene fornito con un proprio script di configurazione per l’interfaccia utente standard debconf(7),
per aiutare nel processo di configurazione iniziale del pacchetto.
• I Debian Developer cercano di fare del loro meglio per rendere l’aggiornamento un’esperienza senza problemi
grazie agli script di configurazione dei pacchetti.
• Sono disponibili per l’amministratore di sistema le complete funzionalità di un pacchetto software, ma quelle con
rischi per la sicurezza sono disabilitate nella installazione predefinita.
• Se si attiva manualmente un servizio con rischi per la sicurezza, si è responsabili del contenimento del rischio.
• L’amministratore di sistema può abilitare manualmente configurazioni esotiche; questo può creare interferenze con
popolari programmi generici di supporto per la configurazione del sistema.
avvertimento
Non installare pacchetti da una miscela casuale di suite. Probabilmente si disgrega la coerenza tra i pac-
chetti che richiede una conoscenza approfondita dalla gestione del sistema, come dell’ABI del compilatore,
versione delle librerie, funzionalità dell’interprete, ecc.
L’amministratore di sistema Debian novizio dovrebbe rimanere con il rilascio stable di Debian ed applicare solo
gli aggiornamenti di sicurezza. Fino a che non si capisce il sistema Debian molto bene, si dovrebbero seguire le
precauzioni descritte in seguito.
Debian Reference 43 / 263
• Non cambiare il comportamento degli strumenti di gestione dei pacchetti attraverso i loro file di configurazione senza
capire a pieno il loro effetto.
• Non installare pacchetti presi qua e là con ”dpkg -i pacchetto_a_caso”.
• Non installare mai pacchetti presi qua e là con ”dpkg --force-all -i pacchetto_a_caso”.
Gli effetti di incompatibilità, causati dalla violazione delle precauzioni elencate sopra, sul sistema di gestione dei
pacchetti di Debian possono lasciare il sistema in uno stato inutilizzabile.
Gli amministratori di sistema Debian seri, che gestiscono server di importanza critica, dovrebbero usare particolari
precauzioni.
• Non installare alcun pacchetto, compresi quelli di aggiornamenti di sicurezza di Debian, senza averli attentamente
testati con la propria particolare configurazione in condizioni sicure.
– Alla fin fine è l’amministratore di sistema ad essere responsabile del proprio sistema.
– La lunga tradizione di stabilità dei sistemi Debian non è di per sé una garanzia.
Attenzione
Per i server di produzione, è raccomandata la suite stable con gli aggiornamenti di sicurezza. Lo stesso
vale per i PC desktop su cui si investono sforzi di amministrazione limitati.
Nonostante gli avvertimenti descritti prima, si sa che molti lettori di questo documento possono volere eseguire le più
nuove suite testing o unstable.
L’illuminazione data dalla lettura di ciò che segue salva l’utente dall’eterna lotta karmica con l’inferno degli aggiorna-
menti e gli fa raggiungere il nirvana Debian.
Questa lista è pensata per l’ambiente Desktop amministrato da soli.
• Usare la suite testing dato che è in pratica il rilascio in progresso gestito automagicamente dall’infrastruttura di
QA dell’archivio Debian come la integrazione continua di Debian, le pratiche di caricamento dei soli sorgenti e il
tracciamento delle transizioni delle librerie. I pacchetti nella suite testing vengono aggiornati sufficientemente di
frequente da fornire tutte le funzionalità più recenti.
• Impostare il nome in codice corrispondente alla suite testing (”trixie” durante il ciclo di rilascio bookworm-as-
stable) nell’elenco delle fonti.
• Aggiornare manualmente questo nome in codice nell’”elenco delle fonti al nuovo solo dopo aver valutato autono-
mamente la situazione per circa un mese dopo un rilascio maggiore della suite. Anche le mailing list degli utenti e
degli sviluppatori Debian sono una buona fonte di informazioni su questi aspetti.
Debian Reference 44 / 263
L’uso della suite unstable non è raccomandato. La suite unstable è buona per fare il debug dei pacchetti come
sviluppatore ma tende ad esporre l’utente a rischi non necessari per il normale uso per desktop. Anche se la suite
unstable del sistema Debian sembra molto stabile per la maggior parte del tempo, ci sono stati alcuni problemi con
i pacchetti e alcuni di questi non sono stati affatto banali da risolvere.
Ecco alcune idee per misure precauzionali di base per assicurare un recupero facile e veloce da bug nei pacchetti
Debian.
• Impostare il sistema per avere due partizioni avviabili installando la suite stable di Debian in un’altra partizione
• Tenere a portata di mano il CD di installazione per l’avvio di ripristino
• Considerare l’installazione di apt-listbugs per controllare le informazioni del Sistema Debian di tracciamento
dei Bug (BTS) prima degli aggiornamenti
• Imparare l’infrastruttura del sistema dei pacchetti abbastanza bene da poter aggirare il problema.
Attenzione
Se non si è in grado di intraprendere nessuna di queste azioni precauzionali, probabilmente non si è pronti
per le suite testing e unstable.
Suggerimento
La politica ufficiale per gli archivi Debian è definita nel Capitolo 2 - ”L’archivo Debian”, del manuale Debian Policy.
La definizione per ”deb-src” può essere omessa senza problemi se è solo per aptitude aptitude che non accede
ai metadati relativi ai sorgenti. Ciò velocizza l’aggiornamento dei metadati dell’archivio.
L’URL può essere ”https://”, ”http://”, ”ftp://”, ”file://”, ….
Le righe che iniziano con ”#” sono commenti e vengono ignorate.
Viene qui usato il nome in codice ”bookworm o ”trixie” invece del nome della suite ”stable” o ”testing” per
evitare sorprese una volta che viene rilasciata la nuova stable.
Suggerimento
Se nell’esempio precedente si usa ”sid” invece di ”bookworm, la riga ”deb: http://security.debian.org/
…, o il suo equivalente deb822 per gli aggiornamenti di sicurezza, nell’elenco delle fonti non è richiesta. Ciò è
dovuto al fatto che non esiste un archivio per gli aggiornamenti di sicurezza per ”sid” (unstable).
Ecco l’elenco degli URL dei siti degli archivi Debian e dei nomi di suite e nomi in codice usati nel file di configurazione
dopo il rilascio di bookworm.
Attenzione
Solo il rilascio stable puro con gli aggiornamenti di sicurezza fornisce la massima stabilità. Usare un
rilascio stable con mescolati alcuni pacchetti dai rilasci testing o unstable è più rischioso che avere
un sistema basato su un rilascio unstable puro per ciò che riguarda conflitti tra le versioni di libreria,
ecc. Se si ha veramente bisogno, nel rilascio stable, dell’ultima versione di qualche programma usare
pacchetti dai servizi stable-updates e backports (vedere Sezione 2.7.4). Questi servizi devono essere usati
con estrema cautela.
Attenzione
Fondamentalmente si dovrebbe mettere una sola tra le suite stable, testing o unstable nelle righe
”deb”. Se si elenca una combinazione delle suite stable, testing e unstable nelle righe ”deb”, il
programma APT verrà rallentato e solo l’archivio più recente avrà effetto. Elencare più di una voce ha senso
quando viene usato il file ”/etc/apt/preferences” con scopi ben precisi (vedere Sezione 2.7.7).
Debian Reference 46 / 263
nome
nome della
URL dell’archivio in co- scopo del repository
suite
dice
http://deb.debian.org/-
stable Rilascio stabile quasi statico dopo controlli esaustivi
bookworm
debian/
http://deb.debian.org/- Rilascio di test dinamico dopo controlli ragionevoli e brevi
testing trixie
debian/ tempi di attesa
http://deb.debian.org/- Rilascio non stabile dinamico dopo controlli minimi e
unstable sid
debian/ nessun tempo di attesa
http://deb.debian.org/- Pre-rilasci sperimentali degli sviluppatori (opzionale, solo per
N/D
experimental
debian/ sviluppatori)
http://deb.debian.org/- Aggiornamenti per il prossimo rilascio stabile minore
stable-proposed-updates
bookworm-proposed-updates
debian/ (opzionale)
Sottoinsieme della suite stable-proposed-updates che
http://deb.debian.org/-
stable-updates necessita di aggiornamenti urgenti come i dati sui fusi orari
bookworm-updates
debian/
(opzionali)
http://deb.debian.org/- Raccolta varia di pacchetti ricompilati per lo più dal rilascio di
stable-backports
bookworm-backports
debian/ test (opzionale)
http://security.debian.org/-
stable-security Aggiornamenti di sicurezza per il rilascio stabile (importante)
bookworm-security
debian-security/
http://security.debian.org/- Questo non è attivamente supportato, né usato dal Team per la
testing-security
trixie-security
debian-security/ sicurezza
Suggerimento
Per i sistemi Debian con la suite stable è buona norma includere nell’elenco delle fonti i contenuti di
”http://security.debian.org/” per abilitare gli aggiornamenti di sicurezza, come nell’esempio precedente.
Nota
I bug che riguardano la sicurezza per l’archivio stable vengono risolti dal Debian Security Team, la cui attività
è piuttosto rigorosa ed affidabile. I bug per l’archivio testing possono essere risolti dal Debian Security Team.
Per svariate ragioni questa attività non è così rigorosa come quella per stable e potrebbe essere necessario
attendere la migrazione di pacchetti unstable corretti nell’archivio testing. I bug per l’archivio unstable sono
corretti dal manutentore del pacchetto; i pacchetti unstable attivamente mantenuti sono solitamente in una forma
piuttosto buona dato che sfruttano le più recenti correzioni a monte relative alla sicurezza. Per informazioni sul
modo in cui Debian gestisce i bug relativi alla sicurezza, vedere le FAQ Debian sulla sicurezza.
numero di
area criterio dei componenti del pacchetto
pacchetti
main 72806 aderenti alle DFSG e senza dipendenze da non-free
firmware non conforme alle DFSG, necessario per una
non-free-firmware 39
esperienza di installazione del sistema ragionevole
contrib 356 aderenti alle DFSG ma con dipendenze da non-free
non-free 964 non aderenti alle DFSG e non in non-free-firmware
Nella tabella soprastante il numero dei pacchetti è per l’architettura amd64. L’area main fornisce il sistema Debian
(vedere Sezione 2.1.6).
L’organizzazione dell’archivio Debian può essere studiata meglio puntando il proprio browser a ciascuno degli URL
dell’archivio con aggiunto in coda dists o pool.
Debian Reference 47 / 263
Ci si riferisce alla distribuzione in due modi, con la suite o con il nome in codice. In alternativa la parola distribuzione
viene usata come sinonimo di suite in molta documentazione. La relazione tra la suite e il nome in codice può essere
riassunta nel modo seguente.
La storia dei nomi in codice è descritta nelle FAQ Debian: 6.2.1 Quali altri nomi in codice sono stati usati in passato?
Nella terminologia per gli archivi Debian più precisa, la parola ”sezione” è usata specificatamente per la categorizza-
zione dei pacchetti in base all’area di applicazione. (Anche se l’espressione ”sezione main” può essere a volte usata
per descrivere l’area dell’archivio Debian chiamata ”main”.)
Ogni volta che uno sviluppatore Debian (DD) carica un nuovo pacchetto nell’archivio unstable (passando per inco-
ming), gli viene richiesto di assicurare che i pacchetti caricati siano compatibili con l’insieme più recente di pacchetti
nell’archivio unstable più recente.
Se un DD rompe questa compatibilità intenzionalmente per importanti aggiornamenti di librerie, ecc. di solito viene
fatto un annuncio nella mailing list debian-devel, ecc.
Prima di muovere un insieme di pacchetti dall’archivio unstable all’archivio testing, lo script di gestione degli
archivio Debian non solo controlla la maturità (circa 2-10 giorni di età) e lo stato delle segnalazioni di bug RC per
i pacchetti, ma cerca anche di assicurare che siano compatibili con il più recente insieme di pacchetti nell’archivio
testing. Questo processo rende l’archivio testing molto aggiornato e usabile.
Attraverso il graduale processo di freeze dell’archivio, giudato dal team di rilascio, l’archivio testing viene fatto
maturare con un po’ di intervento manuale per renderlo completamente coerente e libero da bug. Quindi viene creato
il nuovo rilascio stable assegnando il nome in codice per il vecchio archivio testing al nuovo archivio stable e
creando il nuovo nome in codice per il nuovo archivio testing. Il contenuto iniziale del nuovo archivio testing è
esattamente lo stesso dell’archivio stable appena rilasciato.
Sia l’archivio unstable sia l’archivio testing possono soffrire di problemi temporanei a causa di diversi fattori.
• Problemi nei tempi di sincronizzazione degli archivi (sia per testing sia per unstable)
• Interventi manuali all’archivio, come rimozione di pacchetti (più per testing) ecc.
Perciò se si decide di usare questi archivi, si dovrebbe essere in grado di risolvere o aggirare questo tipo di problemi.
Attenzione
Per qualche mese circa dopo un nuovo rilascio di stable, la maggior parte degli utenti desktop dovrebbe
usare l’archivio stable con i suoi aggiornamenti di sicurezza, anche se di solito usano gli archivi unstable
o testing. Durante questo periodo di transizione, entrambi gli archivi unstable e testing non sono
adatti alla maggior parte degli utenti. È difficile mantenere il proprio sistema in condizioni buone di fun-
zionamento con l’archivio unstable dato che è affetto da ondate di aggiornamenti importanti di pacchetti
fondamentali. Anche l’archivio testing non è molto utile perché contiene per lo più le stesse cose dell’ar-
chivio stable senza il suo supporto per la sicurezza (Debian testing-security-announce 2008-12). Dopo
circa un mese, gli archivio unstable o testing potrebbero essere utili se si è cauti.
Debian Reference 48 / 263
Suggerimento
Quando si usa l’archivio testing, i problemi causati da un pacchetto rimosso vengono solitamente aggirati instal-
lando il corrispondente pacchetto dall’archivio unstable che è caricato per risolvere un bug.
• ”Sezioni”
• ”Priorità”
• ”Sistema base”
• ”Pacchetti essenziali”
• Debian installa in modo predefinito solo software libero per rispettare le libertà dell’utente.
• Debian fornisce in main solo software libero.
• Debian raccomanda l’esecuzione del solo software libero contenuto in main.
• Nessun pacchetto in main dipende o raccomanda pacchetti in non-free, non-free-firmware o contrib.
Alcune persone si chiedono se i seguenti due fatti siano in contraddizione o meno tra loro.
• «Debian rimarrà libera al 100%». (Prima voce del Contratto sociale Debian)
• I server Debian ospitano alcuni pacchetti non-free-firmware, non-free e contrib.
• Il sistema Debian è libero al 100% e i suoi pacchetti sono ospitati dai server Debian nell’area main.
• I pacchetti esterni al sistema Debian sono ospitati dai server Debian nelle aree non-free, non-free-firmware
e contrib.
Queste sono spiegate in dettaglio nella quarta e nella quinta voce del Contratto sociale Debian:
Nota
Il testo effitivo della quinta voce dell’attuale Contratto sociale di Debian 1.2 è leggermente diverso dal testo sopra-
stante. Questa deviazione editoriale è intenzionale e volta a rendere questo documento coerente senza cambiare
l’effettivo contenuto del Contratto Sociale.
Gli utenti dovrebbero essere a conoscenza dei rischi correlati all’uso di pacchetti nelle aree non-free, non-free-firmware
e contrib:
Il documento Debian Free Software Guidelines è lo standard di Debian per il software libero. Debian interpreta la
parola ”software” nel suo senso più ampio includendo documentazione, firmware, logo e dati artistici nel pacchetto.
Questo fa sì che gli standard Debian per il software libero siano molto severi.
I pacchetti non-free, non-free-firmware e contrib tipici includono pacchetti liberamente distribuibili dei se-
guenti tipi:
• Pacchetti di documentazione distribuiti sotto la GNU Free Documentation License con sezioni invarianti come quelli
per GCC e Make (per lo più presenti nella sezione non-free/doc).
• Pacchetti di firmware contenenti dati binari senza sorgenti come quelli elencati in Sezione 9.10.5 come non-free-firmwa
(per lo più trovati nella sezione non-free-firmware/kernel).
• Pacchetti di giochi e tipi di carattere con restrizioni sull’uso a scopo commerciale o sulla modifica dei contenuti.
Notare che il numero dei pacchetti non-free, non-free-firmware e contrib è meno del 2% di quello dei pac-
chetti in main. Permettere l’accesso alle aree non-free, non-free-firmware e contrib non oscura la fonte
dei pacchetti. L’uso interattivo a schermo intero di aptitude(8) fornisce piena visibilità e controllo su quali pacchetti
vengono installati e da quali aree, per permettere di mantenere il proprio sistema libero quanto lo si desidera.
Il sistema Debian offre un insieme coerente di pacchetti binari grazie al suo meccanismo di dichiarazione, nei cam-
pi di controllo dei file, delle dipendenze binarie basate su versioni . Ecco una definizione molto semplificata delle
dipendenze.
• ”Depends” (Dipende)
– Dichiara una dipendenza assoluta e tutti i pacchetti elencati in questo campo devono essere installati insieme a
quello scelto o prima.
• ”Pre-Depends” (Pre-dipende)
– È come ”Depends”, tranne che richiede l’installazione completa dei pacchetti elencati in anticipo.
• ”Recommends” (Raccomanda)
– Dichiara una dipendenza forte, ma non assoluta. La maggior parte degli utenti non vorrà il pacchetto in esame a
meno che tutti i pacchetti elencati non siano installati.
• ”Suggests” (Consiglia)
– Dichiara una dipendenza debole. La maggior parte degli utenti del pacchetto potrebbe trarre vantaggio dall’in-
stallazione dei pacchetti elencati in questo campo, ma può ottenere una funzionalità adeguata senza di essi.
Debian Reference 50 / 263
• ”Enhances” (Migliora)
– Dichiara una dipendenza debole come ”Suggests” ma in verso opposto.
• ”Breaks” (Rompe)
– Dichiara un’incompatibilità del pacchetto di solito con qualche specifica versione. Generalmente la soluzione è
di aggiornare tutti i pacchetti elencati in questo campo.
• ”Conflicts” (Va in conflitto)
– Dichiara una incompatibilità assoluta. Tutti i pacchetti elencati in questo campo devono essere rimossi per
installare il pacchetto in esame.
• ”Replaces” (Sostituisce)
– Viene dichiarata quando i file installati dal pacchetto in esame sostituiscono i file nei pacchetti elencati.
• ”Provides” (Fornisce)
– Viene dichiarata quando il pacchetto fornisce tutti i file e le funzionalità nei pacchetti elencati.
Nota
Notare che una buona configurazione per un pacchetto virtuale deve avere ”Provides”, ”Conflicts” e ”Replaces”
simultaneamente definiti. Questo assicura che in un dato momento possa essere installato un solo pacchetto reale
che fornisce il pacchetto virtuale.
La definizione ufficiale, compresa quella di dipendenza dei sorgenti, può essere trovata nel manuale Debian Policy,
Capitolo 7, Dichiarare le relazioni tra i pacchetti.
Ecco un riassunto semplificato del flusso di eventi nella gestione dei pacchetti con APT.
Sono stati intenzionalmente omessi dettagli tecnici a favore di una più chiara vista d’insieme.
Si dovrebbe leggere la bella documentazione ufficiale. Il primo documento da leggere è il file specifico per Debian,
”/usr/share/doc/nome_pacchetto/README.Debian”. Andrebbe consultata anche l’altra documentazione in
”/usr/share/doc/nome_pacchetto/. Se la shell è impostata come in Sezione 1.4.2, digitare quanto segue.
$ cd package_name
$ pager README.Debian
$ mc
Per informazioni dettagliate potrebbe essere necessario installare il pacchetto di documentazione corrispondente il
cui nome ha il suffisso ”-doc”.
Se si stanno avendo problemi con un pacchetto specifico, ricordarsi come prima cosa di controllare il sito del Sistema
Debian di tracciamento dei bug (BTS).
Tabella 2.5: Elenco dei siti web importanti per la risoluzione di problemi con un pacchetto specifico
Cercare con Google con parole chiave e aggiungendo ”site:debian.org”, ”site:wiki.debian.org”, ”site:lists.d
ecc.
Quando si invia una segnalazione di bug, usare il comando reportbug(1).
Debian Reference 52 / 263
Quando si incontrano più di due pacchetti simili e non si sa quale installare senza doverli installare per prova, si
dovrebbe usare un po’ di buon senso. Considero i punti seguenti un buon consiglio per i paccchetti da preferire.
• Essenziale: sì > no
• Area: main > contrib > non-free
• Priorità: richiesto > importante > standard > opzionale > extra
• Task: pacchetti elencati in task come ”Ambiente desktop”
Essendo Debian un progetto di volontari con modello di sviluppo distribuito, i suoi archivi contengono molti pacchetti
con scopi e qualità molto differenti. Si deve scegliere con la propria testa che uso farne.
Qualsiasi sia la suite del sistema Debian che si decide di usare, si può comunque desiderare eseguire versioni di
programmi che non sono disponibili in tale suite. Anche se si trovano pacchetti binari di tali programmi in altre suite
Debian o in altre risorse Debian, i loro requisiti potrebbero essere in conflitto con il proprio sistema Debian attuale.
Sebbene si possa ritoccare il sistema di gestione dei pacchetti con la tecnica di apt-pinning, ecc., come descritta in
Sezione 2.7.7 per installare tali pacchetti binari non in sincrono, questo approccio di ritocco ha casi d’uso limitati dato
che può rendere non funzionanti tali programmi e il sistema.
Prima di installare brutalmente simili pacchetti non in sincrono, si dovrebbero cercare tutte le soluzioni alternative più
sicure disponibili, compatibili con il proprio sistema Debian attuale.
• Installare tali programmi usando un pacchetto binario originale in una sandbox (vedere Sezione 7.7)
– Molti programmi, per lo più con GUI, come applicazioni LibreOffice e GNOME sono disponibili come pacchetti
Flatpak, Snap o AppImage.
• Creare un ambiente chroot o simile ed eseguire tali programmi in esso (vedere Sezione 9.11).
– I comandi CLI possono essere eseguiti facilmente in chroot compatibili (vedere Sezione 9.11.4).
– Ambienti desktop completi diversi possono essere provati facilmente senza riavviare (vedere Sezione 9.11.5).
• Compilare da soli le versioni desiderate di pacchetti binari che sono compatibili con il proprio sistema Debian attuale.
– Questa è un’attività non banale (vedere Sezione 2.7.13).
Debian Reference 53 / 263
Le operazioni di gestione dei pacchetti basate sui repository sul sistema Debian possono essere eseguite da molti
strumenti di gestione dei pacchetti basati su APT disponibili sul sistema Debian. Qui, verranno spiegati 3 strumenti
base di gestione dei pacchetti: apt, apt-get / apt-cache e aptitude.
Per operazioni di gestione dei pacchetti che comportano l’installazione o l’aggiornamento dei metadati dei pacchetti,
è necessario avere privilegi di root.
Anche se aptitude è uno strumento interattivo molto bello ed è quello principalmente usato dall’autore, si dovrebbero
conoscere alcuni avvertimenti:
• Il comando aptitude non è raccomandato per l’aggiornamento del sistema da un rilascio ad un altro sul sistema
Debian stable dopo un nuovo rilascio.
– Per questo è raccomandato l’uso di «apt full-upgrade» o «apt-get dist-upgrade». Vedere il Bug nr.
411280.
• Il comando aptitude a volte suggerisce rimozioni in massa di pacchetti per l’aggiornamento del sistema sui sistemi
Debian testing o unstable.
– Questa situazione ha spaventato molti amministratori di sistema. Niente panico.
– Ciò sembra essere dovuto soprattutto ad una non corrispondenza tra le versioni di pacchetti da cui dipende un
metapacchetto o che sono raccomandate da un metapacchetto, come gnome-core.
– Ciò può essere risolto selezionando «Annulla azioni in attesa» nel menu dei comandi di aptitude, uscendo da
aptitude e usando «apt full-upgrade».
I comandi apt-get e apt-cache sono gli strumenti di gestione dei pacchetti basati su APT più a livello base.
Il comando apt è un’interfaccia a riga di comando di alto livello per la gestione dei pacchetti. Fondamentalmente è
un wrapper di apt-get, apt-cache e comandi simili, originariamente pensata come interfaccia per l’utente finale e
abilita in modo predefinito alcune opzioni più adatte per l’uso interattivo.
• apt fornisce una comoda barra di avanzamento quando si installano pacchetti usando apt install.
• apt elimina in modo predefinito i pacchetti .deb nella cache dopo l’installazione con successo dei pacchetti
scaricati.
Suggerimento
È raccomandato agli utenti di usare il nuovo comando apt(8) per l’uso interactive e di usare i comandi apt-get(8)
e apt-cache(8) negli script di shell.
Debian Reference 54 / 263
Il comando aptitude è lo strumento di gestione dei pacchetti basato su APT più versatile.
2.2.2 Operazioni base per la gestione dei pacchetti dalla riga di comando
Ecco alcune operazioni base di gestione dei pacchetti dalla riga di comando usando apt(8), aptitude(8) e apt-get(8)
/apt-cache(8).
apt / apt-get e aptitude possono essere mescolati senza grandi problemi.
«aptitude why regex» può mostrare ancor più informazioni se usato come «aptitude -v why regex». In-
formazioni simili possono essere ottenute con «apt rdepends package» o «apt-cache rdepends package».
Quando il comando aptitude è avviato in modalità a riga di comando e si trova davanti a problemi come conflitti tra
pacchetti, si può passare alla modalità interattiva a tutto schermo premendo successivamente il tasto ”e” al prompt.
Nota
Sebbene il comando aptitude sia dotato di moltissime funzionalità come il suo risolutore avanzato di conflitti tra
pacchetti, questa complessità ha causato (o può ancora causare) alcune regressioni quali i Bug nr. 411123, Bug
nr. 514930 e Bug nr. 570377. In caso di dubbio, preferire i comandi apt, apt-get e apt-cache al comando
aptitude.
Per la gestione interattiva dei pacchetti, si avvia aptitude in modalità interattiva dal prompt di shell della console
nel modo seguente.
$ sudo aptitude -u
Password:
In questo modo si aggiorna la copia locale delle informazioni sull’archivio e viene mostrato l’elenco dei pacchetti in
una schermata a pieno schermo. Aptitude posiziona la sua configurazione in ”~/.aptitude/config”.
Suggerimento
Se si desidera usare la configurazione di root, invece di quella dell’utente, usare ”sudo -H aptitude …” invece
di ”sudo aptitude …”, come nell’esempio precedente.
Suggerimento
Aptitude imposta automaticamente le azioni pendenti quando viene avviato in modalità interattiva. Se ciò non
piace, si può reimpostarlo usando il menu: ”Azioni” → ”Annulla azioni in attesa”.
Debian Reference 55 / 263
sintassi sintassi
sintassi per apt per per descrizione
aptitude apt-get/apt-cache
aptitude apt-get
apt update aggiorna i metadati dell’archivio dei pacchetti
update update
aptitude apt-get
apt install installa la versione candidata del pacchetto ”pippo” con le sue
install install
pippo dipendenze
pippo pippo
aptitude apt-getinstalla le versioni candidate dei pacchetti installati senza
apt upgrade
upgraderimuovere altri pacchetti
safe-upgrade
apt aptitude apt-getinstalla le versioni candidate dei pacchetti installati e rimuove,
full-upgrade full-upgrade se necessario, altri pacchetti
dist-upgrade
aptitude apt-get
apt remove rimuove il pacchetto ”pippo” lasciando i suoi file di
remove remove
pippo configurazione
pippo pippo
apt-getrimuove i pacchetti installati automaticamente che non sono più
apt autoremove N/D
necessari
autoremove
aptitude apt-get
elimina completamente il pacchetto ”pippo” con i suoi file di
apt purge pippo purge purge
configurazione
pippo pippo
aptitude apt-getpulisce completamente il repository locale dei file dei pacchetti
apt clean
clean clean scaricati
aptitude apt-getpulisce il repository locale dei file dei pacchetti scaricati che
apt autoclean
autoclean autoclean sono obsoleti
aptitude apt-cache
apt show pippo show show mostra informazioni dettagliate sul pacchetto ”pippo”
pippo pippo
aptitude apt-cache
apt search cerca i pacchetti che corrispondono all’espressione regolare
search search
regex regex
regex regex
aptitude spiega le ragioni per cui i pacchetti che corrispondono a regex
N/D N/D
why regex dovrebbero essere installati
aptitude
spiega le ragioni per cui i pacchetti che corrispondono a regex
N/D why-not N/D
non dovrebbero essere installati
regex
aptitude
apt list apt-mark
search elenca i pacchetti installati manualmente
--manual-installed showmanual
'~i!~M'
Tabella 2.6: Operazioni base di gestione dei pacchetti dalla riga di comando usando aptitude(8) e apt-get(8)
/apt-cache(8)
Quelle che seguono sono le associazioni di tasti degne di nota usate, nella modalità a schermo intero, per sfogliare
lo stato dei pacchetti e per impostare ”azioni pianificate” su di essi.
Le espressioni regolari usate per specificare il nome di pacchetto nella riga di comando e nel prompt del menu dopo
aver premuto ”l” o ”//” sono descritte in seguito. Le espressioni regolari di aptitude possono esplicitamente trovare
corrispondenze con nomi di pacchetto usando una stringa che inizia con ”~n seguita dal nome del pacchetto.
Suggerimento
È necessario premere ”U” per aggiornare tutti i pacchetti installati alla versione candidata nell’interfaccia interattiva.
Altrimenti vengono aggiornati alla versione candidata solo i pacchetti selezionati e quelli da una cui particolare
versione dipendono altri.
Nella modalità interattiva a tutto schermo di aptitude(8), i pacchetti nell’elenco vengono mostrati come nell’esempio
seguente.
idA libsmbclient -2220kB 3.0.25a-1 3.0.25a-2
Suggerimento
L’elenco completo dei flag è fornito alla fine della schermata mostrata di Aiuto mostrata se si preme ”?”.
La versione candidata è scelta in base alle preferenze locali attuali (vedere apt_preferences(5) e Sezione 2.7.7).
Diversi tipi di viste per i pacchetti sono disponibili nel menu ”Viste”.
Nota
È estremamente benvenuto ogni aiuto per migliorare l’assegnazione di etichette Debtags ai pacchetti!
La ”Vista dei pacchetti” standard organizza i pacchetti un po’ nello stile di dselect con alcune funzionalità
extra.
Suggerimento
La vista dei Task può essere usata per scegliere a uno a uno i pacchetti per le proprie attività.
Aptitude offre diverse opzioni per cercare pacchetti usando il suo schema di espressioni regolari.
Debian Reference 58 / 263
Suggerimento
La stringa package_name viene usata per trovare una corrispondenza esatta con il nome di pacchetto a meno che
non venga esplicitamente fatta iniziare con ”~” per indicare una espressione regolare.
La struttura delle espressioni regolari di aptitude è quella di ERE (vedere Sezione 1.6.2) estese in stile mutt ed il
significato delle speciali regole estese di corrispondenza, specifiche di aptitude, è il seguente.
• Il formato dell’espressione regolare è la stessa di quello ERE usato nei tipici strumenti per il testo in stile Unix ”^”,
”.*”, ”$”, ecc. come in egrep(1), awk(1) e perl(1).
• Il tipo di relazione è uno tra depends, predepends, recommends, suggests, conflicts, replaces, provides, e definisce
la relazione tra i pacchetti.
• Il tipo di dipendenza predefinito è ”depends”.
Suggerimento
Quando modello_regex è una stringa vuota, mettere ”~T” immediatamente dopo il comando.
• ”~Ptermine” == ”~Dprovides:termine”
• ”~Ctermine” == ”~Dconflicts:termine”
• ”…~W termine” == ”(…|termine)”
Gli utenti che hanno familiarità con mutt imparano presto, dato che la sintassi per le espressioni si è ispirata a mutt.
Vedere ”SEARCHING, LIMITING, AND EXPRESSIONS” nel ”Manuale utente”, ”/usr/share/doc/aptitude/README”.
Nota
Con la versione lenny di aptitude(8), può essere usata la nuova sintassi in forma lunga come ”?broken”
invece del vecchio equivalente in forma breve ” ”~b”. Il carattere di spazio ” ” è ora considerato uno dei caratteri
che terminano l’espressione regolare, oltre al carattere tilde ”~”. Vedere il ”Manuale utente” per la sintassi della
nuova forma lunga.
Debian Reference 59 / 263
Se la voce di menuF10 → Opzioni → Preferenze → Gestione delle dipendenze” è impostata in modo appropriato, se-
lezionando un pacchetto in aptitude non si richiamano solamente i pacchetti definiti nel suo elenco ”Depends:”, ma
anche quelli nell’elenco ”Recommends:”. Questi pacchetti installati automaticamente vengo rimossi automaticamente
se non sono più necessari secondo aptitude.
L’opzione che controlla il comportamento di ”installazione automatica” del comando aptitude può anche essere
manipolata usando il comando apt-mark(8) dal pacchetto apt.
Si può controllare lo storico delle attività sui pacchetti nei file di registro.
file contenuto
Registro delle attività a livello dpkg per tutte le attività sui
/var/log/dpkg.log
pacchetti
/var/log/apt/term.log Registro delle attività APT generiche
/var/log/aptitude Registro delle attività di comandi aptitude
In realtà non è facile ottenere delle informazioni immediatamente comprensibili da questi file di registro. Vedere
Sezione 9.3.9 per un metodo più facile.
Si possono cercare i pacchetti che soddisfano i propri bisogni con aptitude in base alla descrizione del pacchetto
o dall’elenco in ”Task”.
2.3.2 Elencare pacchetti in base alla corrispondenza del nome con espressioni regolari
Il seguente comando elenca i pacchetti i cui nomi corrispondono alle espressioni regolari specificate.
$ aptitude search '~n(pam|nss).*ldap'
p libnss-ldap - NSS module for using LDAP as a naming service
p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces
L’espressione regolare ”~dipv6” nel prompt di ”l” nella vista ”Nuovo elenco unico dei pacchetti”, limita la visualizza-
zione dei pacchetti a quelli la cui descrizione corrisponde all’espressione ”ipv6” e permette di sfogliare interattivamente
le loro informazioni.
Debian Reference 61 / 263
Se si pensa che sia giusto rimuover i pacchetti elencati, eseguire il comando seguente.
# aptitude purge '~c'
Si può fare la stessa cosa in modalità interattiva per avere un controllo più dettagliato.
Fornire l’espressione regolare ”~c” al prompt di ”l” nella vista ”Nuova vista dei pacchetti”. In questo modo si li-
mita la visualizzazione a quei pacchetti che corrispondono all’espressione regolare, cioè ”rimossi ma non eliminati
completamente”. Tutte le corrispondenze trovate possono essere mostrate premendo ”[” nelle intestazioni di primo
livello.
Premere poi ”_” nell’intestazione di primo livello, come ”Pacchetti non installati”. In questo modo vengono selezionati
per l’eliminazione completa solo quei pacchetti contenuti sotto l’intestazione che hanno fatto corrispondenza con
l’espressione regolare. Si possono escludere alcuni pacchetti in modo interattivo dall’eliminazione premendo ”=” per
ciascuno di essi.
Questa tecnica è piuttosto comoda e funziona per molti altri tasti di comando.
Ecco come faccio per mettere ordine nello stato di installazione automatico/non automatico per i pacchetti (dopo aver
usato un installatore che non sia aptitude, ecc.).
6. Digitare ”l” per impostare la limitazione della visualizzazione dei pacchetti con ”~i”; poi digitare ”m” su ”Task”
per marcare quei pacchetti come installati manualmente.
7. Uscire da aptitude.
8. Avviare ”apt-get -s autoremove|less” da root per controllare quelli che non sono usati.
L’azione ”m” sopra ”Task” è opzionale e server per prevenire situazioni di rimozioni di massa di pacchetti in futuro.
Debian Reference 62 / 263
Nota
Quando si passa ad un nuovo rilascio, ecc. si dovrebbe considerare una installazione pulita di un nuovo sistema
anche se è possibile aggiornare Debian nel modo descritto in seguito. Ciò dà la possibilità di rimuovere la spazza-
tura raccolta nel tempo e fornisce la migliore combinazione dei pacchetti più nuovi. Naturalmente si dovrebbe fare
un backup completo del sistema in un posto sicuro (vedere Sezione 10.2) prima di farlo. Raccomando di creare
una configurazione con due sistemi avviabili usando due diverse partizioni per avere una transizione il più lineare
possibile.
Si può fare l’aggiornamento completo del sistema ad un nuovo rilascio cambiando il contenuto dell’elenco delle fonti
facendolo puntare ad un nuovo rilascio ed eseguendo il comando «apt update; apt dist-upgrade».
Per aggiornare da stable a testing o unstable, durante il ciclo di rilascio bookworm-as-stable, sostituire
”bookworm” nell’elenco delle fonti di esempio in Sezione 2.1.5 con ”trixie” o ”sid”.
In realtà si possono dover affrontare alcune complicazioni a causa di problemi di transizione dei pacchetti, per lo più
a causa di dipendenze. Più è grande la differenza nell’aggiornamento, più è probabile dover affrontare problemi più
grossi. Per la transizione dal vecchio rilascio stable al nuovo stable si possono leggere le nuove Note di rilascio
e seguire esattamente la procedura che vi è descritta per minimizzare i problemi.
Quando si decide di passare da stable a testing prima del suo rilascio formale non ci sono Note di rilascio che
possano aiutare. La differenza tra stable e testing potrebbe essere diventata piuttosto grande dopo il precendente
rilascio stable e potrebbe rendere l’aggiornamento complicato.
SI dovrebbero prendere misure precauzionali per l’aggiornamento completo raccogliendo le informazioni più aggior-
nate da mailing list ed usando il buon senso.
Attenzione
Non è saggio saltare un rilascio principale Debian quando si aggiorna da un rilascio stable ad un altro.
Debian Reference 63 / 263
Attenzione
Nelle ”Note di rilascio” precedenti GCC, il kernel Linux, initrd-tools, Glibc, Perl, APT tool chain, ecc. hanno
richiesto un po’ di attenzione particolare per gli aggiornamenti dell’intero sistema.
2.4.1 Operazioni avanzate per la gestione dei pacchetti dalla riga di comando
Ecco un elenco di altre operazioni di gestione dei pacchetti per i quali aptitude è di livello troppo altro o manca
delle funzionalità richieste.
Nota
Per un pacchetto con la funzionalità multi-arch, può essere necessario specificare l’architettura per alcuni comandi.
Per esempio, usare «dpkg -L libglib2.0-0:amd64» per elencare il contenuto del pacchetto libglib2.0-0
per l’architettura amd64.
Attenzione
Gli strumenti per i pacchetti a più basso livello, come ”dpkg -i …” e ”debi …” dovrebbero essere usati
con molta cura dall’amministratore di sistema. Non si prendono cura in modo automatico delle dipendenze
richieste dai pacchetti. Le opzioni ”--force-all” e simili, per la riga di comando di dpkg (vederedpkg(1),
sono pensate per essere usate solamente da utenti esperti. Usarle senza comprenderne pienamente l’ef-
fetto potrebbe portare tutto il sistema in uno stato problematico.
• dpkg-reconfigure(8) esegue gli script dei pacchetti usando debconf(1) come suo backend.
• I comandi ”apt-get build-dep”, ”apt-get source” e ”apt-cache showsrc” richiedono la voce ”deb-src”
nell’elenco delle fonti.
• dget(1), debuild(1) e debi(1) richiedono il pacchetto devscripts.
• Vedere la procedura per (ri)creare pacchetti usando ”apt-get source” in Sezione 2.7.13.
• Il comando make-kpkg richiede il pacchetto kernel_package (vedere Sezione 9.10).
• Vedere Sezione 12.9 per informazioni generali sulla creazione di pacchetti.
Debian Reference 64 / 263
comando azione
COLUMNS=120 dpkg -l elenca lo stato di un pacchetto installato per una segnalazione di
modello_nome_pacchetto bug
dpkg -L nome_pacchetto elenca il contenuto di un pacchetto installato
dpkg -L nome_pacchetto | egrep
elenca le pagine man di un pacchetto installato
'/usr/share/man/man.*/.+'
elenca i pacchetti installati che uno un file con un nome che
dpkg -S modello_nome_file
corrisponde al modello
apt-file search elenca i pacchetti nell’archivio che hanno un file con un nome
modello_nome_file che corrisponde al modello
apt-file list elenca il contenuto dei pacchetti nell’archivio che corrispondono
modello_nome_pacchetto al modello
dpkg-reconfigure nome_pacchetto riconfigura il pacchetto con esattamente quel nome
dpkg-reconfigure -plow riconfigura il pacchetto con esattamente quel nome ponendo le
nome_pacchetto domande più dettagliate
configure-debian riconfigura i pacchetti da un’interfaccia a tutto schermo a menu
dpkg --audit controlla il sistema alla ricerca di pacchetti parzialmente installati
dpkg --configure -a configura tutti i pacchetti parzialmente installati
apt-cache policy mostra la versione disponibile, la priorità e le informazioni
nome_pacchetto_binario nell’archivio di un pacchetto binario
apt-cache madison nome mostra la versione disponibile e le informazioni nell’archivio di un
pacchetto pacchetto
apt-cache showsrc mostra informazioni sul pacchetto sorgente di un pacchetto
nome_pacchetto_binario binario
apt-get build-dep
installa i pacchetti richiesti per compilare un pacchetto
nome_pacchetto
aptitude build-dep
installa i pacchetti richiesti per compilare un pacchetto
nome_pacchetto
apt-get source nome_pacchetto scarica un sorgente (da un archivio standard)
dget URL del file dsc scarica un pacchetto sorgente (da un altro archivio)
crea un albero dei sorgenti a partire da un insieme di pacchetti
dpkg-source -x
sorgenti (”*.orig.tar.gz” e
nome_pacchetto_versione-versione_debian.dsc
”*.debian.tar.gz”/”*.diff.gz”)
debuild binary compila pacchetti da un albero dei sorgenti locale
compila un pacchetto kernel a partire da un albero dei sorgenti
make-kpkg immagine_kernel
del kernel
make-kpkg --initrd compila un pacchetto kernel con initramfs abilitato, a partire da
immagine_kernel un albero dei sorgenti
dpkg -i
installa un pacchetto locale nel sistema
nome_pacchetto_versione-versione_debian_arch.deb
apt install installa un pacchetto locale nel sistema, cercando al contempo
di risolvere automaticamente le dipendenze
/percorso/di/nomefile_pacchetto.deb
debi
installa pacchetti locali nel sistema
nome_pacchetto_versione-versione_debian_arch.dsc
dpkg --get-selections '*' salva le informazioni di stato sui pacchetti selezionati a livello di
>selection.txt dpkg
dpkg --set-selections imposta le informazioni di stato sui pacchetti selezionati a livello
<selection.txt di dpkg
echo nome_pacchetto hold | dpkg imposta lo stato di selezione di un pacchetto a livello di dpkg a
--set-selections hold (equivalente a ”aptitude holdnome_pacchetto”)
Tabella 2.13: Elenco delle operazioni avanzate per la gestione dei pacchetti
Debian Reference 65 / 263
L’installazione di debsums permette la verifica dei file di pacchetto installati in base ai valori delle somme di controllo
MD5sum nei file ”/var/lib/dpkg/info/*.md5sums” con debsums(1). Per il funzionamento di MD5sum vedere
Sezione 10.3.5.
Nota
Dato che il database MD5sum può essere manomesso da un intruso, debsums ha un’utilità limitata come strumento
di sicurezza. È adatto solo per controllare modifiche fatte dall’amministratore o danni dovuti ad errori dei supporti.
Molti utenti preferiscono usare il rilascio testing (o unstable) del sistema Debian per avere le nuove funzionalità ed
i nuovi pacchetti. Questo rende il sistema più esposto a bug critici sui pacchetti.
L’installazione del pacchetto apt-listbugs salvaguarda il sistema dai bug critici controllando automaticamente, al
momento degli aggiornamenti fatti con il sistema APT, il BTS Debian alla ricerca dei bug critici.
L’installazione del pacchetto apt-listchanges fornisce importanti notizie contenute in NEWS.Debian quando si
fanno aggiornamenti con il sistema APT.
Sebbene visitare il sito Debian https://packages.debian.org/ faciliti oggi giorno la ricerca nei metadati dei pacchetti, ci
sono metodi più tradizionali per farlo.
I comandi grep-dctrl(1), grep-status(1) e grep-available(1) possono essere usati per cercare in qualsiasi
file che sia nel formato generico dei file di controllo dei pacchetti di Debian.
”dpkg -S modello_nome_file” può essere usato per cercare i pacchetti che contengono al loro interno file
installati da dpkg il cui nome corrisponde al modello. Ma non trova i file creati dagli script dei manutentori.
Se è necessario fare ricerche più elaborate sui metadati dei pacchetti, è necessario eseguire il comando ”grep -e
modello_regex *” nella directory ”/var/lib/dpkg/info/”. In questo modo si cercano le parole indicate negli
script e nei testi con le domande di installazione dei pacchetti.
Se si desiderano vedere in modo ricorsivo le dipendenze dei pacchetti, si dovrebbe usare apt-rdepends(8).
Verranno ora trattati alcuni aspetti tecnici interni del funzionamento del sistema di gestione dei pacchetti Debian.
Queste informazioni dovrebbero aiutare a trovare soluzioni proprie ai problemi con i pacchetti.
I file con i metadati per ciascuna distribuzione sono archiviati in ”dists/codename” su ciascun sito mirror di Debian,
ad esempio ”http://deb.debian.org/debian/”. La struttura del suo archivio può essere navigata con il browser
web. Ci sono 6 tipi di metadati.
Negli archivi recenti questi metadati sono memorizzati come file compressi e file di differenze per ridurre il traffico di
rete.
Debian Reference 66 / 263
Suggerimento
Il file ”Release” nella directory di livello più alto è usato per firmare gli archivi nel sistema secure APT.
Ogni suite dell’archivio Debian ha un file ”Release” nella sua directory di livello più alto, ad esempio ”http://deb.debian.
di questo tipo.
Origin: Debian
Label: Debian
Suite: unstable
Codename: sid
Date: Sat, 14 May 2011 08:20:50 UTC
Valid-Until: Sat, 21 May 2011 08:20:50 UTC
Architectures: alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips ←-
mipsel powerpc s390 sparc
Components: main contrib non-free
Description: Debian x.y Unstable - Not Released
MD5Sum:
bdc8fa4b3f5e4a715dd0d56d176fc789 18876880 Contents-alpha.gz
9469a03c94b85e010d116aeeab9614c0 19441880 Contents-amd64.gz
3d68e206d7faa3aded660dc0996054fe 19203165 Contents-armel.gz
...
Nota
Qui si può scoprire il motivo per cui in questa guida si è scelto di usare ”suite” e ”codename” (nome in codice) in
Sezione 2.1.5. Il termine ”distribuzione” è usato per riferirsi sia a ”suite” sia a ”codename”. Tutti i nomi delle ”aree”
dell’archivio offerte da un archivio sono elencate in ”Componente”.
L’integrità del file ”Release” nella directory base viene verificata usando l’infrastruttura crittografica chiamata secure
apt, come descritto in apt-secure(8).
• Il file ”Release.gpg” con la firma crittografica viene creato a partire dal file ”Release” nella directory base e dalla
chiave segreta dell’archivio Debian.
Debian Reference 67 / 263
• Le chiavi pubbliche dell’archivio Debian sono installate localmente dal pacchetto debian-archive-keyring più
recente.
• Il sistema secure APT verifica crittograficamente, in modo automatico, l’integrità del file ”Release” di più alto livello
scaricato con questo file ”Release.gpg” e le chiavi pubbliche degli archivi Debian installate localmente.
• L’integrità di tutti i file ”Packages” e ”Sources” viene verificata usando i valori MD5sum nel file ”Release” nel-
la ripsettiva directory base. L’integrità di tutti i file di pacchetto viene verificata usando i valori MD5sum nei file
”Packages” e ”Sources”. Vedere debsums(1) e Sezione 2.4.2.
• Dato che la verifica crittografica della firma è un processo molto più dispendioso in termini di uso della CPU rispetto
al calcolo di valori MD5sum, l’uso di valori MD5sum per ciascun pacchetto mentre viene usata la firma crittografica
per il file ”Release” principale, fornisce una buona sicurezza con buone prestazioni (vedere Sezione 10.3).
Se la voce nell’elenco delle fonti specifica l’opzione ”signed-by”, l’integrità del suo file ”Release” di livello più alto
scaricato viene verificata usando la chiave pubblica specifica. Ciò è utile quando l’elenco delle fonti contiene archivi
non Debian.
Suggerimento
L’uso del comando apt-key(8) per la gestione delle chiavi di APT è deprecato.
Si può anche verificare manualmente l’integrità del file ”Release” con il file ”Release.gpg” e la chiave pubblica
dell’archivio Debian pubblicata su ftp-master.debian.org usando gpg.
Suggerimento
I file ”Release” a livello di archivio sono usati per le regole di apt_preferences(5).
Ci sono file ”Release” a livello di archivio per tutte le posizioni nell’archivio specificate dall’elenco delle fonti, come
”http://deb.debian.org/debian/dists/unstable/main/binary-amd64/Release” o ”http://deb.debian.
come nel seguente esempio.
Archive: unstable
Origin: Debian
Label: Debian
Component: main
Architecture: amd64
Attenzione
Nell’archivio Debian, per la voce «Archive:» vengono usati i nomi di suite («stable», «testing»,
«unstable», …), mentre vengono usati i nomi in codice («trusty», «xenial», «artful», …)
nell’archivio Ubuntu.
Per alcuni archivi, come experimental e bookworm-backports, che contengono pacchetti che non dovrebbero
essere installati automaticamente, c’è una riga aggiuntiva, come ”http://deb.debian.org/debian/dists/experime
nell’esempio seguente.
Archive: experimental
Origin: Debian
Label: Debian
NotAutomatic: yes
Component: main
Architecture: amd64
Debian Reference 68 / 263
Notare che per gli archivi normali senza la riga ”NotAutomatic: yes”, il valore predefinito per la priorità di Pin è
500, mentre per gli archivi speciali con ”NotAutomatic: yes”, il valore predefinito per la priorità di Pin è 1 (vedere
apt_preferences(5) e Sezione 2.7.7).
Quando si usano strumenti APT, quali aptitude, apt-get, synaptic, apt-file, auto-apt, … è necessario
aggiornare le copie locali dei metadati contenenti le informazioni sull’archivio Debian. Queste copie locali hanno i
seguenti nomi di file che corrispondono ai nomi di distribuzione, area e architettura specificati nell’elenco
delle fonti (vedere Sezione 2.1.5).
• ”/var/lib/apt/lists/deb.debian.org_debian_dists_distribuzione_Release”
• ”/var/lib/apt/lists/deb.debian.org_debian_dists_distribuzione_Release.gpg”
• ”/var/lib/apt/lists/deb.debian.org_debian_dists_distribuzione_area_binary-architettura_Pac
• ”/var/lib/apt/lists/deb.debian.org_debian_dists_distribuzione_area_source_Sources”
• ”/var/cache/apt/apt-file/deb.debian.org_debian_dists_distribuzione_Contents-architettura.g
(per apt-file)
I primi quattro tipi di file sono condivisi da tutti i comandi APT pertinenti e vengono aggiornati dalla riga di comando
con ”apt-get update” e ”aptitude update”. I metadati ”Packages” sono aggiornati se esiste la riga ”deb”
nell’elenco delle fonti. I metadati ”Sources” sono aggiornati se esiste la riga ”deb-src” nell’elenco delle fonti.
I metadati ”Packages” e ”Sources” contengono la voce ”Filename:” che punta alla posizione dei file dei pacchetti
binari e sorgenti. Attualmente questi pacchetti sono posizionati nell’albero di directory ”pool/” per una transizione
migliore tra i rilasci.
Le copie locali dei metadati ”Packages” possono essere ricercate interattivamente con l’aiuto di aptitude. Il co-
mando specializzato di ricerca grep-dctrl(1) può cercare nelle copie locai dei metadati ”Packages” e ”Sources”.
La copia locale dei metadati ”Contents-architettura” può essere aggiornata con ”apt-file update” e la sua
posizione è diversa da quella degli altri quattro file. Vedere apt-file(1). (auto-apt usa in modo predefinito una
posizione differente per la copia locale di ”Contents-architettura.gz”.)
In aggiunta ai metadati recuperati da remoto, lo strumento APT, a partire da lenny, memorizza le informazioni
generate localmente sullo stato delle installazioni in ”/var/lib/apt/extended_states” che è usato da tutti gli
strumenti APT per tenere traccia dei pacchetti installati automaticamente.
In aggiunta ai metadati recuperati da remoto, il comando aptitude memorizza le informazioni generate localmente
sullo stato delle installazioni in ”/var/lib/aptitude/pkgstates” che è usato solo da esso.
Tutti i pacchetti scaricati da remoto attraverso il meccanismo APT vengono salvati nella directory ”/var/cache/apt/archiv
fino a che non vengono cancellati.
Questa politica di pulizia dei file della cache per aptitude può essere impostata in ”Opzioni” → ”Preferenze”
e può essere forzata usando la sua voce di menu ”Pulisci la cache dei pacchetti” o ”Cancella i file
vecchi” in ”Azioni”.
Debian Reference 69 / 263
Suggerimento
Sono qui descritti solamente i formati base dei pacchetti sorgenti. Per ulteriori informazioni vedere
dpkg-source(1).
caratteri utilizzabili
nome porzione presenza
(espressione regolare)
nome-pacchetto [a-z0-9][-a-z0-9.+]+ richiesta
epoca: [0-9]+: opzionale
versione-originale [-a-zA-Z0-9.+:]+ richiesta
versione.debian [a-zA-Z0-9.+~]+ opzionale
Tabella 2.16: I caratteri utilizzabili all’interno di ciascuna porzione del nome dei pacchetti Debian
Nota
Si può controllare l’ordine delle versioni dei pacchetti con dpkg(1), per esempio con ”dpkg
--compare-versions 7.0 gt 7.~pre1 ; echo $?”.
Nota
L’installatore Debian (d-i) usa come estensione per i suoi pacchetti binari udeb invece della normale deb. Un
pacchetto udeb è un pacchetto deb ridotto al minimo, con rimossi alcuni contenuti non essenziali come la docu-
mentazione, per risparmiare spazio seguendo meno rigorosamente i requisiti richiesti dalle norme per i pacchetti.
Entrambi i pacchetti deb e udeb condividono la stessa struttura di pacchetto. La ”u” sta per micro.
dpkg(1) è lo strumento di più basso livello per la gestione dei pacchetti Debian. È molto potente e deve essere usato
con cautela.
Quando installa un pacchetto chiamato ”nome_pacchetto”, dpkg fa nell’ordine elencato le seguenti operazioni.
Il sistema debconf fornisce un’interazione standard con l’utente con supporto per internazionalizzazione e localiz-
zazione (Capitolo 8).
Il file ”status” è anche usato da altri strumenti come dpkg(1): ”dselect update” e ”apt-get -u dselect-upgrade”.
Il comando di ricerca specializzato grep-dctrl(1) può ricercare nelle copie locali dei metadati ”status” e ”available”.
Suggerimento
Nell’ambiente dell’installatore Debian, viene usato il comando udpkg per aprire i pacchetti udeb. Il comando
udpkg è una versione ridotta al minimo del comando dpkg.
Il sistema Debian ha un meccanismo per installare senza problemi programmi che si sovrappongono nelle loro funzioni
usando update-alternatives(1). Per esempio, si può far sì che il comando vi esegua vim quando si sono
installati entrambi i pacchetti vim e nvi.
$ ls -l $(type -p vi)
lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi
$ sudo update-alternatives --display vi
...
$ sudo update-alternatives --config vi
Debian Reference 71 / 263
Selection Command
----------------------------------------------
1 /usr/bin/vim
*+ 2 /usr/bin/nvi
Il sistema delle alternative Debian mantiene le proprie selezioni in forma di collegamenti simbolici in ”/etc/alternatives/”
Il procedimento di selezione usa i file corrispondenti in ”/var/lib/dpkg/alternatives/”.
La sovrascrittura dello stato fornita dal comando dpkg-statoverride(8) è un modo per dire a dpkg(1) di usare un
proprietario o una modalità diversa per un file quando viene installato un pacchetto. Se viene specificato ”--update”
e il file esiste già, viene immediatamente impostato con il prorpietario e la modalità nuovi.
Attenzione
La modifica diretta del proprietario o della modalità, usando chmod o chown, di un file che appartiene ad
un pacchetto da parte dell’amministratore del sistema viene vanificata dal successivo aggiornamento del
pacchetto.
Nota
È stata usata la parola file, ma in realtà si può trattare di un qualsiasi oggetto nel file system gestito da dpkg, inclusi
directory, device, ecc.
Le deviazioni per i file fornite dal comando dpkg-divert(8) sono un modo per forzare dpkg(1) a non installare un
file nella sua posizione predefinita, ma in una posizione deviata. L’uso di dpkg-divert è pensato per gli script di
manutenzione dei pacchetti. Il suo uso in maniera superficiale da parte dell’amministratore di sistema è deprecato.
Quando si usa il sistema testing o unstable, l’amministratore deve saper ripristinare le cose da una situazione
problematica di gestione dei pacchetti.
Attenzione
Alcuni dei metodi descritti comportano azioni ad alto rischio. Ci si consideri avvertiti!
Se si forza l’installazione di un pacchetto con ”sudo dpkg -i ...” in un sistema che non ha tutti i pacchetti nelle
dipendenze installati, allora l’installazione del pacchetto fallirà come parzialmente installato.
Si dovrebbero installare tutti i pacchetti di dipendenza usando il sistema APT o ”sudo dpkg -i ...”.
Poi, configurare tutti i pacchetti parzialmente installati con il comando seguente.
# dpkg --configure -a
Debian Reference 72 / 263
Errori nella cache dei dati dei pacchetti causano errori interessanti come ”GPG error: ... invalid: BADSIG ...” con APT.
Si dovrebbero rimuovere tutti i dati in cache con ”sudo rm -rf /var/lib/apt/* ” e riprovare. (Se viene usato
apt-cacher-ng si dovrebbe anche eseguire ”sudo rm -rf /var/cache/apt-cacher-ng/* ”.)
Se un programma con interfaccia grafica per il desktop presenta problemi di instabilità dopo un importante aggiorna-
mento della versione originale, si dovrebbero sospettare interferenze con vecchi file locali di configurazione creati da
esso. Se è stabile per account utente creati da zero, questa ipotesi è confermata. (Questo è un bug nella creazione
del pacchetto e viene solitamente evitato dal curatore del pacchetto.)
Per ripristinare la stabilità, si dovrebbero spostare i corrispondenti file locali di configurazione e riavviare il programma
GUI. Potrebbe essere necessario leggere il contenuto dei vecchi file di configurazione per ripristinare successivamen-
te le informazioni di configurazione. (Non cancellarli troppo di fretta.)
I sistemi di gestione dei pacchetti a livello dell’archivio, come aptitude(8) o apt-get(1) non provano nemmeno ad
installare pacchetti con file sovrapposti, basandosi sulle dipendenze dei pacchetti (vedere Sezione 2.1.7).
Errori dei manutentori dei pacchetti o l’uso di fonti degli archivi mescolate in modo incoerente (vedere Sezione 2.7.6)
dall’amministratore di sistema possono creare una situazione con dipendenze dei pacchetti non correttamente defi-
nite. Quando, in una situazione di questo tipo, si installa un pacchetto con file sovrapposti usando aptitude(8) o
apt-get(1), dpkg(1) che spacchetta i pacchetti si assicura di restituire un errore al programma che lo ha invocato
senza sovrascrivere file esistenti.
Attenzione
L’uso di pacchetti di terze parti introduce significativi rischi per il sistema attraverso gli script dei manutentori
che sono eseguiti con privilegi di root e che possono fare qualsiasi cosa nel sistema. Il comando dpkg(1)
protegge solo contro la sovrascrittura in fase di spacchettamento.
Si possono risolvere installazioni problematiche di questo tipo rimuovendo prima il vecchio pacchetto che crea pro-
blemi: vecchio-pacchetto.
$ sudo dpkg -P old-package
Quando un comando nello script di un pacchetto restituisce un errore per una qualche ragione e lo script finisce con
un errore, il sistema di gestione dei pacchetti cancella l’azione e finisce con pacchetti parzialmente installati. Quando
un pacchetto contiene bug nei suoi script di rimozione, il pacchetto può diventare impossibile da rimuovere e fonte di
problemi.
Per i problemi di script di pacchetto di ”nome_pacchetto”, si dovrebbe guardare negli script di pacchetto seguenti.
• ”/var/lib/dpkg/info/nome_pacchetto.preinst”
• ”/var/lib/dpkg/info/nome_pacchetto.postinst”
• ”/var/lib/dpkg/info/nome_pacchetto.prerm”
Debian Reference 73 / 263
• ”/var/lib/dpkg/info/nome_pacchetto.postrm”
Modificare dall’account root lo script di pacchetto che causa problemi usando le tecniche seguenti.
Dato che dpkg è uno strumento per pacchetti a livello molto basso, può funzionare anche in situazioni molto brutte
come un sistema non avviabile senza una connessione di rete. Assumiamo, per esempio, che il pacchetto pippo sia
difettoso e debba essere sostituito.
Si possono trovare copie di versioni più vecchie del pacchetto pippo, libere dal bug, nella directory della cache dei
pacchetti: «/var/cache/apt/archives/». (Se non ci sono, se ne può scaricare una dall’archivio di https://snapshot.debia
o copiarla dalla cache dei pacchetti di una macchina funzionante.)
Se si può avviare il sistema, lo si può installare con il comando seguente.
# dpkg -i /path/to/foo_old_version_arch.deb
Suggerimento
Se il danno al sistema è piccolo, si può in alternativa retrocedere tutto il sistema ad una versione precedente come
in Sezione 2.7.11, usando il sistema di più alto livello APT.
Se il sistema non è avviabile dal disco fisso, si dovrebbe cercare un altro modo per fare l’avvio.
Questo esempio funziona persino se il comando dpkg sul disco fisso è danneggiato.
Suggerimento
Per ripristinare il sistema danneggiato, può essere usato in modo simile qualsiasi sistema GNU/Linux avviato da
un altro sistema sul disco fisso, CD live GNU/Linux, chiavetta USB avviabile o avvio di rete.
Se il tentativo di installare un pacchetto in questo modo fallisce a causa di qualche violazione di dipendenze e si deve
necessariamente farlo come ultima spiaggia, si possono sovrascrivere le dipendenze usando ”--ignore-depends”,
”--force-depends” e altre opzioni di dpkg. Se lo si fa, è necessario in seguito fare tutti gli sforzi possibili per
ripristinare le dipendenze corrette. Per i dettagli vedere dpkg(8).
Nota
Se il sistema è seriamente danneggiato, se ne dovrebbe fare un backup completo in un posto sicuro (vedere
Sezione 10.2) e fare un’installazione pulita. Ciò comporta meno perdita di tempo e alla fine produce un risultato
migliore.
Debian Reference 74 / 263
Se ”/var/lib/dpkg/status” diventa corrotto per una qualsiasi ragione, il sistema Debian perde i dati sulla selezio-
ne dei pacchetti e ne ha grave danno. Cercare il vecchio file ”/var/lib/dpkg/status” in ”/var/lib/dpkg/status-old
o ”/var/backups/dpkg.status.*”.
Mantenere ”/var/backups/” in una partizione separata può essere una buona idea dato che questa directory
contiene molti dati importanti per il sistema.
Per danni molto seri, raccomando di fare una re-installazione pulita dopo aver fatto il backup del sistema. Anche se
tutto ciò che era in ”/var/” è andato perduto, è sempre possibile recuperare alcune informazioni dalle directory in
”/usr/share/doc/” per guidare le nuove installazioni.
Reinstallare un sistema (desktop) minimale
# mkdir -p /path/to/old/system
Verranno mostrati i nomi dei pacchetti da installare. (Ci potrebbero essere alcuni nomi non di pacchetto, come
”texmf”.)
Per semplicità, gli esempi di elenco delle fonti in questa sezione sono presentati come ”/etc/apt/sources.list”
in stile a una riga dopo il rilascio bookworm.
Se si desidera limitare l’uso della banda da parte di APT per gli scaricamenti, per esempio a 800Kib/sec (=100kiB/sec),
si devono usare i parametri di configurazione di APT nel modo seguente.
APT::Acquire::http::Dl-Limit "800";
Il pacchetto apt viene fornito con il proprio script di cron, ”/etc/cron.daily/apt” per permettere di scaricare au-
tomaticamente i pacchetti. Questo script può essere migliorato, installando il pacchetto unattended-upgrades, per
effettuare l’aggiornamento automatico dei pacchetti. Può essere personalizzato dai parametri in ”/etc/apt/apt.conf.d/0
e ”/etc/apt/apt.conf.d/50unattended-upgrades” come descritto in ”/usr/share/doc/unattended-upgrades
Debian Reference 75 / 263
Il pacchetto ”unattended-upgrades è pensato principalmente per gli aggiornamenti di sicurezza del sistema stable.
Se il rischio di danneggiare un sistema stable esistente con gli aggiornamenti automatici è minore di quello che il
sistema venga danneggiato da un intruso, usando una falla nella sicurezza chiusa dall’aggiornamento di sicurezza,
si dovrebbe considerare l’uso di questi aggiornamenti automatici con parametri simili ai seguenti.
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "1";
Se si sta usando un sistema testing o unstable, non è bene usare gli aggiornamenti automatici perché certamente
prima o poi danneggeranno il sistema. Anche per testing o unstable, per risparmiare tempo nell’aggiornamento
interattivo, si può volere scaricare i pacchetti in anticipo usando parametri di configurazione come i seguenti.
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "0";
Non è necessario impostare esplicitamente un valore di priorità di pin nel file ”/etc/apt/preferences”. Quando
nuovi pacchetti diventano disponibili, la configurazione predefinita fornisce gli aggiornamenti più ragionevoli (vedere
Sezione 2.5.3).
• Tutti i vecchi pacchetti installati vengono aggiornati con quelli più nuovi da bookworm-updates.
• Solo i vecchi pacchetti installati manualmente da bookworm-backports vengono aggiornati a quelli più nuovi da
bookworm-backports.
Ogni volta che si desidera installare manualmente un pacchetto chiamato ”nome-pacchetto” con le sue dipendenze
dall’archivio bookworm-backports, usare questo comando che sposta il rilascio stabilito con l’opzione ”-t”.
$ sudo apt-get install -t bookworm-backports package-name
avvertimento
Non installare tropppi pacchetti da archivi backports.debian.org. Ciò può causare complicazioni nelle di-
pendenze dei pacchetti. Vedere Sezione 2.1.11 per soluzioni alternative.
Debian Reference 76 / 263
avvertimento
Si dovrebbe tenere a mente che pacchetti esterni ottengono privilegi di root nel sistema. Si dovrebbero
usare solamente archivi fidati per i pacchetti esterni. Vedere Sezione 2.1.11 per soluzioni alternative.
Si può usare secure APT con un archivio di pacchetti esterni compatibile con Debian, aggiungendolo nell’elenco
delle fonti e mettendo il suo file della chiave dell’archivio nella directory ”/etc/apt/trusted.gpg.d/”. Vedere
sources.list(5), apt-secure(8) e apt-key(8).
2.7.6 Pacchetti da fonti miste di archivi senza l’uso dei pin di APT.
Attenzione
Installare pacchetti da fonti mescolate di archivi non è supportato dalla distribuzione Debian ufficiale, tranne
che per particolari combinazioni supportate ufficialmente, come stable con security updates e stable-
updates.
Ecco un esempio di operazioni da fare per includere, sporadicamente, versioni originali più recenti di specifici pacchetti
presenti in unstable pur mantenendo testing.
Con questo approccio manuale non si deve creare il file ”/etc/apt/preferences” né ci si deve preoccupare dei
pin di apt. Ma è piuttosto laborioso.
Attenzione
Quando si usano fonti di archivi mescolate, si deve assicurare la compatibilità tra i pacchetti da soli, dato
che Debian non la garantisce. Se esistono incompatibilità tra i pacchetti, si può danneggiare il sistema. Si
deve essere in grado di giudicare queste esigenze tecniche. L’uso di fonti mescolate di archivi non correlati
è una modalità di funzionamento del tutto facoltativa e il suo uso non è per nulla raccomandato.
Nota
Per rendere l’installazione di un pacchetto più sicura, possono essere forniti alcuni pacchetti binari applicativi
commerciali non liberi con librerie completamente statiche. Si dovrebbe anche per essi controllare in ogni caso la
compatibilità con ABI, ecc.
Nota
Tranne nel caso di evitare per un breve periodo pacchetti non funzionanti, l’installazione di pacchetti binari da
archivi non Debian è generalmente una cattiva idea Si dovrebbero valutare tutte le soluzioni tecniche alternative
più sicure che sono compatibili con il proprio sistema Debian attuale (vedere Sezione 2.1.11).
avvertimento
L’uso dei pin di apt da parte di un utente inesperto è una fonte sicura di grossi problemi. Si dovrebbe evitare
l’uso di questa tecnica, tranne nei casi in cui sia strettamente necessario.
Senza il file ”/etc/apt/preferences”, il sistema APT sceglie la versione più recente disponibile come versione
candidata usando la stringa di versione. Questa è la situazione normale e l’uso raccomandato del sistema APT.
Tutte le combinazioni di archivi supportate ufficialmente non necessitano del file ”/etc/apt/preferences”, dato
che gli archivi che non dovrebbero essere usati come fonti automatica per gli aggiornamenti sono marcati come
NotAutomatic e trattati in modo appropriato.
Suggerimento
La regola di comparazione della stringa di versione può essere verificata con, ad esempio, ”dpkg
--compare-versions ver1.1 gt ver1.1~1; echo $?” (vedere dpkg(1)).
Quando si installano regolarmente pacchetti da fonti di archivi mescolate (vedere Sezione 2.7.6), si possono automa-
tizzare queste operazioni complicate creando il file ”/etc/apt/preferences” con le voci appropriate e modificando
la regola di selezione dei pacchetti per le versioni candidate come descritto in apt_preferences(5). Questo è
chiamato usare i pin di APT.
Quando si usano i pin di apt si deve assicurare la compatibilità dei pacchetti da soli dato che Debian non la garantisce.
L’uso dei pin di apt è una modalità di funzionamento del tutto facoltativa e il suo uso non è per nulla consigliato.
Per le regole di apt_preferences(5) sono usati i file Release a livello di archivio (vedere Sezione 2.5.3). I pin di
apt perciò funzionano solo con il nome della ”suite” per i normali archivi Debian e per gli archivi di sicurezza Debian.
(Ciò è diverso per gli archivi Ubuntu.) Per esempio nel file ”/etc/apt/preferences” si può usare ”Pin: release
a=unstable”, ma non ”Pin: release a=sid”.
Quando si usano archivi non Debian con i pin di apt si dovrebbe controllare quale sia il loro scopo e la loro credibilità.
Ubuntu e Debian, per esempio, non sono fatti per essere mescolati.
Nota
Anche se non si crea il file ”/etc/apt/preferences” si possono fare operazioni piuttosto complesse (vedere
Sezione 2.6.6 e Sezione 2.7.6) senza l’uso dei pin di apt.
Debian Reference 78 / 263
Quella che segue è una spiegazione semplificata delluso dei pin di APT.
Il sistema APT sceglie, dalle fonti per i pacchetti disponibili definite nel file ”/etc/apt/sources.list”, il pacchetto
di aggiornamento con la priorità di pin più elevata come versione candidata del pacchetto. Se la priorità di pin del
pacchetto è maggiore di 1000, la restrizione a versioni di aggiornamento non viene considerata per permettere la
retrocessione ad una versione precedente (vedere Sezione 2.7.11).
Il valore della priorità di pin per ciascun pacchetto è definito dalle voci ”Pin-Priority” nel file ”/etc/apt/preferences
o viene usato il valore predefinito.
Tabella 2.18: Elenco di valori di priorità di pin che esemplificano la tecnica d’uso dei pin di APT.
L’archivio del rilascio obiettivo può essere impostato con l’opzione per la riga di comando, ad esempio, ”apt-get
install -t testing qualche-pacchetto”
Gli attributi di archivio NonAutomatico e MaConAggiornamentiAutomatici vengono impostati dal server dell’ar-
chivio che ha il file Release a livello di archivio (vedere Sezione 2.5.3) che contiene sia ”NotAutomatic: yes” sia
”ButAutomaticUpgrades: yes”. L’archivio NonAutomatico viene impostato dal server dell’archivio che ha il file
Release a livello di archivio che contiene solamente ”NotAutomatic: yes”.
La situazione dei pin di APT di pacchetto da diverse fonti di archivi viene mostrata con ”apt-cache policy
pacchetto”.
• Una riga che inizia con ”pacchetto pin:” elenca la versione del pacchetto di pin se è definita un’associazione
specifica per pacchetto, ad esempio ”Package pin: 0.190”.
• Non esiste alcuna riga con ”Package pin:” se non è definita alcuna associazione solamente con pacchetto.
• Il valore di priorità di pin associato solamente con pacchetto viene mostrato alla destra di tutte le sringhe di versione,
ad esempio ”0.181 700”.
• Se non è definita un’associazione specifica con pacchetto viene mostrato ”0” alla destra di tutte le stringhe di
versione, come ad esempio in ”0.181 0”.
• I valori di priorità di pin degli archivi (definiti come ”Package: *” nel file ”/etc/apt/preferences”) sono elencati
alla sinistra di tutti i percorsi di archivio, ad esempio ”100 http://deb.debian.org/debian/bookworm-backports/
Packages”.
avvertimento
L’uso dei pin di apt da parte di un utente inesperto è una fonte sicura di grossi problemi. Si dovrebbe evitare
l’uso di questa tecnica, tranne nei casi in cui sia strettamente necessario.
Se non si desidera installare pacchetti particolari richiamati automaticamente perché ”Raccomandati”, è necessario
creare il file ”/etc/apt/preferences” ed elencarvi esplicitamente all’inizio tutti quei pacchetti nel modo seguente.
Debian Reference 79 / 263
Package: package-1
Pin: version *
Pin-Priority: -1
Package: package-2
Pin: version *
Pin-Priority: -1
avvertimento
L’uso dei pin di apt da parte di un utente inesperto è una fonte sicura di grossi problemi. Si dovrebbe evitare
l’uso di questa tecnica, tranne nei casi in cui sia strettamente necessario.
Quello che segue è un esempio di uso dei pin di APT per includere pacchetti specifici con versioni originali più
recenti presenti in unstable aggiornandoli regolarmente pur mantenendo testing. Si devono elencare nel file
”/etc/apt/sources.list” tutti gli archivi necessari nel modo seguente.
deb http://deb.debian.org/debian/ testing main contrib non-free
deb http://deb.debian.org/debian/ unstable main contrib non-free
deb http://security.debian.org/debian-security testing-security main contrib
Quando, con questa configurazione, si desidera installare un pacchetto chiamato ”nome-pacchetto” con le sue
dipendenze dall’archivio unstable, usare il comando seguente che cambia il rilascio definito con l’opzione ”-t” (la
priorità di pin di unstable diventa 990).
$ sudo apt-get install -t unstable package-name
Con quessta configurazione, la normale esecuzione di ”apt-get upgrade” e ”apt-get dist-upgrade” (o ”aptitude
safe-upgrade” e ”aptitude full-upgrade”) aggiorna i pacchetti che erano stati installati dall’archivio testing
usando l’attuale archivio testing e i pacchetti che erano stati installati dall’archivio unstable usando l’attuale
archivio unstable.
Attenzione
Fare attenzione a non rimuovere la voce ”testing” dal file ”/etc/apt/sources.list”. Senza la voce
”testing” in tale file, il sistema APT aggiorna i pacchetti usando l’archivio unstable più recente.
Suggerimento
Io di solito modifico il file ”/etc/apt/sources.list per commentare le voci relative all’archivio ”unstable
immediatamente dopo l’azione descritta sopra. Questo evita il rallentamento del processo di aggiornamento dovuto
a troppe voci nel file ”/etc/apt/sources.list” anche se impedisce l’aggiornamento, usando l’attuale archivio
unstable dei pacchetti che erano stati installati dall’archivio unstable.
Debian Reference 80 / 263
Suggerimento
Se viene usato ”Pin-Priority: 1” invece di ”Pin-Priority: 100” nel file ”/etc/apt/preferences”, i pac-
chetti già installati che hanno 100 come valore della priorità di pin, non vengono aggiornati dall’archivio unstable
nemmeno se viene rimossa la voce ”testing” dal file ”/etc/apt/sources.list”.
Se si desidera tenere traccia automaticamente di particolari pacchetti in unstable senza l’iniziale installazione con
”-t unstable”, si deve creare il file ”/etc/apt/preferences” ed elencarvi esplicitamente tutti i pacchetti voluti
nel modo seguente.
Package: package-1
Pin: release a=unstable
Pin-Priority: 700
Package: package-2
Pin: release a=unstable
Pin-Priority: 700
Questo imposta il valore della priorità di pin per ciascun pacchetto specifico. Per esempio, per tenere traccia della
versione più recente in unstable di questo manuale ”Debian Reference” in inglese, si dovrebbero avere, nel file
”/etc/apt/preferences” le voci seguenti.
Package: debian-reference-en
Pin: release a=unstable
Pin-Priority: 700
Package: debian-reference-common
Pin: release a=unstable
Pin-Priority: 700
Suggerimento
Questo modo di usare i pin di apt è valido anche quando si segue l’archivio stable. Per l’esperienza dell’autore,
installare i pacchetti di documentazione dall’archivio unstable è sempre stato sicuro, fino ad ora.
avvertimento
L’uso dei pin di apt da parte di un utente inesperto è una fonte sicura di grossi problemi. Si dovrebbe evitare
l’uso di questa tecnica, tranne nei casi in cui sia strettamente necessario.
Quello che segue è un esempio di uso dei pin di APT per includere pacchetti specifici con versioni originali più recenti
presenti in experimental pur mantenendo unstable. Si devono elencare nel file ”/etc/apt/sources.list”
tutti gli archivi necessari nel modo seguente.
deb http://deb.debian.org/debian/ unstable main contrib non-free
deb http://deb.debian.org/debian/ experimental main contrib non-free
deb http://security.debian.org/ testing-security main contrib
Il valore predefinito della priorità di pin per l’archivio experimental è sempre 1 (<<100) dato che è un archivio Non
automatico (vedere Sezione 2.5.3). Per usare semplicemente l’archivio experimental non c’è alcun bisogno di
impostare il valore di priorità di pin esplicitamente nel file ”/etc/apt/preferences”, a meno che non si desideri
aggiornare automaticamente da esso in futuro particolari pacchetti.
Debian Reference 81 / 263
avvertimento
L’uso dei pin di apt da parte di un utente inesperto è una fonte sicura di grossi problemi. Si dovrebbe evitare
l’uso di questa tecnica, tranne nei casi in cui sia strettamente necessario.
Attenzione
La retrocessione ad una versione precedente non è ufficialmente supportata da Debian. Dovrebbe essere
fatta solamente come parte di un processo di ripristino di emergenza. Nonostante questo è noto che fun-
ziona bene in caso di molti incidenti. Per i sistemi critici, si dovrebbe fare un backup di tutti i dati importanti
sul sistema dopo l’operazione di ripristino e reinstallare un nuovo sistema da zero.
Si potrebbe essere fortunati e riuscire a retrocedere da un archivio più recente ad uno più vecchio per ripristinare un ag-
giornamento di sistema andato male, manipolando le versioni candidate (vedere Sezione 2.7.7). Questa è l’alternati-
va pigra al lavoro tedioso di dover usare molti comandi ”dpkg -i pacchetto-danneggiato_vecchia-versione.deb”
(vedereSezione 2.6.6).
Cercare le righe nel file ”/etc/apt/sources.list” che rimandano a unstable, come la seguente.
deb http://deb.debian.org/debian/ sid main contrib non-free
Eseguire ”apt-get update; apt-get dist-upgrade” per forzare la retrocessione dei pacchetti in tutto il siste-
ma.
Rimuovere questo file speciale ”/etc/apt/preferences” dopo la retrocessione di emergenza.
Suggerimento
È una buona idea rimuovere (non eliminare completamente!) il maggior numero di pacchetti per minimizzare i
problemi di dipendenza. Potrebbe essere necessario rimuovere o installare manualmente alcuni pacchetti per
retrocedere il sistema. Il kernel Linux, il bootloader, udev, PAM, APT e i pacchetti relativi alla rete ed i loro file di
configurazione richiedono particolare attenzione.
Se si ha intenzione di compilare un programma dai sorgenti per rimpiazzare un pacchetto Debian, la cosa migliore è
creare un vero pacchetto debianizzato locale (*.deb) e usare un archivio privato.
Se si sceglie di compilare un programma dai sorgenti e di installarlo invece in ”/usr/local”, si può usare equivs
come ultima spiaggia per soddisfare le dipendenze mancanti del pacchetto.
Debian Reference 82 / 263
Package: equivs
Priority: optional
Section: admin
Description: Circumventing Debian package dependencies
This package provides a tool to create trivial Debian packages.
Typically these packages contain only dependency information, but they
can also include normal installed files like other packages do.
.
One use for this is to create a metapackage: a package whose sole
purpose is to declare dependencies and conflicts on other packages so
that these will be automatically installed, upgraded, or removed.
.
Another use is to circumvent dependency checking: by letting dpkg
think a particular package name and version is installed when it
isn't, you can work around bugs in other packages' dependencies.
(Please do still file such bugs, though.)
Attenzione
Non esistono garanzie che la procedura descritta qui funzioni senza dover fare altro lavoro manuale date
le differenze dei sistemi.
Per aggiornamenti parziali del sistema stable, è una buona idea ricompilare un pacchetto, usando il pacchetto
sorgente, all’interno del suo ambiente. Questo evita massicci aggiornamenti di pacchetti a causa delle dipendenze.
Aggiungere le voci seguenti al file ”/etc/apt/sources.list” di un sistema stable.
deb-src http://deb.debian.org/debian unstable main contrib non-free
Installare i pacchetti richiesti per la compilazione e scaricare il pacchetto sorgente, come nell’esempio seguente.
# apt-get update
# apt-get dist-upgrade
# apt-get install fakeroot devscripts build-essential
# apt-get build-dep foo
$ apt-get source foo
$ cd foo*
Aggiornare alcuni pacchetti con catene di strumenti come dpkg e debhelper dai pacchetti backport se sono neces-
sari per fare il backport.
Eseguire quanto segue.
$ dch -i
Dato che fare il mirror di intere sottosezioni dell’archivio Debian spreca spazio su disco e banda, l’utilizzo di un server
proxy locale per APT è una buona idea quando si amministrano molti sistemi in una LAN. APT può essere configu-
rato per usare server proxy web generici (http), quale squid (vedere Sezione 6.5) come descritto in apt.confo(5)
ed in ”/usr/share/doc/apt/examples/configure-index.gz”. La variabile d’ambiente ”$http_proxy” può
essere usata per scavalcare l’impostazione del server proxy nel file ”/etc/apt/apt.conf”.
Ci sono strumenti proxy specifici per l’archivio Debian. Prima di usarli si dovrebbe contollare il BTS.
Tabella 2.19: Elenco degli strumenti proxy specifici per l’archivio Debian
Attenzione
Quando Debian riorganizza la struttura del suo archivio, questi strumenti proxy specializzati tendono ad
aver bisogno di ritocchi al codice da parte del manutentore del pacchetto e possono non essere funzionanti
per un po’ di tempo. D’altra parte i server proxy web generici (http) sono più robusti e gestiscono questi
cambiamenti più facilmente.
Si possono ottenere molte altre informazioni sulla gestione dei pacchetti dalla documentazione seguente.
Capitolo 3
È bene che l’amministratore di sistema conosca almeno a grandi linee come viene avviato e configurato il sistema
Debian. Anche se i dettagli precisi sono nei file sorgenti dei pacchetti installati e nella loro documentazione, essi sono
un po’ troppo per la maggior parte degli utenti.
Ecco una panoramica di base dei punti principali dell’inizializzazione di un sistema Debian. Dato che un sistema
Debian è in costante evoluzione, si dovrebbe far riferimento alla documentazione più recente.
• Debian Linux Kernel Handbook è la fonte principale di informazioni sul kernel Debian.
• bootup(7) descrive il processo di avvio del sistema basato su systemd (Debian recenti).
• boot(7) descrive il processo di avvio del sistema basato su UNIX System V Release 4 (Debian più vecchie).
Il sistema del computer passa attraverso varie fasi del processo di avvio, dall’accensione a quando offre all’utente il
sistema operativo (SO) pienamente funzionante.
Per semplicità la spiegazione è limitata alla piattaforma PC tipica con l’installazione standard.
Il normale processo di avvio è come un razzo a quattro stadi. Ogni stadio del razzo passa il controllo del sistema allo
stadio successivo.
• Sezione 3.1.1
• Sezione 3.1.2
• Sezione 3.1.3
• Sezione 3.1.4
Naturalmente questo può essere configurato in modo diverso. Per esempio, se è stato compilato un kernel persona-
lizzato, si potrebbe saltare la fase con il mini-sistema Debian. Non dare per scontato che quanto detto valga per il
proprio sistema fino a che non si abbia controllato direttamente.
La Unified Extensible Firmware Interface (UEFI) definisce un gestore di avvio come parte della specifica UEFI. Quando
un computer viene acceso, il gestore dell’avvio è il primo stadio del processo di avvio che controlla la configurazione
di avvio e, in base alle sue impostazioni, esegue poi il boot loader del sistema operativo specificato o il kernel del
Debian Reference 85 / 263
sistema operativo (solitamente il boot loader). La configurazione di avvio è definita dalle variabili memorizzate nella
NVRAM, incluse variabili che indicano i percorsi del file system dei caricatori dei SO o dei kernel dei SO.
Una partizione di sistema EFI (ESP, EFI System Partition) è una partizione di dispositivo per archiviazione di dati che
è utilizzata nei computer che sono conformi alla specifica UEFI. Il firmware UEFI accede ad essa quando un computer
viene acceso, essa memorizza le applicazioni UEFI e i file che tali applicazioni devono eseguire, inclusi i boot loader
dei sistemi operativi. (Nei sistemi PC vecchi può essere invece utilizzato il BIOS memorizzato nella MBR.)
Il bootloader è il secondo stadio del processo di avvio che è iniziato dall’UEFI. Carica l’immagine kernel del sistema
e l’immagine initrd in memoria e passa il controllo ad esse. L’immagine initrd è l’immagine del file system radice ed il
suo supporto dipende dal bootloader usato.
Il sistema Debian normalmente usa il kernel Linux xome kernel di sistema predefinito. L’immagine initrd per l’attuale
kernel Linux 5.x è tecnicamente l’immagine initramfs (Initial RAM filesystem, file system RAM iniziale).
Sono disponibili molti bootloader e opzioni di configurazione.
avvertimento
Non mettere mano ai bootloader senza aver creato supporti avviabili di ripristino (chiavette USB, CD o
floppy) create da immagini nel pacchetto grub-rescue-pc. Questo permette di avviare il sistema anche
senza un bootloader funzionante sul disco fisso.
Per i sistemi UEFI, GRUB2 prima legge la partizione ESP e usa l’UUID specificato per search.fs_uuid in ”/boot/efi/EFI
per determinare la partizione del file di configurazione del menu di GRUB2 ”/boot/grub/grub.cfg”.
La parte della chiave del file di configurazione del menu di GRUB2 è simile a:
menuentry 'Debian GNU/Linux' ... {
load_video
insmod gzio
insmod part_gpt
Debian Reference 86 / 263
insmod ext2
search --no-floppy --fs-uuid --set=root fe3e1db5-6454-46d6-a14c-071208ebe4b1
echo 'Loading Linux 5.10.0-6-amd64 ...'
linux /boot/vmlinuz-5.10.0-6-amd64 root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 ←-
ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-5.10.0-6-amd64
}
Per questa porzione di /boot/grub/grub.cfg, questa voce di menu significa quanto segue.
impostazione valore
moduli GRUB2 caricati gzio, part_gpt, ext2
partizione identificata come
partizione per file system radice utilizzata
UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1
percorso dell’immagine del kernel nel file
/boot/vmlinuz-5.10.0-6-amd64
system radice
”root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1
parametri di avvio del kernel utilizzati
ro quiet”
percorso dell’immagine initrd nel file
/boot/initrd.img-5.10.0-6-amd64
system radice
Tabella 3.2: Il significato della voce di menu della porzione soprastante di /boot/grub/grub.cfg
Suggerimento
si può abilitare la visualizzazione dei messaggi del log di avvio del kernel rimuovendo quiet
in ”/boot/grub/grub.cfg”. Per fare la modifica in modo persistente, modificare la riga
”GRUB_CMDLINE_LINUX_DEFAULT="quiet"” in ”/etc/default/grub”.
Suggerimento
Si può personalizzare la schermata grafica di GRUB impostando la variabile GRUB_BACKGROUND in
”/etc/default/grub” in modo che punti al file dell’immagine o mettendo l’immagine stessa in ”/boot/grub/”.
Il mini-sistema Debian è il terzo stadio del processo di avvio che viene iniziato dal bootloader. Esegue il kernel del
sistema con il suo filesystem root in memoria. Questo è uno stadio opzionale preparatorio del processo di avvio.
Nota
L’espressione ”sistema Debian mini” è stata coniata per descrivere il terzo stadio del processo di avvio in questo
documento. Normalmente ci si riferisce a questo sistema come sistema initrd o initramfs. Un sistema simile in
memoria è usato dall’installatore Debian.
Il programma ”/init” viene eseguito come primo programma in questo file system root in memoria. È un programma
che inizializza il kernel in spazio utente e passa il controllo allo stadio successivo. Questo mini-sistema Debian
offre flessibilità al processo di avvio, come la possibilità di aggiungere moduli del kernel prima del processo di avvio
principale o di montare il file system root come cifrato.
Debian Reference 87 / 263
Attenzione
È necessario usare l’opzione ”-n” per il comando mount quando si è nel filesystem root in sola lettura.
Il sistema Debian normale è il quarto stadio del processo di avvio che viene iniziato dal mini-sistema Debian. Il kernel
di sistema del mini-sistema Debian continua ad essere in esecuzione anche in questo ambiente. Il filesystem root
viene cambiato da quello in memoria all’effettivo filesystem sul disco fisso.
Il programma init viene eseguito come primo programma con PID=1 per effettuare il processo principale di avvio di
far partire molti programmi. Il percorso di file predefinito per il programma init è «/usr/sbin/init», ma può essere
cambiato con un parametro di avvio del kernel come in «init=/percorso/del/programma_init».
”/usr/sbin/init” è un collegamento simbolico a ”/lib/systemd/systemd” a partire da Debian 8 Jessie (rila-
sciata nel 2015).
Suggerimento
Si può verificare quale è l’effettivo comando init nel proprio sistema con il comando «ps --pid 1 -f».
Suggerimento
Vedere la pagina del Wiki Debian sulla velocizzazione del processo di avvio per i più recenti suggerimenti su come
velocizzare il processo di avvio.
3.2 Systemd
Quando il sistema si avvia, /usr/sbin/init che è un collegamento simbolico a /usr/lib/systemd viene avviato
come processo init del sistema (PID=1) con proprietario root (UID=0). Vedere systemd(1).
Il processo di init systemd lancia processi in parallelo sulla base dei file di configurazione delle unità (vedere systemd.unit(
che sono scritti in stile dichiarativo invece che in stile procedurale come per SysV.
I processi avviati sono messi in singoli gruppi di controllo (control group) Linux che prendono il nome dall’unità a cui
appartengono nella gerarchia privata di systemd (vedere cgroups e Sezione 4.7.5).
Le unità per le modalità di sistema sono caricate dal ”System Unit Search Path” come descritto in systemd.unit(5).
Quelle principali sono, in ordine di importanza, le seguenti:
Debian Reference 88 / 263
Le loro inter-dipendenze sono specificate dalle direttive ”Wants=”, ”Requires=”, ”Before=”, ”After=”, … (vedere
”MAPPING OF UNIT PROPERTIES TO THEIR INVERSES” in systemd.unit(5)). Sono definiti anche i controlli
delle risorse (vedere systemd.resource-control(5)).
Il suffisso dei file di configurazione delle unità codifica il loro tipo in questo modo:
All’avvio del sistema (cioè init) il processo systemd cerca di avviare ”/lib/systemd/system/default.target”
(normalmente un collegamento simbolico a ”graphical.target”). Come prima cosa alcune speciali unità target
(vedere systemd.special(7)) come ”local-fs.target”, ”swap.target” e ”cryptsetup.target” sono ri-
chiamate per montare i file system. Poi altre unità target vengono anch’esse richiamate dalle dipendenze delle unità
target. Per i dettagli leggere bootup(7).
systemd offre funzionalità di compatibilità all’indietro. Gli script di avvio in stile SysV in ”/etc/init.d/rc[0123456S].d/[
sono comunque analizzati e telinit(8) viene tradotto in richieste di attivazione di unità systemd.
Attenzione
Run level emulati da 2 a 4 hanno tutti collegamenti simbolici al corrispondente ”multi-user.target”.
Quando un utente fa il login nel sistema Debian con gdm3(8), sshd(8), ecc., /lib/systemd/system --user viene
avviato come processo di gestione dei servizi utente con proprietario l’utente corrispondente. Vedere systemd(1).
Il processo di di gestione dei servizi utente di systemd lancia processi in parallelo sulla base dei file di configurazione
delle unità dichiarate (vedere systemd.unit(5) e [email protected](5)).
Le unità per la modalità utente sono caricate dal ”User Unit Search Path” come descritto in systemd.unit(5). Quelle
principali, in ordine di priorità, sono le seguenti:
• ”/lib/systemd/system”: unità utente installate dal gestore dei pacchetti della distribuzione
I messaggi di errore del kernel visualizzati nella console possono essere configurati impostando il loro livello di soglia.
# dmesg -n3
Sotto systemd sia i messaggi del kernel sia quelli di sistema sono registrati nei log dal servizio journal systemd-journald.
(alias journald) o in dati binari persistenti dentro ”/var/log/journal” o in dati binari volatili dentro ”/run/log/journal
A questi dati binari di log si può accedere tramite il comando journalctl(1). Ad esempio si può visualizzare il log
dall’ultimo avvio con:
$ journalctl -b
In systemd l’utilità per il registro di log di sistema, rsyslogd(8), può essere disinstallato. Se è installato, cambia il
comportamento per leggere i dati del log binario volatile (invece del predefinito pre-systemd ”/dev/log”) e per creare
dati log di sistema ASCII tradizionali permanenti. Questo può essere personalizzato da ”/etc/default/rsyslog” e
”/etc/rsyslog.conf” sia per il file di log sia per la visualizzazione a schermo. Vedere rsyslogd(8) e rsyslog.conf(5).
Vedere anche Sezione 9.3.2.
systemd offre non solo un sistema init, ma anche funzionalità generiche di gestione del sistema, con il comando
systemctl(1).
Negli esempi soprastanti ”$unit” può essere un singolo nome di unità (suffissi come .service e .target so-
no opzionali) o, in molti casi, la specifica di più unità (con glob in stile shell ”*”, ”?”, ”[]” usando fnmatch(3) con
corrispondenze con i nomi primari di tutte le unità attualmente in memoria).
I comandi che cambiano lo stato del sistema negli esempi soprastanti sono tipicamente preceduti da ”sudo” per
ottenere i privilegi amministrativi necessari.
L’output di ”systemctl status $unit|$PID|$device” usa il colore del puntino (”●”) per riassumere lo stato
dell’unità a prima vista.
Ecco un elenco di altri esempi di comandi per il monitoraggio in systemd. Leggere le relative pagine di manuale,
inclusa cgroups(7).
Debian Reference 91 / 263
Il kernel gestisce il nome host del sistema. L’unità systemd avviata dasystemd-hostnamed.service imposta il no-
me host del sistema all’avvio al nome memorizzato in ”/etc/hostname”. Questo file dovrebbe contenere solamente
il nome host del sistema, non un nome di dominio pienamente qualificato.
Per visualizzare il nome host attuale eseguire hostname(1) senza alcun argomento.
3.7.2 Il filesystem
Le opzioni usate per montare i file system normali dei dischi e di rete sono impostate in ”/etc/fstab”. Vedere
fstab(5) e Sezione 9.6.7.
La configurazione dei file system cifrati è impostata in ”/etc/crypttab”. Vedere crypttab(5)
La configuraziione del software RAID con mdadm(8) è configurata in ”/etc/mdadm/mdadm.conf”. Vedere mdadm.conf(5).
avvertimento
Dopo aver montato tutti i filesystem, i file temporanei in ”/tmp”, ”/var/lock” e ”/var/run” vengono ripuliti
ad ogni avvio.
L’istanza del sistema cloud può essere lanciata come clone di ”immagini cloud ufficiali Debian” o immagini simili. Per
tali istanze di sistema, entità come nome host, file system, rete, localizzazione, chiavi SSH, utenti e gruppi, possono
Debian Reference 93 / 263
essere configurate usando funzionalità fornite dai pacchetti cloud-init e netplan.io con diverse fonti di dati,
come i file posizionati nell’immagine del sistema originale e dati esterni forniti durante il suo avvio. Questi pacchetti
permettono la configurazione dichiarativa del sistema usando dati YAML.
Vedere ulteriori informazioni in ”Cloud Computing with Debian and its descendants”, ”Documentazione di Cloud-init”
e Sezione 5.4.
Con l’installazione predefinita molti servizi di rete (vedere Capitolo 6) vengono avviati come processi demone do-
po network.target al momento dell’avvio di sistema da systemd. ”sshd non fa eccezione. Come esempio di
personalizzazione cambiamo questo comportamento nell’avvio on-demand di ”sshd”.
Come prima cosa disabilitare l’unità di servizio installata dal sistema.
$ sudo systemctl stop sshd.service
$ sudo systemctl mask sshd.service
Il sistema di attivazione on-demand dei socket dei servizi classici Unix avveniva attraverso il superserver inetd (o
xinetd). Con systemd il comportamento equivalente può essere abilitato aggiungendo file di configurazione di
unità *.socket e *.service.
sshd.socket per specificare un socket su cui restare in ascolto
[Unit]
Description=SSH Socket for Per-Connection Servers
[Socket]
ListenStream=22
Accept=yes
[Install]
WantedBy=sockets.target
[Service]
ExecStart=-/usr/sbin/sshd -i
StandardInput=socket
Poi ricaricare.
$ sudo systemctl daemon-reload
Il sistema udev fornisce un meccanismo di rilevazione e inizializzazione automatiche dell’hardware (vedere udev(7))
a partire dal kernel Linux 2.6. Per ogni dispositivo rilevato dal kernel, il sistema udev avvia un processo utente che
usa le informazioni del file system sysfs (vedere Sezione 1.2.12), carica, usando il programma modprobe(8) (vedere
Sezione 3.9), i moduli del kernel necessari per il supporto del dispositivo e crea i nodi di device corrispondenti.
Debian Reference 94 / 263
Suggerimento
Se, per una qualche ragione ”/lib/modules/versione-kernel/modules.dep non viene generato in modo
appropriato dal depmod(8), i moduli non possono essere caricati come dovuto dal sistema udev. Per risolvere il
problema eseguire ”depmod -a”.
Per le regole di montaggio in ”/etc/fstab”, non è necessario che i nodi di device siano statici. Si possono usare
gli UUID per montare i dispositivi, al posto dei nomi di device come ”/dev/sda”. Vedere Sezione 9.6.3.
Dato che il sistema udev è in qualche modo in costante evoluzione, in questo documento sono fornite informazioni
base, lasciando i dettagli ad altra documentazione.
avvertimento
Non cercare di eseguire programmi con tempi di esecuzione lunghi, come script di backup con RUN in regole
udev, come detto in udev(7). Creare invece un file systemd.service(5) corretto e attivarlo. Vedere
Sezione 10.2.3.2.
Il programma modprobe(8) permette di configurare il kernel Linux in esecuzione da processi utente, aggiungendo
e rimuovendo moduli del kernel. Il sistema udev (vedere Sezione 3.8) automatizza la sua invocazione per facilitare
l’inizializzazione dei moduli del kernel.
Ci sono moduli non-hardware e speciali moduli con driver hardware, come quelli elencati in seguito, che devono
essere precaricati elencandoli nel file ”/etc/modules” (vedere modules(5)).
• moduli TUN/TAP che forniscono device virtuali di rete Point-to-Point (TUN) e device virtuali di rete Ethernet (TAP),
• moduli netfilter che forniscono funzionalità di firewall netfilter (iptables(8), Sezione 5.7 e
• moduli driver watchdog timer.
I file di configurazione per il programma modprobe(8) sono contenuti nella directory ”/etc/modprobes.d/”, come
spiegato in modprobe.conf(5). (Se si desidera evitare l’autocaricamento di alcuni moduli del kernel, considerare la
loro aggiunta nella lista nera nel file ”/etc/modprobes.d/blacklist”.)
Il file ”/lib/modules/versione/modules.dep” generato dal programma depmod(8) descrive le dipendenze dei
moduli usate dal programma modprobe(8).
Nota
Se si hanno problemi di caricamento dei moduli all’avvio o con modprobe(8), ”depmod -a” potrebbe risolverli
rigenerando il file ”modules.dep”.
Suggerimento
Si può identificare l’esatto hardware sul proprio sistema. Vedere Sezione 9.5.3.
Si può configurare l’hardware all’avvio per attivare le funzionalità dell’hardware desiderate. Vedere Sezione 9.5.4.
Si può probabilmente aggiungere il supporto per il proprio speciale dispositivo ricompilando il kernel. Vedere Se-
zione 9.10.
Debian Reference 95 / 263
Capitolo 4
Quando una persona (o un programma) richiede l’accesso al sistema, l’autenticazione verifica che l’identità sia fidata.
avvertimento
Errori di configurazione di PAM possono lasciare l’utente fuori dal proprio sistema. Si deve avere un CD di
ripristino a portata di mano o impostare una partizione di avvio alternativa. Per fare il ripristino, avviare il
sistema con uno di essi e correggere le cose da lì.
L’autenticazione Unix normale è fornita dal modulo pam_unix(8) sotto PAM (Pluggable Authentication Modules). I
suoi 3 importanti file di configurazione, con voci separate da ”:”, sono i seguenti.
Come spiegato in ”passwd(5), le voci separate da ”: in questo file hanno il significato seguente.
• Nome di login
• Voce di specificazione della password
• ID numerico dell’utente
• ID numerico del gruppo
Debian Reference 96 / 263
La seconda voce del file ”/etc/passwd” era usata per la password cifrata. Dopo l’introduzione di ”/etc/shadow”,
questa voce è usata per la specificazione della password.
contenuto significato
(vuoto) account senza password
x la password cifrata è in ”/etc/shadow”
Come spiegato in ”shadow(5), le voci separate da ”: in questo file hanno il significato seguente.
• Nome di login
• Password cifrata (I caratteri ”$1$” iniziali indicano l’uso della cifratura MD5. ”*” indica nessun login.)
• Data dell’ultimo cambiamento di password, espressa come numero di giorni trascorsi dall’1 gennaio 1970
• Numero di giorni che l’utente deve aspettare prima di essere autorizzato a cambiare nuovamente la password
• Numero di giorni trascorsi i quali l’utente dovrà cambiare la propria password
Come spiegato in ”group(5), le voci separate da ”: in questo file hanno il significato seguente.
Nota
”/etc/gshadow” fornisce funzioni simili a ”/etc/shadow” per ”/etc/group”, ma non è realmente usato.
Debian Reference 97 / 263
Nota
Può essere dinamicamente aggiunta la reale appartenenza di un utente ad un gruppo se viene aggiun-
ta la riga ”auth optional pam_group.so al file ”/etc/pam.d/common-auth” e se viene impostata in
”/etc/security/group.conf”. Vedere pam_group(8).
Nota
Il pacchetto base-passwd contiene una lista autorevole di utenti e gruppi:
”/usr/share/doc/base-passwd/users-and-groups.html”.
Quelli che seguono sono alcuni comandi degni di nota per gestire le informazioni sugli account
comando funzione
getent passwd nome_utente sfoglia le informazioni sull’account di ”nome_utente”
getent shadow nome_utente sfoglia le informazioni shadow sull’account di ”nome_utente”
getent group nome_gruppo sfoglia le informazioni sul gruppo ”nome_gruppo”
passwd gestisce la password per l’account
passwd -e imposta una password usa e getta per l’attivazione dell’account
chage gestisce le informazioni sulla scadenza della password
Può essere necessario avere i privilegi di root per far funzionare alcune di queste funzioni. Vedere crypt(3) per la
cifratura di password e dati.
Nota
Nei sistemi configurati con PAM e NSS, come la macchina Debian salsa Debian, il contenuto dei file locali
”/etc/passwd”, ”/etc/group” ed ”/etc/shadow” può non essere attivamente usato dal sistema. I coman-
di sopra descritti sono validi anche in un ambiente di questo tipo.
Quando si crea un account, durante l’installazione del sistema o con il comando passwd(1), si dovrebbe scegliere
una buona password che consiste, secondo passwd(1), di un numero di caratteri da almeno 6 a 8, incluso uno o più
caratteri da ciascuno dei seguenti insiemi.
avvertimento
Non scegliere parole indovinabili come password. Il nome dell’account, il codice fiscale, il numero di te-
lefono, l’indirizzo, il giorno del compleanno, il nome di membri della propria famiglia o di animali, parole
del dizionario, semplici sequenze di caratteri come ”12345” o ”qwerty”, … sono tutte scelte pessime come
password.
Debian Reference 98 / 263
I moderni sistemi *nix come il sistema Debian, forniscono all’amministratore di sistema i meccanismi PAM (Pluggable
Authentication Modules) e NSS (Name Service Switch) per configurare il sistema. Il ruolo di questi meccanismi può
essere riassunto nel modo seguente.
• PAM offre un meccanismo di autenticazione flessibile usato dal software applicativo e comporta pertanto scambio
di dati sulle password
• NSS offre un meccanismo di servizio dei nomi flessibile che è usato di frequente dalla libreria standard C per
ottenere i nomi di utenti e gruppi per programmi come ls(1) e id(1).
Tabella 4.5: Elenco dei pacchetti degni di nota per i sistemi PAM e NSS
Debian Reference 99 / 263
• La guida per l’amministratore di sistema di Linux-PAM, ”The Linux-PAM System Administrators’ Guide”, in libpam-doc
è essenziale per imparare la configurazione di PAM.
• La sezione ”System Databases and Name Service Switch” in glibc-doc-reference è essenziale per imparare
la configurazione di NSS.
Nota
Si può ottenere un elenco più esteso ed aggiornato usando il comando ”aptitude search
'libpam-|libnss-'”. L’acronimo NSS può anche significare ”Network Security Service” che è una cosa
diversa da ”Name Service Switch”.
Nota
PAM è il metodo più basilare per inizializzare le variabili d’ambiente per ciascun programma con valori predefiniti
a livello di sistema.
Con systemd, il pacchetto libpam-systemd viene installato per gestire il login degli utenti registrando le sessioni
utente nella gerarchia dei gruppi di controllo di systemd per logind. Vedere systemd-logind(8), logind.conf(5)
e pam_systemd(8).
Quelli che seguono sono alcuni file degni di nota letti da PAM e NSS.
Le restrizioni sulla scelta delle password sono implementate dai moduli PAM pam_unix(8) e pam_cracklib(8).
Possono essere configurati tramite i loro argomenti.
Suggerimento
I moduli PAM usano il suffisso ”.so” nei loro nomi file.
Debian Reference 100 / 263
La moderna gestione centralizzata del sistema può essere messa in atto usando il server del Protocollo LDAP (Light-
weight Directory Access Protocol) per amministrare molti sistemi *nix e non *nix in rete. L’implementazione open
source del protocollo LDAP è il software OpenLDAP.
Il server LDAP fornisce le informazioni sugli account attraverso l’uso di PAM e NSS con i pacchetti per il sistema
Debian libpam-ldap e libnss-ldap. Per abilitare ciò sono necessarie diverse azioni. (Non ho mai usato questa
configurazione e le informazioni che seguono sono di seconda mano. Tenerlo a mente quando si legge quanto segue.)
• Si configura un server LDAP centralizzato eseguendo un programma come il demone LDAP autonomo slapd(8).
• Si modificano i file di configurazione di PAM nella directory ”/etc/pam.d/” per usare ”pam_ldap.so” invece del
predefinito ”pam_unix.so”.
• Per la sicurezza delle password è necessario far sì che libpam-ldap usi una connessione SSL (o TLS).
• Per assicurare l’integrità dei dati, si può far sì che libnss-ldap usi una connessione SSL (o TLS) a prezzo di un
maggiore carico sulla rete LDAP.
• Si dovrebbe eseguire nscd(8) localmente per mettere nella cache ogni risultato di ricerche LDAP in modo da ridurre
il traffico di rete LDAP.
Questa è la famosa sezione scritta da Richard M. Stallman, alla fine della vecchia pagina ”info su. Non c’è da
preoccuparsi: l’attuale comando su in Debian usa PAM, perciò questo può limitare la possibilità di usare su verso il
gruppo root abilitando la riga con ”pam_wheel.so” in ”/etc/pam.d/su”.
Debian Reference 101 / 263
L’installazione del pacchetto libpam-cracklib permette di imporre regole più stringenti sulle password.
In un sistema GNOME tipico che installa automaticamente libpam-gnome-keyring, ”/etc/pam.d/common-password”
è simile a:
# here are the per-package modules (the "Primary" block)
password requisite pam_cracklib.so retry=3 minlen=8 difok=3
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass ←-
yescrypt
# here's the fallback if no module succeeds
password requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
password required pam_permit.so
# and here are more per-package modules (the "Additional" block)
password optional pam_gnome_keyring.so
# end of pam-auth-update config
Nota
Le informazioni fornite in questo documento potrebbero non essere sufficienti per le proprie necessità di sicu-
rezza ma dovrebbero essere un buon punto di partenza.
Molti servizi per livello di trasporto popolari comunicano i loro messaggi, compresa l’autenticazione con password,
in puro testo. È una pessima idea trasmettere password in puro testo attraverso l’Internet selvaggia dove possono
essere intercettate. Si possono eseguire questi servizi attraverso ”TLS” (Transport Layer Security, sicurezza del livello
di trasporto), o il suo predecessore ”SSL” (Secure Sockets Layer, livello per socket sicuri), per rendere sicura tramite
cifratura tutta la comunicazione, compresa la password.
La cifratura ha un costo in termini di tempo CPU. Come alternativa leggera per la CPU, si può mantenere la comunica-
zione in testo semplice, rendendo allo stesso tempo sicura la sola password con un protocollo di autenticazione sicura
come ”APOP” (Authenticated Post Office Protocol) per POP e ”CRAMD-MD5” (Challenge-Response Authentication
Mechanism MD5) per SMTP e IMAP. (Per inviare messaggi di posta elettronica via Internet dal proprio programma
Debian Reference 102 / 263
di posta al proprio server di posta è diventato popolare recentemente l’uso per SMTP della porta 587 invece della
porta tradizionale 25, per evitare il blocco da parte del fornitore del servizio Internet della porta 25 autenticandosi allo
stesso tempo con CRAM-MD5.)
Il programma Secure Shell (SSH fornisce comunicazioni sicure cifrate tra due host non fidati attraverso una rete non
sicura, grazie ad un’autenticazione sicura. Consiste del client OpenSSH, ssh(1) e del demone OpenSSH, sshd(8).
SSH può essere usato per fare da tunnel sicuro attraverso Internet per le comunicazioni con protocollo non sicuro
come POP ed X, con la funzionalità di inoltro delle porte.
Il client cerca di autenticarsi usando un’autenticazione basata sull’host, su una chiave pubblica, challenge-response
o con password. L’uso di un’autenticazione con chiave pubblica permette il login remoto senza password. Vedere
Sezione 6.3.
Anche quando si eseguono servizi sicuri, come server SSH (Secure shell) e PPTP (Point-to-Point Tunneling Protocol),
esiste sempre la possibilità di un’intrusione da Internet con attacchi basati sull’indovinare la password usando metodi
con forza bruta, ecc. L’uso di una politica di firewall (vedere Sezione 5.7) insieme agli strumenti di sicurezza elencati
in seguito, può migliorare la sicurezza generale.
Per impedire che qualcuno possa accedere alla propria macchina con privilegi di root, è necessario compiere le azioni
seguenti.
Avendo accesso fisico al disco fisso, reimpostare la password di root è relativamente semplice seguendo i passi
seguenti.
4. Modificare il file ”/etc/passwd” nella partizione root e rendere la seconda voce per l’account di root vuota.
Se si ha l’accesso in modifica alle voci di menu di GRUB (vedere Sezione 3.1.2) per grub-rescue-pc all’avvio, è
ancora più semplice, seguendo i passi seguenti.
1. Avviare il sistema con i parametri del kernel modificati in qualcosa del tipo ”root=/dev/hda6 rw init=/bin/sh”.
2. Modificare il file ”/etc/passwd” e rendere la seconda voce per l’account di root vuota.
3. Riavviare il sistema.
Si può ora accedere alla shell di root del sistema senza password.
Nota
Una volta ottenuto l’accesso alla shell di root, si ha l’accesso a qualsiasi cosa sul sistema e si può reimpostare
qualsiasi password. Inoltre, si possono compromettere le password per tutti gli account utente usando strumenti
di violazione delle password con attacchi a forza bruta, come quelli nei pacchetti john e crack (vedere Sezio-
ne 9.5.11). Queste password violate possono portare alla compromissione di altri sistemi.
L’unica soluzione software ragionevole per evitare tutte queste preoccupazioni è l’uso di una partizione root (o parti-
zione ”/etc”) cifrata, usando dm-crypt e initramfs (vedere Sezione 9.9). Tuttavia è sempre necessaria la password
per avviare il sistema.
Esistono controlli degli accessi al sistema diversi dall’autenticazione basata su password e dei permessi dei file.
Nota
Vedere Sezione 9.4.16 per limitare la funzionalità SAK (Secure Attention Key) del kernel.
Le ACL sono un sovrainsieme dei permessi regolari, come spiegato in Sezione 1.2.3.
Si trovano le ACL in funzione negli ambienti desktop moderni. Quando un dispositivo di archiviazione USB formattato
viene montato automaticamente, ad esempio come ”/media/penguin/USBSTICK”, un normale utente penguin
può eseguire:
$ cd /media/penguin
$ ls -la
total 16
drwxr-x---+ 1 root root 16 Jan 17 22:55 .
drwxr-xr-x 1 root root 28 Sep 17 19:03 ..
drwxr-xr-x 1 penguin penguin 18 Jan 6 07:05 USBSTICK
”+” in the 11th column indicates ACLs are in action. Without ACLs, a normal user penguin shouldn’t be able to list
like this since penguin isn’t in root group. You can see ACLs as:
$ getfacl .
# file: .
# owner: root
# group: root
user::rwx
Debian Reference 104 / 263
user:penguin:r-x
group::---
mask::r-x
other::---
Qui:
• ”user::rwx”, ”group::---”, e ”other::---” corrispondono ai regolari permessi per proprietario, gruppo e altri.
• La ACL ”user:penguin:r-x” permette a un normale utente penguin di avere permessi ”r-x”. Ciò ha permesso
a ”ls -la” di elencare il contenuto della directory.
• La ACL ”mask::r-x” imposta il limite in alto per i permessi.
Vedere ”Liste di controllo degli accessi POSIX in Linux”, acl(5), getfacl(1) e setfacl(1) per maggiori informazioni.
4.7.2 sudo
sudo(8) è un programma progettato per permettere ad un amministratore di sistema di dare privilegi di root limi-
tati ad utenti, e di registrare l’attività come root. sudo richiede solo la password di un utente regolare. Installa-
re il pacchetto sudo e attivarlo impostando le opzioni in ”/etc/sudoers”. Vedere esempi di configurazione in
”/usr/share/doc/sudo/examples/sudoers” e Sezione 1.1.12.
Il mio uso di sudo per un sistema con un singolo utente (vedere Sezione 1.1.12) è mirato a proteggere me stesso
dalla mia stupidità. Personalmente condidero l’uso di sudo come un’alternativa migliore all’uso costante del sistema
dall’account root. Per esempio, il comando seguente cambia il proprietario di ”un_certo_file” in ”mio_nome”.
$ sudo chown my_name some_file
Naturalmente se si conosce la password di root (come accade per ogni utente Debian che ha installato il proprio
sistema), qualsiasi comando può essere eseguito come utente root da qualsiasi account utente usando ”su -c”.
4.7.3 PolicyKit
PolicyKit è un componente del sistema operativo per controllare privilegi a livello di sistema in sistemi operativi simil-
Unix.
Le applicazioni GUI più recenti non sono pensate per essere eseguite come processi privilegiati. Per effettuare
operazioni amministrative comunicano con processi privilegiati attraverso PolicyKit.
PolicyKit limita tali operazioni agli account utente che appartengono al gruppo sudo, in sistemi Debian.
Vedere polkit(8).
Per la sicurezza del sistema è una buona idea disabilitare il maggior numero di programmi server possibile. Questo
aspetto diventa critico per i server di rete. Avere server inutilizzati, attivati direttamente come demoni o attraverso un
programma super-server, è considerato un rischio per la sicurezza.
Molti programmi, come sshd(8), usano un controllo degli accessi basato su PAM. Ci sono molti modi per limitare gli
accessi ad un qualche servizio server.
Suggerimento
I servizi Sun RPC devono essere attivi per i programmi NFS ed altri programmi basati su RPC.
Suggerimento
Se si hanno problemi con l’accesso remoto in sistemi Debian recenti, commentare la configurazione responsabile
come ”ALL: PARANOID” in ”/etc/hosts.deny”, se esiste. (Essere però consapevoli dei rischi per la sicurezza
che questo tipo di azione comporta.)
Il kernel Linux si è evoluto e gestisce funzionalità di sicurezza che non sono presenti nelle implementazioni UNIX
tradizionali.
Linux gestisce gli attributi estesi che estendono gli attributi UNIX tradizionali (vedere xattr(7)).
Linux divide i privilegi tradizionalmente associati con il superutente in unità distinte, note come capabilities(7),
che possono essere abilitate e disabilitate in modo indipendente. Le capabilities sono un attributo per singolo thread
a partire dalla versione 2.2 del kernel.
L’infrastruttura Linux Security Module (LSM) fornisce un meccanismo per vari controlli di sicurezza in modo che nuove
estensioni del kernel si aggancino ad essi. Per esempio:
• AppArmor
• Security-Enhanced Linux (SELinux)
• Smack (Simplified Mandatory Access Control Kernel)
• Tomoyo Linux
Dato che queste estensioni possono restringere il modello dei privilegi in modo più stringente delle politiche del
normale modello di sicurezza in stile Unix, anche i poteri di root possono essere ristretti. È consigliato leggere la
documentazione dell’infrastruttura Linux Security Module (LSM) su kernel.org.
Gli spazi dei nomi Linux creano un involucro (wrap) per una risorsa di sistema globale come astrazione che fa sembra-
re ai processi all’interno dello spazio dei nomi di avere una propria istanza isolata della risorsa globale. Le modifiche
alla risorsa globale sono visibile agli altri processi che sono membri dello spazio dei nomi, ma sono invisibili agli altri
processi. A partire dalla versione 5.6 del kernel, ci sono 8 tipi di spazi dei nomi (vedere namespaces(7), unshare(1),
nsenter(1)).
In Debian 11 Bullseye (2021) Debian usa la gerarchia cgroup unificata (alias cgroups-v2).
Esempi di uso di spazi dei nomi con cgroups per isolare i loro processi e permettere il controllo delle risorse sono:
Debian Reference 106 / 263
Queste funzionalità non possono essere realizzate con Sezione 4.1. Questi argomenti avanzati sono per lo più al di
fuori di questo documento introduttivo.
Debian Reference 107 / 263
Capitolo 5
Suggerimento
Per una guida moderna sull’uso della rete specifica per Debian, leggere The Debian Administrator’s Handbook —
Configuring the Network.
Suggerimento
In systemd, si può usare networkd per gestire il le reti. Vedere systemd-networkd(8).
In questa sezione viene descritta in breve l’infrastruttura base di rete in un sistema Debian moderno.
La risoluzione del nome host è attualmente supportata dal meccanismo NSS (Name Service Switch). Il flusso di
eventi nella risoluzione è il seguente.
1. Il file ”/etc/nsswitch.conf” con blocchi tipo ”hosts: files dns” detta l’ordine di risoluzione dei nomi di
host. (Questo rimpiazza la vecchia funzionalità del blocco ”order in ”/etc/host.conf”.)
2. Il metodo files è invocato per primo. Se il nome host viene trovato nel file ”/etc/hosts”, vengono restituiti
tutti gli indirizzi validi per esso e il programma termina. (Il file ”/etc/host.conf” contiene ”multi on”.)
3. Viene invocato il metodo dns. Se il nome host viene trovato dalla interrogazione al DNS (Internet Domain Name
System, sistema dei nomi di dominio Internet), identificato dal file ”/etc/resolv.conf”, vengono restituiti tutti
gli indirizzi validi per esso e il programma termina.
Una postazione di lavoro tipica può essere installata con il nome host impostato, ad esempio, come ”host_name” e il
suo nome di dominio opzionale impostato come stringa vuota. Poi, /etc/hosts” avrà l’aspetto seguente.
127.0.0.1 localhost
127.0.1.1 host_name
Il pacchetto resolvconf rendo questo file ”/etc/resolv.conf” un collegamento simbolico e gestisce il suo
contenuto con script eseguiti in automatico.
Per le postazioni PC nei tipici ambienti LAN ad hoc, il nome host può essere risolto usando il Multicast DNS (mDNS)
in aggiunta ai metodi di base con file e dns.
• Il pacchetto plugin libnss-mdns fornisce la risoluzione dei nomi host attraverso mDNS per la funzionalità GNU
Name Service Switch (NSS) della libreria C GNU (glibc).
• Il file ”/etc/nsswitch.conf” dovrebbe contenere una sezione simile a ”hosts: files mdns4_minimal [NOTFOUND
dns” (vedere /usr/share/doc/libnss-mdns/README.Debian per altre configurazioni).
• I nomi host che terminano con lo pseudo-dominio di livello più alto ”.local” vengono risolti inviando un messaggio
di interrogazione mDNS in un pacchetto UDP multicast usando l’indirizzo IPv4 ”224.0.0.251” o l’indirizzo IPv6
”FF02::FB”.
Nota
L’espansione dei gTLD (generic Top-Level Domain, domini di più alto livello generici) nel Domain Name System
(Sistema di nomi di dominio) è in corso d’opera. Fare attenzione a possibili collisioni di nomi quando si sceglie un
nome di dominio usato solamente all’interno di una LAN.
Nota
L’uso di pacchetti come libnss-resolve insieme a systemd-resolved, o libnss-myhostname, o
libnss-mymachine, con quanto corrispondente elencato nella riga ”hosts” nel file ”/etc/nsswitch.conf”
può scavalcare la configurazione di rete tradizionale discussa sopra. Vedere nss-resolve(8),
systemd-resolved(8), nss-myhostname(8) e nss-mymachines(8) per maggiori informazioni.
systemd usa ”nomi di interfacce di rete prevedibili (Predictable Network Interface Name)”, come ”enp0s25”.
Debian Reference 110 / 263
Ecco un ripasso degli intervalli di indirizzi IPv4 a 32 bit in ciascuna classe, riservati per l’uso in reti locali (LAN) dalla
rfc1918. È garantito che questi indirizzi non creino conflitti con altri indirizzi della vera e propria rete Internet.
Nota
Indirizzi IP scritti con i due punti sono indirizzi IPv6, es. ”::1” per localhost.
numero
maschera
Classe indirizzi di rete maschera di rete di
rete /bit
sottoreti
A 10.x.x.x 255.0.0.0 /8 1
B 172.16.x.x — 172.31.x.x 255.255.0.0 /16 16
C 192.168.0.x — 192.168.255.x 255.255.255.0 /24 256
Nota
Se uno di questi indirizzi viene assegnato ad un host, allora l’host non deve accedere ad Internet direttamente, ma
deve accedervi attraverso un gateway che agisca da proxy per i singoli servizi o che, in alternativa, faccia da NAT
(Network Address Translation, traduzione degli indirizzi di rete). I router a banda larga di solito agiscono da NAT
per l’ambiente LAN dell’utente finale.
Nonostante la maggior parte dei dispositivi hardware sia supportata dal sistema Debian, ci sono alcuni dispositi-
vi di rete che necessitano, per essere supportati, firmware non libero secondo la definizione nelle DFSG. Vedere
Sezione 9.10.5.
• Questi sono forniti con propri programmi per l’interfaccia utente con GUI o a riga di comando.
• Sono forniti con un proprio demone come sistema di backend.
• Permettono al proprio sistema di connettersi facilmente ad Internet.
• Permettono una facile gestione della configurazione delle reti cablate e wireless.
• Permettono di configurare la rete in modo indipendente dal datato pacchetto ifupdown.
Nota
Non usare questi strumenti di configurazione automatica della rete per server. Sono pensati principalmente per
utenti con desktop mobili su portatili.
Questi strumenti moderni di configurazione della rete devono essere configurati in modo corretto per evitare conflitti
con il datato pacchetto ifupdown e con il suo file di configurazione ”/etc/network/interfaces”.
Debian Reference 111 / 263
1. Aggiungere l’utente desktop, ad esempio pippo, al gruppo ”netdev” con il comando seguente. (In alternativa
farlo automaticamente attraverso D-bus nei moderni ambienti desktop come GNOME e KDE).
$ sudo usermod -a -G foo netdev
Nota
Solo le interfacce che non sono elencate in ”/etc/network/interfaces” sono gestite da NM, per evitare
conflitti con ifupdown.
Suggerimento
Se si desiderano estendere le capacità di configurazione della rete di NM, cercare i moduli plugin appropriati
e i pacchetti supplementari, quali network-manager-openconnect, network-manager-openvpn-gnome,
network-manager-pptp-gnome, mobile-broadband-provider-info, gnome-bluetooth, ecc.
Con systemd, la rete può essere configurata invece in /etc/systemd/network/. Vedere systemd-resolved(8),
resolved.conf(5) e systemd-networkd(8).
Ciò permette la configurazione moderna della rete senza GUI.
Una configurazione di client DHCP può essere impostata creando ”/etc/systemd/network/dhcp.network”.
Es.:
[Match]
Name=en*
[Network]
DHCP=yes
[Network]
Address=192.168.0.15/24
Gateway=192.168.0.1
Debian Reference 112 / 263
La configurazione moderna della rete per il cloud può usare i pacchetti cloud-init e netplan.io (vedere Sezio-
ne 3.7.4).
Il pacchetto netplan.io supporta systemd-networkd e NetworkManager come suoi backend di configurazione
della rete, e permette la configurazione dichiarativa della rete usando dati YAML. Quando si cambia YAML:
• eseguire il comando ”netplan generate” per generare tutta la necessaria configurazione del backend da YAML.
Una configurazione di client DHCP può essere impostata creando un file di sorgente di dati ”/etc/netplan/50-dhcp.yaml
network:
version: 2
ethernets:
all-en:
match:
name: "en*"
dhcp4: true
dhcp6: true
Una configurazione di rete statica può essere impostata creando un file di sorgente di dati ”/etc/netplan/50-static.yam
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.0.15/24
routes:
- to: default
via: 192.168.0.1
5.4.3 La configurazione moderna della rete per il cloud con Network Manager
Una configurazione di client di rete che usa l’infrastruttura Network Manager può essere impostata creando un file di
sorgente di dati ”/etc/netplan/00-network-manager.yaml”:
network:
version: 2
renderer: NetworkManager
Debian Reference 113 / 263
Per la configurazione di rete a basso livello in Linux usare i programmi iproute2 (ip(8), …) .
I comandi Iproute2 offrono funzionalità complete di configurazione della rete a basso livello. Quella che segue è una
tabella di traduzione dai comandi obsoleti di net-tools ai nuovi comandi iproute2 ecc.
Tabella 5.3: Tabella di traduzione dai comandi obsoleti net-tools ai nuovi comandi iproute2
Si possono usare i comandi a basso livello per la rete seguenti in modo sicuro dato che non cambiano la configurazione
della rete.
comando descrizione
mostra lo stato del collegamento e l’indirizzo delle interfacce
ip addr show
attive
route -n mostra tutta la tabella di instradamento in indirizzi numerici
ip route show mostra tutta la tabella di instradamento in indirizzi numerici
arp mostra l’attuale contenuto delle tabelle cache ARP
ip neigh mostra l’attuale contenuto delle tabelle cache ARP
plog mostra il registro del demone ppp
ping yahoo.com controlla la connessione Internet verso ”yahoo.com”
whois yahoo.com controlla chi ha registrato ”yahoo.com” nel database dei domini
traceroute yahoo.com traccia la connessione Internet verso ”yahoo.com”
tracepath yahoo.com traccia la connessione Internet verso ”yahoo.com”
traccia la connessione Internet verso ”yahoo.com”
mtr yahoo.com
(ripetutamente)
dig [@dns-server.com] controlla i record DNS di ”esempio.com” con
esempio.com [{a|mx|any}] ”dns-server.com” alla ricerca di un record ”a”, ”mx” o ”any”
iptables -L -n controlla il filtraggio dei pacchetti
netstat -a trova tutte le porte aperte
netstat -l --inet trova le porte in ascolto
netstat -ln --tcp trova le porte (numeriche) TCP in ascolto
dlint esempio.com controlla le informazioni DNS di zona per ”esempio.com”
Suggerimento
Alcuni di questi strumenti di configurazione di basso livello della rete sono contenuti in ”/usr/sbin/”. Potreb-
be essere necessario fornire il percorso completo dei comandi, come ”/usr/sbin/ifconfig” o aggiungere
”/usr/sbin” all’elenco in ”$PATH” nel proprio file ”~/.bashrc”.
L’ottimizzazione generale della rete va oltre gli scopi che questo documento si prefigge. Vengono trattati solo quegli
argomenti che interessano le connessioni dei computer personali.
Questo processo si chiama ”Path MTU (PMTU) discovery (RFC1191) e il comado tracepath(8) può automatizzarlo.
• Qualsiasi uso di metodi di tunnelling (VPN, ecc.) può ridurre ulteriormente l’MTU ottimale per il loro carico.
• Il valore di MTU non dovrebbe superare il valore di PMTU determinato sperimentalmente.
• A patto di seguire le indicazioni precedenti un valore maggiore di MTU è meglio.
Il valore di MSS (Maximum Segment Size, dimensione massima di segmento)MSS è usato come misura alternativa
della dimensione dei pacchetti. Le relazioni tra MSS e MTU sono le seguenti.
Nota
L’ottimizzazione basata su iptables(8) (vedere Sezione 5.7) può bloccare la dimensione dei pacchetti al valore
MSS ed è utile per il router. Vedere ”TCPMSS” in iptables(8).
Il flusso TCP può essere massimizzato regolando i parametri di dimensione del buffer TCP come descritto in ”TCP
tuning” per le moderne WAN a larga banda e alta latenza. Per adesso, le attuali impostazioni predefinite di Debian
funzionano bene persino per la mia LAN connessa con un servizio FTTP veloce a 1G bps.
Netfilter fornisce un’infrastruttura per firewall con stati e traduzione di indirizzi di rete (NAT) con moduli del kernel
Linux (vedere Sezione 3.9).
Il principale programma in spazio utente di netfilter è iptables(8). Si può configurare manualmente netfilter in
modo interattivo dalla shell, salvare il suo stato con iptables-save(8) e ripristinarlo attraverso uno script di init con
iptables-restore(8) al riavvio del sistema.
Script di aiuto per la configurazione come shorewall facilitano questo processo.
Vedere la documentazione in Netfilter Documentation (o in ”/usr/share/doc/iptables/html/”).
Debian Reference 116 / 263
Suggerimento
Anche se questi documenti sono stati scritti per Linux 2.4, sia il comando iptables(8) sia la funzione netfilter del
kernel sono validi per gli attuali kernel Linux 2.6 e 3.x.
Debian Reference 118 / 263
Capitolo 6
Dopo aver stabilito la connessione di rete (vedere Capitolo 5), si possono eseguire svariate applicazioni per la rete.
Suggerimento
Per una guida moderna sull’infrastruttura di rete specifica per Debian leggere The Debian Administrator’s Handbook
— Network Infrastructure.
Suggerimento
Se si abilita la ”Verifica in 2 passaggi” con alcuni ISP è necessario ottenere una password di applicazione per
accedere ai servizi POP e SMTP dal proprio programma. Può essere necessario approvare l’IP del proprio host in
anticipo.
Ci sono molti pacchetti per browser web per accedere a contenuti remoti tramite HTTP (Hypertext Transfer Protocol).
Per potere accedere ad alcuni siti web eccessivamente restrittivi si può dover falsificare la stringa User-Agent restituita
dal programma del browser web. Vedere:
• Come cambiare l’User Agent del proprio browser senza installare alcuna estensione
• Come cambiare l’User Agent in Gnome Web (epiphany)
Attenzione
La stringa user-agent falsificata può causare dei brutti effetti collaterali con Java.
Tutti i browser con GUI moderni supportano estensioni per il browser basate su codice sorgente e ciò sta diventando
standardizzato come estensioni web.
Questa sezione si focalizza su tipiche postazioni di lavoro mobile con connessioni Internet di largo consumo.
Attenzione
Se si desidera impostare il server di posta per scambiare la posta direttamente con Internet, si dovrebbe
leggere una documentazione più dettagliata di questo documentazione base.
Un messaggio email è formato da tre componenti: la busta del messaggio, l’intestazione del messaggio e il corpo del
messaggio.
• Le informazioni ”To” e ”From” nella busta del messaggio vengono usate dall’SMTP per consegnare l’email. (L’infor-
mazione ”From” nella busta del messaggio è anche chiamata indirizzo di bounce, From_, ecc.)
• Le informazioni ”To” e ”From” nell’intestazione del messaggio vengono visualizzate dal programma di posta. (Ben-
ché nella maggior parte dei casi questi sono identici a quelli nella busta del messaggio, può non essere sempre
così.)
• Il formato dei messaggi di email che copre i dati nell’intestazione e nel corpo è esteso da MIME (Multipurpose
Internet Mail Extensions) dal semplice testo ASCII ad altre codifiche di caratteri, oltre ad allegati per audio, video,
immagini e programmi applicativi.
Debian Reference 120 / 263
I programmi di posta completi basati su GUI offrono tutte le funzioni seguenti utilizzando una configurazione intuitiva
basata su GUI.
• Creano e interpretano i dati nell’intestazione e nel corpo del messaggio usando MIME (Multipurpose Internet Mail
Extensions) per gestire il tipo di dati e la codifica del contenuto.
• Si autenticano con i server SMTP e IMAP dell’ISP usando la vecchia autenticazione di accesso di base o la moderna
OAuth 2.0. (Per OAuth 2.0, impostarla attraverso le impostazioni dell’ambiente desktop. Ad esempio ”Impostazioni”
-> ”Account online”.)
• Inviano i messaggi al server smarthost SMTP dell’ISP in ascolto per l’arrivo dei messaggi sulla porta (587).
• Ricevono i messaggi memorizzati sul server dell’ISP dalla porta TLS/IMAP4 (993).
• Possono filtrare la posta in base ai suoi attributi.
• Possono offrire funzionalità aggiuntive: contatti, calendario, attività, promemoria.
Ai servizi di posta moderni vengono applicate alcune restrizioni al fine di minimizzare l’esposizione ai problemi di
spam (posta non desiderata e non richiesta).
• Eseguire un server SMTP su una rete di un utente privato per inviare posta in modo diretto ad host remoti in modo
affidabile non è un’ipotesi realistica.
• Un messaggio di posta può essere rifiutato in modo silenzioso da qualsiasi host sul percorso verso la destinazione,
a meno che non appaia il più autentico possibile.
• Non è realistico attendersi che un singolo smarthost invii messaggi di indirizzi di posta di origine non correlati ad
host remoti in modo affidabile.
Questo perché:
• Le connessioni alla porta SMTP (25) da host serviti dalla connessione alla rete Internet per normali consumatori
sono bloccate.
• Le connessioni alla porta SMTP (25) verso host serviti dalla connessione alla rete Internet per normali consumatori
sono bloccate.
• I messaggi in uscita da host serviti dalla connessione alla rete Internet per normali consumatori possono essere
inviati solamente attraverso la porta di invio dei messaggi (587).
• Tecniche anti-spam come DKIM (DomainKeys Identified Mail) e SPF (Sender_Policy_Framework) e DMARC (Domain-
based Message Authentication, Reporting and Conformance) sono usate di frequente per il filtraggio delle email.
• Il servizio DomainKeys Identified Mail può essere fornito per la propria posta inviata attraverso uno smarthost.
• Lo smarthost può riscrivere l’indirizzo di posta dell’origine nell’intestazione del messaggio con l’account di posta
dell’utente sullo smarthost per evitare la falsificazione dell’indirizzo email.
Debian Reference 121 / 263
Alcuni programmi in Debian si aspettano, come impostazione predefinita o personalizzata, di accedere al comando
/usr/sbin/sendmail per inviare email dato che il servizio di posta in un sistema UNIX storicamente funzionava
così:
Le macchine Debian portatili possono essere configurate semplicemente con programmi di posta completi con GUI
senza un programma MTA (agente di trasferimento posta) a partire da Debian 12 Bookworm.
Debian tradizionalmente installava un programma MTA per supportare i programmi che si aspettano il comando
/usr/sbin/sendmail. Un tale MTA in una macchina portatile deve vedersela con Sezione 6.2.2 e Sezione 6.2.3.
Per le postazioni di lavoro mobile, la scelta tipica per un MTA è exim4-daemon-light o postfix con selezionata
la loro opzione di installazione tipo ”Mail inviata via smarthost; ricevuta con SMTP o fetchmail”. Questi sono MTA
leggeri che rispettano ”/etc/aliases”.
Suggerimento
Configurare exim4 per inviare la posta Internet usando smarthost multipli che corrispondono a indirizzi email di
origine multipli non è banale. Se è necessaria questa funzionalità per alcuni programmi, impostarli per utilizzare
msmtp che è facile da configurare per indirizzi email di origine multipli. Poi lasciare l’MTA principale solo per un
singolo indirizzo email.
Per la posta di Internet attraverso uno smarthost, riconfigurare i pacchetti exim4-* nel modo seguente.
$ sudo systemctl stop exim4
$ sudo dpkg-reconfigure exim4-config
Selezionare ”posta inviata tramite «uno smarthost», ricevuta via SMTP o fetchmail” per ”Tipo di configurazione del
sistema di posta”.
Impostare ”Mail name del sistema:” al suo valore predefinito come FQDN (vedere Sezione 5.1.1).
Impostare ”indirizzi IP sui quali attendere connessioni SMTP in ingresso:” al suo valore predefinito ”127.0.0.1 ; ::1”.
Svuotare il contenuto di ”Altre destinazioni per conto delle quali accettare posta:”.
Svuotare il contenuto di ”Sistemi per i quali fare il ”relay”:”.
Impostare l’”Indirizzo IP o nome host dello smarthost per la posta in uscita:” a ”smtp.hostname.dom:587”.
Selezionare ”No” per ”Omettere il mail name locale dai messaggi in uscita?”. (Usare invece ”/etc/email-addresses”
come in Sezione 6.2.4.3.)
Rispondere a ”Mantenere al minimo il numero di richieste DNS (Dial-on-Demand)?” in uno dei modi seguenti.
Debian Reference 122 / 263
Tabella 6.3: Elenco di pacchetti base relativi ai server di trasporto della posta
Debian Reference 123 / 263
Il nome host in ”/etc/exim4/passwd.client” non dovrebbe essere l’alias. Si può controllare il vero nome host
nel modo seguente.
$ host smtp.hostname.dom
smtp.hostname.dom is an alias for smtp99.hostname.dom.
smtp99.hostname.dom has address 123.234.123.89
Per aggirare il problema degli alias, io uso espressioni regolari nel file ”/etc/exim4/passwd.client” SMTP AUTH
probabilmente funziona anche se il fornitore di servizi Internte sposta l’host a cui punta l’alias.
Si può aggiornare manualmente la configurazione di exim4 facendo quanto segue:
Attenzione
Se si è scelta la ripsosta ”No” (risposta predefinita) per la domanda di debconf ”Mantenere al minino il
numero di richieste DNS (Dial-on-Demand)?” ed il sistema non è connesso ad Internet, l’avvio di exim4
può richiedere un tempo molto lungo.
avvertimento
In base a tutte le considerazioni pratiche, usare SMTP con STARTTLS sulla porta 587 o SMTPS (SMTP via
SSL) sulla porta 465, invece del semplice SMTP sulla porta 25.
Debian Reference 124 / 263
comando funzione
postfix(1) programma di controllo di Postfix
postconf(1) utilità di configurazione per Postfix
postconf(5) parametri di configurazione di Postfix
postmap(1) gestione delle tabelle di consultazione di Postfix
postalias(1) gestione del database degli alias di Postfix
Per la posta Internet via smarthost, si dovrebbe come prima cosa leggere la documentazione di Postfix e le pagine
man principali.
Si possono (ri)configurare i pacchetti postfix e sasl2-bin nel modo seguente.
$ sudo systemctl stop postfix
$ sudo dpkg-reconfigure postfix
In questo caso l’uso di ”[” e ”]” nel dialogo di dpkg-reconfigure e in ”/etc/postfix/sasl_passwd” assocura
che non venga controllato il record MX, ma usato direttamente l’esatto nome host specificato. Vedere ”Abilitare
l’autenticazione SASL nel client SMTP di Postfix” in ”/usr/share/doc/postfix/html/SASL_README.html”.
Ci sono diversi file di configurazione dell’indirizzo di posta per gli strumenti di trasporto della posta, di consegna e per
i programma di posta.
Il nomeposta nel file ”/etc/mailname” è solitamente un nome di dominio pienamente qualificato (FQDN) che è
risolto ad uno degli indirizzi IP dell’host. Per le postazioni mobili che non hanno un nome host con un indirizzo IP
risolvibile, impostare questo nomemail al valore di ”hostname -f”. (Questa è una scelta sicura e funziona sia per
exim4-* sia per postfix.)
Suggerimento
Il contenuto di ”/etc/mailname” è usato da molti programmi non MTA per determinare il loro comportamento
predefinito. Per mutt, impostare le variabili ”hostname” e from” nel file ~/muttrc per sovrascrivere il valore di
mailname. Per i programmi nel pacchetto devscripts, come bts(1) e dch(1), esportare le variabili d’ambiente
”$DEBFULLNAME” e ”$DEBEMAIL” per sovrascriverlo.
Debian Reference 125 / 263
Suggerimento
Il pacchetto popularity-contest normalmente invia posta dall’account di root con FQDN. È
necessario impostare MAILFROM in /etc/popularity-contest.conf come descritto nel file
/usr/share/popularity-contest/default.conf. In caso contrario la posta verrà rigettata dal server
SMTP dello smarthost. Sebbene sia una scocciatura, questo approccio è più sicuro della riscrittura dell’indirizzo
sorgente di tutta la posta di root da parte dell’MTA e dovrebbe essere usato per altri demoni e script cron.
Qunado si imposta mailname al valore di ”hostname -f”, la modifica dell’indirizzo di posta d’origine con il MTA può
essere fatta nel modo seguente.
Suggerimento
Exim viene fornito con svariati programmi di utilità, come exiqgrep(8) e exipick(8). Per conoscere i comandi
disponibili vedere ”dpkg -L exim4-base|grep man8/”.
Ci sono svariate operazioni di base degli MTA. Alcune possono essere fatte usando l’interfaccia di compatibilità con
sendmail(1).
Suggerimento
Può essere una buona idea far inviare tutta la posta da uno script in ”/etc/ppp/ip-up.d/*”.
Debian Reference 126 / 263
SSH (Secure SHell) è il metodo sicuro per connettersi in Internet. Una versione libera di SSH chiamata OpenSSH è
disponibile nei pacchetti Debian openssh-client e openssh-server.
Per l’utente ssh(1) funziona come un telnet(1) più intelligente e più sicuro. A differenza del comando telnet, ssh
non si interrompe a seguito del carattere di escape di telnet (impostazione predefinita iniziale CTRL-]).
Tabella 6.7: Elenco dei server e delle utilità per l’accesso remoto
Sebbene shellinabox non sia un programma SSH, è elencato qui come alternativa interessante per l’accesso
remoto a terminale.
Vedere anche Sezione 7.9 per le connessioni a programmi client X remoti.
Attenzione
Se il proprio SSH è accessibile da Internet, vedere Sezione 4.6.3.
Debian Reference 127 / 263
Suggerimento
Per permettere al processo della shell remota di sopravvivere all’interruzione della connessione, usare il program-
ma screen(1) (vedere Sezione 9.1.2).
avvertimento
Se si desidera eseguire il server OpenSSH, non deve esistere il file ”/etc/ssh/sshd_not_to_be_run”.
Non abilitare l’autenticazione basata su rhost (HostbasedAuthentication in
/etc/ssh/sshd_config).
comando descrizione
ssh
connette nella modalità predefinita
[email protected]
ssh -v
connette nella modalità predefinita con messaggi di debug
[email protected]
ssh -o
PreferredAuthentications=password forza l’uso di password con SSH versione 2
[email protected]
ssh -t
esegue il programma passwd per aggiornare la password su un
[email protected]
host remoto
passwd
Se si usa lo stesso nome utente sull’host locale e su quello remoto, si può evitare di digitare ”nomeutente@”.
Debian Reference 128 / 263
Anche se si usa un nome utente diverso nell’host locale rispetto a quello remoto, si può evitare di digitare quel-
la parte usando ”~/.ssh/config”. Per il servizio Debian Salsa con nome account ”pippo-guest”, impostare
”~/.ssh/config” in modo che contenga quanto segue.
Host salsa.debian.org people.debian.org
User foo-guest
Si può evitare di doversi ricordare le password per sistemi remoti usando ”PubkeyAuthentication” (protocollo
SSH-2).
Sul sistema remoto impostare in ”/etc/ssh/sshd_config” le rispettive voci ”PubkeyAuthentication yes”.
Generare localmente le chiavi di autenticazione ed installare la chiave pubblica sul sistema remoto con i comandi
seguenti.
$ ssh-keygen -t rsa
$ cat .ssh/id_rsa.pub | ssh user1@remote "cat - >>.ssh/authorized_keys"
Si possono aggiungere opzioni alle voci in ”~/.ssh/authorized_keys” per limitare gli host e per eseguire comandi
specifici. Vedere ”AUTHORIZED_KEYS FILE FORMAT” in sshd(8).
È meglio per ragioni di sicurezza proteggere la propria chiave segreta di autenticazione SSH con una passphrase.
Se non è già stata impostata una passphrase usare ”ssh-keygen -p” per farlo.
Mettere la propria chiav SSH pubblica (ad esempio ”~/.ssh/id_rsa.pub”) in ”~/.ssh/authorized_keys” su
un host remoto usando una connessione all’host remoto basata su password, come descritto in precedenza.
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/username/.ssh/id_rsa:
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
Per il comando successivo non sarà più necessaria da questo momento la password remota.
$ scp foo [email protected]:foo
Se si ha un account di shell SSH su un server con impostazioni DNS appropriate, si può inviare un messaggio di
posta generato sulla propria postazione di lavoro come email genuinamente inviata dal server remoto.
$ ssh [email protected] /usr/sbin/sendmail -bm -ti -f "[email protected]" < mail_data ←-
.txt
Per stabilire una pipe per connettersi alla porta 25 del server-remoto dalla porta 4025 dell’host locale e al-
la porta 110 del server-remoto dalla porta 4110 dell’host locale attraverso ssh, eseguire sull’host locale il
comando seguente.
# ssh -q -L 4025:remote-server:25 4110:remote-server:110 username@remote-server
Questo è un metodo sicuro di creare connessioni a server SMTP/POP3 in Internet. Impostare nel file ”/etc/ssh/sshd_conf
dell’host remoto la voce ”AllowTcpForwarding” a ”yes”.
È necessario proteggere il processo che esegue ”shutdown -h now” (vedere Sezione 1.1.8) dalla terminazione di
SSH usando il comando at(1) (vedere Sezione 9.4.13) nel modo seguente.
# echo "shutdown -h now" | at now
Eseguire ”shutdown -h now” in una sessione screen(1) (vedere Sezione 9.1.2) è un altro modo di ottenere lo
stesso risultato.
Se si hanno problemi, controllare i permessi dei file di configurazione ed eseguire ssh con l’opzione ”-v”.
Se si è root e si hanno problemi con un firewall usare l’opzione ”-p”; questo evita l’uso delle porte 1 - 1023 del server.
Se le connessioni ssh ad un sito remoto smettono di funzionare improvvisamente, potrebbe essere a causa di modifi-
che fatte dall’amministratore di sistema, molto probabilmente cambiamenti in ”host-key” durante l’amministrazione
del sistema. Dopo essersi accertati che questa sia davvero la causa e che nessuna stia cercando di falsificare
l’host remoto con qualche trucchetto, si può riottenere una connessione rimuovendo la voce ”host-key” dal file
”~/.ssh/known_hosts” sull’host locale.
Nei vecchi sistemi in stile Unix, il demone di stampa in linea (lpd) BSD era lo standard e il formato di stampa standard
del software libero classico era PostScript (PS). Un sistema di filtri veniva usato insieme a Ghostscript per permettere
la stampa su stampanti non-PostScript. Vedere Sezione 11.4.1.
Nei sistemi Debian moderni, Common UNIX Printing System (CUPS) è lo standard di fatto e il formato standard per
la stampa nel software libero moderno è Portable Document Format (PDF).
CUPS usa il protocollo IPP (Internet Printing Protocol). IPP è ora supportato da altri sistemi operativi come Windows
XP e Mac OS X ed è diventato il nuovo standard di fatto multipiattaforma per la stampa da remoto con capacità di
comunicazione bidirezionale.
Debian Reference 130 / 263
Grazie alla funzionalità di auto-conversione in base al formato dei file del sistema CUPS, il semplice passaggio di
qualsiasi tipo di dati al comando lpr dovrebbe generare l’output di stampa atteso. (In CUPS, il comando lpr può
essere abilitato installando il pacchetto cups-bsd.)
Il sistema Debian ha alcuni pacchetti degni di nota per ciò che riguarda i server e le utilità di stampa
Suggerimento
Si può configurare il sistema CUPS indirizzando il proprio browser web all’indirizzo ”http://localhost:631/”.
CIFS (Common Internet File System Protocol) è lo stesso protocollo di SMB (Server Message Block) ed è ampiamente
usato da Microsoft Windows.
Suggerimento
Vedere Sezione 4.5.2 per l’integrazione di sistemi server.
Debian Reference 131 / 263
Suggerimento
La risoluzione del nome di host è solitamente fornita dal server DNS. Per l’indirizzo IP dell’host assegnato dina-
micamente da DHCP, può essere impostato un DNS dinamico per la risoluzione del nome host, usando bind9 e
isc-dhcp-server come descritto nella pagina del Wiki Debian sui DDNS.
Suggerimento
L’uso di server proxy come squid è molti più efficiente per risparmiare banda rispetto all’uso di server mirror locali
con il completo contenuto dell’archivio Debian.
Per testare il servizio POP3 con TLS/SSL abilitato di alcuni fornitori di servizi Internet, è necessario un client telnet
con TLS/SSL abilitato fornito dal pacchdetto telnet-ssl o openssl.
$ telnet -z ssl pop.gmail.com 995
RFC descrizione
rfc1939 e rfc2449 servzio POP3
rfc3501 servizio IMAP4
rfc2821 (rfc821) servizio SMTP
rfc2822 (rfc822) formato file di posta
rfc2045 MIME (Multipurpose Internet Mail Extensions)
rfc819 servizio DNS
rfc2616 servizio HTTP
rfc2396 definizione di URI
Capitolo 7
Sistema GUI
Ci sono diverse scelte di ambienti desktop GUI completi nel sistema Debian.
Suggerimento
I pacchetti di dipendenza selezionati da un metapacchetto per task possono essere fuori sincrono rispetto al più
recente stato di transizione nell’ambiente Debian unstable/testing. Per task-gnome-desktop, può essere
necessario aggiustare la selezione dei pacchetti come segue:
• Aggiustare i pacchetti selezionati abbandonando quelli problematici che causano conflitti tra i pacchetti.
• Premere ”g” per iniziare l’installazione.
Questo capitolo si concentrerà soprattutto sull’ambiente desktop predefinito in Debian: task-gnome-desktop che
fornisce GNOME su wayland.
Il protocollo di comunicazione della GUI usato nel desktop GNOME può essere:
Controllare sul sito freedesktop.org in cosa l’architettura Wayland è differente dall’architettura X Window.
Dal punto di vista dell’utente le differenze possono essere a grandi linee riassunte in:
• Wayland è un protocollo di comunicazione GUI per unico host: nuovo, più semplice, più veloce, senza binario con
setuid root
• X Window è un protocollo di comunicazione GUI con funzionalità di rete: tradizionale, complesso, più lento, con
binario con setuid root
Per le applicazioni che usano il protocollo Wayland, l’accesso al contenuto delle loro schermata da un host remoto è
supportato da VNC o RDP. Vedere Sezione 7.8.
I server X moderni hanno l’estensione MIT Shared Memory e comunicano con i loro client X locali usando la memoria
condivisa locale. Ciò scavalca il canale di comunicazione tra i processi Xlib trasparente alla rete e fa guadagna-
re in prestazioni. Questa situazione è stata il punto di partenza per la creazione di Wayland come protocollo di
comunicazione GUI solo locale.
Usando il programma xeyes avviato dal terminale GNOME si può controllare il protocollo di comunicazione GUI
usato da ciascuna applicazione GUI.
$ xeyes
Debian Reference 135 / 263
• Se il cursore del mouse è su un’applicazione come ”Terminale di GNOME”, che usa il protocollo per display server
Wayland, gli occhi non si muovono con il movimento del cursore.
• Se il cursore del mouse è su un’applicazione come ”xterm”, che usa il protocollo base del sistema X Window, gli
occhi si muovono insieme al cursore del mouse rendendo evidente la natura non-così-isolata di un’architettura X
Window.
Alla data di aprile 2021 molte popolari applicazioni GUI come GNOME e le applicazioni LibreOffice (LO) sono migrate
al protocollo per display server Wayland. L’autore nota come xterm, gitk, chromium, firefox, gimp, dia e tutte
le applicazioni KDE usino ancora il protocollo di base del sistema X Window.
Nota
Sia per xwayland in Wayland che per il sistema X Window nativo, il vecchio file di configurazione del server X
”/etc/X11/xorg.conf” non dovrebbe esistere sul sistema. I dispositivi grafici e di input sono ora configurati dal
kernel con DRM, KMS e udev. Il server X nativo è stato riscritto per usarli. Vedere ”supporto modedb predefinito
delle modalità video” nella documentazione del kernel Linux.
Questi sono pacchetti degni di nota dell’infrastruttura GUI per l’ambiente GNOME su Wayland.
dimensione
del
pacchetto popcon pac- descrizione
chet-
to
mutter V:1, I:60 187 Il gestore di finestre mutter di GNOME [auto]
xwayland V:240, I:319 2388 Un server X in esecuzione sopra a wayland [auto]
gnome-remote-desktop Demone per desktop remoto per GNOME che usa PipeWire
V:35, I:221 1068
[auto]
gnome-tweaks V:21, I:229 1170 Impostazioni avanzate di configurazione per GNOME
gnome-shell-extension-prefs Strumenti per abilitare/disabilitare le estensioni per GNOME
V:13, I:213 60
Shell
Qui ”[auto]” significa che questi pacchetti sono installati automaticamente quando viene installato task-gnome-desktop.
Suggerimento
gnome-tweaks è l’indispensabile utilità di configurazione. Per esempio:
• Si può forzare la ”sovra-amplificazione” del volume dell’audio da ”Generale”.
• Si può forzare ”Maiusc” a diventare ”Esc” da ”Tastiera e mouse” -> ”Tastiera” -> ”Opzioni aggiuntive disposizione”.
Suggerimento
I dettagli delle funzionalità dell’ambiente desktop GNOME possono essere configurati con utilità avviate digitando
”settings”, ”tweaks” o ”extensions” dopo aver premuto il tasto Super.
Debian Reference 136 / 263
In Debian sono ora disponibili molte utili applicazioni GUI. L’installazione di pacchetti software come scribus (KDE)
nell’ambiente desktop GNOME è piuttosto accettabile dato che le funzionalità corrispondenti non sono disponibili nel
desktop GNOME. Tuttavia l’installazione di troppi pacchetti con funzionalità duplicate può rendere il sistema affollato.
Ecco un elenco di applicazioni GUI che hanno attirato la mia attenzione.
I nomi predefiniti per le directory dell’utente, come ”~/Desktop”, ”~/Documenti”, ..., usate dagli ambienti desktop
dipendono dalla localizzazione usata per l’installazione del sistema. Possono essere reimpostate a quelle in inglese
usando:
$ LANGUAGE=C xdg-user-dirs-update --force
Poi si spostano manualmente tutti i dati nelle nuove directory. Vedere xdg-user-dirs-update(1).
È anche possibile impostarle manualmente a qualsiasi nome modificando ”~/.config/user-dirs.dirs”. Vedere
user-dirs.dirs(5).
In Debian sono a disposizione degli utenti molti tipi di carattere utili scalabili. La preoccupazione per l’utente è come
evitare ridondanze e come configurare la disabilitazione di parte dei tipi di carattere installati. Altrimenti scelte di tipi
di carattere inutili possono ingombrare i menu delle applicazioni GUI.
Il sistema Debia usa la libreria FreeType 2.0 per rasterizzare molti formati di tipi di carattere scalabili per lo schermo
e la stampa:
• Tipi di carattere Type 1 (PostScript) che usano curve di Bézier cubiche (formato quasi obsoleto)
• Tipi di carattere TrueType che usano curve di Bézier quadratiche (buona scelta di formato)
• Tipi di carattere OpenType che usano curve di Bézier cubiche (migliora scelta per il formato)
La tabella seguente è compilata nella speranza che aiuti gli utenti a scegliere i tipi di carattere scalabili appropriati
con una chiara idea della compatibilità delle metriche e delle coperture dei glifi. La maggior parte dei tipi di carattere
copre tutti i caratteri latini, greci e cirillici. La scelta finale dei tipi di carattere da attivare può anche essere influenzata
da gusti estetici personali. Questi tipi di carattere possono essere usati per la visualizzazione a schermo o per la
stampa su carta.
Qui:
• ”MCM” sta per ”Metrica Compatibile con tipi di carattere forniti da Microsoft”
• ”MCMATC” sta per ”Metrica Compatibile con tipi di carattere forniti da Microsoft: Arial, Times New Roman, Courier
New”
• ”MCAHTC” sta per ”Metrica Compatibile con tipi di carattere forniti da Adobe: Helvetica, Times, Courier”
• I numeri nelle colonne del tipo di carattere rappresentano la larghezza ”M” approssimata relativa per il carattere alla
stessa dimensione di punto.
Debian Reference 137 / 263
dimensione
del
pacchetto popcon pac- tipo descrizione
chet-
to
gestione di informazioni personali (groupware e
evolution V:30, I:239 486 GNOME
posta elettronica)
thunderbird V:48, I:119 224760 GTK programma di posta (Mozilla Thunderbird)
gestione di informazioni personali (groupware e
kontact V:1, I:12 2208 KDE
posta elettronica)
libreoffice-writer
V:117, I:435 31474 LO elaboratore di testi
abiword V:1, I:8 3542 GNOME elaboratore di testi
calligrawords V:0, I:7 6097 KDE elaboratore di testi
editor per desktop publishing per modificare file
scribus V:1, I:16 31345 KDE
PDF
glabels V:0, I:3 1338 GNOME editor di etichette
libreoffice-calc
V:111, I:432 26009 LO foglio di calcolo
gnumeric V:4, I:14 9910 GNOME foglio di calcolo
calligrasheets V:0, I:5 11396 KDE foglio di calcolo
libreoffice-impress
V:69, I:429 2646 LO presentazioni
calligrastage V:0, I:5 5339 KDE presentazioni
libreoffice-base
V:26, I:121 5003 LO gestione di database
kexi V:0, I:1 7118 KDE gestione di database
libreoffice-draw
V:72, I:430 10312 LO editor di grafica vettoriale (draw)
inkscape V:15, I:112 99800 GNOME editor di grafica vettoriale (draw)
karbon V:0, I:6 3610 KDE editor di grafica vettoriale (draw)
dia V:2, I:22 3741 GTK editor di grafi e diagrammi di flusso
gimp V:50, I:252 19304 GTK editor di grafica bitmap (paint)
shotwell V:17, I:255 6263 GTK organizzatore di foto digitali
digikam V:1, I:9 293 KDE organizzatore di foto digitali
darktable V:4, I:13 30554 GTK tavolo luminoso e camera oscura per fotografi
planner V:0, I:4 1394 GNOME gestione progetti
calligraplan V:0, I:2 19013 KDE gestione progetti
gnucash V:2, I:8 28928 GNOME contabilità personale
homebank V:0, I:2 1218 GTK contabilità personale
lilypond V:0, I:7 16092 - impaginatore di musica
kmymoney V:0, I:2 13937 KDE contabilità personale
applicazione
librecad V:1, I:15 8963 sistema CAD (Computer-Aided Design) (2D)
Qt
applicazione
freecad I:18 36 sistema CAD (Computer-Aided Design) (3D)
Qt
sofware per progettazione di schemi elettronici e
kicad V:3, I:14 236461 GTK
PCB
xsane V:12, I:144 2339 GTK frontend per lo scanner
libreoffice-math
V:51, I:432 1898 LO editor di equazioni matematiche e formule
convertitore e gestione di una biblioteca per libri
calibre V:6, I:28 63385 KDE
elettronici
fbreader V:1, I:9 3783 GTK Lettori di ebook
evince V:92, I:314 941 GNOME visualizzatore di documenti (pdf)
okular V:40, I:123 17728 KDE visualizzatore di documenti (pdf)
applicazione
x11-apps V:31, I:463 2460 xeyes(1), ecc.
X pura
V:192, applicazione
x11-utils 651 xev(1), xwininfo(1), ecc.
I:566 X pura
senza
pacchetto popcon dimensione con grazie monospazio nota sul carattere
grazie
V:216, Cantarell (GNOME 3,
fonts-cantarell 572 59 - -
I:306 visualizzazione)
Tipi di carattere Noto
fonts-noto I:153 31 61 63 40 (Google, multi-lingua
con CJK)
DejaVu (GNOME 2,
fonts-dejavu I:421 35 58 68 40 MCM:Verdana,
Bitstream Vera esteso)
Tipi di carattere
V:130, Liberation per
fonts-liberation2 15 56 60 40
I:427 LibreOffice (Red Hat,
MCMATC)
Chrome OS: Arimo,
fonts-croscore V:20, I:40 5274 56 60 40 Tinos e Cousine
(Google, MCMATC)
fonts-crosextra- Chrome OS: Carlito
V:21, I:131 2696 57 - -
carlito (Google, MCM:Calibri )
Chrome OS: Caladea
fonts-crosextra-
I:128 347 - 55 - (Google, MCM:Cambria
caladea
) (solo latini)
GNU FreeFont (URW
fonts-freefont-ttf V:76, I:218 14460 57 59 40
Nimbus esteso)
Quicksand del
V:123, task-desktop Debian
fonts-quicksand 392 56 - -
I:438 (visualizzazione, solo
latini)
Un carattere progettato
fonts-hack V:24, I:120 2508 - - 40 P per il codice sorgente,
Hack (Facebook)
fonts-sil-
I:32 14345 - 54 - Gentium SIL
gentiumplus
fonts-sil-charis I:27 6704 - 59 - Charis SIL
URW Nimbus (Nimbus
V:167,
fonts-urw-base35 15560 56 60 40 Sans, Roman No. 9 L,
I:472
Mono L, MCAHTC)
Tipi di carattere Ubuntu
fonts-ubuntu V:2, I:5 4339 58 - 33 P
(visualizzazione)
Bei tipi di carattere per
fonts-terminus V:0, I:3 452 - - 33
terminale retrò
Scaricatore per tipi di
ttf-mscorefonts- carattere non liberi di
V:1, I:49 85 56? 60 40
installer Microsoft (vedere più
sotto)
• ”P” nelle colonne dei tipi di carattere mono a spaziatura fissa rappresenta l’usabilità per la programmazione grazie
a ”0”/”O” e ”1”/”I”/”l” chiaramente distinguibili.
• Il pacchetto ttf-mscorefonts-installer scarica i ”Tipi di carattere principali per il Web” di Microsoft e installa
Arial, Times New Roman, Courier New, Verdana, ... Questi tipi di carattere installati sono dati non liberi.
Molti tipi di carattere Latin sono una discendenza dalla famiglia URW Nimbus o Bitstream Vera.
Suggerimento
Se la propria localizzazione necessita di tipi di carattere non coperti bene dai tipi di carattere elencati sopra, usare
aptitude per controllare nei pacchetti task elencati in ”Task” -> ”Localizzazione”. I pacchetti di tipi di carattere
elencati come ”Dipende:” o ”Raccomanda:” nei pacchetti dei task di localizzazione sono i candidati principali.
Debia usa FreeType per rasterizzare i tipi di carattere. La sua infrastruttura di scelta dei caratteri è fornita dalla libreria
per configurazione dei tipi di carattere Fontconfig.
Tabella 7.5: Elenco di ambienti per i tipi di carattere degli di nota e pacchetti correlati
Suggerimento
Alcuni pacchetti di tipi di carattere, come fonts-noto* installano troppi tipi di carattere. Si può anche voler
mantenere installati alcuni pacchetti di caratteri ma disabilitarli per le situazioni normali d’uso. Per alcuni punti del
codice Unicode sono necessari glifi multipli a causa della unificazione Han e glifi non desiderati possono essere
scelti dalla libreria Fontconfig non configurata. Uno dei casi più noiosi sono ”U+3001 IDEOGRAPHIC COMMA”
e ”U+3002 IDEOGRAPHIC FULL STOP” nei paesi CJK. Si può facilmente evitare questa situazione problematica
configurando la disponibilità dei tipi di carattere usando la GUI per la gestione dei tipi di carattere (font-manager).
È possibile anche elencare lo stato di configurazione dei tipi di carattere dalla riga di comando.
Si può impostare lo stato di configurazione di un tipo di carattere dall’editor di testo, ma non è una cosa banale.
Vedere fonts.conf(5).
7.7 Sandbox
Molte applicazioni, soprattutto GUI, in Linux sono disponibili solamente in forma binaria da fonti non-Debian.
Debian Reference 140 / 263
avvertimento
I binari da questi siti possono includere pacchetti software proprietari non liberi.
Esiste una ragione d’essere per queste distribuzioni in formato binario per gli aficionados del Software Libero che
usano Debian, dato che queste possono fornire un insieme pulito di librerie usato per ciascuna applicazione dal
corrispondente sviluppatore a monte, indipendentemente da quelle fornite da Debian.
Il rischio intrinseco dell’esecuzione di binari esterni può essere ridotto utilizzando un ambiente sandbox che sfrutta le
funzionalità di sicurezza moderne di Linux (vedere Sezione 4.7.5.
• Per i binari da AppImage e alcuni siti a monte, eseguirli in firejail con configurazione manuale.
• Per i binari da FLATHUB, eseguirli in Flatpak . (Non è necessaria una configurazione manuale).
• Per i binari da snapcraft, eseguirli in Snap . (Nessuna configurazione manuale richiesta; compatibile con programmi
demone.)
Il pacchetto xdg-desktop-portal fornisce un’API standardizzata per le funzionalità comuni del desktop. Vedere
xdg-desktop-portal (flatpak) e xdg-desktop-portal (snap).
pacchetto popcon
dimensione
descrizione
Flatpak, infrastruttura di messa in produzione di applicazioni
flatpak V:65, I:70 7499
per app per desktop
gnome-software-plugin-flatpak
V:20, I:29 254 Supporto Flatpak per il Software GNOME
snapd V:67, I:70 60022 Demone e strumentazione che abilitano i pacchetti snap
gnome-software-plugin-snap
V:1, I:2 121 Supporto Snap per il Software GNOME
xdg-desktop-portal
V:303, I:394 1936 Portale di integrazione nel desktop per Flatpak e Snap
xdg-desktop-portal-gtk
V:274, I:392 715 backend xdg-desktop-portal per GTK (GNOME)
xdg-desktop-portal-kde
V:53, I:72 1438 backend xdg-desktop-portal per Qt (KDE)
xdg-desktop-portal-wlr
V:0, I:4 135 backend xdg-desktop-portal per wlroots (Wayland)
programma per sandbox con sicurezza SUID firejail per l’uso
firejail V:1, I:4 1771
con AppImage
Questa tecnologia per ambiente sandbox è molto simile a come le app nei SO degli smartphone vengono eseguite
con accesso controllato alle risorse.
Anche alcune grandi applicazioni GUI come browser web in Debian usano internamente la tecnologia degli ambienti
sandbox per renderle più sicure.
Debian Reference 141 / 263
Ci sono diversi modi per connettersi da un’applicazione su un host remoto al server X, incluso xwayland sull’host
locale.
L’accesso al server X locale da parte delle applicazioni locali che usano il protocollo di base X può essere connesso
localmente attraverso un socket locale di dominio UNIX. Ciò può essere autorizzato dal file di autorità che contiene i
cookie di accesso. Il file authority è identificato dalla variabile d’ambiente ”$XAUTHORITY” e il display X è identificato
dalla variabile d’ambiente ”$DISPLAY”. Dato che queste vengono normalmente impostate automaticamente, non è
necessaria alcuna azione speciale, ad es. ”gitk” come segue.
username $ gitk
Nota
Per xwayland, XAUTHORITY contiene un valore come ”/run/user/1000/.mutter-Xwaylandauth.YVSU30”.
L’accesso al display del server X locale da parte di applicazioni remote che usano il protocollo principale X è supportato
usando la funzionalità di inoltro di X11.
• Eseguire un comando applicativo X, ad esempio ”gitk”, sul sito remoto nel modo seguente.
loginname @ remotehost $ gitk
Debian Reference 143 / 263
Questo metodo può mostrare l’output da un client X remoto come se fosse connesso localmente attraverso un socket
UNIX locale.
Vedere Sezione 6.3 per SSH/SSHD.
avvertimento
La connessione TCP/IP remota al server X è disabilitata in modo predefinito nel sistema Debian per ragioni
di sicurezza. Non abilitarla impostando semplicemente ”xhost +”, né abilitando connessioni XDMCP, se
lo si può evitare.
L’accesso al server X da parte delle applicazioni che usano il protocollo centrale di X e vengono eseguite sullo stesso
host ma in un ambiente come una chroot dove il file di autorità non è accessibile può essere autorizzato in maniera
sicura con xhost usando l’accesso basato su utente, es. ”gitk” come segue:
username $ xhost + si:localuser:root ; sudo chroot /path/to
# cd /src
# gitk
# exit
username $ xhost -
7.10 Appunti
dimensione
del
pacchetto popcon pac- target descrizione
chet-
to
interfaccia a riga di comando per la selezione in X
xsel V:9, I:42 55 per X
(appunti)
interfaccia a riga di comando per la selezione in X
xclip V:12, I:63 62 per X
(appunti)
wl-copy wl-paste: interfaccia a riga di
wl-clipboard V:3, I:14 162 Wayland
comando per gli appunti di Wayland
Console un demone che cattura eventi del mouse sulla
gpm V:10, I:12 521
Linux console Linux
Tabella 7.9: Elenco di programmi correlati con la manipolazione degli appunti a caratteri
Debian Reference 144 / 263
Capitolo 8
I18N e L10N
Il supporto per le lingue native o M17N (Multilingualization) per un software applicativo è ottenuto in 2 passi.
• L’internazionalizzazione (I18N): per rendere un software capace di gestire potenzialmente localizzazioni multiple.
• Localizzazione (L10N): per fare gestire dal software una localizzazione specifica.
Suggerimento
Ci sono 17, 18 o 10 lettere tra le lettere ”m” e ”n”, ”i” e ”n” o ”l” e ”n” in, rispettivamente, ”multilingualization”,
”internazionalization” e ”localization” che sono i termini inglesi corrispondenti a M17N, I18N e L10N. Per i dettagli
vedere Internationalizzazione e localizzazione.
8.1 La localizzazione
Il comportamento dei programmi che supportano l’internazionalizzazione è configurato dalla variabile d’ambiente
”$LANG” per supportare la localizzazione. L’effettivo supporto delle funzionalità dipendenti dalla localizzazione da
parte della libreria libc richiede l’installazione dei pacchetti locales o locales-all. Il pacchetto locales deve
essere inizializzato correttamente.
Se non è installato né il pacchetto locales né locales-all, il supporto delle funzionalità di localizzazione è perso
e il sistema usa i messaggi in inglese US e gestisce i dati come ASCII. Questo comportamento è uguale a quando
”$LANG” è impostato a ”LANG=”, ”LANG=C” o ”LANG=POSIX”.
Il software moderno, come GNOME e KDE ha il supporto per più lingue. È internazionalizzato rendendolo capace di
gestire dati UTF-8 e localizzato fornendo i messaggi tradotti attraverso l’infrastruttura gettext(1). I messaggi tradotti
possono essere forniti in pacchetti separati di localizzazione.
L’attuale sistema GUI del desktop Debian normalmente imposta la localizzazione nell’ambiente GUI come ”LANG=xx_YY.UTF
Qui ”xx” è il codice ISO 639 di lingua e ”YY” è il codice ISO 3166 di paese. Questi valori sono impostati dal dialogo
GUI di configurazione del desktop e cambiano il comportamento del programma. Vedere Sezione 1.5.2.
La più semplice rappresentazione di dati testuali è ASCII che è sufficiente per l’inglese e usa meno di 127 caratteri
(rappresentabili con 7 bit).
Anche un testo in semplice inglese può contenere caratteri non ASCII; le virgolette singole ricurve destra e sinistra
per esempio non sono disponibili in ASCII.
Debian Reference 145 / 263
Per poter gestire più caratteri, molti insiemi di caratteri e sistemi di codifica sono stati usati per supportare molte lingue
(vedere Tabella 11.2).
L’insieme di caratteri Unicode può rappresentare praticamente tutti i caratteri conosciuti con un intervallo di codici a
21 bit (cioè da 0 a10FFFF in notazione esadecimale).
Il sistema di codifica UTF-8 fa rientrare i codici Unicode in un flusso di dati ragionevole a 8 bit per la maggior parte
compatibile con il sistema di elaborazione dei dati ASCII. Questo fa di UTF-8 la scelta moderna preferita. UTF sta per
Unicode Transformation Format (formato di trasformazione di Unicode). Quando i dati in testo semplice ASCII sono
convertiti in dati UTF-8, questi hanno esattamente lo stesso contenuto e dimensione di quelli ASCII originali. Perciò
non si perde nulla utilizzando la localizzazione UTF-8.
Nella localizzazione UTF-8, se si usa un programma applicativo compatibile, si possono visualizzare e modificare
dati di testo in qualsiasi lingua straniera, purché siano installati e abilitati i tipi di carattere e i metodi di input richie-
sti. Per esempio, nella localizzazione ”LANG=it_IT.UTF-8”, gedit(1) (editor di testo per il desktop GNOME) può
visualizzare e modificare dati testuali in caratteri cinesi continuando a presentare i menu in italiano.
Suggerimento
Sia la nuova localizzazione standard ”en_US.UTF-8”, sia la vecchia localizzazione standard ”C”/”POSIX” usano i
messaggi in inglese americano standard, ma hanno sottili differenze negli ordinamenti, ecc. Se si desidera gestire
in maniera corretta non solo caratteri ASCII, ma anche tutti i caratteri codificati UTF-8 pur mantenendo il vecchio
comportamento locale ”C”, usare in Debian la localizzazione non standard ”C.UTF-8”.
Nota
Alcuni programmi usano più memoria dopo l’inclusione del supporto per l’internazionalizzazione. Questo avviene
perché il loro codice è programmato per usare internamente UTF-32(UCS4) per supportare Unicode al fine di
ottimizzare la velocità e consumano 4 byte per ogni dato di carattere ASCII, indipendentemente dalla localizzazione
selezionata. Ancora una volta usando la localizzazione UTF-8 non si perde nulla.
Per far sì che un sistema abbia accesso ad una localizzazione particolare, è necessario che i dati della localizzazione
siano stati compilati a partire dal database della localizzazione.
Il pacchetto locales non viene fornito con dati di localizzazione pre-compilati. È necessario configurarlo.
# dpkg-reconfigure locales
1. Selezionare tutti i dati di localizzazione richiesti per la compilazione in formato binario. (Assicurarsi di includere
almeno una localizzazione UTF-8.)
2. Impostare il valore della localizzazione predefinita a livello di tutto il sistema creando ”/etc/default/locale”,
per l’uso da parte di PAM (vedere Sezione 4.5).
Il valore della localizzazione predefinita a livello di sistema impostato in ”/etc/default/locale” può essere
scavalcato dalla configurazione con GUI delle applicazioni GUI.
Nota
I sistemi di codifica tradizionali possono essere identificati da ”/usr/share/i18n/SUPPORTED”. Perciò
”LANG=en_US” è ”LANG=en_US.ISO-8859-1”.
Debian Reference 146 / 263
Il pacchetto locales-all viene fornito con tutti i dati di localizzazione pre-compilati. Dato che non crea ”/etc/default/lo
può essere sempre necessario installare anche il pacchettolocales.
Suggerimento
Il pacchetto locales di alcune distribuzioni derivate da Debian viene fornito con dati di localizzazione precompilati
per tutte le localizzazioni. Per emulare un tale ambiente di sistema in Debian è necessario installare entrambi i
pacchetti locales e locales-all.
Per lo scambia di dati interpiattaforma (vedere Sezione 10.1.7), può essere necessario montare alcuni file system con
codifiche particolari. Per esempio, mount(8), se usato senza opzioni, assume che venga usata la codifica CP437 per
il file system vfat. È necessario fornire esplicitamente opzioni di montaggio per usare nomi di file UTF-8 o CP932.
Nota
Quando una chiavetta USB inseribile a caldo viene automaticamente montata in un ambiente desktop moderno
come GNOME, si può fornire una informazione di montaggio di questo tipo cliccando con il tasto destro sull’icona
del dispositivo sul desktop, cliccare sulla scheda ”Drive”, cliccare per espandere ”Impostazioni” ed inserire ”utf8” in
”Opzioni di mount:”. La prossima volta che questa chiavetta di memoria verrà montata, sarà abilitato il montaggio
con UTF-8.
Nota
Se si sta facendo l’aggiornamento di un sistema o spostando dischi da un sistema non UTF-8, i nomi di file con
caratteri non ASCII potranno essere codificati con codifiche usate una volta e ora deprecate, come ISO-8859-1 o
eucJP. Cercare aiuto sugli strumenti di conversione dei testi per convrtirli in UTF-8. Vedere Sezione 11.1.
Samba usa in modo predefinito Unicode per i client più moderni (Windows NT, 200x, XP), ma usa CP850 per client
più vecchi (DOS e Windows 9x/Me). Questo comportamento predefinito per i client più vecchi può essere modificato
usando ”dos charset” nel file ”/etc/samba/smb.conf”, per esempio usando ”CP932” per il giapponese.
Esistono le traduzioni di molti dei messaggi di testo e dei documenti che sono mostrati nel sistema Debian, come
messaggi di errore, output standard dei programmi, menu e pagine di manuale. L’insieme di strumenti GNU gettext(1)
è usato come strumento di backend per la maggior parte delle attività di traduzione.
aptitude(8) fornisce in ”Task” → ”Localizzazione” un ampio elenco di utili pacchetti binari che aggiungono alle
applicazioni messaggi localizzati e che forniscono documentazione nella versione tradotta.
Per esempio, si possono ottenere i messaggi localizzati per le pagine man installando il pacchetto manpages-LINGUA.
Per leggere le pagine man di nomeprogramma in italiano contenute in ”/usr/share/man/it/”, eseguire il comando
seguente.
LANG=it_IT.UTF-8 man programname
GNU gettext può gestire liste di priorità delle lingue di traduzione con la variabile d’ambiente $LANGUAGE. Per esempio:
$ export LANGUAGE="pt:pt_BR:es:it:fr"
Per ulteriori informazioni vedere info gettext e leggere la sezione ”The LANGUAGE variable”.
Debian Reference 147 / 263
Il criterio di ordinamento dei caratteri con sort(1) e ls(1) è influenzato dalla localizzazione. Esportando LANG=en_US.UTF-8
l’ordinamento avviene nell’ordine A->a->B->b...->Z->z, mentre se si esporta LANG=C.UTF-8 l’ordinamento
avviene come in ASCII binario A->B->...->Z->a->b....
Il formato della data di ls(1) è influenzato dalla localizzazione (vedere Sezione 9.3.4).
Il formato della data di date(1) è influenzato dalla localizzazione. Ad esempio:
$ unset LC_ALL
$ LANG=en_US.UTF-8 date
Thu Dec 24 08:30:00 PM JST 2023
$ LANG=en_GB.UTF-8 date
Thu 24 Dec 20:30:10 JST 2023
$ LANG=es_ES.UTF-8 date
jue 24 dic 2023 20:30:20 JST
$ LC_TIME=en_DK.UTF-8 date
2023-12-24T20:30:30 JST
I caratteri di punteggiatura usati per i numeri sono diversi nelle varie localizzazioni. Per esempio, nella localizzazione
inglese mille virgola uno è rappresentato come ”1,000.1”, mentre nella localizzazione in italiano è mostrato come
”1.000,1”. Si può vedere questa differenza nei programmi per fogli di calcolo.
Ogni caratteristica specifica della variabile d’ambiente ”$LANG” può essere scavalcata impostando le variabili ”$LC_*”.
Queste variabili d’ambiente a loro volta possono essere scavalcate impostando la variabile ”$LC_ALL”. Vedere la
pagina di manuale locale(7) per i dettagli. A meno di non avere forti motivi per creare configurazioni complesse,
stare lontani da esse e usare solo la variabile ”$LANG” impostata ad una delle localizzazioni UTF-8.
Il sistema Debian può essere configurato per funzionare con molte disposizioni di tastiera internazionali usando i
pacchetti keyboard-configuration e console-setup.
# dpkg-reconfigure keyboard-configuration
# dpkg-reconfigure console-setup
Per la console Linux e il sistema X Window, questi aggiornano i parametri di configurazione in ”/etc/default/keyboard”
e ”/etc/default/console-setup”. Viene anche configurato il tipo di carattere per la console Linux. Molti ca-
ratteri non ASCII, inclusi quelli accentati usati da molte lingue europee, possono essere resi disponibili con il ”tasto
morto” (dead key), il tasto AltGr e il tasto di composizione (compose).
Per GNOME nei sistemi desktop Wayland, Sezione 8.2.1 non può gestire le lingue europee diverse dall’inglese. IBus
è stato creato per supportare non solo le lingue asiatiche, ma anche quelle europee. Le dipendenze dai pacchetti
dell’ambiente desktop GNOME raccomandano ”ibus” attraverso ”gnome-shell”. Il codice di ”ibus” è stato ag-
giornato per integrare tutte le fuzionalità delle opzioni di setxkbmap e XKB. È necessario configurare ibus dalle
”Impostazioni di GNOME” o con ”GNOME Tweaks” per l’input da tastiera multilingua.
Nota
Se ibus è attivo, la configurazione classica della tastiera X tramite setxkbmap può essere scavalcata da ibus
anche neli ambienti desktop classici basati su X. Si può disabilitare un ibus installato usando im-config per
impostare il metodo di input a ”None” (Nessuno). Per ulteriori informazioni, vedere le inforzioni del Debian Wiki
sulla tastiera.
Debian Reference 148 / 263
Dato che l’ambiente desktop GNOME raccomanda ”ibus” attraverso ”gnome-shell”, ”ibus” è una buona scelta
come metodo di input.
L’input multilingua verso l’applicazione è elaborato così:
Keyboard Application
| ^
| |
+-> Linux kernel -> Input method (ibus) -> Gtk, Qt, X, Wayland
+-- Engine--+
Nota
Per il cinese, ”fcitx” può essere un’infrastruttura per metodo di input alternativa. Per chi è abituato ad Emacs,
”uim” può essere un’alternativa. In entrambi i casi, può essere necessario fare una configurazione manuale ag-
giuntiva con im-config. Alcuni vecchi metodi di input classici, come ”kinput2” possono ancora esistere nei
repository Debian, ma non sono raccomandati per gli ambienti moderni.
Trovo che il metodo di input per il giapponese avviato dall’ambiente inglese (”en_US.UTF-8”) sia molto utile. Ecco
come farlo con IBus per GNOME in Wayland:
1. Installare il pacchetto con gli strumenti di input per il giapponese ibus-mozc (o ibus-anthy) insieme ai
pacchetti che raccomanda, come im-config.
2. Selezionare ”Impstazioni” → ”Tastiera” → ”Input Sources” → fare clic su ”+” in ”Input Sources” → ”Japanese”
→ ”Japanese mozc (o anthy)” e fare clic su ”Aggiungi” se non è stato attivato.
Debian Reference 149 / 263
Suggerimento
Se si desidera avere accesso ad un ambiente tastiera con solo alfabeto con la tastiera fisica giapponese in cui
Maiusc-2 ha stampato " (virgolette doppie), selezionare ”Japanese” nella procedura descritta sopra. Si può inserire
giapponese usando ”Japanese mozc (o anthy)” con una tastiera fisica ”US” in cui Maiusc-2 ha stampato @ (la
chiocciolina).
• im-config(8) abilita il miglior metodo di input sul sistema come impostazione predefinita senza alcuna azione
dell’utente.
La console Linux può mostrare solamente un numero limitato di caratteri. (È necessario usare speciali programmi
per terminale come jfbterm(1) per mostrare lingue non Europee nella console non-GUI.)
L’ambiente GUI (Capitolo 7) può mostrare qualsiasi carattere in UTF-8 purché siano installati e abilitati i tipi di carattere
richiesti. (La codifica dei dati dei tipi di carattere originali viene gestita in modo trasparente per l’utente.)
Nella localizzazione dell’Asia dell’est i caratteri di disegno di riquadri, i caratteri greci e cirillici possono essere visua-
lizzati più larghi della larghezza desiderata e causare un output su terminale non allineato (vedere Unicode Standard
Annex #11).
Questo problema può essere aggirato:
• gnome-terminal: Modifica → Preferenze → Profili → Nome del profilo → Compatibilità → Caratteri a larghezza
ambigua → Stretto
• ncurses: impostare l’ambiente export NCURSES_NO_UTF8_ACS=0.
Debian Reference 150 / 263
Capitolo 9
In questa sezione vengono descritti suggerimenti base per configurare e gestire il sistema, per lo più dalla console.
Il semplice uso di script(1) (vedere Sezione 1.4.9) per registrare l’attività della shell produce un file con caratteri di
controllo. Ciò può essere evitato usando col(1) nel modo seguente.
$ script
Script started, file is typescript
Fare tutto quello che si vuole … e poi premere Ctrl-D per uscire da script.
$ col -bx < typescript > cleanedfile
$ vim cleanedfile
Debian Reference 151 / 263
• Usare gnome-terminal con il buffer delle righe esteso per scorrere all’indietro.
• Usare screen con ”^A H” (vedere Sezione 9.1.2) per effettuare la registrazione della console.
• Usare vim con ”:terminal” per entrare nella modalità terminale. Usare ”Ctrl-W N” per uscire dalla modalità
terminale nella modalità normale. Usare ”:w typescript” per scrivere il buffer in un file.
• Usare emacs con ”M-x shell”, ”M-x eshell” o ”M-x term” per entrare nella console di registrazione. Usare
”C-x C-w” per scrivere il buffer in un file.
screen(1) non permette solamente il funzionamento di una finestra di terminale con processi multipli, ma permette
anche ai processi in shell remote di sopravvivere a connessioni interrotte. Quello che segue è un tipico scenario
di uso di screen(1).
4. Ci si sposta tra le svariate finestre screen create con ^A n (”Control-A” seguito da ”n”).
5. All’improvviso si ha la necessità di lasciare il terminale, ma non si vuole perdere il lavoro attivo e si vuole
mantenere la connessione.
6. Si può scollegare la sessione screen in uno qualsiasi dei metodi seguenti.
Suggerimento
Con screen si può risparmiare sui costi di connessione per connessioni a tempo, come dial-up o conteggiate a
pacchetti, perché si può lasciare un processo attivo mentre si è disconnessi e poi ricollegarvisi successivamente
quando è possibile connettersi di nuovo.
In una sessione screen tutto l’input da tastiera viene inviato alla finestra attuale, tranne per le combinazioni di tasti
per i comandi. Tutte le combinazioni di tasti per i comandi di screen vengono inserite digitando ^A (”Control-A”) più
un singolo tasto [più eventuali parametri]. Ecco alcune combinazioni di tasti importanti da ricordare.
Vedere screen(1) per i dettagli.
Vedere tmux(1) per le funzionalità del comando alternativo.
Debian Reference 152 / 263
In Sezione 1.4.2 sono descritti 2 suggerimenti per permettere una navigazione veloce nelle directory: $CDPATH e mc.
Se si usa un programma per filtro di testo fuzzy, si può evitare di digitare il percorso esatto. Per fzf, includere quanto
segue in ~/.bashrc.
FZF_KEYBINDINGS_PATH=/usr/share/doc/fzf/examples/key-bindings.bash
if [ -f $FZF_KEYBINDINGS_PATH ]; then
. $FZF_KEYBINDINGS_PATH
fi
Per esempio:
• Ci si può spostare in una sottodirectory molto in profondità con uno sforzo minimo. Prima si digita ”cd **” e si
preme il tasto Tab. Poi verrano mostrati i percorsi candidati. Digitando stringhe parziali del percorso, ad esempio
s/d/b foo, si possono restringere i percorsi candidati. Si seleziona il percorso che deve usare cd con i tasti per
spostare il cursore e il tasto Invio.
• Si può selezionare un comando dalla cronologia dei comandi in modo più efficiente con sforzo minimo. Si preme
Ctrl-R al prompt dei comandi. Poi verranno mostrati comandi candidati. Digitando stringhe di comando parziali,
es. vim d, si restringono i candidati. Si seleziona quello da utilizzare con i tasti per il cursore e il tasto Invio.
Alcuni comandi come /usr/bin/dash che mancano della funzionalità di modifica della cronologia della riga di
comando possono aggiungere tale funzionalità in modo trasparente venendo eseguito sotto rlwrap o un suo equi-
valente.
$ rlwrap dash -i
Questo fornisce una comoda piattaforma per testare dettagli per dash con un ambiente amichevole in stile bash.
Il comando rg(1) nel pacchetto ripgrep offre un’alternativa più veloce al comando grep(1) per scansionare l’al-
bero del codice sorgente nelle situazioni tipiche. Sfrutta le moderne CPU multi-core e applica automaticamente filtri
ragionevoli per saltare alcuni file.
Debian Reference 153 / 263
Dopo aver imparato le basi di vim(1) attraverso Sezione 1.4.8, leggere”Seven habits of effective text editing (2000)”
di Bram Moolenaar per capire come vim dovrebbe essere usato.
Il comportamento di vim può essere modificato in modo significativo abilitando le sue funzionalità interne attraverso
i comandi della modalità Ex come ”set ...” per impostare le opzioni di vim.
Questo comandi per la modalità Ex possono essere inclusi nel file vimrc dell’utente, tradizionalmente ”~/.vimrc” o
quello adatto a git ”~/.vim/vimrc”. Ecco un esempio molto semplice 1:
""" Generic baseline Vim and Neovim configuration (~/.vimrc)
""" - For NeoVim, use "nvim -u ~/.vimrc [filename]"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let mapleader = ' ' " :h mapleader
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set nocompatible " :h 'cp -- sensible (n)vim mode
syntax on " :h :syn-on
filetype plugin indent on " :h :filetype-overview
set encoding=utf-8 " :h 'enc (default: latin1) -- sensible encoding
""" current vim option value can be verified by :set encoding?
set backspace=indent,eol,start " :h 'bs (default: nobs) -- sensible BS
set statusline=%<%f%m%r%h%w%=%y[U+%04B]%2l/%2L=%P,%2c%V
set listchars=eol:¶,tab:b''�b''\ ,extends:b''�b'',precedes:b''�b'',nbsp:b''�b''
set viminfo=!,'100,<5000,s100,h " :h 'vi -- bigger copy buffer etc.
""" Pick "colorscheme" from blue darkblue default delek desert elflord evening
""" habamax industry koehler lunaperche morning murphy pablo peachpuff quiet ron
""" shine slate torte zellner
colorscheme industry
""" don't pick "colorscheme" as "default" which may kill SpellUnderline settings
set scrolloff=5 " :h 'scr -- show 5 lines around cursor
set laststatus=2 " :h 'ls (default 1) k
""" boolean options can be unset by prefixing "no"
set ignorecase " :h 'ic
set smartcase " :h 'scs
set autoindent " :h 'ai
set smartindent " :h 'si
set nowrap " :h 'wrap
"set list " :h 'list (default nolist)
set noerrorbells " :h 'eb
set novisualbell " :h 'vb
set t_vb= " :h 't_vb -- termcap visual bell
set spell " :h 'spell
set spelllang=en_us,cjk " :h 'spl -- english spell, ignore CJK
set clipboard=unnamedplus " :h 'cb -- cut/copy/paste with other app
set hidden " :h 'hid
set autowrite " :h 'aw
set timeoutlen=300 " :h 'tm
La mappa dei tasti di vim può essere modificata nel file vimrc dell’utente. Es.:
Attenzione
Non cercare di cambiare le associazioni dei tasti predefinite senza ottime ragioni.
Per far sì che le associazioni di tasti precedenti funzionino correttamente, il programma di terminale deve essere
configurato per generare ”ASCII DEL” per il tasto Backspace e ”sequenza Escape” per il tasto Canc.
Altre configurazioni varie possono essere modificate nel file vimrc dell’utente. Es.:
""" Use faster 'rg' (ripgrep package) for :grep
if executable("rg")
set grepprg=rg\ --vimgrep\ --smart-case
set grepformat=%f:%l:%c:%m
endif
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" Retain last cursor position :h '"
augroup RetainLastCursorPosition
autocmd!
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ exe "normal! g'\"" |
\ endif
augroup END
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" Force to use underline for spell check results
augroup SpellUnderline
autocmd!
autocmd ColorScheme * highlight SpellBad term=Underline gui=Undercurl
autocmd ColorScheme * highlight SpellCap term=Underline gui=Undercurl
autocmd ColorScheme * highlight SpellLocal term=Underline gui=Undercurl
autocmd ColorScheme * highlight SpellRare term=Underline gui=Undercurl
augroup END
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" highlight tailing spaces except when typing as red (set after colorscheme)
highlight TailingWhitespaces ctermbg=red guibg=red
""" \s\+ 1 or more whitespace character: <Space> and <Tab>
""" \%#\@<! Matches with zero width if the cursor position does NOT match.
match TailingWhitespaces /\s\+\%#\@<!$/
• Vim - the ubiquitous text editor -- Il sito originale a monte ufficiale di Vim e degli script vim
• VimAwsome -- Elenco di plugin per Vim
I pacchetti di plugin nel pacchetto vim-scripts possono essere abilitati usando il file vimrc dell’utente. Es:
packadd! secure-modelines
packadd! winmanager
" IDE-like UI for files and buffers with <space>w
nnoremap <leader>w :WMToggle<CR>
Il nuovo sistema di pacchetti nativo di Vim funziona bene con ”git” e ”git submodule”. Una configurazione
d’esempio di questo tipo può essere trovata inmy git repository: dot-vim. Essenzialmente fa:
Debian Reference 156 / 263
• Usando ”git” e ”git submodule”, i pacchetti esterni più recenti, come ”nome”, sono messi in ~/.vim/pack/*/opt/nom
e simili.
• Aggiungendo la riga :packadd! nome al file vimrc dell’utente, questi pacchetti vengono messi nel runtimepath.
• Vim carica questi pacchetti in runtimepath durante la sua inizializzazione.
• Al termine della sua inizializzazione, i tag per i documenti installati sono aggiornati con ”helptags ALL”.
Per altro ancora, avviare vim con ”vim --startuptime vimstart.log” per controllare l’effettiva sequenza di
esecuzione e il tempo speso in ogni passo.
Può essere fonte di confusione vedere troppi modi2 per gestire e caricare questi pacchetti esterni in vim. Controllare
le informazioni originali è la soluzione migliore.
Molti programmi registrano le proprie attività in formato di file testuale nella directory ”/var/log/”.
logrotate(8) viene usato per semplificare l’amministrazione dei file di log in un sistema che genera molti file di log.
Molti nuovi programmi registrano le loro attività nel formato di file binario, usando il servizio Journal systemd-journald(8),
nella directory ”/var/log/journal”.
Si può fare il registro di dati nel Journal systemd-journald(8) da uno script di shell usando il comando systemd-cat(1).
Vedere Sezione 3.4 e Sezione 3.3.
Quelli che seguono sono alcuni analizzatori di registro degni di nota (”~Gsecurity::log-analyzer” in aptitude(8)).
Nota
CRM114 fornisce un’infrastruttura basata su un linguaggio per scrivere filtri fuzzy con la libreria per espressioni
regolari TRE. Il suo utilizzo più comune è come filtro per la posta spazzatura, ma può anche essere usato come
analizzatore di registro.
Sebbene gli strumenti di paginazione, come more(1) e less(1) (vedere Sezione 1.4.5) e gli strumenti personalizzati
per l’evidenziazione e la formattazione (vedere Sezione 11.1.8) possano mostrare il testo in un modo piacevole, gli
editor generici (vedere Sezione 1.4.6) sono più versatili e personalizzabili.
Suggerimento
Per vim(1) e la sua modalità per paginatore, ossia view(1), ”:set hls” abilita la ricerca con evidenziazione.
Il formato predefinito per la visualizzazione delle date e degli orari per il comando ”ls -l” dipende dalla localizzazio-
ne (vedere Sezione 1.2.6 per il valore). Si fa dapprima riferimento alla variabile ”$LANG” che può essere scavalcata
dalle variabili d’ambiente ”$LC_TIME” o ”$LC_ALL”.
Il formato effettivo di visualizzazione predefinito per ciascuna localizzazione dipende dalla versione della libreria C
standard (il pacchetto libc6) usata. Differenti rilasci di Debian hanno cioè valori predefiniti diversi. Per i formati ISO,
vedere ISO 8601.
Se si desidera veramente personalizzare questo formato di visualizzazione delle date e degli orari, oltre a ciò che è
fatto con la localizzazione, si deve impostare il valore dello stile degli orari con l’opzione ”--time-style” o con
il valore di ”$TIME_STYLE” (vedere ls(1), date(1), ”info coreutils 'ls invocation'”).
Suggerimento
Si può evitare di digitare lunghe opzioni nella riga di comando usando alias per i comandi (vedere Sezione 1.5.9):
alias ls='ls --time-style=+%d.%m.%y %H:%M'
L’output inviato a schermo dalla shell nella maggior parte dei terminali moderni può essere colorato usando codici di
escape ANSI (vedere ”/usr/share/doc/xterm/ctlseqs.txt.gz”).
Per esempio, provare a fare quanto segue.
Debian Reference 158 / 263
valore dello stile per gli orari localizzazione visualizzazione di data e ora
iso qualsiasi 01-19 00:15
long-iso qualsiasi 2009-01-19 00:15
2009-01-19 00:15:16.000000000
full-iso qualsiasi
+0900
locale C Jan 19 00:15
locale en_US.UTF-8 Jan 19 00:15
locale es_ES.UTF-8 ene 19 00:15
+%d.%m.%y %H:%M qualsiasi 19.01.09 00:15
+%d.%b.%y %H:%M C o en_US.UTF-8 19.Jan.09 00:15
+%d.%b.%y %H:%M es_ES.UTF-8 19.ene.09 00:15
Tabella 9.5: Esempi di visualizzazione di date e orari per il comando ”ls -l” con il valore dello stile per gli orari
$ RED=$(printf "\x1b[31m")
$ NORMAL=$(printf "\x1b[0m")
$ REVERSE=$(printf "\x1b[7m")
$ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"
I comandi colorati sono comodi per ispezionare il loro output in modo interattivo. Nel mio file ”~/.bashrc” io includo
quanto segue.
if [ "$TERM" != "dumb" ]; then
eval "`dircolors -b`"
alias ls='ls --color=always'
alias ll='ls --color=always -l'
alias la='ls --color=always -A'
alias less='less -R'
alias ls='ls --color=always'
alias grep='grep --color=always'
alias egrep='egrep --color=always'
alias fgrep='fgrep --color=always'
alias zgrep='zgrep --color=always'
else
alias ll='ls -l'
alias la='ls -A'
fi
Questo uso degli alias limita gli effetti colorati all’uso interattivo dei comandi. Ha il vantaggio, rispetto all’esportazione
della variabile d’ambiente ”export GREP_OPTIONS='--color=auto'”, che i colori possono essere visti in pro-
grammi di paginazione come less(1). Se si desidera eliminare i colori quando si invia l’output con una pipe ad altri
comandi, usare nell’esempio precedente per ”~/.bashrc” ”--color=auto”.
Suggerimento
Questi alias di colorazione possono essere disattivati nell’ambiente interattivo invocando la shell con il comando
”TERM=dumb bash”.
Ci sono alcuni modi per registrare l’immagine grafica di un’applicazione X, incluso il display di un xterm.
Esistono strumenti specializzati per registrare i cambiamenti nei file di configurazione con l’aiuto del sistema DVCS e
per creare istantanee del sistema in Btrfs.
Tabella 9.7: Elenco di pacchetti che possono registrare la cronologia della configurazione
Si può anche pensare di usare un approccio con script locale Sezione 10.2.3.
Debian Reference 160 / 263
Tabella 9.8: Elenco di strumenti per monitorare e controllare l’attività dei programmi.
Debian Reference 161 / 263
Le attività dei programmi possono essere monitorare e controllate usando strumenti specializzati.
Suggerimento
Il pacchetto procps fornisce strumenti estremamente di base per monitorare, controllare ed avviare le attività dei
programmi. È consigliabile imparare ad usarli tutti.
A volte un valore molto alto di nice fa più male che bene al sistema; usare quindi questo comando con molta cautela.
9.4.3 Il comando ps
Il comando ps(1) in un sistema Debian supporta sia le funzionalità BSD sia quelle SystemV ed aiuta ad identificare
l’attività dei processi in modo statico.
È possibile uccidere i processi figli zombie (defunti) tramite l’ID di processo del genitore identificato dal campo ”PPID”.
Il comando pstree(1) mostra un albero dei processi.
Debian Reference 162 / 263
top(1) in sistemi Debian ha molte funzionalità e aiuta ad identificare in modo dinamico i processi che si stanno
comportando in modo strano.
È un programma interattivo a tutto schermo. Si possono ottenere le informazioni di aiuto sul suo uso premendo il
tasto «h» e uscire premendo il tasto «q».
È possibile elencare tutti i file aperti da un processo attraverso il suo PID (Identificativo di processo), ad esempio 1,
con il comando seguente.
$ sudo lsof -p 1
Si può tenere traccia dell’attività di un programma con strace(1), ltrace(1) o xtrace(1) rispettivamente per quello
che riguarda chiamate e segnali di sistema, chiamate di libreria o comunicazioni tra client e server X11.
Si può tenere traccia delle chiamate di sistema del comando ls nel modo seguente.
$ sudo strace ls
Suggerimento
Usare lo script strace-graph che si trova in /usr/share/doc/strace/examples/ per creare una bella vista ad albero.
Usando fuser(1) è anche possibile identificare i processi in base ai file usando, ad esempio per ”/var/log/mail.log”
con il comando seguente.
$ sudo fuser -v /var/log/mail.log
USER PID ACCESS COMMAND
/var/log/mail.log: root 2946 F.... rsyslogd
Ora si può vedere che sul sistema è in esecuzione exim4(8) per gestire le connessioni TCP alla porta SMTP (25).
watch(1) esegue un programma in modo ripetitivo ad intervalli regolari mostrando il suo output sullo schermo.
$ watch w
Questo comando mostra chi è attualmente connesso al sistema in modo aggiornato ogni 2 secondi.
Debian Reference 163 / 263
Ci sono svariati modi di ripetere uno stesso comando su diversi file che rispondono ad una qualche condizione, ad
esempio che corrispondono al modello glob ”*.ext”.
find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;
Gli esempi precedenti sono stati scritti per assicurare la gestione appropriata di nomi di file particolari come quelli
contenenti spazi. Per usi più avanzati di find(1), vedere Sezione 10.1.5.
Perl l’interfaccia a riga di comando (CLI), viene eseguito il primo programma con un nome corrispondente trovato
nelle directory specificate nella variabile d’ambiente $PATH. Vedere Sezione 1.5.3.
Per l’interfaccia utente grafica (GUI) conforme agli standard di freedesktop.org i file *.desktop nella directory
/usr/share/applications/ forniscono gli attributi necessari per la visualizzazione di ogni programma nel menu
della GUI. Ogni pacchetto che è conforme al sistema di menu xdg di Freedesktop.org installa i propri dati di me-
nu forniti da ”*.desktop” in ”/usr/share/applications/”. Gli ambienti desktop moderni che sono conformi allo standard
Freedesktop.org usano questi dati per generare i loro menu usando il pacchetto xdg-utils. Vedere ”/usr/share/doc/xdg-
utils/README”.
Per esempio, il file chromium.desktop definisce gli attributi per il «Browser Web Chromium» come «Name» per il
nome di programma, «Exec» per il percorso e gli argomenti di esecuzione del programma, «Icon» per l’icona usata,
ecc. (vedere laSpecifica per le voci per desktop), nel modo seguente:
[Desktop Entry]
Version=1.0
Name=Chromium Web Browser
GenericName=Web Browser
Comment=Access the Internet
Comment[fr]=Explorer le Web
Exec=/usr/bin/chromium %U
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=chromium
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/ ←-
https;
StartupWMClass=Chromium
StartupNotify=true
Debian Reference 164 / 263
Questa è una descrizione molto semplificata. I file *.desktop vengono analizzati nel modo seguente.
L’ambiente desktop imposta le variabili d’ambiente $XDG_DATA_HOME e $XDG_DATA_DIR. Per esempio, in GNOME
3:
Perciò le directory base (vedere la XDG Base Directory Specification) e le directory applications sono le seguenti.
• $HOME/.local/share/ → $HOME/.local/share/applications/
• /usr/share/gnome/ → /usr/share/gnome/applications/
• /usr/local/share/ → /usr/local/share/applications/
• /usr/share/ → /usr/share/applications/
I file *.desktop vengono analizzati all’interno di queste directory applications in tale ordine.
Suggerimento
Una voce del menu GUI personalizzata dell’utente può essere creata aggiungendo un file *.desktop nella direc-
tory $HOME/.local/share/applications/.
Suggerimento
La riga ”Exec=...” non viene analizzata dalla shell. Usare il comando env(1) se devono essere impostate variabili
d’ambiente.
Suggerimento
In modo analogo, se viene creato un file *.desktop nella directory autostart all’interno di queste directory di
base, il programma specificato nel file *.desktop viene eseguito automaticamente all’avvio dell’ambiente desktop.
Vedere la specifica Desktop Application Autostart Specification.
Suggerimento
In modo simile, se viene creato un file *.desktop nella directory $HOME/Desktop e l’ambiente desktop è con-
figurato per supportare la funzionalità di avviatore delle icone, il programma specificato in tale file viene eseguito
quando si fa clic sull’icona. Notare che il nome effettivo della directory $HOME/Desktop dipende dalla localizza-
zione. Vedere xdg-user-dirs-update(1).
Alcuni programmi avviano automaticamente altri programmi. Quelli che seguono sono alcuni punti fondamentali per
la personalizzazione di questo processo.
Suggerimento
update-mime(8) aggiorna il file ”/etc/mailcap” usando il file ”/etc/mailcap.order” (vedere
mailcap.order(5)).
Suggerimento
Il pacchetto debianutils fornisce sensible-browser(1), sensible-editor(1) e sensible-pager(1) che
prendono decisioni sensate riguardo, rispettivamente, a quale browser web, editor e paginatore invocare. La lettura
di questi script di shell è raccomandata.
Suggerimento
Per eseguire un’applicazione per console, come mutt, come applicazione preferita in X si dovrebbe creare un’ap-
plicazione X nel modo seguente ed impostare ”/usr/local/bin/mutt-term” come applicazione preferite da
avviare come descritto in precedenza.
# cat /usr/local/bin/mutt-term <<EOF
#!/bin/sh
gnome-terminal -e "mutt \$@"
EOF
# chmod 755 /usr/local/bin/mutt-term
Per uccidere un processo (o inviare ad esso un segnale) in base al suo ID (identificativo) usare kill(1).
Per fare la stessa cosa ma in base al nome del comando del processo o ad altri attributi, usare killall(1) o
pkill(1).
Per pianificare un compito da eseguire una volta soltanto eseguire il comando at(1) nel modo seguente.
$ echo 'command -args'| at 3:40 monday
Per pianificare compiti in modo regolare usare cron(8). Vedere crontab(1) e crontab(5).
Si può pianificare l’esecuzione di processi come utente normale, ad esempio l’utente pippo, creando un file crontab(5)
come ”/var/spool/cron/crontabs/pippo” con il comando ”crontab -e”.
Quello seguente è un esempio di file crontab(5).
Debian Reference 166 / 263
nome del
valore del segnale azione nota
segnale
nessun
se-
gnale
viene
0 --- invia- controlla se il processo è in esecuzione
to
(ve-
dere
kill(2))
termina
1 SIGHUP il pro- terminale disconnesso (segnale hang up)
cesso
termina
2 SIGINT il pro- interrupt dalla tastiera (CTRL-C)
cesso
termina
il pro-
cesso
3 SIGQUIT e fa esce dalla tastiera (CTRL-\)
un
core
dump
termina
9 SIGKILL il pro- segnale di terminazione non bloccabile
cesso
termina
15 SIGTERM il pro- segnale di terminazione bloccabile
cesso
Tabella 9.11: Elenco dei segnali usati comunemente con il comando kill
Debian Reference 167 / 263
Suggerimento
Per i sistemi non in esecuzione in maniera continuata, installare il pacchetto anacron per pianificare l’esecuzione
di comandi periodici, in maniera il più possibile vicina agli intervalli specificati, in base a quanto permesso dal tempo
di attività della macchina. Vedere anacron(8) e anacrontab(5).
Suggerimento
Gli script con compiti pianificati di amministrazione del sistema possono essere eseguiti periodicamente dal-
l’account di root, ponendoli in ”/etc/cron.hourly/”, ”/etc/cron.daily/”, ”/etc/cron.weekly/” o
”/etc/cron.monthly/”. L’orario di esecuzione di questi script può essere personalizzato con ”/etc/crontab”
e ”/etc/anacrontab”.
Systemd ha una funzionalità a basso livello per pianificare l’esecuzione di programmi senza il demone cron. Per
esempio, /lib/systemd/system/apt-daily.timer e /lib/systemd/system/apt-daily.service impo-
stano le attività giornaliere di scaricamento di apt. Vedere systemd.timer(5) .
Systemd può pianificare programmi non solo in base ad eventi temporizzati, ma anche in caso di eventi di mount.
Vedere Sezione 10.2.3.3 e Sezione 10.2.3.2 per alcuni esempi.
Premendo Alt-RSist (Stamp) seguito da un tasto fa la magia di ripristinare il controllo del sistema.
Vedere ulteriori informazioni in ”Linux kernel user’s and administrator’s guide” » ”Linux Magic System Request Key
Hacks”
Debian Reference 168 / 263
Suggerimento
Si può usare la funzione Alt-R_Sist da un terminale SSH, ecc. scrivendo su ”/proc/sysrq-trigger”. Per
esempio, ”echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger” dal prompt di shell di
root sincronizza ed esegue umount per tutti i file system montati.
Suggerimento
Queste informazioni sugli utenti sono contenute in ”/var/run/utmp” e ”/var/log/wtmp”. Vedere login(1) e
utmp(5).
Si può mandare un messaggio a tutti gli utenti che sono connessi al sistema con wall(1) nel modo seguente.
$ echo "We are shutting down in 1 hour" | wall
Per i dispositivi di tipo simil-PCI (AGP, PCI-Express, CardBus, ExpressCard, ecc.), lspci(8) (probabilmente con
l’opzione ”-nn”) è un buon punto di partenza per l’identificazione dell’hardware.
In alternativa, si può identificare l’hardware leggendo il contenuto di ”/proc/bus/pci/devices” o sfogliando l’al-
bero di directory in ”/sys/bus/pci” (vedere Sezione 1.2.12).
Debian Reference 169 / 263
Sebbene nei moderni sistemi desktop con interfaccia grafica, come GNOME e KDE, la maggior parte della configura-
zione dell’hardware possa essere gestita attraverso strumenti di configurazione con interfaccia grafica da essi forniti,
è bene conoscere alcuni metodi di base di configurazione.
Suggerimento
La modifica della frequenza della CPU nei sistemi moderni è controllata da moduli del kernel come acpi_cpufreq.
Nei sistemi Debian, gli orari sono mostrati normalmente come ora locale, ma l’ora di sistema e quella hardware usano
di solito l’ora UTC(GMT).
Se l’ora hardware è impostata ad UTC, modificare l’impostazione nel file ”/etc/default/rcS” ad ”UTC=yes”.
Il comando seguente riconfigura il fuso orario utilizzato dal sistema Debian.
# dpkg-reconfigure tzdata
Se si desidera tenere aggiornata l’ora di sistema attraverso la rete, si consideri l’uso del servizion NTP con pacchetti
come ntp, ntpdate e chrony.
Suggerimento
In systemd, usare invece systemd-timesyncd per l’ora di rete. Vedere systemd-timesyncd(8).
Suggerimento
ntptrace(8), nel pacchetto ntp può tracciare una catena di server NTP all’indietro fino alla fonte originaria.
Ci sono diversi componenti per configurare le funzionalità della console a caratteri e il sistema ncurses(3).
Se, con un xterm non Debian, la voce terminfo per xterm non funziona, cambiare il tipo di terminale ”$TERM”
da ”xterm” ad una delle versioni con funzionalità limitate come ”xterm-r6” quando si fa il login ad un sistema
Debian da remoto. Per ulteriori informazioni vedere ”/usr/share/doc/libncurses5/FAQ” . ”dumb” è il minimo
denominatore comune per ”$TERM”.
I driver di dispositivo per le schede audio per l’attuale Linux sono forniti da ALSA (Advanced Linux Sound Architecture).
ALSA fornisce una modalità di emulazione per la compatibilità con il precedente sistema OSS (Open Sound System).
I software applicativi possono essere configurati non solo per accedere direttamente a device audio, ma anche per
accedervi attraverso un qualche sistema server audio standardizzato. Attualmente PulseAudio, JACK e PipeWire
vengono usati come sistemi per server audio. Vedere la pagina del wiki Debian sull’Audio per la situazione più
recente.
Normalmente esiste un motore audio comune per ciascun ambiente desktop. Ciascun motore audio usato dalle
applicazioni può scegliere di connettersi a diversi server audio.
Debian Reference 171 / 263
Suggerimento
Per testare l’altoparlante usare ”cat /dev/urandom > /dev/audio” oppure speaker-test(1) (^C per inter-
rompere).
Suggerimento
Se non si ottiene l’audio, è possibile che l’altroparlante sia connesso ad un output impostato come muto. I moderni
sistemi sonori hanno svariati output. alsamixer(1) nel pacchetto alsa-utils è utile per configurare le impo-
stazioni del volume e di muto.
ambiente comando
Console Linux setterm -powersave off
X Window (disabilitare il salvaschermo) xset s off
X Window (disabilitare DPMS) xset -dpms
X Window (configurazione tramite GUI del
xscreensaver-command -prefs
salvaschermo)
Per disabilitare i bip sonori è sempre possibile disconnettere l’altoparlante del PC; la rimozione del modulo pcspkr
del kernel fa stessa cosa per conto dell’utente.
Debian Reference 172 / 263
Il comando seguente evita che il programma readline(3) usato da bash(1) emetta suoni bip quando incontra un
carattere di allerta (ASCII=7).
$ echo "set bell-style none">> ~/.inputrc
Ci sono 2 risorse disponibile per l’utente per ottenere la situazione dell’uso della memoria.
• I messaggi di avvio del kernel nel file ”/var/log/dmesg” contengono la dimensione esatta della memoria dispo-
nibile.
• free(1) e top(1) mostrano informazioni sulle risorse di memoria nel sistema mentre è in funzione.
Ecco un esempio.
# grep '\] Memory' /var/log/dmesg
[ 0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k ←-
data, 296k init)
$ free -k
total used free shared buffers cached
Mem: 997184 976928 20256 0 129592 171932
-/+ buffers/cache: 675404 321780
Swap: 4545576 4 4545572
Ci si potrebbe chiedere perché dmesg dice che ci sono 990 MB liberi e free -k dice che sono liberi 320 MB. Ne
mancano più di 600 MB.
Non ci si deve preoccupare della grande dimensione del valore ”used” (usata) e del piccolo valore di ”free” (libera)
nella riga ”Mem:”, ma si può invece leggere la riga sottostante (con 675404 e 321780 nell’esempio precedente) e
rilassarsi.
Per il mio MacBook con 1GB=1048576k DRAM (il sistema video ne ruba un po’), vedo le informazioni seguenti.
fonte dimensione
Dimensione totale in dmesg 1016784k = 1GB - 31792k
Libera in dmesg 990528k
Dimensione totale nella shell 997184k
Libera nella shell 20256k (ma in effetti 321780k)
Tabella 9.18: Elenco di strumenti per verificare la sicurezza e l’integrità del sistema
Con il piccolo script seguente è possibile controllare la presenza di tipici errori con permessi di scrittura per tutti per i
file sbagliati.
# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
Attenzione
Data che il pacchetto debsums usa le somme di controllo MD5 salvate localmente, non può essere com-
pletamente affidabile come strumento di controllo della sicurezza del sistema contro attacchi malevoli.
L’avvio del sistema con un CD live Linux o un CD del debian-installer in modalità ripristino rende semplice la riconfi-
gurazione dell’archiviazione dei dati sul dispositivo di avvio.
Può essere necessario smontare manualmente dalla riga di comando con umount(8) alcuni dispositivi prima di
operare su di essi se sono stati automaticamente montati dal sistema desktop GUI.
L’uso dello spazio su disco può essere valutato con i programmi forniti dai pacchetti mount, coreutils e xdu:
Suggerimento
Si può indirizzare l’output di du(8) a xdu(1x) per far sì che che produca la sua rappresentazione grafica e interattiva,
usando ”du -k . |xdu”, ”sudo du -k -x / |xdu”, ecc.
Debian Reference 174 / 263
Per la configurazione del partizionamento dei dischi, benché fdisk(8) sia considerato lo strumento standard, parted(8)
merita un po’ di attenzione. ”Dati di partizionamento del disco”, ”tabella delle partizioni”, ”mappa delle partizioni” e
”etichetta del disco” sono tutti sinonimi.
I PC più vecchi usano il classico schema basato su MBR (Master Boot Record) per contenere i dati sul partizionamento
del disco nel primo settore, cioè il settore LBA 0 (512 byte).
I PC recenti con Unified Extensible Firmware Interface (UEFI), compresi i Mac basati su Intel, usano lo schema GPT
(GUID Partition Table) per contenere i dati sul partizionamento del disco non nel primo settore.
Sebbene fdisk(8) sia stato lo strumento standard per il partizionamento dei dischi, parted(8) lo sta sostituendo.
Attenzione
Sebbene parted(8) sostenga di creare e ridimensionare anche i file system, è più sicuro fare queste co-
se usando gli strumenti specializzati meglio mantenuti, come mkfs(8) (mkfs.msdos(8), mkfs.ext2(8),
mkfs.ext3(8), mkfs.ext4(8), …) e resize2fs(8).
Nota
Per poter commutare tra GPT e MBR, è necessario cancellare direttamente i primi pochi blocchi del contenuto
del disco (vedere Sezione 9.8.6) e usare ”parted /dev/sdx mklabel gpt” o ”parted /dev/sdx mklabel
msdos”, per fare il cambiamento. Notare che in questo contesto è usato ”msdos” per MBR.
Anche se la riconfigurazione delle partizioni o l’ordine di attivazione di supporti di archiviazione removibili può portare
ad avere nomi diversi per le partizioni, è possibile accedere ad esse in modo coerente. Ciò è utile anche se si hanno
più dischi ed il BIOS/UEFI non assegna loro un nome di dispositivo costante.
• mount(8) con l’opzione ”-U” può montare un device a blocchi usando l’UUID invece di usare il suo nome di file
come ”/dev/sda3”.
• Il file ”/etc/fstab” (vedere fstab(5)) può usare gli UUID.
Suggerimento
Si può scoprire l’UUID di un device a blocchi speciale con blkid(8).
Si può anche sondare UUID e altre informazioni con ”lsblk -f”.
Debian Reference 175 / 263
9.6.4 LVM2
LVM2 è un gestore di volumi logici per il kernel Linux. Con LVM2 si possono creare partizioni dei dischi in volumi
logici invece che sugli hard disk fisici.
LVM richiede quanto segue.
• lvm(8): Principi di base del meccanismo LVM2 (elenco di tutti i comandi di LVM2)
• lvm.conf(5): File di configurazione per LVM2
• lvs(8): Riporta informazioni sui volumi logici
• vgs(8): Riporta informazioni sui gruppi di volumi
Per il file system ext4, il pacchetto e2fsprogs fornisce gli strumenti seguenti.
I comandi mkfs(8) e fsck(8) sono forniti dal pacchetto e2fsprogs come front-end per vari programmi dipendenti
dal file syste (mkfs.tipofs e fsck.tipofs). Per il file system ext4 , sono mkfs.ext4(8) e fsck.ext4(8) (sono
un collegamento simbolico a mke2fs(8) e e2fsck(8)).
Sono disponibili comandi simili per ciascun file system supportato da Linux.
Suggerimento
Il file system Ext4 è il predefinito per il sistema Linux e il suo uso è caldamente raccomandato a meno che non sia
abbiano specifiche ragioni per non farlo.
Lo stato di Btrfs può essere trovato nelle pagine del wiki Debian su btrfs e in quelle del wiki di kernel.org su btrfs.
Ci si aspetta che sarà il prossimo file system predefinito dopo il file system ext4.
Alcuni strumenti permettono l’accesso a file system non supportati del kernel Linux (vedere Sezione 9.8.2).
Debian Reference 176 / 263
In un sistema Linux, il comando mkfs(8) crea i file system ed il comando fsck(8) fornisce funzioni di controllo
dell’integrità e di riparazione dei file system.
Debian ora in modo predefinito non fa fsck periodici dopo la creazione del file system.
Attenzione
In generale l’esecuzione di fsck su file system montati non è sicura.
Suggerimento
Si può eseguire in modo sicuro il comando fsck(8) su tutti i file system, incluso il file system radice, al riavvio
impostando ”enable_periodic_fsck” in ”/etc/mke2fs.conf” e il conteggio massimo di montaggi a 0 usando
”tune2fs -c0 /dev/nome_partizione”. Vedere mke2fs.conf(5) e tune2fs(8).
Per vedere i risultati del comando fsck(8) avviato dallo script di avvio, controllare i file in ”/var/log/fsck/”.
Suggerimento
Per identificare un dispositivo a blocchi si può usare il suo UUID (vedere Sezione 9.6.3) invece del normale nome
di device a blocchi quale «/dev/sda1», «/dev/sda2», …
Debian Reference 177 / 263
A partire da Linux 2.6.30 il kernel ha in modo predefinito il comportamento fornito dalla opzione ”relatime”.
Vedere fstab(5) e mount(8).
Le caratteristiche di un file system possono essere ottimizzate attraverso il suo superblocco usando il comando
tune2fs(8).
• L’esecuzione di ”sudo tune2fs -l /dev/hda1” mostra il contenuto del superblocco del file system in ”/dev/hda1”.
• L’esecuzione di ”sudo tune2fs -c 50 /dev/hda1” cambia per ”/dev/hda1” la frequenza dei controlli dei file
system (l’esecuzione di fsck all’avvio) a 50 avvii.
• L’esecuzione di ”sudo tune2fs -j /dev/hda1” aggiunge la funzionalità di journaling al file system in ”/dev/hda1”,
cioè converte il file system da ext2 a ext3. (Eseguire questo comando su file system non montati.)
• L’esecuzione di ”sudo tune2fs -O extents,uninit_bg,dir_index /dev/hda1 && fsck -pf /dev/hda1”
converte il filesystem in ”/dev/hda1” da ext3 a ext4. (Eseguire questo comando su file system non montati.)
Suggerimento
Nonostante il suo nome, tune2fs(8) non funziona soltanto sui file system ext2, ma anche sui file system ext3 e
ext4.
avvertimento
Prima di giocare con la configurazione dei dischi controllare il proprio hardware e leggere la pagina man di
hdparm(8), perché è una cosa piuttosto pericolosa per l’integrità dei dati.
Si può testare la velocità di accesso ai dischi di un disco rigido, ad esempio ”/dev/hda” con ”hdparm -tT /dev/hda”.
È possibile velocizzare alcuni dischi fissi connessi con (E)IDE con ”hdparm -q -c3 -d1 -u1 -m16 /dev/hda”
che abilita il ”supporto (E)IDE per I/O a 32 bit”, l’uso dell’opzione ”using_dma”, imposta l’opzione ”interrupt-unmask”
e imposta l’”I/O di settori multipli a 16” (pericoloso!).
Si possono testare le capacità della cache in scrittura di un disco fisso, ad esempio ”/dev/sda”, con ”hdparm -W
/dev/sda”. Si può disabilitare la funzionalità di cache in scrittura con ”hdparm -W 0 /dev/sda”.
Potrebbe essere possibile leggere CDROM masterizzati male in unità CD-ROM moderne ad alta velocità rallentandole
con ”setcd -x 2”.
Le unità SSD (Solid State Drive, a stato solido) sono ora rilevate automaticamente.
Ridurre accessi non necessari al disco per prevenire l’usura del disco montando ”tmpfs” in percorsi dei dati volatili
in /etc/fstab.
Debian Reference 178 / 263
Con il demone smartd (8) è possibile monitorare e registrare i dischi fissi che sono conformi a SMART.
Suggerimento
Il demone smartd(8) può essere personalizzato con il file /etc/smartd.conf, incluso per ciò che riguarda le
notifiche dei messaggi di avvertimento.
9.6.12 Specificare una directory per l’archiviazione di dati temporanei usando $TMPDIR
Le applicazioni creano file temporanei normalmente nella directory di memorizzazione temporanea «/tmp». Se
«/tmp» non contiene abbastanza spazio, si può specificare una directory di memorizzazione temporanea usando la
variabile $TMPDIR per i programmi che si comportano in modo corretto.
Le partizioni create al momento dell’installazione su LVM (Logical Volume Manager (funzionalità di Linux) possono es-
sere facilmente ridimensionate concatenando ad esse delle estensioni o suddividendo le loro estensioni su dispositivi
di archiviazione multipli senza riconfigurazioni importanti del sistema.
Se è disponibile una nuova partizione vuota (per esempio ”/dev/sdx”), la si può formattare con mkfs.ext4(1) e
montarla con mount(8) in una directory in cui è necessario avere più spazio. (È necessario copiare il contenuto
originale della directory.)
$ sudo mv work-dir old-dir
$ sudo mkfs.ext4 /dev/sdx
$ sudo mount -t ext4 /dev/sdx work-dir
$ sudo cp -a old-dir/* work-dir
$ sudo rm -rf old-dir
Suggerimento
In alternativa si può montare un file immagine vuoto del disco (vedere Sezione 9.7.5) come device loop (vedere
Sezione 9.7.3). Il reale uso del disco cresce mano a mano che vengono archiviati i dati.
Debian Reference 179 / 263
Se è disponibile una directory vuota (ad esempio ”/percorso/della/dir-vuota”) in un’altra partizione con spazio
disponibile, si può, usando mount(8) con l’opzione ”--bind”, montarla in una directory (ad esempio ”dir-di-lavoro”)
dove è necessario più spazio.
$ sudo mount --bind /path/to/emp-dir work-dir
Se è disponibile dello spazio utilizzabile in un’altra partizione (ad esempio ”/percorso/della/vuota” e ”/percorso/di/
si può creare in essa una directory e impilarla in una vecchia directory (es., ”/percorso/della/vecchia”) in cui
si ha bisogno di spazio usando OverlayFS con un kernel Linux 3.18 o successivo (Debian Stretch 9.0 o successiva).
$ sudo mount -t overlay overlay \
-olowerdir=/path/to/old-dir,upperdir=/path/to/empty,workdir=/path/to/work
Attenzione
Questo è un metodo deprecato. Certo software può non funzionare bene con i ”collegamenti simbolici ad
una directory”. Usare invece gli approcci che usano il ”mount” descritti in precedenza.
Se è disponibile una directory vuota (ad esempio ”/percorso/della/dir-vuota” in un’altra partizione con spazio
disponibile, si può creare un collegamento simbolico alla directory con ln(8).
$ sudo mv work-dir old-dir
$ sudo mkdir -p /path/to/emp-dir
$ sudo ln -sf /path/to/emp-dir work-dir
$ sudo cp -a old-dir/* work-dir
$ sudo rm -rf old-dir
avvertimento
Non usare un ”collegamento simbolico ad una directory” per le directory gestite dal sistema, come ”/opt”.
Un collegamento simbolico simile potrebbe essere sovrascritto quando il sistema viene aggiornato.
Si può creare un file di immagine del disco, ”disco.img”, di un dispositivo non montato, ad esempio la seconda
unità SCSI o serial ATA ”/dev/sdb” usando cp(1) o dd(1) nel modo seguente.
# cp /dev/sdb disk.img
# dd if=/dev/sdb of=disk.img
Si può creare l’immagine del disco del MBR (master boot record) dei PC tradizionali (vedere Sezione 9.6.2), che
risiede nel primo settore del disco IDE primario usando dd(1) nel modo seguente.
# dd if=/dev/hda of=mbr.img bs=512 count=1
# dd if=/dev/hda of=mbr-nopart.img bs=446 count=1
# dd if=/dev/hda of=mbr-part.img skip=446 bs=1 count=66
Se il disco di avvio è un un dispositivo SCSI o serial ATA, sostituire ”/dev/hda” con ”/dev/sda”.
Se si sta creando l’immagine di una partizione del disco originale, sostituire ”/dev/hda” con ”/dev/hda1”, ecc.
Il file immagine del disco, ”disco.img” può essere scritto in un dispositivo non montato, ad esempio la seconda unità
SCSI ”/dev/sdb” di dimensione corrispondente nel modo seguente.
# dd if=disk.img of=/dev/sdb
Analogamente il file immagine di una partizione del disco, ”partizione.img” può essere scritto in una partizione
non montata, ad esempio la prima partizione della seconda unità SCSI ”/dev/sdb1” di dimensione corrispondente
nel modo seguente.
# dd if=partition.img of=/dev/sdb1
Un’immagine di disco ”partizione.img” contenente l’immagine di un’unica partizione, può essere montata e smon-
tata usando il device loop nel modo seguente.
# losetup --show -f partition.img
/dev/loop0
# mkdir -p /mnt/loop0
# mount -t auto /dev/loop0 /mnt/loop0
...hack...hack...hack
# umount /dev/loop0
# losetup -d /dev/loop0
Ogni partizione di un’immagine di disco ”disco.img” contentente più partizioni, può essere montata usando il device
loop.
# losetup --show -f -P disk.img
/dev/loop0
# ls -l /dev/loop0*
brw-rw---- 1 root disk 7, 0 Apr 2 22:51 /dev/loop0
brw-rw---- 1 root disk 259, 12 Apr 2 22:51 /dev/loop0p1
brw-rw---- 1 root disk 259, 13 Apr 2 22:51 /dev/loop0p14
brw-rw---- 1 root disk 259, 14 Apr 2 22:51 /dev/loop0p15
# fdisk -l /dev/loop0
Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1
In alternativa, un risultato simile può essere ottenuto utilizzando i device mapper creati da kpartx(8), contenuto nel
pacchetto kpartx, nel modo seguente.
# kpartx -a -v disk.img
add map loop0p1 (253:0): 0 3930112 linear 7:0 262144
add map loop0p14 (253:1): 0 6144 linear 7:0 2048
add map loop0p15 (253:2): 0 253952 linear 7:0 8192
# fdisk -l /dev/loop0
Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1
Si può pulire un file con immagine di disco ”disco.img” da tutti i file cancellati creando un’immagine pulita ”nuova.img”
nel modo seguente.
# mkdir old; mkdir new
# mount -t auto -o loop disk.img old
# dd bs=1 count=0 if=/dev/zero of=new.img seek=5G
# mount -t auto -o loop new.img new
# cd old
# cp -a --sparse=always ./ ../new/
# cd ..
# umount new.img
# umount disk.img
Se ”disco.img” è in ext2, ext3 o ext4, si può anche usare zerofree(8), contenuto nel pacchetto zerofree, nel
modo seguente.
# losetup --show -f disk.img
/dev/loop0
# zerofree /dev/loop0
# cp --sparse=always disk.img new.img
# losetup -d /dev/loop0
Si può creare un’immagine di disco vuota ”disco.img”, che può crescere fino a 5GiB, usando dd(1) nel modo
seguente.
$ dd bs=1 count=0 if=/dev/zero of=disk.img seek=5G
$ du -h disk.img
83M disk.img
La dimensione del file ”disco.img” è di 5.0GiB e il suo effettivo uso del disco è di soli 83MiB. Questa discrepanza
è resa possibile dal fatto che il file system ext4 può contentere file sparsi.
Suggerimento
L’uso effettivo del disco dei file sparsi cresce insieme ai dati che in essi sono scritti.
Usando operazioni simili su device creati dal device loop o dal device mapper, come in Sezione 9.7.3, si può partizio-
nare tale immagine di disco ”disco.img” usando parted(8) o fdisk(8) e si può creare in essa file system usando
mkfs.ext4(8), mkswap(8), ecc.
Si può creare un file immagine ISO9660 ”cd.iso” dell’albero di directory originale in ”directory_sorgente”
usando genisoimage(1) fornito da cdrkit nel modo seguente.
# genisoimage -r -J -T -V volume_id -o cd.iso source_directory
Analogamente, si può creare un file immagine ISO9660 avviabile, ”cdboot.iso”, da un albero di directory simile a
quello del debian-installer in ”directory_sorgente” nel modo seguente.
# genisoimage -r -o cdboot.iso -V volume_id \
-b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table source_directory
In questo esempio viene usato per l’avvio il bootloader Isolinux (vedere Sezione 3.1.2).
Si può calcolare il valore md5sum e creare l’immagine ISO9660 direttamente dal device CD-ROM nel modo seguente.
$ isoinfo -d -i /dev/cdrom
CD-ROM is in ISO 9660 format
...
Logical block size is: 2048
Volume size is: 23150592
...
# dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror | md5sum
# dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror > cd.iso
avvertimento
Per ottenere un risultato corretto, si deve accuratamente evitare il bug di Linux riguardante il read ahead
del file system ISO9660, come nell’esempio precedente.
Suggerimento
Per wodim(1), fornito da cdrkit, un DVD è semplicemente un grande CD.
# wodim --devices
Poi si inserisce un CD-R vergine nell’unità CD e si scrive il file immagine ISO9660 ”cd.iso” su questo device, ad
esempio ”/dev/hda”, usando wodim(1) nel modo seguente.
# wodim -v -eject dev=/dev/hda cd.iso
Suggerimento
Se il sistema desktop usato monta automaticamente i CD, prima di usare wodim(1) smontarlo usando dalla console
”sudo umount /dev/hda”.
Se ”cd.iso” contiene un’immagine ISO9660, lo si può montare manualmente in ”/cdrom” usando il comando
seguente.
# mount -t iso9660 -o ro,loop cd.iso /cdrom
Suggerimento
I sistemi desktop moderni possono montare automaticamente i supporti removibili come i CD in formato ISO9660
(vedere Sezione 10.1.7).
Questa sezione tratta della manipolazione diretta dei dati binari su supporti di archiviazione.
Il metodo di visualizzazione dei dati binai più basilare è l’uso del comando ”od -t x1”.
Suggerimento
HEX è usato come acronimo per il formato esadecimale con base 16. OCTAL è usato per il formato ottale con
base 8. ASCII è usato per American Standard Code for Information Interchange, cioè la normale codifica per testi
in inglese. EBCDIC è usato per Extended Binary Coded Decimal Interchange Code usato nei sistemi operativi
deimainframe IBM.
Tabella 9.22: Elenco di pacchetti per manipolare file senza montare i dischi
I sistemi software RAID offerti dal kernel Linux forniscono un livello di ridondanza dei dati nel file system a livello del
kernel, allo scopo di ottenere una più alta affidabilità dell’archiviazione.
Esistono strumenti per aggiungere dati ridondanti a file a livello di programmi applicativi per ottenere anche in questo
modo una più alta affidabilità dell’archiviazione.
Suggerimento
Si possono ripristinare i file sui file system ext2 usando i comandi list_deleted_inodes e undel di debugfs(8)
nel pacchetto e2fsprogs.
Debian Reference 186 / 263
Tabella 9.24: Elenco di pacchetti per recupero di file dati ed analisi forensi.
Quando dei dati sono troppo grandi affinché ne venga fatto il backup in un file singolo, si può fare il backup dei suoi
contenuti dopo averlo suddiviso in pezzi di, ad esempio 2000MiB, che saranno successivamente riuniti a formare il
file originale.
$ split -b 2000m large_file
$ cat x* >large_file
Attenzione
Assicurarsi di non avere altri file che iniziano con ”x” per evitare conflitti nei nomi.
Per ripulire i contenuti di un file, come un file di registro, non usare rm(1) per cancellarlo e poi crearne un altro, perché
nell’intervallo tra i due comandi potrebbe essere ancora possibile accedere al file. Quello che segue è il metodo sicuro
per pulire il contenuto di un file.
$ :>file_to_be_cleared
Esistono diversi modi di cancellare completamente i dati da un intero device simile ad un disco fisso, ad esempio una
chiavetta USB in ”/dev/sda”.
Attenzione
Prima di eseguire i comandi indicati in seguito controllare la posizione della chiavetta USB con mount(8).
Il device a cui punta ”/dev/sda” potrebbe essere il disco fisso SCSI o Serial-ATA che contiene l’intero
sistema.
Cancellare tutti i contenuti del disco reimpostando tutti i dati a 0 con il comando seguente.
# dd if=/dev/zero of=/dev/sda
Cancellare tutto sovrascrivendo dati casuali in modo molto efficiente con il comando seguente.
# shred -v -n 1 /dev/sda
Area inutilizzate di un disco fisso (o di una chiavetta USB), ad esempio ”/dev/sdb1”, potrebbero contenere ancora
i dati cancellati stessi, dato che questi sono semplicemente scollegati dal file system. È possibile pulire queste aree
sovrascrivendole.
# mount -t auto /dev/sdb1 /mnt/foo
# cd /mnt/foo
# dd if=/dev/zero of=junk
dd: writing to `junk': No space left on device
...
# sync
# umount /dev/sdb1
avvertimento
Solitamente questo procedimento è sufficientemente buono per le chiavette USB. Ma non è perfetto. La
maggior parte dei nomi di file cancellati e dei loro attributi potrebbe ancora essere nascosta e rimanere nel
file system.
Debian Reference 188 / 263
Anche se un file è stato cancellato per errore, fintanto che è usato da un’applicazione (in lettura o scrittura), è possibile
recuperarlo.
Per esempio, provare a fare quanto segue.
$ echo foo > bar
$ less bar
$ ps aux | grep ' less[ ]'
bozo 4775 0.0 0.0 92200 884 pts/8 S+ 00:18 0:00 less bar
$ rm bar
$ ls -l /proc/4775/fd | grep bar
lr-x------ 1 bozo bozo 64 2008-05-09 00:19 4 -> /home/bozo/bar (deleted)
$ cat /proc/4775/fd/4 >bar
$ ls -l
-rw-r--r-- 1 bozo bozo 4 2008-05-09 00:25 bar
$ cat bar
foo
I file con collegamenti fisici possono essere identificati usando ”ls -li”.
$ ls -li
total 0
2738405 -rw-r--r-- 1 root root 0 2008-09-15 20:21 bar
2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 baz
2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 foo
Entrambi ”pippo” e ”pluto” hanno il numero di collegamenti uguale a ”2” (>1), il che mostra che hanno collegamenti
fisici. Hanno il numero di inode, ”2738404”, in comune. Ciò significa che sono lo stesso file con un collegamento
fisico. Nell’eventualità che non si trovino tutti i file con collegamento fisico, li si possono cercare in base all’inode, ad
esempio ”2738404”, nel modo seguente.
# find /path/to/mount/point -xdev -inum 2738404
Tutti i file cancellati ma aperti consumano spazio su disco, anche se non sono visibili con il normale comando du(1).
Possono essere elencati, insieme alla loro dimensione, nel modo seguente.
# lsof -s -X / |grep deleted
Debian Reference 189 / 263
Avendo l’accesso fisico alla macchina, chiunque può facilmente ottenere privilegi di root e accedere a tutti i file nel
PC (vedere Sezione 4.6.4). Ciò significa che il sistema delle password di login non può mettere al sicuro i dati privati
e sensibili contro un possibile furto del PC. Per farlo deve essere usata una tecnologia di cifratura dei dati. Sebbene
GNU Privacy Guard (vedere Sezione 10.3) possa cifrare file, richiede un po’ di lavoro da parte dell’utente.
dm-crypt facilita la cifratura automatica dei dati attraverso moduli nativi del kernel Linux con un minimo lavoro da parte
dell’utente usando device-mapper.
Attenzione
La cifratura dei dati consuma tempo della CPU, ecc. I dati cifrati diventano inaccessibili se la password
viene persa. Valutare bene i suoi costi e benefici.
Nota
È possibile installare un intero file system Debian in un disco cifrato con l’Installatore Debian (lenny o successivo)
usando dm-crypt/LUKS e initramfs.
Suggerimento
Per lo strumento di cifratura in spazio utente GNU Privacy Guard vedere Sezione 10.3.
Si può cifrare il contenuto di dispositivi di memorizzazione di massa removibili, ad esempio una chiavetta USB in
”/dev/sdx”, usando dm-crypt/LUKS. Formattarla semplicemente nel modo seguente.
# fdisk /dev/sdx
... "n" "p" "1" "return" "return" "w"
# cryptsetup luksFormat /dev/sdx1
...
# cryptsetup open /dev/sdx1 secret
...
# ls -l /dev/mapper/
total 0
crw-rw---- 1 root root 10, 60 2021-10-04 18:44 control
lrwxrwxrwx 1 root root 7 2021-10-04 23:55 secret -> ../dm-0
# mkfs.vfat /dev/mapper/secret
...
# cryptsetup close secret
Debian Reference 190 / 263
Si può poi montarla come una chiavetta qualunque in ”/media/nomeutente/etichetta_disco”, tranne per il fatto
che verrà chiesta la password (vedere Sezione 10.1.7) nei moderni ambienti desktop che usano il pacchetto udisks2.
La differenza è che ogni dato scritto in essa è cifrato. L’inserimento della password può essere automatizzato usando
un portachiavi (vedere Sezione 10.3.6).
In alternativa si può formattare il supporto con diversi file system, es. ext4 con ”mkfs.ext4 /dev/mapper/sdx1”.
Se viene invece usato btrfs, deve essere installato il pacchetto udisks2-btrfs. Per questi file system può essere
necessario configurare la proprietà e i permessi dei file.
Ad esempio, una partizione di disco cifrata creata con dm-crypt/LUKS su ”/dev/sdc5” dall’Installatore Debian può
essere montata in ”/mnt” nel modo seguente:
$ sudo cryptsetup open /dev/sdc5 ninja --type luks
Enter passphrase for /dev/sdc5: ****
$ sudo lvm
lvm> lvscan
inactive '/dev/ninja-vg/root' [13.52 GiB] inherit
inactive '/dev/ninja-vg/swap_1' [640.00 MiB] inherit
ACTIVE '/dev/goofy/root' [180.00 GiB] inherit
ACTIVE '/dev/goofy/swap' [9.70 GiB] inherit
lvm> lvchange -a y /dev/ninja-vg/root
lvm> exit
Exiting.
$ sudo mount /dev/ninja-vg/root /mnt
9.10 Il kernel
Debian distribuisce, per le architetture supportate, kernel Linux modulari contenuti in pacchetti.
Se si sta leggendo questa documentazione probabilmente non è necessario compilare in proprio il kernel Linux.
Molte caratteristiche di Linux possono essere configurate tramite parametri del kernel, nei modi seguenti.
Per i dettagli vedere ”The Linux kernel user’s and administrator’s guide » The kernel’s command-line parameters”.
La maggior parte dei normali programmi non ha bisogno degli header del kernel per essere compilata, anzi di fatto
può corrompersi se si usano direttamente gli header. Questi programmi dovrebbero essere compilati nel sistema
Debian usando gli header in ”/usr/include/linux” e ”/usr/include/asm” forniti dal pacchetto libc6-dev
(creato dal pacchetto sorgente glibc).
Debian Reference 191 / 263
Nota
Per compilare alcuni programmi specifici per il kernel, come moduli per il kernel da fonti esterne e il demone
automounter (amd), è necessario includere nella propria riga di comando il percorso ai corrispondenti header del
kernel, ad esempio ”-I/usr/src/linux-particular-version/include/”.
Tabella 9.26: Elenco di pacchetti chiave da installare per la ricompilazione del kernel in un sistema Debian
Se si usa initrd nello Sezione 3.1.2, ci si assicuri di leggere le informazioni relative in initramfs-tools(8),
update-initramfs(8), mkinitramfs(8) e initramfs.conf(5).
avvertimento
Quando si compilano i sorgenti del kernel Linux, non mettere collegamenti simbolici alle directory nell’albero
dei sorgenti (ad esempio, ”/usr/src/linux*”) in ”/usr/include/linux” e ”/usr/include/asm”.
(Alcuni documenti ormai datati suggeriscono di farlo.)
Nota
Quando si compila il kernel Linux più recente nel sistema Debian stable, potrebbe essere necessario l’uso delle
versioni backport degli strumenti piu recenti da Debian unstable.
module-assistant(8) (o la sua forma abbreviata m-a) aiuta gli utenti a compilare e installare pacchetti di moduli
facilmente per uno o più kernel personalizzati.
Il DKMS (Dynamic Kernel Module Support, supporto dinamico per i moduli del kernel) è un nuova infrastruttura
indipendente dalla distribuzione progettata per permettere l’aggiornamento di singoli moduli del kernel senza cam-
biare tutto il kernel. È utilizzata per il mantenimento dei moduli esterni all’albero dei sorgenti. Rende anche molto
facile la ricompilazione dei moduli quando si aggiornano i kernel.
Debian Reference 192 / 263
9.10.4 Compilare i sorgenti del kernel: il metodo raccomandato dal Team del Kernel di
Debian
Per compilare pacchetti binari del kernel personalizzati a partire dai sorgenti originali del kernel, si deve usare il target
”deb-pkg fornito.
$ sudo apt-get build-dep linux
$ cd /usr/src
$ wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-version.tar.xz
$ tar --xz -xvf linux-version.tar.xz
$ cd linux-version
$ cp /boot/config-version .config
$ make menuconfig
...
$ make deb-pkg
Suggerimento
Il pacchetto linux-source-versione fornisce i sorgenti del kernel Linux con le patch Debian come
”/usr/src/linux-versione.tar.bz2”.
Per compilare pacchetti binari specifici a partire dal pacchetto Debian dei sorgenti del kernel, si devono usare i target
”binary-arch_architettura_featureset_flavour” in ”debian/rules.gen”.
$ sudo apt-get build-dep linux
$ apt-get source linux
$ cd linux-3.*
$ fakeroot make -f debian/rules.gen binary-arch_i386_none_686
Ulteriori informazioni:
Un driver hardware è il codice eseguito nelle CPU principali del sistema target. La maggior parte dei driver hardware
è ora disponibile come software libero ed è inclusa nei normali pacchetti Debian dei kernel nell’area main.
• driver GPU
– driver GPU Intel (main)
– driver GPU AMD/ATI (main)
– driver GPU NVIDIA (main per il driver nouveau e non-free per i driver solo binari supportati dal produttore.
Il firmware è il codice o i dati caricati sul dispositivo attaccato al sistema target (ad esempio microcodice della CPU,
codice di rendering eseguito nella GPU oppure dati FPGA/CPLD, …). Alcuni pacchetti firmware sono disponibili come
software libero, ma molti pacchetti firmware non lo sono dato che contengono dati binari senza sorgenti. L’installazione
di questi dati del firmware è necessaria affinché il dispositivo funzioni come atteso.
• I pacchetti dei dati del firmware contengono dati caricati nella memoria volatile nel dispositivo obiettivo.
– firmware-linux-free (main)
Debian Reference 193 / 263
– firmware-linux-nonfree (non-free-firmware)
– firmware-linux-* (non-free-firmware)
– *-firmware (non-free-firmware)
– intel-microcode (non-free-firmware)
– amd64-microcode (non-free-firmware)
• I pacchetti dei programmi di aggiornamento del firmware che aggiornano i nella memoria non volatile del dispositivo
target.
– fwupd (main): demone per aggiornamento del firmware che scarica dati del firmware da Linux Vendor Firmware
Service.
– gnome-firmware (main): frontend GTK per fwupd
– plasma-discover-backend-fwupd (main): frontend Qt per fwupd
Notare che l’accesso ai pacchetti non-free-firmware è fornito dai supporti ufficiali di installazione per offrire un’e-
sperienza di installazione funzionale a partire da Debian 12 Bookworm. La sezione non-free-firmware è descritta
in Sezione 2.1.5.
Notare anche che i dati di firmware che fwupd scarica da Linux Vendor Firmware Service e che sono caricati nel
kernel Linux in esecuzione potrebbero essere non-free.
L’uso di sistemi virtualizzati permette di eseguire più istanze di un sistema simultaneamente su un singolo hardware.
Suggerimento
Vedere wiki Debian: SystemVirtualization.
• Pacchetti per l’emulazione hardware completa come quelli installati dal metapacchetto games-emulator.
• Emulazione per lo più a livello di CPU con alcune emulazioni di dispositivi di I/O come QEMU.
• Virtualizzazione per lo più a livello di CPU con alcune emulazioni di dispositivi di I/O come macchine virtuali basate
sul Kernel (KVM).
• Virtualizzazione in contenitori a livello di SO con supporto a livello del kernel come LXC (Linux Containers), Docker,
systemd-nspawn(1), ...
• Virtualizzazione dell’accesso al file system a livello di SO con override del percorso dei file nelle chiamate di libreria
di sistema come chroot.
• Virtualizzazione dell’accesso al file system a livello di SO con override della proprietà dei file nelle chiamate di
libreria di sistema come chroot.
• Emulazione delle API del SO come Wine
• Virtualizzazione a livello di interprete con selezione del suo eseguibile e override della libreria a runtime come
virtualenv e venv per Python.
La virtualizzazione in contenitori usa Sezione 4.7.5 ed è la tecnologia che fa da backend per Sezione 7.7.
Ecco alcuni pacchetti che aiutano a configurare un sistema virtualizzato.
Vedere l’articolo di Wikipedia Comparison of platform virtual machines per una comparazione dettagliata di diverse
soluzioni per la virtualizzazione di piattaforme.
Debian Reference 194 / 263
Nota
I kernel Debian predefiniti hanno il supporto per KVM a partire da lenny.
Suggerimento
È possibile esportare solamente la prima partizione di ”disk.img” usando l’opzione ”-P 1”per qemu-nbd(8).
Debian Reference 196 / 263
Se si desidera provare un nuovo ambiente Debian da una console in terminale, è raccomandato usare chroot. Ciò
permette di eseguire applicazioni in console di Debian unstable e testing senza i consueti rischi associati e senza
riavviare. chroot(8) è il metodo più basilare.
Attenzione
Gli esempi seguenti presuppongono che entrambi i sistemi, quello genitore e quello chroot, condividano la
stessa architettura amd64 della CPU.
Sebbene sia possibile creare manualmente un ambiente chroot(8) usando debootstrap(1), ciò richiede un impe-
gno non banale.
Il pacchetto sbuild per compilare pacchetti Debian da sorgenti usa l’ambiente chroot gestito dal pacchetto schroot.
Viene fornito con uno script ausiliario sbuild-createchroot(1). Vediamo come funziona eseguendolo nel modo
seguente.
$ sudo mkdir -p /srv/chroot
$ sudo sbuild-createchroot -v --include=eatmydata,ccache unstable /srv/chroot/unstable- ←-
amd64-sbuild http://deb.debian.org/debian
...
Si può vedere come debootstrap(8) popoli i dati di sistema per l’ambiente unstable sotto ”/srv/chroot/unstable-am
per un sistema di compilazione minimale.
Si può fare il login in questo ambiente usando schroot(1).
$ sudo schroot -v -c chroot:unstable-amd64-sbuild
Si può vedere come venga creata una shell di sistema in esecuzione nell’ambiente unstable.
Nota
Il file ”/usr/sbin/policy-rc.d” che termina sempre con 101 evita che, in un si-
stema Debian, i programmi demone vengano avviati automaticamente. Vedere
”/usr/share/doc/init-system-helpers/README.policy-rc.d.gz”.
Nota
Alcuni programmi in chroot per funzionare possono aver bisogno dell’accesso a più file nel sistema genitore di
quanti ne fornisca sbuild-createchroot. Per esempio, può essere necessario montare con bind o copiare
”/sys”, ”/etc/passwd”, ”/etc/group”, ”/var/run/utmp”, ”/var/log/wtmp”, ecc.
Suggerimento
Il pacchetto sbuild aiuta a costruire un sistema chroot e compila un pacchetto dentro la chroot usando schroot
come suo backend. È un sistema ideale per controllare le dipendenze di compilazione. Vedere ulteriori dettagli su
sbuild nel wiki Debian e l’esempio di configurazione di sbuild nella ”Guida per il Manutentore Debian”.
Suggerimento
Il comando systemd-nspawn(1) aiuta ad eseguire un comando o un sistema operativo in un contenitore leggero
in modo simile a chroot. È più potente dato che usa gli spazi dei nomi per virtualizzare completamente l’albero
dei processi, IPC, nome host, nome di dominio e, opzionalmente, la rete e i database degli utenti. Vedere systemd-
nspawn.
Debian Reference 197 / 263
Se si desidera provare un nuovo ambiente desktop con GUI per qualsiasi SO, l’autore raccomanda l’uso di QEMU o
KVM in un sistema Debian stable per eseguire sistemi desktop multipli in maniera sicura usando la virtualizzazione.
Permettono di eseguire qualsiasi applicazione desktop, incluse quelle di Debian unstable e testing, senza i
consueti rischi ad esse associati e senza riavviare.
Dato che QEMU puro è molto lento, è raccomandata la sua velocizzazione con KVM quando il sistema host lo
permette.
Virtual Machine Manager noto anche come virt-manager è un comodo strumento GUI per gestire macchine virtuali
KVM con libvirt.
L’immagine disco virtuale ”virtdisk.qcow2” contenente un sistema Debian per QEMU si può creare con i piccoli
CD dell’installatore Debian nel modo seguente.
$ wget https://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso
$ qemu-img create -f qcow2 virtdisk.qcow2 5G
$ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256
...
Suggerimento
Eseguire altre distribuzioni GNU/Linux come Ubuntu e Fedora in una virtualizzazione è un ottimo metodo per impa-
rare trucchetti di configurazione. Anche altri sistemi operativi proprietari possono essere eseguiti tranquillamente
in queste virtualizzazioni GNU/Linux.
Capitolo 10
In questo capitolo sono descritti strumenti e trucchi per gestire dati binari e di testo in un sistema Debian.
avvertimento
L’accesso in scrittura non coordinato a device a cui si sta attivamente accedendo e a file da parte di processi
diversi deve essere evitato per prevenire le race condition. Per evitare ciò devono essere usati i meccanismi
di lock dei file utilizzando flock(1).
Ecco una tabella riassuntiva degli strumenti di archiviazione e compressione disponibili per il sistema Debian.
avvertimento
Non impostare la variabile ”$TAPE” a meno che non si sappia esattamente cosa aspettarsi. Cambia il
comportamento di tar(1).
• Gli archivi tar(1) compressi con gzip usano l’estensione di file ”.tgz” o ”.tar.gz”.
• Gli archivi tar(1) compressi con xz usano l’estensione di file ”.txz” o ”.tar.xz”.
• La popolarità dei metodi di compressione negli strumenti FOSS come tar(1) è cambiata nel tempo nel modo
seguente gzip → bzip2 → xz
• cp(1), scp(1) e tar(1) possono avere alcune limitazioni per file speciali. cpio(1) è più versatile.
• cpio(1) è progettato per essere usato con find(1) ed altri comandi adatti per creare script di backup, dato che la
porzione di selezione dei file dello script può essere testata in modo autonomo.
• La struttura interna dei file di dati di LibreOffice è quella dei file «.jar» che può essere aperta anche da unzip.
• Lo strumento multipiattaforma di fatto usato per gli archivi è zip. Usarlo come «zip -rX» per ottenere la massima
compatibilità. Usare anche l’opzione «-s» se è importante la dimensione massima dei file.
Ecco una tabella riassuntiva dei semplici strumenti di copia e backup disponibili in un sistema Debian.
La copia dei file con rsync(8) offre un insieme di funzionalità più ricco di altri strumenti.
• l’algoritmo delta-transfer, che invia solamente le differenze tra il file sorgente ed il file esistente nella destinazione
• algoritmo veloce di verifica (predefinito) che cerca i file la cui dimensione o il cui orario di ultima modifica sono
cambiati
• opzioni ”--exclude” e ”--exclude-from” simili a quelle di tar(1)
• sintassi con ”una barra / alla fine della directory sorgente” che evita di dover creare un livello aggiuntivo di directory
nella destinazione
Suggerimento
Gli strumenti di controllo delle versioni VCS (Version control system) in Tabella 10.14 possono essere usati come
strumenti di copia e sincronizzazione multidirezionali.
Ecco diversi modi di archiviare ed estrarre archivi con l’intero contenuto della directory ”./sorgente”, usando diversi
strumenti.
GNU tar(1):
$ tar -cvJf archive.tar.xz ./source
$ tar -xvJf archive.tar.xz
Debian Reference 200 / 263
cpio(1):
$ find ./source -xdev -print0 | cpio -ov --null > archive.cpio; xz archive.cpio
$ zcat archive.cpio.xz | cpio -i
Ecco diversi modi di copiare l’intero contenuto della directory ”./sorgente”, usando diversi strumenti.
rsync(8):
# cd ./source; rsync -aHAXSv . /dest
# cd ./source; rsync -aHAXSv . [email protected]:/dest
In alternativa si può usare la sintassi con ”una barra / alla fine della directory sorgente”.
# rsync -aHAXSv ./source/ /dest
# rsync -aHAXSv ./source/ [email protected]:/dest
GNU tar(1):
# (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
# (cd ./source && tar cf - . ) | ssh [email protected] '(cd /dest && tar xvfp - )'
cpio(1):
Debian Reference 202 / 263
In tutti gli esempi contenenti ”.”, si può sostituire ”.” con ”pippo” per copiare i file dalla directory ”./sorgente/pippo”
alla directory ”/dest/pippo”.
In tutti gli esempi contenenti ”.”, si può sostituire ”.” con il percorso assoluto ”/percorso/di/sorgente/pippo”
per evitare di fare ”cd ./sorgente;”. I file verranno copiati in posizioni diverse a seconda dello strumento utilizzato,
come descritto qui di seguito.
Suggerimento
rsync(8) e GNU cp(1) hanno l’opzione ”-u” per saltare i file che sono più recenti nella destinazione.
find(1) viene usato per selezionare i file per i comandi di archiviazione e copia (vedere Sezione 10.1.3 e Sezio-
ne 10.1.4) o per xargs(1) (vedere Sezione 9.4.9). Questo funzionamento può essere migliorato usando le sue
opzioni di comando.
La sintassi base di find(1) può essere riassunta nel modo seguente.
2. Limitare globalmente la ricerca al file system da cui è richiamato e usare espressioni regolari ERE (vedere
Sezione 1.6.2)
3. Escludere i file che corrispondono all’espressione regolare ”.*\.cpio” o ”.*~” dalla ricerca fermando la loro
elaborazione
4. Escludere le directory che corrispondono all’espressione regolare ”.*/\.git” dalla ricerca fermando la loro
elaborazione
5. Escludere i file più grandi di 99 Megabyte (unità di 1048576 byte) dalla ricerca fermando la loro elaborazione
6. Stampare i nomi di file che soddisfano le condizioni di ricerca precedenti e che siano più recenti di ”/percorso/di/mar
Notare nell’esempio precedente l’uso della parte di comando ”-prune -o per escludere file.
Nota
Alcune opzioni per find(1) potrebbero non essere supportate per i sistemi *nix non Debian. In questi casi, cambia-
re le invocazioni in quelle adatte corrispondenti e sostituire ”-print0” con ”-print”. Potrebbe essere necessario
modificare anche comandi correlati.
Quando si deve scegliere il supporto di archiviazione di dati informatici per un importante archivio di dati, si dovrebbe
porre attenzione alle limitazioni dei supporti. Per piccoli backup di dati personali, io uso CD-R e DVD-R scegliendoli
in base alla marca del produtttore e conservandoli in un ambiente fresco, all’ombra, asciutto e pulito. (I supporti di
archiviazione a nastro sembrano molto popolari per gli usi professionali.)
Nota
Le casseforti a prova di fuoco sono pensate per i documenti cartacei. La maggior parte dei supporti di archiviazione
di dati informatici ha una tolleranza più bassa alle alte temperature rispetto alla carta. Di solito mi affido a copie
multiple cifrate sicure conservate in diverse posizioni sicure.
Durata di vita ottimistica di diversi supporti di archiviazione da dati raccolti in rete (per lo più dalle informazioni dei
produttori).
Questi tempi non tengono conto dei danni meccanici causati dal maneggiamento, ecc.
Cicli di scrittura ottimistici di diversi supporti di archiviazione da dati raccolti in rete (per lo più dalle informazioni dei
produttori).
Attenzione
I valori di durata di vita e dei cicli di scrittura riportati non dovrebbero essere usati per prendere decisioni
riguardo all’archiviazione di dati critici. Consultare le informazioni specifiche per ciascun prodotto forniti dal
produttore.
Suggerimento
Dato che i CD/DVD-R e la carta hanno un solo ciclo di scrittura, prevengono per loro stessa natura le perdite
accidentali di dati per sovrascrittura. Questo è un vantaggio!
Suggerimento
Se è necessario fare backup frequenti e veloci di una grande quantità di dati, un disco fisso su un host remoto
connesso con una connessione veloce, potrebbe essere l’unica soluzione realistica.
Suggerimento
Se si usano supporti riscrivibili per i backup, l’uso di file system come btrfs o zfs che supportano solo istantanee in
sola lettura potrebbe essere una buona idea.
• USB
• IEEE 1394 / FireWire
• Scheda PC
Gli ambienti desktop moderni, come GNOME e KDE, possono montare questi dispositivi removibili automaticamente
senza una voce corrispondente in ”/etc/fstab”.
• Il pacchetto udisks2 fornisce un demone e le utilità associate per montare e smontare questi dispositivi.
• D-bus crea eventi per dare inizio ai processi automatici.
Suggerimento
I dispositivi montati automaticamente hanno l’opzione di mount ”uhelper=” che viene usata da umount(8).
Suggerimento
Nei moderni ambienti desktop il montaggio automatico avviene solo quando i device dei supporti removibili non
sono elencati in ”/etc/fstab”.
Il punto di mount negli ambienti desktop moderni viene scelto come ”/media/nomeutente/etichetta_disco”
che può essere personalizzato nel modo seguente.
Suggerimento
Può essere necessario fornire come opzione di montaggio la scelta della codifica (vedere Sezione 8.1.3).
Suggerimento
L’uso del menu GUI per smontare un file system può rimuovere il suo nodo di device generato dinamicamente come
”/dev/sdc”. Se si desidera mantenere il suo nodo di device, smontarlo con il comando umount(8) dal prompt di
shell.
Quando si condividono dati con un altro sistema attraverso dispositivi di archiviazione removibili, quest’ultimi andreb-
bero formattati con un filesystem comune supportato da entrambi i sistemi. Quello che segue è un elenco delle scelte
possibili per il file system.
Suggerimento
Vedere Sezione 9.9.1 per la condivisione interpiattaforma di dati usando cifratura a livello di dispositivo.
Il file system FAT è supportato da quasi tutti i sistemi operativi moderni ed è piuttosto utile per scopi di scambio di dati
attraverso supporti come dischi fissi removibili.
Quando si formatta un dispositivo come un disco fisso removibile con il file system FAT per la condivisione interpiat-
taforma di dati, le scelte seguenti dovrebbero essere quelle più sicure.
• Partizionare con fdisk(8), cfdisk(8) o parted(8) (vedere Sezione 9.6.2) creando un’unica partizione primaria e
marcarla nel modo seguente.
Tabella 10.3: Elenco di possibili scelte per il file system di dispositivi di archiviazione removibili con scenari di uso
tipici
Quando si usano i file system FAT o ISO9660 per la condivisione dei dati, per essere sicuri dei risultati, si dovrebbero
considerare i seguenti aspetti.
• Archiviare prima i file in un file di archivio usando tar(1) o cpio(1) per mantenere i nomi di file lunghi, i collegamenti
simbolici, i permessi Unix sui file originali e le informazioni sui proprietari.
• Suddividere il file di archivio in pezzi più piccoli di 2 GiB con il comando split(1) per proteggerli da limitazioni sulla
dimensione dei file.
• Cifrare il file archivio per proteggere i suoi contenuti da accesso non autorizzato.
Nota
Il file system FAT, per sua stessa natura, permette una dimensione massima per i file di (2^32 - 1) byte =
(4GiB - 1 byte). Per alcune applicazioni su sistemi operativi a 32 bit più vecchi, la dimensione massima
per i file era ancora più piccola: (2^31 - 1) byte = (2GiB - 1 byte). Debian non soffre di quest’ultima
limitazione.
Nota
La stessa Microsoft non raccomanda l’uso di FAT per le unità o le partizioni più grandi di 200 MB. Microsoft evidenzia
le sue limitazioni, quali un uso inefficiente dello spazio su disco, nel documento ”Overview of FAT, HPFS, and NTFS
File Systems”. Naturalmente per Linux si dovrebbe normalmente usare il file system ext4.
Suggerimento
Per maggiori informazioni sui file system e sull’accesso ad essi, leggere il ”Filesystems HOWTO”.
Quando si condividono dati con un altro sistema attraverso una rete, si dovrebbero tenere a mente i servizi comuni.
Ecco alcuni suggerimenti.
Debian Reference 207 / 263
Tabella 10.4: Elenco dei servizi di rete da scegliere in base allo scenario di uso tipico
Sebbene questi file system montati in rete e metodi di trasferimento di file attraverso la rete siano piuttosto comodi
per la condivisione dei dati, possono essere non sicuri. La loro connessione di rete deve essere resa sicura nel modo
seguente.
Tutti sanno che i computer a volte si danneggiano oppure errori umani causano danni al sistema e ai dati. Le opera-
zioni di backup e ripristino sono una parte essenziale di un’amministrazione di sistema di successo. Tutte i possibili
modi in cui si possono creare danni si verificano prima o poi.
Suggerimento
Mantenere il proprio sistema di backup semplice e fare il backup di sistema spesso. Avere dati di backup è più
importante della qualità tecnica del metodo di backup.
– Compito di cron come processo di un utente; file nella directory ”/var/spool/cron/crontabs” e riavvio
di cron(8). Vedere Sezione 9.4.14 per cron(8) e crontab(1).
– Compiti temporizzati di systemd come processi utente: file nella directory ”~/.config/systemd/user”.
Vedere systemd.timer(5) e systemd.service(5).
– Compiti automatici all’avvio come processi utente: file nella directory ”~/.config/autostart”. Vedere
Specifica per l’avvio automatico di applicazioni desktop.
2. Sapere come fare il backup ed il ripristino
• Rendere sicura l’archiviazione dei dati: protezione da sovrascritture e fallimenti del sistema
• Backup frequenti: backup pianificati
• Backup ridondanti: mirror di dati
• Procedura a prova di idioti: singolo facile comando di backup
3. Valutazione dei rischi e dei costi
• Rischio della perdita di dati
– I dati dovrebbere come minimo essere su partizioni del disco diverse, preferibilmente su dischi e macchine
diversi per sopravvivere alla corruzione del file system. È meglio archiviare i dati importanti su un file system
in sola lettura. 1
• Rischio dell’accesso non consentito a dati
– Dati sensibili relativi all’identità dell’utente, come ”/etc/ssh/ssh_host_*_key”, ”~/.gnupg/*”, ”~/.ssh/*”,
”~/.local/share/keyrings/*”, ”/etc/passwd”, ”/etc/shadow”, ”popularity-contest.conf”,
”/etc/ppp/pap-secrets” e ”/etc/exim4/passwd.client” dovrebbero essere archiviati in backup
cifrati 2 (Vedere Sezione 9.9.)
– Non inserire mai in modo fisso la password di login nel sistema o la passphrase di decifrazione nel codice
di alcun script, nemmeno in un sistema fidato. (Vedere Sezione 10.3.6.)
• Modi in cui le cose possono andare storte e loro probabilità
– L’hardware (specialmente gli HDD) si rompe
– I file system possono diventare corrotti e i dati in essi possono venire persi
– Non ci si può fidare che i sistemi di archiviazione in remoto non abbiano falle di sicurezza.
– Una protezione con password deboli può essere facilmente compromessa
– Il sistema dei permessi dei file può venir compromesso
• Risorse necessarie per il backup: umane, hardware, software, …
– Backup automatici pianificati con compiti di cron o temporizzati di systemd
Suggerimento
Si possono ripristinare i dati di configurazione di debconf con ”debconf-set-selections
debconf-selections” ed i dati delle selezioni di dpkg con ”dpkg --set-selection
<dpkg-selections.list”.
Nota
Non fare il backup dei contenuti dei pseudo file system che si trovano in /proc, /sys, /tmp e /run (vedere
Sezione 1.2.12 e Sezione 1.2.13). A meno di non sapere esattamente ciò che si sta facendo, sono un’enorme
mole di dati senza utilità.
Nota
Durante il backup dei dati può essere preferibile fermare alcuni demoni applicativi come l’MTA (vedere Sezio-
ne 6.2.4).
1Supporti scrivibili una sola volta, come CD/DVD-R possono prevenire incidenti di sovrascrittura. (Vedere Sezione 9.8 per come scrivere sul
supporto di archiviazione dalla riga di comando della shell. L’ambiente desktop GNOME con interfaccia grafica fornisce un facile accesso tramite
menu: ”Risorse→Creazione CD/DVD”.)
2Alcuni di questi dati non possono essere rigenerati inserendo la stessa stringa di input nel sistema.
Debian Reference 209 / 263
Quello che segue è un elenco di importanti suite di utilità di backup disponibili in un sistema Debian
• Mondo Rescue è un sistema di backup per facilitare il ripristino veloce di un sistema completo a partire da backup
su CD/DVD ecc., senza dover affrontare il normale processo di installazione del sistema.
• Bacula, Amanda e BackupPC sono suite di utilità di backup complete che sono pensate per backup regolari in rete.
• Duplicity e Borg sono utilità per backup più semplici per le postazioni di lavoro tipiche.
Per una postazione di lavoro personale, utilità da suite di backup complete pensate per ambienti server possono
non essere adatte. Allo stesso tempo le utilità di backup esistenti per le postazioni di lavoro possono avere alcune
limitazioni.
Ecco alcuni suggerimenti per rendere più facili i backup con un minimo sforzo da parte dell’utente. Queste tecniche
possono essere utilizzati con qualsiasi utilità di backup.
Per illustrare la cosa, supponiamo che il nome dell’utente principale e del suo gruppo siano penguin e si creerà un
esempio di script di backup e per istantanea ”/usr/local/bin/bkss.sh” con:
Debian Reference 210 / 263
#!/bin/sh -e
SRC="$1" # source data path
DSTFS="$2" # backup destination filesystem path
DSTSV="$3" # backup destination subvolume name
DSTSS="${DSTFS}/${DSTSV}-snapshot" # snapshot destination path
if [ "$(stat -f -c %T "$DSTFS")" != "btrfs" ]; then
echo "E: $DESTFS needs to be formatted to btrfs" >&2 ; exit 1
fi
MSGID=$(notify-send -p "bkup.sh $DSTSV" "in progress ...")
if [ ! -d "$DSTFS/$DSTSV" ]; then
btrfs subvolume create "$DSTFS/$DSTSV"
mkdir -p "$DSTSS"
fi
rsync -aHxS --delete --mkpath "${SRC}/" "${DSTFS}/${DSTSV}"
btrfs subvolume snapshot -r "${DSTFS}/${DSTSV}" ${DSTSS}/$(date -u --iso=min)
notify-send -r "$MSGID" "bkup.sh $DSTSV" "finished!"
Qui viene usato solo lo strumento di base rsync(1) per facilitare il backup di sistema e lo spazio di archiviazione
viene usato efficientemente da Btrfs.
Suggerimento
Notare che l’autore usa uno script di shell personale simile ”bss: Btrfs Subvolume Snapshot Utility” per le sue
postazioni di lavoro.
Ecco un esempio di come impostare un backup con GUI con un unico clic.
Per ogni clic nella GUI, viene fatto il backup dei dati da ”~/Documenti” in un dispositivo USB di archiviazione e viene
creata un’istantanea in sola lettura.
• Preparare un dispositivo USB di archiviazione da usare per il backup come in Sezione 10.2.3.1.
• Creare un file con un’unità di servizio di systemd ”~/.config/systemd/user/back-BKUP.service”, come:
Debian Reference 211 / 263
[Unit]
Description=USB Disk backup
Requires=media-%u-BKUP.mount
After=media-%u-BKUP.mount
[Service]
ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents
StandardOutput=append:%h/.cache/systemd-snap.log
StandardError=append:%h/.cache/systemd-snap.log
[Install]
WantedBy=media-%u-BKUP.mount
Per ogni evento di mount, viene fatto il backup dei dati da ”~/Documenti” in un dispositivo USB di archiviazione e
viene creata un’istantanea in sola lettura.
Si possono chiedere i nomi delle unità di mount che systemd ha attualmente in memoria al gestore del servizio
dell’utente in uso con ”systemctl --user list-units --type=mount”.
• Preparare un dispositivo USB di archiviazione da usare per il backup come in Sezione 10.2.3.1.
• Creare un file con un’unità timer di systemd ”~/.config/systemd/user/snap-Documents.timer”, come:
[Unit]
Description=Run btrfs subvolume snapshot on timer
Documentation=man:btrfs(1)
[Timer]
OnStartupSec=30
OnUnitInactiveSec=900
[Install]
WantedBy=timers.target
[Service]
Type=oneshot
Nice=15
ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents
IOSchedulingClass=idle
CPUSchedulingPolicy=idle
StandardOutput=append:%h/.cache/systemd-snap.log
StandardError=append:%h/.cache/systemd-snap.log
Per ogni evento timer, viene fatto il backup dei dati da ”~/Documenti” in un dispositivo USB di archiviazione e viene
creata un’istantanea in sola lettura.
Si possono chiedere i nomi delle unità timer che systemd ha attualmente in memoria al gestore del servizio dell’utente
in uso con ”systemctl --user list-units --type=timer”.
Per i sistemi desktop moderni questo approccio che usa systemd può offrire un controllo più dettagliato rispetto a
quelli Unix tradizionali che usano at(1), cron(8) o anacron(8).
L’infrastruttura di sicurezza dei dati viene fornita dalla combinazione di strumenti di cifratura dei dati, strumenti mes-
sage digest e strumenti di firma.
Vedere Sezione 9.9 su dm-crypt e fscrypt che implementano un’infrastruttura di cifratura automatica dei dati usando
moduli del kernel Linux.
Quelli che seguono sono alcuni comandi per GNU Privacy Guard per la gestione base delle chiavi.
Quelli seguenti sono i significati dei codici di fiducia.
Il comando seguente carica la mia chiave ”1DD8D791” sul popolare server di chiavi ”hkp://keys.gnupg.net”.
$ gpg --keyserver hkp://keys.gnupg.net --send-keys 1DD8D791
Un buon server di chiavi predefinito impostato in ”~/.gnupg/gpg.conf” (o nella vecchia posizione ”~/.gnupg/options”)
si ottiene la voce seguente.
keyserver hkp://keys.gnupg.net
Debian Reference 213 / 263
comando descrizione
gpg --gen-key Genera una nuova chiave
gpg --gen-revoke mio_ID_utente genera una chiave di revoca per mio_ID_utente
gpg --edit-key user_ID modifica la chiave in modo interattivo, ”help” per l’aiuto
gpg -o file --export esporta tutte le chiavi in un file
gpg --import file importa tutte le chiavi da un file
gpg --send-keys ID_utente invia la chiave di ID_utente al server di chiavi
gpg --recv-keys ID_utente riceve la chiave di ID_utente dal server di chiavi
gpg --list-keys ID_utente elenca le chiavi di ID_utente
gpg --list-sigs ID_utente elenca le firme di ID_utente
gpg --check-sigs ID_utente controlla le firme di ID_utente
gpg --fingerprint ID_utente controlla le impronte digitali di ID_utente
gpg --refresh-keys aggiorna il portachiavi locale
Tabella 10.7: Elenco di comandi per GNU Privacy Guard per la gestione delle chiavi
In OpenPGP Public Key Server (versioni pre-0.9.6) esisteva un bug che corrompeva le chiavi con più di 2 sot-
tochiavi. I pacchetti GnuPG più recenti (>1.2.1-2) possono gestire queste sottochiavi corrotte. Vedere l’opzione
”--repair-pks-subkey-bug in gpg(1).
Quelli seguenti sono esempi di comandi per usare GNU Privacy Guard su file.
Aggiungere quanto seguie al file ”~/.muttrc” per evitare che il lento GnuPG venga avviato automaticamente,
permettendo allo stesso tempo di richiamarlo digitando ”S” nel menu della vista indice.
macro index S ":toggle pgp_verify_sig\n"
set pgp_verify_sig=no
Il plugin gnupg permette di eseguire GnuPG in modo trasparente per i file con estensione ”.gpg”, ”.asc” e ”.pgp”.3
3Se si usa ”~/.vimrc” invece di ”~/.vim/vimrc”, modificare di conseguenza.
Debian Reference 214 / 263
comando descrizione
gpg -a -s file firma un file in file.asc con corazza ASCII
gpg --armor --sign file ””
gpg --clearsign file inserisce una firma leggibile nel messaggio
gpg --clearsign file|mail invia un messaggio di posta firmato leggibile a
[email protected] [email protected]
gpg --clearsign
inserisce una firma leggibile in patchfile
--not-dash-escaped patchfile
gpg --verify file verifica un file con firma leggibile
gpg -o file.sig -b file crea una firma staccata
gpg -o file.sig --detach-sign
””
file
gpg --verify file.sig file verifica file con file.sig
gpg -o cifr_file.gpg -r nome -e cifratura di file nel file binario cifr_file.gpg usando la chiave
file pubblica indirizzata a nome
gpg -o cifr_file.gpg
””
--recipient nome --encrypt file
gpg -o cifr_file.asc -a -r nome cifratura di file nel file con cifratura corazzata ASCII cifr_file.asc
-e file usando la chiave pubblica indirizzata a nome
gpg -o cifr_file.gpg -c file cifratura simmetrica da file a cifr_file.gpg
gpg -o cifr_file.gpg
””
--symmetric file
cifratura simmetrica pensata per nome di file nel file con cifratura
gpg -o cifr_file.asc -a -c file
corazzata ASCII cifr_file.asc
gpg -o file -d cifr_file.gpg -r
decifratura
nome
gpg -o file --decrypt
””
cifr_file.gpg
md5sum(1) fornisce un’utilità per creare un file digest usando il metodo descritto nella rfc1321 e per verificare i file
con esso.
$ md5sum foo bar >baz.md5
$ cat baz.md5
d3b07384d113edec49eaa6238ad5ff00 foo
c157a79031e1c40f85931829bc5fc552 bar
$ md5sum -c baz.md5
foo: OK
bar: OK
Nota
Il calcolo delle somme di controllo MD5 è meno dispendioso in termini di CPU di quello delle firme crittografiche
di GNU Privacy Guard (GnuPG). Di solito solamente il file digest di più alto livello è firmato crittograficamente per
assicurare l’integrità dei dati.
Nei sistemi GNOME lo strumento GUI seahorse(1) gestisce le password e le archivia in modo sicuro nel portachiavi
~/.local/share/keyrings/*.
secret-tool(1) può archiviare le password nel portachiavi dalla riga di comando.
Memorizziamo le passphrase usate per l’immagine del disco cifrata con LUKS/dm-crypt
$ secret-tool store --label='LUKS passphrase for disk.img' LUKS my_disk.img
Password: ********
Questa password archiviata può essere recuperata e passata ad altri programmi, es. cryptsetup(8).
$ secret-tool lookup LUKS my_disk.img | \
cryptsetup open disk.img disk_img --type luks --keyring -
$ sudo mount /dev/mapper/disk_img /mnt
Suggerimento
Ogni qual volta si deve fornire la password in uno script, usare secret-tool ed evitare di inserire direttamente
nel codice la password.
Esistono molti strumenti per la fusione di codice sorgente. Quello che segue è un elenco di strumenti che hanno
catturato la mia attenzione.
Debian Reference 216 / 263
Si possono estrarre le differenze tra due file sorgenti e creare file diff unificati ”file.patch0” o ”file.patch1”, a
seconda della posizione del file, con le procedure seguenti.
$ diff -u file.old file.new > file.patch0
$ diff -u old/file new/file > file.patch1
I file diff (chiamati anche file patch) sono usati per inviare aggiornamenti per un programma. Chi li riceve applica
questo aggiornamento ad un altro file nel modo seguente.
$ patch -p0 file < file.patch0
$ patch -p1 file < file.patch1
Se si hanno due versioni di un codice sorgente, è possibile effettuare una unione a 2 vie interattiva usando imediff(1)
nel modo seguente.
$ imediff -o file.merged file.old file.new
Se si hanno tre versioni di un codice sorgente, è possibile effettuare una unione a 3 vie interattiva usando imediff(1)
nel modo seguente.
$ imediff -o file.merged file.yours file.base file.theirs
10.5 Git
Git oggi giorno è lo strumento più usato per il sistema di controllo di versione(VCS) dato che Git può fare tutto per la
gestione del codice sia locale che remota.
Debian fornisce servizi Git liberi attraverso il servizio Debian Salsa. La sua documentazione è reperibile su https://wiki.debian.
Salsa.
Ecco alcuni pacchetti correlati a Git.
È possibile che si desideri impostare diverse configurazioni globali, come il nome e l’indirizzo di posta elettronica usati
da Git, in ”~/.gitconfig” nel modo seguente.
$ git config --global user.name "Name Surname"
$ git config --global user.email [email protected]
Se si è abituati ai comandi di CVS o Subversion, si potrebbe volere impostare alcuni alias per i comandi nel modo
seguente.
$ git config --global alias.ci "commit -a"
$ git config --global alias.co checkout
• L’albero di lavoro che contiene i file che l’utente vede e ai quali fa le modifiche.
– Le modifiche da registrare devono essere selezionate esplicitamente e posizionate in attesa nell’indice. Questo
viene fatto con i comandi git add e git rm.
• L’indice che contiene i file pronti per il commit (staged).
– Il commit nel repository locale dei file preparati nell’indice (staged) verrà fatto alla successiva richiesta. Ciò viene
fatto con il comando git commit.
* Il comando git pull effettua un comando git merge o git rebase dopo il comando git fetch.
* Qui, git merge combina due rami separati della cronologia per finire in un unico punto. (Questo è il com-
portamento predefinito di git pull senza alcuna personalizzazione e può essere buono per le persone che
lavorano a monte che pubblicano rami verso molte persone.)
Debian Reference 219 / 263
* Qui, git rebase crea un singolo ramo di cronologia in sequenza del ramo remoto seguita da quella del ramo
locale. (Questo è il caso della personalizzazione pull.rebase true e può essere adatto per il resto delle
persone.)
• Il repository remoto che contiene i file di cui è stato fatto il commit.
– La comunicazione con il repository remoto utilizza protocolli di comunicazione sicuri, come SSH o HTTPS.
L’albero di lavoro è fuori dalla directory .git/. I file dentro alla directory .git/ contengono l’indice, i dati del
repository locale e alcuni file di testo di configurazione di git.
Ecco una panoramica dei principali comandi di Git.
avvertimento
Non usare stringhe per etichette contenenti spazi, anche se alcuni strumenti come gitk(1) lo permettono.
Altri comandi git potrebbero avere problemi con esse.
Attenzione
Se viene fatto il rebase o lo squash di un ramo locale di cui è stato fatto il push sul repository remoto, fare
il push di tale ramo ha rischi e richiede l’opzione --force. Solitamente ciò non è accettabile per il ramo
main ma può essere accettabile per un ramo di specifico argomento prima dell’unione nel ramo main.
Debian Reference 220 / 263
Attenzione
A partire dall’inizio del 2006, l’invocazione diretta, dalla riga di comando, di un sottocomando di git come
”git-xyz” è diventata deprecata.
Suggerimento
Se c’è un file eseguibile git-pippo nel percorso specificato da $PATH, l’inserimento nella riga di comando di ”git
pippo” senza trattino invoca tale git-pippo. Questa è una funzionalità del comando git.
Un sistema di controllo delle versioni (VCS) è a volte noto come sistema di controllo delle revisioni (RCS) o gestione
delle configurazione del software (SCM).
Ecco un riassunto degli altri VCS diversi da Git nel sistema Debian degni di nota.
tipo di
pacchetto popcon dimensione
strumento commento
VCS
mercurial V:5, I:32 2019 Mercurial distribuito DVCS in Python e un po’ di C
DVCS con algebra intelligente per le
darcs V:0, I:5 34070 Darcs distribuito
patch (lento)
GNU DVCS influenzato da tla, scritto in
bzr I:8 28 distribuito
Bazaar Python (storico)
DVCS principalmente da Tom Lord
tla V:0, I:1 1022 GNU arch distribuito
(storico)
”CVS fatto bene”, un più nuovo
subversion V:13, I:72 4837 Subversion remoto
standard per VCS remoto (storico)
precedente standard per VCS
cvs V:4, I:30 4753 CVS remoto
remoto (storico)
visualizzazione GUI di alberi di
tkcvs V:0, I:1 1498 CVS, … remoto archivi VCS (CVS, Subversion,
RCS)
rcs V:2, I:13 564 RCS locale ”SCCS Unix fatto bene” (storico)
cssc V:0, I:1 2044 CSSC locale clone di SCCS Unix (storico)
Tabella 10.14: Elenco di altri strumenti per sistemi di controllo delle versioni
Debian Reference 222 / 263
Capitolo 11
Conversione di dati
In questo capitolo sono descritti strumenti e trucchi per convertire tra diversi formati di dati in un sistema Debian.
Gli strumenti standard sono eccellenti, ma il supporto per i formati proprietari per i dati è limitato.
Quelli che seguono sono pacchetti per la conversione dei dati testuali che hanno attirato la mia attenzione.
parola
pacchetto popcon dimensione descrizione
chiave
V:917, set di convertitore della codifica del testo tra
libc6 12988
I:999 caratteri localizzazioni usando iconv(1) (fondamentale)
set caratte- convertitore della codifica del testo tra
recode V:2, I:18 602 ri+carattere localizzazioni (versatile, maggior numero di alias
fine riga e funzionalità)
set di convertitore della codifica tra localizzazioni
konwert V:1, I:48 134
caratteri (elegante)
set di
nkf V:0, I:9 360 traduttore del set di caratteri per il giapponese
caratteri
set di
tcs V:0, I:0 518 traduttore del set di caratteri
caratteri
set di sostituisce le lettere accentate con le equivalenti
unaccent V:0, I:0 35
caratteri senza accento
carattere convertitore del formato di testo tra DOS e Unix:
tofrodos V:1, I:17 51
fine riga fromdos(1) e todos(1)
carattere convertitore del formato di testo tra Macintosh e
macutils V:0, I:0 312
fine riga Unix: frommac(1) e tomac(1)
Suggerimento
iconv(1) viene fornito come parte del pacchetto libc6 ed è sempre disponibile praticamente su tutti i sistemi in
stile Unix, per fare la conversione della codifica dei caratteri.
Debian Reference 223 / 263
Si può convertire la codifica di un file di testo con iconv(1) nel modo seguente.
$ iconv -f encoding1 -t encoding2 input.txt >output.txt
Nel trovare corrispondenze con i valori delle codifiche non viene tenuto conto delle lettere maiuscole o minuscole e
vengono ignorati i caratteri ”-” e ”_”. Si possono controllare le codifiche supportate con il comando ”iconv -l”.
Nota
Alcune codifiche sono gestite solo per la conversione dei dati e non sono utilizzate come valori di localizzazione
(Sezione 8.1).
Per i set di caratteri contenuti in un singolo byte, come i set di caratteri ASCII e ISO-8859, la codifica di carattere è
quasi la stessa cosa del set di caratteri.
Per i set di caratteri con molti caratteri, come JIS X 0213 per il giapponese o Universal Character Set (UCS, Unicode,
ISO-10646-1) per praticamente tutte le lingue, esistono molti schemi di codifica per inserirli nella sequenza dei byte
dati.
In questi casi c’è una netta differenza tra il set di caratteri e la codifica di caratteri.
Il termine code page è usato come sinonimo di tabella di codifica dei caratteri per alcune tabelle specifiche di produttori.
Nota
Notare che la maggior parte dei sistemi di codifica condividono con ASCII gli stessi codici per i caratteri a 7 bit.
Ci sono però alcune eccezioni. Se si stanno convertendo dati di vecchi programmi C o URL in giapponese dal
formato di codifica volgarmente chiamato Shift-JIS in formato UTF-8, usare ”CP932” come nome di codifica invece
di ”shift-JIS” per ottenere i risultati attesi: 0x5C → ”\” e 0x7E → ”~”. Altrimenti questi vengono convertiti nei
caratteri sbagliati.
Suggerimento
Si può anche usare recode(1) che offre più della semplice combinazione delle funzionalità di iconv(1),
fromdos(1), todos(1), frommac(1) e tomac(1). Per maggiori informazioni vedere ”info recode”.
Si può controllare se un file di testo è nella codifica UTF-8 usando iconv(1) nel modo seguente.
$ iconv -f utf8 -t utf8 input.txt >/dev/null || echo "non-UTF-8 found"
Suggerimento
Usare l’opzione ”--verbose” nell’esempio precedente per trovare il primo carattere non UTF-8.
Ecco uno script d’esempio per convertire in una directory la codifica dei nomi di file dai nomi creati in un vecchio
sistema operativo a quelli UTF-8 moderni.
#!/bin/sh
ENCDN=iso-8859-1
for x in *;
do
mv "$x" "$(echo "$x" | iconv -f $ENCDN -t utf-8)"
done
La variabile ”$ENCDN” specifica la codifica originale usata per i nomi di file nei sistemi operativi più vecchi come in
Tabella 11.2.
Per scenari più complessi, montare, usando come opzione di mount(8) la codifica appropriata (vedere Sezione 8.1.3),
il file system (ad esempio una partizione in un disco fisso) contenente tali nomi di file e copiare usando il comando
”cp-a” il suo intero contenuto in un altro file system montato come UTF-8.
Il formato dei file di testo e specificatamente il codice EOL (End of line, fine riga) è dipendente dalla piattaforma.
I programmi di conversione del formato di EOL, fromdos(1), todos(1), frommac(1) e tomac(1), sono piuttosto
comodi. Anche recode(1) è utile.
Debian Reference 225 / 263
carattere
codice di
piattaforma decimale esadecimale
EOL con-
trollo
Debian (unix) LF ^J 10 0A
MSDOS e Windows CR-LF ^M^J 13 10 0D 0A
Macintosh di Apple CR ^M 13 0D
Nota
Alcuni dati nel sistema Debian, come i dati della pagina wiki per il pacchetto python-moinmoin, usano CR-LF in
stile MSDOS come codice EOL. Perciò la regola sopra descritta è solamente una regola generale.
Nota
La maggior parte degli editor (es. vim, emacs, gedit, …) può gestire file con EOL in stile MSDOS in modo
trasparente.
Suggerimento
È meglio usare ”sed -e '/\r$/!s/$/\r/'” invece di todos(1) quando si desidere unificare lo stile EOL allo
stile MSDOS da uno stile misto MSDOS e Unix (ad esempio dopo la fusione di 2 file in stile MSDOS con diff3(1)).
Questo perché todos aggiunge CR a tutte le righe.
Esistono alcuni programmi popolari specializzati nella conversione dei codici di tabulazione.
Tabella 11.4: Elenco di comandi di conversione di TAB dai pacchetti bsdmainutils e coreutils
indent(1) nel pacchetto indent riformatta completamente gli spazi bianchi nei programmi C.
Anche programmi editor come vim ed emacs possono essere usati per la conversione di TAB. Per esempio con vim,
è possibile espandere i TAB con la sequenza di comandi ”:set expandtab” e ”:%retab”. Si può annullare questa
azione con la sequenza di comandi ”:set noexpandtab” e ”:%retab!”.
Gli editor moderni intelligenti come il programmavim sono piuttosto bravi e gestiscono bene qualsiasi sistema di
codifica e formato di file. Per una migliore compatibilità questi editor andrebbero usati con la localizzazione UTF-8 in
console con capacità UTF-8.
Un vecchio file di testo Unix in lingua europea occidentale, ”u-file.txt” salvato nella codifica latin1 (iso-8859-1)
può essere modificato con vim semplicemente con il comando seguente.
$ vim u-file.txt
Debian Reference 226 / 263
Ciò è reso possibile dal fatto che il meccanismo di rivelazione automatica della codifica dei file di vim presuppone
come prima cosa che la codifica sia UTF-8 e, se ciò fallisce, presuppone che sia latin1.
Un vecchio file di testo Unix in lingua polacca, ”pu-file.txt” salvato nella codifica latin1 (iso-8859-1) può essere
modificato con vim con il comando seguente.
$ vim '+e ++enc=latin2 pu-file.txt'
Un vecchio file di testo Unix in giapponese, ”ju-file.txt” salvato nella codifica eucJP può essere modificato con
vim con il comando seguente.
$ vim '+e ++enc=eucJP ju-file.txt'
Un vecchio file di testo MS-Windows in giapponese, ”jw-file.txt” salvato nella cosiddetta codifica shift-JIS (più
precisamente CP932) può essere modificato con vim con il comando seguente.
$ vim '+e ++enc=CP932 ++ff=dos jw-file.txt'
Quando un file viene aperto con le opzioni ”++enc” e ”++ff”, l’uso di ”:w” nella riga di comando di Vim lo salva nel
formato originale sovrascrivendo il file originale. Si può anche specificare nella riga di comando di Vim il formato e il
nome con cui salvare il file, ad esempio ”:w ++enc=utf8 nuovo.txt”.
Fare riferimento a mbyte.txt per il ”supporto di testi multi-byte” nell’aiuto in linea di vim e a Tabella 11.2 per i valori
delle localizzazione usati con ”++enc”.
La famiglia di programmi emacs può svolgere funzioni equivalenti.
Il comando seguente legge una pagina web mettendola in un file di testo. È molto utile quando si copiano configura-
zioni dal Web o per applicare strumenti di testo base Unix come grep(1) sulla pagina web.
$ w3m -dump https://www.remote-site.com/help-info.html >textfile
In modo analogo, si possono estrarre dati in testo puro da altri formati con gli strumenti seguenti.
È possibile evidenziare e formattare dati in testo puro usando gli strumenti seguenti.
XML (Extensible Markup Language) è un linguaggio a marcatori per documenti contenenti informazioni strutturate.
Vedere informazioni introduttive su XML.COM.
• ”Cosa è XML?”
• ”Cosa è XSLT?”
• ”Cosa è XSL-FO?”
• ”Cosa è XLink?”
Debian Reference 227 / 263
parola
pacchetto popcon dimensione funzione
chiave
html→testo conversione da HTML a testo semplice con il
w3m V:15, I:187 2837
puro comando ”w3m -dump”
html→testo convertitore avanzato da HTML a testo semplice
html2text V:3, I:53 243
puro (ISO 8859-1)
html→testo conversione da HTML a testo semplice con il
lynx V:25, I:344 1948
puro comando ”lynx -dump”
html→testo conversione da HTML a testo semplice con il
elinks V:3, I:20 1654
puro comando ”elinks -dump”
html→testo conversione da HTML a testo semplice con il
links V:3, I:28 2314
puro comando ”links -dump”
html→testo conversione da HTML a testo semplice con il
links2 V:1, I:12 5492
puro comando ”links2 -dump”
MSWord→testo
catdoc V:14, I:155 686 converte file MSWord in testo puro o TeX
puro, TeX
MSWord→testo
antiword V:1, I:7 589 converte file MSWord in testo puro o ps
puro, ps
html→testo
unhtml V:0, I:0 40 rimuove i tag marcatori da file HTML
puro
odt→testo
odt2txt V:2, I:40 60 converte da OpenDocument Text in testo puro
puro
parola
pacchetto popcon dimensione descrizione
chiave
MACRO Vim per convertire codice sorgente in
vim-runtime V:18, I:395 36525 evidenziareHTML con ”:source
$VIMRUNTIME/syntax/html.vim”
convertitore per programmi C in latex e HTML
cxref V:0, I:0 1190 c→html
(linguaggio C)
converte molti codici sorgenti in TeX (linguaggio
src2tex V:0, I:0 622 evidenziare
C)
converte molti codici sorgenti in file HTML,
source-highlight
V:0, I:5 2114 evidenziare XHTML, LaTeX, Texinfo, sequenze di escape per
colori ANSI e DocBook con evidenziazione (C++)
converte molti codici sorgenti in file HTML,
highlight V:0, I:5 1371 evidenziare XHTML, RTF, LaTeX, TeX o XSL-FO con
evidenziazione (C++)
grc V:0, I:5 208 testo→colori colorazione generica per tutto (Python)
pandoc V:9, I:45 194495 testo→tutto convertitore universale di marcatori (Haskel)
python3-docutils formattatore di documenti ReStructured Text in
V:14, I:51 1804 testo→tutto
XML (Python)
formattatore Markdown di documenti di testo in
markdown V:0, I:9 58 testo→html
(X)HTML (Perl)
formattatore AsciiDoc di documenti di testo in
asciidoctor V:0, I:7 98 testo→tutto
XML/HTML (Ruby)
sistema di pubblicazione di documenti basati su
python3-sphinx V:6, I:24 2756 testo→tutto
ReStructured Text (Python)
sistema di pubblicazione di siti statici basato su
hugo V:0, I:5 78678 testo→html
Markdown (Go)
I testi XML hanno un aspetto simile all’HTML. Permettono di gestire formati di output multipli per un documento. Un
facile sistema per XML è il pacchetto docbook-xsl che è stato usato per questo documento.
Ogni file XML inizia con una dichiarazione XML standard come la seguente.
<?xml version="1.0" encoding="UTF-8"?>
Gli elementi XML senza contenuto sono indicati nella seguente forma breve.
<name attribute="value" />
A parte l’aggiunta dei marcatori, XML richiede solo una minima conversione dei contenuti usando entità predefinite
per i caratteri seguenti.
Attenzione
”<” e ”&” non possono essere usati in attributi o elementi.
Nota
Quando vengono usate entità definite in stile SGML, ad esempio ”&qualche-tag;”, la prima definizione prevale
su tutte le altre. La definizione di entità è espressa nella forma ”<!ENTITY qualche-tag "valore entità">”.
Nota
Fintanto che i marcatori XML sono usati in modo coerente con un certo set dei nomi di tag (qualche dato usato
come contenuto o valore di attributo), la conversione in un altro XML è un compito banale usando XSLT (Extensible
Stylesheet Language Trasformations.
Debian Reference 229 / 263
Sono disponibili molti strumenti per elaborare file XML, come l’XSL (Extensible Stylesheet Language).
Fondamentalmente, una volta creato un file XML ben formato, lo si può convertire in qualsiasi formato usando XSLT
(Extensible Stylesheet Language Transformation).
XSL-FO (Extensible Stylesheet Language for Formatting Object), linguaggio per fogli di stile estensibile per la format-
tazione di oggetti, è pensato per essere una soluzione per la formattazione. Il pacchetto fop è una novità nell’archivio
Debian main a causa delle sue dipendenze dal linguaggio di programmazione Java. Perciò il codice LaTeX è solita-
mente generato dall’XML usando XSLT ed il sistema LaTeX viene usato per creare file adatti alla stampa come DVI,
PostScript e PDF.
parola
pacchetto popcon dimensione descrizione
chiave
DTD (Document Type Definition) XML per
docbook-xml I:403 2134 xml
DocBook
fogli di stile XSL per elaborare XML DocBook con
docbook-xsl V:13, I:146 14851 xml/xslt
XSLT in vari formati di output
elaboratore a riga di comando XSLT (XML→
xsltproc V:16, I:79 162 xslt
XML, HTML, testo semplice, ecc.)
xmlto V:1, I:14 130 xml/xslt convertitore da-XML-a-tutto con XSLT
fop V:0, I:11 284 xml/xsl-fo converte file XML DocBook in PDF
converte file DocBook con XSLT in documenti
dblatex V:2, I:10 4636 xml/xslt
DVI, PostScript, PDF
dbtoepub V:0, I:0 37 xml/xslt convertitore da XML DocBook a .epub
Dato che XML è un sottoinsieme di SGML (Standard Generalized Markup Language), può essere elaborato dagli
strumenti completi disponibili per SGML, come DSSSL (Document Style Semantics and Specification Language).
parola
pacchetto popcon dimensione descrizione
chiave
elaboratore standard DSSSL ISO/IEC
openjade V:1, I:26 1061 dsssl
10179:1996 (più recente)
fogli di stile DSSSL per elaborare XML DocBook
docbook-dsssl V:0, I:13 2605 xml/dsssl
con DSSSL in vari formati di output
utilità per file DocBook, inclusa la conversione in
docbook-utils V:0, I:9 287 xml/dsssl altri formati (HTML, RTF, PS, man, PDF) con
comandi docbook2* con DSSSL
convertitore da SGML e XML che usa fogli di stile
sgml2x V:0, I:0 90 SGML/dsssl
DSSSL
Suggerimento
A volte yelp di GNOME è utile per leggere file XML DocBook direttamente dato che li visualizza in modo decente
in X.
Si possono esstrarre dati HTML o XML da altri formati usando gli strumenti seguenti.
Debian Reference 230 / 263
parola
pacchetto popcon dimensione descrizione
chiave
pagine convertitore da pagine man a HTML (supporto
man2html V:0, I:1 142
man→html CGI)
doclifter I:0 472 troff→xml convertitore da troff a XML DocBook
texi2html V:0, I:5 1847 texi→html convertitore da texinfo a HTML
info2www V:1, I:2 74 info→html convertitore da GNU info a HTML (supporto CGI)
convertitore di documenti da Microsoft Word a
wv V:0, I:4 733 MSWord→tutto
HTML, LaTeX, ecc.
unrtf V:0, I:3 148 rtf→html convertitore di documenti da RTF a HTML, ecc.
da file WordPerfect 5.0 e 5.1 a TeX, LaTeX, troff,
wp2x V:0, I:0 200 WordPerfect→tutto
GML e HTML
I file HTML non-XML possono essere convertiti in XHTML che è un’istanza di XML ben strutturato. XHTML può essere
elaborato con strumenti XML.
La sintassi dei file XML e la correttezza deli URL in essi può essere verificata.
Una volta che è stato generato codice XML corretto, si può usare la tecnologia XSLT per estrarre dati in base al
contesto dei marcatori
11.3 Impaginazione
Per semplici impaginazioni si può usare il programma Unix troff sviluppato da AT&T. Viene di solito usato per creare
pagine man.
TeX, creato da Donald Knuth è uno strumento di impaginazione molto potente ed è lo standard di fatto. LaTeX, scritto
originariamente da Leslie Lamport, permette un accesso alla potenza di TeX a più alto livello.
Tradizionalmente il sistema di elaborazione di testi Unix principale è roff. Vedere roff(7), groff(7), groff(1),
grotty(1), troff(1), groff_mdoc(7), groff_man(7), groff_ms(7), groff_me(7), groff_mm(7) e ”info groff”.
Si può leggere o stampare un buon tutorial e documento di consultazione sulla macro ”-me” in ”/usr/share/doc/groff/”,
dopo aver installato il pacchetto groff.
Debian Reference 231 / 263
parola
pacchetto popcon dimensione descrizione
chiave
sistema TeX per impaginazione, anteprima e
texlive V:2, I:35 56 (La)TeX
stampa
groff V:2, I:36 20720 troff sistema di formattazione di testi GNU troff
Suggerimento
”groff -Tascii -me -” produce output in puro testo con codici di escape ANSI. Se si desidera produrre un
output in stile pagine man con molti ”^H” e ”_”, usare invece ”GROFF_NO_SGR=1 groff -Tascii -me -”.
Suggerimento
Per rimuovere i ”^H” e ”_” da un file di testo generato con groff, filtrarlo con ”col -b -x”.
11.3.2 TeX/LaTeX
La distribuzione software TeX Live offre un sistema TeX completo. Il metapacchetto texlive fornisce una buona
selezione dei pacchetti TeX Live che dovrebbe essere sufficiente per la maggior parte dei compiti più comuni.
Ci sono molti documenti consultabili disponibili per TeX e LaTeX.
• latex(1)
• texdoc(1)
• texdoctk(1)
Questo è l’ambiente di impaginazione più potente. Molti elaboratori SGML lo usano come backend per l’elaborazione
del testo. Lyx, fornito dal pacchetto lyx, e GNUTeXmacs, fornito dal pacchetto texmacs, offrono un bell’ambiente
WYSIWYG per LaTeX; inoltre molti usano Emacs e Vim come scelta di editor per i sorgenti.
Sono disponibili molte risorse in rete.
Quando i documenti crescono di dimensioni, a volte TeX può generare errori. Per risolvere queto problema si deve au-
mentare la dimensione di pool in ”/etc/texmf/texmf.cnf” (o in modo più corretto, modificare ”/etc/texmf/texmf.d/9
ed eseguire update-texmf(8)).
Debian Reference 232 / 263
Nota
Il sorgente TeX di ”The TeXbook” è disponibile all’indirizzo www.ctan.org tex-archive site for texbook.tex. Questo
file contiene la maggior parte delle macro necessarie. Mi è stato detto che si può elaborare questo documento
con tex(1) dopo aver commentato le righe da 7 a 10 ed aggiungendo ”\input manmac \proofmodefalse”.
È caldamente raccomandabile comprare questo libro (e tutti gli altri libri di Donald E. Knuth) invece di usare le
versioni in rete, ma il sorgente è un meraviglioso esempio di input TeX!
Si può stampare una pagina di manuale in PostScript in un bel modo usando uno dei comandi seguenti.
$ man -Tps some_manpage | lpr
Benché sia possibile scrivere una pagina di manuale (pagina man) in formato troff semplice, ci sono alcuni pacchetti
di aiuto per farlo.
parola
pacchetto popcon dimensione descrizione
chiave
docbook-to-man V:0, I:8 191 SGML→paginaman
convertitore da SGML DocDook in macro roff man
help2man V:0, I:7 542 testo→paginaman
generatore automatico di pagine man da --help
info2man V:0, I:0 134 info→paginaman
convertitore da GNU info a POD o pagine man
converte testo in puro ASCII nel formato delle
txt2man V:0, I:0 112 testo→paginaman
pagine man
Tabella 11.13: Elenco di pacchetti che aiutano a creare una pagina man
In un sistema Debian i dati stampabili sono presentati in formato PostScript. CUPS (Common Unix Printing System)
usa Ghostscript come suo programma backend per la rasterizzazione per le stampanti non-PostScript.
I dati stampabili possono anche essere prodotti nel formato PDF nei sistemi Debian recenti.
I file PDF possono essere visualizzati e i campi nei loro moduli possono essere riempiti usando strumenti GUI per
visualizzazione come Evince e Okular (vedere Sezione 7.4) e i browser moderni come Chromium.
I file PDF possono essere modificati usando alcuni strumenti grafici come LibreOffice, Scribus e Inkscape (vedere
Sezione 11.6).
Suggerimento
Si può leggere un file PDF con GIMP e convertirlo in formato PNG usando una risoluzione maggiore di 300 dpi. Ciò
può essere usato come immagine di sfondo per LibreOffice, per produrre una stampa modificata come si desidera
con uno sforzo minimo.
Debian Reference 233 / 263
11.4.1 Ghostscript
Il cuore centrale della manipolazione dei dati da stampare è l’interprete PostScript (PS) Ghostscript che genera
immagini raster.
Suggerimento
La configurazione di Ghostscript può essere visualizzata con ”gs -h”.
È possibile unire due file PostScript (PS) o PDF (Portable Document Format) usando gs(1) di Ghostscript.
$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=bla.ps -f foo1.ps foo2.ps
$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf
Nota
Il formato PDF che è un formato ampiamente usato per dati stampabili multipiattaforma, è essenzialmente il formato
PS compresso con alcune funzionalità ed estensioni aggiuntive.
Suggerimento
Per manipolare dalla riga di comando documenti PostScript sono utili psmerge(1) e altri comandi nel pacchetto
psutils. Anche pdftk(1), nel pacchetto pdftk, è utile per manipolare documenti PDF.
Quello che segue è un elenco di pacchetti con utilità per dati stampabili che hanno attirato la mia attenzione.
Entrambi i comandi lp(1) e lpr(1) forniti da CUPS (Common Unix Printing System) forniscono opzioni per stampe
personalizzate dei dati stampabili.
Si possono stampare 3 copie fascicolate di un file usando uno dei comandi seguenti.
$ lp -n 3 -o Collate=True filename
Debian Reference 234 / 263
parola
pacchetto popcon dimensione descrizione
chiave
V:152, utilità PDF: pdftops, pdfinfo, pdfimages,
poppler-utils 728 pdf→ps,testo,…
I:471 pdftotext, pdffonts
psutils V:4, I:67 219 ps→ps strumenti di conversione di documenti PostScript
poster V:0, I:3 57 ps→ps crea grandi poster da pagine PostScript
testo→ps, converte testo ASCII in PostScript, HTML, RTF o
enscript V:1, I:14 2130
html, rtf Pretty-Print
convertitore e creatore di belle stampe ”Da tutto a
a2ps V:0, I:10 3979 testo→ps
PostScript”
strumento di conversione di documenti PDF:
pdftk I:37 28 pdf→pdf
pdftk
html2ps V:0, I:2 261 html→ps converte da HTML aPostScript
gnuhtml2latex V:0, I:0 27 html→latex convertitore da HTML a latex
converte documenti da LaTeX a RTF leggibili da
latex2rtf V:0, I:4 495 latex→rtf
MS Word
converte da PostScript a EPS (Encapsulated
ps2eps V:2, I:42 95 ps→eps
PostScript)
convertitore da testo a PostScript con supporto
e2ps V:0, I:0 109 testo→ps
per la codifica giapponese
impose+ V:0, I:0 118 ps→ps Utilità PostScript
belle stampe di molti tipi di codice sorgente (C,
trueprint V:0, I:0 149 testo→ps C++, Java, Pascal, Perl, Pike, Sh e Verilog) in
PostScript. (linguaggio C)
convertitore da PDF al formato SVG (Scalable
pdf2svg V:0, I:3 32 pdf→svg
Vector Graphics)
pdftoipe V:0, I:0 65 pdf→ipe convertitore da PDF al formato XML di IPE
Si può personalizzare ulteriormente l’operazione di stampa usando opzioni come ”-o number-up=2”, ”-o page-set=even
”-o page-set=odd”, ”-o scaling=200”, ”-o natural-scaling=200”, ecc., documentate in Stampa dalla riga
di comando ed opzioni relative.
Quelli che seguono sono pacchetti per la conversione dei dati di posta che hanno attirato la mia attenzione.
parola
pacchetto popcon dimensione descrizione
chiave
shar(1), unshar(1), uuencode(1),
sharutils V:2, I:36 1415 posta
uudecode(1)
codifica e decodifica di messaggiMIME: mpack(1)
mpack V:1, I:11 108 MIME
e munpack(1)
spacchettamento di allegati MIME di tipo
tnef V:0, I:6 110 ms-tnef ”application/ms-tnef” che è un formato esclusivo
di Microsoft
codificatore e decodificatore per i seguenti
uudeview V:0, I:3 105 posta formati: uuencode, xxencode, BASE64, quoted
printable e BinHex
Suggerimento
Se il software del programma di posta può essere configurato per usarlo, anche il server IMAP4 (Internet Message
Access Protocol, versione 4) può essere usato per spostare la posta da sistemi proprietari.
I dati di posta (SMTP) dovrebbero essere limitati a serie di 7 bit di dati. Perciò dati binari e testi a 8 bit sono codificati
in un formato a 7 bit con MIME (Multipurpose Internet Mail Extensions) e la selezione del set di caratteri (vedere
Tabella 11.2).
Il formato standard per l’archiviazione della posta è mbox strutturato seguendo la RFC2822 (che aggiorna RFC822).
Vedere mbox(5) (fornito dal pacchetto mutt).
Per le lingue europee, per la posta viene di solito usato ”Content-Transfer-Encoding: quoted-printable”
con il set di caratteri ISO-8859-1 dato che non ci sono molti caratteri a 8 bit. Se il testo europeo è codificato in UTF-8,
è probabile venga usato ”Content-Transfer-Encoding: quoted-printable” dato che sono per la maggior
parte dati a 7 bit.
Per il giapponese, per la posta viene tradizionalmente usato ”Content-Type: text/plain; charset=ISO-2022-JP”
per mantenere il testo a 7 bit. Ma sistemi Microsoft più vecchi possono inviare dati di posta in Shift-JIS senza una
dichiarazione appropriata. Se il testo giapponese è codificato in UTF-8, è probabile venga usato Base64 dato che
contiene molti dati a 8 bit. La situazione delle altre lingue asiatiche è simile.
Nota
Se i dati di posta non-Unix sono accessibili da un software di posta non-Debian che può comunicare con il server
IMAP4, potrebbe essere possibile spostarli eseguendo un proprio server IMAP4.
Debian Reference 236 / 263
Nota
Se si usano altri formati di archiviazione, spostarli nel formato mbox è un buon primo passo. Un versatile program-
ma client come mutt(1) può essere di aiuto in questo caso.
Si può suddividere il contenuto di una casella di posta nei singoli messaggi usando procmail(1) e formail(1).
Ciascun messaggio di posta può essere spachettato usando munpack(1), dal pacchetto mpack, (o con altri strumenti
specializzati) per ottenere i contenuti codificati MIME.
Sebbene programmi con interfaccia utente grafica come gimp(1) siano molto potenti, strumenti a riga di comando
come imagemagick(1) sono piuttosto utili per manipolare in modo automatico immagini usando script.
Il formato standard di fatto per i file immagini delle fotocamere digitali è EXIF (Exchangeable Image File Format)
che è il formato per file immagine JPEG con tag aggiuntivi con metadati. Può contenere informazioni come la data,
l’orario e le impostazioni della fotocamera.
I diritti sulla compressione senza perdita di dati Lempel-Ziv-Welch (LZW) sono scaduti. Le utilità GIF (Graphics
Interchange Format) che usano il metodo di compressione LZW sono ora disponibili liberamente sul sistema Debian.
Suggerimento
Qualsiasi fotocamera digitale o scanner con un supporto di archiviazione removibile funziona in Linux attraverso
i lettori di archiviazione USB dato che segue le regole progettuali per i file system delle fotocamere e usa il file
system FAT. Vedere Sezione 10.1.7.
I seguenti metapacchetti sono un buon punto di inizio per cercare strumenti per dati grafici usando aptitude(8).
Un altro punto di partenza può essere ”Panoramica dei pacchetti per i manutentori degli strumenti per fotografia di
Debian”.
parola
pacchetto popcon dimensione descrizione
chiave
design-desktop-graphics svg, jpeg,
I:0 13 metapacchetto per grafici e graphic designer
…
education-graphics svg, jpeg, metapacchetto per insegnare grafica e arti
I:0 30
… pittoriche.
open-font-design-toolkit metapacchetto per creazione di tipi di caratteri
I:0 9 ttf, ps, …
open
Suggerimento
Cercare ulteriori strumenti per le immagini usando l’espressione regolare ”~Gworks-with::image” in
aptitude(8) (vedere Sezione 2.2.6).
Debian Reference 237 / 263
parola
pacchetto popcon dimensione descrizione
chiave
GNU Image Manipulation Program, programma
gimp V:50, I:252 19304 immagine(bitmap)
GNU di manipolazione di immagini
frontend X11 basato su GTK per SANE (Scanner
xsane V:12, I:144 2339 immagine(bitmap)
Access Now Easy)
scribus V:1, I:16 31345 ps/pdf/SVG/… editor DTP Scribus
libreoffice-draw
V:72, I:430 10312 immagine(vettoriale)
suite per ufficio LibreOffice - disegno
inkscape V:15, I:112 99800 immagine(vettoriale)
editor SVG (Scalable Vector Graphics)
dia V:2, I:22 3741 immagine(vettoriale)
editor di diagrammi (Gtk)
strumento per la generazione interattiva di figure
xfig V:0, I:11 7849 immagine(vettoriale)
in X11
gocr V:0, I:7 540 immagine→testosoftware OCR libero
visualizzatore di immagini grafiche Eye of
eog V:64, I:277 7770 immagine(Exif)
GNOME
gthumb V:3, I:16 5032 immagine(Exif)navigatore e visualizzatore di immagini (GNOME)
geeqie V:4, I:15 2522 immagine(Exif)visualizzatore d’immagini che usa GTK
shotwell V:17, I:255 6263 immagine(Exif)organizzatore di foto digitali (GNOME)
gwenview V:33, I:106 11755 immagine(Exif)visualizzatore di immagini (KDE)
supporto per fotocamere digitali in applicazioni
kamera I:105 998 immagine(Exif)
KDE
applicazione per la gestione delle foto digitali per
digikam V:1, I:9 293 immagine(Exif)
KDE
tavolo luminoso e camera oscura virtuali per
darktable V:4, I:13 30554 immagine(Exif)
fotografi
hugin V:0, I:8 5208 immagine(Exif)ricucitore di foto per panorami
librecad V:1, I:15 8963 DXF, ... editor di dati CAD 2D
freecad I:18 36 DXF, ... editor di dati CAD 3D
blend, TIFF,
blender V:3, I:28 84492 editor di contenuti 3D per animazioni, ecc.
VRML, …
ms3d, obj,
mm3d V:0, I:0 3881 editor di modelli 3D basato su OpenGL
dxf, …
editor di tipi di carattere per caratteri PS,
fontforge V:0, I:6 3993 ttf, ps, …
TrueType e OpenType
programma per gridfitting e hinting di tipi di
xgridfit V:0, I:0 806 ttf
carattere TrueType
Quelli che seguono sono pacchetti di strumenti GUI per la conversione, la modifica e l’organizzazione di dati grafici
che hanno attirato la mia attenzione.
Quelli che seguono sono pacchetti di strumenti CLI per la conversione, la modifica e l’organizzazione di dati grafici
che hanno attirato la mia attenzione.
Ci sono molti altri programmi per convertire dati. I pacchetti seguenti, trovati usando l’espressione regolare ”~Guse::conver
in aptitude(8) (vedere Sezione 2.2.6), hanno catturato la mia attenzione.
Si possono estrarre i dati dal formato RPM anche nel modo seguente.
$ rpm2cpio file.src.rpm | cpio --extract
Debian Reference 239 / 263
parola
pacchetto popcon dimensione descrizione
chiave
imagemagick I:317 74 immagine(bitmap)
programmi di manipolazione immagini
programmi di manipolazione di immagini (fork di
graphicsmagick V:1, I:11 5565 immagine(bitmap)
imagemagick)
netpbm V:28, I:326 8526 immagine(bitmap)
strumenti di conversione di dati grafici
convertire il formato High Efficiency Image File
libheif-examples
V:0, I:2 191 heif→jpeg(bitmap)
(HEIF) nei formati JPEG, PNG o Y4M con il
comandoheif-convert(1)
converte icone e puntatori MS Windows da e
icoutils V:7, I:50 221 png↔ico(bitmap)
verso il formato PNG (favicon.ico)
convertitore di file PostScript e PDF in grafica
pstoedit V:2, I:52 1011 ps/pdf→immagine(vettoriale)
vettoriale modificabile (SVG)
strumenti di conversione di metafile windows (dati
libwmf-bin V:7, I:119 151 Windows/immagine(vettoriale)
di grafica vettoriale)
converte file XFig nel formato di Draw di
fig2sxd V:0, I:0 151 fig→sxd(vettoriale)
OpenOffice.org
strumento di post-elaborazione per pagine
unpaper V:2, I:17 412 immagine→immagine
scansionate per OCR
software OCR libero basato sul motore OCR
tesseract-ocr V:7, I:33 2228 immagine→testo
commerciale di HP
tesseract-ocr-eng dati per motore OCR: file di lingua tesseract-ocr
V:7, I:34 4032 immagine→testo
per testi in inglese
ocrad V:0, I:3 587 immagine→testosoftware OCR libero
utilità a riga di comando per mostrare
exif V:2, I:42 339 immagine(Exif)
informazioni EXIF in file JPEG
strumento di manipolazione di metadati
exiv2 V:2, I:27 275 immagine(Exif)
EXIF/IPTC
exiftran V:1, I:14 69 immagine(Exif)trasforma immagini JPEG di fotocamere digitali
utilità per leggere i tag EXIF da un file JPEG di
exiftags V:0, I:3 292 immagine(Exif)
una fotocamera digitale
exifprobe V:0, I:3 499 immagine(Exif)legge metadati da immagini digitali
dcraw V:1, I:12 583 immagine(Raw)→ppm
decodifica immagini raw di fotocamere digitali
findimagedupes V:0, I:1 77 immagine→fingerprint
trova immagini simili visivamente o duplicati
fonde immagini per migliorarne la fedeltà o creare
ale V:0, I:0 839 immagine→immagine
mosaici
imageindex V:0, I:1 145 immagine(Exif)→html
genera gallerie HTML statiche da immagini
outguess V:0, I:1 230 jpeg,png strumento steganografico universale
jpegoptim V:0, I:7 59 jpeg ottimizza file JPEG
ottimizza file PNG, con compressione senza
optipng V:3, I:43 213 png
perdita
ottimizza file PNG, con compressione senza
pngquant V:0, I:9 61 png
perdita
parola
pacchetto popcon dimensione descrizione
chiave
convertitore di pacchetti estranei in pacchetti
alien V:1, I:19 163 rpm/tgz→deb
Debian
convertitore da ”Electric Book” (popolare in
freepwing V:0, I:0 424 EB→EPWING Giappone) in un singolo formato JIS X 4081 (un
sottoinsieme di EPWING V1)
convertitore e gestione di una biblioteca per libri
calibre V:6, I:28 63385 tutto→EPUB
elettronici
Capitolo 12
Programmazione
Vengono forniti in questo capitolo alcune informazioni base da cui partire per imparare a programmare su un sistema
Debian abbastanza da seguire il codice sorgente impacchettato. Quello che segue è un elenco dei pacchetti importanti
per la programmazione e dei corrispettivi pacchetti di documentazione.
Guide di riferimento in linea sono disponibili digitando ”man nome” dopo aver installato i pacchetti manpages e
manpages-dev. Le guide di riferimento in linea per gli strumenti GNU sono disponibili digitando ”info nome_programma”,
dopo aver installato i pertinenti pacchetti di documentazione. Può essere necessario includere gli archivi ”contrib e
non-free, oltre all’archivio main, dato che alcune documentazioni GFDL non sono considerate conformi alle DFSG.
Considerare l’uso degli strumenti dei sistemi di controllo di versione. Vedere Sezione 10.5.
avvertimento
Non usare ”test” come nome di un file di prova eseguibile. ”test” è un comando interno della shell.
Attenzione
I programmi software compilati direttamente dai sorgenti andrebbero installati in ”/usr/local” o ”/opt”
per evitare conflitti.
Suggerimento
Esempi di codice per creare la ”Canzone 99 bottiglie di birra” dovrebbe dare buone idee per praticamente tutti i
linguaggi di programmazione.
Uno script di shell è un file di testo con il bit di esecuzione impostato e contiene i comandi nel formato seguente.
#!/bin/sh
... command lines
La prima riga specifica l’interprete di shell che legge ed esegue il contenuto di questo file.
Leggere script di shell è il modo migliore per capire come funzioni un sistema *nix. In questa sezione vengono forniti
alcune nozioni di riferimento e promemoria per la programmazione di shell. Vedere ”Errori in shell” (https://www.greenend.org
rjk/2001/04/shell.html) per imparare dagli errori.
A differenza della modalità interattiva della shell (vedere Sezione 1.5 e Sezione 1.6), gli script di shell usano spesso
parametri, costrutti condizionali e cicli.
Debian Reference 242 / 263
Molti script di sistema possono essere interpretati da una qualsiasi delle shell POSIX (vedere Tabella 1.13).
• La shell POSIX non interattiva predefinita ”/usr/bin/sh” è un collegamento simbolico che punta a /usr/bin/dash
ed è usata da molti programmi di sistema.
• La shell POSIX interattiva predefinita è /usr/bin/bash.
Evitare di scrivere uno script di shell con bashismi o zshismi per renderlo portabile tra tutte le shell POSIX. Si può
controllare uno script con checkbashisms(1).
Il comando ”echo” deve essere usato con le precauzioni seguenti dato che la sua implementazione è diversa negli
svariati comandi interni della shell ed esterni.
• Evitare l’uso di sequenze di escape nelle stringhe dato che la loro gestione è variabile.
Nota
Sebbene l’opzione ”-n” non faccia veramente parte della sintassi POSIX, è generalmente accettata.
Suggerimento
Se è necessario inserire sequenze di escape nella stringa in output, usare il comando ”printf” al posto del
comando ”echo”.
• con ”:” l’operatore = controlla che il suo operando esista e sia non nullo
• senza ”:” l’operatore = controlla solo che il suo operando esista
Debian Reference 243 / 263
Ogni comando restituisce uno stato di uscita che può essere usato in costrutti condizionali.
• Successo: 0 (”Vero”)
Nota
”0” nel contesto condizionale della shell significa ”Vero”, mentre ”0” nel contesto condizionale in C significa ”Falso”.
Nota
”[” è l’equivalente del comando ”test che valuta i propri argomenti sino a ”]” come un’espressione condizionale.
if [ conditional_expression ]; then
if_success_run_this_command
else
if_not_success_run_this_command
fi
In questo caso il ”|| true” finale era necessario per assicurare che lo script non termini accidentalmente a tale riga
quando la shell è invocata con l’opzione ”-e”.
Gli operatori aritmetici di comparazione di interi nelle espressioni condizionali sono ”-eq”, ”-ne”, ”-lt”, ”-le”, ”-gt”
e ”-ge”.
• ”for x in pippo1 pippo2 … ; do comando ; done” ripete il ciclo assegnando gli elementi nell’elenco ”pippo1
pippo2 …” alla variabile ”x” ed eseguendo ”comando”.
• ”while condizione ; do comando ; done” ripete ”comando” fintanto che ”condizione” è vera.
• ”until condizione ; do comando ; done” ripete ”comando” fintanto che ”condition” è non vera.
• ”break” permette di uscire dal ciclo.
• ”continue” permette di riprendere dalla successiva iterazione del ciclo.
Suggerimento
L’iterazione numerica in stile linguaggio C può essere realizzata usando seq(1) come ”pippo1 pippo2 …”
Suggerimento
Vedere Sezione 9.4.9.
Alcune popolari variabili d’ambiente per il normale prompt dei comandi della shell possono non essere disponibili
nell’ambiente di esecuzione di uno script utente.
• La shell controlla, per ciascun elemento non racchiuso tra "…" o '…', la presenza di parole riservate per regolare
il proprio comportamento.
– Parole riservate: if then elif else fi for in while unless do done case esac
• La shell espande gli alias se non sono racchiusi in "…" o '…'.
• La shell espande glob di nomi percorso nei nomi di file corrispondenti, se non sono racchiusi in "…" o '…'.
– * → qualsiasi carattere
– ? → un carattere
– […] → uno qualunque dei caratteri in ”…”
• La shell si sposta alla riga seguente e ripete nuovamente questo processo dall’inizio di questa sequenza.
Per far sì che il proprio programma di shell sia il più portabile possibile tra i sistemi Debian, è una buona idea limitare
i programmi di utilità a quelli forniti dai pacchetti essenziali.
Suggerimento
Sebbene moreutils possa non esistere al di fuori di Debian, offre piccoli programmi interessanti. Quello più
degno di nota è sponge(8) che è piuttosto utile quando si desidera sovrascrivere il file originale.
Tabella 12.7: Elenco di pacchetti contenenti piccoli programmi di utilità per script di shell
Quando si desidera automatizzare un compito in Debian, si dovrebbe prima creare uno script per esso con un
linguaggio interpretato. Le linee guida per la scelta del linguaggio interpretato sono:
• Usare dash se il compito è semplice e combina programmi CLI con un programma della shell.
• Usare python3 se il compito non è semplice e si sta cercando di scriverlo da zero.
• Usare perl, tcl, ruby, ... se è disponibile del codice preesistente in Debian che usa uno di questi linguaggi e che
deve essere ritoccato per fare il compito.
Se il codice risultante è troppo lento, si può riscrivere solo la porzione critica per la velocità d’esecuzione in un
linguaggio compilato e chiamarla dal linguaggio interpretato.
La maggior parte degli interpreti offre un controllo di base della sintassi e funzionalità di tracciamento del codice.
Per testare codice per dash, provare Sezione 9.1.4 che è adatto ad ambienti interattivi in stile bash.
Per testare codice per perl provare l’ambiente REPL per Perl che crea un ambiente REPL (=READ + EVAL + PRINT
+ LOOP) in stile Python per Perl.
Uno script di shell può essere migliorato per creare un attraente programma GUI. Il trucco è di usare uno dei cosiddetti
programmi di dialogo invece di interazioni tristi che usano i comandi echo e read.
Ecco un esempio di programma con GUI per dimostrare come è semplice facile farlo con uno script di shell.
Questo script usa zenity per selezionare un file (in maniera predefinita /etc/motd) e visualizzarlo.
L’avviatore GUI per questo script può essere creato seguendo Sezione 9.4.10.
Debian Reference 249 / 263
#!/bin/sh -e
# Copyright (C) 2021 Osamu Aoki <[email protected]>, Public Domain
# vim:set sw=2 sts=2 et:
DATA_FILE=$(zenity --file-selection --filename="/etc/motd" --title="Select a file to check ←-
") || \
( echo "E: File selection error" >&2 ; exit 1 )
# Check size of archive
if ( file -ib "$DATA_FILE" | grep -qe '^text/' ) ; then
zenity --info --title="Check file: $DATA_FILE" --width 640 --height 400 \
--text="$(head -n 20 "$DATA_FILE")"
else
zenity --info --title="Check file: $DATA_FILE" --width 640 --height 400 \
--text="The data is MIME=$(file -ib "$DATA_FILE")"
fi
Questo tipo di approccio ad un programma GUI con script di shell è utile solamente per casi di scelta semplice. Se
si sta scrivendo un programma con funzioni complesse, considerare l’idea di scriverlo con una piattaforma con più
potenzialità.
I programmi di gestione di file con GUI possono essere estesi per effettuare alcune azioni comuni su file selezionati
usando pacchetti di estensione aggiuntivi. È anche possibile fargli fare azioni personalizzate specifiche aggiungendo
script specifici dell’utente.
Per elaborare dati, sh deve generare sottoprocessi che eseguono cut, grep, sed, ecc., ed è lento. D’altro canto,
perl ha capacità interne per elaborare i dati, perciò è veloce. Molti script di manutenzione del sistema in Debian
usano perl.
Si consideri il seguente pezzetto di script AWK e i suoi equivalenti in Perl.
awk '($2=="1957") { print $3 }' |
La flessibilità è il punto di forza di Perl. Al contempo, ciò permette di creare codici criptici e ingarbugliati. Perciò fare
attenzione.
Qui sono inclusi Sezione 12.3.3 e Sezione 12.3.4 per indicare come programmi simili a compilatori possono essere
scritti in linguaggio C compilando descrizioni di più alto livello in linguaggio C.
12.3.1 C
Si può impostare l’ambiente appropriato per compilare programmi scritti nel linguaggio di programmazione C nel modo
seguente.
# apt-get install glibc-doc manpages-dev libc6-dev gcc build-essential
Il pacchetto libc6-dev, cioè la libreria GNU C, fornisce la libreria standard C che è una raccolta di file header e
routine di libreria usati dal linguaggio di programmazione C.
Vedere come documenti di riferimento per C i seguenti.
• ogni_nome_di_funzione_della_libreria_C(3)
• Kernighan & Ritchie, ”The C Programming Language”, 2nd edition (Prentice Hall)
Un semplice esempio ”esempio.c” può essere compilato con una libreria ”libm” in un eseguibile ”eseg_esempio”
nel modo seguente.
$ cat > example.c << EOF
#include <stdio.h>
#include <math.h>
#include <string.h>
In questo esempio, l’uso di ”-lm” è necessario per fare il link alla libreria ”/usr/lib/libm.so” nel pacchetto
libc6 per sqrt(3). La libreria reale è in ”/lib/” con nome file ”libm.so.6”, che è un collegamento simbolico
a ”libm-2.7.so”.
Si guardi l’ultimo elemento nel testo di output: ci sono più di 10 caratteri anche se è stato specificato ”%10s”.
L’uso di funzioni che operano su puntatori di memoria senza controlli sui limiti, come sprintf(3) e strcpy(3) è
deprecato per prevenire exploit di tipo buffer overflow che sfruttano gli effetti di superamento dei limiti di grandezza
dei dati. Usare invece snprintf(3) e strncpy(3).
Svariati pacchetti Debian forniscono un generatore di parser LR lookahead o parser LALR combatibile con Yacc.
Un tutorial per bison(1) viene fornito da ”info bison”.
È necessario fornire i propri ”main()” e ”yyerror()”. ”main()” chiama ”yyparse()” che a sua volta chiama
”yylex()”, solitamente creato con Flex.
Ecco un esempio di come creare un semplice programma per calcolatrice nel terminale.
Creare example.y:
1Potrebbero essere necessarie alcune regolazioni per far sì che funzionino nel sistema attuale.
Debian Reference 252 / 263
/* declare tokens */
%token NUMBER
%token OP_ADD OP_SUB OP_MUL OP_RGT OP_LFT OP_EQU
%%
calc:
| calc exp OP_EQU { printf("Y: RESULT = %d\n", $2); }
;
exp: factor
| exp OP_ADD factor { $$ = $1 + $3; }
| exp OP_SUB factor { $$ = $1 - $3; }
;
factor: term
| factor OP_MUL term { $$ = $1 * $3; }
;
term: NUMBER
| OP_LFT exp OP_RGT { $$ = $2; }
;
%%
Creare example.l:
/* calculator source for flex */
%{
#include "example.tab.h"
%}
%%
[0-9]+ { printf("L: NUMBER = %s\n", yytext); yylval = atoi(yytext); return NUMBER; }
"+" { printf("L: OP_ADD\n"); return OP_ADD; }
"-" { printf("L: OP_SUB\n"); return OP_SUB; }
Debian Reference 253 / 263
exit
L: exit
Suggerimento
Configurare il proprio editor preferito (emacs o vim) in modo che usi plugin per motori per lint asincroni aiuta nella
scrittura di codice. Questi plugin stanno diventando molto potenti poiché sfruttano il Language Server Protocol.
Dato che sono in continuo sviluppo, usare il codice originale a monte, invece dei pacchetti Debian, potrebbe essere
una buona opzione.
12.5 Debug
Il debug è un’importante fase del processo di programmazione. Sapere come fare il debug dei programmi rende
buoni utenti Debian in grado di creare segnalazioni di bug sensate.
Debian Reference 254 / 263
Lo strumento di debug principale in Debian è gdb(1) che permette di ispezionare un programma mentre viene
eseguito.
Installare gdb e i programmi correlati nel modo seguente.
# apt-get install gdb gdb-doc build-essential devscripts
• “info gdb”
• “Debugging with GDB” in /usr/share/doc/gdb-doc/html/gdb/index.html
Quello che segue è un piccolo esempio d’uso di gdb(1) su di un ”programma” compilato con l’opzione ”-g” per
produrre informazioni di debug.
$ gdb program
(gdb) b 1 # set break point at line 1
(gdb) run args # run program with args
(gdb) next # next line
...
(gdb) step # step forward
...
(gdb) p parm # print parm
...
(gdb) p parm=12 # set value to 12
...
(gdb) quit
Suggerimento
Molti comandi gdb(1) possono essere abbreviati. L’espansione del tasto di tabulazione funziona come nella shell.
Dato che tutti i binari installati in un sistema Debian dovrebbero avere, in maniera predefinita, le informazioni di debug
rimosse, la maggior parte dei simboli di debug non sono presenti nei normali pacchetti. Per poter fare il debug dei
pacchetti Debian con gdb(1), è necessario installare i pacchetti *-dbgsym (es. coreutils-dbgsym in the case
of coreutils). I pacchetti sorgente generano automaticamente pacchetti *-dbgsym insieme ai pacchetti binari
normale e tali pacchetti di debug vengono messi nell’archivio separato debian-debug. Per maggiori informazioni fare
riferimento agli articoli nel Wiki Debian.
Se un pacchetto di cui si deve fare il debug non fornisce il proprio pacchetto *-dbgsym, è necessario installarlo dopo
averlo ricompilato nel modo seguente.
$ mkdir /path/new ; cd /path/new
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get install fakeroot devscripts build-essential
$ apt-get source package_name
$ cd package_name*
$ sudo apt-get build-dep ./
Debian Reference 256 / 263
È necessario controllare gli script di compilazione del pacchetto ed assicurarsi di usare ”CFLAGS=-g -Wall” per la
compilazione di binari.
Quando un programma va in crash, è una buona idea inviare un segnalazione di bug riportando le informazioni di
backtrace.
Il backtrace può essere ottenuto da gdb(1) utilizzando uno dei seguenti approcci:
Per situazioni con cicli infiniti o tastiera bloccata, si può forzare il crash del programma premendo Ctrl-\ o Ctrl-C
o eseguendo “kill -ABRT PID”. (Vedere Sezione 9.4.12.)
Suggerimento
Spesso si vede un backtrace in cui una o più delle prime righe sono in ”malloc()” o ”g_malloc()”. Quando ciò
accade è probabile che il backtrace non sia molto utile. Il metodo più semplice per trovare informazioni utili è di
impostare la variabile d’ambiente ”$MALLOC_CHECK_” al valore 2 (malloc(3)). Lo si può fare mentre si esegue
gdb nel modo seguente.
$ MALLOC_CHECK_=2 gdb hello
Debian Reference 257 / 263
Per scoprire le dipendenze di un programma da librerie, usare ldd(1) nel modo seguente.
$ ldd /usr/bin/ls
librt.so.1 => /lib/librt.so.1 (0x4001e000)
libc.so.6 => /lib/libc.so.6 (0x40030000)
libpthread.so.0 => /lib/libpthread.so.0 (0x40153000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Affinché ls(1) funzioni in un ambiente ”chroot”, le librerie in questione devono essere disponibili nell’ambiente ”chroot”.
Vedere Sezione 9.4.6.
In Debian sono disponibili diversi strumenti di tracciamento di chiamate dinamiche. Vedere Sezione 9.4.
Se un programma gnome preview1 ha ricevuto un errore X, si dovrebbe leggere un messaggio del tipo seguente.
The program 'preview1' received an X Window System error.
Se ciò avviene, si può provare ad eseguire il programma con ”--sync” ed interrompere alla funzione ”gdk_x_error”
per ottenere un backtrace.
Nota
Per disassemblare codice in modo interattivo si può usare gdb(1).
12.6.1 Make
Make è un’utilità per mantenere gruppi di programmi. Quando make(1) viene eseguito, make legge il file di regole,
”Makefile” e aggiorna il file target se dipende da file prerequisiti che sono stati modificati dall’ultima volta che esso
stesso è stato modificato oppure se il file target non esiste. L’esecuzione di questi aggiornamenti può avvenire in
modo concorrente.
La sintassi del file di regole è la seguente.
target: [ prerequisites ... ]
[TAB] command1
[TAB] -command2 # ignore errors
[TAB] @command3 # suppress echoing
Qui ”[TAB] è il codice di TAB. Ciascuna riga è interpretata dalla shell dopo la sostituzione delle variabili di make.
Usare ”\” alla fine di una riga per continuare lo script. Usare ”$$” per inserire ”$” per valori di ambiente per uno script
di shell.
Regole implicite per il target ed i prerequisiti possono essere scritte, per esempio, nel modo seguente.
%.o: %.c header.h
Debian Reference 259 / 263
In questo caso il target contiene il carattere ”%” (esattamente un carattere). Il ”%” fa corrispondenza con qualsiasi
sottostringa non vuota nei nomi di file dei target effettivi. Similmente i prerequisiti usano ”%” per mostrare come i loro
nomi trovino corrispondenza nei nomi dei target effettivi.
12.6.2 Autotools
Autotools è una suite di strumenti per programmazione progettata per assistere nella creazione di pacchetti di codice
sorgente portabili su molti sistemi simil-UNIX.
• Autoconf è uno strumento per produrre uno script di shell chiamato ”configure” da ”configure.ac”.
avvertimento
Non sovrascrivere mai file di sistema quando si installano programmi compilati in proprio.
Debian non tocca i file in ”/usr/local/” o ”/opt”. Perciò se si compila un programma dai sorgenti, installarlo in
”/usr/local/” in modo che non interferisca con Debian.
$ cd src
$ ./configure --prefix=/usr/local
$ make # this compiles program
$ sudo make install # this installs the files in the system
Debian Reference 260 / 263
In alternativa, se si è assolutamente certi che il processo di installazione mette i file solo in ”/usr/local/” e lì non
c’è nulla di importante, si può cancellare tutto ciò che contiene con la riga di comando seguente.
# find /usr/local -type f -print0 | xargs -0 rm -f
Se non si è sicuri di dove siano installati i file, si dovrebbe prendere in considerazione l’uso di checkinstall(8) dal
pacchetto checkinstall, che fornisce un percorso di disinstallazione pulita. Ora permette di creare un pacchetto
Debian con l’opzione ”-D”.
12.6.3 Meson
• Autotools basato su Make è stato lo standard di fatto per le infrustrutture di compilazione portabili sin dagli anni ’90.
È estremamente lento.
• CMake inizialmente rilasciato nel 2000 ha migliorato significativamente la velocità, ma era ancora costruito sulla
base dell’intrinsicamente lento Make. (Ora Ninja può essere il suo backend.)
• Ninja inizialmente rilasciato nel 2012 è pensato per rimpiazzare Make per una velocità di compilazione ulteriormente
migliorata ed è progettato per avere i propri file di input generati da un sistema di compilazione di più alto livello.
• Meson rilasciato inizialmente nel 2013 è il nuovo popolare e veloce sistema di compilazione di più alto livello che
usa Ninja come suo backend.
Vedere la documentazione in ”The Meson Build system” e ”The Ninja build system”.
12.7 Web
Pagine web dinamiche interattive di base possono essere create nel modo seguente.
• Il programma CGI (uno qualsiasi dei ”program.*”) sul server web è eseguito con la variabile d’ambiente ”$QUERY_STRING
• Lo stdout del programma CGI viene inviato al browser web ed è presentato come pagina web dinamica interattiva.
Debian Reference 261 / 263
Per ragioni di sicurezza è bene non creare a mano nuovi metodi per analizzare i parametri CGI. Per loro esistono
moduli Perl e Python comprovati. PHP è fornito con queste funzionalità. Quando è necessaria l’archiviazione dei
dati client vengono usati i cookie HTTP. Quando è necessaria l’elaborazione dei dati lato client, viene spesso usato
Javascript.
Per maggiori informazioni vedere CGI (Common Gateway Interface), Apache Software Foundation e JavaScript.
Cercare ”CGI tutorial” su Google digitando l’URL codificato https://www.google.com/search?hl=en&ie=UTF-8&q=CGI+tutoria
direttamente nell’indirizzo del browser è un buon modo per vedere lo script CGI in azione sul server di Google.
parola
pacchetto popcon dimensione descrizione
chiave
V:707,
perl 673 AWK→PERL converte codice sorgente da AWK a PERL:a2p(1)
I:989
converte codice sorgente da FORTRAN 77 a
f2c V:0, I:3 442 FORTRAN→C
C/C++: f2c(1)
convertitore da NASM (formato Intel) a GAS
intel2gas V:0, I:0 178 intel→gas
(GNU Assembler)
• debuild(1) e sbuild(1)
• Sezione 12.5.2 per la ricompilazione per il debug
• Guide for Debian Maintainers (il pacchetto debmake-doc)
• Debian Developer’s Reference (pacchetto developers-reference)
Ci sono pacchetti come debmake, dh-make, dh-make-perl, ecc., che aiutano nella creazione dei pacchetti.
Debian Reference 262 / 263
Appendice A
Appendice
Il sistema Linux è una piattaforma informatica molto potente per un computer in rete. Tuttavia imparare come usare
tutte le sue funzionalità non è semplice. Impostare la coda di stampa LPR con una stampante non PostScript è stato
un buon esempio di problema su cui si può inciampare. (Ora non ci sono più problemi dato che le installazioni più
recenti usano il nuovo sistema CUPS.)
Esiste una mappa dettagliata completa chiamata ”CODICE SORGENTE”. È molto accurata, ma estremamente dif-
ficile da capire. Esistono anche documenti di consultazione chiamati HOWTO e mini-HOWTO; sono più facili da
comprendere ma tendono a dare troppi dettagli e a perdere di vista il quadro generale. Io ho a volte dei problemi a
trovare la giusta sezione in un lungo HOWTO quando ho bisogno di trovare un paio di comandi da eseguire.
Spero che questa ”Debian Reference (versione 2.125)” (2024-11-15 13:32:55 UTC) possa fornire un buon punto di
partenza per le persone nel labirinto Debian.
La Debian Reference è stata iniziata da Osamu Aoki <osamu at debian dot org> come promemoria personale per
l’amministrazione di sistema. Molti dei contenuti derivano dalle conoscenze ottenute dalla mailing-list debian-user e
da altre risorse Debian.
Seguendo un suggerimento di Josip Rodin, che è stato molto attivo nel DDP (Debian Documentation Project), è stata
creata la ”Debian Reference (versione 1, 2001-2007) come parte della documentazione del DDP.
Dopo 6 anni, Osamu ha realizzato che la ”Debian Reference (versione 1)” era sorpassata ed ha iniziato a riscrivere
molti dei suoi contenuti. La nuova ”Debian Reference (versione 2)” è stata rilasciata nel 2008.
L’autore ha aggiornato la ”Debian Reference (versione 2)” per affrontare nuovi argomenti (Systemd, Wayland, IMAP,
PipeWire, Linux kernel 5.10) e per rimuovere argomenti sorpassati (SysV init, CVS, Subversion, SSH protocol 1,
kernel Linux pre-2.5). I riferimenti a situazioni del rilascio Jessie 8 (2015-2020) o precedenti sono stati per lo più
rimossi.
Questa ”Debian Reference (versione 2.125)” (2024-11-15 13:32:55 UTC) copre per lo più i rilasci Debian Bookworm
(=stable) e Trixie (=testing).
Si può rintracciare l’origine e l’ispirazione del tutorial nelle fonti seguenti.
• ”Debian GNU/Linux: Guide to Installation and Usage” di John Goerzen ed Ossama Othman (1999)
– reso obsoleto dalla ”Debian Reference (versione 1)”
Si può rintracciare parte dell’origine e dell’ispirazione per la descrizione dei pacchetti e degli archivi nei documenti
seguenti.
• ”Debian FAQ” (versione marzo 2002, quando era mantenuta da Josip Rodin)
Si può rintracciare parte dell’origine e dell’ispirazione per gli altri contenuti nei documenti seguenti.
La precedente ”Debian Reference (versione 1)” è stata creata con il contributo di molti.
Molte pagine di manuale e info del sistema Debian, oltre a pagine web di autori a monte e documenti Wikipedia sono
stati usati come riferimenti principali per la stesura di questo documento. Nella misura in cui Osamu Aoki ha ritenuto
rientrasse nei limiti dell’uso legittimo (fair use), molte parti de esse, specialmente le definizioni dei comandi, sono
state riprese letteralmente dopo attenti sforzi editoriali per inserirle nello stile e nello scopo di questo documento.
La descrizione dello strumento di debug gdb è stata estesa usando i contenuti del Debian wiki sul backtrace con il
consenso di Ari Pollak, Loïc Minier e Dafydd Harries.
I contenuti della ”Debian Reference (versione 2.125)” (2024-11-15 13:32:55 UTC) sono per la maggior parte miei
tranne per quanto specificato in precedenza. Anche questi sono stati aggiornati grazie a contributi.
Il documento ”Debian Reference (versione 1)” è stato tradotto da Davide Di Lazzaro (mc0315 at mclink dot it).
Il documento ”Debian Reference (versione 2)” è tradotto da Beatrice Torracca (beatricet at libero dot it), usando
laddove il testo aveva subito modifiche marginali rispetto alla versione 1 parti del lavoro di traduzione di Davide Di
Lazzaro, dopo i necessari cambiamenti. Il documento è stato revisionato da Vittore Luccio (vluccio at gmail dot com).
L’autore, Osamu Aoki, ringrazia tutti coloro che con il loro aiuto hanno reso questo documento possibile.
I sorgenti del documento originale inglese sono attualmente scritti in file XML DocBook. Questi sorgenti XML Docbook
vengono convertiti in HTML, testo semplice, PostScript e PDF. (Alcuni formati possono non essere saltati per la
distribuzione.)