Linux Professional Institute Learning Logo.
Torna al contenuto principale
  • Home
    • Tutte le Risorse
    • LPI Learning Materials
    • Collabora
    • Publishing Partner
    • Diventa un Publishing Partner
    • FAQ
    • Collaboratori
    • Contatto
  • LPI.org
2.4 Lezione 1
Argomento 1: La Comunità Linux e una Carriera nell'Open Source
1.1 Evoluzione di Linux e Sistemi Operativi più Diffusi
  • 1.1 Lezione 1
1.2 Principali Applicazioni Open Source
  • 1.2 Lezione 1
1.3 Software e Licenze Open Source
  • 1.3 Lezione 1
1.4 Competenze ICT - Lavorare con Linux
  • 1.4 Lezione 1
Argomento 2: Trovare il Proprio Modo di Operare su un Sistema Linux
2.1 Nozioni di Base sulla Command Line
  • 2.1 Lezione 1
  • 2.1 Lezione 2
2.2 Utilizzo della Command Line per Ottenere Aiuto
  • 2.2 Lezione 1
2.3 Utilizzo di Directory e Elenchi di File
  • 2.3 Lezione 1
  • 2.3 Lezione 2
2.4 Creazione, Spostamento ed Eliminazione di File
  • 2.4 Lezione 1
Argomento 3: Il Potere della Command Line
3.1 Archiviazione dei File sulla Command Line
  • 3.1 Lezione 1
3.2 Ricerca ed Estrazione di Dati dai File
  • 3.2 Lezione 1
  • 3.2 Lezione 2
3.3 Trasformare i Comandi in uno Script
  • 3.3 Lezione 1
  • 3.3 Lezione 2
Argomento 4: Il Sistema Operativo Linux
4.1 Scelta di un Sistema Operativo
  • 4.1 Lezione 1
4.2 Comprendere l'Hardware del Computer
  • 4.2 Lezione 1
4.3 Dove Sono Memorizzati i Dati
  • 4.3 Lezione 1
  • 4.3 Lezione 2
4.4 Il Tuo Computer in Rete
  • 4.4 Lezione 1
Argomento 5: Sicurezza e Permessi sui File
5.1 Sicurezza di Base e Identificazione dei Tipi di Utente
  • 5.1 Lezione 1
5.2 Creazione di Utenti e Gruppi
  • 5.2 Lezione 1
5.3 Gestione delle Autorizzazioni e delle Proprietà dei File
  • 5.3 Lezione 1
5.4 Directory e File Speciali
  • 5.4 Lezione 1
How to get certified
  1. Argomento 2: Trovare il Proprio Modo di Operare su un Sistema Linux
  2. 2.4 Creazione, Spostamento ed Eliminazione di File
  3. 2.4 Lezione 1

2.4 Lezione 1

Certificazione:

Linux Essentials

Versione:

1.6

Argomento:

2 Trovare il Proprio Modo di Operare su un Sistema Linux

Obiettivo:

2.4 Creazione, Spostamento ed Eliminazione di File

Lezione:

1 di 1

Introduzione

Questa lezione tratta la gestione di file e directory su Linux attraverso strumenti a Command Line.

Un file è una raccolta di dati con un nome e un insieme di attributi. Se, per esempio, dovessi trasferire alcune foto dal tuo telefono a un computer e dovessi dar loro dei nomi descrittivi, ora avresti, su questo computer, un mucchio di file di immagine. Questi file hanno degli attributi come, per esempio, la data dell’ultimo accesso o dell’ultima modifica al file.

Una directory è un tipo speciale di file utilizzato per organizzare i file. Un buon modo per pensare alle directory consiste nel paragonarle alle cartelline utilizzate per organizzare i documenti in uno schedario. A differenza delle cartelline cartacee, puoi facilmente inserire delle directory all’interno di altre directory.

