Università di Roma Sapienza Sede di Latina 25 Febbraio 2014 Laboratorio di Internet I Il sistema operativo Linux Luca Chiaraviglio Ingegneria dell’Informazione Outline Breve storia di Linux Concetti base Comandi principali Script di shell Script AWK Come accedere alle postazioni di laboratorio Scaricamento di programmi aggiuntivi Linux: come e quando Figlio del sistema operativo UNIX UNIX: svilippato nel 1969 da AT&T e Bell Laboratories (principalmente Ken Thompson e Dennis Ritchie) nell’ambito di un progetto di ricerca per la simulazione dei movimenti di stelle e pianeti. Linux: svilippato nel 1991 da Linus Torvalds per funzionare sulle nuove macchine commerciali i386. Architettura di kernel monolitico. Il kernel è liberamente disponibile e modificabile. Ampiamente utilizzato in ambito accademico e industriale. Unix: una grande famiglia Login Si accede al sistema mediante una username e una password. Diversi utenti associati ad una stessa macchina Utente privilegiato: root. Consente di operare modifiche amministrative al sistema. Dopo il login, il sistema esegue un programma chiamato shell. Con interfaccia grafica, la shell è disponibile cliccando sull’icona del terminale. Ciascun programma in esecuzione è chiamato processo. Il prompt dei comandi Una volta aperto il terminale, l’utente può eseguire dei comandi. L’utente normale (non privilegiato) può eseguire solo un sottoinsieme di comandi. L’utente root (privilegiato) può eseguire l’intero set dei comandi. $ -> utente non privilegiato # -> utente privilegiato Funzionamento della shell Sono disponibili diversi tipi di shell, ma la più utilizzata in ambito Linux è la shell bash. Dalla shell è possible digitare il nome dei comandi assieme ai loro parametri, eseguirli, ed ottenere il risultato. I comandi generalmente stampano un output nella shell. Qualunque comando può essere interrotto prima della fine della sua esecuzione premendo Ctrl-c. Tipi di file File Ordinari, usati per documenti di testo, input file per i programmi e anche programmi eseguibili File di directory, ovvero contenitori di altri file. File speciali, utilizzati per la comunicazione fra diversi processi, e per la comunicazione fra il processo e I dispositivi di hardware. I file di directory possono contenere al loro interno altre directory, costituendo una gerarchia. Tipi di file e gerarchia Root directory (/) bin home File di cartelle dev Chiaraviglio A B File Speciali File Ordinari Path name & Directory Per individuare un file all’interno del file sistema si usa un pathname Un pathname è una lista di cartelle separate da “/” Esempio di pathname assoluto /home/chiaraviglio/B Esempio di pathname relativo /chiaraviglio/B Directory corrente: “.” Directory padre della directory corrente: “..” Navigazione nella gerarchia dei file Per conoscere il pathname assoluto della directory corrente pwd (present working directory) Per cambiare directory si usa il comando cd (change directory) cd -> per tornare alla directory home cd .. -> per tornare alla directory superiore cd / -> per andare alla directory root cd ./chiaraviglio -> sono nella directory home e voglio andare nella directory “chiaraviglio” cd /dev -> per andare nella directory /dev Visualizzazione del contenuto di una cartella Per visualizzare il contenuto di una cartella, si usa il comando ls Digitando “man ls” otteniamo la descrizione del comando e le relative opzioni. Alcune opzioni: ls –l -> stampa informazioni più dettagliate ls –a -> stampa anche I file nascosti Esempio di output ls –l serverone@serverone-PowerEdge-T320:~$ ls -l total 556 drwxr-xr-x 34 serverone serverone 4096 Feb drwxr-xr-x 3 serverone serverone 4096 Oct drwxr-xr-x 2 serverone serverone 4096 Oct drwx------ 107 serverone serverone 4096 Feb 4 8 8 4 15:03 17:56 17:03 13:51 Desktop Documents Downloads Dropbox Tree Directory di Linux Gestione dei file e directory Creazione di directory mkdir <nome_directory> Copia dei file di una directory cp <directory_sorgente> <directory_destinazione> Copia di file in una directory cp <file 1> <file 2> <directory di destinazione> Rimozione di una directory rmdir <directory> Rimozione di un file rm <file> Manipolazione dei file Stampare sulla shell il contenuto di un file cat <file> Stampare sulla shell il contenuto più file cat <file 1> <file 2> … <file N> Contare il numero di linee, parole e caratteri su un file: wc <file> (wc non vuol dire “bagno” ma “word count” J) Con i comandi “man cat” e “man wc” possiamo ottenere informazioni sulle possibili opzioni. Alcune opzioni interessanti: cat –n <file> -> stampa il file con le righe numerate wc –l <file> -> stampa solo il numero di righe Visualizzazione dei file Oltre al comando cat, è possibile visualizzare parte di un file. head -<numero di righe> <file> Stampa soltanto le prime <numero di righe> di <file> Esempio: head -5 /etc/passwd tail -<numero di righe> <file> Stampa soltanto le ultime <numero di righe> di <file> tail -10 /etc/passwd Sicurezza su Linux Semplice sistema di sicurezza basato su permessi. Sistema multi-utente: più utenti attivi sulla stessa macchina. Quattro classi di utente predefinite: - root: classe degli utenti privilegiati - Owner: utente che attualmente possiede il file - Group: classe di utenti che condividono l’accesso di gruppo al file - World: tutti gli utenti che non appartengono alle altre categorie. I permessi Ogni utente possiede dei permessi su un file. Possibili permessi: -r: lettura (Read) -w: scrittura (Write) -x: esecuzione (eXectution) Tramite il comando ‘ls –l <nome_del_file>’ otteniamo I permessi associati al file. Esempio: ls -l /etc/passwd -rw-r--r-- 1 root root 2245 Feb 5 14:26 /etc/passwd Tipo di file e permessi Il proprietario è “root” (terzo campo), e il gruppo associato al file è quello “root” (quarto campo). Modifica dei permessi Sovente occorre modificare i permessi di un file. Si utilizza il comando chmod chmod <nuovi_permessi> <file> I permessi si impostano secondo il seguente formato: <permessi proprietario> <permessi gruppo> <permessi mondo> r w x 0/1 0/1 0/1 r w x 0/1 0/1 0/1 r w x 0/1 0/1 0/1 Si associa uno “0” se il permesso è disabilitato, “1” se è abilitato Modifica dei permessi - Esempio Supponiamo di cambiare i permessi del file “prova.txt” - Permessi di lettura, scrittura, esecuzione per il proprietario del file - Permessi di lettura per il gruppo del file - Nessun permesso per gli altri utenti 1) Scriviamo i permessi in formato binario rwx rwx rwx 111 100 000 2) Passiamo da formato binario a decimale 7 4 0 3) Impostiamo i permessi con chmod chmod 740 prova.txt 4) Controlliamo i permessi impostati con “ls –l prova.txt” Espansione della shell La shell mette a disposizione dei caratteri speciali per effettuare operazioni su file. Tutti i file della directory corrente: * Esempio: cp /home/chiaraviglio/* /tmp Tutti i caratteri possibili: ? Esempio: ls /dev/tty? Redirezione dell’output Per default ogni comando stampa su schermo il risultato ottenuto. Si può redizionare l’output su un file con il comando > Esempio: cat /etc/passwd > /home/chiaraviglio/prova.txt Per redizionare l’output in coda ad un file si usa il comando >> Allo stesso modo si possono redizionare i messaggi di errore con il comando 2> Infine si possono redizionare l’output e I messaggi di errore con il comando: &> Funzioni di ricerca Per cercare una parola all’interno di un file si usa il comando grep <parola> <nome_file> Esempio: grep chiaraviglio /etc/passwd La parola può essere sostituita da un’espressione regolare. Per cercare un file si usa il comando find <pathnames> -<espressione> Dove <pathnames> è una lista di nomi di cartelle che viene ricercata ricorsivamente e <espressione> è una lista di espressioni che definiscono condizioni e azioni da eseguire su ciascun file. Esempi: find . -print find / -name passwd –print 2>/dev/null Funzioni di ordinamento Per ordinare un insieme di righe di un file dato un criterio si usa il comando: sort <opzioni> <file_di_input> Il file ordinato viene stampato su output. Esempio: sort /etc/passwd Principali opzioni: -f -> non fa distinzione fra maiuscole e minuscole -n -> tratta la chiave di ricerca come numerica invece che come stringa -r -> ordinamento inverso -t <s> -> usa il carattere <s> invece che lo spazio come separatore dei campi -k <c1>,<c2> -> usa i campi da <c1> a (<c2> - 1) come chiave di ricerca Funzioni di ordinamento - esempi sort /etc/passwd sort –t: -k3,4 /etc/passwd ATTENZIONE: mai fare la redirezione di un sort sullo stesso file: sort prova.txt > prova.txt Trasformazioni di caratteri Linux mette a disposizione un filtro che legge da standard input e produce una versione modificata su standard output. La versione modificata consiste nel modificare tutti i caratteri della stringa <str1> nei corrispettivi caratteri della stringa <str2> Si usa il seguente comando: tr <str1> <str2> Esempio: tr ABC abc tr : . tr ‘\t’ ‘ ‘ In alternativa, il comando tr può essere usato per rimuovere occorrenze multiple dei caratteri di <str1> tr –s <str1> Esempio: tr –s ‘ ‘ Selezionare le colonne di un file Spesso occorre selezionare una specifica colonna all’interno di un file. Si usa il comando: cut –d<delimitatore> -f<campi> <file_di_input> Dove <delimitatore> è il carattere che separa le colonne, <campi> sono le colonne che si vogliono selezionare e <file_di_input> è il file di ingresso. Esempio: cut –d: –f1 /etc/passwd cut –d: -f1,6 /etc/passwd cut –d: -f1-6 /etc/passwd Incollare assieme più file Spesso occorre incollare più file in modo che le colonne siano affianciate. Si usa il comando: paste <file1> <file2> Esempio: paste /etc/passwd /etc/passwd Altre funzioni Ottenere la data corrente date Rimuovere le linee duplicate da un file di input uniq <nome_del_file> Confrontare due file cmp <file1> <file2> Stampare una stringa echo <str> Opzioni -n -> Stampa senza andare a capo. Le pipe La shell mette a disposizione una funzionalità molto sfruttata: la pipe. Consiste nel concatenare una serie di comandi. L’output di un comando diventa l’input per il comando successivo. L’output finale produce il risultato dell’applicazione dei comandi. Esempio: ls /usr/bin | wc –w Mettere più comandi in pipe Grazie alla pipe, è possibile concatenare assieme i comandi che abbiamo visto fino ad ora. Esempio: cat /etc/passwd | cut –d: -f7 | sort | uniq cat /etc/passwd cut –d: -f7 sort uniq output su schermo Script di shell I comandi visti fino ad ora possono essere eseguiti in un file ed eseguiti. Estensione tipica .sh. Esempio: bash script.sh La shell mette a disposizione anche dei parametri di ingresso $1 = primo parametro $2 = secondo parametro e così via Esempio: bash script.sh param1 param2 Dentro il file script.sh primo_parametro=$1; secondo_parametro=$2; Script di shell – le variabili Dentro lo script è possibile definire le variabili (non è necessario definire il tipo). Esempi: numero=2; stringa=“sequenza_di_caratteri” vettore1=[1 2 3 4 5]; vettore2=“a b c d e f g”; risultato_comando= `cat /etc/passwd | grep “chiaraviglio”`; Per estrarre il valore di una variabile, si usa il comando $ Esempi echo $numero echo $stringa echo $risultato_comando file=“Prova.txt”; cat $file Script di shell – for Il ciclo for si può fare in due modi for((i=0; i<$MAX; i++)) do <azioni> done vett=[1 2 3 4 5]; for index in $vett do <azioni> done Nel secondo caso, il vettore può essere anche una sequenza di stringhe. Esempio: vett=“Roma Torino Milano Bari Palermo”; Script di shell – while & if while <condizione> do <azioni> done ATTENZIONE -> Per decrementare un contatore, si utlizza la seguente sintassi: count=$[$count-1]; if <condizione> then <azione true> else <azione false> fi Per l’if la parte else è opzionale. Script di shell – condizioni La <condizione> per l’if e il while si implementa con il comando test <espressione> Esempi di espressione <str1> = <str2> <str1> != <str2> <num1> -eq <num2> -> true se uguali <num1> -ne <num2> -> true se non uguali <num1> -lt <num2> -> true se minore di <num1> -gt <num2> -> true se più grande di <num1> -le <num2> -> true se minore o uguale di <num1> -ge <num2> -> true se maggiore o uguale di <exp1> -a <exp2> -> true se entrambe le espressioni sono true <exp1> -o <exp2> -> true se una delle espressioni è true AWK Linguaggio di scripting specificatamente progettato per elaborare file di testo e aggiungere funzionalità computazionali alla shell. Come si invoca: awk –f <file_di_script> <input_file1> <input_file2> La struttura tipica di un file di script è la seguente: BEGIN { <azioni da compiere prima di aprire il file> } { <azioni da compiere durante la lettura di <input_file_1> } END { <azioni da compiere dopo la lettura del file> } AWK – cicli for e while Questi costrutti sono del tutto analoghi a C e C++; Esempi for (i=0; i<50; i++) { <azione> } i=60; while(i<60) { <azione> i=i-1; } AWK – printf e modifica di singoli campi Per stampare su output il valore di una variabile si usa la funzione printf. Esempio; stringa=“blablablabla”; printf(“%s\n”, stringa); Per ogni riga del file di ingresso, è possibile ricavare il valore di ciascuna variabile. Esempio: { for(i=1; i<=NF; i++) { printf(“%s “, $i); } } AWK – operazioni su variabili Con awk è possibile maneggiare in maniera del tutto semplice le variabili e l’input di un file di ingresso. Esempio: Supponiamo di voler calcolare la somma degli elementi di ciascuna riga del seguente file “prova.txt”: 10 20 30 40 50 12345 awk –f script.awk prova.txt script.awk { tot_value=0; for(i=1; i<=NF; i++) { tot_value=tot_value+$i; } printf(“%d\n”, tot_value); } Accesso alle postazioni del laboratorio Sulle macchine del laboratorio è già installata una distribuzione di Linux (Ubuntu). Nome utente: labint Password: lablint In alternativa, è possibile installare una versione di Ubuntu su macchine Windows utilizzando il software Wubi (soluzione molto comoda). Installazione di programmi Per installare un nuovo programma su una distribuzione Ubuntu, solitamente si utilizzano i repository di pacchetti. Esempio: supponiamo di voler installare il programma ethtool. Per installare il programma, occorre innanzitutto aggiornare la lista dei repository, mediante il comando: sudo apt-get update Siccome l’installazione di un programma richiede privilegi di root, utilizziamo il comando sudo per ottenerli. Ci verrà richiesta la password (lablint per le macchine del laboratorio). A questo punto installiamo il programma con il comando: sudo apt-get install <nome_programma> (nel nostro esempio: sudo apt-get install ethtool) Fine Lezione!!
© Copyright 2024 Paperzz