Amministrazione base dei sistemi Linux

Post on 07-Dec-2014

3.807 views 1 download

description

Corso per l'amministrazione base di un sistema Linux, della durata di 8-16 ore

Transcript of Amministrazione base dei sistemi Linux

Corso su LinuxUsare 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 emultiprogrammato:

multiprogrammato: piú processi si contendono l’uso dellerisorse del sistema;

multiutente: utenti diversi richiedono al sistema dicompiere delle operazioni, e sono autorizzati o meno acompierle.

– p.

Cenni su Unix - 3

Un sistema Unix consente di eseguire in modo efficientemolte centinaia di processi distinti che operanoconcorrentemente.Unix é particolarmente orientato ad applicazioni server e acompiti di networking: Internet é stata sviluppata su Unix.La compatibilitá tra le diverse versioni di Unix é a livello dicodice sorgente e di comandi di sistema disponibili.Le specifiche di Unix sono pubbliche, le implementazionisono proprietarie oppure liberamente usabili (FreeBSD).

– p.

Cosa é Linux

Linux é una implementazione di Unix realizzata partendoda zero, e distribuita secondo la licenza GPL (Gnu PublicLicense).Linux nasce nel 1991 ad opera di Linus Torvalds, a cui sisono aggiunti negli anni centinaia di sviluppatori cheoperano gratuitamente e si coordinano tramite una mailinglist pubblicamente accessibile. Torvalds é il responsabileultimo di ogni decisione relativa alle funzionalità da inserirenel kernel e sulla scelta tra le diverse implementazionipossibili.

– p.

La licenza GPL

La licenza GPL (GNU Public License) rappresental’essenza del software libero. Con una licenza GPL si puó:

ottenere il software gratuitamente ed in formatosorgente, pagando eventualmente delle spese dispedizione;

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’autoreoriginale, ma solo sotto licenza GPL;

– p.

I sistemi GNU/Linux

Linux é il kernel, tutti gli altri programmi necessari alfunzionamento del sistema (il compilatore C, la libreria C) eil software di sistema (i comandi di base) sono sviluppati daun altro organismo, la Free Software Foundation, che neglianni ’80 ha dato il via alla realizzazione di un proprio Unixgratuito (GNU é un anti-acronimo, significando GNU is NotUnix).

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

– p.

Caratteristiche di Linux - 1

Linux é un sistema operativo multipiattaforma, nella suaultima 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. 10

Caratteristiche di Linux - 2

É una implementazione di UnixMultiutenteMultiprocesso

Multiprocessing simmetrico (SMP), da 2 a 16processori (di piú con il kernel 2.6)

Minime richieste hardware (il kernel occupa meno di 2MB di memoria)

Grande interfacciabilitá verso altri sistemi operativi

Particolarmente ottimizzato per il networking

– p. 11

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, cisono state la 0 e la 1)

2. Patchlevel: il livello di patchNumeri pari: versioni stabili del kernelNumeri dispari: versioni di sviluppo

3. Sublevel: un numero progressivo che rappresenta levarie sottoversioni.

– p. 12

La numerazione del kernel - 2

Quindi ad esempio 2.4.24 é una versione stabile, mentre2.5.33 é una versione di sviluppo.Una versione stabile non é necessariamente priva di bug!Se ci sono dei bug, questi vengono segnalati alla mailinglist di sviluppo e corretti in una delle prossime versioni(SubLevel maggiore).

Al 9 Luglio 2004 esistono diversi rami stabili della versione2.0 ( finger @kernel.org ):

2.0.40

2.2.26

2.4.26

2.6.7

– p. 13

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 disviluppo attivo.Progressivamente la versione 2.6 diventerá stabile, e ad uncerto punto si passerá allo sviluppo della versione 2.7, cheincorporerá nuove funzionalitá (nello sviluppo di unaversione pari si correggono sono gli errori presenti). Losviluppo della versione 2.6 si limiterá a correggere problemidi sicurezza.

– p. 14

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 ognipiattaforma) e viene distribuito in formato sorgente (circa200 MB non compressi). Ottenuti i sorgenti, occorrecompilarli sulla propria macchina per avere un kernel dapoter installare, oppure usare un kernel compilato da terzeparti.

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

– p. 15

La libreria e il compilatore C

La libreria e il compilatore C sono due componentiessenziali del sistema.Il kernel stesso viene compilato usando il compilatore C, epraticamente tutti i programmi presenti usano direttamenteo indirettamente la libreria C.

– p. 16

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 percompilare il kernel

3.3-3.4 la nuova versione, utilizzabile per compilare lamaggior parte dei programmi

Sono disponibili molti altri linguaggi di programmazione: avolte i relativi compilatori operano traducendo il codice inlinguaggio C/C++ e poi invocando il compilatore gcc.

– p. 17

La libreria C

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

– p. 18

Le librerie dinamiche

Le librerie utilizzate dai programmi possono esserecollegate agli stessi in modo statico o dinamico.Il consolidamento statico viene preferito quando occorreavere un programma che possa funzionare in modoindipendente dal resto del sistema, avendo al suo internotutto il codice necessario al funzionamento.Il consolidamente dinamico é di gran lunga il piú usato,permettendo di avere programmi di dimensioni minori.

– p. 19

Gli standard di Linux

Con la diffusione di Linux, e l’esistenza di molti venditori disoluzioni basate su questo sistema, si é reso necessariodefinire degli standard per garantire uno standard comuneche governi:

le funzioni esportate da alcune delle librerie dinamiche

la dislocazione di alcuni dei file (di configurazioni o dicomandi) presenti nel sistema

i parametri di alcuni dei comandi di sistema

Un consorzio indipendente ha realizzato lo standardrelativo, il Linux Standard Base (LSB):http://www.linuxbase.org.

– p. 20

Le distribuzioni - 1

Un sistema Linux contiene quindi un kernel, delle libreriedinamiche, del software di sistema, e dei programmiapplicativi. Tutti questi componenti sono variamenteinterdipendenti (ad esempio un certo programma richiedeuna certa versione di una libreria) ed occorre quindi garantireche l’installazione, la rimozione o l’aggiornamento di uno diquesti componenti non comprometta il funzionamentodell’intero sistema.Questo é uno dei compiti svolto una distribuzione.

– p. 21

Le distribuzioni - 2

Una distribuzione è fondamentalmente, quindi, un sistemadi gestione delle dipendenze, anche se ci sono altrielementi specifici per una distribuzione, come ad esempio ilmodo in cui viene effettuata la configurazione dell’hardwaree come sono attivati i servizi offerti dalla macchina.Esistono centinaia di distribuzioni di Linux, che coprononecessitá molto diverse (e sono quindi fornite anche coninsiemi di software applicativi diversi).

– p. 22

Le distribuzioni - 3

Le piú diffuse e significative distribuzioni per Linux sono:

RedHat

Debian

SuSe

Mandrake

Slackware

Gentoo

– p. 23

La distribuzione RedHat

La piú diffusa distribuzione per Linux, é oggi presente in piúversioni:

Red Hat Linux/Red Hat Fedora la versione gratuita eprelevabile 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 apagamento é l’assistenza fornita. Il sistema di gestionedelle dipendenze si basa in ogni caso sul software rpm(RedHat Package Manager).

– p. 24

Le distribuzioni SuSe e Mandrake

Queste due distinte distribuzioni usano lo stesso packagemanager di RedHat, e si differenziano sul modo in cui isingoli pacchetti sono organizzati.Sono anch’esse disponibili in due versioni, una gratuita eprelevabile da Internet, ed una a pagamento in cui siaggiungono dei software proprietari e/o dell’assistenzatecnica.

– p. 25

La distribuzione Debian

Questa distribuzione é completamente gratuita, realizzatada un gruppo di volontari. Utilizza un proprio sistema digestione dei pacchetti (il cui nucleo é il software dpkg ).E’ divisa in tre filoni:

stable che viene aggiornata ogni 2 anni circa, econtiene software ampiamente testato;

testing che contiene quella che diventerá la prossimaversione Stable;

unstable che contiene software instabile o sottosviluppo attivo;

– p. 26

La distribuzione Gentoo

Ultima arrivata tra le distribuzioni piú famose, haguadagnato rapidamente popolaritá per l’idea innovativa sucui si basa: tutto il software installato viene ricompilato inlocale, in modo da ottimizzarlo al massimo dal punto divista delle prestazioni.

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

– p. 27

La distribuzione Slackware

E’ la distribuzione piú essenziale: il sistema di gestionedelle dipendenze é spartano (ed é stato introdotto in tempirecenti, prima era compito dell’amministratore del sistemacapire se e come era possibile installare o rimuovere undato programma).E’ anche la distribuzione che permette il massimo grado dicontrollo su ció che viene installato nel sistema.

– p. 28

Quale é la migliore distribuzione?

Non esiste una distribuzione migliore delle altre. Ognibuona distribuzione ha un suo campo d’elezione:

Suse/Mandrake per avere un Linux molto user friendly

Fedora per una distribuzione RedHat ma di sviluppo (edinstabile)

Debian per avere la massima stabilitá e semplicitá diamministrazione;

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. 29

Utenti

Gli utenti presenti nel sistema (sia le persone che i processidi sistema) sono univocamente identificati da un numerodetto UID (User ID). A questo numero é associata poi unastringa identificativa, ma il kernel considera sempre e solol’UID.É sempre presente un utente, root , identificato da UID paria 0 che non ha alcuna restrizione nelle operazioni checompie sul sistema.

– p. 30

Processi - 1

Un processo é l’esecuzione di un programma. Lo stessoprogramma puó quindi essere eseguito piú volte anchecontemporaneamente, dando luogo a piú processi distinti.Ogni processo é identificato univocamente da un numerodetto PID (Process ID). Il PID é unico in un dato momento,ma puó essere riutilizzato in seguito per un altro processo.

– p. 31

Processi - 2

I processi sono organizzati gerarchicamente: ogni processoha un processo padre (che é il processo che ne ha chiestol’attivazione), ad eccezione del processo init . Due processifigli dello stesso padre sono detti fratelli. Un processo figliodiventa orfano quando il processo padre termina (magariinaspettatamente), e viene “adottato” dal processo init.

