Transcript Introduzione a Linux
Introduzione a Linux Prof. L. Ilardi
Sistema di Elaborazione
Un sistema di elaborazione è composto da un insieme di componenti fisici (hardware) tra cui la CPU, la memoria centrale, le unità di memoria di massa, e un insieme di programmi (software) che usano l’hardware per svolgere dei compiti di interesse per gli utenti del sistema.
Nella maggior parte dei computer moderni, i programmi attivati dagli utenti (applicazioni) non accedono all’hardware direttamente, ma attraverso la mediazione di uno strato di software detto Sistema Operativo.
Cos’è un sistema operativo?
Un Sistema Operativo (S.O.) è un insieme di programmi che operano sull’hardware di un calcolatore con l’obiettivo di: semplificare lo sviluppo di programmi realizzare politiche di gestione delle risorse hardware Il Sistema Operativo si pone come interfaccia tra l’utente (o il software) e l’hardware, fornendone un’astrazione
Introduzione
Linux è un sistema operativo il cui Kernel è stato sviluppato da Linus Torvald nel 1991.
Esso si è sviluppato poi rapidamente perché il suo codice sorgente è stato immediatamente disponibile in rete reso
GNU/LINUX
In realtà si deve parlare di sistema GNU/LINUX.
GNU è il nome di un software completo UNIX Compatibile, che rientra nella definizione “Software libero”.
di Il progetto completo, GNU, tranne componente: il Kernel era un Quindi combinare Linux con il sistema GNU, ha prodotto
Software Libero
Il nucleo di LINUX è distribuito in accordo con la GNU General Public License (GPL), i cui termini sono stabiliti dalla Free Software Fondation Il sistema LINUX non è di
pubblico
tuttavia è LIBERO dominio,
Componenti del Sistema 1/2
Componenti del Sistema 2/2
Kernel è il responsabile del mantenimento di tutte le più importanti astrazioni del sistema operativo System Libraries definisce un set standard di funzioni, attraverso cui le applicazioni possono interagire con il kernel.
System Utilities sono programmi che compiono compiti specializzati di gestione, come quelli di configurazione.
Autenticazione
Sistema multi-utente, multi-processo In ingresso al sistema forniamo username e password Il file etc/passwd contiene tutte le informazioni relativa all’utente: account : password : numero_utente: numero_di_gruppo : commenti : cartella : programma_di_avvio Esempio: root:x:0:0:root:/root:/bin/bash La password non è però memorizzata in tale file Verificate la corrispondenza delle informazioni, esegue la shell associata alla username presentata
Esempio passwd
La Shell Bash
La Shell è un’interfaccia tra l’utente ed il sistema operativo. Il suo compito è leggere i comandi impostati dall’utente, interpretarli e richiedere al sistema l’esecuzione delle operazioni corrispondenti.
BASH è il nome della shell di Linux più diffusa.
nei primi sistemi, l’utilizzo della shell avveniva attraverso terminali alfanumerici (tipicamente connessi al computer tramite linee seriali o modem) detti TTY (da TeleTYpe) attualmente si accede alla shell attraverso programmi che “emulano” il funzionamento dei terminali in una
Come si presenta il prompt
il prompt di bash (personalizzabile dall’utente) contiene informazioni come il nome della macchina, la directory corrente e il nome dell’utente, seguite dal carattere “$” quando viene visualizzato il prompt, l’utente può digitare un comando per la shell; il comando viene terminato dal tasto di fine linea la shell interpreta ed esegue il comando (che può produrre la stampa di informazioni di output), dopodiché presenta di nuovo il prompt e si rimette in attesa
Bash
Sintassi comandi
La sintassi dei comandi di base è semplice: comando [argomento...] [modificatore...] il nome del comando indica l’operazione da effettuare gli argomenti (separati da spazi) specificano opzioni del comando o i dati su cui il comando deve agire (tipicamente, nomi dei file) i modificatori (introdotti da caratteri speciali) sono interpretati dalla shell e cambiano il modo in cui la shell esegue il comando
Per incominciare…
man [sezione] comando visualizza la documentazione del comando passato come argomento (se disponibile) durante la visualizzazione, si usa il tasto “spazio” per andare avanti, il tasto “b” per tornare indietro e il tasto “q” per uscire dal manuale il manuale è diviso in diverse sezioni, che contengono oltre ai comandi della shell, le API del sistema operativo, la libreria standard del C e altre informazioni; è possibile specificare una particolare sezione premettendo il suo numero al nome del
man
Comandi Shell
Muoversi nel File System Agire sui file e sulle directory Verificare e modificare permessi e protezioni sui file Ottenere informazioni sui processi
File System 1/2
Il file system, è il sistema di gestione delle informazioni memorizzate sulla memoria di massa Un file è essenzialmente un contenitore di dati omogenei.
In Linux il nome di un file non può iniziare con un numero e non può contenere caratteri particolari come punti interrogativi o asterischi Linux è un sistema case sensitive Esistono diversi tipi di file: i file comuni, le directory, i file a caratteri e i file a blocchi
File System 2/2
Un filesystem composto da directory può anche essere paragonato ad un albero, dove la directory principale o root o radice o /, rappresenta il tronco, mentre le sottodirectory rappresentano dell'albero.
i rami Partendo dalla directory radice si può arrivare ad un file qualsiasi all'interno di una qualsiasi directory, così
/ bin bash
Porzione File System Linux
vmlinuz ls
Comandi per muoversi nel file system
se un pathname comincia con ‘/’, il punto di partenza del percorso è la root directory, e il pathname si dice assoluto, altrimenti il percorso comincia dalla directory corrente, e il pathname si dice relativo; il comando che consente di cambiare directory corrente è: cd [pathname] se il pathname non è indicato, ritorna alla home il comando pwd stampa il pathname della directory corrente
Comandi per muoversi nel File System
Quando viene creata una nuova directory, vengono create in automatico due “sottodirectory speciali” chiamate . (punto) e .. (punto punto).
La prima fa riferimento alla directory corrente, la seconda alla directory padre.
mkdir e rmdir invece creano e distruggono una directory specificata con pathname Crea una nuova $ mkdir ./prova sottodirectory della directory corrente
Comando ls
mostra il contenuto di una directory.
La sintassi è: ls [opzioni...] [pathname...] se non viene specificato un pathname, mostra il contenuto della directory corrente se il pathname indica una directory, mostra il contenuto della directory specificata altrimenti mostra le informazioni relative al file indicato dal pathname normalmente viene mostrato solo il nome dei file; l’opzione -l visualizza informazioni più ́ dettagliate
Comandi sui file
Le operazioni di base sui file: cp copia uno o più file mv rinomina o sposta uno o più file rm cancella uno o più file; Nota bene: non è possibile annullare la cancellazione!
Le opzioni di questi comandi consentono (tra le altre cose) di effettuare le operazioni ricorsivamente su un intero albero di directory.
Il comando mv funziona anche con le directory; i comandi cp e rm funzionano con le directory se si
sintassi comandi
Comando cp nome_file1 nome_file2 cp nome_file1 directory [file2 cp –r directory_s directory_d file3…] cp –i nome_file1 nome_file2 mv … … rm nome_file rm –r directory effetto Copia il contenuto del file1, nel file2, sovrascrivendo il secondo Copia i file nella directory specificata dal pathname Copia la directory directory destinazione sorgente nella Copia avvertendo che si sovrappone il contenuto Ammette le stesse opzioni di copy. La differenza è che elimina la sorgente dopo la copia Rimuove il file Rimuove (Attenzione!!) in forma ricorsiva
Esempio Comandi
Caratteri Speciali 1/2
Se l’argomento di un comando contiene il carattere ?
o il carattere *, la shell espande l’argomento sostituendolo con la lista dei nomi dei file che “combaciano” con l’argomento, dove un nome di file viene considerato combaciante se: i caratteri non speciali dell’argomento corrispondono a caratteri identici del nome del file le occorrenze del carattere ?
nell’argomento corrispondono a un singolo carattere qualsiasi del nome del file le occorrenze del carattere * nell’argomento
Caratteri Speciali 2/2
Anche i caratteri [ e ] (parentesi quadre) e { e } (parentesi graffe) sono espansi facendo riferimento ai nomi dei file; in particolare: la sequenza [abc...] nell’argomento può combaciare con uno qualsiasi dei caratteri ‘abc...’ nel nome del file; è possibile indicare anche intervalli di caratteri con una notazione del tipo: [a-z] (tutti i caratteri da ‘a’ fino a ‘z’ inclusi) la sequenza [ˆabc...] nell’argomento può combaciare con un singolo carattere che non sia uguale a nessuno dei caratteri ‘abc...’; anche in questo caso è possibile
Esempi caratteri speciali
esempi ? e * * tutti i file della directory corrente ???
tutti i file della directory corrente con un nome di tre caratteri *.txt tutti i file il cui nome finisce in .txt
nella directory corrente *pp* tutti i file il cui nome Esempi [ e ] e { e } [aeiou]* tutti i file (della directory corrente) il cui nome comincia per vocale [ˆaeiou]* tutti i file il cui nome non comincia per vocale *[0-9][0-9]* tutti i file il cui nome contiene due cifre decimali consecutive
Esercizio
Data la porzione di file system a lato, utilizzando solo pathname assoluti, indicare i comandi necessari per visualizzare: I nomi dei file sotto la directory oro I nomi dei file presenti sotto la directory gabriele I nomi dei file presenti sotto la directory bin /
Esercizio
Data la stessa porzione di file system, supponendo di essere posizionati nella directory nora, scrivere i comandi necessari per: Copiare il file collane su un file novecento sotto la stessa directory oro, usando pathname assoluti Copiare il file bianco in biancoAntico, sotto la stessa directory gioielli, usando pathname relativi Copiare tutti i file presenti nella directory gioielli sotto la directory altro Provare a usare il comando copia con opzione –i, per
find
Il comando find consente di effettuare in modo semplice la visita di un albero di directory, selezionando i file che soddisfano alcune condizioni e applicando ad essi delle operazioni.
Sintassi: find pathname... [operazioni...] i pathname specificati indicano i punti di partenza della visita ricorsiva delle directory le operazioni sono usate sia per specificare i criteri di
Alcuni criteri di selezione per find
Nome criterio -name nome -iname nome -ctime n -mtime n -atime n -empty -size n -type c significato seleziona i file con nome che corrisponde all’argomento Come –nome, e non considera minuscolo o maiuscolo Seleziona i file creati n giorni fa Seleziona i file modificati n giorni fa Seleziona i file acceduti n giorni fa Seleziona i file vuoti Seleziona dimensione i file di una data seleziona i file e le directory il cui tipo è specificato dal carattere c (es: f indica un file normale, d una directory)
Alcune Azioni
Azione -print -fprint file -exec comando argomenti... ‘;’ -ok comando argomenti... ’;’ significato stampa pathname su standard del (azione di default) file output il selezionato la scrittura viene effettuata sul file specificato esegue per ciascun file selezionato il comando indicato; all’interno degli argomenti la stringa ’{}’ è sostituita dal pathname del file selezionato simile a -exec, ma chiede conferma all’utente prima di eseguire il comando
Alcuni esempi
Comando find . –iname ’*.pdf’ find . -atime +100 find . -iname ’*.avi’ -size -1024k find new -type f -atime +365 -exec mv ’{}’ old ’;’ find . -iname ’*.bak’ -ctime +9 -ok rm ’{}’ ’;’ Significato Stampa tutti i file pdf Stampa i file non usati da almeno 100 giorni Stampa i file di estensione avi, di dimensione inferiore ad 1 MB Sposta nella cartella old, tutti i file in new a cui non si accede da più di un anno rimuove tutti i file di estensione bak, creati più di 9 giorni fa chiedendo conferma
Esercizi
Scrivere nel file large.txt l’elenco dei file di piu di un megabyte.
Scrivere nel file modificati.txt, l’alenco dei file modificati da meno di 10 giorni Copiare tutti i file con estensione pdf e txt in una cartella mydocuments.
Protezione dei File 1/2
Ad ogni file e directory, il sistema associa una serie di informazioni tra cui: Nome del proprietario Nome del appartenenza gruppo Tipo di file di Dimensione Permessi di accesso al file I permessi di accesso al file sono descritti da tre triple di attributi di protezione.
Ogni tripla consiste di tre flag Accesso in lettura, flag “r” Accesso in scrittura, flag “w” Accesso in esecuzione, flag “x”
Protezione dei File 2/2
Mediante il comando “ls –l” si possono ottenere diverse informazioni sui file, tra cui le informazioni sul tipo di file e le protezioni in corrispondenza della prima colonna.
-rw-r--r- drwxrwx--x Il primo elemento indica il tipo di file: -: file normale d: directory c: file speciale a caratteri b: file speciale a blocchi
esempio
Tipo file File normale d Directory Proprietario rw Permesso di lettura e scrittura rwx Gruppo r- Permesso di sola lettura altri r- Permesso di sola lettura rwx --x Permesso di lettura del contenuto della directory e modifica. E di “attraversamento” Permesso di lettura del contenuto della directory e modifica. E di “attraversamento” Permesso di attraversamento della directory
Esempio permessi
root
Il termine root (o super utente o superuser) viene utilizzato nei sistemi Linux, per indicare il nome utente predefinito dell’amministratore di sistema.
L’utente root è colui in grado di compiere operazioni non consentite ad utenti standard Esso può lavorare su ogni risorsa senza essere limitato dai permessi Il super user ha poteri assoluti sul sistema. Il suo prompt standard è il carattere “#”.
Cambiare i permessi
I comandi per la modifica dei permessi, tipicamente in modalità super user, sono i seguenti: chown [-opzioni] nuovo_utente file chgrp [-opzioni] nuovo_gruppo file Ad un utente è permesso modificare il permesso dei file che gli appartengono tramite il comando: chmod [-opzioni] modifica_permessi file
Codici utente U G + O
Operatori Codici Permesso
R W X
Forma simbolica
Descrizione proprietario Gruppo Altri
Descrizione
Aggiunge permessi Rimuove permessi
Descrizione
Lettura Scrittura esecuzione
Forma ottale
La forma ottale è costituita da 3-4 cifre che possono assumere valore da 0 a 7. La prima è opzionale e non la trattiamo. Ogni cifra è interpretata come somma delle prime 3 potenze del 2( 20,21, 22): 0400 lettura consentita al proprietario 0200 scrittura consentita al proprietario 0100 esecuzione consentita al proprietario 0040 lettura consentita al gruppo 0020 scrittura consentita al gruppo
comando chmod o-rw nome_file chmod a+rw nome_file chmod g+w nome_file chmod 0700 nome_file chmod 0764 nome_file
Esempi comandi
esito Elimina i permessi di lettura e scrittura per gli utenti non appartenenti al gruppo dell’utente proprietario Aggiunge il permesso di lettura e scrittura a tutti Aggiunge il permesso di scrittura al gruppo Permesso di scrittura, lettura ed esecuzione per il proprietario e alcun permesso per il gruppo e gli altri Permesso di esecuzione, lettura e scrittura al proprietario, lettura e scrittura al gruppo, sola lettura ai rimanenti
Esercizi per cambio dei permessi
Dare al file risultati di nostra proprietà, presente sotto la directory corrente, i permessi di: 1.
Solo lettura da parte di qualunque utente; 2.
Lettura, scrittura, esecuzione per noi e nulla per gli altri 3.
Scrittura ed esecuzione per noi e solo esecuzione per gli atri 4.
Lettura, scrittura ed esecuzione per noi e per il nostro gruppo e solo lettura per gli altri Il tutto usando sia la notazione simbolica che la
Standard input, standard output,
standard error
I processi lanciati dalla shell hanno sempre almeno tre stream aperti: lo standard input, normalmente collegato alla tastiera, da cui vengono effettuate operazioni come la scanf del C lo standard output, normalmente collegato al terminale, su cui vengono effettuate operazioni come la printf del C lo standard error, anch’esso associato al terminale, su cui di solito i comandi effettuano la scrittura dei messaggi di errore La shell consente, attraverso modificatori sulla linea di
Per ridirigere lo standard input e standard output
Sintassi comando < pathname quando il processo effettua un’operazione di input, il dato viene letto dal file specificato in luogo della tastiera il file deve essere un file di testo contenente la sequenza di caratteri che l’utente avrebbe digitato da tastiera Sintassi
Thread e Processi
Un processo è un programma in esecuzione che utilizza le risorse ad esso allocate.
Un thread (detto processo leggero) è un flusso di esecuzione che condivide delle risorse con altri thread.
I processi rappresentano l’esecuzione di un unico programma, mentre i thread rappresentano contesti di esecuzione distinti e concorrenti all’interno di un singolo processo che esegue un singolo programma Il kernel di Linux non distingue tra thread e processi.
Un thread è un particolare tipo di processo che
Gestione dei processi in Linux
Identità dei processi: Identificatore del processo (PID): identificatore univoco del processo per segnalarlo al SO Credenziali: Identificatore di utente o di gruppo, che ne determinano i diritti di accesso al sistema ed ai file Personalità: può modificare la semantica di alcune chiamate di sistema Ambiente di un processo: è ereditato dal padre e consiste di 2 vettori, il primo degli argomenti, il secondo d’ambiente
Comandi per informazioni sui processi
Acuni comandi per il processo sono: ps: elenca i processi in esecuzione pstree: Elenca i processi in esecuzione in modo strutturato top: Mostra l’utilizzo delle risorse da parte dei processi ad intervalli regolari id: da informazioni su UID e GID ……
Comando ps
Il comando ps stampa l’elenco dei processi attivi.
Sintassi ps [opzioni...] Per default, il comando visualizza solo i processi dell’utente corrente che sono stati creati da un terminale.
Le visualizzazione: seguenti opzioni cambiano la l elenco composto da più elementi informativi u viene indicato il particolare utente a cui appartiene il processo
Comando ps ps a l ps a r
Esempi ps
Effetto Elenca i processi appartenenti all’utente che da il comando Elenca tutti i processi fornendo un dettaglio più ampio Elenca tutti i processi in funzione esclusi quelli in pausa
Processo in background
Se un comando è seguito dal carattere speciale &, il processo che viene creato diventa un processo in background (lett. “sullo sfondo”). La shell non attende la terminazione del processo prima di passare al comando successivo, e i caratteri che l’utente digita non vengono passati come standard input al processo.
I processi in background sono normalmente utilizzati per operazioni lunghe, di cui l’utente non vuole aspettare la terminazione. Inoltre, mentre i processi in foreground sono normalmente terminati quando l’utente chiude la shell, i processi in background continuano la loro esecuzione.
Il comando kill
Il comando kill consente l’invio di un segnale a un processo. Il segnale può essere usato, tra le altre cose, per forzare la terminazione del processo.
Sintassi -TERM -KILL -STOP significato Terminazione del processo Terminazione forzata del processo Sospensione del processo
I comandi fg e gb
Un processo può essere sospeso inviandogli il segnale STOP, oppure (se è in foreground) digitando CTRL-Z.
Un processo sospeso può essere ripreso in background usando il comando: bg [pid] oppure può essere ripreso in foreground usando il comando: fg [pid] In entrambi i casi, se il PID non è specificato, si fa
Esempio
Provare i comandi alla slide precedente per poi discuterne in classe. Ad esempio si consideri il seguente comando, si spieghi cosa compie e quindi si uccida il processo associato: find / > elenco.txt &