Modulo 3
Modulo 3
Alessandro Brunengo
Mirko Corosu
INFN – Sezione di Genova
Parte I
Login, logout
Login
• Dopo il boot, il sistema linux presenta un
prompt (o una finestra grafica se e' attiva
l'interfaccia grafica X) che richiede uno
username ed una password
• Una volta verificate le credenziali, viene
eseguito un processo di terminale, gestito da
un programma chiamato "shell", che accetta
comandi in input e produce messaggi di
output
• In caso di interfaccia grafica, parte il desktop
(vedi sezione dedicata ad X)
Introduzione a Linux
INFN - Sezione di Genova 3
Login (cont.)
• All'atto del login, il sistema cerca nei database
degli utenti (generalmente i file /etc/passwd e
/etc/shadow) le caratteristiche dell'utente:
• password
• login shell
• default working directory o home directory
• Il processo iniziale (la shell di login) si colloca
nella home directory
• Il processo iniziale e tutti i processi in seguito
attivati saranno di proprieta' dell'utente
corrispondente allo username fornito
Introduzione a Linux
INFN - Sezione di Genova 4
Login (cont.)
• In virtu' delle caratteristiche multi-process e
multi-user del kernel linux, possono lavorare
contemporaneamente piu' utenti, e piu'
connessioni (login) dello stesso utente.
• Piu' connessioni contemporanee dello stesso
utente potranno operare ciascuna in modo
indipendente dalle altre (ma sugli stessi file e
directory!)
Introduzione a Linux
INFN - Sezione di Genova 5
Logout
• Quando si desidera terminare la sessione di
login, si deve dare un comando di
"disconnessione" dal sistema. A seconda del
tipo di shell utilizzata questi comandi possono
essere:
• exit (dovrebbe funzionare sempre)
• CTRL^D (a volte e' disabilitato)
• logout (caratteristico della csh)
• Il sistema presentera' nuovamente il prompt
di login per iniziare una nuova sessione
Introduzione a Linux
INFN - Sezione di Genova 6
Logout (cont.)
• In caso di utilizzo di interfaccia grafica
X, la sessione viene chiusa utilizzando
l'apposito comando di logout (o
disconnect) fornito dall'interfaccia
grafica
• In seguito al logout, il sistema
ripresentera' la finestra grafica per una
nuova login
Introduzione a Linux
INFN - Sezione di Genova 7
Parte II
La shell
La shell
La shell e' un programma finalizzato ad
accettare input sotto forma di comandi di
linea, ed a visualizzare messaggi in
output.
L'ambiente in cui lavora e' un terminale
alfanumerico.
Costituisce una interfaccia tra l'utente ed
il sistema operativo
Introduzione a Linux
INFN - Sezione di Genova 9
Tipi di shell
Esistono numerosi tipi di shell, simili nelle
funzioni essenziali. I principali sono:
• sh (Bourne shell)
• ksh (Korn shell)
• csh (C shell)
• tcsh (Turbo C shell)
• bash (Bourne agan shell)
• rsh (Reduced shell)
Introduzione a Linux
INFN - Sezione di Genova 10
Parte II.1
Caratteristiche comuni
il prompt
• la shell utilizza un prompt, cioe' una
stringa di caratteri posta all'inizio della
riga, per indicare all'utente che e'
pronta a ricevere comandi
• spesso le shell utilizzano come prompt i
simboli $ e #
• il prompt e' modificabile a piacere
Introduzione a Linux
INFN - Sezione di Genova 12
I comandi
Il comando che viene dato alla shell ha la seguente
struttura:
# cmd [-<flag>] [--<option>] [<parameter>]
dove:
• cmd rappresenta un programma da eseguire, o una
funzione interna della shell
• flag e' una lettera preceduta dal segno – che modifica
il comportamento del programma
• option, similmente, e' una parola, preceduta da un
doppio - con le stesse funzioni della flag
• parameter e' un parametro che specifica l'azione del
programma
Introduzione a Linux
INFN - Sezione di Genova 13
I comandi (cont.)
• Quando si digita un comando, la shell guarda
se il comando corrisponde ad una funzione
interna; nel caso, la esegue (es.: cd)
• Altrimenti cerca un file eseguibile
(programma) con quel nome in apposite
directory; se c'e' lo esegue
• In entrambi i casi passa al programma tutti i
parametri e le flag specificate in riga di
comando
• Se non trova funzioni o programmi, la shell da
un messaggio di errore (command not found)
Introduzione a Linux
INFN - Sezione di Genova 14
I comandi (cont.)
• flag, options e parameter sono argomenti
interpretati dal programma che viene eseguito
• usualmente i programmi possono accettare
opzionalmente piu' flag o parametri (piu'
raramente options) ed il loro significato
dipende dal programma stesso.
• Esempi:
# ls /usr
# ls –l –r –t /usr
# ls –lrt /usr
# ls --help
Introduzione a Linux
INFN - Sezione di Genova 15
stdin, stdout, stderr
• stdin (standard input): e' il posto da dove la
shell legge l'input; normalmente coincide con
l'input da terminale
• stdout (standard output): e' il posto in cui la
shell invia l'output; normalmente coincide con
la visualizzazione su terminale
• stderr (standard error): e' il posto in cui la
shell invia i messaggi di errore; normalmente
coincide con la visualizzazione su terminale
Introduzione a Linux
INFN - Sezione di Genova 16
redirezione dell'I/O
• la shell interpreta alcuni caratteri
posizionati in coda ai comandi per
redirigere l'I/O da o verso file
• redirezione di stdin; si opera con il
carattere < seguito dal nome del file; il
comando invece di leggere l'input da
terminale, lo legge dal file specificato:
# grep root < /etc/passwd
Introduzione a Linux
INFN - Sezione di Genova 17
redirezione dell'I/O (cont.)
• redirezione di stdout: si opera con il
carattere > seguito dal nome del file; il
comando, invece di scrivere l'output sul
terminale, lo scrive sul file specificato:
# ls /etc > listato.out
• attenzione: se esiste gia' un file con
quel nome, il file verra' sovrascritto con
il nuovo contenuto
Introduzione a Linux
INFN - Sezione di Genova 18
redirezione dell'I/O (cont.)
• redirezione di stderr: si opera con il comando
2> seguito dal nome del file; il comando,
invece di scrivere i messaggi di errore sul
terminale, li scrive sul file specificato:
# ls /etc/nonesiste 2> listato.err
• attenzione: se esiste gia' un file con quel
nome, il file verra' sovrascritto con il nuovo
contenuto
Introduzione a Linux
INFN - Sezione di Genova 19
redirezione dell'I/O (cont.)
• redirezione di output in append: si
opera con i comandi >> e 2>>; in
questo caso l'output (o l'errore)
vengono "aggiunti" in coda al file; se il
file non esiste, viene creato;
# ls /root >> listato.out
# ls /noncisono 2>> listato.err
Introduzione a Linux
INFN - Sezione di Genova 20
redirezione dell'I/O (cont.)
• i comandi di redirezione sono utilizzabili
insieme, per redirigere piu' di un canale
di I/O:
Introduzione a Linux
INFN - Sezione di Genova 21
pipeline
• la pipeline consiste nel reindirizzare
l'output di un comando nell'input di un
altro comando. Si opera tramite il
carattere | posto tra i due comandi:
# ls /usr | grep lib
• la pipeline puo' essere reiterata:
# ls –F /usr/lib | grep gcc | wc -l
Introduzione a Linux
INFN - Sezione di Genova 22
alias
• la shell permette di definire alias, vale a
dire dei sinonimi di comandi:
# alias ll "ls –al"
# alias rm "rm –i"
• il comando alias fornisce in output tutti
gli alias correntemente definiti
Introduzione a Linux
INFN - Sezione di Genova 23
filename globbing
• la shell interpreta il carattere * inserito
in un file name come "arbitraria
sequenza di caratteri":
# ls /usr/bin/l*
# ls /etc/p*d
• la shell interpreta il carattere ? inserito
in un file name come "qualunque
carattere":
# ls /dev/hd?
Introduzione a Linux
INFN - Sezione di Genova 24
filename globbing (cont.)
• il file name * viene espanso in
"qualunque file name" tranne che per i
nomi che iniziano col punto (.)
• l'insieme di tutti i file (e le directory) il
cui nome inizia per . e' identificabile con
il nome .*
Introduzione a Linux
INFN - Sezione di Genova 25
variabili
• la shell e' capace di utilizzare variabili:
# a="/etc/passwd" (sh, bash)
# set a="/etc/passwd" (csh, tcsh)
# setenv a "/etc/passwd" (csh, tcsh)
Nell'esempio si e' definita una variabile
di nome a e di valore /etc/passwd
• In assenza di spazi, i doppi apici sono
opzionali.
Introduzione a Linux
INFN - Sezione di Genova 26
espansione delle variabili
• definita una variabile, si istruisce la shell
per utilizzare il valore della variabile
tramite il carattere $ seguito dal nome
della variabile
# a="/etc/passwd"
# echo a
# echo ${a}
# cat $a
• In assenza di ambiguita', le parentesi
graffe sono opzionali.
Introduzione a Linux
INFN - Sezione di Genova 27
espansione dei comandi
• Esiste il modo per inserire un comando
nel comando, tramite gli apici `
# echo "data: `date`"
Questo dice alla shell: prima esegui il
comando date, quindi sostituisci a
`date` l'output del comando, poi esegui
il comando echo
Introduzione a Linux
INFN - Sezione di Genova 28
carattere di escape
• I caratteri
$"'`(){}%#&><!/\;
hanno per la shell un significato particolare, e
non possono normalmente essere utilizzati
all'interno di una stringa
• per poter utilizzare questi caratteri senza che
la shell li interpreti, si deve farli precedere dal
carattere di escape \
# a="variable"
# echo "$a non e' uguale a \$a"
Introduzione a Linux
INFN - Sezione di Genova 29
carattere di escape (cont.)
• Qualora un comando sia troppo lungo per
stare sulla riga, si puo' utilizzare il carattere di
escape come ultimo carattere della linea per
indicare alla shell che il comando prosegue
sulla linea successiva:
# ls -lrt /usr /lib \
> /etc /bin > tutti.lis
Usualmente, quando la shell attende sulla
linea successiva il completamento del
comando, usa come prompt il carattere >
Introduzione a Linux
INFN - Sezione di Genova 30
carattere di commento
• Nella shell tutto quello che segue il
carattere # e' considerato un
commento e non viene analizzato
• L'utilita' di questo carattere sta nella
possibilita' di inserire commenti negli
script (vedi sezione dedicata)
Introduzione a Linux
INFN - Sezione di Genova 31
separatore di comandi
• E' possibile inserire piu' di un comando
nella stessa linea, separando i comandi
con il carattere ;
Introduzione a Linux
INFN - Sezione di Genova 32
history
• la shell mantiene una memoria dei
comandi dati in precedenza da un
utente (history)
• per richiamare l'elenco dei comandi dati
in precedenza, si utilizza il comando
# history
• il numero dei comandi memorizzati puo'
essere definito dall'utente
Introduzione a Linux
INFN - Sezione di Genova 33
command line editing
• le shell piu' evolute (tcsh, bash) permettono
di richiamare i comandi dati in precedenza, e
di scorrerne l'elenco avanti ed indietro,
utilizzando i tasti arrow-up e arrow-down
• con queste shell e' anche possibile spostare il
cursore avanti ed indietro sulla linea di
comando per modificarlo, utilizzando i tasti
arrow-left ed arrow-right
Introduzione a Linux
INFN - Sezione di Genova 34
script di startup
• quando la shell viene eseguita dal
processo di terminale, questa esegue
una serie di comandi che si trovano in
file particolari chiamati script di startup
• questi script sono modificabili per
configurare il comportamento della shell
che si preferisce
Introduzione a Linux
INFN - Sezione di Genova 35
script di startup (cont.)
• vi sono script di startup uguali per tutti gli
utenti e modificabili solo dall'utente root;
questi sono:
/etc/profile (sh, bash)
/etc/csh.login e /etc/csh.cshrc (csh, tcsh)
• ci sono poi script di startup specifici
dell'utente, collocati nella sua home directory,
e modificabili dall'utente stesso:
.profile (sh, bash)
.login e .cshrc (csh, tcsh)
Introduzione a Linux
INFN - Sezione di Genova 36
command line completion
• con le shell piu' evolute (tcsh, bash) e'
possibile chiedere alla shell di tentare di
completare un comando scritto parzialmente,
utilizzando il TAB
• se la shell determina in modo univoco il
completamento, lo espande in corrispondenza
della digitazione del TAB
• in caso di ambiguita' un doppio TAB (o un
CTRL^D) ci mostrera' le possibili opzioni
• L'interpretazione - e quindi l'espansione - puo'
riguardare nomi di comandi o nomi di files
Introduzione a Linux
INFN - Sezione di Genova 37
la home directory
• Nelle shell piu' evolute, la sequenza di
caratteri ~/ viene convertita nella
home directory dell'utente:
# ls ~/.*sh*
Introduzione a Linux
INFN - Sezione di Genova 38
Parte II.2
Caratteristiche specifiche
le shell
• sh (Bourne Shell): la prima (e si vede...)
• ksh (Korn Shell): introduce la history e
gli array di variabili (vecchia anche lei)
• csh (C-shell): utilizza una sintassi
leggermente differente, C-like (vecchia)
• tcsh (Turbo C-shell): evoluzione della
csh, con history, editing di linea,
command line completion
Introduzione a Linux
INFN - Sezione di Genova 40
le shell (cont.)
• bash (Bourne Again Shell): e' la shell di
default su linux; deriva dalla sh, con
l'aggiunta di tutte le features gia' viste,
e di altre. Estremamente comoda e
flessibile. Problemi (dal manuale):
Introduzione a Linux
INFN - Sezione di Genova 41
linea di comando
Nel seguito vedremo una serie di comandi utili
per lavorare da linea di comando.
Lavorare con la shell ha diversi vantaggi:
• e' piu' rapido
• permette di accedere a tutti i programmi
• e' sempre disponibile
C'e' anche uno svantaggio:
• si deve sapere come fare cio' che si desidera
Introduzione a Linux
INFN - Sezione di Genova 42
linea di comando (cont.)
Nel seguito vedremo comandi secondo la
sintassi della bash.
Tuttavia quasi tutte le cose che vedremo
valgono anche per le altre shell.
Verranno sottolineate le sintassi specifiche della
bash (rispetto alla tcsh)
Introduzione a Linux
INFN - Sezione di Genova 43
Parte II.3
Comandi generici
il manuale on line
• La cosa piu' importante che si deve imparare
ad usare e' il manuale on line.
• Ogni comando, funzione, system call, file di
configurazione, o funzionalita' di un
programma, fornisce una pagina di manuale,
richiamabile tramite il comando man
• La sintassi del comando e'
# man <comando>
Introduzione a Linux
INFN - Sezione di Genova 45
il manuale on line (cont.)
• Il manuale on line e' costituito da 8 sezioni
differenti, ciascuna dedicata a diversi
argomenti:
• sezione 1: pagine di manuale sui comandi
utilizzabili dall'utente
• sezione 2: pagine si manuale sulle system call
• sezione 3: pagine di manuale sulle funzioni
della libreria del C
• sezione 4: pagine di manuale sui device
• sezione 5: pagine di manuale sul formato dei
file di configurazione
Introduzione a Linux
INFN - Sezione di Genova 46
il manuale on line (cont.)
• sezione 6: pagine di manuale sui giochi
• sezione 7: pagine di manuale su argomenti
vari
• sezione 8: pagine di manuale sulla
amministrazione di sistema
• Per richiamare la pagina di manuale di una
sezione specifica il comando man deve essere
seguito dal numero della sezione desiderata:
# man 1 printf
# man 3 printf
Introduzione a Linux
INFN - Sezione di Genova 47
il manuale on line (cont.)
• Se non si conosce il comando esatto, si puo'
utilizzare la flag k seguita da qualche parola
relativa alla funzione che il comando svolge:
# man –k print
Si avra' in output l'elenco delle pagine di
manuale che hanno attinenza alle parole
inserite
• Un sinonimo di man –k e' il comando apropos
Introduzione a Linux
INFN - Sezione di Genova 48
il manuale on line (cont.)
• Per vedere come puo' essere utilizzato man:
# man man
Introduzione a Linux
INFN - Sezione di Genova 49
scrivere su terminale
Il comando echo, seguito da una serie di
parole, scrive su stdout la serie di parole,
dopo aver eventualmente espanso i
comandi e le variabili:
# echo Hello world
# echo "data: `date`" > data.out
# echo –n "la home dir e\' ${HOME}"
Introduzione a Linux
INFN - Sezione di Genova 50
data e ora
Il comando date serve a visualizzare la
data e l'ora, o a modificarle
# date
# date 10261137
E' possibile definire il formato della data in
output:
# date +"%Y %m %d %H %M %S"
Introduzione a Linux
INFN - Sezione di Genova 51
operazioni algebriche
• Il comando expr serve ad effettuare
calcoli tra numeri interi
# expr 6 / 2
# count=10; count=`expr $count + 1`
• I valori numerici, o le variabili espanse,
ed i simboli delle operazioni vanno
separate da spazi
• Esistono calcolatrici piu' evolute (bc)
Introduzione a Linux
INFN - Sezione di Genova 52
pausa della shell
• Il comando sleep seguito da un numero
provoca la sospensione della shell per
quel numero di secondi
# date; sleep 10; date
• Trascorso questo intervallo di tempo, la
shell ritorna il prompt
Introduzione a Linux
INFN - Sezione di Genova 53
trovare il comando
• Il comando which seguito dal nome di un
comando serve a visualizzare il nome
completo del programma che verrebbe
eseguito in corrispondenza di quel comando:
# which ls
• Quando il comando corrisponde ad una
funzione interna, la shell lo comunichera':
# which cd
Introduzione a Linux
INFN - Sezione di Genova 54
Parte II.4
Comandi sul file system
spostarsi nel file system
• il comando cd serve a spostarsi in una
directory
# cd /usr # vai in /usr
# cd .. # vai un livello sopra
# cd # vai nella home dir
# cd - # vai nella dir di prima
• Il comando pwd visualizza la current working
directory
# cd /usr/lib; pwd
Introduzione a Linux
INFN - Sezione di Genova 56
visualizzare il contenuto di una
directory
Introduzione a Linux
INFN - Sezione di Genova 63
visualizzare un file
• il comando cat serve a visualizzare sul
terminale il contenuto di un file
# cat /etc/passwd
• i comandi more e less permettono di
scorrere il contenuto di un file avanti ed
indietro
# less /etc/profile
Sono quasi editori di testo
Introduzione a Linux
INFN - Sezione di Genova 64
ordinare il contenuto di un file
• il comando sort serve a ordinare sul terminale
il contenuto di un file
# sort /etc/passwd
• dispone di flag che permettono di ordinare il
file selezionando i campi (secondo un
separatore) o il criterio di ordinamento
# sort -t: -r -n -k3,4 /etc/passwd
questo comando ordina al contrario (-r) con
criterio numerico (-n) sui campi 3 e 4 (-k3,4)
usando come separatore il carattere :
Introduzione a Linux
INFN - Sezione di Genova 65
cercare in un file
• il comando grep serve a ricercare in un
file le righe che contengono una data
stringa
# grep root /etc/passwd
• dispone di flag che permettono di
selezionare diversi criteri di ricerca
Introduzione a Linux
INFN - Sezione di Genova 66
confrontare file
• il comando diff serve a cercare le
differenze tra due file
# diff file1 file2
• l'output non e' di facile comprensione,
ma spesso viene utilizzato solo per
verificare che due file siano uguali: nel
caso non c'e' output.
Introduzione a Linux
INFN - Sezione di Genova 67
contare righe, parole, caratteri
• il comando wc permette di effettuare un
conteggio delle righe, delle parole e dei
caratteri contenuto in un file
# wc /etc/profile # conta tutto
# wc -l /etc/profile # conta le righe
Introduzione a Linux
INFN - Sezione di Genova 68
per i piu' temerari...
• cut: programma che permette di selezionare e
visualizzare solo alcuni campi delle riche di un
file
• awk: come cut, ma piu' flessibile e piu'
complicato da usare
• sed: programma che permette di modificare
una stringa di caratteri; richiede eroismo
Introduzione a Linux
INFN - Sezione di Genova 69
modificare le caratteristiche dei file
Introduzione a Linux
INFN - Sezione di Genova 72
occupazione disco (cont.)
• il comando quota serve a visualizzare lo
spazio occupato da tutti i file di uno user
# quota
La quota occupata verra' mostrata solo se il
sistema e' configurato per controllare le quote
(tipico di server di login centrale, usualmente
non utilizzato su macchine personali).
Introduzione a Linux
INFN - Sezione di Genova 73
Parte II.5
Comandi di job control
controllare i processi
• quando si fornisce un comando alla shell,
questa crea un processo che esegue il
programma corrispondente
• e' possibile eseguire piu' programmi
contemporaneamente
• e' possibile controllare lo stato dei processi
creati, metterli in pausa o farli terminare
Introduzione a Linux
INFN - Sezione di Genova 75
foreground e background
• un processo si dice in foreground quando
possiede il controllo del terminale;
quando si esegue un comando in foreground,
non si ha disponibile il prompt fino al termine
della sua esecuzione
• un processo si dice in background quando
viene eseguito in modo da lasciare il controllo
del terminale alla shell;
in questa condizione l'utente puo' lanciare un
altro processo, che sara' eseguito
contemporaneamente
Introduzione a Linux
INFN - Sezione di Genova 76
esecuzione in foreground
• normalmente l'esecuzione di un comando
provoca la creazione di un processo in
foreground
• il prompt non e' disponibile fino alla fine della
esecuzione del processo
• e' normalmente possibile interrompere
definitivamente l'esecuzione di un processo in
foreground utilizzando la combinazione di tasti
CTRL^C
Introduzione a Linux
INFN - Sezione di Genova 77
esecuzione in foreground (cont.)
Introduzione a Linux
INFN - Sezione di Genova 78
esecuzione in background
• quando il comando che viene digitato
viene terminato con il simbolo &, la
shell eseguira' il programma
corrispondente in background
• in queste condizioni, la shell vi offrira' il
prompt immediatamente
Introduzione a Linux
INFN - Sezione di Genova 79
esecuzione in background (cont.)
Introduzione a Linux
INFN - Sezione di Genova 80
controllo dei sottoprocessi
• i processi in background fatti partire da una sessione
di shell (sottoprocessi o job) possono essere
visualizzati con il comando
# jobs
• ogni sottoprocesso e' identificato con un numero ( il
job-id), a partire da 1
• e' possibile riportare in foreground un job attualmente
in background con il comando
# fg <job-id>
dove job-id e' il numero identificativo del job
• Il comando jobs mostra solo i sottoprocessi della shell
corrente
Introduzione a Linux
INFN - Sezione di Genova 81
controllo di tutti i processi
• i processi in esecuzione sul sistema possono
essere visualizzati tramite il comando ps:
# ps -e
• ogni processo ha un identificativo numerico (il
PID: Process IDentifyer)
• attenzione a non confondere il PID con il job-
id (identificativo dei sottoprocessi di una shell)
Introduzione a Linux
INFN - Sezione di Genova 82
signal
• linux permette di inviare ad un processo 32
diversi messaggi (signals), tramite il comando
kill:
# kill -<signal-id> %<job-id>
# kill -<signal-id> <PID>
• il signal-id e' un numero che identifica il signal
che si vuole inviare (da 1 a 32)
• il job-id e' il numero che identifica il job (PID
e' il numero che identifica il processo) a cui si
vuole mandare il signal
Introduzione a Linux
INFN - Sezione di Genova 83
signal (cont.)
• l'elenco dei segnali inviabili ad un processo,
ed il loro significato, sono elencati nella man
page di signal, sezione 7:
# man 7 signal
• esempi:
• il CTRL^C equivale al segnale 2 (SIGINT)
• il CTRL^Z equivale al segnale 17 (SIGSTOP)
• il segnale 9 (SIGKILL) provoca la brutale
terminazione del processo
Introduzione a Linux
INFN - Sezione di Genova 84
top
• esiste una utility usualmente presente
nelle installazioni di linux, che permette
di visualizzare l'elenco dei processi e la
loro occupazione di risorse:
# top
top permette all'amministratore del
sistema di monitorare ed intervenire sui
processi
Introduzione a Linux
INFN - Sezione di Genova 85
Esecuzione ritardata
• E' possibile dire al kernel di eseguire un
comando ritardando il momento di esecuzione
di un intervallo di tempo definito, o farlo
eseguire in un certo momento, tramite il
comando at:
# at -f <programma> <time>
• L'indicazione del tempo puo' essere
• assoluta: HH:MM
• relativa: + 3 hours
• keyword: now, midnight, noon, teatime
Introduzione a Linux
INFN - Sezione di Genova 86
Esecuzione ritardata (cont.)
• Si possono visualizzare i comandi sottomessi
tramite at con il comando
# atq
Si otterra' in output la lista dei comandi dello
user in attesa di esecuzione
• Si possono rimuovere i comandi sottomessi
tramite at con il comando
# atrm <job>
Dove <job> e' l'indentificativo del comando
sottomesso, visualizzato da atq
Introduzione a Linux
INFN - Sezione di Genova 87
Esecuzione ripetuta
• E' possibile dire al kernel di eseguire un
comando (generalmente uno script) ad
intervalli di tempo regolari, tramite il
programma cron
• Si modifica la lista dei comandi da eseguire
ciclicamente tramite:
# crontab -e
• Questo fara' partire un editore (per default vi)
con cui inserire, rimuovere o modificare i job
da eseguire ciclicamente
Introduzione a Linux
INFN - Sezione di Genova 88
Esecuzione ripetuta (cont.)
• Per visualizzare la lista dei comandi
eseguiti ciclicamente si utilizza:
# crontab -l
• Per rimuovere completamente la lista:
# crontab -r
• La sintassi (non banalissima) per
specificare quando eseguire i comandi
va vista nella man page di crontab
Introduzione a Linux
INFN - Sezione di Genova 89
Esecuzione a bassa priorita'
• E' possibile dire al kernel di eseguire un
comando a priorita' diversa da quella della
shell corrente, tramite il comando nice:
# nice -n <priority> <command>
• <priority> e' un numero che va da -20 (alta)
a 19 (bassa); il default e' 0
• Solo root puo' sottomettere comandi a
priorita' negativa
Introduzione a Linux
INFN - Sezione di Genova 90
Parte II.6
L'environment
environment di un processo
• Per environment di un processo si intende
l'insieme di una serie di variabili e del loro
valore, che vengono associate al processo
• Il programma in esecuzione puo' accedere al
valore di queste variabili in qualsiasi momento
• Il programma puo' modificare l'environment,
definendo nuove variabili, rimuovendole o
modificandone il valore
Introduzione a Linux
INFN - Sezione di Genova 92
environment di un processo (cont.)
Introduzione a Linux
INFN - Sezione di Genova 93
environment della shell
• Come gia' visto, la shell dispone della
capacita' di utilizzare variabili:
# lavoro="~/work"
• E' possibile rendere una variabile parte
dell'environment (cioe' delle variabili che
verranno esportate ai sottoprocessi
della shell):
# export lavoro
Introduzione a Linux
INFN - Sezione di Genova 94
environment della shell (cont.)
• E' possibile esportare una variabile
all'atto della sua definizione:
# export lavoro="~/work"
• L'elenco delle variabili definite si ha con:
# set
• L'elenco delle variabili esportate, cioe'
l'environment, si ha con:
# env
Introduzione a Linux
INFN - Sezione di Genova 95
environment della shell (cont.)
• E' possibile rimuovere una variabile
dall'environment tramite il comando
unset:
# unset lavoro
• Il comando unset elimina anche la
definizione della variabile, non solo la
sua appartenenza all'environment
Introduzione a Linux
INFN - Sezione di Genova 96
variabili in csh e tcsh
• In csh (e tcsh) i due insiemi di variabili e
variabili di environment sono separati:
# set lavoro="~/work"
# setenv lavoro "~/work"
• Per rimuovere le variabili dai due insiemi
si usano comandi diversi:
# unset lavoro
# unsetenv lavoro
Introduzione a Linux
INFN - Sezione di Genova 97
variabili in csh e tcsh (cont.)
• L'elenco delle variabili definite si ottiene
come per la bash:
# set # variabili
# env # environment
Introduzione a Linux
INFN - Sezione di Genova 98
Principali variabili di environment
Introduzione a Linux
INFN - Sezione di Genova 99
Principali variabili di environment
(cont.)
Introduzione a Linux
INFN - Sezione di Genova 100
Principali variabili
• PS1: il valore di questa variabile viene
espanso ed utilizzato come prompt principale;
es:
# PS1="`hostname`> "
# PS1="\u@\H:\w> "
• PS2: il valore di questa variabile viene
espanso ed utilizzato come prompt secondario
(quando la shell aspetta ulteriore input)
Introduzione a Linux
INFN - Sezione di Genova 101
Parte II.7
Lo scripting
Lo script
• Uno script e' un file ASCII costituito da
una serie di comandi
• Se il file e' eseguibile (permission x
attivata) puo' essere eseguito come un
qualsiasi programma
• In esecuzione il file viene letto riga per
riga, ed ogni riga processata come se
fosse un comando dato in linea
Introduzione a Linux
INFN - Sezione di Genova 103
L'interprete dello script
• Il programma che deve interpretare lo script
deve essere specificato nella proma riga dello
script:
#!<interprete>
Ad esempio:
#!/bin/bash
• Se non specificato, l'interprete utilizzato sara'
la shell di login
• La shell e' solo uno degli interpreti disponibili
Introduzione a Linux
INFN - Sezione di Genova 104
Interpretazione forzata
• E' possibile dire alla shell di eseguire
una serie di comandi scritti su un file
anche se questo non e' eseguibile,
tramite i comandi:
# source comandi.lis
# . comandi.lis
• In questo caso l'interprete utilizzato
sara' la shell correntemente usata
Introduzione a Linux
INFN - Sezione di Genova 105
Istruzioni di controllo di flusso
• La shell dispone di istruzioni per
controllare il flusso dei comandi da
eseguire in funzione di condizioni
• Questo, unitamente alla possibilita' di
definire subroutine, fa della shell un
vero e proprio linguaggio di
programmazione
Introduzione a Linux
INFN - Sezione di Genova 106
Operatore di test
• Le condizioni vengono controllate
tramite l'operatore [ ] detto test
• La sintassi dell'operatore e'
[ <condizione> ]
Questa operazione ritornera' vero o
falso in base alla condizione
Introduzione a Linux
INFN - Sezione di Genova 107
Operatore di test (cont.)
• Le condizioni possono essere:
• confronto tra stringhe (=, !=, >, <)
[ "str1" = ${variabile} ]
• confronto numerico (-eq, -lt, -gt, -neq)
[ ${count} -lt 100 ]
• Vedere la man page della bash
Introduzione a Linux
INFN - Sezione di Genova 108
Esecuzione condizionale
• L'esecuzione condizionale si ottiene
tramite l'istruzione if
if [ <condizione> ]
then
<istruzioni>
else # opzionale
<istruzioni> # opzionale
fi
Introduzione a Linux
INFN - Sezione di Genova 109
cicli
• E' possibile ripetere piu' volte un blocco di
istruzioni tramite l'istruzione for
for var in val1 val2 val3
do
echo ${var}
done
In questo esempio l'istruzione echo verra'
eseguita una volta per ogni parola che segue
in; in ogni ciclo la variabile val avra' di volta in
volta il valore delle parole val1 val2 val3
Introduzione a Linux
INFN - Sezione di Genova 110
cicli (cont.)
• Si puo' utilizzare come elenco di valori del ciclo
l'output di un comando, tramite l'espansione data
dagli apici inversi:
for var in `ls /usr/lib`
do
echo "libreria: ${var}"
done
In questo esempio l'istruzione echo verra' eseguita
una volta per ogni file in /usr/lib. La variabile var avra'
via via per valore il nome dei file
Introduzione a Linux
INFN - Sezione di Genova 111
cicli (cont.)
• Un ciclo puo' essere realizzato anche
tramite l'istruzione while:
while [ <condizione> ]
do
<istruzioni>
done
• Il ciclo verra' ripetuto finche' la
condizione sara' vera
Introduzione a Linux
INFN - Sezione di Genova 112
interruzione dei cicli
• Esistono due istruzioni che interrompono
l'esecuzione di un ciclo
continue
L'istruzione continue provoca l'interruzione del
blocco di istruzioni del ciclo, per proseguire
col ciclo successivo
break
L'istruzione break provoca l'interruzione e
l'uscita dal ciclo, per proseguire con le
istruzioni successive al ciclo
Introduzione a Linux
INFN - Sezione di Genova 113
subroutine
• In bash possibile definire subroutine, cioe'
blocchi di istruzioni che possono essere
eseguiti con un comando che li richiama:
sub1()
{
<istruzioni>
}
• Queste istruzioni definiscono una subroutine
di nome sub1
Introduzione a Linux
INFN - Sezione di Genova 114
subroutine (cont.)
• Definita una subroutine, si attiva
l'esecuzione delle istruzioni che la
compongono semplicemente digitando il
suo nome, come se fosse un comando
comune:
echo "Inizio subroutine sub1"
sub1
echo "Fine subroutine sub1"
Introduzione a Linux
INFN - Sezione di Genova 115
parametri
• Qualunque script e' capace di ricevere
parametri: basta richiamare lo script facendo
seguire al suo nome l'elenco dei parametri
che si desidera passargli:
# ./script.sh par1 par2 par3
Con questo comando si chiama in esecuzione
lo script script.sh passandogli come parametri
le tre stringhe par1, par2 e par3
Introduzione a Linux
INFN - Sezione di Genova 116
parametri (cont.)
• All'interno di uno script si hanno a
disposizione delle variabili per trattare gli
eventuali parametri passati allo script:
• $#: numero di parametri passati
• $0: nome con cui e' stato eseguito lo script
• $1: parametro in posizione 1
• ...
• $9: parametro in posizione 9
Introduzione a Linux
INFN - Sezione di Genova 117
parametri (cont.)
• Ad esempio, lo script:
#!/bin/bash
echo "nome: $0"
echo "parametri: $1, $2, $3"
chiamato con il comando
# ./script.sh a 35 /etc/passwd
produrra' come output:
nome: ./script.sh
parametri: a, 35, /etc/passwd
Introduzione a Linux
INFN - Sezione di Genova 118
parametri alle subroutine
• Anche le subroutine possono essere chiamate
con parametri
• Il meccanismo di funzionamento e' lo stesso
dello script:
• la subroutine viene chiamata facendo seguire
al suo nome la lista dei parametri
• all'interno della subroutine, i parametri
saranno accessibili tramite le variabili $1, $2...
Introduzione a Linux
INFN - Sezione di Genova 119
Parte III
X-Windows
In principo era la SHELL....
Introduzione a Linux
INFN - Sezione di Genova 121
L'interfaccia grafica
• Architettura client/server
Introduzione a Linux
INFN - Sezione di Genova 124
Come funziona (continua)
Introduzione a Linux
INFN - Sezione di Genova 125
Il window manager
Introduzione a Linux
INFN - Sezione di Genova 128
GNOME (il file browser)
Introduzione a Linux
INFN - Sezione di Genova 129
GNOME (il pannello)
Introduzione a Linux
INFN - Sezione di Genova 130
KDE
Introduzione a Linux
INFN - Sezione di Genova 131
KDE o GNOME ?
Introduzione a Linux
INFN - Sezione di Genova 133
Modalita' testo
Introduzione a Linux
INFN - Sezione di Genova 134
Modalita' grafica
Introduzione a Linux
INFN - Sezione di Genova 136
Configurazione di X
Introduzione a Linux
INFN - Sezione di Genova 142
In breve.....(continua)