Capitolo 10. Gestione dei dati

Indice

10.1. Condividere, copiare ed archiviare
10.1.1. Strumenti di archiviazione e compressione
10.1.2. Strumenti di copia e sincronizzazione
10.1.3. Esempi di invocazione per archivi
10.1.4. Esempi di invocazione per la copia
10.1.5. Esempi di invocazione per la selezione di file
10.1.6. Supporti di archiviazione
10.1.7. Supporti di archiviazione removibili
10.1.8. Scelta del file system per la condivisione di dati
10.1.9. Condividere dati attraverso una rete
10.2. Backup e ripristino
10.2.1. Suite con utilità di backup
10.2.2. Personal backup
10.3. Infrastruttura di sicurezza dei dati
10.3.1. Gestione delle chiavi per GnuPG
10.3.2. Usare GnuPG su file
10.3.3. Usare GnuPG con Mutt
10.3.4. Usare GnuPG con Vim
10.3.5. Somme di controllo MD5
10.4. Strumenti per la fusione di codice sorgente
10.4.1. Estrarre differenze da file sorgenti
10.4.2. Fondere aggiornamenti per file sorgenti
10.4.3. Interactive merge
10.5. Sistemi di controllo delle versioni
10.5.1. Configurazione del client Git
10.5.2. Comandi Git
10.5.3. Git per registrare la cronologia della configurazione
10.5.4. Documenti di consultazione per Git

In questo capitolo sono descritti strumenti e trucchi per gestire dati binari e di testo in un sistema Debian.

[Avvertimento] 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).

La sicurezza dei dati e la loro condivisione controllata hanno diversi aspetti.

  • La creazione di archivi di dati

  • L'accesso ad archivi remoti

  • La duplicazione

  • Il tenere traccia della cronologia delle modifiche

  • La facilitazione della condivisione dei dati

  • Il prevenire l'accesso non autorizzato ai file

  • La rilevazione di modifiche non autorizzate ai file

Queste azioni possono essere realizzate usando una combinazione di strumenti.

  • Strumenti di archiviazione e compressione

  • Strumenti di copia e sincronizzazione

  • file system di rete

  • Supporti di archiviazione removibili

  • Secure Shell

  • Il sistema di autenticazione

  • Strumenti per sistemi di controllo delle versioni

  • Strumenti crittografici per hash e cifratura

Ecco una tabella riassuntiva degli strumenti di archiviazione e compressione disponibili per il sistema Debian.

Tabella 10.1. Elenco di strumenti di archiviazione e compressione

pacchetto popcon dimensione estensione comando commento
tar V:914, I:999 3152 .tar tar(1) strumento di archiviazione standard (standard de facto)
cpio V:489, I:998 1144 .cpio cpio(1) strumento di archiviazione Unix in stile System V, da usare con find(1)
binutils V:164, I:673 97 .ar ar(1) strumento di archiviazione per la creazione di librerie statiche
fastjar V:2, I:25 183 .jar fastjar(1) strumento di archiviazione per Java (simile a zip)
pax V:12, I:24 170 .pax pax(1) nuovo strumento POSIX di archiviazione, compromesso tra tar e cpio
gzip V:891, I:999 242 .gz gzip(1), zcat(1), … utilità GNU di compressione LZ77 (standard de facto)
bzip2 V:147, I:973 122 .bz2 bzip2(1), bzcat(1), … utilità per compressione con ordinamento dei blocchi Burrows-Wheeler con maggiore rapporto di compressione di gzip(1) (più lenta di gzip con sintassi simile)
lzma V:2, I:27 149 .lzma lzma(1) LZMA compression utility with higher compression ratio than gzip(1) (deprecated)
xz-utils V:453, I:980 612 .xz xz(1), xzdec(1), … utilità di compressione XZ con maggiore rapporto di compressione di bzip2(1) (più lenta di gzip, ma più veloce di bzip2; sostituto dell'utilità di compressione LZMA)
zstd V:4, I:24 1902 .zstd zstd(1), zstdcat(1), … Zstandard fast lossless compression utility
p7zip V:79, I:454 987 .7z 7zr(1), p7zip(1) strumento di archiviazione file 7-Zip con alto rapporto di compressione (compressione LZMA)
p7zip-full V:102, I:469 4664 .7z 7z(1), 7za(1) strumento di archiviazione file 7-Zip con alto rapporto di compressione (compressione LZMA e altre)
lzop V:10, I:85 164 .lzo lzop(1) utilità di compressione LZO con velocità di compressione e decompressione più alta di quella di gzip(1) (più basso rapporto di compressione di gzip con sintassi simile)
zip V:49, I:427 623 .zip zip(1) InfoZIP: strumento di archiviazione e compressione per DOS
unzip V:132, I:792 385 .zip unzip(1) InfoZIP: strumento di estrazione di archivi e decompressione per DOS

[Avvertimento] Avvertimento

Non impostare la variabile "$TAPE" a meno che non si sappia esattamente cosa aspettarsi. Cambia il comportamento di tar(1).

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] Suggerimento

