2.3 Lezione 2
Certificazione: |
Linux Essentials |
---|---|
Versione: |
1.6 |
Argomento: |
2 Trovare il Proprio Modo di Operare su un Sistema Linux |
Obiettivo: |
2.3 Utilizzo di Directory e Elenchi di File |
Lezione: |
2 di 2 |
Introduzione
Il sistema operativo Unix è stato originariamente progettato per i computer mainframe a metà degli anni '60. Questi computer erano condivisi tra molti utenti che accedevano alle risorse di sistema tramite terminali. Queste idee di base sono ancora presenti nei sistemi Linux odierni. Parliamo ancora dell’utilizzo di “terminali” per inserire comandi nella shell; ogni sistema Linux è organizzato in modo tale che sia facile creare più utenti su un unico sistema.
Directory Home
Questo è un esempio di un normale file system in Linux:
$ tree -L 1 / / ├── bin ├── boot ├── cdrom ├── dev ├── etc ├── home ├── lib ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin ├── srv ├── sys ├── tmp ├── usr └── var
La maggior parte di queste directory è presente su tutti i sistemi Linux. Dai server ai supercomputer, fino ai minuscoli sistemi integrati, un utente Linux esperto può essere sicuro di poter trovare il comando ls
all’interno di /bin
, di poter cambiare la configurazione del sistema modificando i file in /etc
e di leggere i log di sistema in /var
. La posizione standard di questi file e di queste directory è definita dal Filesystem Hierarchy Standard (FHS), che sarà discusso in una delle prossime lezioni. Imparerai di più sui contenuti di queste directory man mano che continuerai a studiare Linux, ma per il momento sappi che:
-
le modifiche che fai nel filesystem root interessano tutti gli utenti
-
la modifica dei file nel filesystem root richiede i permessi di amministratore.
Ciò significa che agli utenti normali è vietato modificare e forse persino leggere questi file. Tratteremo i permessi in una lezione successiva.
Ora concentriamoci sulla directory /home
, che, a questo punto, dovrebbe essere piuttosto familiare:
$ tree -L 1 /home /home ├── user ├── michael └── lara
Il nostro sistema di esempio ha tre utenti normali e ciascuno di essi ha una propria area dedicata, dove può creare e modificare file e directory senza interferire con gli altri. Per esempio, nella lezione precedente stavamo lavorando con la seguente struttura di file:
$ tree /home/user user └── Documents ├── Mission-Statement └── Reports └── report2018.txt
In realtà, il vero filesystem potrebbe essere simile a questo:
$ tree /home /home ├── user │ └── Documents │ ├── Mission-Statement │ └── Reports │ └── report2018.txt ├── michael │ ├── Documents │ │ └── presentation-for-clients.odp │ └── Music
…e così via per lara
.
In Linux /home
è simile ad un condominio. Molti utenti possono avere qui il proprio spazio, che viene suddiviso in “appartamenti” dedicati. I servizi e la manutenzione dell’edificio stesso sono responsabilità dell’utente supervisore root.
Il Percorso Relativo Speciale per la Directory Home
Quando avvii una nuova sessione di terminale in Linux viene visualizzato un prompt dei comandi simile a questo:
user@hostname ~ $
La tilde (~
) qui rappresenta la nostra directory home. Se esegui il comando ls
, vedrai un output familiare:
$ cd ~ $ ls Documents
Confrontalo con il file system sopra riportato per una migliore comprensione.
Riflettiamo ora su ciò che sappiamo di Linux: è simile a un condominio, con molti utenti che risiedono in /home
. Quindi la home di user
sarà diversa dalla home dell’utente michael
. Per dimostrarlo, useremo il comando su
che sta per switch user.
user@hostname ~ $ pwd /home/user user@hostname ~ $ su - michael Password: michael@hostname ~ $ pwd /home/michael
Il significato di ~
cambia a seconda dell’utente. Per michael
, il percorso assoluto di ~
è /home/michael
. Per lara
, il percorso assoluto di ~
è /home/lara
, e così via.
Percorsi Relativi alla Home
Utilizzare ~
nei comandi è molto comodo, a patto che non si cambi utente. Esaminiamo il seguente esempio per user
, che ha avviato una nuova sessione:
$ ls Documents $ cd Documents $ ls Mission-Statement Reports $ cd Reports $ ls report2018.txt $ cd ~ $ ls Documents
Nota che gli utenti iniziano sempre una nuova sessione nella loro directory home. In questo esempio, user
ha navigato nella sua sottodirectory Documents/Reports
e con il comando cd ~
è tornato al punto di partenza. Puoi fare la stessa cosa usando il comando cd
senza argomenti:
$ cd Documents/Reports $ pwd /home/user/Documents/Reports $ cd $ pwd /home/user
Un’ultima cosa da notare: possiamo specificare le directory home di altri utenti indicando il nome utente dopo la tilde. Per esempio:
$ ls ~michael Documents Music
Nota che questo funzionerà solo se michael
ci ha dato il permesso di visualizzare il contenuto della sua directory home.
Prendiamo ora in considerazione il caso in cui michael
vorrebbe visualizzare il file report2018.txt
nella directory home di user
. Supponendo che michael
sia autorizzato a farlo, può utilizzare il comando less
.
$ less ~user/Documents/Reports/report2018.txt
Un qualsiasi percorso di file che contiene il carattere ~
è chiamato percorso relativo alla home.
File e Directory Nascosti
Nella lezione precedente abbiamo introdotto l’opzione -a
per il comando ls
. Abbiamo usato ls -a
per presentare i due percorsi relativi speciali: .
e ..
. L’opzione -a
elenca tutti i file e le directory, inclusi i file e le directory nascoste.
$ ls -a ~ . .. .bash_history .bash_logout .bash-profile .bashrc Documents
I file e le directory nascoste iniziano sempre con un punto (.
). Per impostazione predefinita, la directory home di un utente include molti file nascosti. Questi sono spesso usati per stabilire impostazioni di configurazione specifiche dell’utente e dovrebbero essere modificati solo da un utente esperto.
L’Opzione Formato di Elenco Lungo (Long List)
Il comando ls
ha molte opzioni a disposizione. Diamo un’occhiata a una delle opzioni più comuni:
$ ls -l -rw-r--r-- 1 user staff 3606 Jan 13 2017 report2018.txt
-l
crea un elenco lungo (long list). I file e le directory occuperanno una riga ciascuno, ma verranno visualizzate anche informazioni aggiuntive per ciascuno di essi.
-rw-r—r--
-
Tipo di file e permessi del file. Nota che un file normale inizia con un trattino mentre una directory inizia con
d
. 1
-
Numero di link al file.
user staff
-
Specifica chi possiede il file (ownership).
user
è il proprietario del file e il file è anche associato al gruppostaff
. 3606
-
Dimensioni del file in byte.
Jan 13 2017
-
Time stamp dell’ultima modifica al file.
report2018.txt
-
Nome del file.
Argomenti come ownership, permessi e link verranno trattati nelle lezioni successive. Come puoi vedere, la variante di ls
con il formato di elenco lungo (long list) è spesso preferibile a quella predefinita.
Altre Opzioni di ls
Di seguito sono riportati alcuni degli utilizzi più comuni del comando ls
. Come puoi vedere l’utente può combinare molte opzioni insieme per ottenere l’output desiderato.
ls -lh
-
La combinazione dell’opzione formato di elenco lungo (long list) con l’opzione dimensioni di file leggibili dall’uomo (human readable) ci fornisce utili suffissi, come per esempio
M
per megabyte oK
per kilobyte. ls -d */
-
L’opzione
-d
elenca le directory ma non il loro contenuto. Combinato con*/
mostra solo le sottodirectory e nessun file. ls -lt
-
Combina il formato di elenco lungo (long list) con l’opzione di ordinamento per data di modifica (modification time). I file con le modifiche più recenti saranno visualizzati in alto, mentre i file con le modifiche meno recenti saranno visualizzati in fondo. Ma questo ordine può essere invertito con:
ls -lrt
-
Combina il formato di elenco lungo (long list) con l’ordinamento per data di modifica (modification time) e con
-r
che inverte (reverse) l’ordinamento. Ora i file con le modifiche più recenti si troveranno in fondo all’elenco. Oltre all’ordinamento per data di modifica (modification time), i file possono essere ordinati anche per data di accesso (access time) o per data di modifica dello stato (status time). ls -lX
-
Combina il formato di elenco lungo (long list) con l’opzione di ordinamento per estesione dei file (file eXtension). Questo criterio, per esempio, raggrupperà tutti i file che terminano con
.txt
, tutti i file che terminano con.jpg
e così via. ls -S
-
L’opzione
-S
ordina per dimensione (size) dei file, proprio come-t
e-X
ordinano rispettivamente per data di modifica ed estensione. I file più grandi verranno visualizzati per primi mentre quelli più piccoli verranno visualizzati per ultimi. Nota che il contenuto delle sottodirectory non è incluso nell’ordinamento. ls -R
-
L’opzione
-R
modifica il comandols
per visualizzare un elenco elenco ricorsivo. Che cosa significa?
La Ricorsione in Bash
La ricorsione si riferisce a una situazione in cui “qualcosa è definito in relazione a se stesso”. La ricorsione è un concetto molto importante nell’informatica, ma qui il suo significato è molto più semplice. Consideriamo il nostro esempio di prima:
$ ls ~ Documents
Sappiamo già che user
ha una directory home e che in questa directory c’è una sottodirectory. Finora ls
ci ha mostrato solamente i file e le sottodirectory di un certo percorso, senza però indicarci il contenuto di queste sottodirectory. In queste lezioni abbiamo usato il comando tree
per visualizzare il contenuto di molte directory. Sfortunatamente tree
non è uno degli strumenti di base di Linux e quindi non è sempre disponibile. Confronta l’output di tree
con l’output di ls -R
nei seguenti esempi:
$ tree /home/user user └── Documents ├── Mission-Statement └── Reports └── report2018.txt $ ls -R ~ /home/user/: Documents /home/user/Documents: Mission-Statement Reports /home/user/Documents/Reports: report2018.txt
Con l’opzione ricorsiva otteniamo quindi un elenco di file molto più lungo. In effetti è come se avessimo eseguito il comando ls
nella directory home di user
e avessimo incontrato una sottodirectory. Quindi siamo entrati in questa sottodirectory e abbiamo eseguito di nuovo il comando ls
. Abbiamo incontrato il file Mission-Statement
e un’altra sottodirectory chiamata Reports
. E ancora, siamo entrati nella sottodirectory e abbiamo eseguito di nuovo il comando ls
. Essenzialmente, eseguire ls -R
è come dire a Bash: “Esegui ls
qui e ripeti il comando in ogni sottodirectory che trovi.”
La ricorsione è particolarmente importante nei comandi di modifica dei file, come per esempio per copiare o rimuovere directory. Per esempio, se si desidera copiare la sottodirectory Documents
, sarà necessario specificare una copia ricorsiva per estendere questo comando a tutte le sottodirectory.
Esercizi Guidati
-
Utilizza la seguente struttura di file per rispondere alle prossime tre domande:
/ ├── etc/ │ ├── network/ │ │ └── interfaces/ │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d │ └── udev.conf └── home/ ├── lost+found/ ├── user/ │ └── Documents/ └── michael/ └── Music/
-
Quale comando ti consente di navigare nella directory
network
indipendentemente dalla tua posizione corrente? -
Quale comando può inserire
user
per navigare nella propria directoryDocuments
da/etc/udev
? Usa il percorso più breve possibile. -
Quale comando può inserire
user
per navigare nella directoryMusic
dimichael
? Usa il percorso più breve possibile.
-
-
Considera il seguente output di
ls -lh
per rispondere alle prossime due domande. Nota che le directory sono indicate con unad
all’inizio della riga.drwxrwxrwx 5 eric eric 4.0K Apr 26 2011 China/ -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0066.jpg -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0067.jpg -rwxrwxrwx 1 eric eric 1.6M Jul 18 2011 img_0074.jpg -rwxrwxrwx 1 eric eric 1.8M Jul 18 2011 img_0075.jpg -rwxrwxrwx 1 eric eric 46K Jul 18 2011 scary.jpg -rwxrwxrwx 1 eric eric 469K Jan 29 2018 Screenshot from 2017-08-13 21-22-24.png -rwxrwxrwx 1 eric eric 498K Jan 29 2018 Screenshot from 2017-08-14 21-18-07.png -rwxrwxrwx 1 eric eric 211K Jan 29 2018 Screenshot from 2018-01-06 23-29-30.png -rwxrwxrwx 1 eric eric 150K Jul 18 2011 tobermory.jpg drwxrwxrwx 6 eric eric 4.0K Apr 26 2011 Tokyo/ -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 081.jpg -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 085.jpg -rwxrwxrwx 1 eric eric 944K Jul 18 2011 Toronto 152.jpg -rwxrwxrwx 1 eric eric 728K Jul 18 2011 Toronto 173.jpg drwxrwxrwx 2 eric eric 4.0K Jun 5 2016 Wallpapers/
-
Quale file apparirà all’inizio se si esegue il comando
ls -lrS
? -
Descrivi ciò che ti aspetti di vedere come output di
ls -ad */
.
-
Esercizi Esplorativi
-
Esegui il comando
ls -lh
in una directory che contiene sottodirectory. Nota la dimensione riportata per queste directory. Ti sembrano corrette queste dimensioni? Corrispondono esattamente al contenuto di tutti i file all’interno della directory? -
Ecco un nuovo comando da provare:
du -h
. Esegui questo comando e descrivine l’output. -
Su molti sistemi Linux puoi digitare
ll
e ottenere lo stesso output che avresti digitandols -l
. Nota tuttavia chell
non è un comando. Per esempio,man ll
ti mostrerà il messaggio che non esiste alcuna pagina di manuale perll
. Questo è un esempio di alias. Perché gli alias potrebbero essere utili a un utente?
Sommario
In questa lezione hai imparato:
-
che ogni utente Linux ha una directory home;
-
che è possibile accedere alla directory home dell’utente corrente utilizzando
~
; -
che qualsiasi percorso di file che utilizza
~
è chiamato percorso relativo alla home.
Hai anche imparato alcuni dei modi più comuni per modificare il comando ls
.
-a
(all)-
stampa tutti i file/directory, inclusi quelli nascosti
-d
(directories)-
elenca le directory, non il loro contenuto
-h
(human readable)-
stampa le dimensioni dei file in un formato leggibile dall’uomo
-l
(long list)-
fornisce dettagli extra, mostrando un file/directory per riga
-r
(reverse)-
inverte l’ordine di una selezione
-R
(recursive)-
elenca tutti i file, inclusi i file in ogni sottodirectory
-S
(size)-
ordina per dimensione dei file
-t
(time)-
ordina per data di modifica
-X
(eXtension)-
ordina per estensione dei file
Risposte agli Esercizi Guidati
-
Utilizza la seguente struttura di file per rispondere alle prossime tre domande:
/ ├── etc/ │ ├── network/ │ │ └── interfaces/ │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d │ └── udev.conf └── home/ ├── lost+found/ ├── user/ │ └── Documents/ └── michael/ └── Music/
-
Quale comando ti consente di navigare nella directory
network
indipendentemente dalla tua posizione corrente?cd /etc/network
-
Quale comando può inserire
user
per navigare nella propria directoryDocuments
da/etc/udev
? Usa il percorso più breve possibile.cd ~/Documents
-
Quale comando può inserire
user
per navigare nella directoryMusic
dimichael
? Usa il percorso più breve possibile.cd ~michael/Music
-
-
Considera il seguente output di
ls -lh
per rispondere alle prossime due domande. Nota che le directory sono indicate con unad
all’inizio della riga.drwxrwxrwx 5 eric eric 4.0K Apr 26 2011 China/ -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0066.jpg -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0067.jpg -rwxrwxrwx 1 eric eric 1.6M Jul 18 2011 img_0074.jpg -rwxrwxrwx 1 eric eric 1.8M Jul 18 2011 img_0075.jpg -rwxrwxrwx 1 eric eric 46K Jul 18 2011 scary.jpg -rwxrwxrwx 1 eric eric 469K Jan 29 2018 Screenshot from 2017-08-13 21-22-24.png -rwxrwxrwx 1 eric eric 498K Jan 29 2018 Screenshot from 2017-08-14 21-18-07.png -rwxrwxrwx 1 eric eric 211K Jan 29 2018 Screenshot from 2018-01-06 23-29-30.png -rwxrwxrwx 1 eric eric 150K Jul 18 2011 tobermory.jpg drwxrwxrwx 6 eric eric 4.0K Apr 26 2011 Tokyo/ -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 081.jpg -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 085.jpg -rwxrwxrwx 1 eric eric 944K Jul 18 2011 Toronto 152.jpg -rwxrwxrwx 1 eric eric 728K Jul 18 2011 Toronto 173.jpg drwxrwxrwx 2 eric eric 4.0K Jun 5 2016 Wallpapers/
-
Quale file apparirà all’inizio se si esegue il comando
ls -lrS
?Le tre cartelle sono tutte di 4.0K, che è la dimensione più piccola.
ls
ordinerà poi le directory in ordine alfabetico per impostazione predefinita. La risposta corretta è il filescary.jpg
. -
Descrivi ciò che ti aspetti di vedere come output di
ls -ad */
.Questo comando mostrerà tutte le sottodirectory, comprese le sottodirectory nascoste.
-
Risposte agli Esercizi Esplorativi
-
Esegui il comando
ls -lh
in una directory che contiene sottodirectory. Nota la dimensione riportata per queste directory. Ti sembrano corrette queste dimensioni? Corrispondono esattamente al contenuto di tutti i file all’interno della directory?No. Ogni directory ha una dimensione di 4096 byte. Questo perché le directory qui sono un’astrazione: non esistono come una struttura ad albero sul disco. Quando trovi elencata una directory, vedi un collegamento a un elenco di file. La dimensione di questi collegamenti è di 4096 byte.
-
Ecco un nuovo comando da provare:
du -h
. Esegui questo comando e descrivine l’output.Il comando
du
genera un elenco di tutti i file e di tutte le directory, indicando la dimensione di ciascuno di essi. Per esempio,du -s
mostra la dimensione di tutti i file, di tutte le directory e di tutte le sottodirectory in una determinata posizione. -
Su molti sistemi Linux puoi digitare
ll
e ottenere lo stesso output che avresti digitandols -l
. Nota tuttavia chell
non è un comando. Per esempio,man ll
ti mostrerà il messaggio che non esiste alcuna pagina di manuale perll
. Questo è un esempio di alias. Perché gli alias potrebbero essere utili a un utente?ll
è un alias dils -l
. In Bash, possiamo usare gli alias per semplificare i comandi usati più frequentemente.ll
è spesso già definito in Linux, ma puoi anche creare anche un tuo personale alias.