[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 29.   Creazione, copia ed eliminazione di directory

Le directory possono essere viste come contenitori di file e di altre directory. La copia e l'eliminazione di directory ha delle implicazioni differenti rispetto alle stesse operazioni con i file normali. Continua a valere la raccomandazione di svolgere l'esercitazione con cura.

29.1   Creazione di una directory

La creazione di una directory è concettualmente simile alla creazione di un file vuoto. Quando la directory viene creata è sempre vuota: si riempie utilizzandola. Una directory viene creata con il comando mkdir.

Prima di procedere ci si sposta nella propria directory personale e quindi si crea la directory mia/ discendente dalla posizione corrente.

cd[Invio]

mkdir mia[Invio]

Si può verificare con il comando ls.

ls -l[Invio]

...
drwxr-xr-x   8 tizio    tizio        1024 Dec 23 12:11 mia
...

La lettera d all'inizio della stringa che identifica i permessi indica chiaramente che si tratta di una directory.

29.2   Copia di directory

La copia delle directory avviene attraverso il comando cp con le opzioni -r oppure -R, tra le quali c'è una differenza sottile che però qui non viene approfondita.

cp -r mia mia2[Invio]

Con il comando appena visto, si ottiene la copia della directory mia/ in mia2/. La copia è ricorsiva, nel senso che comprende tutti i file contenuti nella directory di origine, assieme a tutte le eventuali sottodirectory, compreso il loro contenuto.

29.3   Eliminazione di directory

Normalmente, le directory si possono cancellare quando sono vuote, per mezzo del comando rmdir.

Valgono le stesse raccomandazioni di prudenza fatte in precedenza in occasione degli esercizi sulla cancellazione di file.

rmdir mia2[Invio]

Il comando appena mostrato elimina la directory mia2/.

L'eliminazione delle directory fatta in questo modo, cioè attraverso il comando rmdir, non è molto preoccupante, perché con esso è consentito eliminare solo directory vuote: se ci si accorge di avere eliminato una directory di troppo, si riesce facilmente a ricrearla con il comando mkdir.

Tuttavia, spesso si eliminano interi rami di directory, quando con un comando si vuole eliminare una o più directory e con esse il loro contenuto di file ed eventuali altre directory. Si dice in questo caso che si esegue una cancellazione ricorsiva.

Prima di proseguire, si prova a creare una struttura articolata di directory.

mkdir carbonio[Invio]

mkdir carbonio/idrogeno[Invio]

mkdir carbonio/ossigeno[Invio]

mkdir carbonio/idrogeno/elio[Invio]

Si dovrebbe ottenere una struttura organizzata nel modo seguente:

tree carbonio[Invio]

carbonio
|-- idrogeno
|   `-- elio
`-- ossigeno

3 directories, 0 files

Se si tenta di eliminare tutta la struttura che parte da carbonio/ con il comando rmdir, si ottiene solo una segnalazione di errore.

rmdir carbonio[Invio]

rmdir: carbonio: Directory not empty

Per questo bisogna utilizzare il comando rm con l'opzione -r. Tuttavia, il comando rm applicato in questo modo ricorsivo è particolarmente pericoloso se utilizzato in modo distratto.

rm -r carbonio[Invio]

La directory carbonio/ e tutto ciò che da essa discendeva non c'è più.

Si provi a pensare cosa può accadere quando si utilizzano i caratteri jolly: si cancellano indifferentemente file e directory che corrispondono al modello. C'è però ancora qualcosa di peggiore: l'insidia dei nomi che iniziano con un punto.

29.4   Eliminazione di directory il cui nome inizia con un punto

La cancellazione di directory il cui nome inizia con un punto è un'operazione estremamente delicata che merita una discussione a parte. Generalmente, quando si utilizzano i caratteri jolly per identificare un gruppo di nomi di file e directory, questi simboli non corrispondono mai ai nomi che iniziano con un punto. Questa convenzione è stata definita per evitare che con i caratteri jolly si possa intervenire involontariamente con i riferimenti standard delle directory: . (la directory stessa che lo contiene) e .. (la directory genitrice).

A questo fatto si è aggiunta la convenzione di nominare in questo modo (con un punto iniziale) file e directory che rappresentano la configurazione particolare di ogni utente. In tal modo, è come se tali file e directory fossero nascosti, per cui l'utente non risulta infastidito da questi che così non possono nemmeno essere cancellati involontariamente.

Potrebbe sorgere il desiderio di eliminare tutti questi file e tutte queste directory, utilizzando il modello .* (punto, asterisco), ma in questo modo si eliminerebbero anche i riferimenti standard: . e .., eliminando così anche la directory corrente, ma soprattutto quella genitrice (con tutto il suo contenuto).

Se il comando viene dato da un utente comune, questo riesce a eliminare solo i dati a cui può accedere, mentre se lo sbaglio viene fatto dall'utente root, tutto ciò che è stato selezionato erroneamente viene perduto.

Si osservi che in un sistema GNU/Linux tipico, la directory personale dell'utente root è /root/; pertanto, un comando del genere viene dato presumibilmente proprio quando la directory corrente è la directory personale, che, come si vede, discende immediatamente dalla radice. Pertanto, un utente root che fa uno sbaglio del genere, normalmente cancella tutto il file system principale con il contenuto di tutti gli altri dischi che vi si trovano innestati.

Per concludere, il comando incriminato è rm -r .*. Chi ha letto si consideri avvisato!

29.5   Conclusione

Quando si copiano e si eliminano le directory, sorge spontaneo il desiderio di intervenire in modo ricorsivo su tutto il contenuto della directory di partenza. I problemi maggiori cui si va incontro sono legati alla cancellazione ricorsiva, specialmente quando si pretende di eliminare i file e le directory il cui nome inizia con un punto, in modo globale, attraverso un modello fatto di caratteri jolly.

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome creazione_copia_ed_eliminazione_di_directory.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!