Lezione 7 - Unimore
Transcript of Lezione 7 - Unimore
![Page 1: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/1.jpg)
1
Lezione 7Gestione dei fileSistemi Operativi (9 CFU), CdL Informatica, A. A. 2020/2021Dipartimento di Scienze Fisiche, Informatiche e MatematicheUniversità di Modena e Reggio Emiliahttp://weblab.ing.unimo.it/people/andreolini/didattica/sistemi-operativi
![Page 2: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/2.jpg)
2
Quote of the day(Meditate, gente, meditate...)
“I think the major good idea in UNIX was its clean and simple interface: open, close, read and write.”
Ken Thompson (1943-)ProgrammatoreIdeatore dei SO UNIX e Plan 9Ideatore dei linguaggi B e GoCreatore di Belle (primo motore scacchistico americano)
![Page 3: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/3.jpg)
3
SOLUZIONI DEGLI ESERCIZI
![Page 4: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/4.jpg)
4
Esercizio 1 (5 min.)A quale file speciale di dispositivo corrisponde il dispositivo “primo disco SATA”? Che cosa si può ottenere con l’accesso a tale dispositivo?
![Page 5: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/5.jpg)
5
Studio del termine “SATA”Si cerca con Google il termine “SATA hard disk”. Si ottiene un riferimento alla pagina di Wikipedia corrispondente:
SATA (Serial AT Attachment) è un bus veloce per la connessione di hard disk al bus host.È una evoluzione dei bus PATA (Parallel ATA) e EIDE (Extended Integrated Device Electronics).È una alternativa al bus SCSI (Small Computer Systems Interface).
![Page 6: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/6.jpg)
6
Identificazione directory del fileSi parla di “file speciale di dispositivo”. Pertanto, si parla di un file nella directory /dev, che contiene tutti i file speciali di dispositivo.
![Page 7: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/7.jpg)
7
Identificazione classe di dispositivoBisogna cercare di individuare il tipo di file speciale che corrisponde ad un disco SATA. A tal scopo, si può cercare con apropos una pagina di manuale contenente la parola chiave disk. Si effettua la ricerca nella sezione 4 del manuale, che documenta i file speciali di dispositivo.
apropos -s 4 disk
Si ottiene l’output seguente:ram (4) - dispositivo per ram diskhd (4) - MFM/IDE hard disk devicesinitrd (4) - boot loader initialized RAM disksd (4) - driver for SCSI disk drives
![Page 8: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/8.jpg)
8
Identificazione classe di dispositivoDalla descrizione iniziale del bus, andando per esclusione si potrebbe provare a dedurre che la classe di dispositivo sia sd.
hd si riferisce ai dischi rigidi che usano il bus più vecchioIDE (l’antesignano di EIDE).initrd e ram si riferiscono ad oscuri “dischi in RAM”, eprobabilmente non sono correlati con i dischi rigidi.
![Page 9: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/9.jpg)
9
Lettura pagina di manuale sdSi legge la pagina di manuale della classe di dispositivi sd:
man 4 sdLa pagina parla solo di dispositivi attaccati al bus SCSI, e non fa menzione del bus SATA.Dubbio: e se sd non fosse la classe di dispositivi SATA?
![Page 10: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/10.jpg)
10
Indagine sulla correlazione sd SATA ←→Si cerca con Google il termine “linux sd device sata”. Si ottiene un riferimento ad un documento del Linux Documentation Project che spiega le convenzioni usate per i file speciali di dispositivo:https://tldp.org/HOWTO/Partition-Mass-Storage-Definitions-Naming-HOWTO/x99.html
Il documento parla chiaro: sd è la classe di tutti gli hard disk moderni che si connettono con un bus SATA o SCSI.
![Page 11: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/11.jpg)
11
Identificazione del file specialeLeggendo la pagina di manuale di sd:man 4 sdsi scopre che il formato dei file speciali di dispositivo è:
/dev/sdlpdove:
l è una lettera dell’alfabeto (partendo dalla a) che denotal’intero dispositivo fisico;p è un numero intero che denota la partizione all’internodel dispositivo fisico.
Pertanto, il file speciale di dispositivo associato al primo dispositivo SATA è /dev/sda.
![Page 12: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/12.jpg)
12
Accesso al file speciale con lessSi lanci un emulatore di terminale e si ottengano le credenziali di amministratore con il comando seguente:
su -Si immetta la password di amministratore.
Si legga il contenuto del file speciale:less /dev/sda
Si ottiene il contenuto del disco a basso livello! I byte, opportunamente interpretati, costituiscono la tabella delle partizioni, il file system, i file, le directory.
![Page 13: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/13.jpg)
13
Esercizio 2 (3 min.)Si stampi l’insieme dei metadati per i file seguenti:
$HOME/tmp/.X11-unix/X0/dev/sda1/dev/tty0
Notate delle differenze?
![Page 14: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/14.jpg)
14
Stampa dei metadati dei file con statSi usa il comando stat per stampare i metadati dei file:
stat $HOMEstat /tmp/.X11-unix/X0stat /dev/sda1stat /dev/tty0
Nelle slide seguenti si evidenziano gli output dei comandi.
![Page 15: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/15.jpg)
15
Stampa dei metadati dei file con stat
$HOME è una directory.
![Page 16: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/16.jpg)
16
Stampa dei metadati dei file con stat
/tmp/.X11-unix/X0 è un socket.Il socket è un meccani-smo di comunicazione (locale o remoto).Non sarà affrontato in questo corso.
![Page 17: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/17.jpg)
17
Stampa dei metadati dei file con stat
/dev/sda1 è un file speciale di dispositivo a blocchi. Esso rappresen-ta la prima partizione del primo disco rigido SATA.
![Page 18: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/18.jpg)
18
Stampa dei metadati dei file con stat
/dev/tty0 è un file speciale di dispositivo a caratteri. Esso rappre-senta il primo disposi-tivo terminale.
![Page 19: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/19.jpg)
19
Esercizio 3 (1 min.)Elencate la directory /etc nella modalità seguente:
ricorsivamente;con i metadati;con i file nascosti.
![Page 20: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/20.jpg)
20
Lettura pagina di manuale di lsSi legge la pagina di manuale di ls:
man ls
L’opzione -R consente di elencare le sottodirectory ricorsivamente.L’opzione -l consente di visualizzare i principali metadati del file.L’opzione -a consente di visualizzare i file nascosti.
![Page 21: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/21.jpg)
21
Il comando richiestoIn definitiva, il comando richiesto è il seguente:
ls -alR /etc
![Page 22: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/22.jpg)
22
Esercizio 4 (1 min.)Individuate il tipo di file dei file seguenti:
$HOME/tmp/.X11-unix/X0/dev/sda1/dev/tty0/usr/bin/editor
![Page 23: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/23.jpg)
23
Individuazione tipologia file con fileSi usa il comando file per individuare la tipologia dei file richiesti:
file $HOMEfile /tmp/.X11-unix/X0file /dev/sda1file /dev/tty0file /usr/bin/editor
Nelle slide seguenti si evidenziano gli output dei comandi.
![Page 24: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/24.jpg)
24
Individuazione tipologia file con file
$HOME è una directory.
![Page 25: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/25.jpg)
25
Individuazione tipologia file con file
/tmp/.X11-unix/X0 è un socket.
![Page 26: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/26.jpg)
26
Individuazione tipologia file con file
/dev/sda1 è un file speciale di dispositivo a blocchi.Major 8 (SATA)→Minor 1 (prima→ part.)
![Page 27: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/27.jpg)
27
Individuazione tipologia file con file
/dev/tty0 è un file speciale di dispositivo a caratteri.Major 4 (TTY)→Minor 0 (primo→ term.)
![Page 28: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/28.jpg)
28
Individuazione tipologia file con file
/usr/bin/editor è un collegamento simbo-lico ad un altro file.
![Page 29: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/29.jpg)
29
Esercizio 5 (3 min.)Si crei un file nuovo di contenuto nullo. Leggendo la pagina manuale del comando relativo, si individui un modo per impostare i timestamp al 1/1/1970, ore 00:00.
![Page 30: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/30.jpg)
30
Lettura pagina di manuale di touchSi legge la pagina di manuale di touch:
man touch
L’opzione -t consente di impostare un timestamp diverso da quello attuale. La forma Backus-Naur del timestamp è la seguente:
[[CC]YY]MMDDhhmm[.ss]
![Page 31: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/31.jpg)
31
Impostazione del timestampIl timestamp corrispondente alla data 1/1/1970, ore 00:00 è il seguente:
197001010000.00
Pertanto, il comando richiesto è il seguente:touch -t 197001010000.00 file_nuovo.txt
![Page 32: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/32.jpg)
32
Visione dei metadatiSi possono verificare i timestamp con il comando stat:
stat file_nuovo.txt
Si noti l’uguaglianza dei timestamp di accesso e mo-difica alla data desiderata.Il timestamp di cambio, inve-ce, riflette la vera data di creazione!
![Page 33: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/33.jpg)
33
Esercizio 6 (1 min.) Si crei la seguente gerarchia di directory.
dir1
dir2
dir3
![Page 34: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/34.jpg)
34
Creazione delle directory con mkdirLa gerarchia di directory richiesta è creabile con il comando mkdir. Si può usare l’opzione -p per creare le directory mancanti.
mkdir -p dir1/dir2/dir3
![Page 35: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/35.jpg)
35
Esercizio 7 (2 min.)Create dieci file vuoti con i nomi seguenti:
file1 file2 file3 file4 file5 file6file7 file8 file9 file10
Cancellate i file appena creati.
![Page 36: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/36.jpg)
36
Creazione con ciclo for e touchSi usa un ciclo for per creare i dieci file:for i in 1 2 3 4 5 6 7 8 9 10; do
touch file$idone
![Page 37: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/37.jpg)
37
Creazione con ciclo for e rmSi usa un ciclo for per cancellare i dieci file:for i in 1 2 3 4 5 6 7 8 9 10; do
rm file$idone
![Page 38: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/38.jpg)
38
Esercizio 8 (2 min.)Create un backup della propria home directory nella directory /tmp.
![Page 39: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/39.jpg)
39
Creazione copia archiviale con cp -aSi crea una copia archiviale della directory $HOME con l’opzione -a del comando cp:
cp -a $HOME /tmp
![Page 40: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/40.jpg)
40
Esercizio 9 (3 min.)Studiate la pagina di manuale di mv e individuate un metodo per creare backup dei file sovrascritti.
![Page 41: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/41.jpg)
41
Lettura pagina di manuale di mvSi legge la pagina di manuale di mv:
man mv
L’opzione -b crea un backup del file destinazione secondo il formato standard (viene attaccato il carattere ~ al nome del file).
![Page 42: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/42.jpg)
42
Creazione dei fileSi apre un editor di testo e si crea il file file1.txt con il contenuto seguente:
file1
Si apre un editor di testo e si crea il file file2.txt con il contenuto seguente:
file2
![Page 43: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/43.jpg)
43
Spostamento e backup con mv -bSi sposta file1.txt in file2.txt attivando il backup:
mv -b file1.txt file2.txt
A questo punto:file1.txt dovrebbe sovrascrivere file2.txt;dovrebbe comparire un file file2.txt~, backup difile2.txt.
![Page 44: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/44.jpg)
44
Esercizio 10 (2 min.)Leggendo la pagina di manuale del comando opportuno, individuate un modo per stampare un file “al contrario” (dall’ultima alla prima riga).Applicate tale metodo per stampare le righe del file /etc/passwd dall’ultima alla prima.
![Page 45: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/45.jpg)
45
Lettura pagina di manuale di catSi legge la pagina di manuale di cat:
man cat
Alla fine della pagina di manuale (nella sezione SEE ALSO) si fa menzione del comando tac.
![Page 46: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/46.jpg)
46
Lettura pagina di manuale di tacSi legge la pagina di manuale di tac:
man tac
Il comando tac stampa le righe di un file dall’ultima alla prima.
![Page 47: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/47.jpg)
47
Stampa di /etc/passwd con tacSi stampa il file /etc/passwd con tac:
tac /etc/passwd
![Page 48: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/48.jpg)
48
Esercizio 11 (3 min.)Visualizzate nella forma canonica di hexdump i primi 32 byte dei file seguenti:
/usr/bin/ls/usr/bin/bash/usr/bin/which
Notate qualche differenza?
![Page 49: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/49.jpg)
49
Lettura pagina di manuale di hexdumpSi legge la pagina di manuale di hexdump:
man hexdump
L’opzione -n N consente di effettuare il dump dei primi N byte.
![Page 50: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/50.jpg)
50
Stampa dei file richiesti con hexdumpPer visualizzare nella forma canonica i primi 32 byte dei file richiesti, si può eseguire hexdump con l’opzione -n 32:
hexdump -n 32 -C -v /usr/bin/lshexdump -n 32 -C -v /usr/bin/bashhexdump -n 32 -C -v /usr/bin/which
Nelle slide seguenti si evidenziano gli output dei comandi.
![Page 51: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/51.jpg)
51
Stampa dei file richiesti con hexdump
I primi quattro byte 7f 45 4c 46 sono la signa-ture dei file in formato ELF.Questo è un binario eseguibile.
![Page 52: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/52.jpg)
52
Stampa dei file richiesti con hexdump
I primi quattro byte 7f 45 4c 46 sono la signa-ture dei file in formato ELF.Questo è un binario eseguibile.
![Page 53: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/53.jpg)
53
Stampa dei file richiesti con hexdump
I primi trentadue byte evidenziano uno script di shell.
![Page 54: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/54.jpg)
54
Esercizio 12 (3 min.)Individuate due modi distinti in head per stampare i primi 1024 byte del file /bin/ls.
![Page 55: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/55.jpg)
55
Lettura pagina di manuale di headSi legge la pagina di manuale di head:
man head
L’opzione -c N consente di stampare i primi N byte di un file.Il numero N può espresso in forma umana (con le unità di misura internazionali):
10241K
![Page 56: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/56.jpg)
56
Stampa primo 1KB di /bin/lsI due comandi seguenti stampano i primi 1024 byte di /bin/ls:
head -c 1024 /bin/lshead -c 1K /bin/ls
![Page 57: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/57.jpg)
57
Esercizio 13 (3 min.)Stampate il primo ed il settimo campo di ogni riga dell’archivio testuale /etc/passwd.
![Page 58: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/58.jpg)
58
Stampa dei campi richiesti con cutIl file /etc/passwd ha per separatore dei campi il carattere :. Poiché tale separatore non è quello di default, va impostato con l’opzione -d “:”.I campi richiesti sono il primo e il settimo; essi sono sele-zionabili con l’opzione -f 1,7.
In definitiva, il comando richiesto è:cut -d “:” -f 1,7 /etc/passwd
![Page 59: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/59.jpg)
59
Esercizio 14 (1 min.)Stampate i primi tre caratteri di ogni riga dell’archivio testuale /etc/passwd.
![Page 60: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/60.jpg)
60
Stampa dei campi richiesti con cutÈ richiesta la stampa dei primi tre caratteri di ogni riga. Essi sono selezionabili con l’opzione -c 1-3.
In definitiva, il comando richiesto è:cut -c 1-3 /etc/passwd
![Page 61: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/61.jpg)
61
Esercizio 15 (2 min.)Producete un output multicolonnare nel modo seguente.Prima colonna. Una sequenza di numeri interi crescenti a partire da 1.Seconda colonna. Gli username esistenti nel sistema (primo campo).Terza colonna. Le shell assegnate agli username (ultimo campo).
![Page 62: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/62.jpg)
62
Produzione prima colonnaSi apre il file /etc/passwd e si legge il numero di righe dalla riga di stato.In Debian 10, il numero di righe è 38.
Si crea un file 1.txt con la sequenza di interi da 1 a 38 (un intero per riga).
![Page 63: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/63.jpg)
63
Produzione seconda colonnaSi estrae il primo campo di /etc/passwd con cut:
cut -d “:” -f 1 /etc/passwd
Si crea un file 2.txt con l’output del comando prece-dente.
![Page 64: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/64.jpg)
64
Produzione terza colonnaSi estrae il settimo campo di /etc/passwd con cut:
cut -d “:” -f 7 /etc/passwd
Si crea un file 3.txt con l’output del comando prece-dente.
![Page 65: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/65.jpg)
65
Produzione file multicolonnareSi usa il comando paste per produrre l’output multi-colonnare richiesto:
paste 1.txt 2.txt 3.txt
![Page 66: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/66.jpg)
66
Esercizio 16 (2 min.)Ordinate nel modo seguente il file /etc/passwd.Ordinamento: numerico crescente.Campo: quarto.Separatore: due punti.
![Page 67: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/67.jpg)
67
Ordinamento numerico tramite sortPer ordinare numericamente /etc/passwd si ricorre al comando sort, con le opzioni seguenti.
Impostazione del separatore dei campi: -t ”:”Selezione della chiave di ordinamento: -k 4Selezione del criterio di ordinamento numerico: -n
In definitiva, il comando richiesto è il seguente:sort -t ”:” -k 4 -n /etc/passwd
![Page 68: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/68.jpg)
68
Esercizio 17 (2 min.)Nell’ipotesi che un file di configurazione verifichi il pattern di shell *.log, individuate tutti i file di log nel sistema.
![Page 69: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/69.jpg)
69
Identificazione dei file con findPer identificare i file a partire dal loro nome si può usare il comando find.Poiché è richiesta l’individuazione a partire da un pattern, si può usare l’opzione -name ”PATTERN”. Non ci si dimentichi di quotare il pattern, altrimenti l’espansione di shell potrebbe alterare il comando.Per trovare tutti i file nel sistema (compatibilmente con i diritti di accesso agli stessi), si può far partire la ricerca dalla directory radice /.In definitiva, il comando richiesto è il seguente:
find / -name ”*.log”
![Page 70: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/70.jpg)
70
Esercizio 18 (3 min.)Individuate tutti i file HTML nel sistema.In prima approssimazione, considerate come file HTML un file terminante in:
.html
.htm
.HTML
.HTM
![Page 71: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/71.jpg)
71
Scrittura di una espressione regolarePer individuare i file che terminano con .htm si può usare l’espressione regolare seguente:
^.*\.htm$Per trovare i file che terminano .htm o .html si può aggiungere il match di al più una lettera l:
^.*\.html?$
![Page 72: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/72.jpg)
72
Identificazione dei file con findPer identificare i file a partire dal loro nome si può usare il comando find.Poiché è richiesta l’individuazione a partire da una espressione regolare case insensitive, si può usare l’opzione -iregex ”REGEX”.Per trovare tutti i file nel sistema (compatibilmente con i diritti di accesso agli stessi), si può far partire la ricerca dalla directory radice /.In definitiva, il comando richiesto è il seguente:
find / -iregex ”^.*\.html?$”
![Page 73: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/73.jpg)
73
Esercizio 19 (2 min.)Individuate tutti i file più grandi di 1MB presenti nell’intero sistema.
![Page 74: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/74.jpg)
74
Individuazione dei file con findPer identificare i file a partire dalla loro dimensione si può usare il comando find.Poiché è richiesta l’individuazione dei file più grandi di una specifica dimensione, si può usare l’opzione -size +SIZE. Nel caso specifico, la dimensione è 1MB.Per trovare tutti i file nel sistema (compatibilmente con i diritti di accesso agli stessi), si può far partire la ricerca dalla directory radice /.In definitiva, il comando richiesto è il seguente:
find / -size +1M
![Page 75: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/75.jpg)
75
Esercizio 20 (3 min.)Producete un elenco di tutti i file nel sistema con relativa dimensione:
/file1 dimensione1/file2 dimensione2...
![Page 76: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/76.jpg)
76
Identificazione dei file con findPer identificare i file a partire dalla loro dimensione si può usare il comando find.Poiché è richiesta la stampa di un insieme specifico di metadati, si può usare l’opzione -printf. Nel caso specifico, si richiedono il nome del file e la dimensione; pertanto, la stringa di formato richiesta è ”%p %s\n”.Per trovare tutti i file nel sistema (compatibilmente con i diritti di accesso agli stessi), si può far partire la ricerca dalla directory radice /.In definitiva, il comando richiesto è il seguente:
find / -printf ”%p %s\n”
![Page 77: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/77.jpg)
77
AddendumAlcuni file possono contenere, in maniera sciagurata, degli spazi. In queste condizioni, il comando scritto in precedenza non funziona, poiché verrebbe considerata come chiave numerica una porzione del file!Per evitare questo problema, si può invertire la posizione del nome del file e della sua dimensione, per poi ordinare sulla prima chiave:
find / -printf ”%s %p\n”
![Page 78: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/78.jpg)
78
Esercizio 21 (2 min.)Individuate tutti i file che verificano una delle proprietà seguenti:
terminano con .bak;terminano con ~.
Cancellate forzatamente i file individuati.
![Page 79: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/79.jpg)
79
Scrittura della espressione regolareI file che terminano con .bak sono individuabili con l’espressione regolare seguente:
^.*\.bak$I file che terminano con ~ sono individuabili con l’espressione regolare seguente:
^.*~$I file che terminano con .bak o ~ sono individuabili con l’espressione regolare seguente:
^.*(.bak|~)$
![Page 80: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/80.jpg)
80
Individuazione dei file con findPer identificare i file a partire dalla loro estensione si può usare il comando find.Poiché è richiesta l’individuazione dei file a partire da una espressione regolare, si può usare l’opzione -regex ”PATTERN”.Per trovare tutti i file nel sistema (compatibilmente con i diritti di accesso agli stessi), si può far partire la ricerca dalla directory radice /.In definitiva, il comando richiesto è il seguente:
find / -regex ”^.*(.bak|~)$”
![Page 81: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/81.jpg)
81
Cancellazione forzata dei filePer cancellare forzatamente i file si può eseguire l’azione -exec di find che esegue un’applicazione su ogni match. La cancellazione si ottiene con l’esecuzione del comando rm -f MATCH:
-exec rm -f ’{}’ \;
In definitiva, il comando richiesto è il seguente:find / -regex ”^.*(.bak|~)$” -exec rm -f’{}’ \;
![Page 82: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/82.jpg)
82
Esercizio 22 (4 min.)Stampate i valori di tutte le etichette UUID nel file /etc/fstab.Se possibile, evitate di stampare la stringa UUID=.
![Page 83: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/83.jpg)
83
Studio del file /etc/fstabSi stampa innanzitutto il contenuto del file /etc/fstab, al fine di capire il formato delle stringhe UUID.
cat /etc/fstabUna stringa UUID ha il formato seguente:UUID=ed6540d4-b06b-442d-93fd-07c3fda6ee37
Otto caratterialfanumerici
Quattro caratterialfanumerici
Quattro caratterialfanumerici
Quattro caratterialfanumerici
Dodici caratterialfanumerici
![Page 84: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/84.jpg)
84
Scrittura della espressione regolareL’espressione regolare seguente effettua il match del primo blocco di caratteri alfanumerici:^UUID=[[:alnum:]]{8}L’espressione regolare seguente effettua anche il match del secondo blocco di caratteri alfanumerici:^UUID=[[:alnum:]]{8}-[[:alnum:]]{4}Esistono tre blocchi di quattro caratteri consecutivi, separati da -; l’espressione regolare seguente li cattura:^UUID=[[:alnum:]]{8}-([[:alnum:]]{4}-){3}
![Page 85: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/85.jpg)
85
Scrittura della espressione regolareL’espressione regolare seguente cattura anche l’ultimo blocco di dodici caratteri alfanumerici:^UUID=[[:alnum:]]{8}-([[:alnum:]]{4}-){3}[[:alnum:]]{12}
![Page 86: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/86.jpg)
86
Identificazione UUID con grepPer identificare e stampare contenuti in un file si può usare il comando grep.Poiché è richiesta l’individuazione di contenuti tramite una espressione regolare estesa, si può usare l’opzione -E ”REGEX”. Si può rimuovere la stringa UUID= dalla espressione regolare precedente per stampare solo il va-lore di UUID.Per stampare solo il match, si può usare l’opzione -o.In definitiva, il comando richiesto è il seguente:
grep -o -E “^[[:alnum:]]{8}-([[:alnum:]]{4}-){3}[[:alnum:]]{12}” /etc/fstab
![Page 87: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/87.jpg)
87
Esercizio 23 (2 min.)Create un collegamento fisico di nome passwd al file /etc/passwd. Ci riuscite?Create un collegamento simbolico di nome passwd al file /etc/passwd. Ci riuscite?
![Page 88: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/88.jpg)
88
Creazione collegamento fisicoSi crea un collegamento fisico al file /etc/passwd:
ln /etc/passwdSi ottiene un messaggio di errore del tipo “permesso negato”. Non è possibile creare collegamenti fisici a file posseduti da altri utenti.
![Page 89: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/89.jpg)
89
Creazione collegamento simbolicoSi crea un collegamento simbolico al file /etc/passwd:
ln -s /etc/passwdIl collegamento simbolico è stato creato correttamente; lo si può visualizzare con il comando seguente:
ls -l passwd.
![Page 90: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/90.jpg)
90
Esercizio 24 (4 min.)Create tre archivi della vostra home directory:
/tmp/home.tar.gz/tmp/home.tar.bz2/tmp/home.tar.xz
Come variano le dimensioni degli archivi?
![Page 91: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/91.jpg)
91
Creazione primo archivio con tarPer creare un archivio si usa il comando tar con le opzioni -f ARCHIVE_NAME e -c.Per comprimere l’archivio in formato GZIP si usa l’opzione -z.
In definitiva, il comando richiesto è il seguente:tar -z -f /tmp/home.tar.gz -c /home/studente
![Page 92: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/92.jpg)
92
Creazione secondo archivio con tarPer creare un archivio si usa il comando tar con le opzioni -f ARCHIVE_NAME e -c.Per comprimere l’archivio in formato BZIP2 si usa l’opzione -j.
In definitiva, il comando richiesto è il seguente:tar -j -f /tmp/home.tar.bz2 -c /home/studente
![Page 93: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/93.jpg)
93
Creazione secondo archivio con tarPer creare un archivio si usa il comando tar con le opzioni -f ARCHIVE_NAME e -c.Per comprimere l’archivio in formato XZ si usa l’opzione -J.
In definitiva, il comando richiesto è il seguente:tar -J -f /tmp/home.tar.xz -c /home/studente
![Page 94: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/94.jpg)
94
Analisi dimensioni archiviLe dimensioni degli archivi sono recuperabili con il comando ls -l:
ls -l /tmp/home.tar.gzls -l /tmp/home.tar.bz2ls -l /tmp/home.tar.xz
In generale XZ comprime di più, GZ comprime di meno, BZIP2 è una via di mezzo.
![Page 95: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/95.jpg)
95
Esercizio 25 (2 min.)Create un archivio della vostra home directory:
/home/studente/home.7zCifrate l’archivio con la chiave simmetrica secret.(Nella speranza che l’archivio non sia gigantesco) Estraete l’archivio nella directory /tmp.
![Page 96: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/96.jpg)
96
Creazione archivio cifrato con 7zPer creare un archivio in formato 7-ZIP si usa il comando 7z con il sottocomando a.Per cifrare l’archivio si abilita la cifratura con l’opzione-mhe=on.Per specificare la chiave di cifratura secret si usa l’opzione -psecret.
In definitiva, il primo comando richiesto è il seguente:7z -mhe=on -psecret a ~/home.7z ~
![Page 97: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/97.jpg)
97
Estrazione archivio cifrato con 7zPer estrarre l’archivio nella directory /tmp ci si sposta preventivamente lì:
cd /tmp
Per estrarre l’archivio in formato 7-ZIP si usa il comando 7z con il sottocomando x.Si immette la chiave secret al prompt.
In definitiva, il primo comando richiesto è il seguente:7z x ~/home.7z
![Page 98: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/98.jpg)
98
Esercizio 26 (1 min.)Testate la leggibilità e la scrivibilità del file seguente:
/etc/shadow
Riuscite ad accedere al file in qualche modo?
![Page 99: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/99.jpg)
99
Test di leggibilità con il builtin testSi verifica la leggibilità di /etc/shadow:
test -r /etc/shadow
Si stampa l’esito del test:echo $?
Si ottiene l’output seguente:1
→ Il file /etc/shadow non è leggibile da studente.
![Page 100: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/100.jpg)
100
Test di scrivibilità con il builtin testSi verifica la scrivibilità di /etc/shadow:
test -w /etc/shadow
Si stampa l’esito del test:echo $?
Si ottiene l’output seguente:1
→ Il file /etc/shadow non è scrivibile da studente.
![Page 101: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/101.jpg)
101
Esercizio 27 (2 min.)Producete un elenco di tutti i file nel sistema con relativa dimensione:
/file1 dimensione1/file2 dimensione2...
Salvate l’output nel comando out.txt.Scartate i messaggi di errore.
![Page 102: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/102.jpg)
102
Identificazione dei file con findPer identificare i file a partire dalla loro dimensione si può usare il comando find.Poiché è richiesta la stampa di un insieme specifico di metadati, si può usare l’opzione -printf. Nel caso specifico, si richiedono la dimensione e il nome del file; pertanto, la stringa di formato richiesta è ”%s %p\n”.Per trovare tutti i file nel sistema (compatibilmente con i diritti di accesso agli stessi), si può far partire la ricerca dalla directory radice /.
find / -printf ”%s %p\n”
![Page 103: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/103.jpg)
103
Redirezione di STDOUT e STDERRPer salvare l’output del comando nel file out.txt, si redireziona il canale STDOUT su tale file.
find / -printf ”%s %p\n” > out.txt
Per scartare i messaggi di errore, si redireziona il canale STDERR nel file speciale di dispositivo /dev/null.
find / -printf ”%s %p\n” > out.txt2> /dev/null
![Page 104: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/104.jpg)
104
Esercizio 28 (3 min.)Usando i comandi interni exec e read, copiate le prime cinque righe di /etc/passwd nel file passwd-top5.txt.
![Page 105: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/105.jpg)
105
Apertura dei filePer poter leggere dal file /etc/passwd, bisogna aprire tale file in lettura:
exec 3< /etc/passwd
Per poter scrivere sul file passwd-top5.txt, bisogna aprire tale file in scrittura, nella modalità “append”:
exec 4>> passwd-top5.txt
![Page 106: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/106.jpg)
106
Lettura e scrittura delle righePer scrivere le prime cinque righe di /etc/passwd nel file si può usare un ciclo for con i builtin read e echo:
for i in 1 2 3 4 5; doread -u 3 lineecho $line >&4
done
![Page 107: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/107.jpg)
107
Chiusura dei fileAl termine delle operazioni di lettura e scrittura, si chiudono i file /etc/passwd e passwd-top5.txt:
exec 3<&-exec 4>&-
![Page 108: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/108.jpg)
108
Esercizio 29 (5 min.)Individuate i dieci file più grandi all’interno della vostra home directory.
![Page 109: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/109.jpg)
109
Scomposizione del task in sotto-taskL’esercizio si può scomporre in tre parti:
creazione di un elenco di file con relative dimensioni;ordinamento decrescente delle righe nell’elenco tramitela chiave “dimensione”;stampa dei primi dieci file dall’elenco ordinato.
La prima parte si risolve come nell’Esercizio 27.La seconda parte si risolve tramite il comando sort.La terza parte si risolve tramite il comando head.
![Page 110: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/110.jpg)
110
Soluzione primo taskOccorre produrre un elenco di file e directory all’interno della propria home directory, con le relative dimensioni.
find $HOME -printf ”%s %p\n”
Si dirotta l’output su un file tmp1.txt. find $HOME -printf ”%s %p\n” > tmp1.txt
Si scartano gli errori, dirottandoli su /dev/null.find $HOME -printf ”%s %p\n” > tmp1.txt
2>/dev/null
![Page 111: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/111.jpg)
111
Soluzione secondo taskOccorre ordinare numericamente ed in senso decrescente l’elenco prodotto nel task precedente, usando come chiave il primo campo (dimensione file).
sort -n -r -k 1 tmp1.txt
Si dirotta l’output su un file tmp2.txt.sort -n -r -k 1 tmp1.txt > tmp2.txt
Di solito sort non genera errori; si può decidere di non scartare STDERR.
![Page 112: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/112.jpg)
112
Soluzione terzo taskOccorre stampare le prime dieci righe dell’elenco prodotto nel task precedente:
head tmp2.txt
![Page 113: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/113.jpg)
113
Esercizio 30 (1 min.)Individuate tutti i file in /etc che terminano con l’estensione .txt.
![Page 114: Lezione 7 - Unimore](https://reader030.fdocuments.in/reader030/viewer/2022012716/61aeb413e00599768404cd33/html5/thumbnails/114.jpg)
114
Identificazione dei file con findSi usa l’opzione -name di find per identificare i file in base al pattern *.txt.Il pattern *.txt va quotato per evitare l’espansione nei file terminanti con .txt contenuti nella directory corrente.
find /etc -name ”*.txt”