Gli strumenti di controllo delle versioni VCS (Version control system) in Tabella 10.11, «Elenco di strumenti per sistemi di controllo delle versioni» possono essere usati come strumenti di copia e sincronizzazione multidirezionali.

Ecco diversi modi di copiare l'intero contenuto della directory "./sorgente", usando diversi strumenti.

  • Copia locale: directory "./sorgente" → directory "/dest"

  • Copia remota: directory "./sourgente" sull'host locale → directory "/dest" sull'host "utente@host.dom"

rsync(8):

# cd ./source; rsync -aHAXSv . /dest
# cd ./source; rsync -aHAXSv . user@host.dom:/dest

In alternativa si può usare la sintassi con "una barra / alla fine della directory sorgente".

# rsync -aHAXSv ./source/ /dest
# rsync -aHAXSv ./source/ user@host.dom:/dest

In alternativa usare i comandi seguenti.

# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest
# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest

GNU cp(1) e openSSH scp(1):

# cd ./source; cp -a . /dest
# cd ./source; scp -pr . user@host.dom:/dest

GNU tar(1):

# (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
# (cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'

cpio(1):

# cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest

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.

  • in "/dest/pippo": rsync(8), GNU cp(1) e scp(1)

  • "/dest/percorso/di/sorgente/pippo": GNU tar(1) e cpio(1)

[Suggerimento] 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, «Esempi di invocazione per archivi» e Sezione 10.1.4, «Esempi di invocazione per la copia») o per xargs(1) (vedere Sezione 9.3.9, «Ripetere un comando su diversi file»). Questo funzionamento può essere migliorato usando le sue opzioni di comando.

