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!
Vuoi abilitare le notifiche?
Desiderate avere la possibilita’ di ricevere delle notifiche? Se si avrete la possibilita’ di essere sempre aggiornati con le nostre ultime proposte o notizie . Consigliamo l’adesione Grazie !