Corso Linux / Creare, copiare, spostare ed eliminare file e directory

Per gestire file e directory in Linux usa mkdir per creare directory, touch per preparare un file vuoto e cp e mv per copiarlo, spostarlo o rinominarlo. rm elimina file e rmdir elimina directory vuote. Questa lezione svolge tutte le modifiche in una nuova cartella di esercitazione nella home, controllando il risultato dopo ogni operazione.

Prima di creare o spostare file applica i controlli sulla posizione corrente e sui percorsi. Se la directory proposta esiste già, scegli un nome nuovo e sostituiscilo coerentemente in tutti i passaggi. Se la creazione fallisce, fermati: non continuare con i comandi successivi su dati già presenti.

Preparare una nuova directory di esercitazione

Usa Bash e un normale account utente, senza sudo. ~/linux-course-07-practice deve essere una directory nuova e vuota, dedicata soltanto a questa esercitazione. Il primo mkdir, senza -p, segnala un errore se il nome è già occupato: considera l'errore un motivo per fermarti, non un passaggio da ignorare.

mkdir ~/linux-course-07-practice

Se riesce, normalmente mkdir non stampa messaggi. Controlla che la directory appena creata esista:

ls -ld ~/linux-course-07-practice

La prima lettera della riga di ls -ld deve indicare una directory, con d. Un errore di mkdir non viene annullato da un successivo ls riuscito: potrebbe essere una directory precedente. Prosegui soltanto dopo aver verificato che la creazione sia riuscita e che non contenga dati da conservare.

Crea due sottodirectory e controlla l'elenco:

mkdir ~/linux-course-07-practice/drafts ~/linux-course-07-practice/archive

ls ~/linux-course-07-practice

Devi vedere archive e drafts. Per percorsi più profondi mkdir -p può creare anche le directory genitore mancanti, ma accetta directory già esistenti; per questo non lo usiamo nella preparazione dell'esercizio.

Creare e controllare un file vuoto

Se il nome indicato non esiste, touch crea un file vuoto. Su un file esistente aggiorna invece i timestamp, normalmente quelli di accesso e modifica, senza svuotarne il contenuto. Non interpretarlo come un comando che crea sempre un nuovo file.

touch ~/linux-course-07-practice/drafts/notes.txt

ls -l ~/linux-course-07-practice/drafts/notes.txt

Per questo file appena creato, ls -l mostra una dimensione di 0 byte. Permessi, proprietario e data dipendono dall'ambiente. Touch non scrive testo: per aggiungere contenuto occorre un editor o un altro comando.

Confrontare copia e rinomina

cp lascia il file sorgente al suo posto e crea una copia separata. Il comando seguente copia notes.txt da drafts ad archive. In GNU cp, -i chiede conferma prima di sovrascrivere una destinazione esistente con quel nome.

cp -i ~/linux-course-07-practice/drafts/notes.txt ~/linux-course-07-practice/archive/notes.txt

ls -1 ~/linux-course-07-practice/drafts

ls -1 ~/linux-course-07-practice/archive

I due comandi ls -1 mostrano prima il contenuto di drafts, poi quello di archive. Il carattere di -1 è la cifra uno e richiede una voce per riga. I risultati consecutivi, senza i prompt della shell, sono:

notes.txt
notes.txt

Entrambe le directory contengono notes.txt. Sono file separati: una modifica successiva al contenuto di uno non aggiorna automaticamente l'altro. Il successo della copia non sostituisce una strategia di backup dei dati importanti.

mv sposta un file oppure, nella stessa directory, ne cambia il nome. Qui rinomina l'originale in notes-old.txt, lasciando invariato il nome della copia archiviata:

mv -i ~/linux-course-07-practice/drafts/notes.txt ~/linux-course-07-practice/drafts/notes-old.txt

ls -1 ~/linux-course-07-practice/drafts

ls -1 ~/linux-course-07-practice/archive

La prima riga proviene da drafts; la seconda da archive:

notes-old.txt
notes.txt

Una riga vuota tra i comandi nei blocchi non produce una riga vuota nell'output. Il vecchio nome dell'originale non compare più in drafts, mentre la copia rimane in archive. mv -i chiede conferma se la destinazione da sostituire esiste già: leggi il nome completo prima di rispondere.

Se l'ultimo argomento di cp o mv è una directory esistente, il file viene collocato al suo interno con il proprio nome. Controlla quindi se la destinazione è un file o una directory. -i protegge soltanto attraverso la decisione che prendi alla domanda: non rende innocua una risposta affermativa al bersaglio sbagliato.

Eliminare un file e una directory vuota

rm rimuove il file indicato e normalmente non lo sposta nel cestino. Prima controlla il percorso con ls. Qui -i richiede una conferma per la cancellazione: verifica il nome nella domanda e acconsenti solo se è il file di prova previsto.

ls -l ~/linux-course-07-practice/drafts/notes-old.txt

rm -i ~/linux-course-07-practice/drafts/notes-old.txt

Con una localizzazione inglese, una risposta y seguita da Invio conferma; n rifiuta. Lingua e formulazione possono variare: leggi il messaggio del sistema. Se rifiuti, il file resta presente. Non proseguire dando per avvenuta una cancellazione che hai rifiutato.

Se hai confermato, drafts è vuota. Puoi eliminarla con rmdir, che normalmente rifiuta una directory non vuota:

rmdir ~/linux-course-07-practice/drafts

ls ~/linux-course-07-practice

L'ultimo elenco deve contenere ancora archive. Questa directory contiene notes.txt, quindi un tentativo di rimuoverla con rmdir fallirebbe. Per indicarla da qualunque posizione occorre il percorso ~/linux-course-07-practice/archive: il solo nome relativo archive ha senso soltanto dalla directory di esercitazione.

Conserva il materiale finché ti serve. Quando non ne avrai più bisogno, controlla i singoli percorsi e decidi separatamente cosa eliminare. Non trasformare un errore di “directory non vuota” in una cancellazione ricorsiva indiscriminata. Rm non offre una funzione incorporata per annullare l'operazione; la possibilità di recupero dipende da fattori che non puoi dare per garantiti.

Cosa verificare prima di modificare file

  • Posizione corrente: usa pwd quando un percorso relativo dipende da dove ti trovi.
  • Oggetto: usa ls -ld per esaminare il file o la directory indicati, non soltanto il contenuto di una directory.
  • Sovrascrittura: conserva un backup dei dati importanti e controlla se il nome di destinazione è già occupato prima di copiare o spostare.
  • Cancellazione: leggi il percorso completo e la domanda di conferma; non abbreviare un percorso a intuito.

Questi esempi operano su file ordinari e directory di prova. Collegamenti simbolici, permessi, alias della shell e copie tra file system diversi possono richiedere verifiche ulteriori: per i dettagli consulta le guide a touch e ai timestamp, mkdir e alla creazione di directory, cp e alla copia dei file, mv e allo spostamento o alla rinomina, rm e alla rimozione dei file e rmdir e alle directory vuote.

Documentazione ufficiale

Il manuale ufficiale GNU Coreutils descrive comandi e opzioni. Le pagine GNU distribuite da Debian, per esempio cp(1) sulla copia e la conferma di sovrascrittura e rm(1) sulla rimozione, forniscono anche un riepilogo consultabile. Controlla man o --help nella tua installazione quando conta il comportamento della versione effettiva.