La sintassi base di find(1) può essere riassunta nel modo seguente.

  • Gli argomenti condizionali sono valutati da sinistra a destra.

  • Questa valutazione si ferma una volta che il risultato è determinato.

  • L'operatore "OR logico" (specificato con "-o" tra condizioni) ha una precedenza più bassa dell'operatore "AND logico" (specificato da "-a" o dall'assenza di un operatore tra condizioni).

  • L'operatore "NOT logico" (specificato da "!" prima di una condizione) ha una precedenza più alta di un operatore "AND logico".

  • L'opzione "-prune" restituisce sempre una condizione di VERO logico e, se si tratta di una directory, la ricerca si ferma a questo punto.

  • L'opzione "-name trova corrispondenze con il nome base del file tramite espressioni glob di shell (vedere Sezione 1.5.6, «Glob della shell»), ma fa corrispondenza anche con il carattere iniziale "." con l'uso di metacaratteri come "*" e "?". (Nuova funzionalità POSIX.)

  • L'opzione "-regex" trova corrispondenze con il percorso completo usando, in modo predefinito, BRE in stile emacs (vedere Sezione 1.6.2, «Espressioni regolari»).

  • L'opzione "-size" trova corrispondenze con file in base alla loro dimensione (valori preceduti da "+" o "-" per cercare dimensioni, rispettivamente, più grandi o piccole del valore).

  • L'opzione "-newer" trova corrispondenze con file più recenti di quello specificato come argomento dell'opzione.

  • L'opzione "-print0" restituisce sempre il valore logico VERO e stampa il nome file completo (terminato dal carattere null) sullo standard output.

find(1) è spesso usato con uno stile di invocazione come il seguente.

# find /path/to \
    -xdev -regextype posix-extended \
    -type f -regex ".*\.cpio|.*~" -prune -o \
    -type d -regex ".*/\.git" -prune -o \
    -type f -size +99M -prune -o \
    -type f -newer /path/to/timestamp -print0

Il comando precedente si traduce nelle azioni seguenti.

  1. Cercare tutti i file a partire da "/percorso/di"

  2. Limitare globalmente la ricerca al file system da cui è richiamato e usare espressioni regolari ERE (vedere Sezione 1.6.2, «Espressioni regolari»)

  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/marcaturaorario"

Notare nell'esempio precedente l'uso della parte di comando "-prune -o per escludere file.

[Nota] Nota

Alcune opzioni per find(1) potrebbero non essere supportate per i sistemi *nix non Debian. In questi casi, cambiare 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] 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).

  • 100+ anni: carta senza acidi con inchiostro

  • 100 anni: supporti ottici (CD/DVD, CD/DVD-R)

  • 30 anni: supporti magnetici (nastri, dischetti floppy)

  • 20 anni: supporti ottici a cambio di fase (CD-RW)

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).

  • 250,000+ cicli: unità a disco fisso

  • 10,000+ cicli: memoria flash

  • 1,000 cicli: CD/DVD-RW

  • 1 ciclo: CD/DVD-R, carta

[Attenzione] 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] 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] 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.

Un support di archiviazione removibile può essere uno dei seguenti.

Possono essere connessi in uno dei modi seguenti.

Gli ambienti desktop moderni, come GNOME e KDE, possono montare questi dispositivi removibili automaticamente senza una voce corrispondente in "/etc/fstab".

  • Il pacchetto udisks fornisce un demone e le utilità associate per montare e smontare questi dispositivi.

  • D-bus crea eventi per dare inizio ai processi automatici.

  • PolicyKit fornisce i privilegi necessari.

[Suggerimento] Suggerimento

I dispositivi montati automaticamente hanno l'opzione di mount "uhelper=" che viene usata da umount(8).

[Suggerimento] 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/etichetta_disco" che può essere personalizzata nel modo seguente.

  • mlabel(1) per file system FAT

  • genisoimage(1) con l'opzione "-V" per file system ISO9660

  • tune2fs(1) con l'opzione "-L" per file system ext2/ext3/ext4

[Suggerimento] Suggerimento

Può essere necessario fornire come opzione di montaggio la scelta della codifica (vedere Sezione 8.1.3, «Codifica per i nomi di file»).

[Suggerimento] 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 andrebbero formattati con un filesystem comune supportato da entrambi i sistemi. Quello che segue è un elenco delle scelte possibili per il file system.


[Suggerimento] Suggerimento

Vedere Sezione 9.8.1, «Cifratura di dischi removibili con dm-crypt/LUKS» 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 interpiattaforma di dati, le scelte seguenti dovrebbero essere quelle più sicure.

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] 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] 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] Suggerimento

Per maggiori informazioni sui file system e sull'accesso ad essi, leggere il "Filesystems HOWTO".

Tutti sanno che i computer a volte si danneggiano oppure errori umani causano danni al sistema e ai dati. Le operazioni 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] 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.

