Questa lezione vi farà conoscere i seguenti comandi:
Questi quattro comandi sono anche tra i comandi di Linux più frequentemente utilizzati. Sono i comandi elementari per gestire file e directory.
Adesso, a essere sinceri, alcuni dei compiti forniti da questi comandi sono ottenibili molto facilmente con un gestore di file grafico, col quale si può trascinare un file da una directory a un'altra, tagliare e incollare file, cancellare file, ecc. Allora, perché usare questi vecchi programmi a riga di comando?
La risposta è: potenza e flessibilità. Mentre è facile realizzare semplici manipolazioni di file con un gestore di file grafico, operazioni più complicate possono essere eseguite più facilmente con programmi a riga di comando. Per esempio, come copiereste tutti i file HTML da una directory a un'altra, però solo i file che non esistono nella directory di destinazione o quelli più recenti delle versioni della directory di destinazione? Piuttosto difficile con un gestore di file. Piuttosto facile con la riga di comando:
[io@linuxbox io]$ cp -u *.html destinazione
Prima di iniziare con i nostri comandi, voglio parlare di una funzionalità della shell che rende questi comandi così potenti. Poiché la shell usa molto i nomi di file, è provvista di caratteri speciali per aiutarvi a specificare rapidamente gruppi di nomi di file. Questi caratteri speciali sono chiamati metacaratteri e permettono di selezionare nomi di file basati su modelli di caratteri.
La tabella sottostante elenca i metacaratteri e cosa selezionano:
Metacarattere |
Significato |
* |
Corrisponde ad ogni carattere |
? |
corrisponde ad ogni singolo carattere |
[caratteri] |
Corrisponde a ogni carattere che è uno dei caratteri dell'insieme.
L'insieme dei caratteri può anche essere espresso come una classe di caratteri POSIX come una delle seguenti: Classi di caratteri POSIX [:alnum:] Caratteri alfanumerici [:alpha:] Caratteri alfabetici [:digit:] Numeri [:upper:] Caratteri alfanumerici maiuscoli [:lower:] Caratteri alfanumerici minuscoli |
[!caratteri] |
Corrisponde ad ogni carattere che non fa parte dell'insieme di caratteri |
Utilizzando i metacaratteri, è possibile costruire criteri di selezione di nomi di file molto sofisticati.
Di seguito si riportano esempi di modelli e a cosa equivalgono:
Modello | Corrispondenza |
* |
Tutti i nomi dei file |
g* |
Tutti i nomi dei file che iniziano con il carattere "g" |
b*.txt |
Tutti i nomi dei file che iniziano con il carattere "b" e finiscono con il carattere ".txt" |
Data??? |
Ogni nome di file che inizia con i caratteri "Data" seguito esattamente tre caratteri |
[abc]* |
Ogni nome di file che inizia con "a" o "b" o "c" seguito qualsiasi altro carattere |
[[:upper:]]* |
Ogni nome di file che inizia con una lettera maiuscola. Questo è un esempio di una classe di caratteri. |
BACKUP.[[:digit:]][[:digit:]] |
Un altro esempio di classe di caratteri. Questo modello corrisponde a ogni nome di file che inizia con i caratteri "BACKUP." seguito esattamente da due numeri. |
*[![:lower:]] |
Ogni nome di file che non finisce con una lettera minuscola. |
Potete utilizzare i caratteri jolly con qualsiasi comando che accetti nomi di file come argomento.
Il programma cp
copia file e directory. Nella sua forma più
semplice, copia un singolo file:
[io@linuxbox io]$ cp file1 file2
Può anche essere utilizzato per copiare più file in una directory differente:
[io@linuxbox io]$ cp file... directory
Una nota sulla notazione: ... significa che una voce può essere ripetuta una o più volte.
Altri utili esempi del comando cp
e delle sue opzioni includono:
Comando | Risultati |
cp file1 file2 |
Copia il contenuto del file1 dentro il file2. Se il file2 non esiste, viene creato; altrimenti, il file2 è silenziosamente sovrascritto con il contenuto del file1. |
cp -i file1 file2 |
Come sopra, ma in questo caso, dal momento che è specificata l'opzione "-i" (interattivo), se il file2 esiste l'utente viene avvertito che il file2 sta per essere sovrascritto con il contenuto del file1. |
cp file1 dir1 |
Copia il contenuto del file1 (dentro un file chiamato file1) all'interno della directory dir1. |
cp -R dir1 dir2 |
Copia il contenuto della directory dir1. Se la directory dir2 non esiste, viene creata. Altrimenti, crea una directory chiamata dir1 all'interno della directory dir2. |
Il comando mv
fornisce due funzioni differenti a seconda di come viene
utilizzato. Esso sposta uno o più file in una directory differente;
oppure rinomina un file o una directory.
Per rinominare un file si usa così:
[io@linuxbox io]$ mv nomefile1 nomefile2
Per spostare file in una directory differente:
[io@linuxbox io]$ mv file1 file2 file3 directory
Esempi di mv
e delle sue opzioni includono:
Comando | Risultati |
mv file1 file2 |
Se il file2 non esiste, il file1 viene rinominato file2. Se il file2 esiste, il suo contenuto è sostituito silenziosamente con il contenuto del file1. |
mv -i file1 file2 |
Come il precedente, ma in questo caso, dato che è specificata l'opzione "-i" (interattivo), se il file2 esiste l'utente viene avvertito prima che esso sia sovrascritto con il contenuto del file1. |
mv file1 file2 file3 dir1 |
I file file1, file2,
file3 sono spostati alla directory
dir1. Se dir1 non esiste,
|
mv dir1 dir2 |
Se dir2 non esiste, allora dir1 è rinominata dir2. Se dir2 esiste, la directory dir1 è spostata all'interno della directory dir2. |
Il comando rm
rimuove (cancella) file e directory.
[io@linuxbox io]$ rm file...
Può anche essere utilizzato per cancellare directory:
[io@linuxbox io]$ rm -r directory...
Esempi di rm
e delle sue opzioni includono:
Comando | Risultati |
rm file1 file2 |
Cancella file1 e file2. |
rm -i file1 file2 |
Come il precedent, ma in questo caso, dato che l'opzione "-i" (interattivo) è specificata, l'utente viene avvertito prima che ogni file sia cancellato. |
rm -r dir1 dir2 | Le directory dir1 e dir2vengono cancellate insieme a tutto il lorocontenuto. |
Fate attenzione quando usate rm! |
Linux non possiede un comando "undelete" (annulla la cancellazione).
Una volta che si cancella qualcosa con
Prima di usare |
Il comando mkdir
è utilizzato per creare le directory. Per
usarlo, digitate semplicemente:
[io@linuxbox io]$ mkdir dir
Dato che i comandi che abbiamo spiegato qui accettano nomi di file multipli e directory come argomenti, potete usare i metacaratteri per specificarli. Qui ci sono un po' di esempi:
Comando |
Risultati |
cp *.txt file testo |
Copia tutti i file nella directory di lavoro corrente con i nomi che finiscono con i caratteri ".txt" in una directory esistente chiamata file_testo. |
mv mia dir ../*.bak mia nuova dir |
Sposta la sottodirectory mia_dir e tutti i file che terminano in ".bak" della directory genitrice della directory di lavoro corrente in una directory esistente chiamata mia_nuova_dir. |
rm *~ |
Cancella tutti i file nella directory di lavoro corrente che terminano con il carattere "~". Alcune applicazioni creano file di backup usando questo schema nel nome. Usando questo comando si elimineranno da una directory. |