– p. 32

File - 1

Sotto Linux, come in ogni Unix, tutto é un file.Tutti i dispositivi fisici collegati al sistema sono visti comedei 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, ela directory radice é indicata con /. Nei nomi di file ledirectory sono separate dal simbolo /.

– p. 33

File - 2

Tutti i filesystem e i dispositivi montati sono visti comesottodirectory della directory radice.Ad esempio, il contenuto di un floppy potrebbe esserepresente nella directory /mnt/floppy : quindi le operazioni dilettura e scrittura dei file in quella directoryleggeranno/modificheranno i file sul floppy.

– p. 34

File - 3

Ad ogni file sono associate molte informazioni, come adesempio:

Data di creazione, ultimo accesso, ultima modifica

Proprietario del file

Permessi sul file

La combinazione dei permessi sul file, sulla directory in cuiil file é contenuto (e sulle superdirectory in cui é contenutala directory) definiscono quali operazioni un utente puócompiere sul file.

– p. 35

File - 4

Esistono diversi tipi di file:

(regular) file

directory

link

socket

named pipe (FIFO)

block device

character device

– p. 36

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 possonorichiedere permessi speciali)

/home Contiene le home directory degli utenti

/root Contiene l’home directory dell’utente root

/tmp Directory temporanea

– p. 37

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. 38

La directory /dev - 1

I file presenti in /dev rappresentano tutti i dispositivicollegati o collegabili al sistema. La lettura o scrittura suquesti file si concreta nella lettura o nella scritturadirettamente sui dispositivi che rappresentano.Quindi ad esempio scrivere sulla scheda audio significamandare in play un file, e leggere dal file che rappresenta latastiera significa acquisire il carattere premuto dall’utente(se c’é).

– p. 39

La directory /dev - 2

I dischi EIDE sono rappresentati secondo questanumerazione:

/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 cheindica la partizione (primaria od estesa):

/dev/hda1 Prima partizione di /dev/hda

/dev/hdb2 Seconda partizione di /dev/hdb

– p. 40

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. 41

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 ognioperazione di scrittura ha successo

/dev/random un file che si comporta come un generatoredi numeri casuali

– p. 42

Il filesystem /proc - 1

La directory /proc contiene il filesystem /proc. I filecontenuti 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 contenutodei file viene creato dinamicamente quando vengono letti.

– p. 43

Il filesystem /proc - 2

Il tuning dinamico dei parametri del kernel viene effettuatoscrivendo i valori desiderati all’interno di file contenuti nelladirectory /proc/sys .I parametri correnti sono visualizzabili leggendo gli stessifile.I file del tipo /proc/<nnnn> contengono informazioni sulprocesso con PID pari a nnnn.

– p. 44

Il filesystem swap

Linux utilizza di solito una partizione del disco come area diswap. In questa area vengono allocate le pagine dimemoria dei processi attualmente sospesi, in modo tale dalasciare spazio libero a processi in esecuzione che hannobisogno di piú memoria.É possibile avere piú partizioni di swap per aumentare leprestazioni, e viceversa avere un file come file di swap.Lo swap dovrebbe avere una dimensione pari ad 1-2 voltela memoria disponibile, ma comunque non oltre i 2 GB.

– p. 45

Il filesystem tmpfs

Originariamente chiamato shmfs (Shared Memory FS), éun filesystem che risiede completamente in memoria (siacentrale che di swap), aumentando o riducendo le propriedimensioni a seconda della quantitá di dati in esso presenti.

– p. 46

Gli inode

Per ogni file presente viene definito un inode, che é lastruttura in cui sono memorizzati i metadati associati al file(nome, proprietá, permessi, timestamp) e delle ulterioristrutture per consentire un accesso diretto veloce ai dati delfile.

– p. 47

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 unfilesystem Unix (proprietá e permessi dei file, gestione deimetadati per ogni file con gli inode).

– p. 48

Il filesystem ext2/ext3 - 1

Il primo filesystem sviluppato per Linux è stato il filesystemext2. La sua evoluzione ext3 é con esso del tuttocompatibile, aggiungendo solo un file che utilizza comejournal: le operazioni di modifica dei dati e dei metadati sudisco vengono prima scritte nel journal e solo in unsecondo tempo trasferite su disco.

– p. 49

Il filesystem ext2/ext3 - 2

In questo modo si evita che una interruzione forzata delsistema costringa a scansionare tutto il disco perripristinare la correttezza dei metadati (se possibile): in uncaso del genere é sufficiente riapplicare le modifichepresenti nel journal file.Si puó sempre passare da un filesystem ext2 ad uno ext3 eviceversa.

– p. 50

Il filesystem Reiserfs

É stato il primo filesystem di tipo journaled per Linux. Ledue funzionalitá aggiuntive piú importanti rispetto adext2/ext3 sono:

liste di controllo degli accessi a livello di file

gestione efficiente delle directory con molti file

– p. 51

I filesystem XFS e JFS

Sono entrambi filesystem di tipo journaled:

XFS é sviluppato da Sun. Ottimo nei file server, richiedeindispensabilmente un gruppo di continuitá poichéeffettua un notevole caching dei dati e dei metadati inmemoria

JFS sviluppato da IBM

– p. 52

I filesystem non nativi

Linux puó accedere in lettura (e in scrittura) a molti altrifilesystem, quali ad esempio:

FAT, VFAT, NTFS, HPFS

ISO9660, UDF

BeOS, QNX

– p. 53

Quale filesystem usare?

La scelta del filesystem dipende molto dal tipo di utilizzodella macchina:

PC personali, piccoli server : ext3 oppure Reiserfs.

mail server e file server : Reiserfs, XFS, JFS.

server Oracle : ext3 (per suggerimento di Oraclestessa), OCFS, raw devices

– p. 54

Come partizionare il disco?

Un buon partizionamento del disco prevede sempre unapiccola partizione di boot, di tipo ext2 oppure ext3, in cuiallocare le immagini dei kernel da lanciare, posizionataall’inizio del disco e con una dimensione di 100 MB.Si possono quindi avere piú partizioni per le varie parti delfilesystem (ad esempio, una partizione per i dati degliutenti), ed una partizione di swap.L’installazione di tutti i programmi forniti con RedHat nonrichiede piú di 5 GB. Oltre a questo bisogna aggiungere lospazio per applicativi esterni e per i dati utente.

– p. 55

Comandi su file: ls

Il comando ls (list) visualizza il contenuto di una directory.ls senza parametri oppure ls . fa riferimento alla directorycorrente, mentre ls .. della sovradirectory ..ls dirname riporta il contenuto della directory dirname (ilparametro passato può essere assoluto o relativo).Alcuni parametri:

-l per avere informazioni estese sui file;

-R per visualizzare ricorsivamente il contenuto dellesottodirectory;

-a per visualizzare anche i file che hanno un nome checomincia con .

-i visualizza il numero dell’inode di ogni file;

I parametri sono combinabili in un unico switch (ls -lR ).

– p. 56

Comandi su file: pwd

Il comando pwd (Print Working Directory) mostra ladirectory corrente.

pwd Mostra la directory corrente.

– p. 57

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é acd $HOME ).

– p. 58

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 nonesiste, quindi la sottodirectory livelli se non esiste, quindi ladirectory insieme se non esiste.

– p. 59

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 voltache viene invocato il comando rm si aggiunga inautomatico questo switch.rm dirname -fR rimuove una directory e tutti i file in essacontenuti.

I file cosí cancellati non sono recuperabili.

– p. 60

Comandi su file: rmdir

Il comando rmdir rimuove una directory purché sia vuota (ameno di uno switch che lo forzi altrimenti).

rmdir dirname rimuove la directory dirname se questa évuota.

– p. 61

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. 62

Comandi su file: mv

Il comando mv rinomina un file o lo sposta in un’altradirectory.

mv vecchio nuovo cambia il nome del file da vecchio anuovo.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. É quindiconsigliabile aggiungere lo switch -i che chiede nel casoconferma dell’operazione (anche con un alias).

– p. 63

Comandi su file: du

Il comando du (Directory Usage) permette di determinarequanto spazio é occupato dai file di una directory e dallesue sottodirectory.

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

– p. 64

Comandi su file: ln - 1

Il comando ln crea un link (hard o soft). Un hard link é a tuttigli effetti lo stesso oggetto con un altro nome, quindicancellando l’hard link si cancella anche l’oggetto dipartenza.

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

– p. 65

Comandi su file: ln - 2

ln -s dir1 nome-link la directory dir1 é ora accessibileanche via nome-link.

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

– p. 66

Comandi su file: fuser

Il comando fuser (File USER) riporta, per un file passatocome parametro sulla riga di comando, i PID dei processiche hanno quel file aperto.

$ fuser CorsoLinux.psCorsoLinux.ps 3890 4500

– p. 67

Comandi su file: file

Il comando file riporta, per ogni file passatocome parametro sulla linea di comando, il tipo del file stesso.

file *CorsoLinux.out: emptyCorsoLinux.ps: PostScript document text conforming at lev el 2.0CorsoLinux.tex: LaTeX 2e document textarchiviazione.tex: ISO-8859 text, with CRLF line terminat orsmyprog ELF 32-bit LSB executable, Intel 80386 [...]foto.jpg JPEG image data, JFIF standard 1.02, [...]

– p. 68

Comandi su file: touch

Il comando touch imposta l’ora di ultima modifica di un fileall’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 filenameall’ora attuale, ovvero lo crea se non esiste.

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

– p. 69

Comandi su file: locate, updatedb

Questo comandi permettono di ricercare un file (locate )consultando un database di nomi di file aggiornato conupdatedb che deve quindi essere eseguito periodicamente.

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

– p. 70

Comandi su file: slocate

Il problema di locate é che permette ad un utente dicontrollare quali file possiede un altro utente. Questa falladi 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 nomeo nel percorso, e che sono accessibili all’utente che hainvocato slocate.

E’ possibile non indicizzare alcune directory.

– p. 71

Comandi su file: find - 1

Il comando find permette di ricercare tutti i file chesoddisfano uno o piú criteri, ad esempio che abbiano unacerta dimensione, una stringa nel nome o nel percorso,alcuni permessi, siano stati creati o modificati in un certoarco di tempo, ... Sui file ottenuti é possibile compiere unaoperazione specifica, che di default é stampare il nome delfile.

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