Ci sono 3 fattori chiave che determinano la reale politica di backup e ripristino.

  1. Sapere di cosa fare il backup ed il ripristino

    • I file dati direttamente creati dall'utente: in "~/"

    • I file dati creati da applicazioni usate dall'utente: dati in "/var/" (tranne "/var/cache/", "/var/run/" e "/var/tmp/")

    • File di configurazione del sistema: dati in "/etc/"

    • Software locali: dati in "/usr/local/" o "/opt/"

    • Informazioni di installazione del sistema: un memorandum in puro testo sui passi chiave (partizioni, …)

    • Insiemi di dati comprovati: confermati da operazioni preventive sperimentali di ripristino

  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

    • Valore dei dati se persi

    • Risorse necessarie per il backup: umane, hardware, software, …

    • Modi in cui le cose possono andare storte e loro probabilità

[Nota] 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, «procfs e sysfs» e Sezione 1.2.13, «tmpfs»). A meno di non sapere esattamente ciò che si sta facendo, sono un'enorme mole di dati senza utilità.

Per quanto riguarda il rendere sicura l'archiviazione dei dati, questi dovrebbero essere come minimo in una partizione diversa del disco e preferibilmente su dischi e macchine diversi per sopravvivere alla corruzione del file system. È preferibile archiviare i dati importanti su supporti scrivibili una sola volta, come CD/DVD-R per prevenire incidenti di sovrascrittura. (Vedere Sezione 9.7, «I dati binari» per come scrivere sul supporto di archiviazione dalla riga di comando. L'ambiente desktop GNOME con interfaccia grafica fornisce un facile accesso tramite menu: "Risorse→Creazione CD/DVD".)

[Nota] Nota

Durante il backup dei dati può essere preferibile fermare alcuni demoni applicativi come l'MTA (vedere Sezione 6.2.4, «Agente di trasporto della posta (MTA)»).

[Nota] Nota

Si dovrebbe dare un'attenzione particolare al backup ed al ripristino di file con dati relativi all'identità dell'utente, come "/etc/ssh/ssh_host_dsa_key", "/etc/ssh/ssh_host_rsa_key", "~/.gnupg/*", "~/.ssh/*", "/etc/passwd", "/etc/shadow", "/etc/fetchmailrc", "popularity-contest.conf", "/etc/ppp/pap-secrets" e "/etc/exim4/passwd.client". Alcuni di questi dati non possono essere ricreati inserendo la stessa stringa di input nel sistema.

[Nota] Nota

Se si esegue un compito di cron come processo di un utente, si deve ripristinare i file nella directory "/var/spool/cron/crontabs" e riavviare cron(8). Vedere Sezione 9.3.14, «Pianificare compiti in modo regolare» per informazioni su cron(8) e crontab(1).

Quello che segue è un elenco di importanti suite di utilità di backup disponibili in un sistema Debian

Tabella 10.5. Elenco di suite con utilità di backup

pacchetto popcon dimensione descrizione
dump V:1, I:6 352 dump(8) e restore(8) di BSD 4.4 per file system ext2/ext3/ext4
xfsdump V:0, I:9 854 dump e ripristino con xfsdump(8) e xfsrestore(8) per file system XFS in GNU/Linux e IRIX
backupninja V:3, I:4 367 sistema di meta-backup leggero ed estensibile
bacula-common V:10, I:14 2158 Bacula: backup, ripristino e controllo in rete - file comuni di supporto
bacula-client I:3 183 Bacula: backup, ripristino e controllo in rete - metapacchetto client
bacula-console V:1, I:4 107 Bacula: backup, ripristino e controllo in rete - console testuale
bacula-server I:1 183 Bacula: backup, ripristino e controllo in rete - metapacchetto server
amanda-common V:1, I:2 10030 Amanda: Advanced Maryland Automatic Network Disk Archiver (Librerie)
amanda-client V:1, I:2 1088 Amanda: Advanced Maryland Automatic Network Disk Archiver (Client)
amanda-server V:0, I:0 1075 Amanda: Advanced Maryland Automatic Network Disk Archiver (Server)
backup-manager V:1, I:1 571 strumento di backup a riga di comando
backup2l V:0, I:1 114 strumento di backup/ripristino per supporti montabile (basato su dischi) che richiede bassa manutenzione
backuppc V:3, I:3 3183 BackupPC è un sistema ad altre prestazioni di qualità professionale per il backup di PC (basato su dischi)
duplicity V:9, I:19 1834 backup incrementali (remoti)
flexbackup V:0, I:0 243 backup incrementali (remoti)
rdiff-backup V:6, I:14 733 backup incrementali (remoti)
restic V:1, I:4 22540 backup incrementali (remoti)
slbackup V:0, I:0 151 backup incrementali (remoti)