La Command Line è il mezzo più efficace per gestire i file su un sistema Linux. Gli strumenti della shell e della Command Line hanno caratteristiche che rendono l’uso della Command Line più veloce e più semplice di un file manager grafico.

In questa lezione userai i comandi ls, mv, cp, pwd, find, touch, rm, rmdir, echo, cat e mkdir per gestire e organizzare file e directory.

Distinzione tra Maiuscole e Minuscole

A differenza di Microsoft Windows, i nomi di file e directory sui sistemi Linux fanno distinzione tra maiuscole e minuscole. Ciò significa che i nomi /etc/ ed /ETC/ rappresentano differenti directory. Prova i seguenti comandi:

$ cd /
$ ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
$ cd ETC
bash: cd: ETC: No such file or directory
$ pwd
/
$ cd etc
$ pwd
/etc

Il comando pwd mostra la directory in cui ti trovi attualmente. Come puoi vedere il tentativo di spostarti in /ETC non ha funzionato in quanto non esiste tale directory. Lo spostamento nella directory /etc, che esiste, è invece andato a buon file.

Creare Directory

Il comando mkdir viene utilizzato per creare directory.

Creiamo una nuova directory all’interno della nostra directory home:

$ cd ~
$ pwd
/home/user
$ ls
Desktop  Documents  Downloads
$ mkdir linux_essentials-2.4
$ ls
Desktop  Documents  Downloads  linux_essentials-2.4
$ cd linux_essentials-2.4
$ pwd
/home/emma/linux_essentials-2.4

Nel corso di questa lezione eseguiremo tutti i comandi all’interno di questa directory o in una delle sue sottodirectory.

Per tornare facilmente alla directory della lezione da qualsiasi altra posizione nel tuo file system, puoi utilizzare il comando:

$ cd ~/linux_essentials-2.4

La shell interpreta il carattere ~ come la tua directory home.

Quando sei nella directory della lezione, crea altre directory da utilizzare per gli esercizi. Puoi aggiungere tutti i nomi delle directory, separati da spazi, al comando mkdir:

$ mkdir creating moving copying/files copying/directories deleting/directories deleting/files globs
mkdir: cannot create directory ‘copying/files’: No such file or directory
mkdir: cannot create directory ‘copying/directories’: No such file or directory
mkdir: cannot create directory ‘deleting/directories’: No such file or directory
mkdir: cannot create directory ‘deleting/files’: No such file or directory
$ ls
creating  globs  moving

Nota il messaggio di errore e nota che sono state create solo moving, globs e creating. Le directory copying e deleting non esistono ancora. mkdir, per impostazione predefinita, non crea una directory all’interno di una directory che non esiste. L’opzione -p o --parents indica a mkdir di creare le directory padre se non esistono. Prova lo stesso comando mkdir con l’opzione -p:

$ mkdir -p creating moving copying/files copying/directories deleting/directories deleting/files globs

Questa volta non hai ricevuto alcun messaggio di errore. Vediamo quali directory esistono ora:

$ find
.
./creating
./moving
./globs
./copying
./copying/files
./copying/directories
./deleting
./deleting/directories
./deleting/files

Il programma find è solitamente usato per cercare file e directory, ma senza alcuna opzione ti mostra un elenco di tutti i file, di tutte le directory e di tutte le sottodirectory della tua directory corrente.

Tip

Quando si elenca il contenuto di una directory con ls, le opzioni -t e -r sono particolarmente utili. Ordinano l’output per data (-t) ed invertono l’ordinamento ( -r). In questo caso, i file più recenti saranno in fondo all’output.

Creare i File

In genere i file vengono creati dai programmi, i quali lavorano con i dati memorizzati nei file. Un file vuoto può essere creato usando il comando touch. Se esegui touch su un file esistente, il contenuto del file non verrà modificato, ma il timestamp di modifica del file verrà aggiornato.

Esegui il seguente comando per creare alcuni file per la lezione di globbing:

