Linux Tutorial – Puntata 11
di jolek78
Care/i fruitrici e fruitori del blog, in questi post – ogni domenica mattina – si parlerà del sistema operativo GNU/Linux e degli strumenti per utilizzarlo al massimo delle potenzialità. Cercheremo di spiegare come funziona, cosa è il kernel, come costruirsi una vpn, come settare un firewall e giocare col terminale, usare adb e altro. Se il capitalismo della sorveglianza ci vuole passivi consumatori-consumatrici di servizi noi si risponde con un po’ di “cultura informatica” e un MARAMEO (quasi affettuoso). Buona lettura!
Bentornati a tutti. Uno dei motivi per cui si è deciso di creare questa sorta di tutorial sul sistema operativo più diffuso al mondo, era perché avrei potuto entrare nei dettagli tecnici passo per passo, esplorando zone, luoghi del sistema, e facendo esempi. Quando ho cominciato a esplorare la directory /dev mi sono accorto che in essa erano presenti tre files fondamentali, che appartengono non solo alla storia di linux, ma anche alla storia di tutta l’informatica in generale. I tre files di cui sto parlando sono 3: stdin, stdout e stderr. Quindi, allacciatevi le cinture anche questa domenica perché stiamo per cominciare. Happy coding 🙂
bottega@bottegadelbarbieri /dev ls -ltr |grep std lrwxrwxrwx 1 root root 15 May 8 14:38 stdout -> /proc/self/fd/1 lrwxrwxrwx 1 root root 15 May 8 14:38 stdin -> /proc/self/fd/0 lrwxrwxrwx 1 root root 15 May 8 14:38 stderr -> /proc/self/fd/2 bottega@bottegadelbarbieri /dev
DEV (3)
Prima di tutto passiamo alle definizioni:
stdin | >> standard input |
stdout | >> standard output |
stderr | >> standard error |
in numeri
0 | >> stdin |
1 | >> stdout |
2 | >> stderr |
Quelli che abbiamo elencato precedentemente sono definiti streams, cioè flussi di dati che viaggiano da una parte all’altra. In parole povere, lo stdin è lo stream che viaggia dalla nostra tastiera al nostro computer (in), lo stdout è lo stream che viaggia dal comando impartito al risultato ottenuto (out), mentre lo stderr altro non e’ che il precedente ma nel caso in cui il risultato ottenuto sia un errore (err). Essi, come si puo’ vedere precedentemente, altro non sono che link simbolici che partono dalla directory /proc.
STDOUT
Primo esperimento. Creiamo un piccolo script in bash denominato script-std.sh che ci possa permettere di fare alcune operazioni. Spostiamoci quindi nella nostra /home directory e creiamo un file generico test-out.txt su cui inviare i nostri stream:
bottega@bottegadelbarbieri ~ cd bottega@bottegadelbarbieri ~ touch test-out.txt bottega@bottegadelbarbieri ~ vim script-std.sh
Quindi:
1 #!/bin/bash 2 file=test.txt 3 echo "test stdin stdout stderr $file" 1>$file
Diamo i permessi di esecuzione, ed eseguiamo lo script
bottega@bottegadelbarbieri ~ chmod +x script-std.sh
bottega@bottegadelbarbieri ~ ./script-std.sh
Se andiamo a visualizzare il file col comando cat vedremo:
bottega@bottegadelbarbieri ~ cat test-out.txt test stdin stdout stderr test.txt
In parole povere, abbiamo rediretto il testo fra virgolette dopo echo all’interno del file test-out.txt. Questo viene definito lo stdout, ovvero l’uscita di un comando che, nella fattispecie, abbiamo esportato attraverso il simbolo 1>.
Stessa cosa succede se, facendola molto meno complicata, vogliamo ridirezionare l’output del comando ls -ltr all’interno del file medesimo. Questa volta pero’ teniamo a mente che, invece di una sola freccia >, che vorrebbe dire semplicemente scrivere, dobbiamo inserire una doppia freccia >>, e cioè aggiungere, cosi’ da evitare di sovrascrivere il file sopracitato. Inseriamo un simbolo divisorio, e successivamente visualizziamo:
bottega@bottegadelbarbieri ~ echo "----------------------" 1>>test-out.txt bottega@bottegadelbarbieri ~ ls -ltr 1>>test-out.txt
bottega@bottegadelbarbieri ~ cat test-out.txt test stdin stdout stderr test.txt ---------------------- total 1048628 drwxr-xr-x 2 bottega bottega 4096 Feb 27 09:10 Videos drwxr-xr-x 2 bottega bottega 4096 Feb 27 09:10 Public drwxr-xr-x 2 bottega bottega 4096 Feb 27 09:10 Music drwxr-xr-x 2 bottega bottega 4096 Feb 27 09:10 Documents drwxr-xr-x 2 bottega bottega 4096 Feb 27 09:10 Desktop drwxr-xr-x 2 bottega bottega 4096 Feb 27 09:10 Templates drwxr-xr-x 2 bottega bottega 4096 Feb 27 09:31 Pictures drwxr-xr-x 2 bottega bottega 4096 Feb 28 12:28 Downloads -rw-rw-r-- 1 bottega bottega 1073741824 Mar 9 23:35 random.file -rw-rw-r-- 1 bottega bottega 1073741824 Mar 10 00:12 sparse.file drwxrwxr-x 2 bottega bottega 4096 Apr 25 06:17 tmp drwxrwxr-x 2 bottega bottega 4096 May 9 00:41 output -rwxrwxr-x 1 bottega bottega 72 May 16 00:20 script-std.sh -rw-rw-r-- 1 bottega bottega 57 May 16 01:09 test.txt bottega@bottegadelbarbieri ~
Come si puo’ vedere ora abbiamo ora due output esportati nel file, uno in coda all’altro.
STDERR
Secondo esperimento. Creiamo un file chiamato test-err.txt col comando touch, e, con l’utente bottega, proviamo a cercarlo con find all’interno di tutto il sistema. Siccome pero’ il nostro utente non ha permessi di root, ricevemo un errore tutte le volte che il comando provera’ a scandagliare qualsiasi directory che non faccia parte di /home/bottega. Ergo: proviamo a esportare qualsiasi messaggio di errore in uscita all’interno del file con il parametro 2>>
bottega@bottegadelbarbieri ~ touch test-out.txt bottega@bottegadelbarbieri ~ find /* -name "test*" 2>>test-err.txt
Visualizziamo ora le prime 20 righe del file, e vediamo se avevamo ragione:
bottega@bottegadelbarbieri ~ cat test-err.txt |head -n 20 find: ‘/boot/efi’: Permission denied find: ‘/boot/lost+found’: Permission denied find: ‘/etc/ssl/private’: Permission denied find: ‘/etc/cups/ssl’: Permission denied find: ‘/etc/polkit-1/localauthority’: Permission denied find: ‘/home/bottega_test/.cache’: Permission denied find: ‘/home/bottega_test/.config/pulse’: Permission denied find: ‘/lost+found’: Permission denied find: ‘/proc/tty/driver’: Permission denied find: ‘/proc/1/task/1/fd’: Permission denied find: ‘/proc/1/task/1/fdinfo’: Permission denied find: ‘/proc/1/task/1/ns’: Permission denied find: ‘/proc/1/fd’: Permission denied find: ‘/proc/1/map_files’: Permission denied find: ‘/proc/1/fdinfo’: Permission denied find: ‘/proc/1/ns’: Permission denied find: ‘/proc/2/task/2/fd’: Permission denied find: ‘/proc/2/task/2/fdinfo’: Permission denied find: ‘/proc/2/task/2/ns’: Permission denied find: ‘/proc/2/fd’: Permission denied bottega@bottegadelbarbieri ~
Stessa cosa succede se proviamo a eseguire un comando random non presente nel sistema, aggiungendo il messaggio di errore in coda al file appena creato. Successivamente, visualizziamo le ultime linee del file con tail:
bottega@bottegadelbarbieri ~ echo "-----------------------" 1>>test-err.txt bottega@bottegadelbarbieri ~ qualcosa-da-eseguire 2>>test-err.txt bottega@bottegadelbarbieri ~ tail test-err.txt find: ‘/var/cache/cups’: Permission denied find: ‘/var/cache/apparmor/83ba7c1a.0’: Permission denied find: ‘/var/cache/private’: Permission denied find: ‘/var/spool/rsyslog’: Permission denied find: ‘/var/spool/cups’: Permission denied find: ‘/var/spool/cron/crontabs’: Permission denied find: ‘/var/log/speech-dispatcher’: Permission denied find: ‘/var/log/private’: Permission denied ----------------------- qualcosa-da-eseguire: command not found
STDIN
Terzo esperimento. Proviamo a ridirezionare l’input di un comando all’interno di un nuovo file. Per fare questo giocheremo un po’ con uno dei poemi più belli che siano stati scritti: “La ballata del vecchio Marinaio” di Coleridge. Scriviamo dunque il file col comando vim
bottega@bottegadelbarbieri ~ vim the-rhyme-mariner.txt bottega@bottegadelbarbieri ~
Se andiamo a visualizzare le informazioni del file col comando stat:
bottega@bottegadelbarbieri ~ stat the-rhyme-mariner.txt File: the-rhyme-mariner.txt Size: 20272 Blocks: 40 IO Block: 4096 regular file Device: fd01h/64769d Inode: 523058 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1000/ bottega) Gid: ( 1000/ bottega) Access: 2021-05-16 03:16:25.113521516 +0100 Modify: 2021-05-16 03:02:52.957931967 +0100 Change: 2021-05-16 03:02:52.957931967 +0100 Birth: -
Proviamo ora a esportare l’input di cat e di wc -l dal vecchio file all’interno di un nuovo file col simbolo <:
bottega@bottegadelbarbieri ~ cat < the-rhyme-mariner.txt > the-rhyme-mariner-in.txt bottega@bottegadelbarbieri ~ wc -l < the-rhyme-mariner.txt >> the-rhyme-mariner-in.txt bottega@bottegadelbarbieri ~ tail the-rhyme-mariner-in.txt Is gone: and now the Wedding-Guest Turned from the bridegroom's door. He went like one that hath been stunned, And is of sense forlorn: A sadder and a wiser man, He rose the morrow morn. 783 bottega@bottegadelbarbieri ~
Terzo esperimento riuscito.
Ora basta pero’. Correte ad ascoltarvi l’audiobook di Coleridge e rilassatevi. Ne varrà la pena
http://listentogenius.com/recordings2/RimeAncientMariner.mp3
Alla prossima settimana!
jolek78
>> | Indice | << |
Puntata 10 | < > | Puntata 12 |
Il logo “Tux Linux” e’ stato realizzato e distribuito dall’artista deiby-ybied su Deviantart in licenza Creative Commons BY-NC-SA 3.0