Gli strumenti di backup hanno una propria specializzazione.

  • 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.

  • Regular backups of user data can be realized by a simple script (Sezione 10.2.2, «Personal backup»).

Gli strumenti base descritti in Sezione 10.1.1, «Strumenti di archiviazione e compressione» e Sezione 10.1.2, «Strumenti di copia e sincronizzazione» possono essere usati per facilitare il backup di sistema attraverso script personalizzati. Tali script possono essere migliorati con gli strumenti seguenti.

  • Il pacchetto restic permette backup incrementali (remoti).

  • Il pacchetto rdiff-backup permette backup incrementali (remoti).

  • Il pacchetto dump aiuta ad archiviare e ripristinare tutto il file system in maniera incrementale ed efficiente.

[Suggerimento] Suggerimento

Per imparare ulteriori informazioni sul pacchetto dump, vedere i file in "/usr/share/doc/dump/" e "Is dump really deprecated? (dump è davvero deprecato?).

L'infrastruttura di sicurezza dei dati viene fornita dalla combinazione di strumenti di cifratura dei dati, strumenti message digest e strumenti di firma.


See Sezione 9.8, «Suggerimenti per la cifratura dei dati» on dm-crypt and ecryptfs which implement automatic data encryption infrastructure via Linux kernel modules.

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

Il comando seguente recupera le chiavi sconosciute dal server di chiavi.

$ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\
  cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys

In OpenPGP Public Key Server (versioni pre-0.9.6) esisteva un bug che corrompeva le chiavi con più di 2 sottochiavi. I pacchetti GnuPG più recenti (>1.2.1-2) possono gestire queste sottochiavi corrotte. Vedere l'opzione "--repair-pks-subkey-bug in gpg(1).

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] 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.

Esistono molti strumenti per la fusione di codice sorgente. Quello che segue è un elenco di strumenti che hanno catturato la mia attenzione.

Tabella 10.10. Elenco di strumenti per la fusione di codice sorgente

pacchetto popcon dimensione comando descrizione
patch V:123, I:721 248 patch(1) applica un file diff ad un originale
vim V:102, I:404 3286 vimdiff(1) confronta 2 file uno di fianco all'altro in vim
imediff V:0, I:0 170 imediff(1) strumento interattivo a tutto schermo per unione di modifiche a 2/3 vie
meld V:14, I:38 3065 meld(1) confronta e fonde file (GTK)
wiggle V:0, I:0 174 wiggle(1) applica le patch respinte
diffutils V:883, I:993 1598 diff(1) confronta i file riga per riga
diffutils V:883, I:993 1598 diff3(1) confronta e fonde tre file riga per riga
quilt V:3, I:32 788 quilt(1) gestisce serie di patch
wdiff V:8, I:69 644 wdiff(1) mostra le differenze di parole tra file di testo
diffstat V:14, I:146 81 diffstat(1) produce un istogramma delle modifiche apportate da un diff
patchutils V:16, I:143 232 combinediff(1) crea una patch cumulativa da due patch incrementali
patchutils V:16, I:143 232 dehtmldiff(1) estrae un diff da una pagina HTML
patchutils V:16, I:143 232 filterdiff(1) estrae o esclude diff da un file diff
patchutils V:16, I:143 232 fixcvsdiff(1) aggiusta file diff creati da CVS che sono male interpretati da patch(1)
patchutils V:16, I:143 232 flipdiff(1) scambia l'ordine di due patch
patchutils V:16, I:143 232 grepdiff(1) mostra quali file siano modificati da una patch che fa corrispondenza con un'espressione regolare
patchutils V:16, I:143 232 interdiff(1) mostra le differenze tra due file diff unificati
patchutils V:16, I:143 232 lsdiff(1) mostra quali file vengano modificati da una patch
patchutils V:16, I:143 232 recountdiff(1) ricalcola conteggi e offset in diff unificati
patchutils V:16, I:143 232 rediff(1) aggiusta conteggi ed offset di un diff modificato a mano
patchutils V:16, I:143 232 splitdiff(1) separa due patch incrementali
patchutils V:16, I:143 232 unwrapdiff(1) ripristina patch il cui contenuto è stato mandato a capo automaticamente
dirdiff V:0, I:2 166 dirdiff(1) mostra le differenze ed apporta i cambiamenti tra alberi di directory
docdiff V:0, I:0 555 docdiff(1) confronta due file parola per parola / carattere per carattere
makepatch V:0, I:0 102 makepatch(1) genera file patch estesi
makepatch V:0, I:0 102 applypatch(1) applica file patch estesi