$ touch globs/question1 globs/question2012 globs/question23 globs/question13 globs/question14
$ touch globs/star10 globs/star1100 globs/star2002 globs/star2013

Ora verifichiamo che tutti i file esistano nella directory globs:

$ cd globs
$ ls
question1   question14    question23  star1100  star2013
question13  question2012  star10      star2002

Hai visto come touch ha creato i file? Puoi visualizzare il contenuto di un file di testo con il comando cat. Provalo su uno dei file che hai appena creato:

$ cat question14

Poiché touch crea file vuoti, non dovresti ottenere alcun output. Puoi usare echo con > per creare semplici file di testo. Provalo:

$ echo hello > question15
$ cat question15
hello

echo visualizza il testo sulla Command Line. Il carattere > indica alla shell di scrivere l’output di un comando nel file specificato invece che sul terminale. Questo fa sì che l’output di echo, hello in questo caso, venga scritto nel file question15. Non è specifico di echo, ma può essere utilizzato con qualsiasi comando.

Warning

Fai attenzione quando usi >! Se il file indicato esiste già, verrà sovrascritto!

Rinominare i File

I file vengono spostati e rinominati con il comando mv.

Imposta moving come directory di lavoro:

$ cd ~/linux_essentials-2.4/moving

Crea alcuni file con cui esercitarti. A questo punto dovresti già avere familiarità con questi comandi:

$ touch file1 file22
$ echo file3 > file3
$ echo file4 > file4
$ ls
file1  file22  file3  file4

Supponiamo che file22 sia un errore di battitura e che il nome corretto dovesse essere file2. Correggilo con il comando mv. Quando si rinomina un file, il primo argomento è il nome corrente, mentre il secondo è il nuovo nome:

$ mv file22 file2
$ ls
file1  file2  file3  file4

Fai attenzione con il comando mv. Se rinomini un file con il nome di un file esistente, quest’ultimo verrà sovrascritto. Facciamo una prova con file3 e file4:

$ cat file3
file3
$ cat file4
file4
$ mv file4 file3
$ cat file3
file4
$ ls
file1  file2  file3

Nota come il contenuto di file3 sia ora file4. Usa l’opzione -i per fare in modo che mv ti avverta se stai per sovrascrivere un file esistente. Provalo:

$ touch file4 file5
$ mv -i file4 file3
mv: overwrite ‘file3’? y

Spostare i File

I file vengono spostati da una directory all’altra con il comando mv.

Crea alcune directory in cui spostare i file:

$ cd ~/linux_essentials-2.4/moving
$ mkdir dir1 dir2
$ ls
dir1  dir2  file1  file2  file3  file5

Sposta file1 in dir1:

$ mv file1 dir1
$ ls
dir1  dir2  file2  file3  file5
$ ls dir1
file1

Nota che l’ultimo argomento di mv è la directory di destinazione. Se l’ultimo argomento di mv è una directory, i file vengono spostati al suo interno. È possibile specificare più file in un singolo comando mv:

$ mv file2 file3 dir2
$ ls
dir1  dir2  file5
$ ls dir2
file2  file3

È anche possibile usare mv per spostare e rinominare directory. Rinomina dir1 in dir3:

$ ls
dir1  dir2  file5
$ ls dir1
file1
$ mv dir1 dir3
$ ls
dir2  dir3  file5
$ ls dir3
file1

Eliminare File e Directory

Il comando rm può eliminare file e directory, mentre il comando rmdir può eliminare solo directory. Puliamo la directory moving eliminando file5:

$ cd ~/linux_essentials-2.4/moving
$ ls
dir2  dir3  file5
$ rmdir file5
rmdir: failed to remove ‘file5’: Not a directory
$ rm file5
$ ls
dir2  dir3

Per impostazione predefinita, rmdir può eliminare solo directory vuote; quindi abbiamo dovuto usare rm per eliminare un file normale. Prova a eliminare la directory deleting:

$ cd ~/linux_essentials-2.4/
$ ls
copying  creating  deleting  globs  moving
$ rmdir deleting
rmdir: failed to remove ‘deleting’: Directory not empty
$ ls -l deleting
total 0
drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories
drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 files

Per impostazione predefinita, rmdir rifiuta di eliminare una directory che non è vuota. Usa rmdir per rimuovere una delle sottodirectory vuote della directory deleting:

$ ls -a deleting/files
.  ..
$ rmdir deleting/files
$ ls -l deleting
directories

Eliminare un gran numero di file o strutture profonde di directory con molte sottodirectory può sembrare noioso, ma in realtà è semplice. Per impostazione predefinita, rm funziona solo con file normali. L’opzione -r è utilizzata per sovrascrivere questo comportamento. Fai attenzione, rm -r è estremamente pericoloso! Quando usi l’opzione -r, rm non solo cancella qualsiasi directory, ma anche tutto ciò che si trova all’interno di quella directory, incluse le sottodirectory e il loro contenuto. Guarda tu stesso come funziona rm -r:

$ ls
copying  creating  deleting  globs  moving
$ rm deleting
rm: cannot remove ‘deleting’: Is a directory
$ ls -l deleting
total 0
drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories
$ rm -r deleting
$ ls
copying  creating  globs  moving

Hai notato come deleting sia scomparsa, anche se non era vuota? Come mv, rm ha un’opzione -i per chiedere conferma prima di fare qualsiasi cosa. Usa rm -ri per rimuovere da moving le directory che non sono più necessarie:

$ find
.
./creating
./moving
./moving/dir2
./moving/dir2/file2
./moving/dir2/file3
./moving/dir3
./moving/dir3/file1
./globs
./globs/question1
./globs/question2012
./globs/question23
./globs/question13
./globs/question14
./globs/star10
./globs/star1100
./globs/star2002
./globs/star2013
./globs/question15
./copying
./copying/files
./copying/directories
$ rm -ri moving
rm: descend into directory ‘moving’? y
rm: descend into directory ‘moving/dir2’? y
rm: remove regular empty file ‘moving/dir2/file2’? y
rm: remove regular empty file ‘moving/dir2/file3’? y
rm: remove directory ‘moving/dir2’? y
rm: descend into directory ‘moving/dir3’? y
rm: remove regular empty file ‘moving/dir3/file1’? y
rm: remove directory ‘moving/dir3’? y
rm: remove directory ‘moving’? y

Copiare File e Directory

Il comando cp viene utilizzato per copiare file e directory. Copia alcuni file nella directory copying:

$ cd ~/linux_essentials-2.4/copying
$ ls
directories  files
$ cp /etc/nsswitch.conf files/nsswitch.conf
$ cp /etc/issue /etc/hostname files

Se l’ultimo argomento è una directory, cp crea una copia degli argomenti precedenti all’interno della directory. Come mv, è possibile specificare più file contemporaneamente, purché la destinazione sia una directory.

Quando entrambi gli operandi di cp sono file esistenti, cp sovrascrive il secondo file con una copia del primo file. Facciamo pratica sovrascrivendo il file issue con il file hostname:

$ cd ~/linux_essentials-2.4/copying/files
$ ls
hostname  issue  nsswitch.conf
$ cat hostname
mycomputer
$ cat issue
Debian GNU/Linux 9 \n \l

$ cp hostname issue
$ cat issue
mycomputer

Ora proviamo a creare una copia della directory files all’interno della directory directories:

$ cd ~/linux_essentials-2.4/copying
$ cp files directories
cp: omitting directory ‘files’

Come puoi vedere, cp, per impostazione predefinita, funziona solo su singoli file. Per copiare una directory, usa l’opzione -r. Tieni presente che l’opzione -r farà sì che cp copi anche il contenuto della directory che stai copiando:

$ cp -r files directories
$ find
.
./files
./files/nsswitch.conf
./files/fstab
./files/hostname
./directories
./directories/files
./directories/files/nsswitch.conf
./directories/files/fstab
./directories/files/hostname

Hai notato che, quando una directory esistente viene usata come destinazione, cp crea una copia della directory sorgente al suo interno? Se la destinazione non esiste, viene creata e riempita con il contenuto della directory sorgente:

$ cp -r files files2
$ find
.
./files
./files/nsswitch.conf
./files/fstab
./files/hostname
./directories
./directories/files
./directories/files/nsswitch.conf
./directories/files/fstab
./directories/files/hostname
./files2
./files2/nsswitch.conf
./files2/fstab
./files2/hostname

Globbing

Ciò che viene comunemente chiamato globbing è un semplice linguaggio di corrispondenza di pattern. Le shell a Command Line sui sistemi Linux utilizzano questo linguaggio per fare riferimento a gruppi di file i cui nomi hanno corrispondenza con uno specifico pattern. Lo standard POSIX.1-2017 definisce i seguenti caratteri per la corrispondenza con i pattern:

*

Corrisponde a un qualsiasi numero di un qualsiasi carattere, incluso nessun carattere

?

Corrisponde a un qualsiasi carattere

[]

Corrisponde a una classe di caratteri

Tradotto, questo significa che puoi dire alla tua shell di cercare corrispondenze in base a un pattern invece che in base a una stringa di testo letterale. Di solito gli utenti Linux specificano più file con un glob invece di digitare singolarmente ogni nome di file. Esegui i seguenti comandi:

$ cd ~/linux_essentials-2.4/globs
$ ls
question1   question14  question2012  star10    star2002
question13  question15  question23    star1100  star2013
$ ls star1*
star10  star1100
$ ls star*
star10  star1100  star2002  star2013
$ ls star2*
star2002  star2013
$ ls star2*2
star2002
$ ls star2013*
star2013

La shell espande * a qualsiasi numero di qualsiasi cosa; quindi la tua shell interpreta star* come qualsiasi cosa, pertinente al contesto, che inizia con star. Quando esegui il comando ls star*, la tua shell non esegue il programma ls con un argomento star*, ma cerca i file nella directory corrente che corrispondono al pattern star* (incluso solo star) e trasforma ogni file che cha corrispondenza con il pattern in un argomento di ls:

$ ls star*

Per quanto riguarda ls, è l’equivalente di

$ ls star10  star1100  star2002  star2013

Il carattere * non ha alcun significato per ls. Per dimostrarlo, esegui il seguente comando:

$ ls star\*
ls: cannot access star*: No such file or directory

Quando precedi un carattere con \, stai dicendo alla tua shell di non interpretarlo. In questo caso, vuoi che ls abbia un argomento star* invece dell’espansione fatta dal glob star*.

Il ? si espande in ogni singolo carattere. Prova i seguenti comandi per testarlo tu stesso:

$ ls
question1   question14  question2012  star10    star2002
question13  question15  question23    star1100  star2013
$ ls question?
question1
$ ls question1?
question13  question14  question15
$ ls question?3
question13  question23
$ ls question13?
ls: cannot access question13?: No such file or directory

Le parentesi quadre [] vengono utilizzate per indicare la corrispondenza con intervalli o classi di caratteri. Le parentesi quadre [] funzionano come nelle espressioni regolari POSIX con l’eccezione che i glob usano ^ al posto di !.

Crea alcuni file con cui sperimentare:

$ mkdir brackets
$ cd brackets
$ touch file1 file2 file3 file4 filea fileb filec file5 file6 file7

Gli intervalli all’interno delle parentesi quadre [] sono espressi utilizzando un -:

$ ls
file1  file2  file3  file4  file5  file6  file7  filea  fileb  filec
$ ls file[1-2]
file1  file2
$ ls file[1-3]
file1  file2  file3

È possibile specificare più intervalli:

