LINUX LEZ 9 – Manipolare i file e directory

()

Manipolare i file e directory

A questo punto, siamo pronti per un vero lavoro! Questo capitolo introdurrà cinque dei comandi Linux più utilizzati. I seguenti comandi sono usati per manipolare entrambi file e directory:

  • cp                                          Copia file e directory

  • mv                                         Sposta / rinomina file e directory

  • mkdir                                    Crea directory

  • rm                                         Rimuovi file e directory

  • ln                                           Crea collegamenti

Ora, per essere sinceri, alcune delle attività eseguite da questi comandi vengono eseguite più facilmente con un file manager grafico. Con un file manager, possiamo trascinare e rilasciare un file da una directory all’altra, tagliare e incollare file, eliminare file e così via. Quindi perché usare questi vecchi programmi da riga di comando? La risposta è potenza e flessibilità. Mentre è facile eseguire semplici manipolazioni di file con un file manager grafico, le attività più complicate possono essere più facili con i programmi da riga di comando.

Ad esempio, come possiamo copiare tutti i file HTML da una directory all’altra ma copiare solo i file che non esistono nella directory di destinazione o che sono più recenti delle versioni nella directory di destinazione? È piuttosto difficile con un file manager ma abbastanza facile con la riga di comando.

cp -u * .html destinazione

 I caratteri jolly

Prima di iniziare a usare i nostri comandi, dobbiamo parlare di una funzione di shell che rende questi comandi così potenti. Poiché la shell utilizza così tanti nomi di file, fornisce caratteri speciali che consentono di specificare rapidamente gruppi di nomi di file. Questi caratteri speciali sono chiamati caratteri jolly. L’uso di caratteri jolly (noto anche come globbing) consente di selezionare i nomi dei file in base a modelli di caratteri.

La Tabella 4-1 elenca i caratteri jolly e ciò che selezionano.

Tabella 4-1:

Caratteri jolly                                                         Significato jolly

*                                                                     Corrisponde a qualsiasi carattere

?                                                                     Corrisponde a qualsiasi singolo carattere

[caratteri]                                                  Corrisponde a qualsiasi carattere membro dei caratteri impostati

[! characters]                                            Corrisponde a qualsiasi carattere che non sia un membro dei                                                                                        carattere impostati

[[: class:]]                                                   Corrisponde a qualsiasi carattere membro della classe specificata

 

Tabella 4-2: Classi di caratteri comunemente usate

Classe di caratteri                                            Significato

[: alnum:]                                        Corrisponde a qualsiasi carattere alfanumerico

[: alpha:]                                         Corrisponde a qualsiasi carattere alfabetico

[: digit:]                                           Corrisponde a qualsiasi numero

[: lower:]                                         Corrisponde a qualsiasi lettera minuscola

[: upper:]                                        Corrisponde a qualsiasi lettera maiuscola

Collegamenti fisici a directory

Alcuni sistemi, tra cui GNU/Linux, vietano espressamente la creazione di collegamenti fisici a directory per motivi di sicurezza: potendoli creare è infatti possibile ottenere gerarchie nel file system che si autoincludono, e che possono quindi portare i programmi che esaminano il file system ricorsivamente (come ad esempio quelli che effettuano il backup) a discendere all’infinito nella gerarchia, di fatto impedendone l’utilizzo.

Altri sistemi permettono questa operazione solo al superuser (root)

Crea un collegamento fisico chiamato hardlink.txt al file file.txt:

ln file.txt hardlink.txt

I collegamenti reali sono il modo originale Unix di creare collegamenti, rispetto ai collegamenti simbolici, che sono più moderni.

Per impostazione predefinita, ogni file ha un singolo collegamento reale che dà il nome al file.

Quando creiamo un collegamento reale, creiamo una voce di directory aggiuntiva per un file. I collegamenti fisici hanno due importanti limitazioni.

  • Un collegamento reale non può fare riferimento a un file esterno al proprio file system.

Questo indica che un collegamento non può fare riferimento a un file che non si trova sulla stessa partizione del disco del collegamento stesso.

  • Un collegamento reale potrebbe non fare riferimento a una directory.