The version control systems (VCS) is sometimes known as the revision control system (RCS), or the software configuration management (SCM).

Git is the tool of choice these days since Git can do everything for both local and remote source code management.

Debian fornisce servizi Git liberi attraverso il servizio Debian Salsa. La sua documentazione è reperibile su https://wiki.debian.org/Salsa.

Here is a summary of the notable VCS on the Debian system.


Here is an overview of main Git commands.



[Attenzione] 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] Suggerimento

With git(1), you can work on a local topic branch with many commits with "git rebase -i master" to reorder/drop/squish commits and with occasional "git ime" to split the squashed commit into multiple commits. Then you can push commits with clean change history to the remote repository. See git-rebase(1) and git-ime(1).

[Suggerimento] Suggerimento

When you want to go back to the clean working directory without loosing the current state of the working directory, you can use "git stash". See git-stash(1).

[Suggerimento] Suggerimento

If there is a executable file git-foo in the path specified by $PATH, entering "git foo" without hyphen to the command line invokes this git-foo. This is a feature of the git command.

[Suggerimento] Suggerimento

GUI tools such as gitk(1) really help you with tracking revision history of files and operating on the repository such as changing between checked out branches and cherry-picking patches. The web interface provided by many public archives for browsing their repositories is also quite useful, too.

Si può registrare manualmente la cronologia della configurazione usando strumenti Git. Quello che segue è un semplice esempio che insegna a registrare il contenuto di "/etc/apt/".

$ cd /etc/apt/
$ sudo git init
$ sudo chmod 700 .git
$ sudo git add .
$ sudo git commit -a

Fare il commit della configurazione con una descrizione.

Modificare i file di configurazione

$ cd /etc/apt/
$ sudo git commit -a

Fare il commit della configurazione con una descrizione e andare avanti con la propria vita.

$ cd /etc/apt/
$ sudo gitk --all

Si avrà una completa cronologia della configurazione.

[Nota] Nota

Per lavorare con tutti i tipi di permessi dei dati di configurazione è necessario sudo(8). Per i dati di configurazione dell'utente, si può saltare l'uso di sudo.

[Nota] Nota

Il comando "chmod 700 .git" nell'esempio precedente è necessario per proteggere i dati dell'archivio da accessi non autorizzati.

[Suggerimento] Suggerimento

Per l'impostazione di un sistema di registrazione della configurazione più completo, guardare il pacchetto etckeeper: Sezione 9.2.9, «Registrare i cambiamenti a file di configurazione».

Vedere la documentazione seguente.

I comandi git-gui(1) e gitk(1) rendono l'uso di Git molto semplice.

[Avvertimento] 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.