$ ls file[1-25-7]
file1  file2  file5  file6  file7
$ ls file[1-35-6a-c]
file1  file2  file3  file5  file6  filea  fileb  filec

Le parentesi quadre possono essere utilizzate anche per indicare la corrispondenza con un insieme specifico di caratteri.

$ ls file[1a5]
file1  file5  filea

Puoi anche usare il carattere ^ come primo carattere per indicare la corrispondenza con qualsiasi valore tranne alcuni caratteri.

$ ls file[^a]
file1  file2  file3  file4  file5  file6  file7  fileb  filec

Infine, in questa lezione, tratteremo le classi di caratteri. Per indicare la corrispondenza con una classe di caratteri, utilizza [:classname:]. Per esempio, per utilizzare la classe digit, che corrisponde ai numeri, dovresti fare qualcosa del genere:

$ ls file[[:digit:]]
file1  file2  file3  file4  file5  file6  file7
$ touch file1a file11
$ ls file[[:digit:]a]
file1  file2  file3  file4  file5  file6  file7  filea
$ ls file[[:digit:]]a
file1a

Il glob file[[:digit:]a], corrisponde a file seguito da un numero o da una a.

Le classi di caratteri supportate dipendono dal Locale impostato. POSIX richiede le seguenti classi di caratteri per tutti i Locale:

[:alnum:]

Lettere e numeri.

[:alpha:]

Lettere maiuscole o minuscole.

[:blank:]

Spazi e tabulazioni.

[:cntrl:]

Caratteri di controllo, per esempio backspace, campanello, NAK, escape.

[:digit:]

Numeri (0123456789).

[:graph:]

Caratteri grafici (tutti i caratteri tranne ctrl e il carattere spazio).

[:lower:]

Lettere minuscole (a-z).

[:print:]

Caratteri stampabili (alnum, punct e il carattere spazio).

[:punct:]

Caratteri di punteggiatura, per esempio !, &, ".

[:space:]

Caratteri spazi bianchi, per esempio tabulazioni, spazi, nuove righe.

[:upper:]

Lettere maiuscole (A-Z).

[:xdigit:]

Numeri esadecimali (solitamente 0123456789abcdefABCDEF).

Esercizi Guidati

  1. Tenendo presente quanto sotto riportato, seleziona le directory che verrebbero create con il comando mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today

    $ pwd
    /tmp
    $ find
    .
    ./outfiles
    ./outfiles/text

    /tmp

    /tmp/outfiles

    /tmp/outfiles/text

    /tmp/outfiles/text/today

    /tmp/infiles

    /tmp/infiles/text

    /tmp/infiles/text/today

  2. Che cosa fa -v nei comandi mkdir, rm e cp?

  3. Che cosa succede se si tenta accidentalmente di copiare tre file sulla stessa Command Line in un file già esistente anziché in una directory?

  4. Che cosa succede quando usi mv per spostare una directory dentro se stessa?

  5. Come potresti eliminare tutti i file nella directory corrente che iniziano con old?

  6. Quale dei seguenti file corrisponde a log_[a-z]_201?_*_01.txt?

    log_3_2017_Jan_01.txt

    log_+_2017_Feb_01.txt

    log_b_2007_Mar_01.txt

    log_f_201A_Wednesday_01.txt

  7. Indica alcuni glob che abbiano corrispondenza con tutti i file in elenco:

    doc100
    doc200
    doc301
    doc401