– p. 72

Comandi su file: find - 2

find / -perm 0777 ricerca tutti i file che hanno tutti ipermessi di scrittura, lettura ed esecuzione impostati. Lo 0iniziale indica che si é adottata la notazione ottale.find / -name “*.[ch]” ricerca tutti i file sotto / cheterminano in .c oppure in .hfind / -name “*.txt” -print -exec cat { } \; ricerca tutti i fileche terminano in .txt, ne stampa il nome (-print) e suognuno di essi esegue il comando cat, con parametro ilnome del file.

– p. 73

Comandi su file: grep - 1

Il comando grep permette di ricercare delle stringheall’interno di uno o piú file di testo. Se la stringa vienetrovata viene mostrato il nome del file che la contiene e lariga.

grep saluti filename ricerca la stringa saluti all’interno delfile filename.grep inode *.c cerca la stringa inode in tutti i file .c delladirectory corrente.

– p. 74

Comandi su file: grep - 2

grep -v inode source.c mostra tutte le righe di source.cche non contengono la stringa inode. grep -lv inode *.cmostra tutti i nomi di file .c che non contengono la stringainode.grep -5 inode *.c scrive, per ogni occorrenza della stringainode all’interno di un file .c, le 5 righe seguenti.grep -B 10 inode *.c come sopra, ma mostra 10 righeprecedenti.

– p. 75

Comandi su file: chmod - 1

Il programma chmod consente di impostare i permessi suuno o più file. I permessi sono r per la lettura, w per lascrittura e x per l’esecuzione, e si applicano al proprietariodel 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 alproprietario del file, al suo gruppo e a tutti gli altri.chmod o-r file revoca il permesso di lettura del file al restodel mondo.

– p. 76

Comandi su file: chmod - 2

chmod u=rw file imposta il permesso di lettura e scritturadel file al proprietario, ma non quello di esecuzione. Gli altripermessi non sono toccati.chmod o-rwx file toglie i permessi di lettura, scrittura edesecuzione al resto del mondo.

– p. 77

Comandi su file: chmod - 3

Le modalita’ possono anche essere espresse con lanotazione ottale, usando 3 cifre (una per user, group edother). Ogni cifra indica il totale dei permessi cheuser/group/other ha sul file, pesati come:

1 esecuzione

2 scrittura

4 lettura

quindi per dare il permesso di lettura (2) e scrittura (4) auser, group ed other il comando sará: chmod 666 file

– p. 78

Comandi su file: chmod - 4

Invece per dare lettura, scrittura ed esecuzione alproprietario, lettura al gruppo e nessun permesso agli altri ilcomando sará: chmod 740 file .

chmod -R <permessi> opera ricorsivamente sulledirectory.

– p. 79

Comandi su file: chown

Il comando chown permette di cambiare l’utenteproprietario 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’utentepippo.chown -R pippo * Tutti i file della directory corrente e dellesubdirectory diventano di proprietá dell’utente pippo.

– p. 80

Operazioni su dischi: /etc/fstab - 1

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

DispositivoFisico MountPoint TipoDiFilesystem Opzioni D ump OrdineCheck

– p. 81

Operazioni su dischi: /etc/fstab - 2

Dove si ha:

DispositivoFisico é il nome del dispositivo (es: /dev/hda);

MountPoint é la directory che mapperá il contenuto deldispositivo fisico;

TipodiFilesystem é il tipo del file system (ext2, ext3, swap,VFAT, iso9660,proc);

Dump specifica se il contenuto della partizione deveessere processato da dump;

OrdineCheck specifica l’ordine in cui il file system deveessere analizzato al boot;

– p. 82

Operazioni su dischi: fstab - 3

Esempio di /etc/fstab:

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

– p. 83

Operazioni su dischi: mount - 1

Il comando mount permette di montare un file system.mount /msdos monta la directory /msdos se esiste unaentrata nel file /etc/fstab che la descrive.mount -t FSType -o options device dir monta ildispositivo device nella directory dir con le relative opzionied 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 ladirectory corrispondente esiste giá, altrimenti bisognacrearla con mkdir .

– p. 84

Operazioni su dischi: mount - 2

Una opzione particolarmente utile di mount permette dimontare un file come se fosse un disco: in questo modo sipuó ad esempio montare una immagine ISO9660 perverificarne il contenuto prima di procedere allamasterizzazione.

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

mount mostra tutti i file system montati.

– p. 85

Operazioni su dischi: umount - 1

Il comando umount (scritto senza la n, é un errore diortografia che si tramanda da decenni) smonta un filesystem. Affinché questo sia possibile occorre che nessunprocesso stia lavorando con quel file system (ad esempioavendo dei file aperti in lettura o scrittura oppure avendouna delle directory del file system come directory corrente).

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

– p. 86

Operazioni su dischi: umount - 2

Quindi se si vuole montare un floppy per leggerne omodificare 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 (escrivere in un secondo tempo) i dati modificati e solosmontando il dispositivo si forza il trasferimento degli stessisu disco.

– p. 87

Operazioni su dischi: sync

Con questo comando si chiede al sistema di sincronizzare ilcontenuto della memoria con i dati su disco, ovvero discrivere fisicamente su disco ogni dato (contenuto di file) emetadato (superblocchi, inodes,...) modificato.

sync sincronizza la cache di tutti i dischi.

– p. 88

Operazioni su dischi: /etc/mtab

Il file /etc/mtab contiene l’insieme dei file systemcorrentemente montati. É quindi un file aggiornatodinamicamente dal sistema operativo.$ cat /etc/mtab

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

– p. 89

Operazioni su dischi: fdformat

Con questo comando si puó formattare a basso livello unfloppy.

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

– p. 90

Operazioni su dischi: mkfs

Il comando mkfs crea un file system di tipo specificato suun dispositivo fisico.mkfs -t FSType <opzioni> dispositivo crea un file systemdi tipo FSType con le eventuali opzioni nel dispositivodispositivo.mkfs -t ext3 /dev/hdb3 crea un file system di tipo ext3 neldispositivo fisico /dev/hdb3.Il contenuto del dispositivo viene perso per sempre.

– p. 91

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.isocontenenente tutti i file della directory /home/user, comprese lesottodirectory. L’immagine ottenuta puó essere poi trasferita su CD-RWcon 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 modoconveniente.

– p. 92

Operazioni su dischi: dd - 1

Il comando dd (Data Dump) permette di leggere econvertire il contenuto di un file.

dd if=/dev/hda count=4 mostra i primi quattro settori deldisco /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. 93

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=2880conv=sync Copia una immagine di 1.44MB sul floppy/dev/fd0; si tratta di 2880 settori da 512 byte l’uno, ecompleta ogni blocco con degli spazi (sync).dd if=dati-iniziali.txt of=dati-finali.txt CONV=lcaseconverte il file dati-iniziali.txt in dati-finali.txt sostituendo atutte le maiuscole le minuscole.

– p. 94

Operazioni su dischi: dump

Il comando dump permette di effettuare backupincrementali di un intero filesystem.dump -0u / -f /dev/st0 effettua un dump completo (0)scrivendo in /etc/dumpdates l’esito della operazione (u) edusando come dispositivo di backup /dev/st0 (cartuccia anastro).dump -1u -f /dev/st0 come sopra, ma copiando solo i filecambiati dall’ultimo backup completo.dump -2u -f /dev/st0 come sopra, ma copiando solo i filecambiati dall’ultimo backup di livello 1.

– p. 95

Operazioni su dischi: restore

Il comando restore ripristina i file prodotti con un backup dalcomandorestore rf /dev/st0 ricrea il file system leggendolo da/dev/st0Il programma puó operare in modo interattivo, e crea il filerestoresymtable per passare informazioni tra i vari ripristini.

– p. 96

Operazioni sui dischi: fsck

Il programma fsck verifica e controlla un file system Linux.fsck -t FSType dispositivo <opzioni> verifica il file systemmontato su dispositivo considerandolo di tipo FSType e conle eventuali opzioni. Si tratta di un front-end per i variprogrammi fsck.<FSType>.Mentre l’operazione di verifica di un file system ext2 puórichiedere anche ore (dipendendo dalla dimensione del filesystem) su un file system ext3 occorrono pochi secondi (iltempo di riapplicare il journal).

– p. 97

Comandi su file di testo: cat

Il comando cat (concatenate) visualizza il contenuto di unoo piú file di testo.

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

– p. 98

Comandi su file di testo: zcat

Il comando zcat mostra il contenuto di un file di testocompresso.

zcat file.txt.gz file2.txt.gz

– p. 99

Comandi su file di testo: tac

Il comando tac visualizza uno o piú file di testo in ordineinverso, partendo dall’ultima riga e procedendo verso laprima.

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

– p. 100

Comandi su file di testo: more

Il comando more mostra il contenuto di uno o piú file ditesto, mostrando una pagina per volta. Premendo invio siavanza di una riga, premendo spazio si va avanti di unapagina.

more file.txt

– p. 101

Comandi su file di testo: less

Il comando less permette non solo di avanzare (comemore) ma anche di tornare indietro. Si usano a tal fine i tasticursore e i PgUp e PgDown. Con il tasto / si puó effettuareuna ricerca di testo all’interno del file visualizzato (andandoin avanti con n e all’indietro con N).

less file.txt

– p. 102

Comandi su file di testo: tail

Il comando tail permette di vedere le ultime righe ( o gliultimi 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 laaggiorna una volta al secondo.

L’opzione -f é particolarmente utile per monitorare i file dilog del sistema.

– p. 103

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 valoredi default) del file pippo.txt.head -50 pippo.txt visualizza le prime 50 righe del filepippo.txt.

– p. 104

Comandi su file di testo: wc

Il comando wc conta quanti caratteri, parole o righecompongono un file di testo.

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

– p. 105

Comandi su file di testo: uniq

Il comando uniq sostituisce a piú righe uguali consecutiveuna sola riga.

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

– p. 106

Comandi su file di testo: sort

Il comando sort ordina uno o piú file di testo secondo varicriteri (lessicografico,numerico,mensile), distinguendo omeno tra maiuscole e minuscole, considerando tutte lerighe oppure solo una porzione delimitata.

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

– p. 107

Comandi su file di testo: split

Il comando split scompone un file in piú componenti, aventiuna dimensione massima specificata (come numero dibytes o numero di righe).

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

– p. 108

Comandi su file di testo: paste

Il comando paste produce un file di testo le cui righe sonola concatenazione delle righe dei file di input.cat primoabcat secondo12

paste primo secondoa 1b 2

– p. 109

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 primoa a1b b1c c1$ cat secondoa aaaab bbbbd dddd$ join primo secondoa a1 aaaab b1 bbbb

– p. 110

Comandi su file di testo: tr - 1

Il comando tr (translate) sostituisce una sequenza dicaratteri con un’altra. Il file su cui operare viene passato sustandar 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 bcon B e c con C.tr a-z A-Z < file.txt Come sopra ma facendo il maiuscolo ditutte le lettere dell’alfabeto.

– p. 111

Comandi su file di testo: tr - 2

Con la notazione [:CLASS:] si intende una classe dicaratteri, ad esempio:

alpha caratteri alfabetici

alnum caratteri alfanumerici

lower caratteri minuscoli

upper caratteri maiuscoli

blank spazi

digit cifre

– p. 112

Comandi su file di testo: tr - 3

Lo switch - -d cancella i caratteri passati come parametro,mentre - -s sostituisce un carattere ripetuto piú volteconsecutivamente con una sola copia.tr -d [:blank:] < file.txt cancella tutti gli spazi dal file file.txttr -s [:alpha:] < file.txt sostisuisce alle sequenze AA, AAA,AAA, ... Z, ZZ, ZZZ le sequenze A, ... Ztr -d aeiou < file.txt cancella le vocali dal file file.txt.

– p. 113

Comandi per archiviazione: compress

Il comando compress comprime un file. Il file ottenuto ha unnome dato dal nome del file originario seguitodall’estensione .Z, ed il file originario viene rimosso.compress file.dat Comprime il file file.dat sostituendolocon il file compresso file.dat.Z

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

– p. 114

Comandi per archiviazione: uncompress

Il comando uncompress decomprime un file compresso concompress, sostituendo al file compresso la versionedecompressa.

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

– p. 115

Comandi per archiviazione: gzip

Il comando gzip comprime un file usando lo stessoalgoritmo di PKZIP/WinZip, con cui i file prodotti sonocompatibili. I file compressi hanno l’estensione .gz

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

– p. 116

Comandi per archiviazione: gunzip

Il comando gunzip decomprime un file compresso con gzip.

gunzip file.dat.gz decomprime file.dat.gz sostituendolocon la versione decompressa file.dat.gunzip -l file.dat.gz riporta informazioni sul contenuto delfile compresso file.dat.gz.

– p. 117

Comandi per archiviazione: zip ed unzip

Questi due comandi permettono di comprimere edecomprimere un file in modo tale da essere compatibilicon PKZIP/Winzip.

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

– p. 118

Comandi per archiviazione: bzip2

Questo é il piú efficiente compressore disponibile, al costodi un tempo necessario per comprimere il file moltomaggiore rispetto a gzip. I file prodotti hanno l’estensione.bz2.

bzip2 file.dat Comprime il file file.dat sostituendolo con laversione compressa file.dat.bz2bzip -9 file.dat Come sopra, comprimendo al massimo (edimpiegando piú tempo)

– p. 119

Comandi per archiviazione: bunzip2

Il comando bunzip2 decomprime un file compresso conbzip2.

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

– p. 120

Comandi per archiviazione: tar - 1

Il comando tar (Tape ARchiver) raggruppa piú file in ununico archivio o viceversa espande un archivio nei suoi filecostituenti. L’archivio ottenuto puó essere compresso concompress, 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 nomefile.tar.gz (nel caso di compressione con gzip si usa anchela forma contratta file.tgz).

– p. 121

Comandi per archiviazione: tar - 2

Per visualizzare il contenuto di un archivio si usa lo switch- -list (forma contratta: t).

tar - -list - -file archivio.tartar tf archivio.tarL’opzione - -file indica come l’archivio sia passato comeparametro su linea di comando e non da standard input. Ilnome del file é in tal caso il parametro immediatamentesuccessivo.

– p. 122

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.gztar tfz archivio.tar.gz

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

– p. 123

Comandi per archiviazione: tar - 4

Per estrarre un archivio si usa l’opzione - -extract (formacontratta: x).

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

– p. 124

Comandi per archiviazione: tar - 5

Se l’archivio é stato compresso con bzip2 lo switch dautilizzare é - -bzip2 (forma contratta: j).

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

– p. 125

Comandi per archiviazione: tar - 6

Per creare un archivio si usa l’opzione -create (formacontratta: c). I file che compongono l’archivio vengonopassati da linea di comando. Le directory sono processatericorsivamente.tar - -create - -gzip - -file archivio.tar.gz file1 file2 mydirtar czf archivio.tar.gz file1 file2 mydir

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

– p. 126

Shell: introduzione - 1

La shell é una interfaccia tra il sistema operativo e l’utente,il quale sottomette al sistema dei programmi da eseguiretramite 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, differenziandosiper come impostano le variabili di ambiente e le funzionipredefinite.

– p. 127

Shell: introduzione - 2

In tutti i casi, le shell operano a riga di comando: l’utentescrive una riga in cui specifica il programma da eseguire, glieventuali parametri, la modalità di esecuzione, e la inviaalla shell.

$ programma param1 param2 param3

– p. 128

Shell: introduzione - 3

Il programma da eseguire puó essere interno alla shell(come ad esempio alias per Bash) o meno. Se é esternopuó essere specificato per percorso assoluto (/sbin/ifconfig)oppure solo con il nome: in tal caso viene ricercato tra tuttele directory presenti nel percorso di ricerca, definito dallavariabile di ambiente PATH.

– p. 129

Shell: introduzione - 4

Due funzionalitá presenti in Bash sono:

Completion Tab: se si preme il tasto tab mentre si stascrivendo un nome di file o un comando la shell locompleta, se c’é una scelta univoca; altrimentiripremendo tab mostra tutte le alternative possibili;

history: usando i tasti cursore su e giù é possibile vederel’elenco dei comandi impartiti. Tale elenco é riportatonel file .bash_history dell’home directory.

– p. 130

Shell: variabili di ambiente

Le variabili di ambiente sono impostate con il comandoexport.export CORSO=linux

e se ne puó accedere al valore premettendo al nome ilsimbolo $:$ echo $CORSOlinux

– p. 131

Shell: alias

Un alias del tipo:alias rm=”rm -i”

fa sì che ogni volta che si esegue il comando rm venga inrealtá eseguito il comando rm -i , quindi ad esempio rm a bc 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. 132

Shell: caratteri speciali: ? e * - 1

I caratteri * e ? sono utilizzati quando, nello specificare deinomi di file come parametri di un comando, si voglionoindicare tutti quei file che hanno una certa struttura nelnome.

Se l’utente chiede di eseguire $ programma *.txt la shellchiederá al sistema operativo di eseguire $ programmaprimo.txt secondo.txt lettera.txt ... se nella directorycorrente esistono i file primo.txt, secondo.txt, lettera.txt,...

– p. 133

Shell: caratteri speciali: ? e * - 2

In modo analogo $ programma dati*dat potrebbe essereespansa in $ programma dati1.dat dati2.dat dati.datdati-finali.dat se questi file esistono nella directorycorrente.

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

– p. 134

Shell: caratteri speciali: ? e * - 3

Il carattere ? invece sostituisce un solo carattere.

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

– p. 135

Shell: caratteri speciali: ? e * - 4

Se si vuole evitare l’espansione effettuata dalla shell,occorre racchiudere il parametro contenente i caratterispeciali tra doppi apici.$ programma *tex viene espanso in$ programma archiviazione.tex hardware.tex ...mentre $programma “*tex” non viene espanso, quindi ilprogramma invocato riceve come primo parametro lastringa *tex

– p. 136

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 unaltro comando.$programma > risultato Invia l’output di programma al filerisultato; questo file viene azzerato se giá esistente.$programma » risultato Aggiunge l’ouput di programma alfile risultato.

– p. 137

Shell: redirezione - 2

In modo analogo si puó fornire come input di un programmaun file giá esistente.$programma < argomentoUn caso tipico di utilizzo di questa funzionalitá si ha quandoprogramma é un server a cui si vogliono inviare i comandidefiniti in argomento.

– p. 138

Shell: redirezione - 3

Si puó scegliere di redirezionare non lo standard output diun programma ma il suo standard error.

$ programma 2> /dev/null esegue il programma inviandolo standard error sul file /dev/null, ovvero senza mostrare avideo 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. 139

Shell: redirezione - 4

L’ultima e piú potente possibilitá é quella che prevede diutilizzare l’output di un programma come l’input di un altroprogramma.

$ programma1 | programma2 l’output del programma1diventa l’input del programma programma2. E’ possibileconcatenare piú programmi in questo modo, ognuno con ipropri parametri.

– p. 140

Shell: esecuzione in background

Per eseguire un processo in background occorre terminarela riga di comando con il simbolo &. In questo modo laconsole continua ad essere disponibile per eseguire altriprogrammi.$ programma & esegue programma in background.La redirezione non viene effettuata automaticamente,quindi potrebbe essere necessario specificare l’output el’input, per non “sporcare” la console.

– p. 141

Shell: esecuzione con && e ;

Una riga del tipo:$ programma1 && programma2causerá l’esecuzione di programma1, e solo se questoprogramma termina con successo verrá quindi eseguitoprogramma2.$ programma1 ; programma2causa l’esecuzione di programma1 e quindi di programma2.

– p. 142

Shell: umask

Con il comando umask si puó leggere od impostare lamodalitá con cui vengono creati i file. I valori restituiti sonoespressi 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. 143

Utenti: /etc/passwd - 1

Il file /etc/passwd contiene l’elenco degli account presentinel sistema. La struttura del file é la seguente:

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

– p. 144

Utenti: /etc/passwd - 2

Il significato dei campi é il seguente:

account identificativo dell’utente

password la password (se non si usano shadowpassword)

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. 145

Utenti: /etc/passwd - 3

Esempio di file /etc/passwd:root: x: 0: 0: root: /root: /bin/bashbin: x: 1: 1: bin: /bin: /sbin/nologindaemon: 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/bashmario: x: 501: 501: Mario Rossi: /home/mario: /bin/bash(gli spazi sono stati aggiunti per chiarezza).

– p. 146

Utenti: /etc/passwd - 3

Nell’esempio precedente le password cifrate sono indicatecon delle x. Questo perché é presente il meccanismo delleshadow password : le password (cifrate) sono riportate nelfile /etc/shadow, in modo da impedire attacchi a forza brutaper decifrare le password ( /etc/passwd deve essereleggibile a tutti, mentre /etc/shadow è accessibile solo apochi processi).É fortemente consigliato attivare il meccanismo delleshadow password.

– p. 147

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. 148

Utenti: su

Il comando su (Set User) permette di cambiare la propriaidentitá con quella di un altro utente, specificato su linea dicomando come parametro. Se non c’é alcun parametro siintende root. Occorre fornire la password dell’utentedesiderato perché l’operazione possa compiersi.Con su user si chiede di assumere l’identitá dell’utenteuser, mentre con su - user si esegue inoltre tutta la fase dilogin.

– p. 149

Utenti: /etc/group - 1

Il file /etc/group contiene l’elenco di tutti i gruppi presenti nelsistema. Per ogni gruppo viene riportato l’elenco degliutenti che ne fanno parte.

groupname password GID user-list

– p. 150

Utenti: /etc/group - 2

Il significato dei campi é il seguente:

groupname il nome del gruppo

password la password associata al gruppo (se presente ese non si usano le shadow password)

GID il Group ID

user-list l’elenco, separato da virgole, degli account chefanno parte del gruppo.

– p. 151

Utenti: /etc/group - 3

Esempio di un file /etc/group:root: x: 0: rootbin: x: 1: root,bin,daemon...wheel: x: 10: rootpaolo: x: 500:In caso di shadow password le password dei gruppi sonoriportate cifrate in /etc/gshadow.(tipicamente non si usano password per i gruppi).RedHat usa, per ogni utente non di sistema, un gruppo cheha l’utente come unico partecipante, e con GID ugualeall’UID.

– p. 152

Utenti: useradd

Il comando useradd consente di aggiungere un utente alsistema.useradd <-s shell> <-d home_dir> <-u UID> <-ppasswd> account

– p. 153

Utenti: userdel

Il comando userdel rimuove un utente dal sistema.

userdel accountSe si aggiunge lo switch -r viene rimossa anche la homedirectory dell’utente e la mailbox.

– p. 154

Utenti: groupadd

Il comando groupadd aggiunge un gruppo al sistema.

groupadd <-g GID> group-name

– p. 155

Utenti: groupdel

Il comando groupdel rimuove un gruppo dal sistema, se nonci sono piú utenti nel sistema appartenenti a quel gruppo.

groupdel <group-name>

– p. 156

L’ambiente grafico: X

La gestione dell’ambiente grafico viene realizzata mediantepiú programmi. Alla base c’é l’X Server, che realizzal’astrazione dall’hardware grafico e mette a disposizione diulteriori programmi delle primitive come la gestione difinestre a video.L’ambiente si chiama X Window System, o anche X11, oX11R6.

– p. 157

L’ambiente grafico: X server e X client

X é progettato per operare su rete, con un server cheaccetta le richieste dell’utente inviandole a dei programmiclient di cui mostra l’output.Il server puó operare su piattaforme diverse da Linux.

– p. 158

L’ambiente grafico: desktop manager

Sulle funzionalitá offerte da X sono poi definiti dei desktopmanager, come ad esempio Gnome e KDE. Ne esistonomolti altri, che hanno ad esempio richieste di memoria e diprocessore meno esose.

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

– p. 159

L’ambiente grafico: /etc/X11/XF86Config

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

– p. 160

L’ambiente grafico: xf86config

E’ il programma che permette di generare il file diconfigurazione per X. Le schede disponibili sono riportatenella directory /usr/share/hwdata.

– p. 161

Stampare: /etc/printcap e printtool

Questo file contiene la descrizione di tutte le stampanticollegate al sistema, insieme ad un loro nome simbolico dautilizzare per indicarle.Questo file puó essere modificato sia a mano che tramiteredhat-config-printer (printtool ).

– p. 162

Stampare: CUPS

Il Common Unix Printing System é il nuovo sistema diconfigurazione delle stampanti, che gestisce molto megliole stampanti non laser rispetto a printtool. La suaconfigurazione avviene tramite una interfaccia web.

– p. 163

Stampare: lpr

Una volta che si é configurata la stampante, per stampareda linea di comando si puó utilizzare il comando lpr, cheopera anche come uno spooler di stampa.lpr -P laser file.ps stampa il file file.ps utilizzando lastampante di nome laser.

– p. 164

Stampare: lpq

Il comando lpq mostra lo stato della coda di stampa per unaspecificata stampante.

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

– p. 165

Stampare: lprm

Il comando lprm consente di rimuovere un dato job dallacoda 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. 166

Stampare: lpd

Il demone lpd é il processo che si occupa della gestionedella stampa, gestendo lo spool di stampa.Tramite i suoi file di configurazione si puó stabilire chi hadiritto di stampare e su quali stampanti, gestire l’accountingdelle stampe, ecc..

– p. 167

Interoperabilitá: SCP

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

– p. 168

Interoperabilitá: FTP e ssh

Se sulla macchina Linux é installato un server FTP épossibile prelevare (ed eventualmente depositare) fileadottando un qualsiasi client FTP.

Un client SSH per Windows open source é ad esempioPUTTY.

– p. 169

Interoperabilità: VNC - 1

Se sulla macchina Linux viene installato e configurato unserver VNC, si puó accedere in modalitá grafica con unclient VNC, utilizzando ad esempio:

RealVnc, http://www.realvnc.com

TightVnc, http://www.tightvnc.com

– p. 170

Interoperabilitá: VNC - 2

Il vantaggio principale di VNC é che il client è di dimensioniminime (100 Kb). Il limite principale é rappresentato dalfatto che tutti i dati viaggiano in chiaro!

VNC non deve mai essere usato in un ambiente diproduzione o per controllare un server non in una retelocale.

– p. 171

Interoperabilitá: VNC - 3

Per utilizzare VNC occorre specificare sia l’hostname dellamacchina remota che l’utente con cui ci si vuole collegare.La sintassi adottata in genere é host:utente, per cui10.2.3.60:0 potrebbe essere l’utente X della macchina10.2.3.60, mentre 10.2.3.60:1 potrebbe essere l’utente Y.Ciascuno di questi utenti ha una propria password ed unproprio desktop.

– p. 172

Interoperabilitá: Server X - 1

E’ possibile installare un server X che consenta quindi diavere una modalitá grafica e di avere il traffico cifrato conSSH.Non esistono server X per Windows gratuiti. Tra quelli apagamento citiamo HummingBird Exceed.

– p. 173

Interoperabilitá: Server X - 2

Per attivare una sessione X sotto Windows occorretipicamente:

1. Attivare il server X sotto Windows, eventualmentespecificando che deve accettare connessioni dallamacchina Linux (remota);

2. Collegarsi via SSH alla macchina Linux, ed impostarela variabile di ambiente DISPLAY in questo modo:export DISPLAY=<ip-macchina-windows>:0.0 ;

3. Comunicare al server X (locale) che si accettanoconnessioni da remoto, ad esempio con il comandoxhost +

4. Lanciare l’applicazione richiesta, o l’intero ambientegrafico (ad esempio con gnome-session);

– p. 174

Data ed ora: date

Il comando date riporta che ora é. É possibile specificarediversi formati con cui visualizzare l’ora, cosí comechiedere di visualizzare una data ora in un certo formato.

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

– p. 175

Data ed ora: hwclock - 1

Per determinare che ora é, Linux utilizza una struttura alivelli. Alla base c’é l’hardware clock, ovvero l’orologioaggiornato dalla batteria tampone. Il comando hwclockpermette di leggere od impostarne il valore.L’unica funzione di questo orologio hardware é di tenereconto dell’ora quando Linux non é in funzione.

– p. 176

Data ed ora: hwclock - 2

L’orologio hardware non é molto accurato, ma la maggiorparte degli errori che compie sono predicibili: va avanti odindietro di una quantitá quasi costante, che puó esserecalcolata e di cui il kernel puó tenere conto per correggerel’ora.Questa correzione viene eseguita con l’opzione - -adjust

– p. 177

Data ed ora: Timezone

All’ora contenuta nell’hwclock bisogna aggiungere lequantitá dovute al fuso orario e all’ora legale: in questomodo quando cambia l’ora legale non occorre interveniresul clock hardware.La timezone é configurabile tramite il programmaredhat-config-date

– p. 178

Data ed ora: NTP

É spesso necessario che tutti i computer presenti in reteabbiano la stessa ora. Per questo esiste un protocollo disincronizzazione apposito, il Network Time Protocol.Il protocollo NTP si basa sull’utilizzo di server NTP, cheforniscono l’ora, e su client NTP, che vi si adeguano.

– p. 179

Data ed ora: ntpdate

Il comando ntpdate regola l’ora secondo quella riportata daun server ntp passato come parametro. L’adeguamento éimmediato.ntpdate ntp.ien.it Usa il server dell’Istituto ElettrotecnicoNazionale (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 delproprio provider.

– p. 180

Data ed ora: ntpd

Il demone ntpd sincronizza costantemente l’ora con quelladi uno o piú server NTP, e puó a sua volta operare comeclient. La sua configurazione é riportata nel file/etc/ntp.conf. Gli aggiornamenti che effettua sonoprogressivi, quindi conviene procedere una prima volta conntpdate e poi lasciare il compito delle correzioni minime antpd.

– p. 181

Hardware: lspci

Il comando lspci mostra l’elenco dei dispositivi presenti sulbus pci.lspci -v riporta piú informazioni.lspci -vv riporta ulteriori informazioni.

– p. 182

Hardware: /proc/cpuinfo

Il file /proc/cpuinfo contiene informazioni su tutti i processoripresenti nel sistema.

cat /proc/cpuinfoprocessor : 0vendor id : GenuineIntelcpu family : 5model : 4model name : Pentium MMXstepping : 3cpu MHz : 200.458...

– p. 183

Hardware: /proc/interrupts

Il file /proc/interrupts riporta, per ogni IRQ di ogniprocessore presente nel sistema, quante volte é scattato ea quale dispositivo é associato.

CPU00: 3152659 XT-PIC timer1: 135243 XT-PIC keyboard2: 0 XT-PIC cascade4: 327829 XT-PIC serial5: 1 XT-PIC soundblaster8: 1 XT-PIC rtc12: 0 XT-PIC eth0...

– p. 184

Controllare il sistema: df

Il comando df (disk free) mostra per ogni partizione montataquanto spazio é stato usato, quanto é ancora disponibile(tutto in blocchi da 1 KB) e il mount point.

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

– p. 185

Controllare il sistema: free

Il comando free riporta informazioni sull’occupazione dellamemoria.$ free

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

– p. 186

Controllare il sistema: whereis

Il comando whereis ricerca i sorgenti, i binari e le pagine dimanuale per un dato comando. Non considera il PATHcorrente! Il suo scopo é quello di mostrare se un comandoé installato nella locazione standard.

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

– p. 187

Controllare il sistema: which

Il comando which ricerca, nel PATH corrente, il/i parametripassato come argomento, permettendo quindi di vederecosa viene invocato in caso di esecuzione dell’argomentostesso. Se non trova nulla mostra il PATH corrente.$ which lsalias ls=’ls –color=tty -a -F -v’/bin/lsOvvero il comando eseguito é /bin/ls e sonoautomaticamente aggiunti i parametri riportati nell’alias.

– p. 188

Controllare il sistema: ps - 1

Il comando ps mostra i processi in corso di esecuzione sulsistema. Sono possibili diverse opzioni combinabili tra loro,sia per selezionare i processi da mostrare che per lemodalitá di visualizzazione.ps mostra i processi interattivi associati alla consoledell’utenteps -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. 189

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. 190

Controllare il sistema: top

Il comando top mostra lo stato del sistema e i processi inesecuzione, ordinati per quantitá di CPU utilizzata. I datisono 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. 191

Controllare il sistema: w e whoami

Il comando w (Who) riporta l’elenco degli utenti collegati alsistema.

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

– p. 192

Controllare il sistema: watch

Il comando watch permette di eseguire un comando(passato come parametro) periodicamente, mostrandonel’output a schermo.watch ls /var/log esegue ogni 2 secondi il comando ls/var/logwatch -n 10 - -differences esegue ogni 10 secondi ilcomando uptime e enfatizza le differenze tra esecuzioniconsecutive.Si termina il comando premendo Ctrl-c (con Ctrl-z si metteil programma in background).

– p. 193

Controllare il sistema: nice

Il comando nice esegue un programma con una prioritáimpostata. (ogni programma viene per default eseguito conla 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 aggiustamentopari a 10 (ovvero con meno prioritá!)

– p. 194

Controllare il sistema: renice

Il comando renice permette di cambiare la prioritá di uno opiú processi in esecuzione. I processi sono specificati perPID, gruppo o utente.renice +1 1234 Riduce la prioritá del processo con PID paria 1234.renice -2 -u root Aumenta di 2 la prioritá dei processi conowner pari a root.

– p. 195

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. 196

Controllare il sistema: kill - 2

/bin/kill -9 program Invia il segnale KILL (terminazioneimmediata) al programma programma. Se l’utente éautorizzato ad inviare questo segnale il risultato é che ilprogramma program termina immediatamente, tutte lerisorse (di memoria, di processore ecc) ad esso associatesono rilasciate.É opportuno inviare prima un kill senza parametri, in mododa permettere al programma di terminare dolcemente(chiudendo i file aperti, svuotando i buffer). Se ilprogramma, dopo qualche secondo, non termina, lo si puóammazzare.

– p. 197

Controllare il sistema: kill - 3

Spesso questo comando puó essere usato per forzare unserver (ovvero un demone in esecuzione) a leggere un filedi configurazione che é stato cambiato, senza riavviare ildemone stesso.

kill -SIGUSR2 xinetd Forza il programma xinetd a rileggerela configurazione.

– p. 198

Controllare il sistema: nohup - 1

Il segnale HUP (Hang UP) viene inviato ad un programmaquando il processo padre é terminato oppure il terminaleche lo controlla viene rilasciato, quindi ad esempio quandoun utente fa il logout. Se si vuole che il programma continuia girare (in background) lo si deve lanciare con il comandonohup.nohup program param1 ... paramN Esegue il comandoprogram con parametri param1 ... paramN immunizzandoloagli hang-up.

– p. 199

Controllare il sistema: nohup - 2

nohup wget -t 0 -c -q ftp://URL Preleva il file ftp://URL inmodalitá silenziosa (-q), continuando ogni volta da dove siera interrotto (-c) finché non lo ottiene tutto (-t 0). Sel’utente che ha lanciato il programma effettua il logout iltrasferimento prosegue.

– p. 200

Controllare il sistema: jobs

É un comando di shell che mostra quali processi sono inbackground. I processi in background, oltre ad esserecomunque identificati dal loro PID, sono identificati danumero intero progressivo dalla shell, preceduto dal segno%.$ jobs[1]+ Stopped watch ls

– p. 201

Controllare il sistema: fg

Il comando di shell fg (foreground) riporta in primo piano ilprocesso in background indicato.

fg %1 riporta in background il processo indicato dalla shellcome %1.

– p. 202

Controllare il sistema: bg

Il comando di shell bg (background) manda in background ilprocesso indicato.

bg %1 manda in background il processo indicato dalla shellcome %1. Se il processo é quello che controlla il terminalecorrente, si ottiene (in genere) lo stesso effetto premendoCtrl-Z.

– p. 203

Controllare il sistema: uname

Il comando uname riporta una serie di informazioni sulsistema.

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

– p. 204

Controllare il sistema: swapon e swapoff

Questi due comandi attivano (swapon) e disattivano(swapoff) una o piú partizioni di swap. Le partizioni di swapsono attivate all’avvio del sistema. Con il flag -s siottengono informazioni sull’uso delle partizioni medesime.

– p. 205

Controllare il sistema: vmstat

Il comando vmstat mostra informazioni sull’uso dellamemoria virtuale ( principale e di swap).

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

vmstat n ricalcola e mostra i dati ogni n secondi.

– p. 206

Controllare il sistema: dmesg

Il comando dmesg riporta quanto stampato dal sistemadurante l’ultimo boot. Puó quindi essere usato per vederese tutto l’hardware é stato rilevato e configuratocorrettamente.

– p. 207

Controllare il sistema: /var/log/messages

Il file /var/log/messages contiene numerose informazionisull’attivitá del sistema, come ad esempio il login e il logoutdegli utenti, l’installazione e rimozione di moduli del kernel,la partenza di alcuni programmi.

– p. 208

Networking: ping

Il comando ping permette di verificare se un host o unrouter (specificato per nome o per indirizzo IP sulla riga dicomando) é raggiungibile o meno.

ping hostname-or-address

– p. 209

Networking: traceroute

Il comando traceroute mostra il percorso seguito daipacchetti per raggiungere un host.

/usr/sbin/traceroute hostname-or-address

– p. 210

Networking: telnet

Il comando telnet apre una connessione TCP con l’hostspecificato sulla linea di comando e sulla porta specificata;se la porta non viene specificata si intende la 23 (remoteshell o telnet).

telnet hostname-or-address <port>

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

– p. 211

Networking: ssh - 1

I dati spediti via telnet sono tutti in chiaro, e questo rende ilprotocollo non sicuro (ed é il motivo per cui l’accesso inremoto via telnet é di solito disabilitato).Il programma ssh consente di accedere in remoto ad unamacchina via il protocollo SSH, quindi con tutto il trafficocifrato.

ssh username@macchina

– p. 212

Networking: ssh - 2

Il nome della macchina remota deve essere semprespecificato. Se lo username non viene specificato si utilizzalo stesso della sessione della macchina locale.

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

– p. 213

Networking: scp

Il comando scp (secure cp) consente di copiare file da/suuna macchina remota, cifrando il traffico. Puó essere usatocome alternativa sicura (e piú facilmente configurabile) diun ftp server e client.

scp sorgente destinazioneSe sorgente o destinazione sono locali si usa la normalesintassi per i nomi di file. Altrimenti occorre specificareanche lo username e la macchina sorgente/destinazione:username@macchina:percorso-file

– p. 214

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 epassword un indirizzo di e-mail). Ciò fatto si naviga nelserver FTP con i comandi ls, cd, pwd analoghi a quelli diUnix, e si preleva un file con get <nomefile>.

– p. 215

Networking: whois

Il comando whois interroga un database whois, e permettequindi di ottenere informazioni sui gestori di un dominio osul proprietario di un indirizzo IP.

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

– p. 216

Networking: nslookup

Il comando nslookup risolve un nome simbolicointerrogando il DNS server di default o uno specificato sulinea di comando. Con lo switch -r effettua l’operazioneinversa (da indirizzo IP a nome simbolico).

nslookup <-r> name-or-address

E’ possibile interrogare i DNS per tutte le informazioni diloro pertinenza.

– p. 217

Networking: dig

Il comando dig é la sostituzione del comando nslookup.

dig hostname-or-address

– p. 218

Networking: netstat

Il comando netstat mostra le connessioni attive sullamacchina locale. Opzioni possibili:

-n non risolve gli indirizzi

-a mostra tutte le porte

-p mostra anche il processo in ascolto

netstat <-n> <-a>

– p. 219

Networking: ifconfig - 1

Il comando ifconfig mostra o imposta la configurazione diuna interfaccia di rete.

ifconfig eth0 mostra la configurazione della prima schedaEthernet.ifconfig eth0 10.2.2.251 netmask 255.255.252.0 upconfigura la prima scheda Ethernet con l’indirizzo e lanetmask specificati.ifconfig eth0 down disattiva la prima scheda Ethernet.

– p. 220

Networking: ifconfig - 2

É possibile inoltre effettuare l’alias delle schede di rete,ovvero assegnare ad una scheda piú indirizzi (anche di retidistinte).Le interfacce aliased sono indicate come eth0:0, eth0:1, ...eth1:0, eth1:1.ifconfig eth0:0 81.208.39.118 netmask 255.255.255.240up crea un alias per eth0.

– p. 221

Networking: route

Il comando route mostra od imposta le tabelle di routingdella macchina.

$ routeDestination Gateway Genmask Flags Metric Ref Use Iface10.2.0.0 10.2.0.2 255.255.252.0 U 0 0 0 eth0127.0.0.0 * 255.0.0.0 U 0 0 0 lo

– p. 222

Networking: arp

Il comando arp mostra o modifica il contenuto della tabelladi ARP.

arp

– p. 223

Networking: hostname

Il comando hostname mostra (se non ha parametri) il nomedell’host, altrimenti lo imposta al nome passato comeparametro. Questa impostazione é locale, non vienepropagata al resto della rete.

hostname yoda.example.it imposta il nome dell’host ayoda.example.itIl nome dell’host impostato al boot é riportato in/etc/sysconfig/network. Il nome dell’host deve esserecompleto di dominio.

– p. 224

Networking: /etc/resolv.conf

Il file /etc/resolv.conf contiene gli indirizzi IP dei server DNS.

$ cat /etc/resolv.conf

nameserver address-1nameserver address-2

– p. 225

Networking: /etc/hosts

Il file /etc/hosts contiene la corrispondenza tra nomisimbolici ed indirizzi IP per quelle voci di DNS che nondevono essere risolte interrogando il server DNS. Questofile contiene almeno la risoluzione dell’indirizzolocalhost.localdomain.

$ cat /etc/hosts127.0.0.1 localhost.localdomain localhost

– p. 226

Networking: ipchains

Il comando ipchains mostra od imposta il firewall software.

$ipchains - -list mostra la configurazione del firewallsoftware.

– p. 227

Networking: xinetd

Il demone xinetd é il super-server di rete: permette diassociare a delle richieste di connessioni TCP che arrivanosu certe porte uno specifico server, che viene attivatoall’occorrenza, con un forte controllo d’accesso.

– p. 228

Networking: NIS

Il NIS (Network Information Service) é un sistema costituitoda un server, zero o piú slave e dei client. Le identitá degliutenti presenti sul server (e sugli slave) sono diffuse aiclient, permettendo cosí allo stesso utente di poteraccedere a piú macchine distinte a paritá di account.

– p. 229

Networking: NFS

Il NFS (Network File System) é il piú diffuso file system direte. Una macchina puó permettere l’accesso inlettura/scrittura ad altre macchine.

Sicurezza, affidabilitá e prestazioni di questo file systemsono assai modeste.

– p. 230

Boot: i bootloader - 1

Il bootloader é un programma che, all’avvio del sistema,permette di scegliere quale sistema operativo attivare.I due piú diffusi bootloader per Linux sono LILO e GRUB.Entrambi permettono sia di utilizzare diversi sistemioperativi su diverse partizioni, sia di avere (nel caso diLinux) diverse versioni del kernel a paritá di partizione. Ilbootloader utilizza in genere il MBR (Master Boot Record),e permette di passare al kernel dei parametri (il piúimportante dei quali é dove si trova la directory /).

– p. 231

Boot: LILO

LILO (LInux LOader) é stato il primo bootloader per Linux, econtinua ad essere ampiamente utilizzato. Il file diconfigurazione (/etc/lilo.conf ) contiene una mappa, ovverouna corrispondenza tra i nomi dei sistemi operativi dalanciare e la partizione su cui risiedono.Se si usa LILO, ogni volta che si modifica il file diconfigurazione occorre lanciare il programma lilo peraggiornare le informazioni utilizzate al boot.

– p. 232

Boot: GRUB - 1

GRUB (GRand Unified Bootlader) é un bootlader ormaiinstallato di default nelle architetture x86 perché e’ in gradodi lanciare un numero maggiore di diversi sistemi operativi.A differenza di LILO, il contenuto del file di configurazione(/boot/grub/grub.conf ) viene letto al boot.

– p. 233

Boot: GRUB - 2

GRUB adotta una convenzione diversa da quella di Linuxper indicare i dischi e le partizioni.I dischi (EIDE e SCSI) sono sempre indicati con hd<n> ,dove n é un numero che parte da zero. La prima partizionedel disco hd0 viene indicata come (hd0,0) .

– p. 234

Boot: i bootloader - 2

La regola d’oro per evitare problemi con i bootloader équella di aggiungere sempre delle entrate nelle mappe, madi non rimuovere mai quella definita in fase di installazionedel sistema, che é sintatticamente corretta e lancia unkernel funzionante.

– p. 235

Boot: il kernel

Se il bootloader funziona correttamente, viene caricata inmemoria una immagine del kernel che inizia a rilevarel’hardware.Quando il kernel parte il BIOS del computer non viene piúutilizzato.Le informazioni riportate a schermo sono richiamabili in unsecondo tempo con il comando dmesg .

– p. 236

Boot: init - 1

Dopo aver rilevato l’hardware (non necessariamenteconfigurandolo!) il kernel lancia il programma /sbin/init .Si tratta di un programma particolare, poiché é il padre(nonno...) di tutti i processi che verranno successivamenteeseguiti nel sistema, ed é l’unico processo che non puó maiessere ucciso, nemmeno da root.É init ad attivare i vari servizi presenti sulla macchina, e aconfigurare l’hardware.

– p. 237

Boot: INIT - 2

Il programma init opera in termini di runlevel.Un runlevel é una configurazione software del sistema checonsente solo ad un definito insieme di processi di esistere,ed é tipicamente indicato da un numero.

0 reboot del sistema

1 modalitá single user

2 multiuser senza rete

3 multiuser

4 non usato

5 modalitá grafica

6 reboot

– p. 238

Boot: init - 3

Il passaggio da un runlevel ad un altro é governato dalcomando telinit, che richiede come parametro il runlevel incui portarsi.Nelle directory /etc/rc<n>.d sono contenuti i servizi attivatio disattivati in un certo runlevel, come link simbolici agliscript di attivazione o disattivazione.I nomi dei link cominciano con S o K, sono quindi seguiti daun numero e da una stringa descrittiva. Se il nome del linké S... indica l’attivazione, se é K... indica la disattivazione.

– p. 239

Boot: init - 4

I link sono verso script di configurazione presenti nelladirectory /etc/init.d. Questi script possono essere invocatidirettamente se necessario:

/etc/init.d/network stop disattiva le interfacce di rete/etc/init.d/network start attiva le interfacce di rete

– p. 240

Boot: init - 4

I servizi da attivare in ogni runlevel possono anche essereconfigurati usando ad esempio tksysv oppure chkconfig .

Il file /etc/inittab contiene la descrizione dei runlevel. Inparticolare la voce initdefault stabilisce quale é il runlevel daattivare per primo (e quindi ad es. se attivare subito lamodalitá grafica o meno).

– p. 241

Boot: init - 5

I parametri di configurazione letti dagli script presenti in/etc/init.d sono tipicamente riportati in /etc/sysconfig esono impostabili o direttamente o tramite dei programmi diconfigurazione.

– p. 242

Boot: shutdown

Il comando shutdown permette di arrestare o rebootare ilsistema:shutdown -h now Arresta il sistemashutdown -r now Reboota il sistemashutdown -r <time> Reboota all’ora indicata

– p. 243

RPM: introduzione - 1

Il programma rpm (Redhat Package Manager) permette diinstallare, rimuovere ed aggiornare programmi dal sistema,garantendo che ogni operazione compiuta non renda ilsistema instabile, permettendo tra l’altro di verificare cosa éinstallato nel sistema, quale è il contenuto di ogni pacchettoinstallato, e da quale pacchetto proviene un dato file.

– p. 244

RPM: introduzione - 2

I pacchetti sono dei file contenenti tutti i programmi e i datida installare e le informazioni di controllo e gestione. Ladirectory /var/lib/rpm contiene le informazioni su quantoinstallato nel sistema.Il nome dei pacchetti in genere é cosí strutturato:

nome-versione-<architettura>-<src>.rpm

– p. 245

RPM: introduzione - 3

Dove:

nome é il nome del pacchetto: una volta installato ci sipuó riferire ad esso con il solo nome

versione é la versione

architettura se presente indica l’architettura per il quale ilprogramma é compilato (oppure riporta noarch perindicare che si tratta di dati)

src se presente e’ la stringa src che indica si tratta disorgenti, che vengono in tal caso installati sotto/usr/src/redhat/SOURCES

– p. 246

RPM: installare un pacchetto

L’installazione di un pacchetto richiede lo switch -i.

rpm -i file.rpm installa (se possibile) il pacchetto file.rpm.L’installazione avviene solo se il pacchetto non confliggecon quelli giá presenti nel sistema.Si puó sempre forzare l’installazione con lo switch- -nodeps :rpm -i - -nodeps file.rpm .

– p. 247

RPM: aggiornare un pacchetto

L’aggiornamento di un pacchetto richiede lo switch -U

rpm -U file.rpm aggiorna (se possibile) il pacchettofile.rpm.L’aggiornamento avviene solo se questo non causa unconflitto. Si puó forzare l’aggiornamento con lo switch- -nodeps .

– p. 248

RPM: rimozione di un pacchetto

La rimozione di un pacchetto richiede lo switch -e

rpm -e pacchetto rimuove (se possibile) il pacchettopacchetto.La rimozione avviene solo se questo non rende altriprogrammi non funzionanti. Si puó forzare la rimozione conlo switch - -nodeps .

– p. 249

RPM: informazioni sui pacchetti - 1

E’ possibile ottenere informazioni su pacchetti, sia quelliinstallati che quelli non installati. Lo switch per ottenereinformazioni é -q a cui bisogna far seguire p se si analizzaun file non installato, e quindi la specifica richiesta.

rpm -qpi file.rpm richiede informazioni generali sul filefile.rpm.rpm -qi pacchetto richiede informazioni generali sulpacchetto pacchetto.

– p. 250

RPM: informazioni sui pacchetti - 2

Con lo switch -l si ottiene l’elenco dei file che fanno partedel pacchetto.

rpm -qpl file.rpm richiede l’elenco dei file che sarannoinstallati dal file file.rpm.rpm -ql pacchetto richiede l’elenco dei file installati dalpacchetto pacchetto.

– p. 251

RPM: informazioni sui pacchetti - 3

In modo analogo, con lo switch - -scripts vengono mostratigli script che saranno eseguiti dopo l’installazione e dopo ladeinstallazione.

rpm -qp - -scripts file.rpm mostra gli script che sarannoeseguiti a seguito dell’installazione (e della deinstallazione)del file file.rpmrpm -qp - -scripts pacchetto mostra lo script che é statoeseguito con l’installazione del pacchetto pacchetto equello che verrá eseguito in caso di deinstallazione.

– p. 252

RPM: proprietario di un file

Con lo switch -qf si puó vedere a chi appartiene un file:

$ rpm -qf /bin/lsfileutils-4.1-4

– p. 253

RPM: pacchetti installati

Con lo switch -qa si ha l’elenco di tutti i pacchetti installatinel sistema.

$ rpm -qaperl-5.6.0-17at-3.1.8-20time-1.7-14pciutils-2.1.8-23...

– p. 254

Compilare il kernel - 1

La compilazione del kernel richiede di procurarsi i relativisorgenti presso un mirror di ftp.kernel.org , come adesempio ftp.it.kernel.org .

– p. 255

Compilare il kernel - 2

Ci si posiziona quindi nella directory /usr/src e si procede adecomprimere il file ottenuto.tar xfvz kernel-2.6.2.tar.gzSi deve creare a questo punto il link simbolico linux:ln -s linux-2.6.2 linux

– p. 256

Compilare il kernel - 3

Entrando nella directory linux si lancia il comando:

make menuconfigper iniziare la configurazione del kernel.In ambiente grafico si puó usare:

make xconfig

– p. 257

Compilare il kernel - 4

Il menú mostrato viene percorso con i tasti cursore. Alcunevoci portano ad altri menú che si aprono premendo invio,mentre altre sono le opzioni di compilazione vere e proprie.Le opzioni di compilazione sono attivabili, disattivabili, inalcuni casi impostabili come moduli (premendo il tasto mquando si é sulla relativa voce).

– p. 258

Compilare il kernel - 5

Terminata la configurazione, si termina selezionando lavoce Exit dal menú principale. E’ possibile salvare laconfigurazione ottenuta in un file diverso da quello standard(.config).A questo punto per i kernel 2.6 e superiori é sufficiente dareil comando:make

– p. 259

Compilare il kernel - 6

Per i kernel fino a 2.4 occorrono invece i seguenti passi:

1. make dep (calcola dipendenze)

2. make clean (rimozione .o precedenti)

3. make bzImage (immagine del kernel)

4. make modules (moduli)

5. make modules_install (installazione moduli)

– p. 260

Compilare il kernel - 7

Terminata la fase precedente, l’immagine del kernelprodotta si trova nella sottodirectory arch/i386/boot con ilnome vmlinuz. Va innanzitutto copiata nella directory /boot:cp vmlinuz boot/vmlinuz-<nome>

– p. 261

Compilare il kernel - 8

Quindi occorre aggiornare il bootloader (LILO o GRUB) percomunicare che c’é una nuova immagine da poter utilizzare.

Fatto ció, si riavvia il sistema e si vede cosa succede. Incaso di errori si ripetono i passi da make menuconfig inpoi.

– p. 262

Compilare il kernel: asm

Una porzione dei sorgenti del kernel contiene i file includeche vengono utilizzati dalla libreria C.Occorre sempre che sia presente il link/usr/src/linux/include/asmverso /usr/src/linux/include/asm-i386 .

Se il link non esiste i programmi C non potranno esserecompilati. Il link viene creato durante la compilazione delkernel.

– p. 263

Compilare il kernel: patch - 1

Una patch é l’insieme delle modifiche da apportare ai filesorgenti in modo tale da passare da una subversion aquella immediatamente successiva (e viene prodotta con ilcomando diff -ruN vecchia-directory nuova-directory )La patch si applica con il comando patch, ad esempiocome:

patch -p0 < patch-file

– p. 264

Compilare il kernel: patch - 2

Se la patch non viene applicata correttamente, si genera unfile .rej. Si puó provare la patch a freddo, ovvero con ilcomando:

patch -p0 - -dry-run < patch-file

– p. 265

Moduli: lsmod

Questo comando riporta i moduli del kernel presenti inmemoria.Module Size Used by Not taintedsoundcore 6532 0 (autoclean)mousedev 5524 1 (autoclean)input 5888 0 (autoclean) [mousedev]binfmt misc 7524 1autofs 13348 0 (autoclean) (unused)8139too 17704 1mii 2156 0 [8139too]iptable filter 2412 0 (autoclean) (unused)ip tables 14936 1 [iptable filter]ext3 70368 2jbd 52212 2 [ext3]

– p. 266

Moduli: insmod

Il comando insmod inserisce un modulo nel kernel,passandogli eventualmente dei parametri. Il modulo vieneindicato come il nome del file presente in/lib/modules/<versione>.insmod pcmcia_core Inserisce nel kernel il modulo/lib/modules/<versione>/kernel/drivers/pcmcia/pcmcia_core.o

Questo comando viene utilizzato quando si vuole caricare,ad esempio, un driver per una periferica utilizzata.

– p. 267

Moduli: rmmod

Il comando rmmod rimuove un modulo dal kernel. Il nomedel modulo viene passato come parametro, e l’operazione éeseguita solo se non ci sono altri moduli che utilizzano ilmodulo selezionato per la rimozione.rmmod pcmcia_core Rimuove dal kernel il modulopcmcia_core.

– p. 268

Moduli: modinfo

Il comando modinfo riporta informazioni su un modulo,come ad esempio l’elenco dei parametri che possonoessere impostati.modinfo udf Riporta informazioni sul modulo udf.

– p. 269

Moduli: /etc/modules.conf

Con questo file é possibile dare un alias al nome di unmodulo.$ cat /etc/modules.confalias eth0 8139too

Il modulo 8139too puó essere indicato come eth0.

– p. 270

Moduli: depmod e modprobe

Questo comando crea un file che descrive le dipendenzetra i vari moduli, memorizzandolo in/lib/modules/<versione>/modules.dep.

Questo file viene consultato da modprobe, che permette dicaricare un modulo e tutti quelli necessari al suofunzionamento.

– p. 271

Documentazione: man - 1

Il comando man mostra la pagina di manuale relativa alcomando (o file) passato come primo parametro.man ls mostra la pagina di manuale del comando ls.Se ci sono piú pagine di manuale che sono indiciate dallostesso nome, viene mostrata solo la prima. Per averle tutteoccorre premettere lo switch -a: man -a while

– p. 272

Documentazione: man - 2

All’interno di una pagina di manuale sono disponibili glistessi comandi del comando less (che é il viewer di defaultdelle pagine di manuale).

man -K vmstat ricerca tutte le pagine di manuale in cui c’éla stringa vmstat.

– p. 273

Documentazione: man - 3

Le pagine di manuale sono organizzate in sezioni. Adesempio la sezione 1 contiene i comandi utente, la sezione2 la libreria c, ecc.E’ possibile specificare in quale sezione cercare la paginadi manuale premettendone il numero al nome del comando:man 1 ls ricerca la pagina di manuale di ls nella sezione 1.Questo viene fatto per evitare ambiguitá (piú pagine dimanuale con lo stesso nome in sezioni diverse).Un modo sintetico per indicare che ci si riferisce al comandols cosí come riportato nella sezione 1 del manuale é: ls(1).

– p. 274

Documentazione: whatis

Il comando whatis riporta una sintetica descrizione delcomando passato come parametro, consultando unapposito database.

$ whatis ls$ ls (1) - list directory contents

– p. 275

Documentazione: apropos

Il comando apropos ricerca all’interno del database usatodal comando whatis per una stringa passata comeparametro.

– p. 276

Documentazione: info

Il comando info permette di accedere ad un helpipertestuale. I collegamenti sono indicati da una coppia diasterischi e possono essere visitati spostando il cursoreall’inizio del collegamento e premendo invio. Se vienespecificato un parametro viene aperta la sezione relativa(info libc ).

– p. 277

Documentazione: HOWTO

Gli HOWTO sono dei documenti che spiegano con grandedettaglio come compiere delle specifiche operazioni sulsistema (configurare la rete, masterizzare un CD, farecalcoli paralleli, configurare un RAID). Se installati sitrovano a partire dalla directory /usr/share/doc/HOWTO.

– p. 278

Link -1 tldp.org

www.tldp.org é il sito del The Linux DocumentationProject. Contiene tutti gli HOWTO e alcune guide etutorial.

freshmeat.net é un archivio di software per Linux/Unix.Contiene di tutto, da programmi egregi a sempliciesperimenti.

sourceforge.net offre hosting gratuito a progetti opensource. E’ possibile avere forum, CVS, mailing list.

www.kernel.org Il sito www.kernel.org contiene i sorgentidel kernel di tutte le versioni di linux. É consigliatoaccedere via ftp ad uno dei mirror, come ad esempioftp.it.kernel.org (o ftp.es.kernel.org, ...)

– p. 279

Link - 2

www.linuxtoday.com riporta le notizie che riguardano ilmondo Linux presenti su giornali anche nonspecialistici.

slashdot.org é, per definizione dei suoi autori “stuff fornerds”. É talmente popolare che é stato coniato iltermine slashdotted per dire di un sito che, citato suslashdot, é stato sovraccaricato di visitatori.

www.gnu.org Il sito del progetto GNU

www.groklaw.net Il sito di informazioni legali allacomunitá Linux nella vicenda SCO.

– p. 280

Link - 3

oss.oracle.com I progetti Open Source di Oracle

www.openoffice.org La suite per ufficio OpenOffice.

www.linuxfromscratch.org Una distribuzione Linux eduna guida a creare una propria distribuzione partendoda zero, ottimo per imparare molti aspetti misconosciutidel sistema

– p. 281