[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ A ] [ B ] [ C ] [ D ] [ successivo ]


Debian Tutorial
Capitolo 17 - Concetti avanzati


(Argomenti più avanzati andrebbero messi qui? Penso sarebbe carino averne alcuni, solo per mostrare le possibilità e dare alcune spiegazioni concettuali che non si trovano in un manuale di consultazione. Inoltre è sempre bello avere un capitolo chiamato "Concetti avanzati". Aumenta l'autostima per i principianti. :)


17.1 Introduzione allo scripting di shell


17.1.1 Cosa e perché

Automatizzare semplici compiti.


17.1.2 Un semplice esempio

Idee?


17.2 File avanzati


17.2.1 La vera natura dei file: hard link e inode

Ogni file sul sistema è rappresentato da un inode (da "Information Node"; pronunciato "ai-nod"): un inode contiene tutte le informazioni riguardanti un file. Tuttavia, l'inode non è visibile direttamente. Invece ciascun inode è collegato nel filesystem da uno o più hard link. Gli hard link contengono il nome del file e il numero di inode. L'inode contiene il file medesimo, cioè la posizione in cui sono archiviate le informazioni sul disco, i suoi permessi di accesso, il tipo di file e così via. Il sistema può trovare ogni inode una volta che conosca il numero di inode.

Un singolo file può avere più di un hard link. Ciò significa che più nomi di file possono riferirsi allo stesso file (cioè, essi sono associati con lo stesso numero di inode). Tuttavia, non si possono creare hard link tra filesystem differenti: tutti i riferimenti di tipo hard ad un file particolare (inode) devono essere sullo stesso filesystem. Questo perché ciascun filesystem possiede il proprio insieme di inode e ci possono essere duplicati di numeri di inode tra i diversi filesystem.

Siccome tutti gli hard link ad un dato inode si riferiscono al medesimo file, si possono fare modifiche al file, riferendosi ad esso tramite un nome, e poi vedere questi cambiamenti quando ci si riferisce ad esso con un nome differente. Provare questo:

  1. cd; echo "hello" > primolink

    Usare il comando cd verso la propria directory home e creare un file chiamato primolink contenente la parola "hello". Quello che si è fatto in realtà è redirigere l'output di echo (echo restituisce semplicemente ciò che gli si dà), posizionando l'output in primolink. Si veda il capitolo sulla shell per una spiegazione completa.

  1. cat primolink

    Verificare il contenuto di primolink.

  1. ln primolink secondolink

    Creare un hard link: secondolink ora punta allo stesso inode di primolink.

  1. cat secondolink

    Verificare che secondolink è uguale a primolink.

  1. ls -l

    Si noti che il numero di hard link mostrati per primolink e secondolink è 2.

  1. echo "cambiamento" >> secondolink

    Questo è un altro trucco di redirezione della shell; non ci si preoccupi dei dettagli. Si è aggiunta la parola "cambiamento" a secondolink. Verificarlo con cat secondolink.

  1. cat primolink

    Anche primolink ha la parola "cambiamento" in aggiunta! Questo perché primolink e secondolink fanno riferimento al medesimo file. Non importa come lo si chiama quando lo si modifica.

  1. chmod a+rwx primolink

    Cambiare i permessi di primolink. Digitare ls -l per confermare che i permessi di secondolink siano cambiati anch'essi. Ciò significa che le informazioni sui permessi sono registrate nell'inode, non nei link.

  1. rm primolink

    Cancellare questo link. Questa è una raffinatezza di rm; in realtà rimuove i link, non i file. Digitare ora ls -l e si noti che secondolink c'è ancora. Si noti anche che il numero di hard link per secondolink si è ridotto a uno.

  1. rm secondolink

    Cancellare l'altro link. Quando non ci sono altri link a un file, Linux cancella il file stesso, cioè il suo inode.

Tutti i file funzionano così: perfino alcuni tipi speciali di file come i device (per esempio /dev/hda).

Una directory è semplicemente un elenco di nomi di file e numeri di inode, cioè un elenco di hard link. Quando si crea un hard link, si sta solo aggiungendo una coppia nome-numero a una directory. Quando si cancella un file, si sta solo rimuovendo un hard link da una directory.


17.2.2 Tipi di file

Un dettaglio che è stato tenuto nascosto fino ad ora è che il kernel Linux considera quasi ogni cosa come un file. Ciò include le directory e i device: questi sono solo un tipo speciale di file.

Come si ricorderà, il primo carattere mostrato da ls -l rappresenta il tipo di file. Per un file ordinario, questo sarà un semplice -. Altre possibilità sono:


17.2.2.1 Link simbolici

I link simbolici (anche chiamati symlink o soft link) sono l'altro tipo di link oltre agli hard link. Un link simbolico è un file speciale che "punta a" un hard link su un qualsiasi filesystem montato. Quando si prova a leggere il contenuto di un link simbolico, viene restituito il contenuto del file al quale esso punta invece del contenuto del link simbolico stesso. Siccome le directory, i device e gli altri link simbolici sono tipi di file, si può puntare un link simbolico a uno qualsiasi di essi.

Così un hard link è composto da un nome di file e da un numero di inode. Un file è veramente un inode: una posizione sul disco, un tipo di file, modalità dei permessi, ecc. Un link simbolico è un inode che contiene il nome di un hard link. Un link simbolico accoppia un nome di file con un altro, mentre un hard link accoppia un nome di file con un numero di inode.

Tutti gli hard link al medesimo file hanno il medesimo stato. Cioè ognuno è equivalente all'altro; effettuare qualsiasi operazione su uno di essi è proprio come effettuarla su uno qualsiasi degli altri. Questo perché gli hard link si riferiscono tutti al medesimo inode. Operazioni sui link simbolici, d'altra parte, qualche volta hanno effetto sull'inode specifico del link simbolico (quello contenente il nome di un hard link) e altre volte hanno effetto sull'hard link a cui puntano.

Ci sono un certo numero di importanti differenze tra link simbolici e hard link:

Provare questo:

  1. cd; ln -s /tmp/me MioTmp

    Spostarsi con cd alla propria directory home. ln con l'opzione -s crea un link simbolico; in questo caso, uno chiamato MioTmp che punta al nome di file /tmp/me.

  1. ls -l MioTmp

    L'output dovrebbe somigliare a questo:

         lrwxrwxrwx	1 havoc	havoc	7 Dec  6 12:50 MioTmp -> /tmp/me
    

    La data e il nome utente/gruppo saranno naturalmente differenti. Si noti che il tipo di file è l, che indica che si tratta di un link simbolico. Si notino anche i permessi: i link simbolici hanno sempre questi permessi. Se si prova il comando chmod su un link simbolico, si modificheranno i permessi del file a cui esso punta.

  1. chmod 700 MioTmp

    Si ottiene un errore "No such file or directory", perché il file /tmp/me non esiste. Si noti che si può comunque creare un link simbolico ad esso.

  1. mkdir /tmp/me

    Creare la directory /tmp/me.

  1. chmod 700 MioTmp

    Ora dovrebbe funzionare.

  1. touch MioTmp/miofile

    Creare un file in MioTmp.

  1. ls /tmp/me

    Il file è veramente stato creato in /tmp/me.

  1. rm MioTmp

    Rimuovere il link simbolico. Si noti che rimuove il link, non ciò a cui esso punta. Così si usa rm e non rmdir.

  1. rm /tmp/me/miofile; rmdir /tmp/me

    Ripulire tutto.


17.2.2.2 File di device

I file di device si riferiscono a un device fisico o virtuale sul proprio sistema, come i propri hard-disk, scheda video, schermo o tastiera. Un esempio di device virtuale è la console, rappresentata da /dev/console.

Ci sono due tipi di device: i device a caratteri a cui si può accedere un carattere alla volta, cioè la più piccola unità di dati che può essere scritta o letta dal device è un carattere (un byte).

Ai device a blocchi si deve accedere in unità più grosse chiamate blocchi, che contengono un certo numero di caratteri. Il proprio hard disk è un device a blocchi.

Si possono leggere e scrivere i file di device proprio come si può con gli altri tipi di file, sebbene il file possa contenere strane cose senza senso e non comprensibili dall'uomo. Scrivere dati casuali su questi file è probabilmente una CATTIVA idea. Alcune volte è tuttavia utile: per esempio, si può fare il dump di un file postscript verso il device della stampante /dev/lp0 o inviare comandi modem al file di device per la porta seriale appropriata.


17.2.2.2.1 /dev/null

/dev/null è un file di device speciale che elimina qualsiasi cosa ci si scriva. Se non si vuole qualcosa, lo si getti in /dev/null. Essenzialmente si tratta di un pozzo senza fondo. Se si legge /dev/null si ottiene immediatamente un carattere di fine-file. EOF (end-of-file). /dev/zero è simile, solo che se si legge da esso, si ottiene il carattere \0 (non è la stessa cosa del numero zero).


17.2.2.3 Named pipe (FIFO)

Una named pipe (pipe con nome) è un file che agisce come una pipe. Si mette qualcosa nel file ed essa viene fuori dall'altra parte. Perciò è chiamata FIFO, o First-In-First-Out: la prima cosa che viene immessa nella pipe, è la prima che viene fuori dall'altra parte.

Se si scrive in una named pipe, il processo che sta scrivendo nella pipe non termina fino a che l'informazione che si sta scrivendo non è stata letta dalla pipe. Se si legge da una named pipe, il processo di lettura attende finché c'è qualcosa da leggere, prima di terminare. La dimensione della pipe è sempre zero; non immagazzina dati, collega solamente due processi come il carattere di shell |. Tuttavia, siccome questa pipe ha un nome, i due processi non devono essere sulla stessa riga di comando e neppure essere avviati dal medesimo utente.

Si può provare usando i seguenti comandi:

  1. cd; mkfifo miapipe

    Creare la pipe.

  1. echo "hello" > miapipe &

    Mettere sullo sfondo un processo che prova a scrivere "hello" nella pipe. Si noti che il processo non rientra dal suo essere sullo sfondo; aspetta che qualcuno legga dalla pipe.

  1. cat miapipe

    A questo punto il processo echo dovrebbe rientrare, dato che cat legge dalla pipe e il processo cat stamperà hello.

  1. rm miapipe

    Si possono cancellare le pipe proprio come qualsiasi altro file.


17.2.2.4 I socket

I socket assomigliano alle pipe, solamente che essi lavorano tramite la rete. Questo è il modo in cui il computer lavora in rete: si può aver sentito parlare di "WinSock", che sono i socket per Windows.

Non ci addentreremo in questo argomento, perché probabilmente non si avrà occasione di usare i socket a meno che non si stia programmando. Tuttavia se si vede un file marcato con il tipo s sul proprio computer, si sa cosa esso sia.


17.2.3 Il filesystem proc

Il kernel Linux rende disponibile un filesystem speciale, che viene montato sotto /proc sui sistemi Debian. Questo è uno "pseudo-filesystem": non esiste realmente su nessuno dei propri dispositivi fisici.

Il filesystem proc contiene informazioni sul sistema e sui processi avviati. Alcuni dei "file" in /proc sono ragionevolmente comprensibili agli umani (provare a digitare cat /proc/meminfo o cat /proc/cpuinfo), mentre alcuni altri sono arcane collezioni di numeri. Spesso le utilità di sistema li utilizzano per raccogliere informazioni e presentarle in un modo più comprensibile.

Spesso le persone vanno nel panico quando scoprono un file in particolare, /proc/kcore, che generalmente è enorme. Questo è (più o meno) una copia del contenuto della memoria del proprio computer. Esso è utilizzato per fare il debug del kernel. Non esiste realmente da nessuna parte, perciò non ci si preoccupi della sua dimensione.

Se si vuole sapere tutto sulle cose presenti in /proc, digitare man 5 proc.


17.2.4 Aspetti avanzati dei permessi sui file


17.2.4.1 Utilizzare argomenti numerici con chmod

Precedentemente in questo capitolo, abbiamo brevemente ricordato che si possono impostare i permessi sui file utilizzando i numeri. La notazione numerica è chiamata "modalità assoluta", in contrapposizione con la notazione simbolica (ad esempio u+rx) che è spesso chiamata "modalità relativa". Ciò perché il numero specifica una precisa modalità da impostare, mentre i simboli specificano solo un cambiamento da fare (ad esempio "aggiungi i permessi di lettura ed esecuzione per l'utente").

La modalità numerica è composta da una serie di quattro cifre ottali o dodici cifre binarie. Ogni cifra ottale (in base otto) rappresenta tre cifre binarie: una cifra ottale e tre cifre binarie sono due modi per rappresentare le cifre decimali da 0 a 7.

Calcolare una modalità particolare è piuttosto semplice. Si sommano semplicemente le modalità che si vogliono combinare o si sottraggono le modalità che non si vogliono. Per esempio i permessi per l'utente, con solo il permesso di lettura attivato, sarebbero 100 in forma binaria. I permessi per l'utente con solo quello di scrittura sarebbero 010 in forma binaria. I I permessi per l'utente con lettura e scrittura entrambe attivate sarebbero 100 + 010 = 110. In alternativa, si può esprimerlo in cifre ottali: 4 + 2 = 6.

Per la modalità completa, semplicemente si aggiungano i numeri della seguente tabella:

     0001        altri, esecuzione
     0002        altri, scrittura
     0004        altri, lettura
     0010        gruppo, esecuzione
     0020        gruppo, scrittura
     0040        gruppo, lettura
     0100        utente, esecuzione
     0200        utente, scrittura
     0400        utente, lettura
     1000        sticky bit
     2000        imposta group id
     4000        imposta user id

Per utilizzare la tabella, prima decidere quali permessi si vogliono impostare. Poi sommare i numeri per quei permessi. Il totale è la propria modalità Per esempio, per impostare la modalità 0755:

       0001   o=x
       0004   o=r
       0010   g=x 
       0040   g=r
       0100   u=x
       0200   u=w
     + 0400   u=r
     -------
       0755  u=rwx go=rw

Questa modalità, si chiama in realtà semplicemente 755, senza lo 0 iniziale, perché chmod aggiunge automaticamente gli zeri all'inizio della modalità: 7 significa modalità 0007.

Per impostare un file a 755, si digiterà chmod 755 miofile.

La modalità 755 è molto comune per le directory, poiché permette a chiunque di utilizzare la directory, ma solo al proprietario di creare e cancellare file nella directory. La modalità 644 è la modalità analoga per i file e anch'essa è molto comune. Permette a chiunque di utilizzare il file, ma solo il proprietario può modificarlo. Per i file eseguibili 755 è una modalità comune; è solamente644 più i permessi di esecuzione (644 + 111 = 755).


17.2.5 chattr

Un trucco utile?


17.2.6 Copiare su larga scala

cp -a e varianti sul tema.

come copiare un vecchio sistema su uno nuovo.

FIXME oops, ho indicato questo argomento anche sotto gli strumenti di backup. Occorre decidere.


17.2.7 Altri concetti non ancora affrontati, ma che dovrebbero esserlo.

fsck, dd, fdisk, etc.

in quale pacchetto si trova un file ?

file di testo MSDOS vs. Mac vs. Unix

sync


17.3 Compilare il kernel

Come, cosa e perché


17.4 Alcune parole riguardo la sicurezza

Le basi della sicurezza dal punto di vista dell'utente. Mantenere la propria privacy. Cosa possono vedere gli altri utenti del proprio account.


17.5 Programmazione su Linux

Qualcosa riguardo la programmazione in ambiente Linux. Mirato a, diciamo, persone che stanno studiando "Primi rudimenti di informatica". Niente sul come programmare, solo Emacs, gcc, gdb, ddd, ecc., in quanto strumenti di programmazione.

Probabilmente basato su debug.tex


[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ A ] [ B ] [ C ] [ D ] [ successivo ]


Debian Tutorial

30 settembre 2007

Havoc Pennington hp@debian.org