Sistemi Operativi Salvatore Campagna Email: [email protected] Politecnico di Torino Dipartimento di Automatica e Informatica Orario Lezioni in aula ◦ Martedì 11.30 – 13.00 – Aula 14 Esercitazione in laboratorio ◦ Squadra B: Martedì 16.00 – 19.00 (16.00 – 17.30 assistito) - LABINF ◦ Squadra A: Mercoledì 16.00 – 19.00 (16.00 – 17.30 assistito) – LAIB 1D Squadre ◦ A: ABBATE – LECCA ◦ B: LEGORA - ZECCHI Info URL slide lezione e esercitazione ◦ http://www.cad.polito.it/~campagna/so/ Risorse cartacee e elettroniche ◦ http://tldp.org/LDP/abs/html/ ◦ http://tldp.org/LDP/abs/abs-guide.pdf ◦ “The Linux A-Z”, Phil Cornes ISBN 0132347091 ◦ Internet Programma del corso Parte I – Introduzione a Linux/UNIX Parte II – Introduzione alla shell e comandi base Parte III – Comandi avanzati Parte IV – Shell scripting Parte V – L’editor Vi(m) Introduzione Linux/UNIX è un sistema operativo multiutente Questo vuol dire che può essere utilizzato da più utenti contemporaneamente E’perciò necessaria una procedura di login per l’identificazione e l’accesso al sistema Introduzione Una sessione di lavoro inizia con l’invocazione, da parte dell’ambiente, del programma login L’utente accede al sistema fornendo nome utente e password Dopo l’accesso l’utente è identificato da uno user ID La sessione termina con i comandi logout o exit o con la combinazione Ctrl + D Introduzione Linux/UNIX è un sistema operativo multitasking Il multitasking rappresenta la capacità di un sistema (dare l’impressione per sistemi a core singolo) di eseguire più programmi contemporaneamente L’obiettivo è quello di massimizzare e ottimizzare l’utilizzo delle risorse Introduzione Il sistema operativo è organizzato su più livelli detti layer Applicazioni Shell Librerie Kernel Hardware Struttura dei comandi L’interazione tra l’utente e il sistema operativo avviene tramite comandi impartiti attraverso una shell La struttura generica di un comando è: comando [opzioni] [argomenti] Le opzioni modificano il comportamento del programma Gli argomenti forniscono i dati su cui il programma opera Struttura dei comandi Per proseguire un comando sulla riga successiva terminare la riga con “\” (backslash) Esempio: find test_dir –name “test.*” \ -print0 | xargs -0 | grep “OK” Per eseguire una serie di comandi usare “;” come separatore Esempio: ls -la; cd test_dir; touch file.txt Il file system Caratteristiche principali: Gerarchico (organizzazione ad albero) Formato da directory e file Non esistono estensione e versione L’accesso a file e directory è basato sui permessi Layout file system Il file system La directory radice è “/” (slash) La directory corrente è indicata con “.” La directory padre della directory corrente è indicata con “..” Il separatore di directory è “/” (slash) Ogni file o directory è raggiungibile attreverso un pathname assoluto o relativo Esempio (assoluto): /home/alice/work/file.txt Esempio (relativo): alice/work/file.txt Il file system Il nome di un file è una sequenza qualunque di caratteri No estensione e versione E’comune usare comunque estensioni “standard” Esempio: .c .o .so .ko .p .a Un file il cui nome comincia con “.” non viene normalemente visualizzato Nomi dei file Sconsigliato l’uso di caratteri “particolari” nei nomi di file ◦/ \ “ ' * ; ? [ ] ( ) ~ ◦! $ { } < > # @ & | E’possibile usare lo spazio ma attenzione Provare I seguenti comandi e verificare l’effetto: ◦ touch file prova.txt (crea due file) ◦ touch “file prova.txt” (crea un file) ◦ touch file\ prova2.txt (crea un file) I file – i-node Struttura dati che archivia: ◦ il proprietario e il gruppo di appartenenza ◦ dimensione del file e la sua locazione fisica; ◦ le informazioni temporali di modifica (mtime), ultimo accesso (atime) e di cambio di stato (ctime) ◦ i permessi d'accesso ◦ il numero di collegamenti fisici che referenziano l'inode I file – i-node Ogni i-node è identificato da un numero univoco (i-node id) per il dispositivo Ogni file è un collegamento fisico ad un inode (associazione nome collegamento fisico i-node id) Quando si accede a un file si recuperano le informazioni dal suo i-node Collegamenti tra file Un collegamento è un oggetto del file system che permette di fare riferimento ad un altro file del file system attraverso un nome diverso Il file originale è accessibile attraverso più file In UNIX/Linux esistono due tipi di collegamenti (link) ◦ Simbolici (soft link) ◦ Fisici (hard link) Collegamenti simbolici Si creano con il comando ln –s oppure con cp -s E’ un file contenente un percorso relativo o assoluto al file o directory a cui fa riferimento Se il file puntato viene rimosso il link simbolico rimane orfano Il link simbolico può fare riferimento anche ad un file su un altro file system Collegamenti fisici Si creano con il comando ln Associa un nome di file all’i-node Non può restare orfano La rimozione di un file avviene solo se tutti gli hard link sono rimossi I link e il file puntato dal link devono far parte dello stesso file system Permessi L’accesso a file e directory avviene attraverso l’assegnazione di permessi Permessi di base o attributi ◦ Lettura – read (r) ◦ Scrittura – write (w) ◦ Esecuzione – exec (x) Tre classi di utente ◦ Proprietario del file o directory – user (u) ◦ Gruppo a cui appartiene il proprietario - group(g) ◦ Gli altri - others (o) Permessi su directory Lettura – Read(r) – Possibilità di elencare il contenuto (ls) Scrittura – Write (w) – Possibilità di creare e/o cancellare file (touch, rm,…) Execuzione – Exec (x) – Possibilità di attreversare la directory (cd,…) Permessi Dato un file i permessi sono espressi d a una tripletta a cui corrisponde una valore binario e/o ottale 1 indica permesso settato, 0 permesso non settato Corrispondenza 1:1 con una stringa binaria o ottale Esempio: rwxr-xr-x = 111101101 = 755 Permssi per user, group e others Permessi speciali per eseguibili Setuid: esecuzione con i privilegi del proprietario del file Setgid: esecuzione con i permessi del gruppo Sticky: se settatto per una directory indica che i file possono essere cancellati e spostati solamente dagli utenti proprietari o dal proprietario della directory o da root Comandi principali Gestione file e directory Gestione permessi Visualizzazione di file Il comando man Il comando «più importante» su un sistema UNIX/Linux è man Ogni pagina man è un documento esplicativo di un comando Per accedere a una pagina man si usa il comando man [sezione] <comando> La sezione specifica la categoria di manuale al quale si vuole accedere Il comando man Sezioni: ◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ 1: comandi generali 2: chiamate di sistema 3: funzioni della libreria standard del C 4: file speciali e driver 5: formato di file e convenzioni 6: giochi e screensaver 7: miscellanea 8: amministrazione del sistema, comandi e demoni Copia e spostamento di file cp [opzioni] <src> <dest>: copia uno o più file da SRC a DEST (che può essere una directory) rm [opzioni] <file>: cancella il file mv [opzioni] <src> <dest>: sposta file e directory in altri file (rinomina) o directory Opzioni comuni -r (recursive): esegue ricorsivamente su tutti i file contenuti nelle sottodirectory -i (interactive): chiede conferma per ognuno dei file -f (force): esegue il comando senza chiedere conferma Gestione directory cd <directory>: cambia la directory corrente con quella indicata pwd: mostra la directory corrente mkdir <directory>: crea una nuova directory rmdir <directory>: cancella una directory vuota Gestione link ln <target> <alias>: crea un hard link (link fisico) <alias> a un file o directory <target> ln –s <target> <alias>: crea un soft link (link simbolico) <alias> a un file o directory <target> Cambiare i permessi chmod è il comando per cambiare i permessi di accesso ai file chmod <permessi> <file> I permessi possono essere specificati simbolicamente o numericamente La rappresentazione numerica sfrutta la corrispondenza permessi valore ottale Cambiare i permessi Esempio: permessi con rappresentazione numerica chmod 644 <file>:equivale ad un file con permessi rw-r--r-- = 110 100 100, per u, g, a La notazione simbolica usa i seguenti simboli per indicare l’utente: ◦ ◦ ◦ ◦ u: (user) proprietario g: (group) gruppo del proprietario o: (others) altri a: (all) tutti Cambiare i permessi I simboli per indicare il permesso r, w e x Modificatori: ◦ +: aggiunge permessi specificati alle classi selezionate; non rimuove permessi già concessi ma non specificati ◦ =: imposta i permessi specificati nelle classi selezionate; rimuove eventuali permessi già concessi ma non specificati ◦ -: rimuove i permessi specificati dalle classi selezionate Cambiare i permessi Esempi: ◦ chmod u+r: aggiunge il permesso di lettura al proprietario ◦ chmod u=wx: imposta i permessi di scrittura e esecuzione per il proprietario e rimuove tutti gli altri ◦ chmod a+x: aggiunge il permesso di esecuzione per tutti ◦ chmod o-x: toglie il permesso di esecuzione per gli altri Gestione permessi umask permette di impostare i permessi da negare di default quando un file viene creato ◦ umask <maschera> Il comando senza la maschera restituisce la maschera corrente Se la maschera è 022 allora i file vengono creati con permessi 755 = rwxr-xr-x Gestione permessi Per cambiare proprietario e/o gruppo del file usare il comando chown (change owner) ◦ chown [opzioni] utente [:gruppo] file ◦ chown [opzioni] uid [:gid] file -R opera ricorsivamente su tutti i file di una directory Comando ls ls (list segments) visualizza l’elenco di file in una directory e le informazioni riguardanti ciascun file Opzioni comuni: ◦ ◦ ◦ ◦ ◦ ◦ -a: visualizza file nascosti (che iniziano con “.”) -l: formato esteso -g: include il gruppo -t: ordina i file in ordine temporale -r: inverte l’ordine -R: opera ricorsivamente sulle sottodirectory Comando ls – Un esempio # ls -alg ~/tmp total 84 drwx------ 6 drwxr-xr-x 19 -rw-r--r-- 1 drwxr-x--- 2 -rw------- 1 -rw------- 1 drwxr-xr-x 2 -rw-r----- 1 -rw------- 1 -rw-r----- 1 -rw-r----- 1 -rw-r----- 1 drwx------ 2 maino maino maino maino maino maino maino maino maino maino maino maino maino staff staff staff staff staff staff staff staff staff staff staff staff staff 512 1024 1240 512 2416 332 512 27930 28077 70 1364 62 512 Sep Sep Jan May Jun Jun May Mar Mar Jun May May May 1 6 21 22 30 18 22 12 12 2 6 6 25 16:14 09:06 1992 14:08 15:24 15:29 14:08 23:19 22:52 18:00 14:20 14:21 14:36 . .. AA.readme examples gendata.c local.c man new.tex numer.tex prova.tex random.c random.h testprof Visualizzazione di file di testo Con un editor interattivo: vi, emacs, … cat <file1>[<file2>…]: (catenate): visualizza i file passati sulla riga di comando concatenandoli (in successione) head [-n <#righe>] <file>: visualizza le prime n righe di un file tail [-n <#righe>] <file>: visualizza le ultime n righe di un file Visualizzazione file di testo pg <file> more <file> less <file> Durante la visualizzazione ◦ ◦ ◦ ◦ ◦ ◦ spazio: prossima pagina return: (Invio): prossima riga b: pagina precedente /pattern: prossima occorrenza di pattern ?pattern: occorrenza precedente di pattern q: chiude l’editor Riepilogo comandi man mkdir, rmdir cp, mv, rm, ln pwd chmod, chown, umask ls cat, head, tail, pg, more, less