Un collegamento reale non è distinguibile dal file stesso. A differenza di un collegamento simbolico, quando si elenca una directory contenente un collegamento reale, non verrà visualizzata alcuna indicazione speciale del collegamento. Quando viene eliminato un collegamento reale, il collegamento viene rimosso, ma il contenuto del file stesso continua a esistere (ovvero, il suo spazio non viene deallocato) fino a quando non vengono eliminati tutti i collegamenti al file. È importante essere consapevoli dei collegamenti concreti perché potresti incontrarli di volta in volta, ma la pratica moderna preferisce i collegamenti simbolici, che tratteremo in seguito.

Collegamenti simbolici

I collegamenti simbolici sono stati creati per superare i limiti dei collegamenti fisici.

Funzionano creando un tipo speciale di file che contiene un puntatore di testo al file o alla directory di riferimento.

A questo proposito, funzionano più o meno allo stesso modo di un collegamento di Windows, anche se ovviamente precedono

la funzionalità di Windows da molti anni. Un file a cui punta un collegamento simbolico e il collegamento simbolico stesso sono in gran parte indistinguibili l’uno dall’altro. Ad esempio, se si scrive qualcosa sul collegamento simbolico, viene scritto il file di riferimento. Quando si elimina un collegamento simbolico, tuttavia, viene eliminato solo il collegamento, non il file stesso.

Se il file viene eliminato prima del collegamento simbolico, il collegamento continuerà a esistere ma non indicherà nulla. In questo caso, si dice che il collegamento non funziona. In molte implementazioni, il comando ls mostrerà i collegamenti interrotti in un colore distintivo, come il rosso, per rivelare la loro presenza.

Esempio

Crea un collegamento simbolico chiamato softlink.txt al file file.txt:

ln -s file.txt softlink.txt

Crea un collegamento fisico chiamato hardlink.txt al file file.txt:

ln file.txt hardlink.txt

Creazione di directory

Il comando mkdir viene utilizzato per creare una directory. Per creare la nostra directory del parco giochi, ci assicureremo prima di essere nella nostra home directory e quindi creeremo la nuova directory.

[me @ linuxbox ~] $ cd

[me @ linuxbox ~] $ mkdir playground

Per rendere il nostro parco giochi un po ‘più interessante, creiamo un paio di directory al suo interno chiamate dir1 e dir2. Per fare ciò, cambieremo la nostra attuale directory di lavoro in un parco giochi ed eseguiremo un altro mkdir.

[me @ linuxbox ~] $ cd playground

[me @ linuxbox playground] $ mkdir dir1 dir2

Si noti che il comando mkdir accetterà più argomenti che consentono di creare entrambe le directory con un singolo comando.

Copia dei file

Quindi, portiamo alcuni dati nel nostro parco giochi (playground). Lo faremo copiando un file. Usando il comando cp, copieremo il file passwd dalla directory / etc nella directory di lavoro corrente.

[me@linuxbox playground]$ cp /etc/passwd

Nota come abbiamo usato la scorciatoia per l’attuale directory di lavoro, il singolo periodo finale. Quindi ora se eseguiamo un ls, vedremo il nostro file.

[me@linuxbox playground]$ ls -l

total 12

drwxrwxr-x 2 me me 4096 2018-01-10 16:40 dir1

drwxrwxr-x 2 me me 4096 2018-01-10 16:40 dir2

-rw-r–r– 1 me me 1650 2018-01-10 16:07 passwd

Ora, solo per divertimento, ripetiamo la copia usando l’opzione -v (dettaglio) per vedere cosa succede.

[me @ linuxbox playground] $ cp -v / etc / passwd.

`/ etc / passwd ‘->` ./passwd’

Il comando cp ha eseguito nuovamente la copia ma questa volta ha visualizzato un messaggio conciso che indica quale operazione stava eseguendo.

Si noti che cp ha sovrascritto la prima copia senza alcun preavviso.

Ancora una volta, questo è un caso di cp supponendo che sappiamo cosa stiamo facendo.

