aggiunto appunti della lezione
This commit is contained in:
parent
2fd7db1ee2
commit
4b0c36d95b
@ -0,0 +1,183 @@
|
|||||||
|
## Reindirizzamenti e pipe
|
||||||
|
|
||||||
|
Tutti i programmi di manipolazione del testo partono da un input standard (`stdin`), lo inviano a un output standard (`stdout`) e inviano eventuali errori a un output degli errori standard (`stderr`). Solitamente, `stdin` e' quello digitato da tastiera.
|
||||||
|
|
||||||
|
Il carattere `>` dice a `cat` di indirizzare il suo output sul file `newfile`, non sullo `stdout`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat > newfile
|
||||||
|
Nuovo file di prova
|
||||||
|
^C
|
||||||
|
|
||||||
|
cat newfile
|
||||||
|
Nuovo file di prova
|
||||||
|
```
|
||||||
|
E' possibile usare la `|` per indirizzare l'output di un programma ad un altro programma.
|
||||||
|
|
||||||
|
### Ottenere una parte di un file di testo
|
||||||
|
|
||||||
|
Il comando `head` e' usato per leggere di default le prime 10 righe di un file, mentre il comando `tail` le ultime 10. Per indicare il numero di righe e' possibile reindirizzare l'output al comando `nl`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
head /var/log/alternatives.log | nl
|
||||||
|
1 update-alternatives 2024-10-02 20:46:38: run with --install /usr/bin/pager pager /bin/more 50 --slave /usr/share/man/man1/pager.1.gz pager.1.gz /usr/share/man/man1/more.1.gz
|
||||||
|
2 update-alternatives 2024-10-02 20:47:08: run with --install /usr/bin/x-www-browser x-www-browser /usr/bin/brave-browser-nightly 1
|
||||||
|
3 update-alternatives 2024-10-02 20:47:08: run with --install /usr/bin/gnome-www-browser gnome-www-browser /usr/bin/brave-browser-nightly 1
|
||||||
|
4 update-alternatives 2024-10-02 20:47:08: run with --install /usr/bin/brave-browser brave-browser /usr/bin/brave-browser-nightly 1
|
||||||
|
```
|
||||||
|
|
||||||
|
Oppure, per contare il numero di righe totali di un file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat logs/borg_backup.log | wc -l
|
||||||
|
10153
|
||||||
|
```
|
||||||
|
|
||||||
|
## sed
|
||||||
|
|
||||||
|
Possiamo usare `sed` per cercare solo le righe che contengono un determinato pattern:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sed -n /cat/p < ftu.txt
|
||||||
|
|
||||||
|
cat
|
||||||
|
zcat
|
||||||
|
bzcat
|
||||||
|
xzcat
|
||||||
|
```
|
||||||
|
|
||||||
|
il simbolo `<` indirizza il contenuto del file al comando `sed`. La stringa racchiusa dagli *slash*, ovvero `/cat/`, e' la stringa che stiamo ricercando. L'opzione `-n` indica a sed di non produrre output, se non quello generato dal comando `p`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sed /cat/d < ftu.txt
|
||||||
|
cut
|
||||||
|
head
|
||||||
|
ls
|
||||||
|
man
|
||||||
|
md5sum
|
||||||
|
nl
|
||||||
|
paste
|
||||||
|
sed
|
||||||
|
sort
|
||||||
|
split
|
||||||
|
sort
|
||||||
|
vim
|
||||||
|
cd
|
||||||
|
tail
|
||||||
|
uniq
|
||||||
|
wc
|
||||||
|
mv
|
||||||
|
cp
|
||||||
|
sed
|
||||||
|
passwd
|
||||||
|
pwd
|
||||||
|
```
|
||||||
|
In questo modo `sed` visualizzera' tutto il contenuto del file, eccetto cio' che `d` indica a *sed* di cancellare dal suo output.
|
||||||
|
|
||||||
|
Un uso comune di *sed* e' quello di *trovare e sostituire del testo* all'interno di un file. Per sostituire tutte le occorrenze di *cat* con *dog*:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sed s/cat/dog/ < ftu.txt
|
||||||
|
|
||||||
|
cut
|
||||||
|
head
|
||||||
|
ls
|
||||||
|
man
|
||||||
|
md5sum
|
||||||
|
nl
|
||||||
|
paste
|
||||||
|
sed
|
||||||
|
sort
|
||||||
|
dog
|
||||||
|
zdog
|
||||||
|
split
|
||||||
|
sort
|
||||||
|
vim
|
||||||
|
cd
|
||||||
|
tail
|
||||||
|
uniq
|
||||||
|
wc
|
||||||
|
mv
|
||||||
|
cp
|
||||||
|
sed
|
||||||
|
passwd
|
||||||
|
pwd
|
||||||
|
bzdog
|
||||||
|
xzdog
|
||||||
|
```
|
||||||
|
|
||||||
|
E' possibile passare direttamente il file a `sed`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sed s/cat/dog/ ftu.txt
|
||||||
|
cut
|
||||||
|
head
|
||||||
|
ls
|
||||||
|
man
|
||||||
|
md5sum
|
||||||
|
nl
|
||||||
|
paste
|
||||||
|
sed
|
||||||
|
sort
|
||||||
|
dog
|
||||||
|
zdog
|
||||||
|
split
|
||||||
|
sort
|
||||||
|
vim
|
||||||
|
cd
|
||||||
|
tail
|
||||||
|
uniq
|
||||||
|
wc
|
||||||
|
mv
|
||||||
|
cp
|
||||||
|
sed
|
||||||
|
passwd
|
||||||
|
pwd
|
||||||
|
bzdog
|
||||||
|
xzdog
|
||||||
|
```
|
||||||
|
|
||||||
|
In realta', il file non e' stato mai modificato. Per procedere, creando una copia di backup:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sed -i.backup s/cat/dog/ ftu.txt
|
||||||
|
|
||||||
|
ll ftu*
|
||||||
|
Permissions Size User Group Date Modified Name
|
||||||
|
.rw-rw-r-- 114 dado dado 29 ott 21:19 ftu.txt
|
||||||
|
.rw-rw-r-- 114 dado dado 29 ott 21:09 ftu.txt.backup
|
||||||
|
```
|
||||||
|
|
||||||
|
In questo modo, viene creato un file di backup e modificato direttamente il file originale.
|
||||||
|
|
||||||
|
## Integrita' dei dati
|
||||||
|
|
||||||
|
- md5sum
|
||||||
|
- sha256sum
|
||||||
|
- sha512sum
|
||||||
|
|
||||||
|
Per calcolare il valore SHA256 del file *ftu.txt* dare il seguente comando:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sha256sum ftu.txt
|
||||||
|
94cc7c49dfe55cd824d4e0c2f88881fba9daae41c11601f08b1bf818cd77a671 ftu.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Se creiamo un file che contiene il valore di checksum, possiamo utilizzarlo per verificare l'integrita' del file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sha256sum ftu.txt > sha256sum.txt
|
||||||
|
|
||||||
|
sha256sum -c sha256sum.txt
|
||||||
|
ftu.txt: OK
|
||||||
|
```
|
||||||
|
|
||||||
|
Se il file originale fosse modificato, il controllo fallirebbe:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo "new line" >> ftu.txt
|
||||||
|
|
||||||
|
sha256sum -c sha256sum.txt
|
||||||
|
ftu.txt: NON RIUSCITO
|
||||||
|
sha256sum: WARNING: 1 computed checksum did NOT match
|
||||||
|
```
|
Loading…
x
Reference in New Issue
Block a user