Indice
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
|
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:904, I:999 | 3152 | .tar |
tar (1) |
strumento di archiviazione standard (standard de facto) |
cpio
|
V:392, I:998 | 1140 | .cpio |
cpio (1) |
strumento di archiviazione Unix in stile System V, da usare con
find (1) |
binutils
|
V:160, I:657 | 98 | .ar |
ar (1) |
strumento di archiviazione per la creazione di librerie statiche |
fastjar
|
V:2, I:23 | 183 | .jar |
fastjar (1) |
strumento di archiviazione per Java (simile a zip) |
pax
|
V:11, I:22 | 170 | .pax |
pax (1) |
nuovo strumento POSIX di archiviazione, compromesso tra
tar e cpio |
gzip
|
V:878, I:999 | 242 | .gz |
gzip (1), zcat (1), … |
utilità GNU di compressione LZ77 (standard de facto) |
bzip2
|
V:161, I:974 | 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:24 | 149 | .lzma |
lzma (1) |
LZMA compression utility with higher compression
ratio than gzip (1) (deprecated) |
xz-utils
|
V:437, 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:5, I:29 | 1898 | .zstd |
zstd (1), zstdcat (1), … |
Zstandard fast lossless compression utility |
p7zip
|
V:84, I:471 | 987 | .7z |
7zr (1), p7zip (1) |
strumento di archiviazione file 7-Zip con alto rapporto di compressione (compressione LZMA) |
p7zip-full
|
V:117, I:485 | 4664 | .7z |
7z (1), 7za (1) |
strumento di archiviazione file 7-Zip con alto rapporto di compressione (compressione LZMA e altre) |
lzop
|
V:12, I:111 | 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:48, I:420 | 623 | .zip |
zip (1) |
InfoZIP: strumento di archiviazione e compressione per DOS |
unzip
|
V:141, I:793 | 385 | .zip |
unzip (1) |
InfoZIP: strumento di estrazione di archivi e decompressione per DOS |
![]() |
Avvertimento |
---|---|
Non impostare la variabile " |
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.
Tabella 10.2. Elenco di strumenti di copia e sincronizzazione
pacchetto | popcon | dimensione | strumento | funzione |
---|---|---|---|---|
coreutils
|
V:892, I:999 | 17372 | GNU cp | copia file e directory localmente ("-a" per modalità ricorsiva) |
openssh-client
|
V:813, I:996 | 4754 | scp | copia file e directory da remoto (client, "-r " per
modalità ricorsiva) |
openssh-server
|
V:694, I:827 | 1690 | sshd | copia file e directory da remoto (server remoto) |
rsync
|
V:274, I:564 | 737 | sincronizzazione e backup in remoto unidirezionale | |
unison
|
V:3, I:16 | 14 | sincronizzazione e backup in remoto bidirezionale |
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, «List of other version control system tools» 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
In alternativa usare i comandi seguenti.
$ find ./source -xdev -print0 | tar -cvJf archive.tar.xz --null -F -
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.
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 |
---|---|
|
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.4.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.
Cercare tutti i file a partire da "/percorso/di
"
Limitare globalmente la ricerca al file system da cui è richiamato e usare espressioni regolari ERE (vedere Sezione 1.6.2, «Espressioni regolari»)
Escludere i file che corrispondono all'espressione regolare
".*\.cpio
" o ".*~
" dalla ricerca
fermando la loro elaborazione
Escludere le directory che corrispondono all'espressione regolare
".*/\.git
" dalla ricerca fermando la loro elaborazione
Escludere i file più grandi di 99 Megabyte (unità di 1048576 byte) dalla ricerca fermando la loro elaborazione
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 |
---|---|
Alcune opzioni per |
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).
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 |
---|---|
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. |
Un support di archiviazione removibile può essere uno dei seguenti.
Fotocamera digitale
Lettore audio digitale
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
".
![]() |
Suggerimento |
---|---|
I dispositivi montati automaticamente hanno l'opzione di mount
" |
![]() |
Suggerimento |
---|---|
Nei moderni ambienti desktop il montaggio automatico avviene solo quando i
device dei supporti removibili non sono elencati in
" |
Mount point under modern desktop environment is chosen as
"/media/username/disk_label
" which
can be customized by the following.
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 |
---|---|
Può essere necessario fornire come opzione di montaggio la scelta della codifica (vedere Sezione 8.1.3, «Codifica per i nomi di file»). |
![]() |
Suggerimento |
---|---|
L'uso del menu GUI per smontare un file system può rimuovere il suo nodo di
device generato dinamicamente come " |
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.
Tabella 10.3. Elenco di possibili scelte per il file system di dispositivi di archiviazione removibili con scenari di uso tipici
filesystem name | typical usage scenario |
---|---|
FAT12 | condivisione interpiattaforma di dati su dischetti floppy (<32MiB) |
FAT16 | condivisione interpiattaforma di dati su dispositivi come piccoli dischi fissi (<2GiB) |
FAT32 | condivisione interpiattaforma di dati su dispositivi come grandi dischi fissi (<8TiB, supportato da sistemi più recenti di MS Windows95 OSR2) |
exFAT | cross platform sharing of data on the large hard disk like device (<512TiB, supported by WindowsXP, Mac OS X Snow Leopard 10.6.5, and Linux kernel since 5.4 release) |
NTFS | condivisione interpiattaforma di dati su dispositivi come grandi dischi fissi (supportato nativamente su MS Windows NT e versioni successive e supportato da NTFS-3G attraverso FUSE in Linux) |
ISO9660 | condivisione interpiattaforma di dati statici su CD-R e DVD+/-R |
UDF | scrittura incrementale di dati su CD-R e DVD+/-R (nuovo) |
MINIX | archiviazione, efficiente in termini di spazio, di file dati unix su dischetti floppy |
ext2 | condivisione di dati su dispositivi come dischi fissi con sistemi Linux più vecchi |
ext3 | condivisione di dati su dispositivi come dischi fissi con sistemi Linux più vecchi |
ext4 | condivisione di dati su dispositivi come dischi fissi con sistemi Linux recenti |
btrfs | sharing of data on the hard disk like device with current Linux systems with read-only snapshots |
![]() |
Suggerimento |
---|---|
Vedere Sezione 9.9.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.
Partizionare con fdisk
(8), cfdisk
(8) o
parted
(8) (vedere Sezione 9.6.2, «Configurazione del partizionamento dei dischi») creando un'unica partizione
primaria e marcarla nel modo seguente.
Tipo "6", cioè FAT16, per supporti più piccoli di 2GB.
Tipo "c", cioè FAT32 (LBA), per supporti più grandi.
Formattare la partizione primaria con mkfs.vfat
(8) nel
modo seguente.
Per FAT16, semplicemente con il suo nome di device, ad esempio
"/dev/sda1
".
Per FAT32, con il suo nome di device e l'opzione esplicita, ad esempio
"-F 32 /dev/sda1
"
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 |
![]() |
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.
Tabella 10.4. Elenco dei servizi di rete da scegliere in base allo scenario di uso tipico
servizio di rete | descrizione dello scenario di uso tipico |
---|---|
file system montato di rete SMB/CIFS con Samba | condivisione di file attraverso "rete Microsoft Windows", vedere
smb.conf (5) e The Official Samba 3.x.x HOWTO and
Reference Guide o il pacchetto samba-doc |
file system montato di rete NFS con il kernel Linux | condivisione di file attraverso "rete Unix/Linux", vedere
exports (5) e Linux
NFS-HOWTO |
servizio HTTP | condivisione di file tra client/server web |
servizio HTTPS | condivisione di file tra client/server web con SSL (Secure Sockets Layer) cifrato o TLS (Transport Layer Security) |
servizio FTP | condivisione di file tra client/server FTP |
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.
Vedere anche Sezione 6.5, «Altri server di rete» e Sezione 6.6, «Altri client di rete».
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 |
---|---|
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.
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/
"
Local programs: data in "/usr/local/
" or
"/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
Cron job as a user process: files in
"/var/spool/cron/crontabs
" directory and restart
cron
(8). See Sezione 9.4.14, «Pianificare compiti in modo regolare» for cron
(8) and
crontab
(1).
Systemd timer jobs as user processes: files in
"~/.config/systemd/user
" directory. See
systemd.timer
(5) and
systemd.service
(5).
Autostart jobs as user processes: files in
"~/.config/autostart
" directory. See Desktop Application Autostart
Specification.
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
Valutazione dei rischi e dei costi
Risk of data when lost
Data should be at least on different disk partitions preferably on different disks and machines to withstand the filesystem corruption. Important data are best stored on a read-only filesystem. [4]
Risk of data when breached
Sensitive identity data such as
"/etc/ssh/ssh_host_*_key
",
"~/.gnupg/*
", "~/.ssh/*
",
"~/.local/share/keyrings/*
",
"/etc/passwd
", "/etc/shadow
",
"popularity-contest.conf
",
"/etc/ppp/pap-secrets
", and
"/etc/exim4/passwd.client
" should be backed up as
encrypted. [5] (See Sezione 9.9, «Suggerimenti per la cifratura dei dati».)
Never hard code system login password nor decryption passphrase in any script even on any trusted system. (See Sezione 10.3.6, «Password keyring».)
Modi in cui le cose possono andare storte e loro probabilità
Hardware (especially HDD) will break
Filesystem may be corrupted and data in it may be lost
Remote storage system can't be trusted for security breaches
Weak password protection can be easily compromised
File permission system may be compromised
Risorse necessarie per il backup: umane, hardware, software, …
Automatic scheduled backup with cron job or systemd timer job
![]() |
Nota |
---|---|
Non fare il backup dei contenuti dei pseudo file system che si trovano in
|
![]() |
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)»). |
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 | 351 | dump (8) e restore (8) di BSD 4.4 per file system ext2/ext3/ext4 |
xfsdump
|
V:0, I:8 | 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:9, I:13 | 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:0, I:2 | 9998 | Amanda: Advanced Maryland Automatic Network Disk Archiver (Librerie) |
amanda-client
|
V:0, I:2 | 1088 | Amanda: Advanced Maryland Automatic Network Disk Archiver (Client) |
amanda-server
|
V:0, I:0 | 1090 | 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:2, I:3 | 3184 | BackupPC è un sistema ad altre prestazioni di qualità professionale per il backup di PC (basato su dischi) |
duplicity
|
V:13, I:32 | 1834 | backup incrementali (remoti) |
flexbackup
|
V:0, I:0 | 243 | backup incrementali (remoti) |
rdiff-backup
|
V:5, I:13 | 733 | backup incrementali (remoti) |
restic
|
V:1, I:4 | 21080 | 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.3, «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 |
---|---|
Per imparare ulteriori informazioni sul pacchetto |
For a personal Debian desktop system running testing
suite, I only need to protect personal and critical data. I reinstall
system once a year anyway. Thus I see no reason to backup the whole system
or to install a full featured backup utility.
At the same time, it is very valuable to have frequent recent snapshots of personal data and system configuration, and occasional full backups of personal data.
I usually make these snapshots and backups with a simple shell script bss. This script is a short shell which uses standard
utilities: btrfs subvolume snapshot
,
rsync
. For data encryption, disk image is created by
fallocate
(1) and configured with
cryptsetup
(8).
![]() |
Suggerimento |
---|---|
Si possono ripristinare i dati di configurazione di debconf con
" |
L'infrastruttura di sicurezza dei dati viene fornita dalla combinazione di strumenti di cifratura dei dati, strumenti message digest e strumenti di firma.
Tabella 10.6. Elenco di strumenti per l'infrastruttura di sicurezza dei dati
pacchetto | popcon | dimensione | comando | descrizione |
---|---|---|---|---|
gnupg
|
V:533, I:936 | 864 | gpg (1) |
GNU Privacy Guard - strumento OpenPGP di cifratura e firma |
gpgv
|
V:874, I:999 | 882 | gpgv (1) |
GNU Privacy Guard - strumento di verifica delle firme |
paperkey
|
V:1, I:13 | 58 | paperkey (1) |
estrae solamente le informazioni segrete da chiavi OpenPGP segrete |
cryptsetup
|
V:21, I:78 | 444 | cryptsetup (8), … |
utilities for dm-crypt block device encryption supporting LUKS |
coreutils
|
V:892, I:999 | 17372 | md5sum (1) |
calcola e controlla message digest MD5 |
coreutils
|
V:892, I:999 | 17372 | sha1sum (1) |
calcola e controlla message digest SHA1 |
openssl
|
V:806, I:994 | 1466 | openssl (1ssl) |
calcola message digest con "openssl dgst " (OpenSSL) |
libsecret-tools
|
V:1, I:8 | 45 | secret-tool (1) |
store and retrieve passwords (CLI) |
seahorse
|
V:77, I:253 | 7804 | seahorse (1) |
key management tool (GNOME) |
See Sezione 9.9, «Suggerimenti per la cifratura dei dati» on dm-crypt and fscrypt 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.
Tabella 10.7. Elenco di comandi per GNU Privacy Guard per la gestione delle chiavi
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 |
Quelli seguenti sono i significati dei codici di fiducia.
Tabella 10.8. Elenco dei significati dei codici di fiducia
codice | descrizione della fiducia |
---|---|
- |
nessuna fiducia assegnata dal proprietario / ancora non calcolata |
e |
calcolo della fiducia fallito |
q |
informazioni insufficienti per il calcolo |
n |
non fidarsi mai di questa chiave |
m |
marginalmente affidabile |
f |
completamente fidata |
u |
definitivamente fidata |
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).
Quelli seguenti sono esempi di comandi per usare GNU Privacy Guard su file.
Tabella 10.9. Elenco di comandi GNU Privacy Guard per file
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 pippo@example.org |
invia un messaggio di posta firmato leggibile a
pippo@example.org |
gpg --clearsign --not-dash-escaped patchfile |
inserisce una firma leggibile in 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-sig file |
" " |
gpg --verify file.sig file |
verifica file con file.sig |
gpg -o cifr_file.gpg -r nome -e file |
cifratura di file nel file binario cifr_file.gpg usando la chiave pubblica indirizzata a nome |
gpg -o cifr_file.gpg --recipient nome --encrypt file |
" " |
gpg -o cifr_file.asc -a -r nome -e file |
cifratura di file nel file con cifratura corazzata ASCII cifr_file.asc 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 |
" " |
gpg -o cifr_file.asc -a -c file |
cifratura simmetrica pensata per nome di file nel file con cifratura corazzata ASCII cifr_file.asc |
gpg -o file -d cifr_file.gpg -r nome |
decifratura |
gpg -o file --decrypt cifr_file.gpg |
" " |
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
The gnupg
plugin let you run GnuPG transparently for
files with extension ".gpg
", ".asc
",
and ".ppg
".[6]
$ sudo aptitude install vim-scripts $ echo "packadd! gnupg" >> ~/.vim/vimrc
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. |
On GNOME system, the GUI tool seahorse
(1) manages
passwords and stores them securely in the keyring
~/.local/share/keyrings/*
.
secret-tool
(1) can store password to the keyring from the
command line.
Let's store passphrase used for LUKS/dm-crypt encrypted disk image
secret-tool
(1) can store password to the keyring from the
command line.
$ secret-tool store --label='LUKS passphrase for disk.img' LUKS my_disk.img Password: ********
This stored password can be retrieved and fed to other programs, e.g.,
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 |
---|---|
Whenever you need to provide password in a script, use
|
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:75, I:714 | 248 | patch (1) |
applica un file diff ad un originale |
vim
|
V:103, I:394 | 3498 | vimdiff (1) |
confronta 2 file uno di fianco all'altro in vim |
imediff
|
V:0, I:0 | 169 | imediff (1) |
strumento interattivo a tutto schermo per unione di modifiche a 2/3 vie |
meld
|
V:14, I:37 | 3086 | meld (1) |
confronta e fonde file (GTK) |
wiggle
|
V:0, I:0 | 174 | wiggle (1) |
applica le patch respinte |
diffutils
|
V:870, I:993 | 1598 | diff (1) |
confronta i file riga per riga |
diffutils
|
V:870, I:993 | 1598 | diff3 (1) |
confronta e fonde tre file riga per riga |
quilt
|
V:3, I:30 | 788 | quilt (1) |
gestisce serie di patch |
wdiff
|
V:8, I:65 | 644 | wdiff (1) |
mostra le differenze di parole tra file di testo |
diffstat
|
V:14, I:143 | 81 | diffstat (1) |
produce un istogramma delle modifiche apportate da un diff |
patchutils
|
V:16, I:139 | 232 | combinediff (1) |
crea una patch cumulativa da due patch incrementali |
patchutils
|
V:16, I:139 | 232 | dehtmldiff (1) |
estrae un diff da una pagina HTML |
patchutils
|
V:16, I:139 | 232 | filterdiff (1) |
estrae o esclude diff da un file diff |
patchutils
|
V:16, I:139 | 232 | fixcvsdiff (1) |
aggiusta file diff creati da CVS che sono male interpretati da
patch (1) |
patchutils
|
V:16, I:139 | 232 | flipdiff (1) |
scambia l'ordine di due patch |
patchutils
|
V:16, I:139 | 232 | grepdiff (1) |
mostra quali file siano modificati da una patch che fa corrispondenza con un'espressione regolare |
patchutils
|
V:16, I:139 | 232 | interdiff (1) |
mostra le differenze tra due file diff unificati |
patchutils
|
V:16, I:139 | 232 | lsdiff (1) |
mostra quali file vengano modificati da una patch |
patchutils
|
V:16, I:139 | 232 | recountdiff (1) |
ricalcola conteggi e offset in diff unificati |
patchutils
|
V:16, I:139 | 232 | rediff (1) |
aggiusta conteggi ed offset di un diff modificato a mano |
patchutils
|
V:16, I:139 | 232 | splitdiff (1) |
separa due patch incrementali |
patchutils
|
V:16, I:139 | 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 |
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
If you have two versions of a source code, you can perform 2-way merge
interactively using imediff
(1) by the following.
$ imediff -o file.merged file.old file.new
If you have three versions of a source code, you can perform 3-way merge
interactively using imediff
(1) by the following.
$ imediff -o file.merged file.yours file.base file.theirs
Git is the tool of choice these days for the version control system (VCS) 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 are some Git related packages.
Tabella 10.11. Elenco di pacchetti e comandi relativi a Git
pacchetto | popcon | dimensione | comando | descrizione |
---|---|---|---|---|
git
|
V:318, I:498 | 36744 | git (7) |
Git, il sistema di controllo delle revisioni veloce, scalabile e distribuito |
gitk
|
V:6, I:40 | 1760 | gitk (1) |
browser degli archivi Git con interfaccia utente grafica e cronologia |
git-gui
|
V:1, I:22 | 2354 | git-gui (1) |
interfaccia utente grafica per Git (senza cronologia) |
git-email
|
V:0, I:11 | 1006 | git-send-email (1) |
invia una raccolta di patch come messaggio di posta da Git |
git-buildpackage
|
V:1, I:11 | 4220 | git-buildpackage (1) |
automatizza la creazione di pacchetti Debian con Git |
dgit
|
V:0, I:1 | 497 | dgit (1) |
git interoperability with the Debian archive |
imediff
|
V:0, I:0 | 169 | git-ime (1) |
interactive git commit split helper tool |
stgit
|
V:0, I:0 | 603 | stg (1) |
quilt sopra a git (Python) |
git-doc
|
I:14 | 12150 | N/D | documentazione ufficiale per Git |
gitmagic
|
I:1 | 721 | N/D | "Git Magic", una guida per Git più semplice da capire |
È 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 yourname@example.com
You may also customize the Git default behavior by the following.
$ git config --global init.defaultBranch main $ git config --global pull.rebase true $ git config --global push.default current
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
La configurazione globale può essere controllata con il comando seguente.
$ git config --global --list
Git operation involves several data.
The working tree which holds user facing files and you make changes to them.
The changes to be recorded must be explicitly selected and staged to the
index. This is git add
and git rm
commands.
The index which holds staged files.
Staged files will be committed to the local repository upon the subsequent
request. This is git commit
command.
The local repository which holds committed files.
Git records the linked history of the committed data and organizes them as branches in the repository.
The local repository can send data to the remote repository by git
push
command.
The local repository can receive data from the remote repository by
git fetch
and git pull
commands.
The git pull
command performs git
merge
or git rebase
command after git
fetch
command.
Here, git merge
combines two separate branches of history
at the end to a point. (This is default of git pull
without customization and may be good for upstream people who publish branch
to many people.)
Here, git rebase
creates one single branch of sequential
history of the remote branch one followed by the local branch one. (This is
pull.rebase true
customization case and may be good for
rest of us.)
The remote repository which holds committed files.
The communication to the remote repository uses secure communication protocols such as SSH or HTTPS.
The working tree is files outside of the .git/
directory. Files inside of the .git/
directory hold the
index, the local repository data, and some git configuration text files.
Here is an overview of main Git commands.
Tabella 10.12. Main Git commands
Git command | funzione |
---|---|
git init |
creazione dell'archivio (locale) |
git clone URL |
clone the remote repository to a local repository with the working tree |
git pull origin main |
update the local main branch by the remote repository
origin |
git add . |
add file(s) in the working tree to the index for pre-existing files in index only |
git add -A . |
add file(s) in the working tree to the index for all files including removals |
git rm filename |
remove file(s) from the working tree and the index |
git commit |
commit staged changes in the index to the local repository |
git commit -a |
add all changes in the working tree to the index and commit them to the local repository (add + commit) |
git push -u origin branch_name |
update the remote repository origin by the local
branch_name branch (initial invocation) |
git push origin branch_name |
update the remote repository origin by the local
branch_name branch (subsequent invocation) |
git diff treeish1 treeish2 |
show difference between treeish1 commit and treeish2 commit |
gitk |
GUI display of VCS repository branch history tree |
Here are some Git tips.
Tabella 10.13. Git tips
Git command line | funzione |
---|---|
gitk --all |
see complete Git history and operate on them such as resetting HEAD to another commit, cheery-picking patches, creating tags and branches ... |
git stash |
get the clean working tree without loosing data |
git remote -v |
check settings for remote |
git branch -vv |
check settings for branch |
git status |
show working tree status |
git config -l |
list git settings |
git reset --hard HEAD; git clean -x -d -f |
revert all working tree changes and clean them up completely |
git rm --cached filename |
revert staged index changed by git add filename |
git reflog |
get reference log (useful for recovering commits from the removed branch) |
git branch new_branch_name HEAD@{6} |
create a new branch from reflog information |
git remote add new_remote URL |
add a new_remote remote repository pointed by URL |
git remote rename origin upstream |
rename the remote repository name from origin to
upstream |
git branch -u upstream/branch_name |
set the remote tracking to the remote repository upstream
and its branch name branch_name . |
git remote set-url origin https://foo/bar.git |
change URL of origin |
git remote set-url --push upstream DISABLED |
disable push to upstream (Edit
.git/config to re-enable) |
git checkout -b topic_branch ; git push -u topic_branch
origin |
make a new topic_branch and push it to
origin |
git branch -m oldname newname |
rename local branch name |
git push -d origin branch_to_be_removed |
remove remote branch (new method) |
git push origin :branch_to_be_removed |
remove remote branch (old method) |
git checkout --orphan unconnected |
create a new unconnected branch |
git rebase -i origin/main |
reorder/drop/squish commits from origin/main to clean
branch history |
git reset HEAD^; git commit --amend |
squash last 2 commits into one |
git checkout topic_branch ; git merge --squash topic_branch
|
squash entire topic_branch into a commit |
git fetch --unshallow --update-head-ok origin
'+refs/heads/*:refs/heads/*' |
convert a shallow clone to the full clone of all branches |
git ime |
split the last commit into a series of file-by-file smaller commits
etc. (imediff package required) |
git repack -a -d; git prune |
repack the local repository into single pack (this may limit chance of lost data recovery from erased branch etc.) |
![]() |
Avvertimento |
---|---|
Non usare stringhe per etichette contenenti spazi, anche se alcuni strumenti
come |
![]() |
Attenzione |
---|---|
If a local branch which has been pushed to remote repository is rebased or
squashed, pushing this branch has risks and requires
|
![]() |
Attenzione |
---|---|
A partire dall'inizio del 2006, l'invocazione diretta, dalla riga di
comando, di un sottocomando di |
![]() |
Suggerimento |
---|---|
If there is a executable file |
Vedere la documentazione seguente.
pagina man: git(1)
(/usr/share/doc/git-doc/git.html
)
Manuale utente di Git
(/usr/share/doc/git-doc/user-manual.html
)
Un tutorial introduttivo su
git (/usr/share/doc/git-doc/gittutorial.html
)
Un tutorial introduttivo su
git: parte seconda
(/usr/share/doc/git-doc/gittutorial-2.html
)
Everyday GIT With 20 Commands
Or So (/usr/share/doc/git-doc/giteveryday.html
)
Git Magic
(/usr/share/doc/gitmagic/html/index.html
)
The version control systems (VCS) is sometimes known as the revision control system (RCS), or the software configuration management (SCM).
Here is a summary of the notable other non-Git VCS on the Debian system.
Tabella 10.14. List of other version control system tools
pacchetto | popcon | dimensione | strumento | tipo di VCS | commento |
---|---|---|---|---|---|
mercurial
|
V:6, I:42 | 1059 | Mercurial | distribuito | DVCS in Python e un po' di C |
darcs
|
V:0, I:7 | 23160 | Darcs | distribuito | DVCS con algebra intelligente per le patch (lento) |
bzr
|
V:1, I:14 | 28 | Bazaar | distribuito | DVCS influenced by tla written in Python (historic) |
tla
|
V:0, I:2 | 1011 | GNU arch | distribuito | DVCS mainly by Tom Lord (historic) |
subversion
|
V:17, I:98 | 4874 | Subversion | remoto | "CVS done right", newer standard remote VCS (historic) |
cvs
|
V:4, I:36 | 4620 | CVS | remoto | previous standard remote VCS (historic) |
tkcvs
|
V:0, I:1 | 1498 | CVS, … | remoto | visualizzazione GUI di alberi di archivi VCS (CVS, Subversion, RCS) |
rcs
|
V:3, I:17 | 562 | RCS | locale | "Unix SCCS done right" (historic) |
cssc
|
V:0, I:2 | 2044 | CSSC | locale | clone of the Unix SCCS (historic) |
[4] A write-once media such as CD/DVD-R can prevent overwrite accidents. (See Sezione 9.8, «I dati binari» for how to write to the storage media from the shell commandline. GNOME desktop GUI environment gives you easy access via menu: "Places→CD/DVD Creator".
[5] Some of these data can not be regenerated by entering the same input string to the system.
[6] If you use "~/.vimrc
" instead of
"~/.vim/vimrc
", please substitute accordingly.