Per ricevere un avviso, includeremo l’opzione -i (interattiva).

[me@linuxbox playground]$ cp -i /etc/passwd .

cp: overwrite `./passwd’?

Rispondere al prompt immettendo una y provocherà la sovrascrittura del file; qualsiasi altro carattere (ad esempio, n) farà sì che cp lasci il file da solo.

Spostamento e ridenominazione dei file

Ora, il nome passwd non sembra molto giocoso e se questo è un parco giochi, cambiamolo in qualcos’altro.

[me @ linuxbox playground] $ mv passwd fun

Passiamo un po ‘il “fun” spostando il nostro file rinominato in ciascuna directory e viceversa.

Quanto segue lo sposta prima nella directory

dir1:

[me @ linuxbox playground] $ mv fun dir1

Quindi lo sposta da dir1 a dir2:

[me @ linuxbox playground] $ mv dir1 / fun dir2

Manipolazione di file e directory

Infine, questo comando lo riporta alla directory di lavoro corrente:

[me @ linuxbox playground] $ mv dir2 / fun.

Quindi, vediamo l’effetto di mv sulle directory.

Innanzitutto trasferiremo i nostri dati file di nuovo in dir1, in questo modo:

[me @ linuxbox playground] $ mv fun dir1

Quindi spostiamo dir1 in dir2 e lo confermiamo con ls.

[me @ linuxbox playground] $ mv dir1 dir2

[me @ linuxbox playground] $ ls -l dir2

totale 4

drwxrwxr-x 2 me me 4096 2018-01-11 06:06 dir1

[me @ linuxbox playground] $ ls -l dir2 / dir1

totale 4

-rw-r – r– 1 me me 1650 2018-01-10 16:33 fun

Si noti che poiché dir2 esisteva già, mv ha spostato dir1 in dir2. Se dir2 non fosse esistito, mv avrebbe rinominato dir1 in dir2.

Infine, rimettiamo tutto.

[me @ linuxbox playground] $ mv dir2 / dir1.

[me @ linuxbox playground] $ mv dir1 / fun.

Creazione di collegamenti reali

Ora proveremo alcuni link. Per prima cosa creeremo alcuni collegamenti reali al nostro file di dati, in questo modo:

[me @ linuxbox playground] $ ln divertimento divertente

[me @ linuxbox playground] $ ln fun dir1 / fun-hard

[me @ linuxbox playground] $ ln fun dir2 / fun-hard

Quindi ora abbiamo quattro istanze del file divertente. Diamo un’occhiata al nostro

directory del parco giochi.

[me @ linuxbox playground] $ ls -l

totale 16

drwxrwxr-x 2 me me 4096 2018-01-14 16:17 dir1

drwxrwxr-x 2 me me 4096 2018-01-14 16:17 dir2

-rw-r – r– 4 me me 1650 2018-01-10 16:33 fun

-rw-r – r– 4 me me 1650 2018-01-10 16:33 fun-hard

Una cosa che notiamo è che entrambi i secondi campi negli elenchi per divertimento e divertimento contengono un 4, che è il numero di collegamenti reali che esistono ora per il file. Ricorda che un file avrà sempre almeno un collegamento perché il nome del file viene creato da un collegamento.

Quindi, come facciamo a sapere che divertimento e divertimento sono, in effetti, lo stesso file?

In questo caso, ls non è molto utile.

Mentre possiamo vedere che divertimento e divertimento sono entrambi della stessa dimensione (campo 5), il nostro elenco non fornisce alcun modo per essere sicuri. Per risolvere questo problema, dovremo scavare un po ‘più a fondo. Quando si pensa ai collegamenti reali, è utile immaginare che i file siano composti da due parti.

  • La parte di dati contenente i contenuti del file

  • La parte del nome che contiene il nome del file

Quando creiamo collegamenti reali, in realtà stiamo creando parti di nome aggiuntive che fanno tutti riferimento alla stessa parte di dati. Il sistema assegna una catena di blocchi del disco a quello che viene chiamato un inode, che viene quindi associato alla parte del nome. Ogni hard link si riferisce quindi a un inode specifico contenente il contenuto del file. Il comando ls ha un modo per rivelare queste informazioni. Viene richiamato con l’opzione -i.

[me @ linuxbox playground] $ ls -li

totale 16

12353539 drwxrwxr-x 2 me me 4096 2018-01-14 16:17 dir1

12353540 drwxrwxr-x 2 me me 4096 2018-01-14 16:17 dir2

12353538 -rw-r – r– 4 me me 1650 2018-01-10 16:33 fun

12353538 -rw-r – r– 4 me me 1650 2018-01-10 16:33 fun-hard

In questa versione dell’elenco, il primo campo è il numero di inode e, come possiamo vedere, sia divertente che divertente condividere lo stesso numero di inode, il che conferma che sono lo stesso file.

Creazione di collegamenti simbolici

I collegamenti simbolici sono stati creati per superare i due svantaggi dei collegamenti reali:

  • I collegamenti fisici non possono estendersi ai dispositivi fisici.

  • I collegamenti reali non possono fare riferimento alle directory, ma solo ai file.

I collegamenti simbolici sono un tipo speciale di file che contiene un puntatore di testo al file o alla directory di destinazione. La creazione di collegamenti simbolici è simile alla creazione di collegamenti reali.

[me @ linuxbox playground] $ ln -s fun fun-sym

[me @ linuxbox playground] $ ln -s ../fun dir1 / fun-sym

[me @ linuxbox playground] $ ln -s ../fun dir2 / fun-sym

Il primo esempio è piuttosto semplice; aggiungiamo semplicemente l’opzione -s per creare un collegamento simbolico anziché un collegamento reale. E i prossimi due? Ricorda che quando creiamo un collegamento simbolico, stiamo creando un testo

Manipolazione di file e directory

Descrizione della posizione del file di destinazione rispetto al collegamento simbolico. È più facile vedere se guardiamo l’output ls, mostrato qui:

[me @ linuxbox playground] $ ls -l dir1

totale 4

-rw-r – r– 4 me me 1650 2018-01-10 16:33 fun-hard

lrwxrwxrwx 1 me me 6 2018-01-15 15:17 fun-sym -> ../fun

L’elenco per fun-sym in dir1 mostra che si tratta di un collegamento simbolico dalla prima l nel primo campo e che punta a ../fun, che è corretto. Relativamente alla posizione di fun-sym, il divertimento è nella directory sopra di esso. Si noti inoltre che la lunghezza del file di collegamento simbolico è 6, il numero di caratteri nella stringa ../fun anziché la lunghezza del file a cui punta. Quando si creano collegamenti simbolici, è possibile utilizzare nomi di percorso assoluti, come mostrato qui:

[me @ linuxbox playground] $ ln -s / home / me / playground / fun dir1 / fun-sym

…o relativi percorsi, come abbiamo fatto nel nostro esempio precedente. Nella maggior parte dei casi, è preferibile utilizzare nomi di percorso relativi perché consente di rinominare e / o spostare un albero di directory contenente collegamenti simbolici e i relativi file di riferimento senza interrompere i collegamenti. Oltre ai file regolari, i collegamenti simbolici possono anche fare riferimento a directory.

[me @ linuxbox playground] $ ln -s dir1 dir1-sym

[me @ linuxbox playground] $ ls -l

totale 16

drwxrwxr-x 2 me me 4096 2018-01-15 15:17 dir1

lrwxrwxrwx 1 me me 4 2018-01-16 14:45 dir1-sym -> dir1

drwxrwxr-x 2 me me 4096 2018-01-15 15:17 dir2

-rw-r – r– 4 me me 1650 2018-01-10 16:33 fun

-rw-r – r– 4 me me 1650 2018-01-10 16:33 fun-hard

lrwxrwxrwx 1 me me 3 2018-01-15 15:15 fun-sym -> fun

Rimozione di file e directory

Come spiegato in precedenza, il comando rm viene utilizzato per eliminare file e directory. Lo useremo per pulire un po ‘il nostro parco giochi. Innanzitutto, eliminiamo uno dei nostri hard link.

[me @ linuxbox playground] $ rm fun-hard

[me @ linuxbox playground] $ ls -l

totale 12

drwxrwxr-x 2 me me 4096 2018-01-15 15:17 dir1

lrwxrwxrwx 1 me me 4 2018-01-16 14:45 dir1-sym -> dir1

drwxrwxr-x 2 me me 4096 2018-01-15 15:17 dir2

-rw-r – r– 3 me me 1650 2018-01-10 16:33 fun

lrwxrwxrwx 1 me me 3 2018-01-15 15:15 fun-sym -> fun

Ha funzionato come previsto. Il file fun-hard è sparito e il conteggio dei collegamenti mostrato per divertimento è ridotto da quattro a tre, come indicato nel secondo campo dell’elenco delle directory. Successivamente, elimineremo il file divertendoci e, solo per divertimento, includeremo l’opzione -i per mostrare ciò che fa.

[me @ linuxbox playground] $ rm -i fun

rm: rimuovere il normale file “fun”?

Immettere y al prompt e il file viene eliminato. Ma diamo un’occhiata all’output di ls adesso. Notate cosa è successo a fun-sym? Poiché si tratta di un collegamento simbolico che punta a un file ora inesistente, il collegamento è interrotto.

[me @ linuxbox playground] $ ls -l

totale 8

drwxrwxr-x 2 me me 4096 2018-01-15 15:17 dir1

lrwxrwxrwx 1 me me 4 2018-01-16 14:45 dir1-sym -> dir1

drwxrwxr-x 2 me me 4096 2018-01-15 15:17 dir2

lrwxrwxrwx 1 me me 3 2018-01-15 15:15 fun-sym -> fun

La maggior parte delle distribuzioni Linux configura ls per visualizzare collegamenti interrotti. La presenza di un collegamento interrotto non è di per sé pericolosa, ma è piuttosto disordinata. Se proviamo a utilizzare un link non funzionante, vedremo questo:

[me @ linuxbox playground] $ meno fun-sym

fun-sym: nessun file o directory

Puliamo un po ‘. Elimineremo i link simbolici qui:

[me @ linuxbox playground] $ rm fun-sym dir1-sym

[me @ linuxbox playground] $ ls -l

totale 8

drwxrwxr-x 2 me me 4096 2018-01-15 15:17 dir1

drwxrwxr-x 2 me me 4096 2018-01-15 15:17 dir2

Una cosa da ricordare sui collegamenti simbolici è che la maggior parte delle operazioni sui file vengono eseguite sulla destinazione del collegamento, non sul collegamento stesso. rm è un’eccezione.  Quando si elimina un collegamento, viene eliminato il collegamento, non la destinazione. Infine, rimuoveremo il nostro playground. Per fare ciò, torneremo alla nostra directory home e useremo rm con l’opzione ricorsiva (-r) per eliminare il playground e tutti i suoi contenuti, comprese le sue sottodirectory.

[me @ linuxbox playground] $ cd

[me @ linuxbox ~] $ rm -r playground

Creazione di collegamenti simbolici con la GUI

I file manager in GNOME e KDE forniscono un metodo semplice e automatico per creare collegamenti simbolici. Con GNOME, tenere premuti i tasti ctrl-shift mentre si trascina un file creerà un collegamento anziché copiare (o spostare) il file. In KDE, un piccolo menu appare ogni volta che un file viene rilasciato, offrendo una scelta di copia, spostamento o collegamento del file.m -r playground

Riassumendo

Abbiamo coperto un sacco di terreno qui, e ci vorrà del tempo prima che tutto affondi completamente. Esegui l’esercizio del parco giochi più e più volte fino a quando ha senso.

È importante acquisire una buona conoscenza dei comandi e dei caratteri jolly di base per la manipolazione dei file. Sentiti libero di espanderti nell’esercizio del parco giochi aggiungendo più file e directory, usando i caratteri jolly per specificare i file per varie operazioni. Il concetto di link all’inizio è un po ‘confuso, ma prenditi il tempo per imparare come funzionano. Possono essere un vero toccasana!

/ 5
Grazie per aver votato!

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?