02.06.2013 Views

Usare bash - Esercizi - La paginina di VincenzoV

Usare bash - Esercizi - La paginina di VincenzoV

Usare bash - Esercizi - La paginina di VincenzoV

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!