[ 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 ]
(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. :)
Automatizzare semplici compiti.
Idee?
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:
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.
cat primolink
Verificare il contenuto di primolink.
ln primolink secondolink
Creare un hard link: secondolink ora punta allo stesso inode di primolink.
cat secondolink
Verificare che secondolink è uguale a primolink.
ls -l
Si noti che il numero di hard link mostrati per primolink e secondolink è 2.
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.
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.
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.
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.
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.
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:
d (directory)
l (link simbolico)
b (device a blocchi)
c (device a caratteri)
p (named pipe)
s (socket)
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:
I link simbolici possono attraversare filesystem differenti. Questo perché contengono nomi di file completi, che cominciano con la directory root, e i nomi di file completi sono unici. Siccome gli hard link puntano ai numeri di inode, e i numeri di inode sono unici solo all'interno di un singolo filesystem, risulterebbero ambigui se il filesystem non fosse noto.
Si possono creare link simbolici alle directory, ma non si possono invece creare hard link alle medesime. Ogni directory possiede hard link: quello che la elenca nella sua directory genitrice, la sua voce . e la voce .. in ciascuna delle sue sottodirectory, ma, per imporre ordine sul filesystem, nessun altro hard link alle directory è permesso. Di conseguenza, il numero di file in una directory è uguale al numero di hard link a quella directory meno due (si sottraggono il nome di quella directory e il link .).
Si può creare un hard link solo ad un file esistente, perché ci deve essere un numero di inode a cui fare riferimento. Tuttavia, si può creare un link simbolico a qualsiasi nome di file, indipendentemente dal fatto che esista realmente un tale nome di file.
Rimuovendo un link simbolico si rimuove solo il link. Non ha effetti sul file a cui il link si riferisce. Rimuovendo l'unico hard link ad un file, si rimuove il file.
Provare questo:
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.
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.
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.
mkdir /tmp/me
Creare la directory /tmp/me.
chmod 700 MioTmp
Ora dovrebbe funzionare.
touch MioTmp/miofile
Creare un file in MioTmp.
ls /tmp/me
Il file è veramente stato creato in /tmp/me.
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.
rm /tmp/me/miofile; rmdir /tmp/me
Ripulire tutto.
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.
/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).
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:
cd; mkfifo miapipe
Creare la pipe.
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.
cat miapipe
A questo punto il processo echo dovrebbe rientrare, dato che cat legge dalla pipe e il processo cat stamperà hello.
rm miapipe
Si possono cancellare le pipe proprio come qualsiasi altro file.
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.
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.
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).
Un trucco utile?
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.
fsck, dd, fdisk, etc.
in quale pacchetto si trova un file ?
file di testo MSDOS vs. Mac vs. Unix
sync
Come, cosa e perché
Le basi della sicurezza dal punto di vista dell'utente. Mantenere la propria privacy. Cosa possono vedere gli altri utenti del proprio account.
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 2007hp@debian.org