In questa esercitazione dapprima vediamo un video sulla codifica
dell'informazione.
Poi vediamo alcuni comandi Unix di utilità
generale ed infine riprendiamo gli esercizi di HTML svolti nelle
esercitazioni precedenti.
Molti dettagli relativi ai comandi Unix verranno discussi nei
corsi dei prossimi anni.
Notiamo inoltre che molti di questi comandi (in particolare quelli di
connessione remota) non sono disponibili per default sotto Windows,
e alcuni non sono possibili del tutto.
Si lavora con la shell, quindi entro una console
$ grep "prova HTML" *.html
Poi c'è il comando man (manuale in linea).
Se qualcosa non è chiaro dalla spiegazione fatta qui, si può chiedere aiuto drettamente al sistema. Per esempio, se voglio sapere quali sono altre opzioni che posso usare con ls, scrivo:
man ls
Provate a digitare ls -la. Se l'elenco di directory e file è troppo lungo, potete
visualizzarlo a "pezzi" digitando il comando ls -la | more.
Sullo schermo viene visualizzata
una pagina (una schermata) alla volta. Per andare avanti alla prossima schermata si deve usare
la barra di spaziatura; per uscire dal comando more si deve premere il tasto q
-rwxrwxrxw drwxrwxrwxIl primo carattere indica se si tratta di un file (-) oppure di una directory (d). Poi seguono delle triplette della forma rwx. La prima descrive i permessi che l'utente proprietario (u) ha sul file, seguono i permessi degli utenti dello stesso gruppo (g) e quelli degli altri utenti (o).
$ chmod g+w prova.txt $ chmod o-x prova.exeprima si aggiunge il permesso di scrittura sul file prova.txt per gli untenti del gruppo e poi si toglie il permesso di esecuzione sul file prova.exe per gli "altri".
Scegliete un file, osservatene i permessi e provate a modificarli con il comando chmod
$ sleep 10; lsDopo una breve attesa (10 sec.), verrà visualizzato il contenuto della directory corrente. I comandi sleep 10 e ls sono stati mandati in foreground e quindi il processo shell è rimasto bloccato fino al termine dei comandi stessi.
$ sleep 10; ls &Il simbolo & in fondo al comando fa sì che i comandi vengano lanciati in background e quindi il prompt della shell diventi immediatamente utilizzabile. Ad un certo punto, dopo che è terminato il comando sleep 10, viene visualizzato il contenuto della directory corrente, ma nel frattempo è possibile inviare alla shell altri comandi ... provate ...
Abbiamo appena usato il simbolo | (chiamato pipe in Unix). Di che cosa si tratta?
Tipicamente i programmi scrivono su terminale e leggono da tastiera. Questi sono considerati input e output standard.
Però un programma può prendere l'input da un file anziché da standard input, con il comando di redirezione dell'ingresso:
$ programma < fileinAnalogamente, può scrivere l'output su un file con il comando di redirezione dell'uscita:
$ programma > fileoutInfine, l'output standard di un programma si può collegare all'input standard di un altro comando attraverso una tubatura o pipe con il comando
$ programma1 | programma2Più programmi collegati da pipe (tubi) si chiamano pipeline (tubatura).
Esercizio
Fare un file che contiene la lista ordinata dei file della directory corrente.
Ottenere la lista estesa dei file col comando ls -l, collegarla in pipeline con il comando sort e redirigere l'uscita sul file lista-ordinata.
Si usa il comando ping (send ICMP packets to network hosts).
Permette di spedire dei pacchetti ad un host (nella LAN e su Internet), per verificare per esempio se l'host sta funzionando.
Segue un esempio di uso del comando ping -c 5 (dove -c 5 specifica che il comando termina dopo aver ricevuto 5 risposte):
$ ping -c 5 elios.disi.unige.it PING elios.disi.unige.it (130.251.61.19): 56 data bytes 64 bytes from 130.251.61.19: icmp_seq=0 ttl=255 time=0.9 ms 64 bytes from 130.251.61.19: icmp_seq=1 ttl=255 time=0.8 ms 64 bytes from 130.251.61.19: icmp_seq=2 ttl=255 time=0.8 ms 64 bytes from 130.251.61.19: icmp_seq=3 ttl=255 time=1.0 ms 64 bytes from 130.251.61.19: icmp_seq=4 ttl=255 time=0.8 ms --- elios.disi.unige.it ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 0.8/0.8/1.0 ms
Unix (anche Linux) consente di collegarsi attraverso un terminale su una macchina remota. Con il comando telnet indirizzomacchina o con l'altro comando ssh indirizzomacchina si lavora sulla macchina di cui si specifica l'indirizzo, usando la sua CPU, la sua memoria, il suo sistema operativo...
In breve, esattamente come se si usasse la sua tastiera e il suo monitor.
Unica differenza: solo in modalità testo.
Che differenza c'è tra telnet e ssh? Dal punto di vista dell'uso, nessuna; dal punto di vista della protezione della comunicazione (sicurezza), il primo fa un collegamento non sicuro e il secondo fa un collegamento sicuro, ossia crittografato.
Spiegazioni più dettagliate si trovano sul sito www.openssh.org.
PER AVVIARE UNA SESSIONE telnet:
$ telnet indirizzomacchina $ login: (qui si scrive il proprio username) $ password: (qui si scrive la propria password)
PER AVVIARE UNA SESSIONE ssh:
$ ssh indirizzomacchina $ password: (qui si scrive la propria password)
Se si vuole specificare di nuovo uno username si deve dare il comando
$ ssh -l username indirizzomacchina
Esercizio (deve essere fatto in contemporanea con un secondo gruppo)
È possibile specificare alle applicazioni grafiche su quale macchina devono visualizzare il loro output.
Il programma ftp (file transfer protocol) consente di trasferire i file attraverso la rete da un elaboratore all'altro.
Il programma sftp (secure ftp) esegue una connessione sicura in quanto crittografata.
NOTA BENE: IN LABORATORIA ABBIAMO A DISPOSIZIONE sftp E NON ftp
$ sftp <nomeutente>@<nomemacchina> $ Enter password for <nomeutente>:
(nomemacchina è il nome simbolico; oppure l'indirizzo IP, che vedremo a lezione)
In una sessione ftp (sftp) si distingue la macchina locale dalla macchina remota. I comandi principali sono:
ls | lista file |
cd | cambia directory |
get <file> | prendi il file <file> dalla macchina remota e copialo sulla locale |
put <file> | prendi il file <file> dalla macchina locale e copialo sulla remota |
get <f1> <f2> | prendi il file <f1> dalla macchina remota e copialo sulla locale con nome <f2> |
put <f1> <f2> | prendi il file <f1> dalla macchina locale e copialo sulla remota con nome <f2> |
mget <lista> | prendi i file elencati nella lista dalla macchina remota e copiali sulla locale |
mput <lista> | prendi i file elencati nella lista dalla macchina locale e copiali sulla remota |
del <file> | cancella il file <file> dalla macchina remota |
Esercizio (deve essere fatto in contemporanea con un secondo gruppo)
Farsi ospitare dall'altro gruppo, collegandosi a una macchina con uno dei loro username/password, senza scollegarsi dalla propria macchina.
Collegarsi con sftp alla macchina su cui si era collegati con il proprio username/password e eseguire alcuni trasferimenti di file.
L'altro gruppo ripete la prova.