Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Corso linux base

520 views

Published on

Corso base linux, percorre i concetti fondamentali per l'amministrazione di una distribuzione linux. In particolar modo, ci sofferma su: file system, partizionamento, shell, bash, kernel, distribuzioni, amministrazione utenti, sicurezza e cron. Sono presenti alcuni esercizi pratici di programmazione bash per una comprensione pratica dello strumento.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Corso linux base

  1. 1. Linux Corso Base Linux
  2. 2. Corso base linux Beniamino Ferrari 2 Nascita di un pinguino ● Linux è un sistema operativo Unix like, ideato da Linus Torvalds nel 1991 (allora studente dell’Università di Helsinki in Finlandia) e sviluppato grazie all’aiuto di migliaia di persone sparse per il mondo. ● Linux è una reale alternativa al mondo Microsoft e Unix, si ritrova milioni di utenti, migliaia di sviluppatori e un mercato in espansione. ● Oggi, è presente in sistemi integrati, è usato per il controllo di dispositivi robotizzati e ha volato a bordo dello shuttle, praticamente gira su oggetti elettronici di tutti i tipi, dai server agli smartphone, risultando l'OS in assoluto più soggetto a porting.
  3. 3. Corso base linux Beniamino Ferrari 3 Kernel (1) ● Per kernel si intende il cuore di un sistema operativo, il codice che gestisce le risorse presenti sul nostro sistema e le rende disponibili alle applicazioni. ● Il kernel si occupa principalmente di gestire: – le comunicazioni con l'hardware del sistema – i file system – la memoria – l'accesso a queste risorse da parte dei processi (le applicazioni che girano sul sistema)...
  4. 4. Corso base linux Beniamino Ferrari 4 Kernel (2) Monolitico: è un singolo file binario eseguibile in modalità "kernel" che contiene il gestore del processo, della memoria, del sistema e tutto il resto. Esempi di tali sistemi sono UNIX, Linux, MS-DOS. Microkernel E' un piccolo nucleo ridotto ai minimi termini che ha il compito di gestire le comunicazioni fra i gestori di sistema, processi separati eseguiti al di fuori dal kernel. Esempi di tali sistemi sono BE OS, GNU HURD, MINIX. Modulare: Per kernel Modulare si intende un' estensione del kernel monolitico, con la capacità di caricare/scaricare parti di codice (moduli) secondo necessità e richieste. Può esserlo Linux se lo si definisce in fase di configurazione pre-compilazione.
  5. 5. Corso base linux Beniamino Ferrari 5 Le distribuzioni Una Distribuzione (distro) è un confezionamento (packaging) di Linux, con procedure che rendono comoda e semplice l'installazione. ● Si consideri che il "Linux di Linus" non è veramente un OS ma il semplice kernel. A questo ogni distribuzione aggiunge tutto il software necessario per avere un sistema operativo completo di software applicativo e di servizio. ● Notare che essendo queste utility (bash, vi, gcc ecc.) scritte in tempi successivi rispetto agli equivalenti Unix, sono generalmente più evolute e migliori per l'inevitabile progresso della scienza informatica. ● Le distribuzioni differiscono per: - Numero e versioni dei programmi installabili; - Versione del kernel utilizzata e modalità di pre-installazione; - Procedura di installazione; - Organizzazione di file di configurazione e programmi; - Configurazioni predefinite del software installato.
  6. 6. Corso base linux Beniamino Ferrari 6 Quale distribuzione usare? ● In questo corso viene utilizzata Ubuntu perché è la più diffuse e semplici da usare. ● In genere, la migliore distribuzione da usare è quella che meglio si conosce e se si devono gestire diverse macchine è opportuno averle tutte con la stessa distribuzione e possibilmente versione, per facilità di aggiornamenti e manutenzione. ● Qualunque sia la distro adottata è sempre consigliabile installarne l'ultima versione disponibile (contiene pacchetti e kernel più recenti) e seguirne sul relativo sito la segnalazione di eventuali aggiornamenti, possibilmente aspettando alcune settimane prima di metterla in produzione, visto che ogni nuova distribuzione tende ad avere bug e falle nella sicurezza che vengono aggiornate dopo l'iniziale diffusione pubblica. ● Considerare che dopo l'installazione di una qualsiasi distribuzione, se si sta lavorando su un server che deve andare in produzione, sono auspicabili, consigliati e necessari una serie di interventi di post- installazione: - Aggiornamento di tutti i pacchetti (nuove versioni che aggiornano bug o buchi di quelle rilasciata con la versione originale); - Rimozione di tutti i servizi non utilizzati; - Eventuale aggiornamento del kernel; - Implementazione di script o configurazioni custom.
  7. 7. Corso base linux Beniamino Ferrari 7 Ubuntu (1) ● Nata esattamente 15 anni fa (20 ottobre 2002), Ubuntu ha come obiettivo principale portare Linux alle masse. Si tratta infatti di una distribuzione fortemente pensata per essere efficiente ma allo stesso tempo molto semplice da utilizzare. ● Di proprietà di Canonical, Ubuntu è basata sul ramo Debian Sid e da essa eredita la maggior parte dei pacchetti. Grazie alle patch, alle correzioni ed alle numerose ottimizzazioni è da ritenersi ormai una distribuzione matura.
  8. 8. Corso base linux Beniamino Ferrari 8 Ubuntu (2) ● Ubuntu è un sistema che si presta ad essere usato su workstation (Desktop), su server (Server) e su infrastrutture cloud (Cloud); proprio da questi ultimi due settori Canonical trae “il sostentamento” per mandare avanti la distribuzione.
  9. 9. Corso base linux Beniamino Ferrari 9 Ubuntu (3) ● La scelta del tipo di installazione Ubuntu: – Tipo di processore 64 bit o 32 bit – LTS (Long Term Support) o Versioni in sviluppo Le versioni non LTS sono supportate per nove mesi e garantiscono tutte le novità più recenti. Le versioni LTS (long-term support) offrono invece aggiornamenti per cinque anni: l'ideale per chi ha bisogno di maggiore stabilità. Le versioni in sviluppo mostrano sempre le ultime novità ma sono meno stabili. – Desktop o Server la versione desktop permette di ottenere un’istallazione più semplice comprensiva server grafico più adatta a un PC usato in un ufficio. L’installazione server permette di ottenere un’installazione più ottimizzata e mirata ad un uso server solitamente privo di server grafico.
  10. 10. Corso base linux Beniamino Ferrari 10 File System (1) ● Ogni memoria ha capacita finita di informazioni ● Queste informazioni sono memorizzate in byte ognuna di queste possiede un indirizzo numerico ● Possiamo semplificare che fisicamente le celle di memoria siano contenute in una griglia. Ogni archivio o file è composto da un insieme di queste celle
  11. 11. Corso base linux Beniamino Ferrari 11 File System (2) ● Solitamente i byte sono raggruppati in Settori ogni settore è un gruppo di bytes solitamente 512 byte ● Solitamente ogni computer accede ad ogni singolo byte usando una coppia (sector, in-sector) ● Ogni archivio occupa un insieme finito di Settori ● Ogni file viene memorizzato in settori "inutilizzati" e può essere letto da una posizione e sequenza di settori noti
  12. 12. Corso base linux Beniamino Ferrari 12 File System (3) ● Il file system indica – Quali sono i settori usati e quali sono liberi – Il settore iniziale di un file e la sequenza che lo compone – Nome del file e metadati ● Il file system può essere suddiviso in segmenti isolate dette Partizioni ● Solitamente, un file system opera in blocchi e non settori. I blocchi di sono gruppi di settori che ottimizzano l'indirizzamento di archiviazione. I file system moderni utilizzano generalmente i blocchi da 1 a 128 settori (512-65536 byte). I file vengono normalmente memorizzati all'inizio di un blocco e occupano un numero blocchi interi.
  13. 13. Corso base linux Beniamino Ferrari 13 File System (4) ● Il file system contiene anche i propri parametri – una dimensione del blocco – descrittori di file inode in linux – I nomi dei file – la gerarchia di directory – informazioni di sicurezza
  14. 14. Corso base linux Beniamino Ferrari 14 File system (5) ● il journaling è una tecnica utilizzata da molti file system moderni per preservare l'integrità dei dati da eventuali cadute di tensione. È una tecnologia derivata dal mondo dei Database; il journaling si basa infatti sul concetto di transazione: ogni scrittura su disco è interpretata dal file system come una transazione.
  15. 15. Corso base linux Beniamino Ferrari 15 File System (6)
  16. 16. Corso base linux Beniamino Ferrari 16 File System Linux (1) ● L’organizzazione del file system di Linux è gerarchica: tutto inizia da una singola directory, non esiste distinzione tra hardware e software (le periferiche hardware in Linux vengono rappresentate come dei file speciali) e qualsiasi parte del sistema è figlia della directory radice. In parole povere, tutto inizia dalla directory root e tutto termina con essa.
  17. 17. Corso base linux Beniamino Ferrari 17 File System Linux (2) / (directory root) ● |_ /home ● |_ /usr ● |_ /lib ● |_ /etc ● |_ /tmp ● |_ /var ● |_ /boot ● |_ /dev ● |_ /mnt ● |_ /proc ● |_ /opt
  18. 18. Corso base linux Beniamino Ferrari 18 File System Linux (3) ● La root directory ( / ) è la cartella delle cartelle: in / si trova praticamente tutto, navigare al suo interno significa avere accesso a qualsiasi parte del sistema operativo. ● La directory / è accessibile digitando cd / da terminale, oppure scrivendo / nella barra degli indirizzi del file manager
  19. 19. Corso base linux Beniamino Ferrari 19 File System Linux (4) ● Tramite comando stat /, otteniamo: File: `/' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 806h/2054d Inode: 2 Links: 22 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) ● Le prime due righe ci dicono che il file si chiama /, è “grande” 4096 bytes (come ogni directory) e occupa 8 blocchi. E’ presente sul device che si chiama 806h/2054d (il disco rigido), è collegata all’i-node 2 ed ha in sé altre 20 cartelle (il numero di link meno due, si escludono “.” e “..”).
  20. 20. Corso base linux Beniamino Ferrari 20 File System Linux (5) ● I permessi associati alla root sono d rwx r-x r-x: la d sta per directory, i primi tre rwx sono i permessi di lettura,scrittura ed esecuzione per l’utente proprietario, i successivi r-x sono i permessi di lettura ed esecuzione per il gruppo, e successivamente appaiono i permessi di lettura ed esecuzione per gli altri. Ciò ci dice che chiunque può leggere e scrivere su / (permessi di lettura ed esecuzione), ma soltanto il proprietario potrebbe eliminarla (permessi di scrittura). Il proprietario di / è l’utente con identificativo 0, quindi il root, e il gruppo proprietario è il gruppo con identificativo 0, il gruppo root. ● La directory / è alla base del sistema. Troviamo analogia in windows, a livello logico di C: .
  21. 21. Corso base linux Beniamino Ferrari 21 File System Linux (6) ● La directory /usr contiene file legati alle applicazioni e al kernel – in /usr/bin in genere sono presenti i file binari (le applicazioni); – in /usr/lib sono presenti i file di libreria per il funzionamento dei programmi installati; – in /usr/games sono generalmente presenti i file necessari al funzionamento dei giochi; – in /usr/include sono presenti gli header di libreria (per la compilazione delle applicazioni); – in /usr/share sono presenti i dati relativi alle varie applicazioni, tra cui le pagine di manuale – in /usr/sbin sono di solito presenti i programmi che permettono di agire sul sistema soltanto da root – in /usr/src possono essere presenti troveremo i sorgenti dei programmi (anche se, di norma, vi si trovano soltanto i sorgenti del kernel).
  22. 22. Corso base linux Beniamino Ferrari 22 File System Linux (7) ● Per il discorso /usr/local bisogna andare un po’ indietro nel tempo: tempo fa non esistevano i pacchetti autoinstallanti per Linux, tutte le installazioni andavano eseguite con un processo di compilazione manuale. Aggiornare un pacchetto spesso era piuttosto pericoloso perché si sarebbe potuti incorrere in errori: nella cartella /usr/local (quasi identica a /usr) venivano spostati i pacchetti che non dovevano essere aggiornati tramite rete per nessuna ragione, nonché tutto ciò che non poteva (né doveva) essere condiviso con altre macchine: praticamente qualsiasi cosa dovesse essere installata soltanto localmente e non aggiornata. ● Tutti gli eseguibili presenti in /usr/bin, /usr/local/bin, o /usr/sbin sono eseguibili da terminale senza specificare un percorso assoluto. La directory /usr (e tutte le sue sottodirectory) sono accessibili da tutti, ma modificabili soltanto dall’utente root.
  23. 23. Corso base linux Beniamino Ferrari 23 File System Linux (8) ● La directory /lib contiene una parte delle librerie di sistema. ● La directory /etc, invece, contiene tutte le impostazioni relative agli applicativi di sistema (ad esempio la configurazione del server X, la configurazione del desktop manager, la configurazione di rete e firewall, la configurazione del controllo energetico e via dicendo). ● La directory /tmp è quella atta a memorizzare tutti i file temporanei. Nella directory /var vengono scritte le informazioni generate dai programmi in esecuzione, come ad esempio informazioni su data di inizio e fine esecuzione, dump di crash, log e quant’altro (celeberrima è la directory /var/log). ● Nella directory /boot, invece, sono presenti tutti i file relativi all’avvio del sistema.
  24. 24. Corso base linux Beniamino Ferrari 24 File System Linux (9) ● La directory /dev contiene le periferiche hardware vengono viste come file speciali. E’ proprio nella directory /dev che si trovano i file relativi a tutte le periferiche hardware che potrebbero essere presenti sul sistema. In /dev troveremo file quali tty – i terminali grafici, cdrom – il lettore cd, hdX o sdX – gli hard disk, audio – la/le periferica/e audio, ram – i ramdisk, input – le periferiche quali tastiere e mouse
  25. 25. Corso base linux Beniamino Ferrari 25 File System Linux (10) ● La directory /proc Ogni processo in esecuzione in Linux occupa delle risorse di sistema (periferiche di input e output, zone di memoria, file aperti e quant’altro) e, per gestire tali processi, il sistema usa una sorta di file system che non prende spazio sulla memoria di massa ma è totalmente caricato in RAM: questo file system si materializza proprio nella directory /proc. Navigando nella cartella si scopriranno infatti tante directory quanti sono i processi correntemente in esecuzione sul sistema (alcuni nomi corrispondono ai nomi dei processi, altri possono essere pid). Per visualizzare le informazioni contenute in ogni sotto cartella ci sarà bisogno dei privilegi da super utente.
  26. 26. Corso base linux Beniamino Ferrari 26 Fil System Linux (11) ● La directory /opt in teoria serve per l’installazione dei “grandi programmi”, quelli che prevedono molti file a loro carico e che non hanno bisogno soltanto di un file binario (o pochi altri file sparsi per il sistema) per funzionare: per preservare un certo ordine, oltre che per evitare fastidiose e lunghe ricerche, si preferisce installare questi programmi di grandi dimensioni con tutti i loro file annessi e connessi, in una sottodirectory dedicata di /opt. ● La directory /opt viene anche utilizzata come cartella di installazione dei programmi non gestiti dal manager di pacchetti della nostra distribuzione o, almeno, di norma dovrebbe essere così. Anche /opt può essere vista un po’ come la directory C:Programmi.
  27. 27. Corso base linux Beniamino Ferrari 27 MBR (Master Boot Record) ● Il classico partizionamento usato nella maggior parte delle installazioni casalinghe è quello basato su MBR (Master Boot Record) e tabella delle partizioni MSDOS. ● Con questo sistema è possibile avere un massimo di 4 partizioni primarie oppure fino a 3 partizioni primarie, una partizione estesa e all’interno di quest’ultima infinite partizioni logiche. ● Partizioni primarie sono partizioni in cui è possibile eseguire il boot di un sistema operativo
  28. 28. Corso base linux Beniamino Ferrari 28 GPT ● GPT (GUID Partion Table) è un nuovo standard per la gestione delle partizioni che è nato per superare i limiti MBR ● GPT permette un numero illimitato di partizioni. Il numero varia da sistema operativo a sistema operativo. Windows permette circa 128 partizioni in disco GPT drive ● In un disco la tabella delle partizioni e le informazioni per che permettono il boot sono memorizzate in un unico file. Se queste informazioni vengono sovrascritte o sono corrotte il sistema è compromesso. GPT memorizza più copie di queste informazioni all’interno del disco, perciò è un sistema più robusto e saraà più facile recuperare queste informazioni. ● GPT inoltre memorizza cyclic redundancy check (CRC) per verificare che questi dati siano intatti. Se questi dati dovessero essere corrotti, GPT è in grado di rendersene conto e cercare di recuperare i dati danneggiati prelevandoli da una copia memorizzata in un’altra locazione del disco. MBR non ha modo di rendersene conto, se questo dovesse accadere il processo di boot potrebbe fallire e le partizioni potrebbero andare perse
  29. 29. Corso base linux Beniamino Ferrari 29 Partizionamento su Ubuntu ● Linux OS ha bisogno come minimo di una partizione per il sistema e dati dell’utente e in maniera opzionale una dedicata allo swap usata come estensione della RAM ● La dimensione dovrebbe dello swap dovrebbe essere almeno il doppio della dimensione della RAM. Per entrare nei dettagli seguire le specifiche della distribuzione ● Una sistema semplice per gestire le partizioni su linux è usare un cd live di Gparted ● Es. Uno schema di partizioni per un Desktop HDD da 2TB – Partizione primaria - 1Gb (1024Mb) of Free Space - bootstrap files, boot loaders e quello che può essere necessario per avviare più sistemi – Partizione Estesa ● 10Gb (10240Mb) – swap (10Gb doppio della ram di 4Gb system) ● 30Gb (30960Mb) - root / (per Ubuntu system files e applicationi) ● 100Gb (102400Mb) - /home (file di configurazione di sistema e applicativi, dati e altri file) ● 1850Gb liberi per altri sistemi operativi, file non dipendenti dal sistema operativo, virtual machine e altro..
  30. 30. Corso base linux Beniamino Ferrari 30 LVM (1) ● Immaginando un’installazione multiutente, se il disco viene completamente riempito l’unica soluzione è quella di acquistare un disco nuovo e travasare i dati in quello, reimpostando i permessi com’erano in origine con elevati costi di tempo, oppure spostare i dati altrove, soluzione ovviamente non facilmente applicabile in multiutenza. ● LVM (Logical Volume Manager) rivoluziona il concetto di organizzazione dello spazio fornendo un sistema di allocazione dinamica dello spazio.
  31. 31. Corso base linux Beniamino Ferrari 31 LVM (2)
  32. 32. Corso base linux Beniamino Ferrari 32 LVM (3) ● Ciascun disco fisico contiene al suo interno un certo numero di partizioni. Queste possono essere usate normalmente per montare un file system (come nel caso della sda1 che punta a /boot senza far parte di LVM) oppure possono essere usate in LVM. ● Ogni partizione che viene inserita in LVM prende il nome di volume fisico (PV = Physical Volume). ● Tutti o solo alcuni volumi fisici possono essere assegnati a un gruppo di volumi (VG = Volume group). Questo consente di sfruttare più dischi/partizioni unite in un’unica struttura dati. L’uso di hardware dedicato migliora notevolmente il funzionamento, consentendo l’utilizzo sincrono di tutti i dischi collegati.
  33. 33. Corso base linux Beniamino Ferrari 33 LVM (4) ● La somma di tutte le partizioni dedicate al gruppo di volumi definisce la dimensione del gruppo; in questo modo quando lo spazio si esaurirà basterà acquistare un nuovo disco, aggiungerlo al gruppo e la sua capienza verrà sommata allo spazio del gruppo. In questo modo si assicura la scalabilità anche su enormi dimensioni. ● Tutto lo spazio dedicato a un gruppo di volumi può essere suddiviso in uno o più volumi logici (LV = Logical Volume) che verranno usati dal sistema per costituire il file system. Utilizzando un file system che si preferisce
  34. 34. Corso base linux Beniamino Ferrari 34 LVM (5) ● Vantaggi dell’uso di LVM ● I vantaggi di utilizzare LVM rispetto un partizionamento classico sono numerosi: – Capacità totale espandibile senza spostamento dei dati – Allocazione dinamica dello spazio senza dover eseguire una nuova formattazione, inclusa l’aggiunta, rimozione e sostituzione dei dischi – Associazione di nomi a un gruppo di dispositivi, senza preoccuparsi di quali partizioni vengano usate per fornire un gruppo di volumi – Ripartizione (striping) dei dati su più dischi – Clonazione (mirroring) dei volumi – Creazione di istantanee (snapshot) di un volume logico per avere delle copie dei dati uguali al momento dell’istantanea
  35. 35. Corso base linux Beniamino Ferrari 35 Accesso al sistema (1) ● Linux è un sistema operativo multiutente, dove differenti utenti possono avere accesso al sistema avendo i propri dati, i propri programmi e impostazioni completamente separate da quelle di altri utenti oltre ad avere la possibilità di accedere alla risorse del sistema simultaneamente (sia direttamente tramite console (tastiera) sia da remoto via rete). ● L'operazione di autenticazione dell'utente, tramite nome utente e password, che permette l'accesso alle risorse del sistema è detto login. L'interfaccia testuale di gestione del sistema, a cui si accede tramite il login (in modalità testuale) è si chiama shell. ● Il login può essere eseguito in ambienti diversi, grafici o testuali da locale o da remoto ma hanno tutti lo stesso scopo: verificare che l'utente abbia i requisiti per accedere al sistema o ad un suo servizio e metterlo in condizione di interagire con la macchina. ● Il logout è esattamente l'opposto del login: chiude la shell aperta con il precedente login e tutti i successivi programmi lanciati dall'utente, e fa in modo che l'utente debba ripetere il login per accedere nuovamente alla linea di comando o meglio shell.
  36. 36. Corso base linux Beniamino Ferrari 36 Accesso al sistema (2) ● Comandi legati ai processi di login e logout ● su Esegue una shell come un'altro utente. Se si esegue come utente normale senza parametri viene richiesta la password per aprire una sheel come root. ● id Visualizza lo UserID (UID) e il GroupID (GID) dell'utente corrente.UID e GID sono identificativi numerici assegnati ad ogni utenti. ● pwd Mostra in quale directory ci si trova. ● lastlogVisualizza per ogni utente del sistema la data dell'ultimo log. ● last Visualizza tutti i login recenti sul sistema. ● shutdown Riavvia il sistema (è possibile specificare entro quanti secondi, se riavviare o stoppare). shutdown -r now Arresta e riavvia il sistema shutdown -h now Arresta e spegne il sistema.
  37. 37. Corso base linux Beniamino Ferrari 37 Gestione utenti (1) ● L'amministrazione degli utenti è una parte critica per il mantenimento di un sistema sicuro. ● Utenti poco esperti con privilegi di amministrazione spesso sono la causa della compromissione di sistemi. Pertanto, è importante capire come proteggere il proprio server tramite delle semplici ed efficaci tecniche di gestione degli account utente.
  38. 38. Corso base linux Beniamino Ferrari 38 Gestione utenti (2) ● L'utente root è l'amministratore del sistema con tutti i poteri che comporta questo ruolo, quindi è molto importante che l'accesso a root sia limitato solo al reale amministratore di sistema (sysadm). ● L'utente root ha poteri assoluti sul sistema: - Aggiungere, Eliminare e modificare account (altri utenti) - Installare e configurare servizi - Accesso completo (lettura e scrittura) di tutti i file presenti nel file system - Aggiungere e Modificare il file system - Distruggere tutto con un solo comando (e tante altre brutte cose, il potere di root sul sistema è assoluto).
  39. 39. Corso base linux Beniamino Ferrari 39 Gestione utenti (3) ● Gli sviluppatori di Ubuntu hanno deciso di disattivare in modo predefinito l'account di amministrazione (root) in tutte le installazioni di Ubuntu. Questo non significa che l'account root sia stato eliminato o che non sia più accessibile, è stata impostata una password che non corrisponde ad alcun possibile valore codificato, pertanto, l'accesso come root non è direttamente possibile. ● Gli utenti sono incoraggiati a utilizzare lo strumento sudo per svolgere i compiti di amministrazione di sistema. Lo strumento sudo permette a un utente autorizzato di elevare temporaneamente i propri privilegi usando la propria password, invece di dover conoscere direttamente la password di root. Questo semplice, ma efficace, metodo cerca di fornire responsabilità per tutte le azioni degli utenti e dà all'amministratore un controllo granulare sulle azioni che un utente può eseguire con tali privilegi.
  40. 40. Corso base linux Beniamino Ferrari 40 Gestione utenti (4) ● Se per qualche ragione è necessario abilitare l'account root, basta assegnargli semplicemente una password: sudo passwd ● In modo predefinito, l'utente iniziale creato dall'installazione di Ubuntu è un membro del gruppo «admin» ed è stato aggiunto al file /etc/sudoers come utente autorizzato all'utilizzo di sudo. Per autorizzare altri utenti ai pieni poteri amministrativi di root attraverso l'uso del comando sudo, è sufficiente aggiungerli al gruppo «admin».
  41. 41. Corso base linux Beniamino Ferrari 41 Politica delle password ● Una severa politica della gestione delle password è uno dei più importanti aspetti della sicurezza di un sistema. Le più frequenti violazioni di un sistema avvengono tramite attacchi di forza bruta con degli elenchi di parole che statisticamente possono comprende delle parole chiavi utilizzate come password. Se si vuole di offrire un qualsiasi tipo di accesso remoto utilizzando la propria password locale, assicurarsi che la complessità della stessa superi dei limiti minimi di adeguatezza, di impostare delle password con durate massime e controllare frequentemente i propri sistemi di autenticazione. ● Lunghezza minima di una password. Ubuntu richiede, in modo predefinito, una lunghezza minima per le password pari a 4 caratteri, oltre ad alcuni controlli di entropia. Questi valori sono impostati nel file /etc/pam.d/common-password alla riga: password required pam_unix.so nullok obscure min=4 max=8 md5 ● Per modificare la lunghezza minima delle password impostandola a 6 caratteri, modificare la variabile appropriata con «min=6». Ecco un esempio della modifica: password required pam_unix.so nullok obscure min=6 max=8 md5 ● La variabile max=8 non rappresenta la massima lunghezza di una password, ma indica semplicemente che le password con numero di caratteri maggiore a quello indicato non saranno sottoposte al controllo sulla complessità. Per maggiori informazioni sulla complessità delle password, fare riferimento all'applicazione libpam-cracklib.
  42. 42. Corso base linux Beniamino Ferrari 42 Scadenza delle password ● Quando vengono creati dei nuovi utenti è possibile impostare una durata minima e massima per le loro password, obbligando gli stessi a modificarla alla scadenza. Una volta che la password scade l’utente è bloccato e dovrà essere sbloccato da un’altro utente per poter accedere al sistema ● L’esempio mostra come è possibile impostare la data di scadenza in maniera esplicita -E 01/31/2019, l’età minima entro la quale non può essere cambiata -m 5 giorni, l’età massima di una password -M 90 giorni, il tempo di inattività dopo il quale la password scade (-l) e il tempo di preavviso prima della scadenza della password -W 14 giorni ● sudo chage -E 01/31/2019 -m 5 -M 90 -I 30 -W 14 username ● Per visualizzare facilmente lo stato attuale di un account utente, utilizzare il seguente comando: sudo chage -l username ● L'output seguente mostra informazioni interessanti sull'account dell'utente, in particolare che non ci sono politiche applicate: Ultimo cambio della password : gen 20, 2008 Scadenza della password : mai Inattività della password : mai Scadenza dell'account : mai Numero minimo di giorni tra i cambi di password : 0 Numero massimo di giorni tra i cambi di password : 99999 Giorni di preavviso prima della scadenza della password : 7 ● sudo usermod -U username per sbloccare un utente ● Passwd per cambiare password
  43. 43. Corso base linux Beniamino Ferrari 43 Shell ● Se il kernel è il nucleo, la shell è il guscio. ● Per shell si intende la l'interfaccia (testuale) tramite la quale l'utente può operare sul sistema. ● Il guscio esterno, accessibile all'umano, con cui è possibile interagire con le funzionalità offerte dal kernel, interprete e gestore dell'hardware. ● La shell è un programma che gestisce la comunicazione fra utente e sistema operativo interpretanto ed eseguendo i comandi dell'utente (la shell viene chiamata anche command interpreter). Può avere diversi utilizzi: ● Uso interattivo, il sistema attende i comandi digitati dall'utente, che possono redirezionare input ed output; ● Configurazione della propria sessione, con cui definire variabili e parametri che vengono utilizzati in ogni interazione dell'utente con la macchina; ● Programmazione utilizzando comandi di sistema e funzionalità della shell è possibile realizzare piccoli programmi (script shell) in grado di automatizzare operazioni e reagire ad eventi. ● Sulla gran parte delle distribuzioni Linux è preimpostata di default la shell bash. ● La sintassi dei comandi presenti in questo corso è basata sulla bash.
  44. 44. Corso base linux Beniamino Ferrari 44 Shell - Vim Editor di testi ● "Vim è un editor di testi avanzato che mira a fornire la potenza del de- facto editor UNIX ‘vi’, con maggiori caratteristiche e funzionalità." Vim non è un semplice editor di testo come nano o pico. Esso richiede un po' di pratica per imparare, e molto tempo per padroneggiarlo. ● Vim sta per Visual Improved ● Vim è ideato per ridurre al minimo il lavoro delle dita, e non ci sarà mai bisogno di usare il mouse. Questo può sembrare sciocco, ma una volta padroneggiato vim, se ne comprenderà il motivo. ● Es. – vim my_file.txt apre l’edior di testo – :set nu mostra i numeri di linea – premo i inizio a scrivere ‘mio testo’ – Esc :wq command mode, salvo ed esco
  45. 45. Corso base linux Beniamino Ferrari 45 Comandi VIM (1) ● Ci sono due modalità di lavoro: commad mode e insert mode ● Si passa dalla command mode alla insert mode premendo a/A/i/I/o/O ● Si passa dalla modalità command mode alla modalità insert mode premendo Esc Passare al modalità insert mode ● a aggiunge testo partendo dalla posizione corrente ● A aggiunge testo a partire dal fine linea corrente ● i inserisce testo a prima dalla posizione corrente ● I inserisce testo prima dal fine linea corrente ● o crea una nuova linea e parte a inserire testo ● O crea una nuova linea a partire dal fine linea precedente e inizia a inserire testo
  46. 46. Corso base linux Beniamino Ferrari 46 Comandi VIM (2) ● Comandi per il movimento del cursore ● h muove il cursore di un carattere a sinistra ● l muove il cursore di un carattere a destra ● k muove il cursore in un su di una linea ● j muove il cursore in giù di una linea ● nG o :n il cursore alla linea (n) line (es. 10G porta il cursore all linea 10) ● ^f muove il cursore in avanti di una pagina (^=CTRL) ● ^b muove il cursore in indietro di una pagina ● $ muove il cursore alla fine della linea corrente ● 0 (zero) muove il cursore all’inizio della linea corrente ● w muove il cursore avanti di una parola ● b muove il cursore indietro di una parola
  47. 47. Corso base linux Beniamino Ferrari 47 Comandi VIM (3) ● Comandi per l’eliminazione del testo ● x cancella il carattere corrente ● dw cancella dalla posizione corrente fino alla la fine parola ● db cancella dalla posizione corrente fino alla la all’inizio parola ● dd cancella l’intera linea ● d$ cancella dalla posizione corrente fino alla fine della linea ● d^ (d caret, non CTRL d) cancella dalla linea posizione corrente all’inizio della linea ● yy copia la linea corrente ● y$ copia dal possizione fino al termine della linea ● yw copia dalla posizione corrente fino alla fine della parola ● 5yy es. copia 5 linee
  48. 48. Corso base linux Beniamino Ferrari 48 Comandi VIM (4) ● Comandi usati per incollare testi (usati dopo l’eliminazione o la copia) ● p incolla prima del cursore ● P incolla dopo il cursore es 2p incolla 2 volte il testo copiato ● u ripristina l’ultima modifica (undo) Comandi per la manipolazione del file ● :w scrive il workspace nel file originale ● :w file scrive il workspace nel file specificato ● :e file inizia a lavorare nel file specificato ● :r file legge il workspace del file speciaficato ● :q! esci senza salvare ● :wq salva il file ed esci
  49. 49. Corso base linux Beniamino Ferrari 49 Comandi VIM (5) ● Altri comandi utili ● La maggior parte dei comandi può essere ripetuto n volte digitando il numero di volte prima del comando. Es. 10dd significa eliminare 10 linee ● . ripete l’ultimo comando ● :/ pattern ricerca dopo il cursore del pattern ● :? pattern ricerca prima del cursore del pattern n usato dopo i comandi precedenti può essere usato per cercare la prossima occorrenza. ● :g/pat1/s//pat2/g sostituisce ogni occorrenza del patttern1 pat1 con il pattern2 pat2 ● Es. :g/pippo/s//peppo/g trova e sostituisce “pippo” con “peppo” all’interno del file ● Es. :g/b/s// /g sostituisce tutte le “b” con uno spazio all’interno del file ● Es. :g/a/s///g replace “a” con stringa vuota
  50. 50. Corso base linux Beniamino Ferrari 50 Bash (1) ● Bash (acronimo per bourne again shell) è una shell del progetto GNU usata nei sistemi operativi Unix e specialmente in GNU/Linux, si tratta di un interprete di comandi che permette all'utente di comunicare col sistema operativo attraverso una serie di funzioni predefinite, o di eseguire programmi. ● Tecnicamente bash è un clone evoluto della shell standard di Unix (/bin/sh) chiamata anche Bourne Shell dal nome del suo autore originario Stephen Bourne e per questo il nome bash deriva dal gioco di parole (definito pessimo addirittura da Linus Torvalds) Bourne again shell che letteralmente significa un'altra shell Bourne, ma dove Bourne again può essere interpretato come rinata creando la definizione finale shell rinata.
  51. 51. Corso base linux Beniamino Ferrari 51 Bash (2) ● In pratica bash può essere considerata come un processore di comandi. Essa è infatti in grado di eseguire i comandi che le vengono passati o di interpretare un semplice linguaggio di programmazione che permette di combinare questi comandi tra di loro per svolgere compiti più complessi. Qualora dovesse presentarsi la necessità la shell mette a disposizione la possibilità di raccogliere in file delle serie di comandi creando così script eseguibili contenenti variabili, funzioni e controlli di flusso come nei più comuni linguaggi di programmazione. ● Una delle funzionalità maggiormente apprezzate è quella della redirezione dell'input e dell'output grazie al quale è possibile eseguire più programmi in cascata passando come input dell'uno l'output dell'altro.
  52. 52. Corso base linux Beniamino Ferrari 52 Bash (3) Variabili ● Le variabili in bash scripting non hanno bisogno di inizializzazione, l'assegnazione avviene utilizzando la sintassi: VAR=valore ● è molto importante che il valore sia scritto subito dopo l'uguale senza nessuno spazio. Il riferimento a tutte le variabili si fanno con anteponendo il carattere $ al nome della variabile: VAR=world echo hello $VAR!
  53. 53. Corso base linux Beniamino Ferrari 53 Bash(4) Variabili speciali ● $N dove N è un numero intero, corrisponde all'argomento N-esimo passato da terminale al programma ($0 è il nome del programma) ● $* stringa che contiene tutti gli argomenti passati da terminale al programma ● $# contiene il numero di argomenti passati da terminale al programma ($0 escluso) ● $@ Contiene la lista dei parametri passati allo script corrente. Ogni parametro viene opportunamente quotato e questo permette l'utilizzo di questa variabile nei cicli for per processare (ad esempio) una lista di nomi di file che possono contenere anche spazi. L'uso di questa variabile è quindi in genere consigliato rispetto a $* che ha la stessa funzione ma non quota i vari parametri. ● $? Contiene il valore di uscita dell'ultimo comando o funzione. Il comando ha successo se ritorna zero, qualsiasi altro valore indica invece un codice di errore. ● $$ contiene il PID del processo in esecuzione
  54. 54. Corso base linux Beniamino Ferrari 54 Bash (5) Creazione e utilizzo ● Creare un nuovo file: nel nome si può omettere l'estensione del file, tuttavia è consigliabile utilizzare l'estensione a seconda del linguaggio che verrà utilizzato (nome_file.sh per il linguaggio Bash). ● Inserire il testo al suo interno: di solito la prima riga presenta una stringa che riporta il percorso del file eseguibile relativo al linguaggio utilizzato. Qui alcuni esempi molto comuni: ● #!/bin/bash ● In questo modo viene automaticamente impostato il linguaggio corretto per interpretare il contenuto dei comandi. ● Permesso di esecuzione: a seconda del modo in cui vengono eseguiti, gli script per funzionare necessitano del permesso di esecuzione. È possibile impostarlo andando nelle proprietà del file (clic di destro sul file) oppure da terminale digitando: chmod u+x /percorso/file ● Esecuzione dello script: è possibile impostare il file manager affinché gli script vengano avviati tramite clic del mouse. Tuttavia è più prudente agire da terminale. ● Per l'esecuzione di un script può essere sufficiente un comando in cui viene specificato il nome del linguaggio utilizzato e il percorso del file. Ad esempio uno script bash può essere avviato nel seguente modo: bash /percorso/file ● Tuttavia nella pratica comune, grazie all'utilizzo della direttiva nella prima riga e ai permessi di esecuzione mostrati nei passaggi precedenti, il comando di avvio prende comunemente la seguente forma: ./percorso/file
  55. 55. Corso base linux Beniamino Ferrari 55 Bash esempio pratico ● Viene qui mostrato un esempio banale di script Bash. Lo script creato avrà il compito di creare un file e scrivere una frase al suo interno. ● Creare un file con il nome script.sh nella propria Home. Questo può essere fatto tramite il file manager o tramite un editor di testo oppure da terminale digitando: ● touch script.sh ● Inserire al suo interno il seguente testo: #!/bin/bash touch ciao_linux.txt echo "Ciao linux!" > ciao_linux.txt e quindi chiudere e salvare il file. ● Rendere eseguibile lo script. Lo si può fare accedendo ai permessi del file tramite clic di destro sull'icona oppure da terminale digitando: ● chmod u+x script.sh ● Utilizzare lo script digitando il comando: ● ./script.sh ● Se tutto è stato fatto in modo corretto si visualizzerà nella propria Home il file di testo ciao_mondo.txt che al suo interno conterrà la scritta: Ciao linux!
  56. 56. Corso base linux Beniamino Ferrari 56 Bash (6) ● Programmi utili ● expr: dato che non si possono eseguire semplici operazioni matematiche direttamente tramite l'interprete questo comando ci viene in aiuto ● grep: utile per mostrare solo alcune righe di un determinato output ● cut: serve per "tagliare" una stringa in tante sotto-stringhe in base ad un determinato separatore ● cat: serve per copiare, unire e manipolare il contenuto di uno più file
  57. 57. Corso base linux Beniamino Ferrari 57 Esempio Expr (1) $ var1='10' $ var2='20' ● # mostra 0 se due numeri sono uguali con operatore '='. $ expr $var1 = $var2 0 ● # mostra 1 quando arg1 è minore di arg2 $ expr $var1 < $var2 1 ● # mostra 1 quando arg1 è diverso da arg2 $ expr $var1 != $var2 1
  58. 58. Corso base linux Beniamino Ferrari 58 Esempio expr (2) ● # : partial match e restituisce il numero di caratteri uguali. $ expr linux : lin 3 ● # se il partial mach da esito negativo il risultato è 0 $ expr linux : linx 0
  59. 59. Corso base linux Beniamino Ferrari 59 Esempio grep (1) ● trova tutte le linee in cui viene trovato il pattern ‘sale’ grep "sale" spesa.txt ● Cerca ricorsivamente il pattern il pattern ‘pepe’ in tutti file di una determinata cartella e tutte le eventuali sub-directory e mostra le linee trovate grep -r "pepe" /home/listespesa/ ● Ora poniamo di voler cercare tra queste schede tutti i film di "Michelle Pfeiffer" ma supponiamo di non ricordare esattamente come si scrive "Pfeiffer". Cosa fare? Semplice... scriviamo solo la parte di parola di cui siamo certi e sostituiamo con dei puntini le lettere di cui non siamo sicuri, così: grep -r "pf..ffer" /home/videoteca/ ● Oppure tutte le linee che contengono il pattern ‘ffer’ grep -r "*ffer" /home/videoteca/
  60. 60. Corso base linux Beniamino Ferrari 60 Esempi di uso di cut ● Estrae il primo ed il sesto campo dal file /etc/passwd, che usa il carattere : come separatore di campo: cut -f 1,6 -d : /etc/passwd ● Estrae i primi dieci caratteri da ogni linea che giunge dallo standard input: cut -c -10 mio_file.txt ● Estrae i byte che vanno dal quinto al decimo, il sedicesimo e dal ventesimo in poi di ogni linea del file prova.txt: cut -b 5-10,16,20- mio_file.txt
  61. 61. Corso base linux Beniamino Ferrari 61 Esempi di cat ● Mostra il contenuto del file # cat /etc/passwd ● Mostrare il contenuto di più file cat mio_file1.txt mio_file2.txt ● Creare un file con cat con comando # cat > mio_file.txt digito testo questo è il mio file salvo il file CTRL+D ● Mostrare il contenuto del file con more o less # cat song.txt | more # cat song.txt | less ● Copia il contenuto di un file in un’altro # cat test.txt > out_text.txt ● Accoda il contenuto di un file in un’altro # cat test.txt >> out_text.txt ● Unisce più file in uno nella sequenza elencata cat test1.txt test2.txt > out_text.txt ● Riordina le linee dell’insieme di file elencati copiandole nel file di uscita cat test1.txt test2.txt test3.txt | sort > out_text.txt
  62. 62. Corso base linux Beniamino Ferrari 62 Pipes ● Dati due comandi A e B. Il ‘pipe’ viene utilizzato per passare l’output di A come input B. ● Il pipe viene spesso utilizzato su più comandi su una stessa linea. Il simbolo del pipe è una line verticale ‘|’, che viene posta tra due comandi. ● Mostra tutte tutti i file contenuti nella directory corrente che contengono ‘.txt’ ls -l|grep .txt ● Mostra il numero di processi il cui owner è root ps -ef|grep root|wc -l
  63. 63. Corso base linux Beniamino Ferrari 63 Manipolazione delle stringhe ● In Bash una stringa non è altro che una variabile, si indica dunque con ${nome} oppure con la forma abbreviata $nome. Il nome dentro le graffe può essere seguito da un modificatore che manipola la variabile, ad esempio: VAR="stringa-di-esempio" echo ${VAR#stringa-} elimina "stringa-" dall'inizio della variabile.
  64. 64. Corso base linux Beniamino Ferrari 64 Manipolazione delle stringhe (1) ● I modificatori sono molti, ma possono essere facilmente ricordati se si imparano i tre fondamentali: ● #: sottrae dall'inizio della stringa (minimale) ● %: sottrae dalla fine della stringa (minimale) ● / : sostituisce una sottostringa con un altra (solo la prima volta che viene incontrata) Per ottenere gli operatori massimali basta raddoppiare il simbolo: ● ##: sottrae dall'inizio della stringa (massimale) ● %%: sottrae dalla fine della stringa (massimale) ● //: sostituisce una sottostringa con un altra (tutte le volte che viene incontrata)
  65. 65. Corso base linux Beniamino Ferrari 65 Manipolazione delle stringhe (2) ● Esempio: Manipolazione delle stringhe VAR="questa.sarebbe.una.stringa.di.esempio" # Risultato: echo ${VAR#*.} # --> sarebbe.una.stringa.di.esempio echo ${VAR##*.} # --> esempio echo ${VAR%.*} # --> questa.sarebbe.una.stringa.di echo ${VAR%%.*} # --> questa echo ${VAR/st/ST} # --> queSTa.sarebbe.una.stringa.di.esempio echo ${VAR//st/ST} # --> queSTa.sarebbe.una.STringa.di.esempio
  66. 66. Corso base linux Beniamino Ferrari 66 Manipolazione delle stringhe (3) ● Alternativa a basename ● Quando in uno script ci si deve riferire al nome dello script stesso è usuale utilizzare il comando (esterno a bash) basename. Tuttavia, tramite i modificatori del paragrafo precedente, Bash stessa è in grado di fornire questa funzionalità. Basta usare l'espressione ${0##*/}. ● Esempio: usage () { echo "usage: ${0##*/} " exit 1 } ● Esempio: cambiare l'estensione ai file Rinomina tutti i file *.txt della directory corrente in *.log: for f in *.txt; do mv "$f" "${f/%txt/log}"; done
  67. 67. Corso base linux Beniamino Ferrari 67 Costrutto Se (1) ● Condizioni ● Le operazioni condizionali in bash possono essere eseguite in due modi, tramite il blocco if..then..else (simile al suo omonimo in c) o tramite il blocco case..in (simile allo switch). ● If [espr] Then ... Else ... fi ● NB: deve rimanere uno spazio prima e dopo le quadre
  68. 68. Corso base linux Beniamino Ferrari 68 Costrutto Se (2) ci sono molte espressioni possibili le più comuni sono: ● -f nomefile: ritorna vero se il file esiste ● -d directory: ritorna vero se la directory esiste ● str1 = str2: ritorna vero se la str1 è uguale alla str2 ● str1 != str2: ritorna vero se la str1 è diversa dalla str2 ● arg1 -eq arg2: confronto numerico, ritorna vero se arg1 è uguale a arg2 ● arg1 -ne arg2: confronto numerico, ritorna vero se arg1 è diverso a arg2 ● arg1 -lt arg2: confronto numerico, ritorna vero se arg1 è minore a arg2 (-le per maggiore o uguale) ● arg1 -gt arg2: confronto numerico, ritorna vero se arg1 è maggiore a arg2 (-ge per maggiore o uguale) ● espr1 -o espr2: concatena più condizioni, uguale all'or, ritorna vero o se l'espr1 o se l'espr2 ritorna vero ● espr1 -a espr2: concatena più condizioni, uguale all'and, ritorna vero se sia l'espr1 che l'espr2 ritornano vero
  69. 69. Corso base linux Beniamino Ferrari 69 Costrutto Se (3) ● Questo è un esempio d'uso del costrutto if: if [ -f prova.txt ] then echo Il file esiste! else echo Il file non esiste! fi ● Come potete notare inserire tra parentesi quadre l'espressione da testare è equivalente a scrivere: ● test -f prova.txt ● Attenzione: l'if bash è molto rigoroso dal punto di vista sintattico, dopo l'espressione da valutare dovete andare a capo e scrivere la parola then, notereta anche che non c'è bisogno di parentesi graffe, infatti il blocco viene terminato con la parola chiave fi.
  70. 70. Corso base linux Beniamino Ferrari 70 Case ● Case..in ● L'uso del blocco case è molto semplice: case $a in 1) echo sono un 1;; 2) echo sono un 2;; 3) echo sono un 3;; *) echo Non sono ne un 1 ne un 2 ne un 3;; esac ● viene valutata $a ed in base al valore contenuto vengono eseguite le operazioni associate.
  71. 71. Corso base linux Beniamino Ferrari 71 Cicli enumerativi (1) ● Al contrario di altri linguaggi, proprio per l'utilizzo che si fà del Bash Scripting, i cicli sono del tipo enumerativo, cioè eseguono le operazioni per tutti gli elementi presenti un una lista indicata, il più importante è sicuramente il ciclo for For..do La sua sintassi è: for [VAR] [in [LIST]] do [COMANDI] done
  72. 72. Corso base linux Beniamino Ferrari 72 Cicli enumerativi (2) ● Il parametro dopo in è proprio la lista di cui parlavo prima, se ad esempio abbiamo un ciclo del tipo: for i in 1 2 3 4 5 do echo sono $i Done ● il ciclo stamperà sullo standard output 1 2 3 4 5
  73. 73. Corso base linux Beniamino Ferrari 73 Cicli enumerativi (3) for i in `ls` do echo Sono il file $i done ● questo ciclo stamperà una lista di file, cioè il ciclo eseguirà per ogni singola parola dell'output di ls l'operazione di stampa a video.
  74. 74. Corso base linux Beniamino Ferrari 74 Cicli enumerativi (4) #!/bin/ksh # testato con ksh versione JM 93t+ 2010-03-05 for i in {1..100} do # inserisci qui un comando da ripetere echo $i done
  75. 75. Corso base linux Beniamino Ferrari 75 Cicli enumerativi (5) #!/bin/bash # testato con bash version 4.1.5 for ((i=1;i<=100;i++)); do # inserisci qui un comando da ripetere echo $i done
  76. 76. Corso base linux Beniamino Ferrari 76 Definizione di una funzione (1) ● Una funzione viene definita utilizzando l'istruzione “function” seguita dal nome identificativo della funzione stessa. Il nome della funzione deve essere differente dalle parole chiave del linguaggio Bash e da ogni altro nome di funzione e di variabile definito nell'ambito dello stesso script. Il “corpo” della funzione, le istruzioni del sottoprogramma che ne definiscono il comportamento, sono delimitate da una coppia di parentesi graffe
  77. 77. Corso base linux Beniamino Ferrari 77 Definizione di una funzione (2) function saluta { echo "Ciao!" } ● La funzione può essere dichiarata anche omettendo l'istruzione “function”, ma in tal caso il nome della funzione deve essere seguito da una coppia di parentesi tonde: saluta() { echo "Ciao!" }
  78. 78. Corso base linux Beniamino Ferrari 78 Definizione di una funzione (3) ● Le istruzioni presenti nel corpo di una funzione vengono eseguite solo quando la funzione viene richiamata. La funzione viene richiamata dallo script Bash in cui è stata definita, semplicemente utilizzandone il nome, come se si trattasse di un qualsiasi altro comando interno della shell: #!/bin/bash function saluta { echo -n "Ciao! " } for ((i=0; i<3; i++)); do saluta done
  79. 79. Corso base linux Beniamino Ferrari 79 Definizione di una funzione (4) ● Tutte le funzioni definite nell'ambito di uno script condividono fra loro le variabili, tranne le variabili che sono state definite nell'ambito di una funzione utilizzando l'istruzione “local”. Questa istruzione restringe lo scope, ossia la visibilità di una variabile, alla sola funzione in cui la variabile viene definita; le altre funzioni potranno definire variabili differenti con lo stesso nome, ma non potranno accedere al contenuto di una variabile locale di un'altra funzione.
  80. 80. Corso base linux Beniamino Ferrari 80 Definizione di una funzione (5) #!/bin/bash function pippo { local a a=2 echo "Pippo: a = $a" } function pluto { echo "Pluto: a = $a" a=3 echo "Pluto: a = $a" } a=1 echo "a = $a" pippo echo "a = $a" pluto echo "a = $a"
  81. 81. Corso base linux Beniamino Ferrari 81 Definizione di una funzione (5) ● ./varLocali.sh a = 1 Pippo: a = 2 a = 1 Pluto: a = 1 Pluto: a = 3 a = 3
  82. 82. Corso base linux Beniamino Ferrari 82 Passaggio dei parametri ad una funzione (1) ● È possibile invocare una funzione riportando uno o più parametri sulla stessa riga, come argomento della funzione stessa. La funzione riceve i parametri nelle variabili $1, $2, ecc. secondo l'ordine con cui i parametri stessi sono elencati dopo il nome della funzione. Come per i parametri passati sulla linea di comando allo shell script, anche nel caso dei parametri passati ad una funzione si può utilizzare l'istruzione “shift” per eliminare dalla coda dei parametri il primo elemento.
  83. 83. Corso base linux Beniamino Ferrari 83 Passaggio dei parametri ad una funzione (2) #!/bin/bash function saluta { while [ $1 ]; do echo "Ciao $1" shift done } saluta 'Marina' 'Chiara' 'Elena'
  84. 84. Corso base linux Beniamino Ferrari 84 Valore di ritorno di una funzione (1) ● La funzione può anche restituire un valore numerico intero utilizzando l'istruzione “return”. Il valore restituito da una funzione mediante l'istruzione return viene memorizzato nella variabile “$?”. Ad esempio nel seguente script si fa uso della funzione “somma” per calcolare la somma di tutti gli elementi passati come argomento della funzione.
  85. 85. Corso base linux Beniamino Ferrari 85 Valore di ritorno di una funzione (2) #!/bin/bash function somma { local s=0 while [ $1 ]; do ((s=s+$1)) shift done return $s } somma ${BASH_ARGV[*]} echo "Somma = $?" ● Richiamando lo script ./sommatoria 10 20 30 Somma = 60
  86. 86. Corso base linux Beniamino Ferrari 86 Terminale Remoto (1) ● Telnet è un semplice programma di terminale oltre ad essere il nome del protocollo che utilizza questo programma. ● Il suo uso primario è quello di aprire connessioni su macchine remote per permettere il login e quindi accedere alla shell come se fosse un'operazione eseguita in locale. ● Con telnet i pacchetti contenenti login e password passano in chiaro nella rete, con i relativi rischi in termini di sicurezza informatica (esistono sniffer specifici per sessioni telnet, che evidenziano le password senza nemmeno la fatica di andare ad analizzare i singoli pacchetti telnet). ● Un' alternativa valida per l'accesso ad host remoti via command-line è ssh, con il quale i dati trasferiti vengono criptati. ● Il protocollo SSH (ora giunto alla versione 2, sensibilmente più affidabile e sicura della versione 1) su Linux è generalmente implementato con il pacchetto openssh, che ha sia una componente client che una server.
  87. 87. Corso base linux Beniamino Ferrari 87 Terminale Remoto (2) ● telnet <ip o nome host> <port> Comando per connettersi da remoto attravero telnet ● Scrivendo semplicemente telnet senza specificare l'host remoto, si entra in modalità comandi, da cui è possibile aprire o chiudere connessioni o effettuare altre operazioni (digitare help per l'elenco dei comandi in ambiente telnet). ● Per chiudere una sessione telnet basta digitare logout (sulla macchina remota). ● Se per qualche motivo la connessione telnet risulta bloccata, è possibile premere CTRL + ] per entrare in modalità comandi e da li scrivere quit per chiudere la sessione telnet bloccata. Se si hanno più sessioni telnet in successione, scrivere send escape per passare dalla prima aperta all'ultima. ● ssh -l <nome_utente> <ip o nome host>Comando per connettersi da remoto attravero ssh
  88. 88. Corso base linux Beniamino Ferrari 88 Comandi di copia/modifica file e directory ● cp [opzioni] sorgente destinazione Copia di file o directory ● mv [opzioni] sorgente destinazione Sposta (rinomina) file o directory ● rm [opzioni] file Rimuovi file o directory ● ATTENZIONE: Sul Linux come su Unix, di default, non esiste un concetto analogo al cestino. ● I file cancellati sono (quasi) irrimedibilmente perduti. ● Esistono sistemi per recuperarli, ma sono piuttosto laboriosi e non sempre efficaci. ● Vedere il link segnalato nelle WEB RESOURCES per dettgli. ● ls [opzioni] [path]Elenca contenuto di una directory o file ● tree [opzioni] directory Elenca contenuto di una directory con visualizzazione ad albero ● cd directory Cambia directory corrente ● mkdir [opzioni] directory Crea una directory ● rmdir [opzioni] directory Elimina una directory
  89. 89. Corso base linux Beniamino Ferrari 89 Links (1) ● Le informazioni riguardanti un oggetto (file o directory) di un filesystem cono contenute in un inode, che viene identificato da un numero progressivo e descrive le caratteristiche base di un oggetto: permessi, data di modifica, tipo, posizione ecc. ● Il comando ln crea un link (alias) di un file o directory. ● Quando si opera sul link è come se si operasse direttamente sul file tranne quando si rimuove il link (non si cancella il file). ● Per default ln crea un hard link: di fatto un altro nome per un file esistente, originale e link sono indistinguibili, condividono lo stesso inode, non si possono fare hard link fra file system diversi e su directory. ● Con l'opzione -s (molto usata) si crea un soft link o symlink: sono un tipo speciale di file che si riferiscono ad un file (inode) diverso, il symlink può essere fatto su filesystem diversi (nfs, cdrom ecc.) e su file che non esistono. Rispetto ad un hard link, è più facile capire di quale file sono un link. ● L'uso di link è completamente trasparente e NON impatta sulle performance del sistema
  90. 90. Corso base linux Beniamino Ferrari 90 Links (2) ● ln [opzioni] nome_sorgente [nome_destinazione] ● Nella prima forma si crea un link da nome_sorgente a nome_destinazione dove nome_destinazione può essere omesso per fare un link alla directory corrente. ● ln [-s] nomefile [nomelink] Crea un link (simbolico con -s) a nomefile che si chiama nomelink (se omesso viene mantenuto nomefile)
  91. 91. Corso base linux Beniamino Ferrari 91 Comandi di gestione del File System (1) ● Prima di poter utilizzare un filesystem (es: CDROM, floppy, tape, condivisione di rete windows, directory nfs, partizione fat32 di un hard disk... ) questo deve essere formattato e montato in una subdir della root ( / ). ● Una volta montato il filesystem risulta accessibile a programmi e utenti in modo trasparente e diventa parte integrante dell'albero delle dir sotto / ● Dopo l'uso il filesystem può essere smontato (operazione necessaria per espellere un CDROM o un floppy). ● La directory su cui viene montato un filesystem può anche non essere vuota, ma nel momento in cui ci viene montato un file system, i dati ivi contenuti non sono più visibili fino a quando non si smonta il fs.
  92. 92. Corso base linux Beniamino Ferrari 92 Comandi di gestione del File System (2) ● mount -t [tipo fs] [opzioni] device dir Monta un dispositivo a blocchi su un file system ● umount [ opzioni ] device Smonta un dispositivo (necessario) ● df [opzioni][file] Verifica lo spazio libero su disco ● du [opzioni][file] Visualizza lo spazio occupato da file e directory ● fsck [opzioni] dispositivoVerifica l'integrità e ripara il Filesystem ● mkfs [opzioni] dispositivo Crea un Filesystem (formatta) ● Nel file /etc/fstab vengono configurate le informazioni sui vari file system (da montare al boot o no) preimpostati sul sistema, vengono definiti i mount point, il tipo di file system ed altre informazioni.
  93. 93. Corso base linux Beniamino Ferrari 93 Permessi (1) ● Linux è un sistema multiutente che offre la possibilità di associare permessi di azioni (lettura, scrittura , esecuzione) a singoli file e/o directory. Quando vengono applicati questi permessi ad un file o ad una directory, vengono applicati su tre livelli distinti: ● utente proprietario ● gruppo proprietario ● il resto degli utenti
  94. 94. Corso base linux Beniamino Ferrari 94 Permessi (2) ● permessi di azione vengono identificati nel seguente modo: – lettura definito dal flag r che tradotto in numero assume il valore 4 – scrittura definito dal flag w che tradotto in numero assume il valore 2 – esecuzione definito dal flag x che tradotto in numero assume il valore 1
  95. 95. Corso base linux Beniamino Ferrari 95 Permessi (3) ● Out di ls -l /etc/passwd : ● -rw-r--r-- 1 root root 77266 Dec 13 17:18 /etc/passwd ● L'output esteso di ls da varie informazioni su un file: – attributi (il primo carattere a sinistra); – permessi (i successivi 9 caratteri, raggruppati per 3, indicano rispettivamente i permessi per l'owner, per il gruppo e per gli altri utenti (in questo caso l'owner può scrivere e leggere, e gli altri possono solo leggere); – numero di file con lo stesso inode (in questo caso 1); – nome dell'owner (in questo caso root); – nome del gruppo (in questo caso root); – dimensioni in byte del file (in questo caso 77266); – data dell'ultima modifica (13 Dicembre dell'anno in corso alle 17:18); – nome del file ( /etc/passwd ).
  96. 96. Corso base linux Beniamino Ferrari 96 Permessi (4) ● chown [-R][utente] file Assegna un nuovo utente proprietario ● chgrp [-R][gruppo] file Assegna un nuovo gruppo proprietario ● chmod [-R] [modo] file Modifica i permessi sul file.
  97. 97. Corso base linux Beniamino Ferrari 97 Permessi (5) ● La sicurezza di un sistema Unix si fonda su un corretto uso dei permessi sui file. ● E' possibile cambiare il proprietario di un file sia specificando l'UID sia il nome del nuovo proprietario ● Utilizzando l'opzione -c in chown ,chgrp e chmod visualizza varie info riguardo al file che subisce il comando ● La sintassi con cui definire utenti e permessi con CHMOD è duplice: octal mode, si usano tre numeri, riferiti rispettivamente a owner, group e altri; symbolic mode, si usano le lettere r (read), w (write), x (execute) per assegnare i permessi a u (user), g (group) e o (others). ● I seguenti comandi eseguono tutti la stessa cosa, pur avendo diversa sintassi: chmod 755 nomdefile chmod u=rwx,go=rx nomefile.
  98. 98. Corso base linux Beniamino Ferrari 98 Cron ● Spesso capita di aver la necessità di far partire automaticamente una certa operazione ad un dato momento del giorno o ad un dato giorno della settimana (si pensi, ad esempio, ai processi automatici di backup o di archiviazione dei log). Per fare ciò su Windows utilizziamo le operazioni pianificate, su Linux utilizzeremo il crontab.
  99. 99. Corso base linux Beniamino Ferrari 99 Il crontab ● Grazie a crontab, infatti, possiamo impostare (o, più correttamente, schedulare) delle operazioni (job) sul nostro sistema Linux con una certa semplicità sfruttando il demone cron. ● Il "cron daemon", infatti, legge il file "crontab" ed segue le operazioni ivi impostate (cronjob) al momento specificato ed in modo del tutto automatico. ● Ogni utente del nostro O.S. Linux, ovviamente, può avere la propria versione di questo file; in questo modo, pertanto, possiamo avere diverse operazioni pianificate in esecuzione sullo stesso sistema.
  100. 100. Corso base linux Beniamino Ferrari 100 Il comando crontab (1) ● La sintassi del comando è la seguente: crontab -u username -opzione ● L'opzione -u consente di specificare il nome dell'utente che "possiede" il file crontab. Se l'opzione -u è omessa, il sistema presumerà che state operando sul vostro crontab personale. ● crontab -l Con l'opzione list possiamo vedere il contenuto attuale del nostro crontab ● crontab -r Specificando l'opzione remove andremo ad eliminare tutte le operazioni pianificate eventualmente impostate ● crontab -e Con edit possiamo inserire, modificare o eliminare operazioni pianificate dal nostro crontab. Così facendo si aprirà automaticamente il nostro editor di testo predefinito
  101. 101. Corso base linux Beniamino Ferrari 101 Il comando crontab (2) ● Ogni operazione (job) deve contenere necessariamente l'orario e la data di esecuzione e l'indicazione del comando che si desidera eseguire. Per inserire più operazioni è sufficiente andare a capo (ogni operazione occupa una riga). ● 30 13 * * * tar -cvpzf /backup_bferrari.tgz /home/bferrari/documenti Nell'operazione specificata qui sopra abbiamo detto al nostro demone cron di eseguire il backup dei documenti (specificandone il percorso assoluto) tutti i giorni al minuto 30 dell'ora 13, nella pausa pranzo.
  102. 102. Corso base linux Beniamino Ferrari 102 Il comando crontab (3) ● Prima dell'indicazione del comando da eseguire vanno inseriti nell'ordine (da sinistra verso destra): minuto, ora, giorno del mese, mese e giorno della settimana ● L'utilizzo dell'asterisco (*) significa "tutti" ● */10 * * * * mycmd Nel nostro esempio il valore dei minuti è stato impostato come */10; ciò significa che la nostra operazione sarà eseguita ogni 10 minuti. ● 00 15 1-4 * * mycmd Nel nostro esempio l'operazione verrà eseguita alle 15:00 nei primi quattro giorni di ogni mese. ● 30 18 1 3,6,9 * mycmd la virgola (,) la quale viene utilizzata per specificare un elenco. Nel nostro esempio l'operazione verrà eseguita alle 18:30 del primo giorno del mese di marzo (3), giugno (6) e settembre (9).
  103. 103. Corso base linux Beniamino Ferrari 103 Il comando crontab (4) ● E' possibile sostituire i primi cinque valori (cioè quelli che riguardano data e ora di esecuzione del comando) con delle stringhe "speciali" che assolvono al medesimo compito. Queste stringhe sono: ● @reboot - lancia il comando all'avvio del sistema ● @yearly - lancia il comando una volta all'anno; corrisponde a "0 0 1 1 *" ● @annually - (analogo @yearly) ● @monthly - lancia il comando una volta al mese; corrisponde a "0 0 1 * *" ● @weekly - lancia il comando una volta alla settimana; corrisponde a "0 0 * * 0" ● @daily - lancia il comando una volta al giorno; corrisponde a "0 0 * * *" ● @midnight - (analogo @daily) ● @hourly - lancia il comando una volta all'ora; corrisponde a "0 * * * *" ● Vediamo un esempio di operazione pianificata relativa ad un backup quotidiano: ● @daily tar -cvpzf /backup_bferrari.tgz /home/bferrari/documenti
  104. 104. Corso base linux Beniamino Ferrari 104 Es. script bash ● Es. script che sposta una lista di file nella directory come primo parametro movetodir dir file1 file2 .... file n :dir destinazione :lista file ● movetodir.sh /home/bferrari/spese spesa1.txt spesa2.txt spesan.txt #!/bin/bash counter=1 for ithFile in $@ do if [ $counter -eq 1 ] then counter=$((counter+1)) continue fi mv $ithFile $1 counter=$((counter+1)) done
  105. 105. Corso base linux Beniamino Ferrari 105 Es. Uso cron ● Backup della cartella documenti ogni 30 minuti – Script backup documenti vim backup.sh #!/bin/bash cd /home/bferrari date_min=$(date +%Y-%m-%dT%H.%M) dest=backup/$date_min.tgz err_suffix=_err.txt src=Documenti err=backup/$date_min$err_suffix tar -zcf $dest $src 2> $err byte_err=$(wc -c < $err) if [ $byte_err -eq 0 ] then rm $err else rm $dest fi – Schedulazione cron Ctron tab -e */30 * * * * /home/bferrari/backup.sh

×