Esercitazione Linux
Esercitazione Linux
Esercitazione Linux
A.A. 2009/10
Esercitazione di laboratorio -
Sistemi di Elaborazione dell'Informazione
Introduzione a Linux
Francesco Spegni
[email protected]
Ricevimento su appuntamento
Gianluca Capuzzi
[email protected]
Ricevimento su appuntamento
Linux
• Stabilità
• Portabilità
• Sicurezza
■ Basata su Debian
■ Kernel 2.6
Esercitazione di laboratorio -
Sistemi di Elaborazione dell'Informazione
Shell e comandi
Shell (interprete dei comandi)
■ whoami
Visualizza il nome dell’utente che sta utilizzando la shell
corrente
■ pwd
Visualizza il percorso completo della directory in cui ci si trova
(pwd = print working directory)
ls
■ Elenca i file contenuti in una directory (list directory).
ls [opzioni...] [file...]
■ Esempi
• $ ls
Elenca il contenuto della directory corrente.
• $ ls *.doc
Elenca tutti i file che terminano con il suffisso .doc che si trovano
nella directory corrente.
• $ ls –help oppure $ls -h
Mostra una guida sull'utilizzo del comando
Carattery jolly - digressione
■ Riprendiamo l'esempio precedente:
• $ ls *.doc
$ ls pippo.doc pluto.doc
■ Corollario:
• Le regole di sostituzione dei caratteri jolly sono uniche per
tutti i programmi Linux
■ Domanda:
• Quanti argomenti riceve il comando ls ?
Alcune opzioni di ls
• -l : fornisce un elenco con più dettagli sui files
• $ ls /bin
visualizza il contenuto della directory bin. I nomi rappresentano
file di qualunque tipo (sottodirectory incluse).
• $ ls -l /bin
Si è ottenuto un elenco più dettagliato che, in particolare,
mostra i tipi dei files, i permessi e le appartenenze.
Non vengono comunque visualizzati i files nascosti.
• $ ls -la /bin
Si è ottenuto un elenco dettagliato che mostra anche i files
nascosti.
Operare come amministratore
• $ ls /root
ls: cannot open directory /root: Permission
denied
viene segnalato un errore perchè occorrono privilegi da
amministratore per leggere in contenuto di /root
• $ sudo ls /root
[sudo] password for ubuntu:
file1 file2 file3
Tramite il comando sudo scopriamo che in /root sono
contenuti i file file1 file2 file3
cd
■ Cambia la directory corrente (change directory).
cd [directory]
■ Esempi
• $ cd ..
Cambia la directory corrente, spostandosi nella directory
superiore.
• $ cd ciao
Cambia la directory corrente, spostandosi nella directory ciao
che discende da quella corrente.
Altri Esempi
• $ cd ~
Cambia la directory corrente, spostandosi nella directory
personale (home) dell'utente.
• $ cd ~daniele
Cambia la directory corrente, spostandosi nella directory
personale dell'utente daniele.
• $ cd /tmp
Cambia la directory corrente, facendola diventare /tmp.
• $ cd /bin
$ pwd
Cosa stampa?
mkdir
■ Crea una directory (make directory).
■ Esempi
• $ mkdir cloro
Crea la directory cloro, come discendente di quella corrente.
• $ mkdir /sodio/cloro
Crea la directory cloro, come discendente di /sodio.
• $ mkdir ~/cloro
Crea la directory cloro, come discendente di quella dell'utente.
cp (1/2)
■ Copia uno o più file (incluse le directory) in un'unica
destinazione (copy file).
$ mkdir ./pluto
$ cp pippo pluto
$ ls ./pluto
• Es.
$ mkdir ./pluto2
$ cp topolino pippo pluto2
$ ls ./pluto2
Opzioni ed esempi
• -f : sovrascrive forzatamente i file di destinazione.
■ Esempi
• $ cp -r /test/* ~/prova
Copia il contenuto della directory /test in ~/prova copiando
anche eventuali sottodirectory poste in /test.
• $ cp -r /test ~/prova
Copia la directory /test in ~/prova, copiando anche eventuali
sottodirectories contenute in /test.
rm
■ Rimuove i file indicati come argomento.
rm [opzioni...] nome...
■ Esempi
• $ rm prova
Elimina il file prova.
• $ rm ./-r
Elimina il file -r che inizia il suo nome con un trattino.
• $ rm -r ~/varie
Elimina la directory varie insieme a tutte le sue sottodirectory.
rmdir
■ Rimuove la directory specificata (remove directory). Se si tenta
di eliminare una directory non vuota, con rmdir si ottiene un
segnale di errore.
■ Esempi
•$ rmdir carbonio
rmdir: carbonio: Directory not empty
• $ rm -r carbonio
Elimina la directory carbonio e tutto ciò che da essa discende.
mv
■ Sposta (rinomina) i file e le directory (move file).
• $ mv prova1 prova2
Cambia il nome del file (o della directory) prova1 in prova2.
Attenzione: se prova2 esiste già ed una directory cosa
succede?
E se prova2 esiste già ed è un file?
• $ mv * /tmp
Sposta, all'interno di /tmp, tutti i file e le directory che si trovano
nella directory corrente.
touch
■ Crea un file o ne modifica la data e l’ora.
■ Esempio
• $ touch pippo
$ ls -l pippo
-rw-rw-r-- ... 0 Jan 20 17:38 pippo
ln (1/2)
■ Associa il nuovo nome (detto anche link) al file esistente.
ln name1 name2
$ ln -s uno primo
$ ls -l primo
■ $ which ls
/bin/ls
■ $ which which
/usr/bin/which
■ $ which cd
$
• Perché?
Esercizio
1. pwd
2. mkdir prova
3. cd prova
4. touch uno
5. cp uno uno_copia
6. mv uno_copia unouno
7. ln –s unouno link
8. ls –l
9. rm uno
10.cd ..
11.rm –r prova
12.exit
DIIGA - Università Politecnica delle Marche
A.A. 2009/10
Esercitazione di laboratorio
File Globbing
File Globbing
• microinterruttore,
• xy123j4,
• microscopico,
• xy789j111,
• nanomicro,
• xy78j67
• supersonico.
Esempi con *
■ $ ls
• Elenca tutti i nomi di file e directory della directory corrente.
■ $ ls *
• La shell provvede a sostituire l'asterisco con tutto l'elenco di nomi di
file e directory contenuti nella directory corrente. In questo caso,
non solo viene elencato il contenuto della directory corrente, ma
anche quello di tutte le eventuali sottodirectory.
■ $ ls micro*
• microinterruttore, microscopico.
■ $ ls *micro*
• microinterruttore microscopico nanomicro
Esempi con ?
• $ ls ?????j?
xy123j4 xy456j5
• $ ls *j*
• xy123j4 xy456j5 xy789j111 xy78j67
■ $ ls xy????[4567]*
xy123j4 xy456j5
■ $ ls xy????[4-7]*
Sequenze di Escape
■ $ touch sei\*otto
• $ echo micro*
microinterruttore microscopico
Piccola nota finale
$ echo micro*
microinterruttore microscopico
■ Esempio:
>
stdout
stdin Processo
stderr
<
2>
Esempi
[dati]
Pinco
Pallino
■ Vediamo un esempio:
• ls >> file1
■ Vediamo un esempio:
■ Un esempio:
• ls –al | less
|
Processo 1 Processo 2
(ls –al) stdout stdin (less)
Esercizi
■ Esercizio 1:
■ Esercizio 2:
■ Esercizio 3:
• $ touch contenuto_root
• $ ls / > contenuto_root
• si può evitare di creare il file di nome “contenuto_root”, la creazione
avviene automaticamente
Esercizio 2:
Esercizio 3:
• $ man ls | less
• Lanciare il comando /COPYRIGHT
Esercizi
■ Esercizio 4:
■ Esercizio 4:
• mv contenuto_root file3
• rm file3
Esercitazione
Processi Linux
Processi e Job in Linux
■ Processo:
• R in esecuzione (running)
• S in pausa o dormiente (sleeping)
• T sospeso (suspended)
• Z defunto (zombie)
• X morto
• N valore di nice positivo (rallentato)
NI Valore di nice
TT Terminale utilizzato
■ ps [opzioni] [PID]
■ Tra le opzioni:
• l emette un elenco con molti elementi
• a visualizza anche i processi di altri utenti
• -aux visualizza anche i processi di sistema
■ top [opzioni]:
■ Lo portiamo in foreground: fg
Esercitazione di laboratorio
Gli Script
Gli Script
#!<pathname>
■ Esempio: #!/bin/bash
touch [nomefile]
■ Esempio
• $ touch miadata
vi [nomefile]
■ Esempio
• $ vi miadata
Esempi
miadata
#!/bin/bash
echo Data di oggi:
date
■ $ sh < miadata
Data di oggi:
gio mag 31 12:16:55 GMT-5 2001
■ $ sh miadata
Data di oggi:
gio mag 31 12:17:05 GMT-5 2001
Esempi
■ $ ./miadata
script1: Permission denied
■ $ chmod +x miadata
■ $ ./miadata
Data di oggi:
gio mag 31 12:1:45 GMT-5 2001
Variabili di Shell
■ Esempio:
• $ echo $1A
unoA
Passaggio di parametri
leggi
#!/bin/bash
echo Il tuo nome è $1 - Il tuo cognome è $2
■ Esempio: script1
#!/bin/bash
echo Please enter your name
read name
echo Your name is $name
• $./script1
Please enter your name
Francesco
Your name is Francesco
Variabili di ambiente
■ Esempio
• $ echo $HOME
/home/tacconi
$ HOME=/altra
$ cd ~knoppix
$ pwd
/altra
■ Esempio
• $ echo $PATH
/bin:/usr/sbin:/usr/bin:/usr/ucb:/etc:/usr/etc:.
$ PATH=.
$ echo $PATH
.
$ ls
ls: not found
Esempio:
• $ touch a
$ rm a && echo rimosso!
rimosso
■ comando1 || comando2
comando2 viene eseguito solo se comando1 è stato eseguito
senza successo (cioè se $?≠0)
Esempio:
• $ rm a 2> out || echo errore!
errore!
Strutture di controllo
ISTRUZIONE SIGNIFICATO
• If selezione
• Case selezione multipla
• For iterazione enumerativa
• While, Until iterazione condizionata
#!/bin/sh
#Faccio la mia domanda
echo -n "Quanti anni hai? “
#Recupero la risposta
read ANNI
#Stampo a video il risultato
if [ ${ANNI} -lt 10 ]
then
echo "Sei un bambino"
elif [ ${ANNI} -lt 18 ]
echo "Sei minorenne"
else
echo "Sei maggiorenne"
fi
Esercitazione
• Al termine dell’esecuzione
• Se richiede un I/O
Calcolo dei crediti
| P1 | P2 | P3 | P4 |P3 | P2 | P1 |
0 5 9 12 18 19 25 27
Esercitazione di laboratorio
■ Per esempio:
/etc/rc.d/rc3.d/S85httpd
mv /etc/rc.d/rc3.d/S85httpd /etc/rc.d/rc3.d/K85httpd
Molte distribuzioni Linux utilizzano path diversi per il loro script
di startup,questo può disorientare l'utente e costringerlo a
cercare script di startup e file in troppi luoghi diversi.
cat /etc/inittab
Per verificare gli script lanciati all'avvio e quale runlevel viene utilizzato di
default
ls -l /etc/rc.d/
Lista dei file delle directory che contengono i vari script lanciati al boot
chkconfig --list
Visualizza per ogni servizio, se viene avviato o no nei diversi runlevel.
Il comando «getopt»
Opzione a
Opzione b, argomento “due”
Opzione c
Argomenti rimanenti:
uno
tre
quattro
Esercitazione
• nome_servizio {start|stop|restart}
■ Tra le opzioni:
• crontab [–u utente] file
• Sostituisce il file crontab con il file passatogli come argomento
• data_orario comando
• Minuti da 0 a 59
• Ore da 0 a 23
• Giorni_del_mese da 1 a 31
• Mese da 1 a 12
• Giorni_della_settimana da 0 a 7 (0 e 7 per la domenica)
■ Esempio di comando:
• cron
• touch uno
• crontab –e
■ Il comando ps u:
■ Il comando top:
• free [opzioni]
■ Tra le opzioni:
• -m visualizza in megabyte
• -s secondi effettua periodicamente un aggiornamento
• -t mostra una riga con i totali
Comando free
■ Se lanciamo free –m
■ Tra le opzioni:
■ procs:
• r numero di processi in attesa di esecuzione
• b numero di processi in sleep ininterrompibili
■ memory:
• swpd memoria virtuale usata
• free memoria libera
• buff memoria usata come buffer
• cache memoria usata come cache
• inact memoria inattiva
• active memoria attiva
■ swap:
• si memoria swapped in dal disco
• so memoria swapped out sul disco
Comando vmstat
■ io:
• bi numero di blocchi ricevuti da un dispositivo a blocchi
• bo numero di blocchi inviati ad un dispositivo a blocchi
■ system:
• in numero di interrupt al secondo (incluso il clock)
• cs numero di context switch al secondo
■ cpu:
• us tempo di esecuzione di codice non-kernel
• sy tempo di esecuzione di codice kernel
• id tempo di esecuzione idle (esecuzione al minimo)
• wa tempo di waiting
• i tempi sopra sono espressi in percentuale % sul tempo totale
Comando vmstat
■ Lanciare il comando vmstat –m (visualizza l’utilizzo delle
cache) in una modalità detta slabinfo
Il risultato del comando sarà del tipo:
Cache Num Total Size Pages
Kmem_cache 64 64 244 4
Ip_fib_hash 4 203 16 1
… … … … …
Cache: in Linux parte della memoria è organizzata in cache, una cache per ogni tipo di
oggetto; ogni “slab”(essi sono piccoli e sempre contigui, usualmente lunghi una pag di memoria)
contiene molti oggetti inizializzati.
Size: questa è la dimensione di ogni oggetto allocato. C’è un overhead nel mantenere la
cache; l’overhead varia con la dimensione dell’oggetto ( più piccolo è l’oggetto più elementi ci
sono nella pagina e più overhead serve per la gestione di oggetto usato/non usato. Si può
determinare quanti oggetti ci sono in ogni allocazione ( spesso coincide con una pag di memoria)
dividendo numero di oggetti allocati per totali allocazioni.
File system
File system di Linux
• Hard link
• Symbolic link
• /ramdisk/home/knoppix/Desktop Assoluto
• Desktop Relativo
• touch uno
• ln uno due
• ls –l
■ Come si vede “due” viene dichiarato come un file a tutti gli effetti
Symlink e hard link
• ln –s uno tre
• il primo carattere è un trattino per i file, una “d” per le directory e “l”
per un link simbolico
• gli altri sono relativi ai permessi in lettura, scrittura e modifica per gli
utenti user, group e others
• “o” per others, “g” per group, “u” per utente e “a” per tutti quanti
• “=” per settare, “+” per aggiungere e “-” per togliere i permessi
• chmod –r nome_file
■ L’effetto:
■ Tra le opzioni:
■ Il risultato:
• fdformat /dev/fd0
• formatta il floppy
■ Tra le opzioni:
• df [opzioni] [dispositivo]
■ Tra le opzioni:
Esercitazione di laboratorio
■ Ogni altro utente viene denominato con uno user name di al più
8 caratteri, assegnato dall'amministratore del sistema.
■ id [opzione]
■ Esempio
• $ id
• uid=207(tacconi) gid=100(nusmv)
Meccanismi di sicurezza
• Accesso al sistema
L'uso del sistema è consentito soltanto agli utenti autorizzati,
mediante uno schema di login/logout.
• Accesso ai files
L'accesso ai files è consentito soltanto agli utenti autorizzati,
mediante uno schema di permessi di accesso.
• Accesso ai processi
L'accesso ai processi (ad esempio per terminarli) è
consentito solo agli utenti autorizzati.
Accesso al sistema (login)
Conservazione e controllo password
• username:password:UID:GID:nome:home:shell
■ Esempio
• rossi:x:502:100:Mario Rossi:/home/rossi:/bin/bash
• bianchi:x:504:100:Anna Bianchi:/home/bianchi:/bin/bash
■ Esempio
• $ passwd
passwd: Changing password for tacconi
Old password:
New password:
Re-enter new password:
Esempi
■ $ passwd
passwd: Changing password for tacconi
Old password:
New password:
Passwords must differ by at least 3 positions
New password:
Password is too short - must be at least 6
characters.
New password:
Password must contain at least two alphabetic
characters and at least one numeric or special
character.
Too many failures - try later.
Uscita dal sistema (logout)
■ Esempio
Red Hat Linux release 7.0
Kernel 2.2.16-22 on an i686
login: tacconi
Password:
Last login: Thu Apr 5 15:05:20 on tty1
(...sessione di lavoro...)
[tacconi@pc-41 tacconi]$ logout
login:
Comando su
■ su [username]
■ Esempio
• $ su rossi
• Password:
• su: incorrect password
Comando last
■ last [username]
■ Esempio
• $ last tacconi
tacconi pts/0 193.205.129.33 Thu Apr 5 09:27 still logged in
tacconi tty1 Thu Apr 5 09:26 still logged in
tacconi tty1 Thu Apr 5 09:25 - 09:25 (00:00)
tacconi pts/0 193.205.129.33 Thu Apr 5 09:24 - 09:26 (00:02)
tacconi pts/1 193.205.129.33 Wed Apr 4 14:42 - 18:56 (04:13)
tacconi tty1 Wed Apr 4 14:38 - 14:41 (00:02)
DIIGA - Università Politecnica delle Marche
A.A. 2009/10
Esercitazione di laboratorio
File System II
Tipologie di file
• File ordinari
• Directory
• File speciali
■ Esempio:
Organizzazione dei file
■ Esempio
File Speciali
■ Ogni dispositivo di I/O viene visto, a tutti gli effetti, come un file
(file speciale)
■ Esempio: