SlideShare une entreprise Scribd logo
1  sur  281
Télécharger pour lire hors ligne
Corso su Linux
Usare il Pinguino e vivere felici (v. 1.1)
               Paolo Campegiani
           paolo@paolocampegiani.it


          http://www.paolocampegiani.it




                                             – p.
Indice per sezioni - 1
Concetti generali, 4
Comandi su file, 56
Operazioni su dischi, 81
Comandi su file di testo, 98
Comandi per l’archiviazione, 114
Bash e linea di comando, 127
Utenti e gruppi, 144
L’ambiente grafico, 157
Stampare, 162




                                   – p.
Indice per sezioni - 2
Interoperabilitá con Windows, 168
Data ed ora, 175
Informazioni sull’hardware, 182
Controllare il sistema, 185
Rete e networking, 209
Sequenza di boot, 231
Gestione dei pacchetti con RPM, 244
Compilare il Kernel e gestire i moduli, 255
Trovare documentazione, 272




                                              – p.
Cenni su Unix - 1
Unix viene sviluppato nei Bell Labs a partire dal 1969. Si tratta di
una famiglia di sistemi operativi, sviluppati da costruttori diversi, che
condividono una comune interfaccia di programmazione:

    AIX di IBM

    Solaris di Sun

    HP-UX di Hewlett Packard

    FreeBSD università di Berkeley

E’ il primo sistema operativo scritto in un linguaggio di
programmazione ad alto livello, il C, inventato nel 1972 proprio a tal
fine.


                                                                            – p.
Cenni su Unix - 2
Unix é stato pensato fin dall’inizio per essere semplice,
coerente, efficiente. É un sistema operativo multiutente e
multiprogrammato:
   multiprogrammato: piú processi si contendono l’uso delle
   risorse del sistema;
   multiutente: utenti diversi richiedono al sistema di
   compiere delle operazioni, e sono autorizzati o meno a
   compierle.




                                                              – p.
Cenni su Unix - 3
Un sistema Unix consente di eseguire in modo efficiente
molte centinaia di processi distinti che operano
concorrentemente.
Unix é particolarmente orientato ad applicazioni server e a
compiti di networking: Internet é stata sviluppata su Unix.
La compatibilitá tra le diverse versioni di Unix é a livello di
codice sorgente e di comandi di sistema disponibili.
Le specifiche di Unix sono pubbliche, le implementazioni
sono proprietarie oppure liberamente usabili (FreeBSD).




                                                                  – p.
Cosa é Linux
Linux é una implementazione di Unix realizzata partendo
da zero, e distribuita secondo la licenza GPL (Gnu Public
License).
Linux nasce nel 1991 ad opera di Linus Torvalds, a cui si
sono aggiunti negli anni centinaia di sviluppatori che
operano gratuitamente e si coordinano tramite una mailing
list pubblicamente accessibile. Torvalds é il responsabile
ultimo di ogni decisione relativa alle funzionalità da inserire
nel kernel e sulla scelta tra le diverse implementazioni
possibili.




                                                                  – p.
La licenza GPL
La licenza GPL (GNU Public License) rappresenta
l’essenza del software libero. Con una licenza GPL si puó:
   ottenere il software gratuitamente ed in formato
   sorgente, pagando eventualmente delle spese di
   spedizione;
   utilizzarlo in qualsiasi ambito e con qualsiasi finalitá;
   ridistribuire anche gratuitamente il software cosí
   ottenuto;
   modificare il software ottenuto;
   distribuire il software modificato, citando l’autore
   originale, ma solo sotto licenza GPL;



                                                              – p.
I sistemi GNU/Linux
Linux é il kernel, tutti gli altri programmi necessari al
funzionamento del sistema (il compilatore C, la libreria C) e
il software di sistema (i comandi di base) sono sviluppati da
un altro organismo, la Free Software Foundation, che negli
anni ’80 ha dato il via alla realizzazione di un proprio Unix
gratuito (GNU é un anti-acronimo, significando GNU is Not
Unix).

E’ quindi piú corretto parlare di sistemi GNU/Linux.




                                                                – p.
Caratteristiche di Linux - 1
Linux é un sistema operativo multipiattaforma, nella sua
ultima versione gira tra l’altro su:
   x86 e compatibili (Intel, Amd, ...) a 32 e 64 bit
   PowerPc a 32 e 64 bit
   Motorola 68k
   Arm
   Digital Alpha
   MIPS
   Sparc
   IBM S390



                                                           – p. 1
Caratteristiche di Linux - 2
É una implementazione di Unix
   Multiutente
   Multiprocesso
Multiprocessing simmetrico (SMP), da 2 a 16
processori (di piú con il kernel 2.6)
Minime richieste hardware (il kernel occupa meno di 2
MB di memoria)
Grande interfacciabilitá verso altri sistemi operativi
Particolarmente ottimizzato per il networking




                                                         – p. 1
La numerazione del kernel - 1
Il kernel di Linux ha un sistema di numerazione a tre cifre:
1. Version: versione del kernel (correntemente é la 2, ci
   sono state la 0 e la 1)
2. Patchlevel: il livello di patch
      Numeri pari: versioni stabili del kernel
      Numeri dispari: versioni di sviluppo
3. Sublevel: un numero progressivo che rappresenta le
   varie sottoversioni.




                                                               – p. 1
La numerazione del kernel - 2
Quindi ad esempio 2.4.24 é una versione stabile, mentre
2.5.33 é una versione di sviluppo.
Una versione stabile non é necessariamente priva di bug!
Se ci sono dei bug, questi vengono segnalati alla mailing
list di sviluppo e corretti in una delle prossime versioni
(SubLevel maggiore).

Al 9 Luglio 2004 esistono diversi rami stabili della versione
2.0 ( finger @kernel.org):
    2.0.40
    2.2.26
    2.4.26
    2.6.7

                                                                – p. 1
La numerazione del kernel - 3
La versione 2.4.26 é più stabile della versione 2.6.7, che é
invece appena stata rilasciata ed é quindi in corso di
sviluppo attivo.
Progressivamente la versione 2.6 diventerá stabile, e ad un
certo punto si passerá allo sviluppo della versione 2.7, che
incorporerá nuove funzionalitá (nello sviluppo di una
versione pari si correggono sono gli errori presenti). Lo
sviluppo della versione 2.6 si limiterá a correggere problemi
di sicurezza.




                                                                – p. 1
Le dimensioni del kernel
Il kernel è costituito da circa 5.6 milioni di righe di codice C
(con una piccola parte in assembler specifica per ogni
piattaforma) e viene distribuito in formato sorgente (circa
200 MB non compressi). Ottenuti i sorgenti, occorre
compilarli sulla propria macchina per avere un kernel da
poter installare, oppure usare un kernel compilato da terze
parti.

Il kernel realizza solo le funzioni essenziali: l’interfaccia
grafica e tutti i programmi (compreso il software di sistema)
sono indipendenti e sviluppati autonomamente.




                                                                   – p. 1
La libreria e il compilatore C
La libreria e il compilatore C sono due componenti
essenziali del sistema.
Il kernel stesso viene compilato usando il compilatore C, e
praticamente tutti i programmi presenti usano direttamente
o indirettamente la libreria C.




                                                              – p. 1
Il compilatore C
Il compilatore C/C++ si chiama gcc (Gnu Cross Compiler)
ed é sviluppato da Free Software Foundation.
Oggi sono sostanzialmente disponibili due versioni:
    2.96 la versione stabile, fortemente consigliata per
    compilare il kernel
    3.3-3.4 la nuova versione, utilizzabile per compilare la
    maggior parte dei programmi
Sono disponibili molti altri linguaggi di programmazione: a
volte i relativi compilatori operano traducendo il codice in
linguaggio C/C++ e poi invocando il compilatore gcc.



                                                               – p. 1
La libreria C
La libreria C attualmente utilizzata é la libreria glibc (Gnu
libc).
Implementa POSIX.1 e parte di POSIX.2.
La versione corrente é la 2.3.




                                                                – p. 1
Le librerie dinamiche
Le librerie utilizzate dai programmi possono essere
collegate agli stessi in modo statico o dinamico.
Il consolidamento statico viene preferito quando occorre
avere un programma che possa funzionare in modo
indipendente dal resto del sistema, avendo al suo interno
tutto il codice necessario al funzionamento.
Il consolidamente dinamico é di gran lunga il piú usato,
permettendo di avere programmi di dimensioni minori.




                                                            – p. 1
Gli standard di Linux
Con la diffusione di Linux, e l’esistenza di molti venditori di
soluzioni basate su questo sistema, si é reso necessario
definire degli standard per garantire uno standard comune
che governi:
    le funzioni esportate da alcune delle librerie dinamiche
    la dislocazione di alcuni dei file (di configurazioni o di
    comandi) presenti nel sistema
    i parametri di alcuni dei comandi di sistema
Un consorzio indipendente ha realizzato lo standard
relativo, il Linux Standard Base (LSB):
http://www.linuxbase.org.



                                                                  – p. 2
Le distribuzioni - 1
Un sistema Linux contiene quindi un kernel, delle librerie
dinamiche, del software di sistema, e dei programmi
applicativi. Tutti questi componenti sono variamente
interdipendenti (ad esempio un certo programma richiede
una certa versione di una libreria) ed occorre quindi garantire
che l’installazione, la rimozione o l’aggiornamento di uno di
questi componenti non comprometta il funzionamento
dell’intero sistema.
Questo é uno dei compiti svolto una distribuzione.




                                                                  – p. 2
Le distribuzioni - 2
Una distribuzione è fondamentalmente, quindi, un sistema
di gestione delle dipendenze, anche se ci sono altri
elementi specifici per una distribuzione, come ad esempio il
modo in cui viene effettuata la configurazione dell’hardware
e come sono attivati i servizi offerti dalla macchina.
Esistono centinaia di distribuzioni di Linux, che coprono
necessitá molto diverse (e sono quindi fornite anche con
insiemi di software applicativi diversi).




                                                              – p. 2
Le distribuzioni - 3
Le piú diffuse e significative distribuzioni per Linux sono:
    RedHat
    Debian
    SuSe
    Mandrake
    Slackware
    Gentoo




                                                              – p. 2
La distribuzione RedHat
La piú diffusa distribuzione per Linux, é oggi presente in piú
versioni:
    Red Hat Linux/Red Hat Fedora la versione gratuita e
    prelevabile da Internet;
    Red Hat Enterprise Linux WS per workstation;
    Red Hat Enterprise Linux ES per server web;
    Red Hat Enterprise Linux AS per server Oracle;
La differenza sostanziale tra la versione gratuita e quelle a
pagamento é l’assistenza fornita. Il sistema di gestione
delle dipendenze si basa in ogni caso sul software rpm
(RedHat Package Manager).



                                                                 – p. 2
Le distribuzioni SuSe e Mandrake
Queste due distinte distribuzioni usano lo stesso package
manager di RedHat, e si differenziano sul modo in cui i
singoli pacchetti sono organizzati.
Sono anch’esse disponibili in due versioni, una gratuita e
prelevabile da Internet, ed una a pagamento in cui si
aggiungono dei software proprietari e/o dell’assistenza
tecnica.




                                                             – p. 2
La distribuzione Debian
Questa distribuzione é completamente gratuita, realizzata
da un gruppo di volontari. Utilizza un proprio sistema di
gestione dei pacchetti (il cui nucleo é il software dpkg).
E’ divisa in tre filoni:
   stable che viene aggiornata ogni 2 anni circa, e
   contiene software ampiamente testato;
   testing che contiene quella che diventerá la prossima
   versione Stable;
   unstable che contiene software instabile o sotto
   sviluppo attivo;




                                                             – p. 2
La distribuzione Gentoo
Ultima arrivata tra le distribuzioni piú famose, ha
guadagnato rapidamente popolaritá per l’idea innovativa su
cui si basa: tutto il software installato viene ricompilato in
locale, in modo da ottimizzarlo al massimo dal punto di
vista delle prestazioni.

In questo modo é inoltre sempre immediatamente
disponibile l’ultima versione di ogni programma.




                                                                 – p. 2
La distribuzione Slackware
E’ la distribuzione piú essenziale: il sistema di gestione
delle dipendenze é spartano (ed é stato introdotto in tempi
recenti, prima era compito dell’amministratore del sistema
capire se e come era possibile installare o rimuovere un
dato programma).
E’ anche la distribuzione che permette il massimo grado di
controllo su ció che viene installato nel sistema.




                                                              – p. 2
Quale é la migliore distribuzione?
Non esiste una distribuzione migliore delle altre. Ogni
buona distribuzione ha un suo campo d’elezione:
   Suse/Mandrake per avere un Linux molto user friendly
   Fedora per una distribuzione RedHat ma di sviluppo (ed
   instabile)
   Debian per avere la massima stabilitá e semplicitá di
   amministrazione;
   Gentoo quando le prestazioni e l’efficienza sono critiche
   (ad esempio sui portatili);
   Slackware per server Internet molto specializzati
In questo corso ci baseremo su RedHat.


                                                              – p. 2
Utenti
Gli utenti presenti nel sistema (sia le persone che i processi
di sistema) sono univocamente identificati da un numero
detto UID (User ID). A questo numero é associata poi una
stringa identificativa, ma il kernel considera sempre e solo
l’UID.
É sempre presente un utente, root, identificato da UID pari
a 0 che non ha alcuna restrizione nelle operazioni che
compie sul sistema.




                                                                 – p. 3
Processi - 1
Un processo é l’esecuzione di un programma. Lo stesso
programma puó quindi essere eseguito piú volte anche
contemporaneamente, dando luogo a piú processi distinti.
Ogni processo é identificato univocamente da un numero
detto PID (Process ID). Il PID é unico in un dato momento,
ma puó essere riutilizzato in seguito per un altro processo.




                                                               – p. 3
Processi - 2
I processi sono organizzati gerarchicamente: ogni processo
ha un processo padre (che é il processo che ne ha chiesto
l’attivazione), ad eccezione del processo init. Due processi
figli dello stesso padre sono detti fratelli. Un processo figlio
diventa orfano quando il processo padre termina (magari
inaspettatamente), e viene “adottato” dal processo init.




                                                                 – p. 3
File - 1
Sotto Linux, come in ogni Unix, tutto é un file.
Tutti i dispositivi fisici collegati al sistema sono visti come
dei file a cui si puó accedere in lettura o in scrittura.
I nomi dei file sono sensibili al maiuscolo (filename é
diverso da FILENAME). I file sono contenuti in directory, e
la directory radice é indicata con /. Nei nomi di file le
directory sono separate dal simbolo /.




                                                                 – p. 3
File - 2
Tutti i filesystem e i dispositivi montati sono visti come
sottodirectory della directory radice.
Ad esempio, il contenuto di un floppy potrebbe essere
presente nella directory /mnt/floppy: quindi le operazioni di
lettura e scrittura dei file in quella directory
leggeranno/modificheranno i file sul floppy.




                                                               – p. 3
File - 3
Ad ogni file sono associate molte informazioni, come ad
esempio:
    Data di creazione, ultimo accesso, ultima modifica
    Proprietario del file
    Permessi sul file
La combinazione dei permessi sul file, sulla directory in cui
il file é contenuto (e sulle superdirectory in cui é contenuta
la directory) definiscono quali operazioni un utente puó
compiere sul file.




                                                                – p. 3
File - 4
Esistono diversi tipi di file:
 (regular) file
 directory
 link
 socket
 named pipe (FIFO)
 block device
 character device




                                      – p. 3
Gerarchia dei file - 1
Gli standard di Linux prevedono una specifica gerarchia di /:


 /etc Contiene la configurazione del sistema
 /bin Contiene programmi eseguibili (per utenti)
 /sbin Contiene programmi eseguibili che possono
    richiedere permessi speciali)
 /home Contiene le home directory degli utenti
 /root Contiene l’home directory dell’utente root
 /tmp Directory temporanea



                                                               – p. 3
Gerarchia dei file - 2
/usr Contiene eseguibili e dati per gli utenti
/opt Riservata a software proprietario
/dev Contiene i device del sistema
/proc Contiene il proc filesystem
/var File di log e informazioni varie




                                                 – p. 3
La directory /dev - 1
I file presenti in /dev rappresentano tutti i dispositivi
collegati o collegabili al sistema. La lettura o scrittura su
questi file si concreta nella lettura o nella scrittura
direttamente sui dispositivi che rappresentano.
Quindi ad esempio scrivere sulla scheda audio significa
mandare in play un file, e leggere dal file che rappresenta la
tastiera significa acquisire il carattere premuto dall’utente
(se c’é).




                                                                – p. 3
La directory /dev - 2
I dischi EIDE sono rappresentati secondo questa
numerazione:
 /dev/hda Il master della catena primaria
 /dev/hdb Lo slave della catena primaria
 /dev/hdc Il master della catena secondaria
 /dev/hdd Lo slave della catena secondaria
Questi nomi possono essere seguiti da un numero che
indica la partizione (primaria od estesa):
 /dev/hda1 Prima partizione di /dev/hda
 /dev/hdb2 Seconda partizione di /dev/hdb



                                                      – p. 4
La directory /dev - 3
Altri elementi in questa directory sono:
 /dev/sd... i dischi SCSI (adottano un analogo schema
    <disco><partizione> di quelli EIDE)
 /dev/tty<...> sono associati alle console
 /dev/fd... floppy disk
 /dev/usb la directory per i dispositivi USB




                                                        – p. 4
La directory /dev - 4
/dev/par... le porte parallele
/dev/ttyS... le porte seriali (compreso il mouse)
/dev/zero la lettura da questo file ritorna sempre e solo 0
/dev/null un file di dimensione nulla su cui ogni
   operazione di scrittura ha successo
/dev/random un file che si comporta come un generatore
   di numeri casuali




                                                             – p. 4
Il filesystem /proc - 1
La directory /proc contiene il filesystem /proc. I file
contenuti in questa directory permettono di:
1. acquisire informazioni sul sistema
2. fare il tuning del kernel
La directory /proc risiede tutta in memoria, e il contenuto
dei file viene creato dinamicamente quando vengono letti.




                                                              – p. 4
Il filesystem /proc - 2
Il tuning dinamico dei parametri del kernel viene effettuato
scrivendo i valori desiderati all’interno di file contenuti nella
directory /proc/sys.
I parametri correnti sono visualizzabili leggendo gli stessi
file.
I file del tipo /proc/<nnnn> contengono informazioni sul
processo con PID pari a nnnn.




                                                                   – p. 4
Il filesystem swap
Linux utilizza di solito una partizione del disco come area di
swap. In questa area vengono allocate le pagine di
memoria dei processi attualmente sospesi, in modo tale da
lasciare spazio libero a processi in esecuzione che hanno
bisogno di piú memoria.
É possibile avere piú partizioni di swap per aumentare le
prestazioni, e viceversa avere un file come file di swap.
Lo swap dovrebbe avere una dimensione pari ad 1-2 volte
la memoria disponibile, ma comunque non oltre i 2 GB.




                                                                 – p. 4
Il filesystem tmpfs
Originariamente chiamato shmfs (Shared Memory FS), é
un filesystem che risiede completamente in memoria (sia
centrale che di swap), aumentando o riducendo le proprie
dimensioni a seconda della quantitá di dati in esso presenti.




                                                                – p. 4
Gli inode
Per ogni file presente viene definito un inode, che é la
struttura in cui sono memorizzati i metadati associati al file
(nome, proprietá, permessi, timestamp) e delle ulteriori
strutture per consentire un accesso diretto veloce ai dati del
file.




                                                                 – p. 4
I filesystem di Linux
Linux ha diversi filesystem nativi a disposizione:
1. ext2/ext3
2. Reiserfs
3. JFS
4. XFS
Tutti questi filesystem offrono le funzionalitá di base di un
filesystem Unix (proprietá e permessi dei file, gestione dei
metadati per ogni file con gli inode).




                                                               – p. 4
Il filesystem ext2/ext3 - 1
Il primo filesystem sviluppato per Linux è stato il filesystem
ext2. La sua evoluzione ext3 é con esso del tutto
compatibile, aggiungendo solo un file che utilizza come
journal: le operazioni di modifica dei dati e dei metadati su
disco vengono prima scritte nel journal e solo in un
secondo tempo trasferite su disco.




                                                               – p. 4
Il filesystem ext2/ext3 - 2
In questo modo si evita che una interruzione forzata del
sistema costringa a scansionare tutto il disco per
ripristinare la correttezza dei metadati (se possibile): in un
caso del genere é sufficiente riapplicare le modifiche
presenti nel journal file.
Si puó sempre passare da un filesystem ext2 ad uno ext3 e
viceversa.




                                                                 – p. 5
Il filesystem Reiserfs
É stato il primo filesystem di tipo journaled per Linux. Le
due funzionalitá aggiuntive piú importanti rispetto ad
ext2/ext3 sono:
    liste di controllo degli accessi a livello di file
    gestione efficiente delle directory con molti file




                                                             – p. 5
I filesystem XFS e JFS
Sono entrambi filesystem di tipo journaled:
 XFS é sviluppato da Sun. Ottimo nei file server, richiede
   indispensabilmente un gruppo di continuitá poiché
   effettua un notevole caching dei dati e dei metadati in
   memoria
 JFS sviluppato da IBM




                                                             – p. 5
I filesystem non nativi
Linux puó accedere in lettura (e in scrittura) a molti altri
filesystem, quali ad esempio:

    FAT, VFAT, NTFS, HPFS
    ISO9660, UDF
    BeOS, QNX




                                                               – p. 5
Quale filesystem usare?
La scelta del filesystem dipende molto dal tipo di utilizzo
della macchina:

    PC personali, piccoli server: ext3 oppure Reiserfs.
    mail server e file server: Reiserfs, XFS, JFS.
    server Oracle: ext3 (per suggerimento di Oracle
    stessa), OCFS, raw devices




                                                             – p. 5
Come partizionare il disco?
Un buon partizionamento del disco prevede sempre una
piccola partizione di boot, di tipo ext2 oppure ext3, in cui
allocare le immagini dei kernel da lanciare, posizionata
all’inizio del disco e con una dimensione di 100 MB.
Si possono quindi avere piú partizioni per le varie parti del
filesystem (ad esempio, una partizione per i dati degli
utenti), ed una partizione di swap.
L’installazione di tutti i programmi forniti con RedHat non
richiede piú di 5 GB. Oltre a questo bisogna aggiungere lo
spazio per applicativi esterni e per i dati utente.




                                                                – p. 5
Comandi su file: ls
Il comando ls (list) visualizza il contenuto di una directory.
ls senza parametri oppure ls . fa riferimento alla directory
corrente, mentre ls .. della sovradirectory ..
ls dirname riporta il contenuto della directory dirname (il
parametro passato può essere assoluto o relativo).
Alcuni parametri:
 -l per avere informazioni estese sui file;
 -R per visualizzare ricorsivamente il contenuto delle
   sottodirectory;
 -a per visualizzare anche i file che hanno un nome che
    comincia con .
 -i visualizza il numero dell’inode di ogni file;
I parametri sono combinabili in un unico switch (ls -lR).

                                                                 – p. 5
Comandi su file: pwd
Il comando pwd (Print Working Directory) mostra la
directory corrente.

pwd Mostra la directory corrente.




                                                     – p. 5
Comandi su file: cd
Il comando cd permette di cambiare directory.

cd dirname per spostarsi nella directory dirname.
cd .. per spostarsi nella directory superiore (lo spazio é
importante!).
cd . rimane nella directory corrente.
cd torna nella home directory dell’utente (equivale cioé a
cd $HOME).




                                                             – p. 5
Comandi su file: mkdir
Il comando mkdir crea una directory.

mkdir dirname crea la directory dirname.
mkdir -p piu/livelli/insieme crea la directory piu se non
esiste, quindi la sottodirectory livelli se non esiste, quindi la
directory insieme se non esiste.




                                                                    – p. 5
Comandi su file: rm
Il comando rm permette di rimuovere uno o piú file.
rm file rimuove il file senza chiedere conferma.
rm -i file rimuove il file chiedendo una conferma interattiva.
E’ conveniente definire un alias in modo tale che ogni volta
che viene invocato il comando rm si aggiunga in
automatico questo switch.
rm dirname -fR rimuove una directory e tutti i file in essa
contenuti.

I file cosí cancellati non sono recuperabili.




                                                               – p. 6
Comandi su file: rmdir
Il comando rmdir rimuove una directory purché sia vuota (a
meno di uno switch che lo forzi altrimenti).

rmdir dirname rimuove la directory dirname se questa é
vuota.




                                                             – p. 6
Comandi su file: cp

Il comando cp permette di copiare un file.
cp sorgente destinazione copia il file sorgente in destinazione. I
nomi possono essere assoluti o relativi.
cp -R dirsor dirdest copia ricorsivamente la directory dirsor nella
directory dirdest.
cp -Rs dirsor dirdest invece di creare i file produce dei link.
cp -p sorgente destinazione copia e mantiene gli stessi
permessi, proprietá e timestamp del file.
Il parametro destinazione deve sempre essere presente; puó
essere il . per indicare la directory corrente.




                                                                      – p. 6
Comandi su file: mv
Il comando mv rinomina un file o lo sposta in un’altra
directory.

mv vecchio nuovo cambia il nome del file da vecchio a
nuovo.
mv *.c backup sposta tutti i file *.c nella directory backup.
mv dir1 dir2 sposta la directory dir1 in dir2.
Se il file destinazione esiste giá, viene sovrascritto. É quindi
consigliabile aggiungere lo switch -i che chiede nel caso
conferma dell’operazione (anche con un alias).




                                                                  – p. 6
Comandi su file: du
Il comando du (Directory Usage) permette di determinare
quanto spazio é occupato dai file di una directory e dalle
sue sottodirectory.

du dirname riporta lo spazio (in KB) usato dalla directory
dirname e da tutte le sottodirectory.
du -sh dirname riporta le informazioni in modo sintetico e
in formato piú humano.




                                                             – p. 6
Comandi su file: ln - 1
Il comando ln crea un link (hard o soft). Un hard link é a tutti
gli effetti lo stesso oggetto con un altro nome, quindi
cancellando l’hard link si cancella anche l’oggetto di
partenza.

ln file nome-link Il file file risulta accessibile anche con il
nome nome-link.
ln -s file nome-link Come sopra, ma il link creato é un soft
link.




                                                                   – p. 6
Comandi su file: ln - 2
ln -s dir1 nome-link la directory dir1 é ora accessibile
anche via nome-link.

Solo l’utente root puó creare hard link tra directory.




                                                           – p. 6
Comandi su file: fuser
Il comando fuser (File USER) riporta, per un file passato
come parametro sulla riga di comando, i PID dei processi
che hanno quel file aperto.

$ fuser CorsoLinux.ps
CorsoLinux.ps 3890 4500




                                                           – p. 6
Comandi su file: file
Il comando file riporta, per ogni file passato
come parametro sulla linea di comando, il tipo del file stesso.


file                  *
CorsoLinux.out:      empty
CorsoLinux.ps:       PostScript document text conforming at level 2.0
CorsoLinux.tex:      LaTeX       2e    document       text
archiviazione.tex:   ISO-8859 text, with CRLF line terminators
myprog               ELF 32-bit LSB executable, Intel 80386 [...]
foto.jpg             JPEG image data, JFIF standard 1.02, [...]




                                                                        – p. 6
Comandi su file: touch
Il comando touch imposta l’ora di ultima modifica di un file
all’ora corrente, se il file passato come parametro esiste.
Altrimenti crea un file con il nome dato di dimensione nulla.

touch filename aggiorna l’ora di ultimo accesso a filename
all’ora attuale, ovvero lo crea se non esiste.

Questo comando si rivela utile quando si vuole forzare la
ricompilazione di un sorgente che make non effettua in
quanto il corrispondente file .o é piú recente.




                                                               – p. 6
Comandi su file: locate, updatedb
Questo comandi permettono di ricercare un file (locate)
consultando un database di nomi di file aggiornato con
updatedb che deve quindi essere eseguito periodicamente.

locate tex ricerca tutti i file che hanno la stringa tex nel
nome o nel percorso.
locate "*d*.tex” é un criterio di ricerca piú complesso che
utilizza le virgolette per evitare l’espansione dei parametri
eseguita dalla shell.




                                                                – p. 7
Comandi su file: slocate
Il problema di locate é che permette ad un utente di
controllare quali file possiede un altro utente. Questa falla
di sicurezza é stata superata con slocate (secure-locate).
locate é un link verso slocate.
slocate -u crea il database.
slocate pippo ricerca tutti i file che hanno pippo nel nome
o nel percorso, e che sono accessibili all’utente che ha
invocato slocate.

E’ possibile non indicizzare alcune directory.




                                                               – p. 7
Comandi su file: find - 1
Il comando find permette di ricercare tutti i file che
soddisfano uno o piú criteri, ad esempio che abbiano una
certa dimensione, una stringa nel nome o nel percorso,
alcuni permessi, siano stati creati o modificati in un certo
arco di tempo, ... Sui file ottenuti é possibile compiere una
operazione specifica, che di default é stampare il nome del
file.

find / -name “*.c” ricerca tutti i file che si trovano sotto / e
che terminano in .c.




                                                                 – p. 7
Comandi su file: find - 2
find / -perm 0777 ricerca tutti i file che hanno tutti i
permessi di scrittura, lettura ed esecuzione impostati. Lo 0
iniziale indica che si é adottata la notazione ottale.
find / -name “*.[ch]” ricerca tutti i file sotto / che
terminano in .c oppure in .h
find / -name “*.txt” -print -exec cat { } ; ricerca tutti i file
che terminano in .txt, ne stampa il nome (-print) e su
ognuno di essi esegue il comando cat, con parametro il
nome del file.




                                                                  – p. 7
Comandi su file: grep - 1
Il comando grep permette di ricercare delle stringhe
all’interno di uno o piú file di testo. Se la stringa viene
trovata viene mostrato il nome del file che la contiene e la
riga.

grep saluti filename ricerca la stringa saluti all’interno del
file filename.
grep inode *.c cerca la stringa inode in tutti i file .c della
directory corrente.




                                                                – p. 7
Comandi su file: grep - 2
grep -v inode source.c mostra tutte le righe di source.c
che non contengono la stringa inode. grep -lv inode *.c
mostra tutti i nomi di file .c che non contengono la stringa
inode.
grep -5 inode *.c scrive, per ogni occorrenza della stringa
inode all’interno di un file .c, le 5 righe seguenti.
grep -B 10 inode *.c come sopra, ma mostra 10 righe
precedenti.




                                                              – p. 7
Comandi su file: chmod - 1
Il programma chmod consente di impostare i permessi su
uno o più file. I permessi sono r per la lettura, w per la
scrittura e x per l’esecuzione, e si applicano al proprietario
del file (u per user), al gruppo del proprietario (g per group)
e al resto del mondo (o per others).

chmod ugo+r file1 file2 assegna il permesso di lettura al
proprietario del file, al suo gruppo e a tutti gli altri.
chmod o-r file revoca il permesso di lettura del file al resto
del mondo.




                                                                 – p. 7
Comandi su file: chmod - 2
chmod u=rw file imposta il permesso di lettura e scrittura
del file al proprietario, ma non quello di esecuzione. Gli altri
permessi non sono toccati.
chmod o-rwx file toglie i permessi di lettura, scrittura ed
esecuzione al resto del mondo.




                                                                  – p. 7
Comandi su file: chmod - 3
Le modalita’ possono anche essere espresse con la
notazione ottale, usando 3 cifre (una per user, group ed
other). Ogni cifra indica il totale dei permessi che
user/group/other ha sul file, pesati come:
 1 esecuzione
 2 scrittura
 4 lettura
quindi per dare il permesso di lettura (2) e scrittura (4) a
user, group ed other il comando sará: chmod 666 file




                                                               – p. 7
Comandi su file: chmod - 4
Invece per dare lettura, scrittura ed esecuzione al
proprietario, lettura al gruppo e nessun permesso agli altri il
comando sará: chmod 740 file.

chmod -R <permessi> opera ricorsivamente sulle
directory.




                                                                  – p. 7
Comandi su file: chown
Il comando chown permette di cambiare l’utente
proprietario o il gruppo proprietario di un file.
chown pippo:pluto file Il file file diventa di proprietá
dell’utente pippo e del gruppo pluto.
chown pippo file Il file file diventa di proprietá dell’utente
pippo.
chown -R pippo * Tutti i file della directory corrente e delle
subdirectory diventano di proprietá dell’utente pippo.




                                                                – p. 8
Operazioni su dischi: /etc/fstab - 1

Il file /etc/fstab contiene la corrispondenza tra dispositivi fisici e
punti di montaggio (mount point), specificando inoltre il tipo del file
system e le opzioni di montaggio.
Il formato delle righe presenti in questo file é:

DispositivoFisico MountPoint TipoDiFilesystem Opzioni Dump OrdineCheck




                                                                         – p. 8
Operazioni su dischi: /etc/fstab - 2
Dove si ha:
 DispositivoFisico é il nome del dispositivo (es: /dev/hda);
 MountPoint é la directory che mapperá il contenuto del
   dispositivo fisico;
 TipodiFilesystem é il tipo del file system (ext2, ext3, swap,
    VFAT, iso9660,proc);
 Dump specifica se il contenuto della partizione deve
   essere processato da dump;
 OrdineCheck specifica l’ordine in cui il file system deve
   essere analizzato al boot;




                                                                – p. 8
Operazioni su dischi: fstab - 3
Esempio di /etc/fstab:

/dev/hdb1    /            ext3    defaults              11
/dev/hda1    /msdos       vfat    noauto                00
/dev/hdb2    swap         swap defaults                 00
/dev/hda2    swap         swap defaults                 00
/dev/cdrom   /mnt/cdrom   iso9660 noauto,owner,kudzu,ro 0 0
/dev/scd0    /mnt/cdrw    iso9660 noauto,user           00
none         /dev/pts     devpts gid=5,mode=620         00
none         /proc        proc    defaults              00
none         /dev/shm     tmpfs defaults                00
L’elenco completo delle opzioni é nella pagina di manuale di
mount.



                                                               – p. 8
Operazioni su dischi: mount - 1
Il comando mount permette di montare un file system.
mount /msdos monta la directory /msdos se esiste una
entrata nel file /etc/fstab che la descrive.
mount -t FSType -o options device dir monta il
dispositivo device nella directory dir con le relative opzioni
ed il filesystem previsto. Puó essere usato quando in
/etc/fstab non é presente l’entrata desiderata.
In ogni caso é possibile montare un file system solo se la
directory corrispondente esiste giá, altrimenti bisogna
crearla con mkdir.




                                                                 – p. 8
Operazioni su dischi: mount - 2
Una opzione particolarmente utile di mount permette di
montare un file come se fosse un disco: in questo modo si
puó ad esempio montare una immagine ISO9660 per
verificarne il contenuto prima di procedere alla
masterizzazione.

mount -t iso9660 -o loop prova.iso /mnt/cdrom/ monta il
file prova.iso nella directory /mnt/cdrom.

mount mostra tutti i file system montati.




                                                           – p. 8
Operazioni su dischi: umount - 1
Il comando umount (scritto senza la n, é un errore di
ortografia che si tramanda da decenni) smonta un file
system. Affinché questo sia possibile occorre che nessun
processo stia lavorando con quel file system (ad esempio
avendo dei file aperti in lettura o scrittura oppure avendo
una delle directory del file system come directory corrente).

umount /mnt/cdrom smonta il file system mappato su
/mnt/cdrom.




                                                               – p. 8
Operazioni su dischi: umount - 2
Quindi se si vuole montare un floppy per leggerne o
modificare il contenuto occorre:
1. Inserire il floppy nel lettore
2. Montare il floppy (mount /mnt/floppy)
3. Compiere le operazioni dovute
4. Smontare il floppy (umount /mnt/floppy)
L’ultimo punto é essenziale. Linux puó tenere in memoria (e
scrivere in un secondo tempo) i dati modificati e solo
smontando il dispositivo si forza il trasferimento degli stessi
su disco.




                                                                  – p. 8
Operazioni su dischi: sync
Con questo comando si chiede al sistema di sincronizzare il
contenuto della memoria con i dati su disco, ovvero di
scrivere fisicamente su disco ogni dato (contenuto di file) e
metadato (superblocchi, inodes,...) modificato.

sync sincronizza la cache di tutti i dischi.




                                                              – p. 8
Operazioni su dischi: /etc/mtab
Il file /etc/mtab contiene l’insieme dei file system
correntemente montati. É quindi un file aggiornato
dinamicamente dal sistema operativo.
$ cat /etc/mtab

/dev/hdb1 / ext3 rw 0 0
none /proc proc rw 0 0
/dev/hdb6 /tmp var ext2 rw 0 0
none /dev/pts devpts rw,gid=5,mode=620 0 0
none /dev/shm tmpfs rw 0 0




                                                     – p. 8
Operazioni su dischi: fdformat
Con questo comando si puó formattare a basso livello un
floppy.

fdformat /dev/fd0 per formattare il primo floppy.
fdformat /dev/fd0h720 formatta il floppy a 720 KB di
capacitá.




                                                          – p. 9
Operazioni su dischi: mkfs
Il comando mkfs crea un file system di tipo specificato su
un dispositivo fisico.
mkfs -t FSType <opzioni> dispositivo crea un file system
di tipo FSType con le eventuali opzioni nel dispositivo
dispositivo.
mkfs -t ext3 /dev/hdb3 crea un file system di tipo ext3 nel
dispositivo fisico /dev/hdb3.
Il contenuto del dispositivo viene perso per sempre.




                                                             – p. 9
Operazioni su dischi: mkisofs

Il comando mkisofs viene utilizzato per creare una immagine ISO9660
(con eventuali estensioni Joliet e/o Rock Ridge).
mkisofs -o immagine.iso /home/user/ crea un file immagine.iso
contenenente tutti i file della directory /home/user, comprese le
sottodirectory. L’immagine ottenuta puó essere poi trasferita su CD-RW
con cdrecord. Alcune opzioni sono:

 -f segue i link simbolici, sostituendo quindi al link il contenuto effettivo.

 -l consente nomi di file fino a 31 caratteri (viola ISO9660).

 -J aggiunge informazioni per Joliet.

 -R usa le estensioni Rock Ridge.

 -r come sopra ed imposta proprietari e permessi dei file in modo
     conveniente.

                                                                                 – p. 9
Operazioni su dischi: dd - 1
Il comando dd (Data Dump) permette di leggere e
convertire il contenuto di un file.

dd if=/dev/hda count=4 mostra i primi quattro settori del
disco /dev/hda (if sta per input file).
dd if=/dev/hda of=/dev/hdb copia tutto il contenuto di
/dev/hda in /dev/hdb (of sta per output file).




                                                            – p. 9
Operazioni su dischi: dd - 2
dd if=/dev/zero of=/dev/hda sostituisce il contenuto di
/dev/hda con una sequenza di 0.
dd if=immagine of=/dev/fd0 bs=512 count=2880
conv=sync Copia una immagine di 1.44MB sul floppy
/dev/fd0; si tratta di 2880 settori da 512 byte l’uno, e
completa ogni blocco con degli spazi (sync).
dd if=dati-iniziali.txt of=dati-finali.txt CONV=lcase
converte il file dati-iniziali.txt in dati-finali.txt sostituendo a
tutte le maiuscole le minuscole.




                                                                    – p. 9
Operazioni su dischi: dump
Il comando dump permette di effettuare backup
incrementali di un intero filesystem.
dump -0u / -f /dev/st0 effettua un dump completo (0)
scrivendo in /etc/dumpdates l’esito della operazione (u) ed
usando come dispositivo di backup /dev/st0 (cartuccia a
nastro).
dump -1u -f /dev/st0 come sopra, ma copiando solo i file
cambiati dall’ultimo backup completo.
dump -2u -f /dev/st0 come sopra, ma copiando solo i file
cambiati dall’ultimo backup di livello 1.




                                                              – p. 9
Operazioni su dischi: restore
Il comando restore ripristina i file prodotti con un backup dal
comando
restore rf /dev/st0 ricrea il file system leggendolo da
/dev/st0
Il programma puó operare in modo interattivo, e crea il file
restoresymtable per passare informazioni tra i vari ripristini.




                                                                  – p. 9
Operazioni sui dischi: fsck
Il programma fsck verifica e controlla un file system Linux.
fsck -t FSType dispositivo <opzioni> verifica il file system
montato su dispositivo considerandolo di tipo FSType e con
le eventuali opzioni. Si tratta di un front-end per i vari
programmi fsck.<FSType>.
Mentre l’operazione di verifica di un file system ext2 puó
richiedere anche ore (dipendendo dalla dimensione del file
system) su un file system ext3 occorrono pochi secondi (il
tempo di riapplicare il journal).




                                                             – p. 9
Comandi su file di testo: cat
Il comando cat (concatenate) visualizza il contenuto di uno
o piú file di testo.

cat file.txt visualizza il file file.txt.
cat file1 file2 file3 visualizza file1 e subito a seguire file2 e
subito a seguire file3.
cat - -number file.txt visualizza il file file.txt numerandone
le righe.




                                                               – p. 9
Comandi su file di testo: zcat
Il comando zcat mostra il contenuto di un file di testo
compresso.

zcat file.txt.gz file2.txt.gz




                                                         – p. 9
Comandi su file di testo: tac
Il comando tac visualizza uno o piú file di testo in ordine
inverso, partendo dall’ultima riga e procedendo verso la
prima.

tac file.txt visualizza le righe del file file.txt in ordine
inverso partendo dall’ultima.




                                                             – p. 10
Comandi su file di testo: more
Il comando more mostra il contenuto di uno o piú file di
testo, mostrando una pagina per volta. Premendo invio si
avanza di una riga, premendo spazio si va avanti di una
pagina.

more file.txt




                                                           – p. 10
Comandi su file di testo: less
Il comando less permette non solo di avanzare (come
more) ma anche di tornare indietro. Si usano a tal fine i tasti
cursore e i PgUp e PgDown. Con il tasto / si puó effettuare
una ricerca di testo all’interno del file visualizzato (andando
in avanti con n e all’indietro con N).

less file.txt




                                                                 – p. 10
Comandi su file di testo: tail
Il comando tail permette di vedere le ultime righe ( o gli
ultimi bytes) di un file di testo. Se il file cresce, con l’opzione
-f si visualizzano le aggiunte.
tail -30 file.txt visualizza le ultime 30 righe del file file.txt.
tail -f file.txt visualizza la parte finale del file file.txt e la
aggiorna una volta al secondo.
L’opzione -f é particolarmente utile per monitorare i file di
log del sistema.




                                                                    – p. 10
Comandi su file di testo: head
Il comando head visualizza le prime righe (o i primi bytes)
di un file di testo.

head pippo.txt visualizza le prime 10 righe (10 é il valore
di default) del file pippo.txt.
head -50 pippo.txt visualizza le prime 50 righe del file
pippo.txt.




                                                              – p. 10
Comandi su file di testo: wc
Il comando wc conta quanti caratteri, parole o righe
compongono un file di testo.

wc -l pippo.txt Ritorna di quante righe é costituito il file
pippo.txt.
wc -m pippo.txt Ritorna di quanti caratteri é costituito il file
pippo.txt.
wc -w pippo.txt Ritorna di quante parole é costituito il file
pippo.txt.




                                                                  – p. 10
Comandi su file di testo: uniq
Il comando uniq sostituisce a piú righe uguali consecutive
una sola riga.

uniq pippo.txt Produce in output il file pippo.txt con una
sola riga al posto di piú righe uguali consecutive.
uniq -c pippo.txt Per ogni riga in output visualizza a
quante righe uguali consecutive corrisponde.
E’ possibile fare il confronto anche su parti di una riga.




                                                             – p. 10
Comandi su file di testo: sort
Il comando sort ordina uno o piú file di testo secondo vari
criteri (lessicografico,numerico,mensile), distinguendo o
meno tra maiuscole e minuscole, considerando tutte le
righe oppure solo una porzione delimitata.

sort -g valori.txt Produce in output il file valori.txt ordinato
in modo numerico, considerando tutta la riga.
sort -n - -key 5,5 Ordina numericamente in base al valore
del quinto campo (i campi sono separati da un delimitatore,
di default é lo spazio)




                                                                  – p. 10
Comandi su file di testo: split
Il comando split scompone un file in piú componenti, aventi
una dimensione massima specificata (come numero di
bytes o numero di righe).

split grande.dat - -bytes=1400000 Scompone il file
grande.dat in file xaa xab xac ognuno avente dimensione
massima di 1400000 bytes.




                                                             – p. 10
Comandi su file di testo: paste
Il comando paste produce un file di testo le cui righe sono
la concatenazione delle righe dei file di input.
cat primo
a
b
cat secondo
1
2

paste primo secondo
a1
b2




                                                             – p. 10
Comandi su file di testo: join
Il comando join effettua il join di due o piú file di testo,
permettendo di specificare quale é la chiave da usare.

$ cat primo
a     a1
b     b1
c     c1
$ cat secondo
a     aaaa
b     bbbb
d     dddd
$ join primo secondo
a      a1    aaaa
b      b1    bbbb


                                                              – p. 11
Comandi su file di testo: tr - 1
Il comando tr (translate) sostituisce una sequenza di
caratteri con un’altra. Il file su cui operare viene passato su
standar input, e l’output é su standard output.
tr a A < file.txt Produce in output il file file.txt dove ogni a é
stata sostituita con A.
tr abc ABC < file.txt Come sopra, ma in piú sostituendo b
con B e c con C.
tr a-z A-Z < file.txt Come sopra ma facendo il maiuscolo di
tutte le lettere dell’alfabeto.




                                                                  – p. 11
Comandi su file di testo: tr - 2
Con la notazione [:CLASS:] si intende una classe di
caratteri, ad esempio:
 alpha caratteri alfabetici
 alnum caratteri alfanumerici
 lower caratteri minuscoli
 upper caratteri maiuscoli
 blank spazi
 digit cifre




                                                      – p. 11
Comandi su file di testo: tr - 3
Lo switch - -d cancella i caratteri passati come parametro,
mentre - -s sostituisce un carattere ripetuto piú volte
consecutivamente con una sola copia.
tr -d [:blank:] < file.txt cancella tutti gli spazi dal file file.txt
tr -s [:alpha:] < file.txt sostisuisce alle sequenze AA, AAA,
AAA, ... Z, ZZ, ZZZ le sequenze A, ... Z
tr -d aeiou < file.txt cancella le vocali dal file file.txt.




                                                                     – p. 11
Comandi per archiviazione: compress
Il comando compress comprime un file. Il file ottenuto ha un
nome dato dal nome del file originario seguito
dall’estensione .Z, ed il file originario viene rimosso.
compress file.dat Comprime il file file.dat sostituendolo
con il file compresso file.dat.Z

L’algoritmo di compressione utilizzato é il meno efficiente
tra quelli disponibili.




                                                             – p. 11
Comandi per archiviazione: uncompress
 Il comando uncompress decomprime un file compresso con
 compress, sostituendo al file compresso la versione
 decompressa.

 uncompress file.dat.Z decomprime il file file.dat.Z
 sostituendolo con il decompresso file.dat.




                                                         – p. 11
Comandi per archiviazione: gzip
Il comando gzip comprime un file usando lo stesso
algoritmo di PKZIP/WinZip, con cui i file prodotti sono
compatibili. I file compressi hanno l’estensione .gz

gzip file.dat comprime il file file.dat producendo il file
file.dat.gz e rimuovendo il file originario.




                                                         – p. 11
Comandi per archiviazione: gunzip
Il comando gunzip decomprime un file compresso con gzip.

gunzip file.dat.gz decomprime file.dat.gz sostituendolo
con la versione decompressa file.dat.
gunzip -l file.dat.gz riporta informazioni sul contenuto del
file compresso file.dat.gz.




                                                              – p. 11
Comandi per archiviazione: zip ed unzip
 Questi due comandi permettono di comprimere e
 decomprimere un file in modo tale da essere compatibili
 con PKZIP/Winzip.

 unzip -l file.zip Riporta il contenuto del file compresso
 file.zip




                                                           – p. 11
Comandi per archiviazione: bzip2
Questo é il piú efficiente compressore disponibile, al costo
di un tempo necessario per comprimere il file molto
maggiore rispetto a gzip. I file prodotti hanno l’estensione
.bz2.

bzip2 file.dat Comprime il file file.dat sostituendolo con la
versione compressa file.dat.bz2
bzip -9 file.dat Come sopra, comprimendo al massimo (ed
impiegando piú tempo)




                                                              – p. 11
Comandi per archiviazione: bunzip2
Il comando bunzip2 decomprime un file compresso con
bzip2.

bunzip2 file.dat.bz2 Decomprime il file file.dat.bz2
sostituendolo con la versione decompressa file.dat.




                                                     – p. 12
Comandi per archiviazione: tar - 1
Il comando tar (Tape ARchiver) raggruppa piú file in un
unico archivio o viceversa espande un archivio nei suoi file
costituenti. L’archivio ottenuto puó essere compresso con
compress, gzip o bzip2.
Tipicamente il nome dei file di archivio ha l’estensione .tar,
seguito da:
 .Z se il l’archivio é stato compresso con compress
 .gz se l’archivio é stato compresso con gzip
 .bz2 se l’archivio é stato compresso con bzip2
ottenendo quindi ad esempio un archivio dal nome
file.tar.gz (nel caso di compressione con gzip si usa anche
la forma contratta file.tgz).


                                                                – p. 12
Comandi per archiviazione: tar - 2
Per visualizzare il contenuto di un archivio si usa lo switch
- -list (forma contratta: t).

tar - -list - -file archivio.tar
tar tf archivio.tar
L’opzione - -file indica come l’archivio sia passato come
parametro su linea di comando e non da standard input. Il
nome del file é in tal caso il parametro immediatamente
successivo.




                                                                – p. 12
Comandi per archivazione: tar - 3
Se l’archivio é compresso con gzip, si aggiunge l’opzione
- -gzip (forma contratta: z).

tar - -list - -gzip - -file archivio.tar.gz
tar tfz archivio.tar.gz

L’opzione - -verbose (v) mostra ulteriori informazioni sui file
che fanno parte dell’archivio (dimensione, proprietà,
permessi).




                                                                 – p. 12
Comandi per archiviazione: tar - 4
Per estrarre un archivio si usa l’opzione - -extract (forma
contratta: x).

tar - -extract - -file archivio.tar
tar xf archivio.tar.gz
tar - -extract - -gzip - -file archivio.tar.gz
tar xfz archivio.tar.gz




                                                              – p. 12
Comandi per archiviazione: tar - 5
Se l’archivio é stato compresso con bzip2 lo switch da
utilizzare é - -bzip2 (forma contratta: j).

tar - -extract - -bzip2 - -file archivio.tar.bz2
tar xfj archivio.tar.bz2




                                                         – p. 12
Comandi per archiviazione: tar - 6
Per creare un archivio si usa l’opzione -create (forma
contratta: c). I file che compongono l’archivio vengono
passati da linea di comando. Le directory sono processate
ricorsivamente.
tar - -create - -gzip - -file archivio.tar.gz file1 file2 mydir
tar czf archivio.tar.gz file1 file2 mydir

In questo caso l’opzione - -verbose (v) mostra i nomi dei
file mano mano sono aggiunti.




                                                               – p. 12
Shell: introduzione - 1
La shell é una interfaccia tra il sistema operativo e l’utente,
il quale sottomette al sistema dei programmi da eseguire
tramite la shell.
Esistono numerose shell per Unix/Linux:
 Bourne Shell (sh)
 C-Shell (csh)
 Korn Shell (ksh)
 Bourne Again Shell (bash)
Queste shell hanno molti punti in comune, differenziandosi
per come impostano le variabili di ambiente e le funzioni
predefinite.



                                                                  – p. 12
Shell: introduzione - 2
In tutti i casi, le shell operano a riga di comando: l’utente
scrive una riga in cui specifica il programma da eseguire, gli
eventuali parametri, la modalità di esecuzione, e la invia
alla shell.

$ programma param1 param2 param3




                                                                – p. 12
Shell: introduzione - 3
Il programma da eseguire puó essere interno alla shell
(come ad esempio alias per Bash) o meno. Se é esterno
puó essere specificato per percorso assoluto (/sbin/ifconfig)
oppure solo con il nome: in tal caso viene ricercato tra tutte
le directory presenti nel percorso di ricerca, definito dalla
variabile di ambiente PATH.




                                                                 – p. 12
Shell: introduzione - 4
Due funzionalitá presenti in Bash sono:
 Completion Tab: se si preme il tasto tab mentre si sta
   scrivendo un nome di file o un comando la shell lo
   completa, se c’é una scelta univoca; altrimenti
   ripremendo tab mostra tutte le alternative possibili;
 history: usando i tasti cursore su e giù é possibile vedere
    l’elenco dei comandi impartiti. Tale elenco é riportato
    nel file .bash_history dell’home directory.




                                                               – p. 13
Shell: variabili di ambiente
Le variabili di ambiente sono impostate con il comando
export.
export CORSO=linux

e se ne puó accedere al valore premettendo al nome il
simbolo $:
$ echo $CORSO
linux




                                                         – p. 13
Shell: alias
Un alias del tipo:
alias rm=”rm -i”

fa sì che ogni volta che si esegue il comando rm venga in
realtá eseguito il comando rm -i, quindi ad esempio rm a b
c diventerá un piú sicuro rm -i a b c.

Alias e variabili di ambiente sono specifati nei file .bashrc e
.bash_profile dell’home directory.




                                                                 – p. 13
Shell: caratteri speciali: ? e * - 1
I caratteri * e ? sono utilizzati quando, nello specificare dei
nomi di file come parametri di un comando, si vogliono
indicare tutti quei file che hanno una certa struttura nel
nome.

Se l’utente chiede di eseguire $ programma *.txt la shell
chiederá al sistema operativo di eseguire $ programma
primo.txt secondo.txt lettera.txt ... se nella directory
corrente esistono i file primo.txt, secondo.txt, lettera.txt,...




                                                                  – p. 13
Shell: caratteri speciali: ? e * - 2
In modo analogo $ programma dati*dat potrebbe essere
espansa in $ programma dati1.dat dati2.dat dati.dat
dati-finali.dat se questi file esistono nella directory
corrente.

In modo analogo $ programma /usr/l*/a viene espanso in
$ programma /usr/lib/a /usr/local/a /usr/libexec/a




                                                         – p. 13
Shell: caratteri speciali: ? e * - 3
Il carattere ? invece sostituisce un solo carattere.

$ programma dati?.dat viene espanso in
$ programma dati1.dat dati2.dat




                                                       – p. 13
Shell: caratteri speciali: ? e * - 4
Se si vuole evitare l’espansione effettuata dalla shell,
occorre racchiudere il parametro contenente i caratteri
speciali tra doppi apici.
$ programma *tex viene espanso in
$ programma archiviazione.tex hardware.tex ...
mentre $programma “*tex” non viene espanso, quindi il
programma invocato riceve come primo parametro la
stringa *tex




                                                           – p. 13
Shell: redirezione - 1
La redirezione é un meccanismo per cui l’output (o l’input)
di un comando viene inviato (prelevato) da un file, o da un
altro comando.
$programma > risultato Invia l’output di programma al file
risultato; questo file viene azzerato se giá esistente.
$programma » risultato Aggiunge l’ouput di programma al
file risultato.




                                                              – p. 13
Shell: redirezione - 2
In modo analogo si puó fornire come input di un programma
un file giá esistente.
$programma < argomento
Un caso tipico di utilizzo di questa funzionalitá si ha quando
programma é un server a cui si vogliono inviare i comandi
definiti in argomento.




                                                                 – p. 13
Shell: redirezione - 3
Si puó scegliere di redirezionare non lo standard output di
un programma ma il suo standard error.

$ programma 2> /dev/null esegue il programma inviando
lo standard error sul file /dev/null, ovvero senza mostrare a
video i messaggi di errore.
É possibile redirezionare due o piú tra standard input,
standard output e standard error in contemporanea:
$programma > risultato < argomenti 2> errori.




                                                               – p. 13
Shell: redirezione - 4
L’ultima e piú potente possibilitá é quella che prevede di
utilizzare l’output di un programma come l’input di un altro
programma.

$ programma1 | programma2 l’output del programma1
diventa l’input del programma programma2. E’ possibile
concatenare piú programmi in questo modo, ognuno con i
propri parametri.




                                                               – p. 14
Shell: esecuzione in background
Per eseguire un processo in background occorre terminare
la riga di comando con il simbolo &. In questo modo la
console continua ad essere disponibile per eseguire altri
programmi.
$ programma & esegue programma in background.
La redirezione non viene effettuata automaticamente,
quindi potrebbe essere necessario specificare l’output e
l’input, per non “sporcare” la console.




                                                            – p. 14
Shell: esecuzione con && e ;
Una riga del tipo:
$ programma1 && programma2
causerá l’esecuzione di programma1, e solo se questo
programma termina con successo verrá quindi eseguito
programma2.
$ programma1 ; programma2
causa l’esecuzione di programma1 e quindi di programma2.




                                                           – p. 14
Shell: umask
Con il comando umask si puó leggere od impostare la
modalitá con cui vengono creati i file. I valori restituiti sono
espressi secondo la stessa sintassi di chown.
umask mostra la modalitá di creazione standard dei file.
umask -S come sopra, ma in modo simbolico.
umask o-rwx toglie tutti i permessi al resto del mondo.




                                                                  – p. 14
Utenti: /etc/passwd - 1
Il file /etc/passwd contiene l’elenco degli account presenti
nel sistema. La struttura del file é la seguente:


account password UID GID GECOS directory shell
L’utente root ha sempre UID e GID pari a 0.
Gli utenti con UID inferiore a 99 sono account di sistema.




                                                              – p. 14
Utenti: /etc/passwd - 2
Il significato dei campi é il seguente:
 account identificativo dell’utente
 password la password (se non si usano shadow
   password)
 UID lo User ID dell’utente
 GID il Group ID del gruppo primario dell’utente
 GECOS informazioni descrittive (es. nome completo)
 directory l’home directory dell’utente
 shell la shell attivata con il login
Se come shell é indicata /sbin/nologin, /bin/false o simili,
l’utente non puó mai accedere al sistema con un login.


                                                               – p. 14
Utenti: /etc/passwd - 3
Esempio di file /etc/passwd:
root:     x: 0:    0:    root:       /root:      /bin/bash
bin:      x: 1:    1:    bin:        /bin:       /sbin/nologin
daemon:   x: 2:    2:    daemon:     /sbin:      /sbin/nologin
...
ftp:      x: 14:   50:   FTP User:   /var/ftp:   /sbin/nologin
...
apache:   x: 48:   48:   Apache:     /var/www:   /bin/false
...
paolo:    x: 500: 500: :            /home/paolo: /bin/bash
mario:    x: 501: 501: Mario Rossi: /home/mario: /bin/bash
(gli spazi sono stati aggiunti per chiarezza).




                                                                 – p. 14
Utenti: /etc/passwd - 3
Nell’esempio precedente le password cifrate sono indicate
con delle x. Questo perché é presente il meccanismo delle
shadow password: le password (cifrate) sono riportate nel
file /etc/shadow, in modo da impedire attacchi a forza bruta
per decifrare le password ( /etc/passwd deve essere
leggibile a tutti, mentre /etc/shadow è accessibile solo a
pochi processi).
É fortemente consigliato attivare il meccanismo delle
shadow password.




                                                              – p. 14
Utenti: passwd
Con il comando passwd si puó definire la propria password,
oppure modificare quella di un dato utente il cui username
é passato come parametro (avendo i permessi per farlo).




                                                            – p. 14
Utenti: su
Il comando su (Set User) permette di cambiare la propria
identitá con quella di un altro utente, specificato su linea di
comando come parametro. Se non c’é alcun parametro si
intende root. Occorre fornire la password dell’utente
desiderato perché l’operazione possa compiersi.
Con su user si chiede di assumere l’identitá dell’utente
user, mentre con su - user si esegue inoltre tutta la fase di
login.




                                                                 – p. 14
Utenti: /etc/group - 1
Il file /etc/group contiene l’elenco di tutti i gruppi presenti nel
sistema. Per ogni gruppo viene riportato l’elenco degli
utenti che ne fanno parte.

groupname password GID user-list




                                                                     – p. 15
Utenti: /etc/group - 2
Il significato dei campi é il seguente:
 groupname il nome del gruppo
 password la password associata al gruppo (se presente e
   se non si usano le shadow password)
 GID il Group ID
 user-list l’elenco, separato da virgole, degli account che
   fanno parte del gruppo.




                                                              – p. 15
Utenti: /etc/group - 3
Esempio di un file /etc/group:
root:    x: 0:    root
bin:     x: 1:    root,bin,daemon
...
wheel:   x: 10: root
paolo:   x: 500:
In caso di shadow password le password dei gruppi sono
riportate cifrate in /etc/gshadow.
(tipicamente non si usano password per i gruppi).
RedHat usa, per ogni utente non di sistema, un gruppo che
ha l’utente come unico partecipante, e con GID uguale
all’UID.




                                                            – p. 15
Utenti: useradd
Il comando useradd consente di aggiungere un utente al
sistema.
useradd <-s shell> <-d home_dir> <-u UID> <-p
passwd> account




                                                         – p. 15
Utenti: userdel
Il comando userdel rimuove un utente dal sistema.

userdel account
Se si aggiunge lo switch -r viene rimossa anche la home
directory dell’utente e la mailbox.




                                                          – p. 15
Utenti: groupadd
Il comando groupadd aggiunge un gruppo al sistema.

groupadd <-g GID> group-name




                                                     – p. 15
Utenti: groupdel
Il comando groupdel rimuove un gruppo dal sistema, se non
ci sono piú utenti nel sistema appartenenti a quel gruppo.

groupdel <group-name>




                                                             – p. 15
L’ambiente grafico: X
La gestione dell’ambiente grafico viene realizzata mediante
piú programmi. Alla base c’é l’X Server, che realizza
l’astrazione dall’hardware grafico e mette a disposizione di
ulteriori programmi delle primitive come la gestione di
finestre a video.
L’ambiente si chiama X Window System, o anche X11, o
X11R6.




                                                              – p. 15
L’ambiente grafico: X server e X client
X é progettato per operare su rete, con un server che
accetta le richieste dell’utente inviandole a dei programmi
client di cui mostra l’output.
Il server puó operare su piattaforme diverse da Linux.




                                                              – p. 15
L’ambiente grafico: desktop manager
Sulle funzionalitá offerte da X sono poi definiti dei desktop
manager, come ad esempio Gnome e KDE. Ne esistono
molti altri, che hanno ad esempio richieste di memoria e di
processore meno esose.

É importante ricordare che il kernel, X, il desktop manager
sono tutte componenti distinte tra loro: gli ultimi due sono
solo degli insiemi di programmi applicativi a cui il kernel
offre dei servizi come a tutti gli altri.




                                                               – p. 15
L’ambiente grafico: /etc/X11/XF86Config
 Il file /etc/X11/XF86Config contiene la configurazione di X,
 specificando informazioni quali la scheda video, il monitor, i
 dispositivi di input, e l’uso o meno di alcune funzionalità
 come ad esempio i caratteri freetype.




                                                                 – p. 16
L’ambiente grafico: xf86config
E’ il programma che permette di generare il file di
configurazione per X. Le schede disponibili sono riportate
nella directory /usr/share/hwdata.




                                                            – p. 16
Stampare: /etc/printcap e printtool
Questo file contiene la descrizione di tutte le stampanti
collegate al sistema, insieme ad un loro nome simbolico da
utilizzare per indicarle.
Questo file puó essere modificato sia a mano che tramite
redhat-config-printer (printtool).




                                                             – p. 16
Stampare: CUPS
Il Common Unix Printing System é il nuovo sistema di
configurazione delle stampanti, che gestisce molto meglio
le stampanti non laser rispetto a printtool. La sua
configurazione avviene tramite una interfaccia web.




                                                           – p. 16
Stampare: lpr
Una volta che si é configurata la stampante, per stampare
da linea di comando si puó utilizzare il comando lpr, che
opera anche come uno spooler di stampa.
lpr -P laser file.ps stampa il file file.ps utilizzando la
stampante di nome laser.




                                                            – p. 16
Stampare: lpq
Il comando lpq mostra lo stato della coda di stampa per una
specificata stampante.

lpq -P laser mostra la coda di stampa per la stampante di
nome laser.




                                                              – p. 16
Stampare: lprm
Il comando lprm consente di rimuovere un dato job dalla
coda di stampa di una stampante.

lprm -P laser 2 Rimuove il secondo job dalla coda.
lprm -P laser all Rimuove tutti i job dalla coda.




                                                          – p. 16
Stampare: lpd
Il demone lpd é il processo che si occupa della gestione
della stampa, gestendo lo spool di stampa.
Tramite i suoi file di configurazione si puó stabilire chi ha
diritto di stampare e su quali stampanti, gestire l’accounting
delle stampe, ecc..




                                                                 – p. 16
Interoperabilitá: SCP
Per trasferire file da e verso una macchina Linux su cui si
ha un account si puó usare il comando scp:
scp file user@host:percorso
Esistono implementazioni di scp per tutti i sistemi operativi.
Inoltre per Windows esiste una versione grafica, WinScp:
http://winscp.sourceforge.net, che é open source.




                                                                 – p. 16
Interoperabilitá: FTP e ssh
Se sulla macchina Linux é installato un server FTP é
possibile prelevare (ed eventualmente depositare) file
adottando un qualsiasi client FTP.

Un client SSH per Windows open source é ad esempio
PUTTY.




                                                        – p. 16
Interoperabilità: VNC - 1
Se sulla macchina Linux viene installato e configurato un
server VNC, si puó accedere in modalitá grafica con un
client VNC, utilizzando ad esempio:
   RealVnc, http://www.realvnc.com
   TightVnc, http://www.tightvnc.com




                                                           – p. 17
Interoperabilitá: VNC - 2
Il vantaggio principale di VNC é che il client è di dimensioni
minime (100 Kb). Il limite principale é rappresentato dal
fatto che tutti i dati viaggiano in chiaro!

VNC non deve mai essere usato in un ambiente di
produzione o per controllare un server non in una rete
locale.




                                                                 – p. 17
Interoperabilitá: VNC - 3
Per utilizzare VNC occorre specificare sia l’hostname della
macchina remota che l’utente con cui ci si vuole collegare.
La sintassi adottata in genere é host:utente, per cui
10.2.3.60:0 potrebbe essere l’utente X della macchina
10.2.3.60, mentre 10.2.3.60:1 potrebbe essere l’utente Y.
Ciascuno di questi utenti ha una propria password ed un
proprio desktop.




                                                              – p. 17
Interoperabilitá: Server X - 1
E’ possibile installare un server X che consenta quindi di
avere una modalitá grafica e di avere il traffico cifrato con
SSH.
Non esistono server X per Windows gratuiti. Tra quelli a
pagamento citiamo HummingBird Exceed.




                                                              – p. 17
Interoperabilitá: Server X - 2
Per attivare una sessione X sotto Windows occorre
tipicamente:
1. Attivare il server X sotto Windows, eventualmente
   specificando che deve accettare connessioni dalla
   macchina Linux (remota);
2. Collegarsi via SSH alla macchina Linux, ed impostare
   la variabile di ambiente DISPLAY in questo modo:
   export DISPLAY=<ip-macchina-windows>:0.0;
3. Comunicare al server X (locale) che si accettano
   connessioni da remoto, ad esempio con il comando
   xhost +
4. Lanciare l’applicazione richiesta, o l’intero ambiente
   grafico (ad esempio con gnome-session);

                                                            – p. 17
Data ed ora: date
Il comando date riporta che ora é. É possibile specificare
diversi formati con cui visualizzare l’ora, cosí come
chiedere di visualizzare una data ora in un certo formato.

date Mostra l’ora corrente
date - -date=”08:00:00 PST” mostra l’ora passata come
parametro nell’ora corrente




                                                             – p. 17
Data ed ora: hwclock - 1
Per determinare che ora é, Linux utilizza una struttura a
livelli. Alla base c’é l’hardware clock, ovvero l’orologio
aggiornato dalla batteria tampone. Il comando hwclock
permette di leggere od impostarne il valore.
L’unica funzione di questo orologio hardware é di tenere
conto dell’ora quando Linux non é in funzione.




                                                             – p. 17
Data ed ora: hwclock - 2
L’orologio hardware non é molto accurato, ma la maggior
parte degli errori che compie sono predicibili: va avanti od
indietro di una quantitá quasi costante, che puó essere
calcolata e di cui il kernel puó tenere conto per correggere
l’ora.
Questa correzione viene eseguita con l’opzione - -adjust




                                                               – p. 17
Data ed ora: Timezone
All’ora contenuta nell’hwclock bisogna aggiungere le
quantitá dovute al fuso orario e all’ora legale: in questo
modo quando cambia l’ora legale non occorre intervenire
sul clock hardware.
La timezone é configurabile tramite il programma
redhat-config-date




                                                             – p. 17
Data ed ora: NTP
É spesso necessario che tutti i computer presenti in rete
abbiano la stessa ora. Per questo esiste un protocollo di
sincronizzazione apposito, il Network Time Protocol.
Il protocollo NTP si basa sull’utilizzo di server NTP, che
forniscono l’ora, e su client NTP, che vi si adeguano.




                                                             – p. 17
Data ed ora: ntpdate
Il comando ntpdate regola l’ora secondo quella riportata da
un server ntp passato come parametro. L’adeguamento é
immediato.
ntpdate ntp.ien.it Usa il server dell’Istituto Elettrotecnico
Nazionale (l’ora ufficiale italiana). Altri server sono:
 ntp2.ien.it
 ntps.net4u.it
 ntpdate 10.16.0.62 (Fastweb)
 ntpdate 10.96.0.62 (Fastweb)
É sempre consigliato (e dovuto) utilizzare i server NTP del
proprio provider.



                                                                – p. 18
Data ed ora: ntpd
Il demone ntpd sincronizza costantemente l’ora con quella
di uno o piú server NTP, e puó a sua volta operare come
client. La sua configurazione é riportata nel file
/etc/ntp.conf. Gli aggiornamenti che effettua sono
progressivi, quindi conviene procedere una prima volta con
ntpdate e poi lasciare il compito delle correzioni minime a
ntpd.




                                                              – p. 18
Hardware: lspci
Il comando lspci mostra l’elenco dei dispositivi presenti sul
bus pci.
lspci -v riporta piú informazioni.
lspci -vv riporta ulteriori informazioni.




                                                                – p. 18
Hardware: /proc/cpuinfo
Il file /proc/cpuinfo contiene informazioni su tutti i processori
presenti nel sistema.

cat /proc/cpuinfo
processor    :       0
vendor id    : GenuineIntel
cpu family   :       5
model        :       4
model name   : Pentium MMX
stepping     :       3
cpu MHz      :   200.458
...




                                                                   – p. 18
Hardware: /proc/interrupts
Il file /proc/interrupts riporta, per ogni IRQ di ogni
processore presente nel sistema, quante volte é scattato e
a quale dispositivo é associato.

      CPU0
0:    3152659   XT-PIC   timer
1:    135243    XT-PIC   keyboard
2:    0         XT-PIC   cascade
4:    327829    XT-PIC   serial
5:    1         XT-PIC   soundblaster
8:    1         XT-PIC   rtc
12:   0         XT-PIC   eth0
...




                                                             – p. 18
Controllare il sistema: df
Il comando df (disk free) mostra per ogni partizione montata
quanto spazio é stato usato, quanto é ancora disponibile
(tutto in blocchi da 1 KB) e il mount point.

df riporta lo spazio utilizzato
df -i riporta quanti inode sono stati usati e quanti sono liberi.
df -h usa MB E GB come abbreviazioni.




                                                                    – p. 18
Controllare il sistema: free
Il comando free riporta informazioni sull’occupazione della
memoria.
$ free

total                used free   shared buffers cached
Mem:      94964      88188 6776 0       8708 43308
-/+ buffers/cache:   36172 58792
Swap: 532268         7164 525104




                                                              – p. 18
Controllare il sistema: whereis
Il comando whereis ricerca i sorgenti, i binari e le pagine di
manuale per un dato comando. Non considera il PATH
corrente! Il suo scopo é quello di mostrare se un comando
é installato nella locazione standard.

$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz




                                                                 – p. 18
Controllare il sistema: which
Il comando which ricerca, nel PATH corrente, il/i parametri
passato come argomento, permettendo quindi di vedere
cosa viene invocato in caso di esecuzione dell’argomento
stesso. Se non trova nulla mostra il PATH corrente.
$ which ls
alias ls=’ls –color=tty -a -F -v’
/bin/ls
Ovvero il comando eseguito é /bin/ls e sono
automaticamente aggiunti i parametri riportati nell’alias.




                                                              – p. 18
Controllare il sistema: ps - 1
Il comando ps mostra i processi in corso di esecuzione sul
sistema. Sono possibili diverse opzioni combinabili tra loro,
sia per selezionare i processi da mostrare che per le
modalitá di visualizzazione.
ps mostra i processi interattivi associati alla console
dell’utente
ps -A oppure ps -e mostra tutti i processi del sistema.
ps a mostra tutti i processi del terminale corrente.
ps x seleziona solo i processi senza terminale (i demoni).




                                                                – p. 18
Controllare il sistema: ps - 2
ps -f Output esteso.
ps -v Mostra la quantitá di memoria usata.
ps -e Mostra l’ambiente usato dal comando.
ps - -cols 100 pone a 100 la dimensione di una riga
(mostra solo i primi 100 caratteri per riga)
Combinazioni tipiche:
 ps acxfu
 ps -ef




                                                      – p. 19
Controllare il sistema: top
Il comando top mostra lo stato del sistema e i processi in
esecuzione, ordinati per quantitá di CPU utilizzata. I dati
sono aggiornati ogni 5 secondi. Lanciato il comando si puó:
   cambiare l’intervallo di aggiornamento con s
   ordinare per memoria usata con M
   uccidere un processo con k
   ottenere l’help con h
   uscire con q




                                                              – p. 19
Controllare il sistema: w e whoami
Il comando w (Who) riporta l’elenco degli utenti collegati al
sistema.

Il comando whoami riporta l’identitá dell’utente che lo
lancia.




                                                                – p. 19
Controllare il sistema: watch
Il comando watch permette di eseguire un comando
(passato come parametro) periodicamente, mostrandone
l’output a schermo.
watch ls /var/log esegue ogni 2 secondi il comando ls
/var/log
watch -n 10 - -differences esegue ogni 10 secondi il
comando uptime e enfatizza le differenze tra esecuzioni
consecutive.
Si termina il comando premendo Ctrl-c (con Ctrl-z si mette
il programma in background).




                                                             – p. 19
Controllare il sistema: nice
Il comando nice esegue un programma con una prioritá
impostata. (ogni programma viene per default eseguito con
la stessa prioritá del programma che l’ha lanciato).
nice -20 program esegue program con la massima prioritá.
nice 19 program esegue program con la prioritá minima.
nice Mostra la prioritá corrente.
nice program Esegue il programma con un aggiustamento
pari a 10 (ovvero con meno prioritá!)




                                                            – p. 19
Controllare il sistema: renice
Il comando renice permette di cambiare la prioritá di uno o
piú processi in esecuzione. I processi sono specificati per
PID, gruppo o utente.
renice +1 1234 Riduce la prioritá del processo con PID pari
a 1234.
renice -2 -u root Aumenta di 2 la prioritá dei processi con
owner pari a root.




                                                              – p. 19
Controllare il sistema: kill - 1
Il comando kill invia un segnale ad un dato processo. Se il segnale
viene omesso il segnale é TERM (terminazione dolce). Questo
comando é localizzato in /bin/kill, molte shell hanno una funzione
kill interna che viene eseguita al posto del comando se non viene
specificato il PATH completo. Ad esempio, la shell Bash ha una
funzione kill che accetta anche il nome del programma a cui inviare
il segnale, mentre il programma kill vuole il PID.
kill program Esegue il kill della shell (se presente), altrimenti il
programma /bin/kill mandando in entrambi i casi il segnale TERM al
programma program.




                                                                       – p. 19
Controllare il sistema: kill - 2
/bin/kill -9 program Invia il segnale KILL (terminazione
immediata) al programma programma. Se l’utente é
autorizzato ad inviare questo segnale il risultato é che il
programma program termina immediatamente, tutte le
risorse (di memoria, di processore ecc) ad esso associate
sono rilasciate.
É opportuno inviare prima un kill senza parametri, in modo
da permettere al programma di terminare dolcemente
(chiudendo i file aperti, svuotando i buffer). Se il
programma, dopo qualche secondo, non termina, lo si puó
ammazzare.




                                                              – p. 19
Controllare il sistema: kill - 3
Spesso questo comando puó essere usato per forzare un
server (ovvero un demone in esecuzione) a leggere un file
di configurazione che é stato cambiato, senza riavviare il
demone stesso.

kill -SIGUSR2 xinetd Forza il programma xinetd a rileggere
la configurazione.




                                                             – p. 19
Controllare il sistema: nohup - 1
Il segnale HUP (Hang UP) viene inviato ad un programma
quando il processo padre é terminato oppure il terminale
che lo controlla viene rilasciato, quindi ad esempio quando
un utente fa il logout. Se si vuole che il programma continui
a girare (in background) lo si deve lanciare con il comando
nohup.
nohup program param1 ... paramN Esegue il comando
program con parametri param1 ... paramN immunizzandolo
agli hang-up.




                                                                – p. 19
Controllare il sistema: nohup - 2
nohup wget -t 0 -c -q ftp://URL Preleva il file ftp://URL in
modalitá silenziosa (-q), continuando ogni volta da dove si
era interrotto (-c) finché non lo ottiene tutto (-t 0). Se
l’utente che ha lanciato il programma effettua il logout il
trasferimento prosegue.




                                                              – p. 20
Controllare il sistema: jobs
É un comando di shell che mostra quali processi sono in
background. I processi in background, oltre ad essere
comunque identificati dal loro PID, sono identificati da
numero intero progressivo dalla shell, preceduto dal segno
%.
$ jobs
[1]+ Stopped watch ls




                                                             – p. 20
Controllare il sistema: fg
Il comando di shell fg (foreground) riporta in primo piano il
processo in background indicato.

fg %1 riporta in background il processo indicato dalla shell
come %1.




                                                                – p. 20
Controllare il sistema: bg
Il comando di shell bg (background) manda in background il
processo indicato.

bg %1 manda in background il processo indicato dalla shell
come %1. Se il processo é quello che controlla il terminale
corrente, si ottiene (in genere) lo stesso effetto premendo
Ctrl-Z.




                                                              – p. 20
Controllare il sistema: uname
Il comando uname riporta una serie di informazioni sul
sistema.

uname Riporta il nome del sistema operativo (Linux).
$ uname -a
Linux my.computer.tld 2.4.22 #8 Wed Oct 15 13:17:49
CEST 2003 i586 unknown




                                                         – p. 20
Controllare il sistema: swapon e swapoff
 Questi due comandi attivano (swapon) e disattivano
 (swapoff) una o piú partizioni di swap. Le partizioni di swap
 sono attivate all’avvio del sistema. Con il flag -s si
 ottengono informazioni sull’uso delle partizioni medesime.




                                                                 – p. 20
Controllare il sistema: vmstat
Il comando vmstat mostra informazioni sull’uso della
memoria virtuale ( principale e di swap).

vmstat
Sotto le colonne si ed so sono riportati (in KB/s) i dati di
swap in (da disco) e swap out (su disco). La descrizione di
tutti i dati mostrati é nella pagina di manuale.

vmstat n ricalcola e mostra i dati ogni n secondi.




                                                               – p. 20
Controllare il sistema: dmesg
Il comando dmesg riporta quanto stampato dal sistema
durante l’ultimo boot. Puó quindi essere usato per vedere
se tutto l’hardware é stato rilevato e configurato
correttamente.




                                                            – p. 20
Controllare il sistema: /var/log/messages
 Il file /var/log/messages contiene numerose informazioni
 sull’attivitá del sistema, come ad esempio il login e il logout
 degli utenti, l’installazione e rimozione di moduli del kernel,
 la partenza di alcuni programmi.




                                                                   – p. 20
Networking: ping
Il comando ping permette di verificare se un host o un
router (specificato per nome o per indirizzo IP sulla riga di
comando) é raggiungibile o meno.

ping hostname-or-address




                                                               – p. 20
Networking: traceroute
Il comando traceroute mostra il percorso seguito dai
pacchetti per raggiungere un host.

/usr/sbin/traceroute hostname-or-address




                                                       – p. 21
Networking: telnet
Il comando telnet apre una connessione TCP con l’host
specificato sulla linea di comando e sulla porta specificata;
se la porta non viene specificata si intende la 23 (remote
shell o telnet).

telnet hostname-or-address <port>

É il modo piú semplice di verificare se un certo servizio di
rete é attivo o meno (porta 110 per POP3, 80 per HTTP, 25
per SMTP, 21 per FTP...)




                                                              – p. 21
Networking: ssh - 1
I dati spediti via telnet sono tutti in chiaro, e questo rende il
protocollo non sicuro (ed é il motivo per cui l’accesso in
remoto via telnet é di solito disabilitato).
Il programma ssh consente di accedere in remoto ad una
macchina via il protocollo SSH, quindi con tutto il traffico
cifrato.

ssh username@macchina




                                                                    – p. 21
Networking: ssh - 2
Il nome della macchina remota deve essere sempre
specificato. Se lo username non viene specificato si utilizza
lo stesso della sessione della macchina locale.

ssh -X username@macchina esporta la modalità grafica.
Sulla macchina locale deve essere presente un client X.




                                                              – p. 21
Networking: scp
Il comando scp (secure cp) consente di copiare file da/su
una macchina remota, cifrando il traffico. Puó essere usato
come alternativa sicura (e piú facilmente configurabile) di
un ftp server e client.

scp sorgente destinazione
Se sorgente o destinazione sono locali si usa la normale
sintassi per i nomi di file. Altrimenti occorre specificare
anche lo username e la macchina sorgente/destinazione:
username@macchina:percorso-file




                                                             – p. 21
Networking: ftp
Il comando ftp apre una sessione FTP con un’host remoto.

ftp hostname-or-address

Una volta aperta la sessione occorre autenticarsi
(tipicamente con username uguale ad anonymous e
password un indirizzo di e-mail). Ciò fatto si naviga nel
server FTP con i comandi ls, cd, pwd analoghi a quelli di
Unix, e si preleva un file con get <nomefile>.




                                                            – p. 21
Networking: whois
Il comando whois interroga un database whois, e permette
quindi di ottenere informazioni sui gestori di un dominio o
sul proprietario di un indirizzo IP.

whois <-h whois-server> domain-or-address




                                                              – p. 21
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux

Contenu connexe

Tendances

BeRTOS: Sistema Real Time Embedded Free
BeRTOS: Sistema Real Time Embedded FreeBeRTOS: Sistema Real Time Embedded Free
BeRTOS: Sistema Real Time Embedded FreeDeveler S.r.l.
 
La Virtualizzazione 2010
La Virtualizzazione 2010La Virtualizzazione 2010
La Virtualizzazione 2010Davide Grossato
 
Sistemi di virtualizzazione con Linux
Sistemi di virtualizzazione con LinuxSistemi di virtualizzazione con Linux
Sistemi di virtualizzazione con LinuxTruelite
 
Delphi Day 2009 Win7 Dev Overview
Delphi Day 2009 Win7 Dev OverviewDelphi Day 2009 Win7 Dev Overview
Delphi Day 2009 Win7 Dev Overviewpietrobr
 
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxTrace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxDeveler S.r.l.
 
Joomla day 2010 Virtualizzare in locale pro e contro
Joomla day 2010 Virtualizzare in locale pro e controJoomla day 2010 Virtualizzare in locale pro e contro
Joomla day 2010 Virtualizzare in locale pro e controAndrea Adami
 
Open Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspOpen Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspLaura Camellini
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Majong DevJfu
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Majong DevJfu
 
Introduzione Alla Uml Mconsole
Introduzione Alla Uml MconsoleIntroduzione Alla Uml Mconsole
Introduzione Alla Uml MconsoleMajong DevJfu
 
Tecnologie di virtualizzazione per il consolidamento dei server
Tecnologie di virtualizzazione per il consolidamento dei serverTecnologie di virtualizzazione per il consolidamento dei server
Tecnologie di virtualizzazione per il consolidamento dei serverTruelite
 
Hardening
HardeningHardening
HardeningNaLUG
 
Sistemi Operativi: CPU Scheduler - Lezione 09
Sistemi Operativi: CPU Scheduler - Lezione 09Sistemi Operativi: CPU Scheduler - Lezione 09
Sistemi Operativi: CPU Scheduler - Lezione 09Majong DevJfu
 
Moduli del kernel - Boot del sistema
 Moduli del kernel - Boot del sistema Moduli del kernel - Boot del sistema
Moduli del kernel - Boot del sistemaFulvio Corno
 
Sistemi Operativi: Componenti - Lezione 02
Sistemi Operativi: Componenti - Lezione 02Sistemi Operativi: Componenti - Lezione 02
Sistemi Operativi: Componenti - Lezione 02Majong DevJfu
 

Tendances (20)

La Virtualizzazione
La VirtualizzazioneLa Virtualizzazione
La Virtualizzazione
 
BeRTOS: Sistema Real Time Embedded Free
BeRTOS: Sistema Real Time Embedded FreeBeRTOS: Sistema Real Time Embedded Free
BeRTOS: Sistema Real Time Embedded Free
 
La Virtualizzazione 2010
La Virtualizzazione 2010La Virtualizzazione 2010
La Virtualizzazione 2010
 
Sistemi di virtualizzazione con Linux
Sistemi di virtualizzazione con LinuxSistemi di virtualizzazione con Linux
Sistemi di virtualizzazione con Linux
 
Delphi Day 2009 Win7 Dev Overview
Delphi Day 2009 Win7 Dev OverviewDelphi Day 2009 Win7 Dev Overview
Delphi Day 2009 Win7 Dev Overview
 
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxTrace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
 
LTSP
LTSPLTSP
LTSP
 
Joomla day 2010 Virtualizzare in locale pro e contro
Joomla day 2010 Virtualizzare in locale pro e controJoomla day 2010 Virtualizzare in locale pro e contro
Joomla day 2010 Virtualizzare in locale pro e contro
 
Open Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspOpen Source Parallel Computing ltcsp
Open Source Parallel Computing ltcsp
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04
 
Ambienti di virtualizzazione
Ambienti di virtualizzazioneAmbienti di virtualizzazione
Ambienti di virtualizzazione
 
Introduzione Alla Uml Mconsole
Introduzione Alla Uml MconsoleIntroduzione Alla Uml Mconsole
Introduzione Alla Uml Mconsole
 
Tecnologie di virtualizzazione per il consolidamento dei server
Tecnologie di virtualizzazione per il consolidamento dei serverTecnologie di virtualizzazione per il consolidamento dei server
Tecnologie di virtualizzazione per il consolidamento dei server
 
Hardening
HardeningHardening
Hardening
 
Distro linux
Distro linuxDistro linux
Distro linux
 
Cell Programming 1
Cell Programming 1Cell Programming 1
Cell Programming 1
 
Sistemi Operativi: CPU Scheduler - Lezione 09
Sistemi Operativi: CPU Scheduler - Lezione 09Sistemi Operativi: CPU Scheduler - Lezione 09
Sistemi Operativi: CPU Scheduler - Lezione 09
 
Moduli del kernel - Boot del sistema
 Moduli del kernel - Boot del sistema Moduli del kernel - Boot del sistema
Moduli del kernel - Boot del sistema
 
Sistemi Operativi: Componenti - Lezione 02
Sistemi Operativi: Componenti - Lezione 02Sistemi Operativi: Componenti - Lezione 02
Sistemi Operativi: Componenti - Lezione 02
 

En vedette

Ubuntu Linux ed il Software Libero
Ubuntu Linux ed il Software LiberoUbuntu Linux ed il Software Libero
Ubuntu Linux ed il Software LiberoMarco Lombardo
 
InfiniFlux Time Series DBMS FAQ
InfiniFlux Time Series DBMS FAQInfiniFlux Time Series DBMS FAQ
InfiniFlux Time Series DBMS FAQInfiniFlux
 
Progetti_Linux Day 2015_ISF-CA_LinuxDay2015_isf
Progetti_Linux Day 2015_ISF-CA_LinuxDay2015_isfProgetti_Linux Day 2015_ISF-CA_LinuxDay2015_isf
Progetti_Linux Day 2015_ISF-CA_LinuxDay2015_isfMarco Frau
 
Tre lingue e un MOOC per imparare Linux
Tre lingue e un MOOC per imparare LinuxTre lingue e un MOOC per imparare Linux
Tre lingue e un MOOC per imparare LinuxGabriella Dodero
 
Big data e pubblica amministrazione
Big data e pubblica amministrazioneBig data e pubblica amministrazione
Big data e pubblica amministrazioneGianfranco Andriola
 
Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...
Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...
Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...Valerio Eletti
 
Introduzione ai Big Data e alla scienza dei dati
Introduzione ai Big Data e alla scienza dei datiIntroduzione ai Big Data e alla scienza dei dati
Introduzione ai Big Data e alla scienza dei datiVincenzo Manzoni
 

En vedette (9)

Ubuntu Linux ed il Software Libero
Ubuntu Linux ed il Software LiberoUbuntu Linux ed il Software Libero
Ubuntu Linux ed il Software Libero
 
GNU Linux introduction
GNU Linux introductionGNU Linux introduction
GNU Linux introduction
 
InfiniFlux Time Series DBMS FAQ
InfiniFlux Time Series DBMS FAQInfiniFlux Time Series DBMS FAQ
InfiniFlux Time Series DBMS FAQ
 
Progetti_Linux Day 2015_ISF-CA_LinuxDay2015_isf
Progetti_Linux Day 2015_ISF-CA_LinuxDay2015_isfProgetti_Linux Day 2015_ISF-CA_LinuxDay2015_isf
Progetti_Linux Day 2015_ISF-CA_LinuxDay2015_isf
 
Tre lingue e un MOOC per imparare Linux
Tre lingue e un MOOC per imparare LinuxTre lingue e un MOOC per imparare Linux
Tre lingue e un MOOC per imparare Linux
 
Big data e pubblica amministrazione
Big data e pubblica amministrazioneBig data e pubblica amministrazione
Big data e pubblica amministrazione
 
Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...
Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...
Nuovi scenari sociali, reti digitali e accumulo di big data. Un approccio sis...
 
FANTIN BIG DATA (1)
FANTIN BIG DATA (1)FANTIN BIG DATA (1)
FANTIN BIG DATA (1)
 
Introduzione ai Big Data e alla scienza dei dati
Introduzione ai Big Data e alla scienza dei datiIntroduzione ai Big Data e alla scienza dei dati
Introduzione ai Big Data e alla scienza dei dati
 

Similaire à Amministrazione base dei sistemi Linux

Corso Linux
Corso LinuxCorso Linux
Corso Linuxagnelloe
 
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsMirko Mancin
 
Da Thompson a Torvalds: passato, presente e futuro del mondo *nix
Da Thompson a Torvalds: passato, presente e futuro del mondo *nixDa Thompson a Torvalds: passato, presente e futuro del mondo *nix
Da Thompson a Torvalds: passato, presente e futuro del mondo *nixFelice Pescatore
 
Linux & Open Source : Lezione Due
Linux & Open Source : Lezione DueLinux & Open Source : Lezione Due
Linux & Open Source : Lezione DueDario Mazza
 
Elio Tondo - Linux In Azienda
Elio Tondo - Linux In AziendaElio Tondo - Linux In Azienda
Elio Tondo - Linux In AziendaBetter Software
 
Open-source: storia di una rivoluzione silenziosa
Open-source: storia di una rivoluzione silenziosaOpen-source: storia di una rivoluzione silenziosa
Open-source: storia di una rivoluzione silenziosaaccatagliato
 
Corso formazione Linux
Corso formazione LinuxCorso formazione Linux
Corso formazione LinuxErcole Palmeri
 
Linux e fs storia e caratteristiche vincenti
Linux e fs   storia e caratteristiche vincentiLinux e fs   storia e caratteristiche vincenti
Linux e fs storia e caratteristiche vincentiMaurizio Antonelli
 
Linux & Open Source : Lezione Tre
Linux & Open Source : Lezione TreLinux & Open Source : Lezione Tre
Linux & Open Source : Lezione TreDario Mazza
 
LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...
LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...
LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...Maurizio Antonelli
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxMarco Ferrigno
 
Appunti_01 LPIC-1 Junior Level Linux Certification
Appunti_01 LPIC-1 Junior Level Linux CertificationAppunti_01 LPIC-1 Junior Level Linux Certification
Appunti_01 LPIC-1 Junior Level Linux CertificationVincenzo Argese
 
Sistemi operativi: confronto tra linux, windows e mac
Sistemi operativi: confronto tra linux, windows e macSistemi operativi: confronto tra linux, windows e mac
Sistemi operativi: confronto tra linux, windows e macGiovanni Mennea
 
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesLinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesMaurizio Antonelli
 

Similaire à Amministrazione base dei sistemi Linux (20)

debian gnu linux
debian gnu linuxdebian gnu linux
debian gnu linux
 
Corso Linux
Corso LinuxCorso Linux
Corso Linux
 
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
 
Corso linux base
Corso linux baseCorso linux base
Corso linux base
 
Da Thompson a Torvalds: passato, presente e futuro del mondo *nix
Da Thompson a Torvalds: passato, presente e futuro del mondo *nixDa Thompson a Torvalds: passato, presente e futuro del mondo *nix
Da Thompson a Torvalds: passato, presente e futuro del mondo *nix
 
Linux & Open Source : Lezione Due
Linux & Open Source : Lezione DueLinux & Open Source : Lezione Due
Linux & Open Source : Lezione Due
 
Lezione due
Lezione dueLezione due
Lezione due
 
Elio Tondo - Linux In Azienda
Elio Tondo - Linux In AziendaElio Tondo - Linux In Azienda
Elio Tondo - Linux In Azienda
 
Open-source: storia di una rivoluzione silenziosa
Open-source: storia di una rivoluzione silenziosaOpen-source: storia di una rivoluzione silenziosa
Open-source: storia di una rivoluzione silenziosa
 
Corso formazione Linux
Corso formazione LinuxCorso formazione Linux
Corso formazione Linux
 
Linux e fs storia e caratteristiche vincenti
Linux e fs   storia e caratteristiche vincentiLinux e fs   storia e caratteristiche vincenti
Linux e fs storia e caratteristiche vincenti
 
Linux
LinuxLinux
Linux
 
Lezione tre
Lezione treLezione tre
Lezione tre
 
Linux & Open Source : Lezione Tre
Linux & Open Source : Lezione TreLinux & Open Source : Lezione Tre
Linux & Open Source : Lezione Tre
 
LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...
LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...
LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
 
Linux & Open Source - Lezione 2
Linux & Open Source - Lezione 2Linux & Open Source - Lezione 2
Linux & Open Source - Lezione 2
 
Appunti_01 LPIC-1 Junior Level Linux Certification
Appunti_01 LPIC-1 Junior Level Linux CertificationAppunti_01 LPIC-1 Junior Level Linux Certification
Appunti_01 LPIC-1 Junior Level Linux Certification
 
Sistemi operativi: confronto tra linux, windows e mac
Sistemi operativi: confronto tra linux, windows e macSistemi operativi: confronto tra linux, windows e mac
Sistemi operativi: confronto tra linux, windows e mac
 
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesLinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
 

