La copia di documenti richiedeva un membro del personale dedicato negli uffici e quindi una macchina dedicata. Oggi, copiare è un compito che gli utenti di computer svolgono senza pensarci due volte. Copiare i dati su un computer è così banale che le copie vengono eseguite senza che tu te ne accorga, ad esempio quando trascini un file su un'unità esterna.
Il concetto che le entità digitali siano banali da riprodurre è pervasivo, quindi la maggior parte degli informatici moderni non pensa alle opzioni disponibili per duplicare il proprio lavoro. Eppure, ci sono diversi modi per copiare un file su Linux. Ogni metodo ha caratteristiche sfumate che potrebbero avvantaggiarti, a seconda di ciò che devi fare.
Ecco una serie di modi per copiare file su Linux, BSD e Mac.
Copia nella GUI
Contenitori Linux
- Cosa sono i container Linux?
- Un'introduzione alla terminologia dei contenitori
- Download:Primer sui contenitori
- Operatori Kubernetes:automatizzare la piattaforma di orchestrazione dei container
- eBook:modelli Kubernetes per la progettazione di app cloud native
- Cos'è Kubernetes?
Come con la maggior parte dei sistemi operativi, puoi eseguire tutta la gestione dei file nella GUI, se è il modo in cui preferisci lavorare.
Trascina e rilascia
Il modo più ovvio per copiare un file è il modo in cui probabilmente sei abituato a copiare i file sui computer:trascina e rilascia. Sulla maggior parte dei desktop Linux, trascinando e rilasciando da una cartella locale a un'altra cartella locale sposta un file per impostazione predefinita. Puoi modificare questo comportamento in un'operazione di copia tenendo premuto il tasto Ctrl dopo aver iniziato a trascinare il file.
Il tuo cursore potrebbe mostrare un indicatore, come un segno più, per mostrare che sei in modalità copia:
Tieni presente che se il file esiste su un sistema remoto, che si tratti di un server Web o di un altro computer della tua rete a cui accedi attraverso un protocollo di condivisione file, l'azione predefinita è spesso copiare, non spostare, il file.
Clic destro
Se ritieni che trascinare e rilasciare file sul desktop sia impreciso o goffo, o se così facendo ti allontana troppo le mani dalla tastiera, di solito puoi copiare un file utilizzando il menu di scelta rapida. Questa possibilità dipende dal file manager che utilizzi, ma in genere un clic con il pulsante destro del mouse produce un menu contestuale contenente azioni comuni.
L'azione di copia del menu contestuale memorizza il percorso del file (dove il file esiste sul tuo sistema) negli appunti in modo che tu possa quindi incollare il file da qualche altra parte:
In questo caso, non stai effettivamente copiando il contenuto del file negli appunti. Invece, stai copiando il percorso del file. Quando incolli, il tuo file manager esamina il percorso negli appunti e quindi esegue un comando di copia, copiando il file che si trova in quel percorso nel percorso in cui stai incollando.
Copiare dalla riga di comando
Sebbene la GUI sia un modo generalmente familiare per copiare i file, la copia in un terminale può essere più efficiente.
cp
L'ovvio equivalente basato su terminale per copiare e incollare un file sul desktop è il cp comando. Questo comando copia file e directory ed è relativamente semplice. Utilizza la familiare fonte e obiettivo (rigorosamente in quest'ordine) sintassi, quindi per copiare un file chiamato example.txt nei tuoi Documenti directory:
$ cp example.txt ~/Documents
Proprio come quando trascini un file in una cartella, questa azione non sostituisce i Documenti con esempio.txt . Invece, cp rileva quei Documenti è una cartella e inserisce una copia di example.txt dentro.
Puoi anche, in modo conveniente (ed efficiente), rinominare il file mentre lo copi:
$ cp example.txt ~/Documents/example_copy.txt
Questo fatto è importante perché ti permette di fare una copia di un file nella stessa directory dell'originale:
$ cp example.txt example.txt
cp: 'example.txt' and 'example.txt' are the same file.
$ cp example.txt example_copy.txt
Per copiare una directory, devi utilizzare -r opzione, che sta per --ricorsivo . Questa opzione esegue cp nella directory inode , quindi su tutti i file all'interno della directory. Senza -r opzione, cp non riconosce nemmeno una directory come un oggetto che può essere copiato:
$ cp notes/ notes-backup
cp: -r not specified; omitting directory 'notes/'
$ cp -r notes/ notes-backup
gatto
Il gatto command è uno dei comandi più fraintesi, ma solo perché esemplifica l'estrema flessibilità di un sistema POSIX. Tra tutto il resto gatto fa (incluso lo scopo previsto di concat enteting file), può anche copiare. Ad esempio, con cat puoi creare due copie da un file con un solo comando. Non puoi farlo con cp .
Il significato dell'utilizzo di cat copiare un file è il modo in cui il sistema interpreta l'azione. Quando usi cp per copiare un file, gli attributi del file vengono copiati insieme al file stesso. Ciò significa che i permessi del file del duplicato sono gli stessi dell'originale:
$ ls -l -G -g
-rw-r--r--. 1 57368 Jul 25 23:57 foo.jpg
$ cp foo.jpg bar.jpg
-rw-r--r--. 1 57368 Jul 29 13:37 bar.jpg
-rw-r--r--. 1 57368 Jul 25 23:57 foo.jpg
Usando gatto per leggere il contenuto di un file in un altro file, tuttavia, invoca una chiamata di sistema per creare un nuovo file. Questi nuovi file sono soggetti al tuo umask predefinito impostazioni. Per saperne di più su umask
, leggi l'articolo di Alex Juarez su umask e autorizzazioni in generale.
Esegui umask per ottenere le impostazioni correnti:
$ umask
0002
Questa impostazione significa che ai nuovi file creati in questa posizione viene concesso 664 (rw-rw-r-- ) autorizzazione perché nulla è mascherato dalle prime cifre di umask impostazione (e il bit eseguibile non è un bit predefinito per la creazione di file) e l'autorizzazione di scrittura è bloccata dalla cifra finale.
Quando copi con cat , in realtà non copi il file. Tu usi gatto per leggere il contenuto del file, quindi reindirizzare l'output in un nuovo file:
$ cat foo.jpg > baz.jpg
$ ls -l -G -g
-rw-r--r--. 1 57368 Jul 29 13:37 bar.jpg
-rw-rw-r--. 1 57368 Jul 29 13:42 baz.jpg
-rw-r--r--. 1 57368 Jul 25 23:57 foo.jpg
Come puoi vedere, gatto ha creato un file nuovo di zecca con la umask predefinita del sistema applicata.
Alla fine, quando tutto ciò che vuoi fare è copiare un file, i tecnicismi spesso non contano. Ma a volte vuoi copiare un file e ottenere un insieme predefinito di autorizzazioni e con cat puoi fare tutto con un comando.
rsync
La rsync command è uno strumento versatile per copiare file, con la notevole capacità di sincronizzare origine e destinazione. Nella sua forma più semplice, rsync può essere utilizzato in modo simile a cp comando:
$ rsync example.txt example_copy.txt
$ ls
example.txt example_copy.txt
Il vero potere del comando sta nella sua capacità di non copia quando non è necessario. Se utilizzi rsync per copiare un file in una directory, ma quel file esiste già in quella directory, quindi rsync non si preoccupa di eseguire l'operazione di copia. A livello locale, questo fatto non significa necessariamente molto, ma se stai copiando gigabyte di dati su un server remoto, questa funzione fa la differenza.
Ciò che fa la differenza anche localmente, tuttavia, è la capacità del comando di differenziare i file che condividono lo stesso nome ma che contengono dati diversi. Se ti sei mai trovato di fronte a due copie di quella che dovrebbe essere la stessa directory, allora rsync può sincronizzarli in una directory contenente le ultime modifiche di ciascuna. Questa configurazione è un evento piuttosto comune nei settori che non hanno ancora scoperto la magia del controllo della versione e per le soluzioni di backup in cui esiste una fonte di verità da propagare.
Puoi emulare questa situazione intenzionalmente creando due cartelle, una denominata esempio e l'altro example_dupe :
$ mkdir example example_dupe
Crea un file nella prima cartella:
$ echo "one" > example/foo.txt
Usa rsync per sincronizzare le due directory. Le opzioni più comuni per questa operazione sono -a (per archivio , che garantisce la conservazione di collegamenti simbolici e altri file speciali) e -v (per prolisso , fornendoti un feedback sullo stato di avanzamento del comando):
$ rsync -av example/ example_dupe/
Le directory ora contengono le stesse informazioni:
$ cat example/foo.txt
one
$ cat example_dupe/foo.txt
one
Se il file che stai trattando come origine diverge, la destinazione viene aggiornata in modo che corrisponda a:
$ echo "two" >> example/foo.txt
$ rsync -av example/ example_dupe/
$ cat example_dupe/foo.txt
one
two
Tieni presente che il rsync comando ha lo scopo di copiare i dati, non di agire come un sistema di controllo della versione. Ad esempio, se un file nella destinazione in qualche modo precede un file nell'origine, quel file viene comunque sovrascritto perché rsync confronta i file per divergenza e presuppone che la destinazione sia sempre pensata per rispecchiare l'origine:
$ echo "You will never see this note again" > example_dupe/foo.txt
$ rsync -av example/ example_dupe/
$ cat example_dupe/foo.txt
one
two
Se non ci sono modifiche, non viene eseguita alcuna copia.
La rsync comando ha molte opzioni non disponibili in cp , come la possibilità di impostare autorizzazioni di destinazione, escludere file, eliminare file obsoleti che non vengono visualizzati in entrambe le directory e molto altro. Usa rsync come potente sostituto di cp , o semplicemente come utile supplemento.
Molti modi per copiare
Esistono molti modi per ottenere essenzialmente lo stesso risultato su un sistema POSIX, quindi sembra che la reputazione di flessibilità dell'open source sia ben guadagnata. Ho perso un modo utile per copiare i dati? Condividi i tuoi hack di copia nei commenti.