Usare bash - Esercizi - La paginina di VincenzoV
Usare bash - Esercizi - La paginina di VincenzoV
Usare bash - Esercizi - La paginina di VincenzoV
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Usare</strong> <strong>bash</strong> - <strong>Esercizi</strong><br />
1. echo fa... l'eco<br />
Esempio1: vv@debian:~$ echo Ciao, come va?<br />
Esempio2: vv@debian:~$ man echo<br />
2. Mostrare il contenuto <strong>di</strong> una variabile predefinita ($HOME, $SHELL, $USER, $RANDOM,<br />
$PWD, $UID, $PATH...)<br />
Esempio: vv@debian:~$ echo $HOME (cosa significano le variabili elencate?)<br />
3. Creare una variabile e visualizzarla<br />
Esempio1: vv@debian:~$ MioNome=Vincenzo<br />
Esempio2: vv@debian:~$ MioNome=Vincenzo Villa (Errore! Soluzione1? Soluzione2?)<br />
4. Chi sono? Quale è il mio gruppo? Quale è la mia home? Dove mi trovo?<br />
5. Mostrare l'elenco <strong>di</strong> chi sta utilizzando la macchina in questo momento<br />
Esempio: vv@debian:~$ man who<br />
6. Da quanto tempo la macchina è accesa? Quanti (solo il numero) utenti sono connessi?<br />
Esempio: vv@debian:~$ man who<br />
7. Imparare a “navigare” in un file <strong>di</strong> testo (già esistente!)<br />
Esempio1: vv@debian:~$ cat canto_primo<br />
Esempio2: vv@debian:~$ more canto_primo<br />
Esempio3: vv@debian:~$ less canto_primo<br />
Esempio4: vv@debian:~$ tail canto_primo<br />
Esempio5: vv@debian:~$ nano canto_primo (anche mo<strong>di</strong>fica, anche vi, anche joe, ecc)<br />
8. Creare nella propria home il file PRIMO.txt. Scrive all'interno il proprio nome e quin<strong>di</strong><br />
verificare il contenuto<br />
Esempio1: vv@debian:~$ echo Vincenzo Villa > PRIMO.txt<br />
Esempio2: vv@debian:~$ nano PRIMO.txt<br />
9. Copiare (cp) il file PRIMO.txt in PRIMO_1.txt (in pratica: duplicarlo)<br />
Spostare (mv) il file PRIMO.txt in PRIMO2.txt (in pratica: cambiargli nome)<br />
Esempio: vv@debian:~$ man cp (opzioni importanti <strong>di</strong> cp: R i)<br />
10. Quali file esistono nella propria home?<br />
Elencarli TUTTI!<br />
Elencarli in or<strong>di</strong>ne <strong>di</strong> data<br />
Elencarli in or<strong>di</strong>ne <strong>di</strong> <strong>di</strong>mensione.<br />
Elencarli in forma estesa<br />
Esempio: vv@debian:~$ man ls (opzioni importanti <strong>di</strong> ls: l a r R t S h)<br />
11. Creare una cartella MiaCartella e creare in essa il file SECONDO.txt, scrivendoci qualcosa<br />
<strong>di</strong> sensato. Nella stessa cartelle creare anche i file Secondo.txt e secondo.txt<br />
12. Chi potrà leggere il contenuto dei file che avete creato? Chi potrà mo<strong>di</strong>ficarli? Chi potrà<br />
eseguirli? Verificate che permessi avete sui file <strong>di</strong> un vostro compagno (dove è la sua home?)<br />
13. Provate a “rubare” uno dei file <strong>di</strong> un vostro compagno (con mv oppure cp?), salvandoli nella<br />
vostra home. Come cambiano i permessi?<br />
14. Vietare a chiunque l'accesso in lettura ai vostri file. Verificate che permessi avete ora voi sui
file e un vostro compagno sui suoi.<br />
15. Verificate appartenenza e permessi dei vari file contenuti nella cartelle esempio già presente<br />
nella root del file system. Copiate (con mv oppure cp?) tutti i file nella vostra home (uno per<br />
uno richiede una marea <strong>di</strong> tempo...)<br />
16. Navigare tra le cartelle (dopo ogni comando, ricostruire “dove si è arrivati”)<br />
Esempio1: vv@debian:~$ echo $PWD<br />
Esempio2: vv@debian:~$ cd /esempio<br />
Esempio3: vv@debian:/esempio$ cd<br />
Esempio4: vv@debian:~$ cd ..<br />
Esempio5: vv@debian:/home/vv$ cd ../../esempio/<strong>di</strong>r_<strong>di</strong>_esempio<br />
Esempio6: vv@debian:/esempio/<strong>di</strong>r_<strong>di</strong>_esempio$<br />
17. Cancellare un file (da riga <strong>di</strong> comando non esiste il cestino...)<br />
Esempio: vv@debian:~$ man rm (opzioni importanti <strong>di</strong> rm: i R)<br />
18. Cancellare un'intera cartella (inclusi i file in essa contenuti)<br />
19. Gli alias permettono <strong>di</strong> “inventare” velocemente un comando. Per esempio (cosa<br />
assolutamente inutile!) sarebbe carino quando si saluta il PC scrivendo ciao, sentirsi<br />
rispondere “Ciao anche a te, Vincenzo”. Ma questo comando non esiste (!), ma posso creare un<br />
alias<br />
vv@debian:~$ alias ciao="echo Ciao\ anche\ a\ te,\ Vincenzo"<br />
20. A volte i coman<strong>di</strong> sono scomo<strong>di</strong> (ls: sarebbe bello vedere <strong>di</strong>mensioni in kB e permessi senza<br />
dover aggiungere lh) o pericolosi (rm: prima <strong>di</strong> cancellare un file è utile chiedere conferma).<br />
Esempio 1: vv@debian:~$ alias ll=”ls h”<br />
Esempio 2: vv@debian:~$ alias cp=”cp i”<br />
(peccato che al termine della sessione questi alias sono persi. Ma c'è una soluzione...)<br />
21. <strong>La</strong> mia storia<br />
Esempio1: vv@debian:~$ history (navigabile con le frecce oppure usando il !)<br />
Eseguiamo il comando numero 86<br />
Esempio2: vv@debian:~$ !86<br />
Esempio3: vv@debian:~$ cat .<strong>bash</strong>_history<br />
22. [Opzionale] Scriviamoci una mail: (l'in<strong>di</strong>rizzo del destinatario deve essere reale!)<br />
vv@debian:~$ mail vincenzo.villa@issgreppi.it s "Mail <strong>di</strong> prova"<br />
(Il messaggio si termina con una linea contenente un solo punto)<br />
23. [Opzionale] Scriviamoci una mail (quasi) utile:<br />
vv@debian:~$ mail vv@issgreppi.it s "<strong>La</strong> mia storia" < .<strong>bash</strong>_history<br />
24. [Opzionale] Navighiamo: vv@debian:~$ lynx www.issgreppi.it (ma non va...)<br />
25. Mandare l'output <strong>di</strong> un programma in un file (ri<strong>di</strong>rezione dello stdout)<br />
vv@debian:~$ echo Questo è il contenuto > test.txt<br />
vv@debian:~$ echo Questo è una altro contenuto >> test.txt<br />
26. Alcuni coman<strong>di</strong> utili (versione semplice...)<br />
vv@debian:~$ sort canto_primo<br />
vv@debian:~$ sort canto_primo > canto_or<strong>di</strong>nato<br />
vv@debian:~$ grep ella canto_primo<br />
vv@debian:~$ ping google.com<br />
vv@debian:~$ wc canto_primo
27. Controllo dei processi<br />
vv@debian:~$ ps<br />
vv@debian:~$ ps ax<br />
vv@debian:~$ ps axu<br />
vv@debian:~$ top<br />
28. Controllare on processo inviando un SIGNAL come comando (attenzione all'ultima riga!!!)<br />
vv@debian:~$ ps<br />
PID TTY TIME CMD<br />
2230 pts/0 00:00:00 <strong>bash</strong><br />
2259 pts/0 00:00:00 ps<br />
vv@debian:~$ kill 9 2230<br />
29. Inviare un signal da tastiera: CTRL-C e CTRL-Z (cosa cambia?)<br />
vv@debian:~$ ping google.com<br />
30. Processi il background e in foreground<br />
vv@debian:~$ jobs<br />
vv@debian:~$ ping google.com > pingout<br />
vv@debian:~$ ping google.it > pingout2<br />
vv@debian:~$ bg %2<br />
vv@debian:~$ fg %2<br />
31. Interrompere un processo su un terminale <strong>di</strong>verso. Far partire un processo <strong>di</strong> ping, aprire una<br />
seconda shell con la vostra utenza e killare il processo dell'altra finestra. Verificare i vari<br />
passaggi con i coman<strong>di</strong> noti. Fate “esperimenti”<br />
Terminale 1 vv@debian:~$ ping google.com<br />
Terminale 2 vv@debian:~$ ps aux<br />
Terminale 2 vv@debian:~$ ps aux|grep ping<br />
Terminale 2 vv@debian:~$ ps aux|grep ping|grep vv<br />
Terminale 2 vv@debian:~$ man kill<br />
Terminale 2 vv@debian:~$ kill SIGSTOP 2682<br />
Terminale 2 vv@debian:~$ ps fu u vv<br />
Terminale 2 vv@debian:~$ kill SIGKILL 2586<br />
Terminale 2 vv@debian:~$ kill KILL 2586<br />
Terminale 2 vv@debian:~$ kill 9 2586<br />
32. Provare ad interrompere un processo non vostro...<br />
33. Creare un processo che viene eseguito in background (again!)<br />
vv@debian:~$ ping google.com & (come killarlo?)<br />
vv@debian:~$ ping google.com > risposte_<strong>di</strong>_google.com & (come killarlo?)<br />
34. Un processo in background utile: scaricare un file (la prime due versioni non funzionano...)<br />
vv@debian:~$ wget http://www.vincenzov.net/datasheet/pic18F14.pdf<br />
vv@debian:~$ http_proxy=http://proxy.intranet:3128<br />
vv@debian:~$ echo $http_proxy<br />
vv@debian:~$ wget http://www.vincenzov.net/datasheet/pic18F14.pdf<br />
vv@debian:~$ export http_proxy=http://proxy.intranet:3128<br />
vv@debian:~$ wget http://www.vincenzov.net/datasheet/pic18F14.pdf<br />
vv@debian:~$ wget http://www.vincenzov.net/datasheet/pic18F14.pdf &<br />
35. <strong>Usare</strong> la pipe: contare in quante righe <strong>di</strong> un file appare la parola xxx<br />
vv@debian:~$ grep xxx canto_primo|wc l<br />
36. <strong>Usare</strong> la pipe: mettere in or<strong>di</strong>ne alfabetico le righe che contengono la parola xxx<br />
vv@debian:~$ grep xxx canto_primo|sort
37. Altri due coman<strong>di</strong>:<br />
vv@debian:~$ head canto_primo<br />
vv@debian:~$ man head<br />
vv@debian:~$ head canto_primo n 1<br />
vv@debian:~$ tail canto_primo<br />
38. Due coman<strong>di</strong> su una sola linea<br />
vv@debian:~$ head canto_primo n 1; tail canto_primo n 1<br />
39. Memorizzare l'output <strong>di</strong> un comando in una variabile<br />
vv@debian:~$ Testa="head canto_primo n 1"<br />
vv@debian:~$ echo $Testa<br />
vv@debian:~$ Testa=$(head canto_primo n 1); echo $Testa<br />
40. Espansione <strong>di</strong> caratteri speciali (wildcard *+[]): vedere file <strong>bash</strong>_util_1_2on1.pdf<br />
• Elencare tutti i file il cui nome inizia per A nella cartella /esempi<br />
• Elencare tutti i file il cui nome inizia per a oppure A<br />
• Elencare tutti i file il cui nome è costituito da tre lettere<br />
• Elencare tutti i file il cui nome è costituito da almeno tre lettere<br />
• (altri esempi nel PDF citato)<br />
41. I punti seguenti utilizzano il file numeri già presente nella cartella /esempi che contiene...<br />
numeri casuali.<br />
• Visualizzare i permessi rwx del file<br />
• Visualizzare il contenuto<br />
• Mo<strong>di</strong>ficare il contenuto<br />
42. Copiare il file nella propria home e verificate i tre punti sopra evidenziati<br />
43. Or<strong>di</strong>nare il contenuto (in or<strong>di</strong>ne crescente e in or<strong>di</strong>ne decrescente)<br />
44. Or<strong>di</strong>nare il contenuto e mostrarlo una schermata alla volta<br />
45. Trovare il numero più grande e salvarlo nel file GRANDE<br />
46. Trovare il numero più piccolo e salvarlo nella variabile piccolo<br />
47. Esiste il numero 27128? In quale linea si trova?<br />
48. Esiste il numero 12? In quale linea si trova?<br />
49. Contare i numeri presenti nel file<br />
50. [quasi <strong>di</strong>fficile] Contare i numeri <strong>di</strong>versi presenti nel file<br />
51. [<strong>di</strong>fficile] Creare un file <strong>di</strong> 1000 numeri casuali