Amministrazione base dei sistemi Linux

  • 1. Corso su Linux Usare il Pinguino e vivere felici (v. 1.1) Paolo Campegiani paolo@paolocampegiani.it http://www.paolocampegiani.it – p.
  • 2. Indice per sezioni - 1 Concetti generali, 4 Comandi su file, 56 Operazioni su dischi, 81 Comandi su file di testo, 98 Comandi per l’archiviazione, 114 Bash e linea di comando, 127 Utenti e gruppi, 144 L’ambiente grafico, 157 Stampare, 162 – p.
  • 3. Indice per sezioni - 2 Interoperabilitá con Windows, 168 Data ed ora, 175 Informazioni sull’hardware, 182 Controllare il sistema, 185 Rete e networking, 209 Sequenza di boot, 231 Gestione dei pacchetti con RPM, 244 Compilare il Kernel e gestire i moduli, 255 Trovare documentazione, 272 – p.
  • 4. Cenni su Unix - 1 Unix viene sviluppato nei Bell Labs a partire dal 1969. Si tratta di una famiglia di sistemi operativi, sviluppati da costruttori diversi, che condividono una comune interfaccia di programmazione: AIX di IBM Solaris di Sun HP-UX di Hewlett Packard FreeBSD università di Berkeley E’ il primo sistema operativo scritto in un linguaggio di programmazione ad alto livello, il C, inventato nel 1972 proprio a tal fine. – p.
  • 5. Cenni su Unix - 2 Unix é stato pensato fin dall’inizio per essere semplice, coerente, efficiente. É un sistema operativo multiutente e multiprogrammato: multiprogrammato: piú processi si contendono l’uso delle risorse del sistema; multiutente: utenti diversi richiedono al sistema di compiere delle operazioni, e sono autorizzati o meno a compierle. – p.
  • 6. Cenni su Unix - 3 Un sistema Unix consente di eseguire in modo efficiente molte centinaia di processi distinti che operano concorrentemente. Unix é particolarmente orientato ad applicazioni server e a compiti di networking: Internet é stata sviluppata su Unix. La compatibilitá tra le diverse versioni di Unix é a livello di codice sorgente e di comandi di sistema disponibili. Le specifiche di Unix sono pubbliche, le implementazioni sono proprietarie oppure liberamente usabili (FreeBSD). – p.
  • 7. Cosa é Linux Linux é una implementazione di Unix realizzata partendo da zero, e distribuita secondo la licenza GPL (Gnu Public License). Linux nasce nel 1991 ad opera di Linus Torvalds, a cui si sono aggiunti negli anni centinaia di sviluppatori che operano gratuitamente e si coordinano tramite una mailing list pubblicamente accessibile. Torvalds é il responsabile ultimo di ogni decisione relativa alle funzionalità da inserire nel kernel e sulla scelta tra le diverse implementazioni possibili. – p.
  • 8. La licenza GPL La licenza GPL (GNU Public License) rappresenta l’essenza del software libero. Con una licenza GPL si puó: ottenere il software gratuitamente ed in formato sorgente, pagando eventualmente delle spese di spedizione; utilizzarlo in qualsiasi ambito e con qualsiasi finalitá; ridistribuire anche gratuitamente il software cosí ottenuto; modificare il software ottenuto; distribuire il software modificato, citando l’autore originale, ma solo sotto licenza GPL; – p.
  • 9. I sistemi GNU/Linux Linux é il kernel, tutti gli altri programmi necessari al funzionamento del sistema (il compilatore C, la libreria C) e il software di sistema (i comandi di base) sono sviluppati da un altro organismo, la Free Software Foundation, che negli anni ’80 ha dato il via alla realizzazione di un proprio Unix gratuito (GNU é un anti-acronimo, significando GNU is Not Unix). E’ quindi piú corretto parlare di sistemi GNU/Linux. – p.
  • 10. Caratteristiche di Linux - 1 Linux é un sistema operativo multipiattaforma, nella sua ultima versione gira tra l’altro su: x86 e compatibili (Intel, Amd, ...) a 32 e 64 bit PowerPc a 32 e 64 bit Motorola 68k Arm Digital Alpha MIPS Sparc IBM S390 – p. 1
  • 11. Caratteristiche di Linux - 2 É una implementazione di Unix Multiutente Multiprocesso Multiprocessing simmetrico (SMP), da 2 a 16 processori (di piú con il kernel 2.6) Minime richieste hardware (il kernel occupa meno di 2 MB di memoria) Grande interfacciabilitá verso altri sistemi operativi Particolarmente ottimizzato per il networking – p. 1
  • 12. La numerazione del kernel - 1 Il kernel di Linux ha un sistema di numerazione a tre cifre: 1. Version: versione del kernel (correntemente é la 2, ci sono state la 0 e la 1) 2. Patchlevel: il livello di patch Numeri pari: versioni stabili del kernel Numeri dispari: versioni di sviluppo 3. Sublevel: un numero progressivo che rappresenta le varie sottoversioni. – p. 1
  • 13. La numerazione del kernel - 2 Quindi ad esempio 2.4.24 é una versione stabile, mentre 2.5.33 é una versione di sviluppo. Una versione stabile non é necessariamente priva di bug! Se ci sono dei bug, questi vengono segnalati alla mailing list di sviluppo e corretti in una delle prossime versioni (SubLevel maggiore). Al 9 Luglio 2004 esistono diversi rami stabili della versione 2.0 ( finger @kernel.org): 2.0.40 2.2.26 2.4.26 2.6.7 – p. 1
  • 14. La numerazione del kernel - 3 La versione 2.4.26 é più stabile della versione 2.6.7, che é invece appena stata rilasciata ed é quindi in corso di sviluppo attivo. Progressivamente la versione 2.6 diventerá stabile, e ad un certo punto si passerá allo sviluppo della versione 2.7, che incorporerá nuove funzionalitá (nello sviluppo di una versione pari si correggono sono gli errori presenti). Lo sviluppo della versione 2.6 si limiterá a correggere problemi di sicurezza. – p. 1
  • 15. Le dimensioni del kernel Il kernel è costituito da circa 5.6 milioni di righe di codice C (con una piccola parte in assembler specifica per ogni piattaforma) e viene distribuito in formato sorgente (circa 200 MB non compressi). Ottenuti i sorgenti, occorre compilarli sulla propria macchina per avere un kernel da poter installare, oppure usare un kernel compilato da terze parti. Il kernel realizza solo le funzioni essenziali: l’interfaccia grafica e tutti i programmi (compreso il software di sistema) sono indipendenti e sviluppati autonomamente. – p. 1
  • 16. La libreria e il compilatore C La libreria e il compilatore C sono due componenti essenziali del sistema. Il kernel stesso viene compilato usando il compilatore C, e praticamente tutti i programmi presenti usano direttamente o indirettamente la libreria C. – p. 1
  • 17. Il compilatore C Il compilatore C/C++ si chiama gcc (Gnu Cross Compiler) ed é sviluppato da Free Software Foundation. Oggi sono sostanzialmente disponibili due versioni: 2.96 la versione stabile, fortemente consigliata per compilare il kernel 3.3-3.4 la nuova versione, utilizzabile per compilare la maggior parte dei programmi Sono disponibili molti altri linguaggi di programmazione: a volte i relativi compilatori operano traducendo il codice in linguaggio C/C++ e poi invocando il compilatore gcc. – p. 1
  • 18. La libreria C La libreria C attualmente utilizzata é la libreria glibc (Gnu libc). Implementa POSIX.1 e parte di POSIX.2. La versione corrente é la 2.3. – p. 1
  • 19. Le librerie dinamiche Le librerie utilizzate dai programmi possono essere collegate agli stessi in modo statico o dinamico. Il consolidamento statico viene preferito quando occorre avere un programma che possa funzionare in modo indipendente dal resto del sistema, avendo al suo interno tutto il codice necessario al funzionamento. Il consolidamente dinamico é di gran lunga il piú usato, permettendo di avere programmi di dimensioni minori. – p. 1
  • 20. Gli standard di Linux Con la diffusione di Linux, e l’esistenza di molti venditori di soluzioni basate su questo sistema, si é reso necessario definire degli standard per garantire uno standard comune che governi: le funzioni esportate da alcune delle librerie dinamiche la dislocazione di alcuni dei file (di configurazioni o di comandi) presenti nel sistema i parametri di alcuni dei comandi di sistema Un consorzio indipendente ha realizzato lo standard relativo, il Linux Standard Base (LSB): http://www.linuxbase.org. – p. 2
  • 21. Le distribuzioni - 1 Un sistema Linux contiene quindi un kernel, delle librerie dinamiche, del software di sistema, e dei programmi applicativi. Tutti questi componenti sono variamente interdipendenti (ad esempio un certo programma richiede una certa versione di una libreria) ed occorre quindi garantire che l’installazione, la rimozione o l’aggiornamento di uno di questi componenti non comprometta il funzionamento dell’intero sistema. Questo é uno dei compiti svolto una distribuzione. – p. 2
  • 22. Le distribuzioni - 2 Una distribuzione è fondamentalmente, quindi, un sistema di gestione delle dipendenze, anche se ci sono altri elementi specifici per una distribuzione, come ad esempio il modo in cui viene effettuata la configurazione dell’hardware e come sono attivati i servizi offerti dalla macchina. Esistono centinaia di distribuzioni di Linux, che coprono necessitá molto diverse (e sono quindi fornite anche con insiemi di software applicativi diversi). – p. 2
  • 23. Le distribuzioni - 3 Le piú diffuse e significative distribuzioni per Linux sono: RedHat Debian SuSe Mandrake Slackware Gentoo – p. 2
  • 24. La distribuzione RedHat La piú diffusa distribuzione per Linux, é oggi presente in piú versioni: Red Hat Linux/Red Hat Fedora la versione gratuita e prelevabile da Internet; Red Hat Enterprise Linux WS per workstation; Red Hat Enterprise Linux ES per server web; Red Hat Enterprise Linux AS per server Oracle; La differenza sostanziale tra la versione gratuita e quelle a pagamento é l’assistenza fornita. Il sistema di gestione delle dipendenze si basa in ogni caso sul software rpm (RedHat Package Manager). – p. 2
  • 25. Le distribuzioni SuSe e Mandrake Queste due distinte distribuzioni usano lo stesso package manager di RedHat, e si differenziano sul modo in cui i singoli pacchetti sono organizzati. Sono anch’esse disponibili in due versioni, una gratuita e prelevabile da Internet, ed una a pagamento in cui si aggiungono dei software proprietari e/o dell’assistenza tecnica. – p. 2
  • 26. La distribuzione Debian Questa distribuzione é completamente gratuita, realizzata da un gruppo di volontari. Utilizza un proprio sistema di gestione dei pacchetti (il cui nucleo é il software dpkg). E’ divisa in tre filoni: stable che viene aggiornata ogni 2 anni circa, e contiene software ampiamente testato; testing che contiene quella che diventerá la prossima versione Stable; unstable che contiene software instabile o sotto sviluppo attivo; – p. 2
  • 27. La distribuzione Gentoo Ultima arrivata tra le distribuzioni piú famose, ha guadagnato rapidamente popolaritá per l’idea innovativa su cui si basa: tutto il software installato viene ricompilato in locale, in modo da ottimizzarlo al massimo dal punto di vista delle prestazioni. In questo modo é inoltre sempre immediatamente disponibile l’ultima versione di ogni programma. – p. 2
  • 28. La distribuzione Slackware E’ la distribuzione piú essenziale: il sistema di gestione delle dipendenze é spartano (ed é stato introdotto in tempi recenti, prima era compito dell’amministratore del sistema capire se e come era possibile installare o rimuovere un dato programma). E’ anche la distribuzione che permette il massimo grado di controllo su ció che viene installato nel sistema. – p. 2
  • 29. Quale é la migliore distribuzione? Non esiste una distribuzione migliore delle altre. Ogni buona distribuzione ha un suo campo d’elezione: Suse/Mandrake per avere un Linux molto user friendly Fedora per una distribuzione RedHat ma di sviluppo (ed instabile) Debian per avere la massima stabilitá e semplicitá di amministrazione; Gentoo quando le prestazioni e l’efficienza sono critiche (ad esempio sui portatili); Slackware per server Internet molto specializzati In questo corso ci baseremo su RedHat. – p. 2
  • 30. Utenti Gli utenti presenti nel sistema (sia le persone che i processi di sistema) sono univocamente identificati da un numero detto UID (User ID). A questo numero é associata poi una stringa identificativa, ma il kernel considera sempre e solo l’UID. É sempre presente un utente, root, identificato da UID pari a 0 che non ha alcuna restrizione nelle operazioni che compie sul sistema. – p. 3
  • 31. Processi - 1 Un processo é l’esecuzione di un programma. Lo stesso programma puó quindi essere eseguito piú volte anche contemporaneamente, dando luogo a piú processi distinti. Ogni processo é identificato univocamente da un numero detto PID (Process ID). Il PID é unico in un dato momento, ma puó essere riutilizzato in seguito per un altro processo. – p. 3
  • 32. Processi - 2 I processi sono organizzati gerarchicamente: ogni processo ha un processo padre (che é il processo che ne ha chiesto l’attivazione), ad eccezione del processo init. Due processi figli dello stesso padre sono detti fratelli. Un processo figlio diventa orfano quando il processo padre termina (magari inaspettatamente), e viene “adottato” dal processo init. – p. 3
  • 33. File - 1 Sotto Linux, come in ogni Unix, tutto é un file. Tutti i dispositivi fisici collegati al sistema sono visti come dei file a cui si puó accedere in lettura o in scrittura. I nomi dei file sono sensibili al maiuscolo (filename é diverso da FILENAME). I file sono contenuti in directory, e la directory radice é indicata con /. Nei nomi di file le directory sono separate dal simbolo /. – p. 3
  • 34. File - 2 Tutti i filesystem e i dispositivi montati sono visti come sottodirectory della directory radice. Ad esempio, il contenuto di un floppy potrebbe essere presente nella directory /mnt/floppy: quindi le operazioni di lettura e scrittura dei file in quella directory leggeranno/modificheranno i file sul floppy. – p. 3
  • 35. File - 3 Ad ogni file sono associate molte informazioni, come ad esempio: Data di creazione, ultimo accesso, ultima modifica Proprietario del file Permessi sul file La combinazione dei permessi sul file, sulla directory in cui il file é contenuto (e sulle superdirectory in cui é contenuta la directory) definiscono quali operazioni un utente puó compiere sul file. – p. 3
  • 36. File - 4 Esistono diversi tipi di file: (regular) file directory link socket named pipe (FIFO) block device character device – p. 3
  • 37. Gerarchia dei file - 1 Gli standard di Linux prevedono una specifica gerarchia di /: /etc Contiene la configurazione del sistema /bin Contiene programmi eseguibili (per utenti) /sbin Contiene programmi eseguibili che possono richiedere permessi speciali) /home Contiene le home directory degli utenti /root Contiene l’home directory dell’utente root /tmp Directory temporanea – p. 3
  • 38. Gerarchia dei file - 2 /usr Contiene eseguibili e dati per gli utenti /opt Riservata a software proprietario /dev Contiene i device del sistema /proc Contiene il proc filesystem /var File di log e informazioni varie – p. 3
  • 39. La directory /dev - 1 I file presenti in /dev rappresentano tutti i dispositivi collegati o collegabili al sistema. La lettura o scrittura su questi file si concreta nella lettura o nella scrittura direttamente sui dispositivi che rappresentano. Quindi ad esempio scrivere sulla scheda audio significa mandare in play un file, e leggere dal file che rappresenta la tastiera significa acquisire il carattere premuto dall’utente (se c’é). – p. 3
  • 40. La directory /dev - 2 I dischi EIDE sono rappresentati secondo questa numerazione: /dev/hda Il master della catena primaria /dev/hdb Lo slave della catena primaria /dev/hdc Il master della catena secondaria /dev/hdd Lo slave della catena secondaria Questi nomi possono essere seguiti da un numero che indica la partizione (primaria od estesa): /dev/hda1 Prima partizione di /dev/hda /dev/hdb2 Seconda partizione di /dev/hdb – p. 4
  • 41. La directory /dev - 3 Altri elementi in questa directory sono: /dev/sd... i dischi SCSI (adottano un analogo schema <disco><partizione> di quelli EIDE) /dev/tty<...> sono associati alle console /dev/fd... floppy disk /dev/usb la directory per i dispositivi USB – p. 4
  • 42. La directory /dev - 4 /dev/par... le porte parallele /dev/ttyS... le porte seriali (compreso il mouse) /dev/zero la lettura da questo file ritorna sempre e solo 0 /dev/null un file di dimensione nulla su cui ogni operazione di scrittura ha successo /dev/random un file che si comporta come un generatore di numeri casuali – p. 4
  • 43. Il filesystem /proc - 1 La directory /proc contiene il filesystem /proc. I file contenuti in questa directory permettono di: 1. acquisire informazioni sul sistema 2. fare il tuning del kernel La directory /proc risiede tutta in memoria, e il contenuto dei file viene creato dinamicamente quando vengono letti. – p. 4
  • 44. Il filesystem /proc - 2 Il tuning dinamico dei parametri del kernel viene effettuato scrivendo i valori desiderati all’interno di file contenuti nella directory /proc/sys. I parametri correnti sono visualizzabili leggendo gli stessi file. I file del tipo /proc/<nnnn> contengono informazioni sul processo con PID pari a nnnn. – p. 4
  • 45. Il filesystem swap Linux utilizza di solito una partizione del disco come area di swap. In questa area vengono allocate le pagine di memoria dei processi attualmente sospesi, in modo tale da lasciare spazio libero a processi in esecuzione che hanno bisogno di piú memoria. É possibile avere piú partizioni di swap per aumentare le prestazioni, e viceversa avere un file come file di swap. Lo swap dovrebbe avere una dimensione pari ad 1-2 volte la memoria disponibile, ma comunque non oltre i 2 GB. – p. 4
  • 46. Il filesystem tmpfs Originariamente chiamato shmfs (Shared Memory FS), é un filesystem che risiede completamente in memoria (sia centrale che di swap), aumentando o riducendo le proprie dimensioni a seconda della quantitá di dati in esso presenti. – p. 4
  • 47. Gli inode Per ogni file presente viene definito un inode, che é la struttura in cui sono memorizzati i metadati associati al file (nome, proprietá, permessi, timestamp) e delle ulteriori strutture per consentire un accesso diretto veloce ai dati del file. – p. 4
  • 48. I filesystem di Linux Linux ha diversi filesystem nativi a disposizione: 1. ext2/ext3 2. Reiserfs 3. JFS 4. XFS Tutti questi filesystem offrono le funzionalitá di base di un filesystem Unix (proprietá e permessi dei file, gestione dei metadati per ogni file con gli inode). – p. 4
  • 49. Il filesystem ext2/ext3 - 1 Il primo filesystem sviluppato per Linux è stato il filesystem ext2. La sua evoluzione ext3 é con esso del tutto compatibile, aggiungendo solo un file che utilizza come journal: le operazioni di modifica dei dati e dei metadati su disco vengono prima scritte nel journal e solo in un secondo tempo trasferite su disco. – p. 4
  • 50. Il filesystem ext2/ext3 - 2 In questo modo si evita che una interruzione forzata del sistema costringa a scansionare tutto il disco per ripristinare la correttezza dei metadati (se possibile): in un caso del genere é sufficiente riapplicare le modifiche presenti nel journal file. Si puó sempre passare da un filesystem ext2 ad uno ext3 e viceversa. – p. 5
  • 51. Il filesystem Reiserfs É stato il primo filesystem di tipo journaled per Linux. Le due funzionalitá aggiuntive piú importanti rispetto ad ext2/ext3 sono: liste di controllo degli accessi a livello di file gestione efficiente delle directory con molti file – p. 5
  • 52. I filesystem XFS e JFS Sono entrambi filesystem di tipo journaled: XFS é sviluppato da Sun. Ottimo nei file server, richiede indispensabilmente un gruppo di continuitá poiché effettua un notevole caching dei dati e dei metadati in memoria JFS sviluppato da IBM – p. 5
  • 53. I filesystem non nativi Linux puó accedere in lettura (e in scrittura) a molti altri filesystem, quali ad esempio: FAT, VFAT, NTFS, HPFS ISO9660, UDF BeOS, QNX – p. 5
  • 54. Quale filesystem usare? La scelta del filesystem dipende molto dal tipo di utilizzo della macchina: PC personali, piccoli server: ext3 oppure Reiserfs. mail server e file server: Reiserfs, XFS, JFS. server Oracle: ext3 (per suggerimento di Oracle stessa), OCFS, raw devices – p. 5
  • 55. Come partizionare il disco? Un buon partizionamento del disco prevede sempre una piccola partizione di boot, di tipo ext2 oppure ext3, in cui allocare le immagini dei kernel da lanciare, posizionata all’inizio del disco e con una dimensione di 100 MB. Si possono quindi avere piú partizioni per le varie parti del filesystem (ad esempio, una partizione per i dati degli utenti), ed una partizione di swap. L’installazione di tutti i programmi forniti con RedHat non richiede piú di 5 GB. Oltre a questo bisogna aggiungere lo spazio per applicativi esterni e per i dati utente. – p. 5
  • 56. Comandi su file: ls Il comando ls (list) visualizza il contenuto di una directory. ls senza parametri oppure ls . fa riferimento alla directory corrente, mentre ls .. della sovradirectory .. ls dirname riporta il contenuto della directory dirname (il parametro passato può essere assoluto o relativo). Alcuni parametri: -l per avere informazioni estese sui file; -R per visualizzare ricorsivamente il contenuto delle sottodirectory; -a per visualizzare anche i file che hanno un nome che comincia con . -i visualizza il numero dell’inode di ogni file; I parametri sono combinabili in un unico switch (ls -lR). – p. 5
  • 57. Comandi su file: pwd Il comando pwd (Print Working Directory) mostra la directory corrente. pwd Mostra la directory corrente. – p. 5
  • 58. Comandi su file: cd Il comando cd permette di cambiare directory. cd dirname per spostarsi nella directory dirname. cd .. per spostarsi nella directory superiore (lo spazio é importante!). cd . rimane nella directory corrente. cd torna nella home directory dell’utente (equivale cioé a cd $HOME). – p. 5
  • 59. Comandi su file: mkdir Il comando mkdir crea una directory. mkdir dirname crea la directory dirname. mkdir -p piu/livelli/insieme crea la directory piu se non esiste, quindi la sottodirectory livelli se non esiste, quindi la directory insieme se non esiste. – p. 5
  • 60. Comandi su file: rm Il comando rm permette di rimuovere uno o piú file. rm file rimuove il file senza chiedere conferma. rm -i file rimuove il file chiedendo una conferma interattiva. E’ conveniente definire un alias in modo tale che ogni volta che viene invocato il comando rm si aggiunga in automatico questo switch. rm dirname -fR rimuove una directory e tutti i file in essa contenuti. I file cosí cancellati non sono recuperabili. – p. 6
  • 61. Comandi su file: rmdir Il comando rmdir rimuove una directory purché sia vuota (a meno di uno switch che lo forzi altrimenti). rmdir dirname rimuove la directory dirname se questa é vuota. – p. 6
  • 62. Comandi su file: cp Il comando cp permette di copiare un file. cp sorgente destinazione copia il file sorgente in destinazione. I nomi possono essere assoluti o relativi. cp -R dirsor dirdest copia ricorsivamente la directory dirsor nella directory dirdest. cp -Rs dirsor dirdest invece di creare i file produce dei link. cp -p sorgente destinazione copia e mantiene gli stessi permessi, proprietá e timestamp del file. Il parametro destinazione deve sempre essere presente; puó essere il . per indicare la directory corrente. – p. 6
  • 63. Comandi su file: mv Il comando mv rinomina un file o lo sposta in un’altra directory. mv vecchio nuovo cambia il nome del file da vecchio a nuovo. mv *.c backup sposta tutti i file *.c nella directory backup. mv dir1 dir2 sposta la directory dir1 in dir2. Se il file destinazione esiste giá, viene sovrascritto. É quindi consigliabile aggiungere lo switch -i che chiede nel caso conferma dell’operazione (anche con un alias). – p. 6
  • 64. Comandi su file: du Il comando du (Directory Usage) permette di determinare quanto spazio é occupato dai file di una directory e dalle sue sottodirectory. du dirname riporta lo spazio (in KB) usato dalla directory dirname e da tutte le sottodirectory. du -sh dirname riporta le informazioni in modo sintetico e in formato piú humano. – p. 6
  • 65. Comandi su file: ln - 1 Il comando ln crea un link (hard o soft). Un hard link é a tutti gli effetti lo stesso oggetto con un altro nome, quindi cancellando l’hard link si cancella anche l’oggetto di partenza. ln file nome-link Il file file risulta accessibile anche con il nome nome-link. ln -s file nome-link Come sopra, ma il link creato é un soft link. – p. 6
  • 66. Comandi su file: ln - 2 ln -s dir1 nome-link la directory dir1 é ora accessibile anche via nome-link. Solo l’utente root puó creare hard link tra directory. – p. 6
  • 67. Comandi su file: fuser Il comando fuser (File USER) riporta, per un file passato come parametro sulla riga di comando, i PID dei processi che hanno quel file aperto. $ fuser CorsoLinux.ps CorsoLinux.ps 3890 4500 – p. 6
  • 68. Comandi su file: file Il comando file riporta, per ogni file passato come parametro sulla linea di comando, il tipo del file stesso. file * CorsoLinux.out: empty CorsoLinux.ps: PostScript document text conforming at level 2.0 CorsoLinux.tex: LaTeX 2e document text archiviazione.tex: ISO-8859 text, with CRLF line terminators myprog ELF 32-bit LSB executable, Intel 80386 [...] foto.jpg JPEG image data, JFIF standard 1.02, [...] – p. 6
  • 69. Comandi su file: touch Il comando touch imposta l’ora di ultima modifica di un file all’ora corrente, se il file passato come parametro esiste. Altrimenti crea un file con il nome dato di dimensione nulla. touch filename aggiorna l’ora di ultimo accesso a filename all’ora attuale, ovvero lo crea se non esiste. Questo comando si rivela utile quando si vuole forzare la ricompilazione di un sorgente che make non effettua in quanto il corrispondente file .o é piú recente. – p. 6
  • 70. Comandi su file: locate, updatedb Questo comandi permettono di ricercare un file (locate) consultando un database di nomi di file aggiornato con updatedb che deve quindi essere eseguito periodicamente. locate tex ricerca tutti i file che hanno la stringa tex nel nome o nel percorso. locate "*d*.tex” é un criterio di ricerca piú complesso che utilizza le virgolette per evitare l’espansione dei parametri eseguita dalla shell. – p. 7
  • 71. Comandi su file: slocate Il problema di locate é che permette ad un utente di controllare quali file possiede un altro utente. Questa falla di sicurezza é stata superata con slocate (secure-locate). locate é un link verso slocate. slocate -u crea il database. slocate pippo ricerca tutti i file che hanno pippo nel nome o nel percorso, e che sono accessibili all’utente che ha invocato slocate. E’ possibile non indicizzare alcune directory. – p. 7
  • 72. Comandi su file: find - 1 Il comando find permette di ricercare tutti i file che soddisfano uno o piú criteri, ad esempio che abbiano una certa dimensione, una stringa nel nome o nel percorso, alcuni permessi, siano stati creati o modificati in un certo arco di tempo, ... Sui file ottenuti é possibile compiere una operazione specifica, che di default é stampare il nome del file. find / -name “*.c” ricerca tutti i file che si trovano sotto / e che terminano in .c. – p. 7
  • 73. Comandi su file: find - 2 find / -perm 0777 ricerca tutti i file che hanno tutti i permessi di scrittura, lettura ed esecuzione impostati. Lo 0 iniziale indica che si é adottata la notazione ottale. find / -name “*.[ch]” ricerca tutti i file sotto / che terminano in .c oppure in .h find / -name “*.txt” -print -exec cat { } ; ricerca tutti i file che terminano in .txt, ne stampa il nome (-print) e su ognuno di essi esegue il comando cat, con parametro il nome del file. – p. 7
  • 74. Comandi su file: grep - 1 Il comando grep permette di ricercare delle stringhe all’interno di uno o piú file di testo. Se la stringa viene trovata viene mostrato il nome del file che la contiene e la riga. grep saluti filename ricerca la stringa saluti all’interno del file filename. grep inode *.c cerca la stringa inode in tutti i file .c della directory corrente. – p. 7
  • 75. Comandi su file: grep - 2 grep -v inode source.c mostra tutte le righe di source.c che non contengono la stringa inode. grep -lv inode *.c mostra tutti i nomi di file .c che non contengono la stringa inode. grep -5 inode *.c scrive, per ogni occorrenza della stringa inode all’interno di un file .c, le 5 righe seguenti. grep -B 10 inode *.c come sopra, ma mostra 10 righe precedenti. – p. 7
  • 76. Comandi su file: chmod - 1 Il programma chmod consente di impostare i permessi su uno o più file. I permessi sono r per la lettura, w per la scrittura e x per l’esecuzione, e si applicano al proprietario del file (u per user), al gruppo del proprietario (g per group) e al resto del mondo (o per others). chmod ugo+r file1 file2 assegna il permesso di lettura al proprietario del file, al suo gruppo e a tutti gli altri. chmod o-r file revoca il permesso di lettura del file al resto del mondo. – p. 7
  • 77. Comandi su file: chmod - 2 chmod u=rw file imposta il permesso di lettura e scrittura del file al proprietario, ma non quello di esecuzione. Gli altri permessi non sono toccati. chmod o-rwx file toglie i permessi di lettura, scrittura ed esecuzione al resto del mondo. – p. 7
  • 78. Comandi su file: chmod - 3 Le modalita’ possono anche essere espresse con la notazione ottale, usando 3 cifre (una per user, group ed other). Ogni cifra indica il totale dei permessi che user/group/other ha sul file, pesati come: 1 esecuzione 2 scrittura 4 lettura quindi per dare il permesso di lettura (2) e scrittura (4) a user, group ed other il comando sará: chmod 666 file – p. 7
  • 79. Comandi su file: chmod - 4 Invece per dare lettura, scrittura ed esecuzione al proprietario, lettura al gruppo e nessun permesso agli altri il comando sará: chmod 740 file. chmod -R <permessi> opera ricorsivamente sulle directory. – p. 7
  • 80. Comandi su file: chown Il comando chown permette di cambiare l’utente proprietario o il gruppo proprietario di un file. chown pippo:pluto file Il file file diventa di proprietá dell’utente pippo e del gruppo pluto. chown pippo file Il file file diventa di proprietá dell’utente pippo. chown -R pippo * Tutti i file della directory corrente e delle subdirectory diventano di proprietá dell’utente pippo. – p. 8
  • 81. Operazioni su dischi: /etc/fstab - 1 Il file /etc/fstab contiene la corrispondenza tra dispositivi fisici e punti di montaggio (mount point), specificando inoltre il tipo del file system e le opzioni di montaggio. Il formato delle righe presenti in questo file é: DispositivoFisico MountPoint TipoDiFilesystem Opzioni Dump OrdineCheck – p. 8
  • 82. Operazioni su dischi: /etc/fstab - 2 Dove si ha: DispositivoFisico é il nome del dispositivo (es: /dev/hda); MountPoint é la directory che mapperá il contenuto del dispositivo fisico; TipodiFilesystem é il tipo del file system (ext2, ext3, swap, VFAT, iso9660,proc); Dump specifica se il contenuto della partizione deve essere processato da dump; OrdineCheck specifica l’ordine in cui il file system deve essere analizzato al boot; – p. 8
  • 83. Operazioni su dischi: fstab - 3 Esempio di /etc/fstab: /dev/hdb1 / ext3 defaults 11 /dev/hda1 /msdos vfat noauto 00 /dev/hdb2 swap swap defaults 00 /dev/hda2 swap swap defaults 00 /dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0 /dev/scd0 /mnt/cdrw iso9660 noauto,user 00 none /dev/pts devpts gid=5,mode=620 00 none /proc proc defaults 00 none /dev/shm tmpfs defaults 00 L’elenco completo delle opzioni é nella pagina di manuale di mount. – p. 8
  • 84. Operazioni su dischi: mount - 1 Il comando mount permette di montare un file system. mount /msdos monta la directory /msdos se esiste una entrata nel file /etc/fstab che la descrive. mount -t FSType -o options device dir monta il dispositivo device nella directory dir con le relative opzioni ed il filesystem previsto. Puó essere usato quando in /etc/fstab non é presente l’entrata desiderata. In ogni caso é possibile montare un file system solo se la directory corrispondente esiste giá, altrimenti bisogna crearla con mkdir. – p. 8
  • 85. Operazioni su dischi: mount - 2 Una opzione particolarmente utile di mount permette di montare un file come se fosse un disco: in questo modo si puó ad esempio montare una immagine ISO9660 per verificarne il contenuto prima di procedere alla masterizzazione. mount -t iso9660 -o loop prova.iso /mnt/cdrom/ monta il file prova.iso nella directory /mnt/cdrom. mount mostra tutti i file system montati. – p. 8
  • 86. Operazioni su dischi: umount - 1 Il comando umount (scritto senza la n, é un errore di ortografia che si tramanda da decenni) smonta un file system. Affinché questo sia possibile occorre che nessun processo stia lavorando con quel file system (ad esempio avendo dei file aperti in lettura o scrittura oppure avendo una delle directory del file system come directory corrente). umount /mnt/cdrom smonta il file system mappato su /mnt/cdrom. – p. 8
  • 87. Operazioni su dischi: umount - 2 Quindi se si vuole montare un floppy per leggerne o modificare il contenuto occorre: 1. Inserire il floppy nel lettore 2. Montare il floppy (mount /mnt/floppy) 3. Compiere le operazioni dovute 4. Smontare il floppy (umount /mnt/floppy) L’ultimo punto é essenziale. Linux puó tenere in memoria (e scrivere in un secondo tempo) i dati modificati e solo smontando il dispositivo si forza il trasferimento degli stessi su disco. – p. 8
  • 88. Operazioni su dischi: sync Con questo comando si chiede al sistema di sincronizzare il contenuto della memoria con i dati su disco, ovvero di scrivere fisicamente su disco ogni dato (contenuto di file) e metadato (superblocchi, inodes,...) modificato. sync sincronizza la cache di tutti i dischi. – p. 8
  • 89. Operazioni su dischi: /etc/mtab Il file /etc/mtab contiene l’insieme dei file system correntemente montati. É quindi un file aggiornato dinamicamente dal sistema operativo. $ cat /etc/mtab /dev/hdb1 / ext3 rw 0 0 none /proc proc rw 0 0 /dev/hdb6 /tmp var ext2 rw 0 0 none /dev/pts devpts rw,gid=5,mode=620 0 0 none /dev/shm tmpfs rw 0 0 – p. 8
  • 90. Operazioni su dischi: fdformat Con questo comando si puó formattare a basso livello un floppy. fdformat /dev/fd0 per formattare il primo floppy. fdformat /dev/fd0h720 formatta il floppy a 720 KB di capacitá. – p. 9
  • 91. Operazioni su dischi: mkfs Il comando mkfs crea un file system di tipo specificato su un dispositivo fisico. mkfs -t FSType <opzioni> dispositivo crea un file system di tipo FSType con le eventuali opzioni nel dispositivo dispositivo. mkfs -t ext3 /dev/hdb3 crea un file system di tipo ext3 nel dispositivo fisico /dev/hdb3. Il contenuto del dispositivo viene perso per sempre. – p. 9
  • 92. Operazioni su dischi: mkisofs Il comando mkisofs viene utilizzato per creare una immagine ISO9660 (con eventuali estensioni Joliet e/o Rock Ridge). mkisofs -o immagine.iso /home/user/ crea un file immagine.iso contenenente tutti i file della directory /home/user, comprese le sottodirectory. L’immagine ottenuta puó essere poi trasferita su CD-RW con cdrecord. Alcune opzioni sono: -f segue i link simbolici, sostituendo quindi al link il contenuto effettivo. -l consente nomi di file fino a 31 caratteri (viola ISO9660). -J aggiunge informazioni per Joliet. -R usa le estensioni Rock Ridge. -r come sopra ed imposta proprietari e permessi dei file in modo conveniente. – p. 9
  • 93. Operazioni su dischi: dd - 1 Il comando dd (Data Dump) permette di leggere e convertire il contenuto di un file. dd if=/dev/hda count=4 mostra i primi quattro settori del disco /dev/hda (if sta per input file). dd if=/dev/hda of=/dev/hdb copia tutto il contenuto di /dev/hda in /dev/hdb (of sta per output file). – p. 9
  • 94. Operazioni su dischi: dd - 2 dd if=/dev/zero of=/dev/hda sostituisce il contenuto di /dev/hda con una sequenza di 0. dd if=immagine of=/dev/fd0 bs=512 count=2880 conv=sync Copia una immagine di 1.44MB sul floppy /dev/fd0; si tratta di 2880 settori da 512 byte l’uno, e completa ogni blocco con degli spazi (sync). dd if=dati-iniziali.txt of=dati-finali.txt CONV=lcase converte il file dati-iniziali.txt in dati-finali.txt sostituendo a tutte le maiuscole le minuscole. – p. 9
  • 95. Operazioni su dischi: dump Il comando dump permette di effettuare backup incrementali di un intero filesystem. dump -0u / -f /dev/st0 effettua un dump completo (0) scrivendo in /etc/dumpdates l’esito della operazione (u) ed usando come dispositivo di backup /dev/st0 (cartuccia a nastro). dump -1u -f /dev/st0 come sopra, ma copiando solo i file cambiati dall’ultimo backup completo. dump -2u -f /dev/st0 come sopra, ma copiando solo i file cambiati dall’ultimo backup di livello 1. – p. 9
  • 96. Operazioni su dischi: restore Il comando restore ripristina i file prodotti con un backup dal comando restore rf /dev/st0 ricrea il file system leggendolo da /dev/st0 Il programma puó operare in modo interattivo, e crea il file restoresymtable per passare informazioni tra i vari ripristini. – p. 9
  • 97. Operazioni sui dischi: fsck Il programma fsck verifica e controlla un file system Linux. fsck -t FSType dispositivo <opzioni> verifica il file system montato su dispositivo considerandolo di tipo FSType e con le eventuali opzioni. Si tratta di un front-end per i vari programmi fsck.<FSType>. Mentre l’operazione di verifica di un file system ext2 puó richiedere anche ore (dipendendo dalla dimensione del file system) su un file system ext3 occorrono pochi secondi (il tempo di riapplicare il journal). – p. 9
  • 98. Comandi su file di testo: cat Il comando cat (concatenate) visualizza il contenuto di uno o piú file di testo. cat file.txt visualizza il file file.txt. cat file1 file2 file3 visualizza file1 e subito a seguire file2 e subito a seguire file3. cat - -number file.txt visualizza il file file.txt numerandone le righe. – p. 9
  • 99. Comandi su file di testo: zcat Il comando zcat mostra il contenuto di un file di testo compresso. zcat file.txt.gz file2.txt.gz – p. 9
  • 100. Comandi su file di testo: tac Il comando tac visualizza uno o piú file di testo in ordine inverso, partendo dall’ultima riga e procedendo verso la prima. tac file.txt visualizza le righe del file file.txt in ordine inverso partendo dall’ultima. – p. 10
  • 101. Comandi su file di testo: more Il comando more mostra il contenuto di uno o piú file di testo, mostrando una pagina per volta. Premendo invio si avanza di una riga, premendo spazio si va avanti di una pagina. more file.txt – p. 10
  • 102. Comandi su file di testo: less Il comando less permette non solo di avanzare (come more) ma anche di tornare indietro. Si usano a tal fine i tasti cursore e i PgUp e PgDown. Con il tasto / si puó effettuare una ricerca di testo all’interno del file visualizzato (andando in avanti con n e all’indietro con N). less file.txt – p. 10
  • 103. Comandi su file di testo: tail Il comando tail permette di vedere le ultime righe ( o gli ultimi bytes) di un file di testo. Se il file cresce, con l’opzione -f si visualizzano le aggiunte. tail -30 file.txt visualizza le ultime 30 righe del file file.txt. tail -f file.txt visualizza la parte finale del file file.txt e la aggiorna una volta al secondo. L’opzione -f é particolarmente utile per monitorare i file di log del sistema. – p. 10
  • 104. Comandi su file di testo: head Il comando head visualizza le prime righe (o i primi bytes) di un file di testo. head pippo.txt visualizza le prime 10 righe (10 é il valore di default) del file pippo.txt. head -50 pippo.txt visualizza le prime 50 righe del file pippo.txt. – p. 10
  • 105. Comandi su file di testo: wc Il comando wc conta quanti caratteri, parole o righe compongono un file di testo. wc -l pippo.txt Ritorna di quante righe é costituito il file pippo.txt. wc -m pippo.txt Ritorna di quanti caratteri é costituito il file pippo.txt. wc -w pippo.txt Ritorna di quante parole é costituito il file pippo.txt. – p. 10
  • 106. Comandi su file di testo: uniq Il comando uniq sostituisce a piú righe uguali consecutive una sola riga. uniq pippo.txt Produce in output il file pippo.txt con una sola riga al posto di piú righe uguali consecutive. uniq -c pippo.txt Per ogni riga in output visualizza a quante righe uguali consecutive corrisponde. E’ possibile fare il confronto anche su parti di una riga. – p. 10
  • 107. Comandi su file di testo: sort Il comando sort ordina uno o piú file di testo secondo vari criteri (lessicografico,numerico,mensile), distinguendo o meno tra maiuscole e minuscole, considerando tutte le righe oppure solo una porzione delimitata. sort -g valori.txt Produce in output il file valori.txt ordinato in modo numerico, considerando tutta la riga. sort -n - -key 5,5 Ordina numericamente in base al valore del quinto campo (i campi sono separati da un delimitatore, di default é lo spazio) – p. 10
  • 108. Comandi su file di testo: split Il comando split scompone un file in piú componenti, aventi una dimensione massima specificata (come numero di bytes o numero di righe). split grande.dat - -bytes=1400000 Scompone il file grande.dat in file xaa xab xac ognuno avente dimensione massima di 1400000 bytes. – p. 10
  • 109. Comandi su file di testo: paste Il comando paste produce un file di testo le cui righe sono la concatenazione delle righe dei file di input. cat primo a b cat secondo 1 2 paste primo secondo a1 b2 – p. 10
  • 110. Comandi su file di testo: join Il comando join effettua il join di due o piú file di testo, permettendo di specificare quale é la chiave da usare. $ cat primo a a1 b b1 c c1 $ cat secondo a aaaa b bbbb d dddd $ join primo secondo a a1 aaaa b b1 bbbb – p. 11
  • 111. Comandi su file di testo: tr - 1 Il comando tr (translate) sostituisce una sequenza di caratteri con un’altra. Il file su cui operare viene passato su standar input, e l’output é su standard output. tr a A < file.txt Produce in output il file file.txt dove ogni a é stata sostituita con A. tr abc ABC < file.txt Come sopra, ma in piú sostituendo b con B e c con C. tr a-z A-Z < file.txt Come sopra ma facendo il maiuscolo di tutte le lettere dell’alfabeto. – p. 11
  • 112. Comandi su file di testo: tr - 2 Con la notazione [:CLASS:] si intende una classe di caratteri, ad esempio: alpha caratteri alfabetici alnum caratteri alfanumerici lower caratteri minuscoli upper caratteri maiuscoli blank spazi digit cifre – p. 11
  • 113. Comandi su file di testo: tr - 3 Lo switch - -d cancella i caratteri passati come parametro, mentre - -s sostituisce un carattere ripetuto piú volte consecutivamente con una sola copia. tr -d [:blank:] < file.txt cancella tutti gli spazi dal file file.txt tr -s [:alpha:] < file.txt sostisuisce alle sequenze AA, AAA, AAA, ... Z, ZZ, ZZZ le sequenze A, ... Z tr -d aeiou < file.txt cancella le vocali dal file file.txt. – p. 11
  • 114. Comandi per archiviazione: compress Il comando compress comprime un file. Il file ottenuto ha un nome dato dal nome del file originario seguito dall’estensione .Z, ed il file originario viene rimosso. compress file.dat Comprime il file file.dat sostituendolo con il file compresso file.dat.Z L’algoritmo di compressione utilizzato é il meno efficiente tra quelli disponibili. – p. 11
  • 115. Comandi per archiviazione: uncompress Il comando uncompress decomprime un file compresso con compress, sostituendo al file compresso la versione decompressa. uncompress file.dat.Z decomprime il file file.dat.Z sostituendolo con il decompresso file.dat. – p. 11
  • 116. Comandi per archiviazione: gzip Il comando gzip comprime un file usando lo stesso algoritmo di PKZIP/WinZip, con cui i file prodotti sono compatibili. I file compressi hanno l’estensione .gz gzip file.dat comprime il file file.dat producendo il file file.dat.gz e rimuovendo il file originario. – p. 11
  • 117. Comandi per archiviazione: gunzip Il comando gunzip decomprime un file compresso con gzip. gunzip file.dat.gz decomprime file.dat.gz sostituendolo con la versione decompressa file.dat. gunzip -l file.dat.gz riporta informazioni sul contenuto del file compresso file.dat.gz. – p. 11
  • 118. Comandi per archiviazione: zip ed unzip Questi due comandi permettono di comprimere e decomprimere un file in modo tale da essere compatibili con PKZIP/Winzip. unzip -l file.zip Riporta il contenuto del file compresso file.zip – p. 11
  • 119. Comandi per archiviazione: bzip2 Questo é il piú efficiente compressore disponibile, al costo di un tempo necessario per comprimere il file molto maggiore rispetto a gzip. I file prodotti hanno l’estensione .bz2. bzip2 file.dat Comprime il file file.dat sostituendolo con la versione compressa file.dat.bz2 bzip -9 file.dat Come sopra, comprimendo al massimo (ed impiegando piú tempo) – p. 11
  • 120. Comandi per archiviazione: bunzip2 Il comando bunzip2 decomprime un file compresso con bzip2. bunzip2 file.dat.bz2 Decomprime il file file.dat.bz2 sostituendolo con la versione decompressa file.dat. – p. 12
  • 121. Comandi per archiviazione: tar - 1 Il comando tar (Tape ARchiver) raggruppa piú file in un unico archivio o viceversa espande un archivio nei suoi file costituenti. L’archivio ottenuto puó essere compresso con compress, gzip o bzip2. Tipicamente il nome dei file di archivio ha l’estensione .tar, seguito da: .Z se il l’archivio é stato compresso con compress .gz se l’archivio é stato compresso con gzip .bz2 se l’archivio é stato compresso con bzip2 ottenendo quindi ad esempio un archivio dal nome file.tar.gz (nel caso di compressione con gzip si usa anche la forma contratta file.tgz). – p. 12
  • 122. Comandi per archiviazione: tar - 2 Per visualizzare il contenuto di un archivio si usa lo switch - -list (forma contratta: t). tar - -list - -file archivio.tar tar tf archivio.tar L’opzione - -file indica come l’archivio sia passato come parametro su linea di comando e non da standard input. Il nome del file é in tal caso il parametro immediatamente successivo. – p. 12
  • 123. Comandi per archivazione: tar - 3 Se l’archivio é compresso con gzip, si aggiunge l’opzione - -gzip (forma contratta: z). tar - -list - -gzip - -file archivio.tar.gz tar tfz archivio.tar.gz L’opzione - -verbose (v) mostra ulteriori informazioni sui file che fanno parte dell’archivio (dimensione, proprietà, permessi). – p. 12
  • 124. Comandi per archiviazione: tar - 4 Per estrarre un archivio si usa l’opzione - -extract (forma contratta: x). tar - -extract - -file archivio.tar tar xf archivio.tar.gz tar - -extract - -gzip - -file archivio.tar.gz tar xfz archivio.tar.gz – p. 12
  • 125. Comandi per archiviazione: tar - 5 Se l’archivio é stato compresso con bzip2 lo switch da utilizzare é - -bzip2 (forma contratta: j). tar - -extract - -bzip2 - -file archivio.tar.bz2 tar xfj archivio.tar.bz2 – p. 12
  • 126. Comandi per archiviazione: tar - 6 Per creare un archivio si usa l’opzione -create (forma contratta: c). I file che compongono l’archivio vengono passati da linea di comando. Le directory sono processate ricorsivamente. tar - -create - -gzip - -file archivio.tar.gz file1 file2 mydir tar czf archivio.tar.gz file1 file2 mydir In questo caso l’opzione - -verbose (v) mostra i nomi dei file mano mano sono aggiunti. – p. 12
  • 127. Shell: introduzione - 1 La shell é una interfaccia tra il sistema operativo e l’utente, il quale sottomette al sistema dei programmi da eseguire tramite la shell. Esistono numerose shell per Unix/Linux: Bourne Shell (sh) C-Shell (csh) Korn Shell (ksh) Bourne Again Shell (bash) Queste shell hanno molti punti in comune, differenziandosi per come impostano le variabili di ambiente e le funzioni predefinite. – p. 12
  • 128. Shell: introduzione - 2 In tutti i casi, le shell operano a riga di comando: l’utente scrive una riga in cui specifica il programma da eseguire, gli eventuali parametri, la modalità di esecuzione, e la invia alla shell. $ programma param1 param2 param3 – p. 12
  • 129. Shell: introduzione - 3 Il programma da eseguire puó essere interno alla shell (come ad esempio alias per Bash) o meno. Se é esterno puó essere specificato per percorso assoluto (/sbin/ifconfig) oppure solo con il nome: in tal caso viene ricercato tra tutte le directory presenti nel percorso di ricerca, definito dalla variabile di ambiente PATH. – p. 12
  • 130. Shell: introduzione - 4 Due funzionalitá presenti in Bash sono: Completion Tab: se si preme il tasto tab mentre si sta scrivendo un nome di file o un comando la shell lo completa, se c’é una scelta univoca; altrimenti ripremendo tab mostra tutte le alternative possibili; history: usando i tasti cursore su e giù é possibile vedere l’elenco dei comandi impartiti. Tale elenco é riportato nel file .bash_history dell’home directory. – p. 13
  • 131. Shell: variabili di ambiente Le variabili di ambiente sono impostate con il comando export. export CORSO=linux e se ne puó accedere al valore premettendo al nome il simbolo $: $ echo $CORSO linux – p. 13
  • 132. Shell: alias Un alias del tipo: alias rm=”rm -i” fa sì che ogni volta che si esegue il comando rm venga in realtá eseguito il comando rm -i, quindi ad esempio rm a b c diventerá un piú sicuro rm -i a b c. Alias e variabili di ambiente sono specifati nei file .bashrc e .bash_profile dell’home directory. – p. 13
  • 133. Shell: caratteri speciali: ? e * - 1 I caratteri * e ? sono utilizzati quando, nello specificare dei nomi di file come parametri di un comando, si vogliono indicare tutti quei file che hanno una certa struttura nel nome. Se l’utente chiede di eseguire $ programma *.txt la shell chiederá al sistema operativo di eseguire $ programma primo.txt secondo.txt lettera.txt ... se nella directory corrente esistono i file primo.txt, secondo.txt, lettera.txt,... – p. 13
  • 134. Shell: caratteri speciali: ? e * - 2 In modo analogo $ programma dati*dat potrebbe essere espansa in $ programma dati1.dat dati2.dat dati.dat dati-finali.dat se questi file esistono nella directory corrente. In modo analogo $ programma /usr/l*/a viene espanso in $ programma /usr/lib/a /usr/local/a /usr/libexec/a – p. 13
  • 135. Shell: caratteri speciali: ? e * - 3 Il carattere ? invece sostituisce un solo carattere. $ programma dati?.dat viene espanso in $ programma dati1.dat dati2.dat – p. 13
  • 136. Shell: caratteri speciali: ? e * - 4 Se si vuole evitare l’espansione effettuata dalla shell, occorre racchiudere il parametro contenente i caratteri speciali tra doppi apici. $ programma *tex viene espanso in $ programma archiviazione.tex hardware.tex ... mentre $programma “*tex” non viene espanso, quindi il programma invocato riceve come primo parametro la stringa *tex – p. 13
  • 137. Shell: redirezione - 1 La redirezione é un meccanismo per cui l’output (o l’input) di un comando viene inviato (prelevato) da un file, o da un altro comando. $programma > risultato Invia l’output di programma al file risultato; questo file viene azzerato se giá esistente. $programma » risultato Aggiunge l’ouput di programma al file risultato. – p. 13
  • 138. Shell: redirezione - 2 In modo analogo si puó fornire come input di un programma un file giá esistente. $programma < argomento Un caso tipico di utilizzo di questa funzionalitá si ha quando programma é un server a cui si vogliono inviare i comandi definiti in argomento. – p. 13
  • 139. Shell: redirezione - 3 Si puó scegliere di redirezionare non lo standard output di un programma ma il suo standard error. $ programma 2> /dev/null esegue il programma inviando lo standard error sul file /dev/null, ovvero senza mostrare a video i messaggi di errore. É possibile redirezionare due o piú tra standard input, standard output e standard error in contemporanea: $programma > risultato < argomenti 2> errori. – p. 13
  • 140. Shell: redirezione - 4 L’ultima e piú potente possibilitá é quella che prevede di utilizzare l’output di un programma come l’input di un altro programma. $ programma1 | programma2 l’output del programma1 diventa l’input del programma programma2. E’ possibile concatenare piú programmi in questo modo, ognuno con i propri parametri. – p. 14
  • 141. Shell: esecuzione in background Per eseguire un processo in background occorre terminare la riga di comando con il simbolo &. In questo modo la console continua ad essere disponibile per eseguire altri programmi. $ programma & esegue programma in background. La redirezione non viene effettuata automaticamente, quindi potrebbe essere necessario specificare l’output e l’input, per non “sporcare” la console. – p. 14
  • 142. Shell: esecuzione con && e ; Una riga del tipo: $ programma1 && programma2 causerá l’esecuzione di programma1, e solo se questo programma termina con successo verrá quindi eseguito programma2. $ programma1 ; programma2 causa l’esecuzione di programma1 e quindi di programma2. – p. 14
  • 143. Shell: umask Con il comando umask si puó leggere od impostare la modalitá con cui vengono creati i file. I valori restituiti sono espressi secondo la stessa sintassi di chown. umask mostra la modalitá di creazione standard dei file. umask -S come sopra, ma in modo simbolico. umask o-rwx toglie tutti i permessi al resto del mondo. – p. 14
  • 144. Utenti: /etc/passwd - 1 Il file /etc/passwd contiene l’elenco degli account presenti nel sistema. La struttura del file é la seguente: account password UID GID GECOS directory shell L’utente root ha sempre UID e GID pari a 0. Gli utenti con UID inferiore a 99 sono account di sistema. – p. 14
  • 145. Utenti: /etc/passwd - 2 Il significato dei campi é il seguente: account identificativo dell’utente password la password (se non si usano shadow password) UID lo User ID dell’utente GID il Group ID del gruppo primario dell’utente GECOS informazioni descrittive (es. nome completo) directory l’home directory dell’utente shell la shell attivata con il login Se come shell é indicata /sbin/nologin, /bin/false o simili, l’utente non puó mai accedere al sistema con un login. – p. 14
  • 146. Utenti: /etc/passwd - 3 Esempio di file /etc/passwd: root: x: 0: 0: root: /root: /bin/bash bin: x: 1: 1: bin: /bin: /sbin/nologin daemon: x: 2: 2: daemon: /sbin: /sbin/nologin ... ftp: x: 14: 50: FTP User: /var/ftp: /sbin/nologin ... apache: x: 48: 48: Apache: /var/www: /bin/false ... paolo: x: 500: 500: : /home/paolo: /bin/bash mario: x: 501: 501: Mario Rossi: /home/mario: /bin/bash (gli spazi sono stati aggiunti per chiarezza). – p. 14
  • 147. Utenti: /etc/passwd - 3 Nell’esempio precedente le password cifrate sono indicate con delle x. Questo perché é presente il meccanismo delle shadow password: le password (cifrate) sono riportate nel file /etc/shadow, in modo da impedire attacchi a forza bruta per decifrare le password ( /etc/passwd deve essere leggibile a tutti, mentre /etc/shadow è accessibile solo a pochi processi). É fortemente consigliato attivare il meccanismo delle shadow password. – p. 14
  • 148. Utenti: passwd Con il comando passwd si puó definire la propria password, oppure modificare quella di un dato utente il cui username é passato come parametro (avendo i permessi per farlo). – p. 14
  • 149. Utenti: su Il comando su (Set User) permette di cambiare la propria identitá con quella di un altro utente, specificato su linea di comando come parametro. Se non c’é alcun parametro si intende root. Occorre fornire la password dell’utente desiderato perché l’operazione possa compiersi. Con su user si chiede di assumere l’identitá dell’utente user, mentre con su - user si esegue inoltre tutta la fase di login. – p. 14
  • 150. Utenti: /etc/group - 1 Il file /etc/group contiene l’elenco di tutti i gruppi presenti nel sistema. Per ogni gruppo viene riportato l’elenco degli utenti che ne fanno parte. groupname password GID user-list – p. 15
  • 151. Utenti: /etc/group - 2 Il significato dei campi é il seguente: groupname il nome del gruppo password la password associata al gruppo (se presente e se non si usano le shadow password) GID il Group ID user-list l’elenco, separato da virgole, degli account che fanno parte del gruppo. – p. 15
  • 152. Utenti: /etc/group - 3 Esempio di un file /etc/group: root: x: 0: root bin: x: 1: root,bin,daemon ... wheel: x: 10: root paolo: x: 500: In caso di shadow password le password dei gruppi sono riportate cifrate in /etc/gshadow. (tipicamente non si usano password per i gruppi). RedHat usa, per ogni utente non di sistema, un gruppo che ha l’utente come unico partecipante, e con GID uguale all’UID. – p. 15
  • 153. Utenti: useradd Il comando useradd consente di aggiungere un utente al sistema. useradd <-s shell> <-d home_dir> <-u UID> <-p passwd> account – p. 15
  • 154. Utenti: userdel Il comando userdel rimuove un utente dal sistema. userdel account Se si aggiunge lo switch -r viene rimossa anche la home directory dell’utente e la mailbox. – p. 15
  • 155. Utenti: groupadd Il comando groupadd aggiunge un gruppo al sistema. groupadd <-g GID> group-name – p. 15
  • 156. Utenti: groupdel Il comando groupdel rimuove un gruppo dal sistema, se non ci sono piú utenti nel sistema appartenenti a quel gruppo. groupdel <group-name> – p. 15
  • 157. L’ambiente grafico: X La gestione dell’ambiente grafico viene realizzata mediante piú programmi. Alla base c’é l’X Server, che realizza l’astrazione dall’hardware grafico e mette a disposizione di ulteriori programmi delle primitive come la gestione di finestre a video. L’ambiente si chiama X Window System, o anche X11, o X11R6. – p. 15
  • 158. L’ambiente grafico: X server e X client X é progettato per operare su rete, con un server che accetta le richieste dell’utente inviandole a dei programmi client di cui mostra l’output. Il server puó operare su piattaforme diverse da Linux. – p. 15
  • 159. L’ambiente grafico: desktop manager Sulle funzionalitá offerte da X sono poi definiti dei desktop manager, come ad esempio Gnome e KDE. Ne esistono molti altri, che hanno ad esempio richieste di memoria e di processore meno esose. É importante ricordare che il kernel, X, il desktop manager sono tutte componenti distinte tra loro: gli ultimi due sono solo degli insiemi di programmi applicativi a cui il kernel offre dei servizi come a tutti gli altri. – p. 15
  • 160. L’ambiente grafico: /etc/X11/XF86Config Il file /etc/X11/XF86Config contiene la configurazione di X, specificando informazioni quali la scheda video, il monitor, i dispositivi di input, e l’uso o meno di alcune funzionalità come ad esempio i caratteri freetype. – p. 16
  • 161. L’ambiente grafico: xf86config E’ il programma che permette di generare il file di configurazione per X. Le schede disponibili sono riportate nella directory /usr/share/hwdata. – p. 16
  • 162. Stampare: /etc/printcap e printtool Questo file contiene la descrizione di tutte le stampanti collegate al sistema, insieme ad un loro nome simbolico da utilizzare per indicarle. Questo file puó essere modificato sia a mano che tramite redhat-config-printer (printtool). – p. 16
  • 163. Stampare: CUPS Il Common Unix Printing System é il nuovo sistema di configurazione delle stampanti, che gestisce molto meglio le stampanti non laser rispetto a printtool. La sua configurazione avviene tramite una interfaccia web. – p. 16
  • 164. Stampare: lpr Una volta che si é configurata la stampante, per stampare da linea di comando si puó utilizzare il comando lpr, che opera anche come uno spooler di stampa. lpr -P laser file.ps stampa il file file.ps utilizzando la stampante di nome laser. – p. 16
  • 165. Stampare: lpq Il comando lpq mostra lo stato della coda di stampa per una specificata stampante. lpq -P laser mostra la coda di stampa per la stampante di nome laser. – p. 16
  • 166. Stampare: lprm Il comando lprm consente di rimuovere un dato job dalla coda di stampa di una stampante. lprm -P laser 2 Rimuove il secondo job dalla coda. lprm -P laser all Rimuove tutti i job dalla coda. – p. 16
  • 167. Stampare: lpd Il demone lpd é il processo che si occupa della gestione della stampa, gestendo lo spool di stampa. Tramite i suoi file di configurazione si puó stabilire chi ha diritto di stampare e su quali stampanti, gestire l’accounting delle stampe, ecc.. – p. 16
  • 168. Interoperabilitá: SCP Per trasferire file da e verso una macchina Linux su cui si ha un account si puó usare il comando scp: scp file user@host:percorso Esistono implementazioni di scp per tutti i sistemi operativi. Inoltre per Windows esiste una versione grafica, WinScp: http://winscp.sourceforge.net, che é open source. – p. 16
  • 169. Interoperabilitá: FTP e ssh Se sulla macchina Linux é installato un server FTP é possibile prelevare (ed eventualmente depositare) file adottando un qualsiasi client FTP. Un client SSH per Windows open source é ad esempio PUTTY. – p. 16
  • 170. Interoperabilità: VNC - 1 Se sulla macchina Linux viene installato e configurato un server VNC, si puó accedere in modalitá grafica con un client VNC, utilizzando ad esempio: RealVnc, http://www.realvnc.com TightVnc, http://www.tightvnc.com – p. 17
  • 171. Interoperabilitá: VNC - 2 Il vantaggio principale di VNC é che il client è di dimensioni minime (100 Kb). Il limite principale é rappresentato dal fatto che tutti i dati viaggiano in chiaro! VNC non deve mai essere usato in un ambiente di produzione o per controllare un server non in una rete locale. – p. 17
  • 172. Interoperabilitá: VNC - 3 Per utilizzare VNC occorre specificare sia l’hostname della macchina remota che l’utente con cui ci si vuole collegare. La sintassi adottata in genere é host:utente, per cui 10.2.3.60:0 potrebbe essere l’utente X della macchina 10.2.3.60, mentre 10.2.3.60:1 potrebbe essere l’utente Y. Ciascuno di questi utenti ha una propria password ed un proprio desktop. – p. 17
  • 173. Interoperabilitá: Server X - 1 E’ possibile installare un server X che consenta quindi di avere una modalitá grafica e di avere il traffico cifrato con SSH. Non esistono server X per Windows gratuiti. Tra quelli a pagamento citiamo HummingBird Exceed. – p. 17
  • 174. Interoperabilitá: Server X - 2 Per attivare una sessione X sotto Windows occorre tipicamente: 1. Attivare il server X sotto Windows, eventualmente specificando che deve accettare connessioni dalla macchina Linux (remota); 2. Collegarsi via SSH alla macchina Linux, ed impostare la variabile di ambiente DISPLAY in questo modo: export DISPLAY=<ip-macchina-windows>:0.0; 3. Comunicare al server X (locale) che si accettano connessioni da remoto, ad esempio con il comando xhost + 4. Lanciare l’applicazione richiesta, o l’intero ambiente grafico (ad esempio con gnome-session); – p. 17
  • 175. Data ed ora: date Il comando date riporta che ora é. É possibile specificare diversi formati con cui visualizzare l’ora, cosí come chiedere di visualizzare una data ora in un certo formato. date Mostra l’ora corrente date - -date=”08:00:00 PST” mostra l’ora passata come parametro nell’ora corrente – p. 17
  • 176. Data ed ora: hwclock - 1 Per determinare che ora é, Linux utilizza una struttura a livelli. Alla base c’é l’hardware clock, ovvero l’orologio aggiornato dalla batteria tampone. Il comando hwclock permette di leggere od impostarne il valore. L’unica funzione di questo orologio hardware é di tenere conto dell’ora quando Linux non é in funzione. – p. 17
  • 177. Data ed ora: hwclock - 2 L’orologio hardware non é molto accurato, ma la maggior parte degli errori che compie sono predicibili: va avanti od indietro di una quantitá quasi costante, che puó essere calcolata e di cui il kernel puó tenere conto per correggere l’ora. Questa correzione viene eseguita con l’opzione - -adjust – p. 17
  • 178. Data ed ora: Timezone All’ora contenuta nell’hwclock bisogna aggiungere le quantitá dovute al fuso orario e all’ora legale: in questo modo quando cambia l’ora legale non occorre intervenire sul clock hardware. La timezone é configurabile tramite il programma redhat-config-date – p. 17
  • 179. Data ed ora: NTP É spesso necessario che tutti i computer presenti in rete abbiano la stessa ora. Per questo esiste un protocollo di sincronizzazione apposito, il Network Time Protocol. Il protocollo NTP si basa sull’utilizzo di server NTP, che forniscono l’ora, e su client NTP, che vi si adeguano. – p. 17
  • 180. Data ed ora: ntpdate Il comando ntpdate regola l’ora secondo quella riportata da un server ntp passato come parametro. L’adeguamento é immediato. ntpdate ntp.ien.it Usa il server dell’Istituto Elettrotecnico Nazionale (l’ora ufficiale italiana). Altri server sono: ntp2.ien.it ntps.net4u.it ntpdate 10.16.0.62 (Fastweb) ntpdate 10.96.0.62 (Fastweb) É sempre consigliato (e dovuto) utilizzare i server NTP del proprio provider. – p. 18
  • 181. Data ed ora: ntpd Il demone ntpd sincronizza costantemente l’ora con quella di uno o piú server NTP, e puó a sua volta operare come client. La sua configurazione é riportata nel file /etc/ntp.conf. Gli aggiornamenti che effettua sono progressivi, quindi conviene procedere una prima volta con ntpdate e poi lasciare il compito delle correzioni minime a ntpd. – p. 18
  • 182. Hardware: lspci Il comando lspci mostra l’elenco dei dispositivi presenti sul bus pci. lspci -v riporta piú informazioni. lspci -vv riporta ulteriori informazioni. – p. 18
  • 183. Hardware: /proc/cpuinfo Il file /proc/cpuinfo contiene informazioni su tutti i processori presenti nel sistema. cat /proc/cpuinfo processor : 0 vendor id : GenuineIntel cpu family : 5 model : 4 model name : Pentium MMX stepping : 3 cpu MHz : 200.458 ... – p. 18
  • 184. Hardware: /proc/interrupts Il file /proc/interrupts riporta, per ogni IRQ di ogni processore presente nel sistema, quante volte é scattato e a quale dispositivo é associato. CPU0 0: 3152659 XT-PIC timer 1: 135243 XT-PIC keyboard 2: 0 XT-PIC cascade 4: 327829 XT-PIC serial 5: 1 XT-PIC soundblaster 8: 1 XT-PIC rtc 12: 0 XT-PIC eth0 ... – p. 18
  • 185. Controllare il sistema: df Il comando df (disk free) mostra per ogni partizione montata quanto spazio é stato usato, quanto é ancora disponibile (tutto in blocchi da 1 KB) e il mount point. df riporta lo spazio utilizzato df -i riporta quanti inode sono stati usati e quanti sono liberi. df -h usa MB E GB come abbreviazioni. – p. 18
  • 186. Controllare il sistema: free Il comando free riporta informazioni sull’occupazione della memoria. $ free total used free shared buffers cached Mem: 94964 88188 6776 0 8708 43308 -/+ buffers/cache: 36172 58792 Swap: 532268 7164 525104 – p. 18
  • 187. Controllare il sistema: whereis Il comando whereis ricerca i sorgenti, i binari e le pagine di manuale per un dato comando. Non considera il PATH corrente! Il suo scopo é quello di mostrare se un comando é installato nella locazione standard. $ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz – p. 18
  • 188. Controllare il sistema: which Il comando which ricerca, nel PATH corrente, il/i parametri passato come argomento, permettendo quindi di vedere cosa viene invocato in caso di esecuzione dell’argomento stesso. Se non trova nulla mostra il PATH corrente. $ which ls alias ls=’ls –color=tty -a -F -v’ /bin/ls Ovvero il comando eseguito é /bin/ls e sono automaticamente aggiunti i parametri riportati nell’alias. – p. 18
  • 189. Controllare il sistema: ps - 1 Il comando ps mostra i processi in corso di esecuzione sul sistema. Sono possibili diverse opzioni combinabili tra loro, sia per selezionare i processi da mostrare che per le modalitá di visualizzazione. ps mostra i processi interattivi associati alla console dell’utente ps -A oppure ps -e mostra tutti i processi del sistema. ps a mostra tutti i processi del terminale corrente. ps x seleziona solo i processi senza terminale (i demoni). – p. 18
  • 190. Controllare il sistema: ps - 2 ps -f Output esteso. ps -v Mostra la quantitá di memoria usata. ps -e Mostra l’ambiente usato dal comando. ps - -cols 100 pone a 100 la dimensione di una riga (mostra solo i primi 100 caratteri per riga) Combinazioni tipiche: ps acxfu ps -ef – p. 19
  • 191. Controllare il sistema: top Il comando top mostra lo stato del sistema e i processi in esecuzione, ordinati per quantitá di CPU utilizzata. I dati sono aggiornati ogni 5 secondi. Lanciato il comando si puó: cambiare l’intervallo di aggiornamento con s ordinare per memoria usata con M uccidere un processo con k ottenere l’help con h uscire con q – p. 19
  • 192. Controllare il sistema: w e whoami Il comando w (Who) riporta l’elenco degli utenti collegati al sistema. Il comando whoami riporta l’identitá dell’utente che lo lancia. – p. 19
  • 193. Controllare il sistema: watch Il comando watch permette di eseguire un comando (passato come parametro) periodicamente, mostrandone l’output a schermo. watch ls /var/log esegue ogni 2 secondi il comando ls /var/log watch -n 10 - -differences esegue ogni 10 secondi il comando uptime e enfatizza le differenze tra esecuzioni consecutive. Si termina il comando premendo Ctrl-c (con Ctrl-z si mette il programma in background). – p. 19
  • 194. Controllare il sistema: nice Il comando nice esegue un programma con una prioritá impostata. (ogni programma viene per default eseguito con la stessa prioritá del programma che l’ha lanciato). nice -20 program esegue program con la massima prioritá. nice 19 program esegue program con la prioritá minima. nice Mostra la prioritá corrente. nice program Esegue il programma con un aggiustamento pari a 10 (ovvero con meno prioritá!) – p. 19
  • 195. Controllare il sistema: renice Il comando renice permette di cambiare la prioritá di uno o piú processi in esecuzione. I processi sono specificati per PID, gruppo o utente. renice +1 1234 Riduce la prioritá del processo con PID pari a 1234. renice -2 -u root Aumenta di 2 la prioritá dei processi con owner pari a root. – p. 19
  • 196. Controllare il sistema: kill - 1 Il comando kill invia un segnale ad un dato processo. Se il segnale viene omesso il segnale é TERM (terminazione dolce). Questo comando é localizzato in /bin/kill, molte shell hanno una funzione kill interna che viene eseguita al posto del comando se non viene specificato il PATH completo. Ad esempio, la shell Bash ha una funzione kill che accetta anche il nome del programma a cui inviare il segnale, mentre il programma kill vuole il PID. kill program Esegue il kill della shell (se presente), altrimenti il programma /bin/kill mandando in entrambi i casi il segnale TERM al programma program. – p. 19
  • 197. Controllare il sistema: kill - 2 /bin/kill -9 program Invia il segnale KILL (terminazione immediata) al programma programma. Se l’utente é autorizzato ad inviare questo segnale il risultato é che il programma program termina immediatamente, tutte le risorse (di memoria, di processore ecc) ad esso associate sono rilasciate. É opportuno inviare prima un kill senza parametri, in modo da permettere al programma di terminare dolcemente (chiudendo i file aperti, svuotando i buffer). Se il programma, dopo qualche secondo, non termina, lo si puó ammazzare. – p. 19
  • 198. Controllare il sistema: kill - 3 Spesso questo comando puó essere usato per forzare un server (ovvero un demone in esecuzione) a leggere un file di configurazione che é stato cambiato, senza riavviare il demone stesso. kill -SIGUSR2 xinetd Forza il programma xinetd a rileggere la configurazione. – p. 19
  • 199. Controllare il sistema: nohup - 1 Il segnale HUP (Hang UP) viene inviato ad un programma quando il processo padre é terminato oppure il terminale che lo controlla viene rilasciato, quindi ad esempio quando un utente fa il logout. Se si vuole che il programma continui a girare (in background) lo si deve lanciare con il comando nohup. nohup program param1 ... paramN Esegue il comando program con parametri param1 ... paramN immunizzandolo agli hang-up. – p. 19
  • 200. Controllare il sistema: nohup - 2 nohup wget -t 0 -c -q ftp://URL Preleva il file ftp://URL in modalitá silenziosa (-q), continuando ogni volta da dove si era interrotto (-c) finché non lo ottiene tutto (-t 0). Se l’utente che ha lanciato il programma effettua il logout il trasferimento prosegue. – p. 20
  • 201. Controllare il sistema: jobs É un comando di shell che mostra quali processi sono in background. I processi in background, oltre ad essere comunque identificati dal loro PID, sono identificati da numero intero progressivo dalla shell, preceduto dal segno %. $ jobs [1]+ Stopped watch ls – p. 20
  • 202. Controllare il sistema: fg Il comando di shell fg (foreground) riporta in primo piano il processo in background indicato. fg %1 riporta in background il processo indicato dalla shell come %1. – p. 20
  • 203. Controllare il sistema: bg Il comando di shell bg (background) manda in background il processo indicato. bg %1 manda in background il processo indicato dalla shell come %1. Se il processo é quello che controlla il terminale corrente, si ottiene (in genere) lo stesso effetto premendo Ctrl-Z. – p. 20
  • 204. Controllare il sistema: uname Il comando uname riporta una serie di informazioni sul sistema. uname Riporta il nome del sistema operativo (Linux). $ uname -a Linux my.computer.tld 2.4.22 #8 Wed Oct 15 13:17:49 CEST 2003 i586 unknown – p. 20
  • 205. Controllare il sistema: swapon e swapoff Questi due comandi attivano (swapon) e disattivano (swapoff) una o piú partizioni di swap. Le partizioni di swap sono attivate all’avvio del sistema. Con il flag -s si ottengono informazioni sull’uso delle partizioni medesime. – p. 20
  • 206. Controllare il sistema: vmstat Il comando vmstat mostra informazioni sull’uso della memoria virtuale ( principale e di swap). vmstat Sotto le colonne si ed so sono riportati (in KB/s) i dati di swap in (da disco) e swap out (su disco). La descrizione di tutti i dati mostrati é nella pagina di manuale. vmstat n ricalcola e mostra i dati ogni n secondi. – p. 20
  • 207. Controllare il sistema: dmesg Il comando dmesg riporta quanto stampato dal sistema durante l’ultimo boot. Puó quindi essere usato per vedere se tutto l’hardware é stato rilevato e configurato correttamente. – p. 20
  • 208. Controllare il sistema: /var/log/messages Il file /var/log/messages contiene numerose informazioni sull’attivitá del sistema, come ad esempio il login e il logout degli utenti, l’installazione e rimozione di moduli del kernel, la partenza di alcuni programmi. – p. 20
  • 209. Networking: ping Il comando ping permette di verificare se un host o un router (specificato per nome o per indirizzo IP sulla riga di comando) é raggiungibile o meno. ping hostname-or-address – p. 20
  • 210. Networking: traceroute Il comando traceroute mostra il percorso seguito dai pacchetti per raggiungere un host. /usr/sbin/traceroute hostname-or-address – p. 21
  • 211. Networking: telnet Il comando telnet apre una connessione TCP con l’host specificato sulla linea di comando e sulla porta specificata; se la porta non viene specificata si intende la 23 (remote shell o telnet). telnet hostname-or-address <port> É il modo piú semplice di verificare se un certo servizio di rete é attivo o meno (porta 110 per POP3, 80 per HTTP, 25 per SMTP, 21 per FTP...) – p. 21
  • 212. Networking: ssh - 1 I dati spediti via telnet sono tutti in chiaro, e questo rende il protocollo non sicuro (ed é il motivo per cui l’accesso in remoto via telnet é di solito disabilitato). Il programma ssh consente di accedere in remoto ad una macchina via il protocollo SSH, quindi con tutto il traffico cifrato. ssh username@macchina – p. 21
  • 213. Networking: ssh - 2 Il nome della macchina remota deve essere sempre specificato. Se lo username non viene specificato si utilizza lo stesso della sessione della macchina locale. ssh -X username@macchina esporta la modalità grafica. Sulla macchina locale deve essere presente un client X. – p. 21
  • 214. Networking: scp Il comando scp (secure cp) consente di copiare file da/su una macchina remota, cifrando il traffico. Puó essere usato come alternativa sicura (e piú facilmente configurabile) di un ftp server e client. scp sorgente destinazione Se sorgente o destinazione sono locali si usa la normale sintassi per i nomi di file. Altrimenti occorre specificare anche lo username e la macchina sorgente/destinazione: username@macchina:percorso-file – p. 21
  • 215. Networking: ftp Il comando ftp apre una sessione FTP con un’host remoto. ftp hostname-or-address Una volta aperta la sessione occorre autenticarsi (tipicamente con username uguale ad anonymous e password un indirizzo di e-mail). Ciò fatto si naviga nel server FTP con i comandi ls, cd, pwd analoghi a quelli di Unix, e si preleva un file con get <nomefile>. – p. 21
  • 216. Networking: whois Il comando whois interroga un database whois, e permette quindi di ottenere informazioni sui gestori di un dominio o sul proprietario di un indirizzo IP. whois <-h whois-server> domain-or-address – p. 21