Esercizi Esplorativi

  1. Usa la pagina man di cp per scoprire come fare la copia di un file mantenendo i permessi e la data di modifica del file originale.

  2. Che cosa fa il comando rmdir -p? Provalo e spiega come si differenzia da rm -r.

  3. NON ESEGUIRE REALMENTE QUESTO COMANDO: Cosa pensi che farebbe rm -ri /*? (SUL SERIO, NON PROVARE A ESEGUIRLO!)

  4. Oltre a usare -i, è possibile impedire a mv di sovrascrivere i file di destinazione?

  5. Spiega il comando cp -u.

Sommario

L’ambiente Linux a Command Line fornisce strumenti per gestire i file. Alcuni di uso comune sono: cp, mv, mkdir, rm e rmdir. Questi strumenti, combinati con i glob, consentono agli utenti di svolgere tante attività in tempi molto brevi.

Molti comandi hanno un’opzione -i, che chiede conferma prima di fare qualsiasi cosa. Questa conferma può evitarti molti problemi se hai digitato qualcosa di sbagliato.

Molti comandi hanno un’opzione -r. L’opzione -r di solito significa ricorsione. In matematica e informatica una funzione ricorsiva è una funzione che utilizza se stessa nella sua definizione. Quando si tratta di strumenti a Command Line di solito significa applicare il comando a una directory e a tutto ciò che contiene.

Comandi utilizzati in questa lezione:

cat

Legge e visualizza il contenuto di un file.

cp

Copia file o directory.

echo

Produce una stringa come output.

find

Attraversa un albero del file system e cerca i file che corrispondono a un insieme specifico di criteri.

ls

Mostra le proprietà di file e directory ed elenca il contenuto di una directory.

mkdir

Crea nuove directory.

mv

Sposta o rinomina file o directory.

pwd

Visualizza la directory di lavoro corrente.

rm

Elimina file o directory.

rmdir

Elimina directory.

touch

Crea nuovi file vuoti o aggiorna il timestamp di modifica di un file esistente.

Risposte agli Esercizi Guidati

  1. Tenendo presente quanto sotto riportato, seleziona le directory che verrebbero create con il comando mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today

    $ pwd
    /tmp
    $ find
    .
    ./outfiles
    ./outfiles/text

    Verranno create le directory contrassegnate. Le directory /tmp, /tmp/outfiles e /tmp/outfiles/text esistono già; quindi mkdir le ignorerà.

    /tmp

    /tmp/outfiles

    /tmp/outfiles/text

    /tmp/outfiles/text/today

    X

    /tmp/infiles

    X

    /tmp/infiles/text

    X

    /tmp/infiles/text/today

    X

  2. Che cosa fa -v nei comandi mkdir, rm e cp?

    Normalmente, -v attiva l’output dettagliato. Fa in modo che i rispettivi programmi visualizzino ciò che stanno facendo nel momento in cui lo fanno:

    $ rm -v a b
    removed 'a'
    removed 'b'
    $ mv -v a b
    'a' -> 'b'
    $ cp -v b c
    'b' -> 'c'
  3. Che cosa succede se si tenta accidentalmente di copiare tre file sulla stessa Command Line in un file già esistente anziché in una directory?

    cp si rifiuterà di fare qualsiasi cosa e mostrerà un messaggio di errore:

    $ touch a b c d
    $ cp a b c d
    cp: target 'd' is not a directory
  4. Che cosa succede quando usi mv per spostare una directory dentro se stessa?

    Viene visualizzato un messaggio di errore che dice che mv non può farlo.

    $ mv a a
    mv: cannot move 'a' to a subdirectory of itself, 'a/a'
  5. Come potresti eliminare tutti i file nella directory corrente che iniziano con old?

    Dovresti usare il glob old* con il comando rm:

    $ rm old*
  6. Quale dei seguenti file corrisponde a log_[a-z]_201?_*_01.txt?

    log_3_2017_Jan_01.txt

    log_+_2017_Feb_01.txt

    log_b_2007_Mar_01.txt

    log_f_201A_Wednesday_01.txt

    X

    $ ls log_[a-z]_201?_*_01.txt
    log_f_201A_Wednesday_01.txt

    log_[a-z] corrisponde a log_ seguito da una qualsiasi lettera minuscola; quindi ha corrispondenza sia con log_f_201A_Wednesday_01.txt che con log_b_2007_Mar_01.txt. _201? corrisponde a un qualunque carattere singolo dopo _201; quindi ha corrispondenza solo con log_f_201A_Wednesday_01.txt. Infine *_01.txt corrisponde a tutto ciò che finisce con _01.txt; quindi ha corrispondenza con l’opzione che è rimasta.

  7. Indica alcuni glob che abbiano corrispondenza con tutti i file in elenco:

    doc100
    doc200
    doc301
    doc401

    Esistono diverse soluzioni. Eccone alcune:

    doc*
    doc[1-4]*
    doc?0?
    doc[1-4]0?

Risposte agli Esercizi Esplorativi

  1. Usa la pagina man di cp per scoprire come fare la copia di un file mantenendo i permessi e la data di modifica del file originale.

    Dovresti usare l’opzione -p. Dalla pagina man:

    $ man cp
    -p     same as --preserve=mode,ownership,timestamps
    --preserve[=ATTR_LIST]
                  preserve the specified attributes (default: mode,ownership,time‐
                  stamps), if  possible  additional  attributes:  context,  links,
                  xattr, all
  2. Che cosa fa il comando rmdir -p? Provalo e spiega come si differenzia da rm -r.

    Fa sì che rmdir si comporti in modo simile a mkdir -p. Se gli viene passato un albero di directory vuote, le rimuoverà tutte.

    $ find
    .
    ./a
    ./a/b
    ./a/b/c
    $ rmdir -p a/b/c
    $ ls
  3. NON ESEGUIRE REALMENTE QUESTO COMANDO: Cosa pensi che farebbe rm -ri /*? (SUL SERIO, NON PROVARE A ESEGUIRLO!)

    Rimuoverà tutti i file e le directory scrivibili dal tuo account utente. Ciò include qualsiasi file system di rete.

  4. Oltre a usare -i, è possibile impedire a mv di sovrascrivere i file di destinazione?

    Sì, l’opzione -n o --no-clobber impedisce a mv di sovrascrivere i file.

    $ cat a
    a
    $ cat b
    b
    $ mv -n a b
    $ cat b
    b
  5. Spiega il comando cp -u.

    L’opzione -u fa in modo che cp copi un file solo se la destinazione non esiste o se è più vecchia del file sorgente.

    $ ls -l
    total 24K
    drwxr-xr-x 123 emma student  12K Feb  2 05:34 ..
    drwxr-xr-x   2 emma student 4.0K Feb  2 06:56 .
    -rw-r--r--   1 emma student    2 Feb  2 06:56 a
    -rw-r--r--   1 emma student    2 Feb  2 07:00 b
    $ cat a
    a
    $ cat b
    b
    $ cp -u a b
    $ cat b
    b
    $ cp -u a c
    $ ls -l
    total 12
    -rw-r--r-- 1 emma student 2 Feb  2 06:56 a
    -rw-r--r-- 1 emma student 2 Feb  2 07:00 b
    -rw-r--r-- 1 emma student 2 Feb  2 07:00 c

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

Prossima Lezione

3.1 Archiviazione dei File sulla Command Line (3.1 Lezione 1)

Leggi la prossima Lezione

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

LPI è una organizzazione non-profit.

© 2023 Linux Professional Institute (LPI) è lo standard di certificazione globale e l'organizzazione di supporto alla carriera per i Professionisti Open Source. Con più di 200,000 titolari di Certificazione, è il primo e il più grande ente di Certificazione Open Source e Linux vendor-neutral. LPI ha professionisti certificati in oltre 180 Paesi, offre i suoi Esami in più lingue e ha centinaia di Partner di formazione in tutto il mondo.

La nostra missione è promuovere l'uso dell'Open Source supportando le persone che vi lavorano.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contattaci
  • Privacy & Cookie Policy

Trovato un errore? Per favore scrivi a contattaci.

© 1999–2023 The Linux Professional Institute Inc. Tutti i diritti riservati.