Il file system di un sistema Linux, come ogni Unix, ha una struttura gerarchica: tutti i suoi oggetti (file e directory) sono contenuti all'interno della root ( la directory principale, indicata semplicemente con "/
" (barra) ) e lo stesso carattere / viene usato per separare i nomi delle directory ( Ad esempio /usr/bin/
indica la directory bin
contenuta nella directory usr
contenuta nella root (/
).
La root contiente non soltanto TUTTE le altre directory di una partizione ma TUTTI i filesystem eventualmente montati sul sistema (partizioni e hard disk diversi, floppy, cdrom, condivisioni di rete ecc.).
Il principio è radicalmente diverso da quello presente nel mondo Windows, dove ogni device o risorsa ha un suo nome o lettera identificativa (A:, C:, D: ecc) al cui interno si trovano le directory del relativo filesystem.
Su molti Linux, ad esempio, i file contenuti in un floppy disk si trovano in una directory chiamata /mnt/floppy
e non in qualcosa chiamato A:
come su Windows. Il nome di questa directory, oltretutto, può cambiare ed essere decisa arbitrariamente dall'utente o da chi ha realizzato la distribuzione (ovviamente esistono metodi per sapere in quale directory viene montato qualsiasi dispositivo).
Esistono alcune notazioni standard Unix per indicare la directory corrente, la directory padre, la home directory ecc.
E' opportuno conoscere bene queste convenzioni in quanto sono comunemente utilizzate in attività sistemistiche:
/
Come sopra riferito, indica la root, la directory principale alla base di tutto il filesystem
/bin/
Indica la sottodirectory bin (una arbitraria), alla root
bin/
Indica la sottodirectory bin rispetto alla dir corrente. Notare che se il path inizia con una / indica un path assoluto, che inizia dalla root ( /, appunto). Se non inizia con / indica un path relativo alla directory in cui ci si trova.
.
Indica la directory corrente
..
Indica la directory madre di quella in cui ci si trova
../bin/
Indica la sottodirectory bin che si trova allo stesso livello della dir corrente.
~
La home directory dell'utente corrente (coincide di default con /home/login_utente
Un path assoluto, quindi, avrà un simile aspetto: /usr/local/bin
e sarà funzionante in qualsiasi directory in cui ci si trova.
Un path relativo ha aspetto simile a local/bin
e indica directory diverse a seconda della directory in cui ci si trova. In questo caso local/bin coincide con /usr/local/bin
solo se ci si trova in /usr/
Comandi comuni
I comandi di gestione dei file su Unix sono paragonabili agli equivalenti di altri sistemi operativi a riga di comando come DOS. Tutti questi comandi, come tradizione Unix, hanno varie opzioni che possono ampliare notevolmente le potenzialità del comando stesso.
ls
Visualizza il contenuto di una directory (equivale a dir su Dos e in alcuni Linux esiste anche un alia di ls che si chiama proprio dir
);
cd
Cambia la directory corrente. Corrisponde all'omonimo cd su DOS.
cp
Esegue la copia di uno o più file. Corrisponde al copy di DOS.
mv
Esegue lo spostamente o la rinomicanzione di un file. Corrisponde a move e rename su DOS.
rm
Cancella uno o più file (fare attenzione: su molti Unix e Linux non è previsto l'equivalente di un cestino: se un file viene cancellato risulta poi piuttosto complesso recuperarlo). Corrisponde al del di DOS.
mkdir
e rmdir
Rispettivamente vengono usati per creare e cancellare una directory vuota.
ln
Viene usato per create un link, hard o soft (con l'opzione ln -s
).
La struttura delle directory in un sistema Linux ha molte caratteristiche comuni a quella di altri sistemi Unix.
Sotto vengono riportare le directory principale e più comuni su Unix diversi, altre directory possono avere nomi o funzionalità diverse in Unix diversi (e anche in distribuzioni Linux diverse).
/
Radice (root). La directory principale che contiene tutte le altre.
/root
Home dell'utente root, da non confondere con la root ( / ), che è la directory principale e non una directory che si chiama /root
/boot
Contiene tutte le immagini del kernel e file indispensabili al bootstrap del sistema
/etc
Contiene i file di configurazione del sistema e dei programmi installati
/home
Contiene le home directory degli utenti normali (tutti tranne l'utente root)
/usr
Contiene binari, documentazione, librerie e sorgenti della maggior parte dei programmi (e i sorgenti del kernel)
/var
Contiene tutti file che hanno informazioni dinamiche, che tendono a modificarsi con il tempo: log, file di pid e lock dei processi in esecuzione, directory di spool (stampa, mail...) ecc.
/proc
File system virtuale, generato in tempo reale dal kernel. Contiene, come se fossero file e directory, dati dinamici sul sistema e sui processi
/dev
Contiene file speciali, che corrispondono a dispositivi hardware o a funzionalità particolari. Tramite di essi si può accedere al relativo device hardware.
/sbin
Contiene comandi e programmi riservati a root ( altri comandi sono in /usr/sbin/
)
/bin
Contiene comandi e programmi base per tutti gli utenti (altri comandi sono in /usr/bin/
)
SWAP
Non è una directory ma una partizione speciale, utilizzata come memoria virtuale.
I sistemi Unix fanno largo uso di link: dei file speciali che sono semplici collegamenti o alias di file esistenti.
Servono per identificare lo stesso file o directory con nomi diversi, avendo anche path diversi.
Su Unix esistono due tipi di link: Hard link e Symbolic link.
L'effetto che hanno è lo stesso, ma la loro natura è diversa e si adattano a diversi utilizzi.
L'utilità dei link è varia:
- Se si devono modificare diversi file uguali, in diverse directory, con l'uso di link la modifica fatta su un file diventa immediatamente effettiva anche sugli altri file (link) (Es: la struttura di /etc/rc.* ) .
- Se si devono poter gestire contemporaneamente diversi ambienti o programmi con diverse versioni, si può cambiare solo il puntamento del link usato per accedere a questi ambienti per poter switchare rapidamente da uno all'altro (es: /usr/src/linux )
- Se si devono gestire diverse alternative dello stesso comando, si può usare un link per referenziare il comando con un nome fisso e poi cambiare il puntamento per valutare in tempi brevi le diverse alternative (ex: Directory /etc/alternatives in RedHat Linux).
Hard Link
Sono di fatto una copia di una voce di directory, hanno nomi diversi ma puntano allo stesso inode e quindi condividono esattamente lo stesso dato (oltre agli stessi permessi, data di modifica, owner ecc.).
Dal momento che originale e link sono indistinguibili e condividono lo stesso inode, non si possono fare hard link fra file system diversi e, in genere su Unix, su directory (su Linux è possibile creare un hard link ad una directory tramite l'opzione speciale -d).
Pur essendo la gestione dei link comunque molto rapida da parte del kernel, gli hard link sono leggermente più "economici" in quanto risparmiano più spazio su disco (stesso i-node, stessi dati) e richiedono una lettura in meno sul file system (i symlink hanno i-node diverso e puntatore, che va letto, ad un altro file).
Symbolic Link o Symlink
Sono dei piccoli file che contengono un puntamento ad altri file o directory. Questi file hanno i-node autonomo e possono puntare a file di altri file system (sia locali, che di rete). Si possono facilmente visualizzare con un normale ls -l e se viene cancellato o spostato il file a cui puntano rimangono "stale": continuano ad esistere ma puntano a qualcosa che non esiste.
I symlink sono generalmente molto più utilizzati nell'amministrazione di sistemi Unix e corrispondono come concetto e come implementazione ai collegamenti (shortcut) del mondo Windows.
Un symlink appare come avente tutti i permessi aperti a tutti gli utenti, di fatto è trasparente rispetto a permessi e ownership e riflette quelli del file o directory a cui punta.
La logica del file system Unix è semplice, elegante e potente, alcune sue caratteristiche sono comuni al DOS, altre all'antico MULTICS, altre sono uniche.
Le directory, a livello di sistema, sono trattate come dei file che invece di contenere dei dati contengono altri file o directory; per il sistema sono tutti i-node, che hanno in due parti separati il loro descriptor (nome, attributi, permessi ecc) dal contenuto (il dato presente nel file, o, nel caso di una directory, l'elenco dei file che contiene).
I file possono avere qualsiasi carattere (escluso NUL) nel nome, anche caratteri speciali per la shell o spazi e CR (Carriage Return).
Le estensioni non hanno nessuno specifico significato: sono usate per comodità da alcuni comandi ma non sono indispensabili e, a livello del file system, nemmeno identificative del tipo di file.
Una tipica partizione Unix contiene un file system così organizzato:
- Blocco 0, non usato da Unix, a volte usato per il boot del sistema (è l'MBR se si trova sul device primario);
- Blocco 1 o superblock, contiene informazioni critiche sulla struttura del file system (numero di i-node, numero di blocchi del disco ecc);
- Elenco degli I-node, numerati da 1 a un numero finito, che contengono le informazioni sui singoli file presenti nel file system e sulla posizione dei rispettivi dati;
- Blocchi dei dati, con i dati effettivi contenuti nel file.
Gli i-node contengono informazioni quali: tipo di file, permessi, data di creazione, modifica, ultimo accesso, utente e gruppo proprietari, posizione e dimensione del file ecc.
Tramite l'uso di link è possibile fare in modo che lo stesso i-node sia condiviso di diversi oggetti nel filesystem.
Linux di default supporta il file-system ext2 che ha molte caratteristiche in comune con un tipico file system Unix System V. Il kernel di Linux comunque permette l'uso di molti altri file system come ext3, reiserFS, jfs (file system giornalistici, che tengono un log di tutte le operazioni di scrittura per permettere un recupero dei dati più agevole in caso di guasti), i file system di Windows (fat, fat32, ntfs) e quelli di molti altri sistemi operativi (BeOs, AmigaOs, Mac, ecc), oltre a file system di rete come NFS, SMB, Novell.
Per risolvere il problema di rinominare numerosi file con la stessa estensione, si può utilizzare il comando mmv di Linux.
Supponiamo ad esempio di dover rinominare tutti i file *.tiff in *.jpeg. Come possiamo fare? Una soluzione sarebbe quella di utilizzare la riga comando:
for i in *.tiff;
do mv $i $(basename $i .tiff).jpeg;
done
oppure utilizzare lo script
for file in *.tiff; do;
mv $file ${file%.tiff}.jpeg
done
È però più comodo usare mmv (Multiple Move), che serve a spostare, copiare, appendere, linkare file multipli, e che possano essere raggruppati con un wildcard (carattere jolly).
Questa azione viene effettuata in modo sicuro, ovvero non ci sono cancellazioni di file inaspettate dovute a collisioni dei nomi dei file di destinazione con nomi di file già esistenti. Inoltre non ci sono problemi nel caso in cui i nomi dei file contengano spazi.
La sintassi è:
mmv 'Ambito*291?' 'pinco#1pallino#2'
che significa che verranno rinominati tutti i file contenenti le stringe “Ambito”, “291″ e terminanti con un carattere e verrà dato il nome “pinco” + ciò che l’asterisco trova + “pallino” + ciò che il punto di domanda trova.
L’azione di sopra diventa ora:
mmv '*.tiff' '#1.jpeg'
verranno quindi rinominati tutti i file da Tiff (.tiff) a Jpeg (.jpeg).
Visualizza il contenuto di una directory. Corrisponde al "dir" di Windows.
Comando comune in tutti gli Unix, a volte con opzioni diverse.
Se non viene specificata alcuna directory, indica i file nella directory corrente.
ls [opzioni] [file]
-a
Visualizza tutti i file, anche quelli nascosti (che iniziano con un punto: .)
-l
(--format=long) Visualizza informazioni aggiuntive quali data di modifica, permessi, owner e group
-i
(--inode) Visualizza anche l'inode dei file
-f
Non esegue alcun ordinamento di file e li visualizza nell'ordine con cui sono stati memorizzati (di default ls fa un elenco in ordine alfabetico)
-t
(--sort=time) Ordina l'elenco dei file secondo la data di modifica
-u
(--time=access) Ordina l'elenco dei file secondo la data di ultimo accesso
-S
(--tsort=size) Ordina l'elenco dei file secondo la dimensione
-r
(--reverse) Ordina in senso inverso l'output dei file (da usare con -t, -u, -S ecc.)
-X
(----sort=extension) Ordina i file per estensione
-R
(--recursive) Elenca ricorsivamente tutte le sottodirectory e i file ivi contenuti, rispetto alla directory specificata (o corrente)
-I pattern
(--ignore pattern) Non visualizza i file che matchano il pattern specificato
Esempi
ls -lS /var/spool/mail
Esegue un listing esteso dei file contenuti in /var/spool/mail ordinandoli secondo dimensioni dal più grande al più piccolo.
ls -ltr /var/log
Elenca i file contenuti nella directory /var/log secondo data di modifica inversa: dal più vecchio al più recente.
ls -a ~
Elenca tutti i file (anche quelli nascosti, preceduti da un .) presenti nella propria home directory.
E' il comando per cambiare la directory corrente, cioè, in pratica, per spostarsi in una directory diversa da quella in cui ci si trova (usare il comando pwd
er visualizzare la directory corrente).
E' presente in tutti gli Unix e non è un comando a se stante (non è possibile trovarne il file binario) in quanto incorporato nella shell (BUILT IN COMMAND).
cd [directory]
Si aspetta come argomento il nome di una directory in cui spostarsi, se non ne viene specificata alcuna, entra, di default, nella home directory dell'utente.
Esempi
cd /
Cambia la directory corrente nella root.
cd ../
Si sposta nella directory padre di quella in cui ci si trova.
cd bin
Si sposta nella sottodirectory bin rispetto alla directory corrente.
Copia file e directory. Comando flessibile che permette di copiare sia un file su una destinazione data, sia un numero arbitrario di file su una directory d'arrivo. Può essere utile anche come strumento di backup e in script.
E' comune in tutti gli Unix ma alcuni parametri possono variare.
cp [opzioni] sorgente destinazione
cp [opzioni] sorgenti... directory_destinazione
OPZIONI POSIX (Valide in tutti gli Unix)
-f
(--force) Forza la copia, rimuovendo i file di destinazione preesistenti, se esistenti.
-i
(--interactive) Chiede conferma prima di sovrascrivere i file di destinazione (il cp su linux è solitamente un alias di cp -i, per cui di default viene chiesta la conferma alla sovrascrittura)
-p
(--preserve) Preserva gli attributi dei file copiati (owner, group, permessi, data di ultima modifica e data di ultimo accesso).
-R
(--recursive) Copia le directory ricorsivamente (include file e sottodirectory) rispettando l'integrità di file speciali.
OPZIONI GNU (Tipiche di Linux e altri Unix che usano la versione GNU di cp)
-a
(--archive) Corrisponde a cp -dpR e conserva nella copia quanto possibile la struttura e gli attributi dei file originali. Da usare quando si intende fare il backup di directory e file.
-d
(--no-dereference) Copia link simbolici come link simbolici piuttosto che copiare i file da essi puntati, e conserva la relazione di hard link tra i file originali anche nelle copie.
-s
(--symbolic-link) Crea un link simbolico invece della copia vera e propria dei file o directory.
-u
(--update) Nel caso il file di destinazione esiste già, lo sovrascrive solo se ha data di modifica più vecchia.
-v
(--verbose) Stampa il nome di ogni file prima di copiarlo.
-b
(--backup) Crea copie di backup dei file che stanno per essere sovrascritti o rimossi.
-S SUFFISSO
Aggiunge il SUFFISSO specificato a tutti file di backup.
Esempi
cp -a /etc /backup/
Copia tutta la directory /etc e i suoi contenuti nella directory /backup. Mantiene i link simbolici e i permessi inalterati.
cp /etc/grub.conf /tmp/
Copia il file /etc/grub.conf nella directory /tmp. Se /etc/grub.conf è un symlink, in /tmp/ si ritrova una copia del file a cui il link punta e non un symlink.
Cancella file o directory.
E' comune in tutti gli Unix ma alcuni parametri possono variare.
ATTENZIONE: IN UNIX NON ESISTE IL "CESTINO", QUANDO UN FILE VIENE CANCELLATO NON E' POSSIBILE RECUPERARLO FACILMENTE! (Ci sono comunque dei metodi per recuperare dei file cancellati, ma non sono semplicissimi).
Per poter cancellare un file è necessario avere permessi in scrittura sulla directory che lo contiene, ma NON E' NECESSARIO AVERLI SUL FILE stesso (se non si hanno permessi di scrittura sul file che si vuole cancellare, e che si trova in una directory dove si può scrivere, viene semplicemente richiesta una conferma prima della cancellazione).
Se si vuole cancellare un file in modo definitivo, rendendo impossibile un suo recupero, utilizzare il comando shred
.
rm [opzioni] file
-f
(--force) Forza la rimozione senza richiesta di conferma.
-i
(--interactive) Chiede conferma prima di cancellare i file
-R
(-r , --recursive) Se viene indicata una directory la cancella con tutto il suo contenuto (USARE CON CAUTELA)
ATTENZIONE a usare certe opzioni di rm, un comando come rm -rf /* se eseguito come root cancella brutalmente tutto il file system (in realtà ad un certo punto la cancellazione si blocca perchè vengono cancellati alcuni file vitali al funzionamento corrente del sistema, ma il risultato è comunque catastrofico e irreparabile).
Esempi
rm -rf /tmp
Cancella tutta la directory /tmp
rm -rf /tmp/*
Cancella tutti i file contenuti nella directory /tmp (la directroy rimane vuota)
Sposta o rinomina un file o una directory.
E' un comando comune a tutti gli Unix (con opzioni che possono variare). Notare che su Unix non esiste il corrispondente del comando "rename" di Windows. Il cambiamento di nome di un file viene fatto semplicemente "spostandolo" in un file con nome diverso.
mv [opzioni] sorgente destinazione
mv [opzioni] sorgenti... directory_destinazione
-f
(--force) Forza lo spostamento, sovrascrivendo i file di destinazione preesistenti, se esistono.
-i
(--interactive) Chiede conferma prima di sovrascrivere i file di destinazione (il mv su Linux è solitamente un alias di mv -i, per cui di default viene chiesta la conferma alla sovrascrittura)
-u
(--update) Nel caso il file di destinazione esiste già, lo sovrascrive solo se ha data di modifica più vecchia.
-v
(--verbose) Stampa il nome di ogni file prima di spostarlo.
-b
(--backup) Crea copie di backup dei file che stanno per essere sovrascritti o rimossi.
-S SUFFISSO
Aggiunge il SUFFISSO specificato a tutti file di backup.
Esempi
Il comportamento di mv varia a seconda della natura di sorgente e destinazione, seguono alcuni esempi generici, se risultano poco chiari fare pratica sul proprio sistema, è sempre il metodo migliore:
mv /directory/file /directory/file_nuovo
(Rinomina file in file_nuovo)
mv /directory/file /directory/file_esistente
(Sovrascrive file_esistente con file)
mv /directory/file /directory/subdirectory_esistente
(Sposta file all'interno di subdirectory_esistente)
mv /directory/subdirectory /directory/subdirectory_nuova
(Rinomina subdirectory)
mv /directory/subdirectory /subdirectory_nuova
(Sposta, e rinomina, subdirectory)
mv /directory/subdirectory /directory/subdirectory_esistente
(Sposta subdirectory all'interno di subdirectory_esistente)
Crea una o più directory. E' necessario avere permessi di scrittura nella directory in cui si vogliono creare nuove sotto directory. Comune in tutti gli Unix.
mkdir [opzioni] directory
-m ###
(--mode ###) Specifica i permessi della directiry creata (di default sono 777).
-p
(--parent) Crea le directory padre intermedie, nel caso non esistano. (es: mkdir -p /usr/local/test/my/dire crea la directory dire e anche le directory my, test, local, usr nel caso non esistano)
Esempi
mkdir -p temp/test/prova/nuova
Crea tutte le directory e sottodirectory indicate (anche se non esistono) rispetto alla posizione corrente. Senza l'opzione -p la directory "nuova" si poteva creare se esistevano già tutte le precedenti.
mkdir /tmp/nuova
Crea la directory "nuova" all'interno di /tmp.
Rimuove directory (ma non il loro contenuto).
Comando comune a tutti gli Unix.
Non cancella directory non vuote, per il quale è necessario un comando tipo rm -R
rmdir [opzioni] directory
-p
(--parents) Rimuove la directory specificata e ogni directory genitore che dovesse essere rimasta vuota.
--verbose
Modalità verbosa: per ogni directory rimossa stampa un messaggio
Esempi
rmdir /tmp/nuova
Rimuove la sottodirectory "nuova" all'interno di /tmp (ma solo se nuova non contiene file.
Crea un link al file specificato. Il link è un alias, uno pseudonimo, un secondo nome con cui un file può essere richiamato, oltre che con il suo nome principale.
ln è un comando comune in tutti gli Unix, la differenza fra hard e soft link è presente in tutti gli Unix.
ln [opzioni] nome_file_puntato [nome_link]
ln [opzioni] nomi sorgente directory destinazione
Nel primo caso se nome_file_puntato è un file, viene riscritto, se non viene specificato, viene creato nella directory corrente un link con il nome_sorgente (senza path).
Nel secondo caso è possibile specificare più file sorgenti e una directory di destinazione in cui vengono creati altrettanti alias con lo stesso nome.
-s
(--symbolic) Crea un link simbolico e non un hard-link. Opzione molto utilizzata.
-b
(--backup) Esegue una copia di backup dei file di destinazione, prima di cancellarli (se esistono).
Esempi
ln -s /usr/sbin/sendmail.postfix /usr/sbin/sendmail
Crea un link simbolico chiamato /usr/sbin/sendmail che punta al file /usr/sbin/sendmail.postfix
ln -s /etc/passwd
Crea, nella directory corrente, un link simbolico chiamato passwd che punta al file /etc/passwd
ln /etc/passwd /etc/shadow /etc/group /backup/
Crea 3 hardlink chiamati passwd, shadow e group nella directory /backup/ che puntano ai rispettivi file nella directory etc.
E' un comando che permette di visualizzare informazioni utili sui file come dimensione, permessi, inode, owner, data di ultimo accesso, di creazione e di modifica. In pratica tutto quello che è necessario conoscere di un file.
Ha opzioni, inoltre, che forniscono informazioni sul file system che contiene il file e che permettono di esportare i dati in modo sequenziale e poco user friendly ma comodo per essere gestiti all'interno di script.
stat [-l] [-f] [-v] [-t] file-name [file-name]...
-l
Flag da utilizzare per i links
-f
Visualizza le informazioni del file system che contiene il file
-t
Visualizza lo stdout in modo tale da essere processato da un secondo programma o comando
Esempi
stat /etc/rc.local
Fornisce informazioni, in formato "human readable" sul file /etc/rc.local (nel nostro caso un link simbolico)
stat -l /etc/rc.local
Fornisce informazioni sul file a cui punta il link simbolico /etc/rc.local
stat -t /etc/group
Fornisce informazioni su /etc/group dando solo l'elenco dei risultati senza specificarne la natura, utile per "passare" il risultato ad un altro comando all'interno di uno script.
Visualizza ricorsivamente l'elenco dei file e delle sottodirectory rispetto alla directory indicata (quella corrente, se non viene specificata).
L'output è ad albero e indica chiaramente la gerarchia delle directory.
tree [opzioni] [directory]
-a
Visualizza tutti i file, anche quelli nascosti.
-d
Visualizza solo le directory
-s
Visualizza anche le dimensioni di ogni file
-p
Visualizza anche i permessi di ogni file
-D
Visualizza anche la data di modifica di ogni file
-u
Visualizza anche l'owner di ogni file
Esempi
tree
Visualizza l'albero delle directory a partire dalla directory corrente.
tree -ap /etc
Visualizza l'albero delle directory all'interno di /etc includendo tutti i file nascosti ed evidenziando i permessi di ogni file
tree -ud /
Visualizza l'elenco di tutte le directiry (escludendo quindii file) e il rispettivo owner all'interno di tutto il filesystem
Cambia il tempo di accesso e modifica di un file, di fatto fa quello che dice: "tocca un file senza modificarne i contenuti.
Se il file non esiste ne crea uno nuovo di dimensioni zero.
Comando comune a tutti gli Unix.
touch [opzioni] [data] files
data
La data è quella corrente se non specificata, altrimenti va inserita nel formato mmddhhmm[yy]
-a
Aggiorna solamente l'access time.
-m
Aggiorna solamente il modify time.
Esempi
touch /tmp/nuovo
Crea un file chiamato /tmp/nuovo di 0 byte e data di modifica e ultimo accesso attuale
touch /etc/group
Cambia la data di modifica e ultimo accesso a quella attuale.
Alcuni esempi sul comando df
Il comando df
visualizza l'utilizzo dello spazio disco dei filesystem montati. L'opzione -T
indica il tipo di filesystem. La misurazione avviene in maniera predefinita in blocchi da 1K, ma potrebbe non essere subito comprensibile, per cui è meglio utilizzare lo switch -h
.
$ df -h -T
Filesystem Type Size Used Avail Use% Mounted on
/dev/hda6 ext3 20G 9.3G 9.1G 51% /
/dev/hda7 reiserfs 13G 2.1G 11G 17% /mnt/suse
/dev/sda1 vfat 241M 152M 90M 63% /media/usbdisk
du
permette, invece, di determinare l'occupazione di spazio da parte delle singole directory o dei singoli file. Per misurare la dimensione di una directory particolare, ad esempio, si può scrivere:
$ du -h /home/miadir/spammersdapunire
Anche in questo caso il formato predefinito è la visualizzazione in Kilobytes. L'opzione -c
stampa il valore della dimensione totale della directory (alla fine), mentre -s
visualizza un riepilogo senza visualizzare le eventuali sottodirectory.
Un esempio pratico dell'uso di du
:
$ du -ch | grep total
visualizza in un'unica linea la dimensione totale della directory corrente. Con il parametro --exclude=type
si può escludere un particolare tipo di file dal conteggio. Per ottenere invece un elenco dei file ordinati per dimensione, si può scrivere:
$ du -ah | sort -n
Molte comandi Unix eseguono funzioni comuni ad analoghi comandi su altri sistemi operativi. Per chi conosce bene un sistema operativo e vuole velocemente sapere gli equivalenti dei comandi su un nuovo OS, esistono in rete varie "Stele di Rosetta" o comunque tavole comparative.
Alcune di queste si riferiscono ai diversi dialetti Unix, che pur avendo radice comune, in certi comandi e naming convention differiscono fra loro.
Nei link associati a questo INFOBOX ci sono alcune di queste preziose risorse.
Trova in tutto il file system i file con l'inode specificato.
E' utile per identificare gli hard link ad un file.
Nell'esempio sotto si visualizza l'inode di un file che si è visto avere 3 nomi associati (il 3 nella terza colonna dell'output di ls -li) e si cerca in tutto il file sysyem tutti i file che hanno stesso inode.
[root@trinity root]# ls -li /usr/bin/zgrep
301759 -rwxr-xr-x 3 root root 1461 Aug 24 2001 /usr/bin/zgrep
[root@trinity root]# find / -inum 301759
/usr/bin/zfgrep
/usr/bin/zgrep
/usr/bin/zegrep
Script in una riga che trasforma il nome di file nella directory corrente in caratteri minuscoli.
E' possibile invertire il risultato, cioe' trasformare tutto in maiuscolo, invertendo di posto
[:upper:]' '[:lower:]'
La struttura dell'albero delle directory su sistemi Sun Solaris è simile a quella di tutti gli Unix ma presenta alcune singolarità che val la pena analizzare.
/
La directory principale al cui interno è presente tutto il file system.
/bin/
E' un symlink a /usr/bin dove risiedono comandi standard ddestinati ad essere usati da tutti gli utenti
/dev/
Contiene i device files del sistema. Sono tutti symlink a file in /devices/. Fra questi si segnalano le seguenti directory:
/dev/dsk
Block disk device, quali hard disk IDE o SWCSI
/dev/pts
Pseudo Terminali (usati , per esempio, in sessioni telnet)
/etc/
File di configurazione dell'host. Si segnalano le seguenti subdirectory:
/etc/acct
Configurazioni sull'accounting
/etc/cron.d
Informazioni sulla configurazione del cron
/etc/default
Informazioni di default per il sistema e alcuni programmi
/etc/inet
File di configurazione per servizi di network
/etc/init.d
Gli script di start e stop dei singoli servizi. Invocati da rc nei vari runlevel.
/etc/opt
File di configurazione per pacchetti opzionali
/etc/skel
Script e file di configurazione di default per i nuovi utenti
/export
Directory di default per file system comunemente condivisi via rete
/home
Directory che di default contiene le home degli utenti
/kernel
Il kernel e i moduli platform independent
/opt
Directory di default dove vengono installati pacchetti opzionali
/sbin
Comandi essenziali usati per system recovery o durante il boot
/tmp
Directory per file temporanei. Viene mountata sul swpa file system e perde il suo contenuto al reboot
/usr
Acronimo di Unix System Resources. Directory molto vasta con varie sottodirectory, fra cui:
/usr/bin
Posizione standard per i comandi di sistema
/usr/include
Header files per programmi in C
/usr/java
Contiene programmi e librerie per l'ambiente Java
/usr/lib
Librerie e binari
/usr/openwin
Contiene i programmi che fanno parte di OpenWindows
/var
Contiene file variabili come log, spool ecc.
Può capitare di avere un sistema installato su più partizioni di un hard disk e ritrovarsi con un utilizzo non omogeneo dello spazio su disco libero.
In tempi rapidi, usando dei symlink, si possono mettere delle rapide "pezze" senza dover ridimensionare le partizioni o aggiungere hard disk.
Analizziamo questo esempio:
[root@socrate al]# df -k
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda5 1682664 1254556 342632 79% /
/dev/hda1 19487 6793 11688 37% /boot
none 258400 0 258400 0% /dev/shm
/dev/hda2 1512000 74880 1360312 6% /var
Ipotizziamo di dover copiare da un CDROM in /home/bigdata
di questo sistema una grande quantità di dati, più di quanto possa essere contenuto nella /
, che si trova nella stessa partizione ormai piena al 79%.
Una rapida soluzione può essere copiare i dati in un'altra partizione e mantenere lo stesso path in /home
con un link simbolico:
mkdir /var/bigdata
cp -r /mnt/cdrom/* /var/bigdata
ln -s /var/bigdata /home/bigdata
In questo modo esiste sempre la directory /home/bigdata e il fatto che in realtà sia un link simbolico a /var/bigdata è trasparente, per il sistema.
Questo è solo un esempio, non perfettamente calzante (la directory /var, contenendo log e file mutevoli, è destinata a riempirsi) che comunque da l'idea di come con un semplice link si possono spostare intere directory e distribuire meglio lo spazio disponibile su partizioni diverse.
Midnight Commander è un file manager definito anche una Visual Shell per sistemi Unix, utile sui server dove spesso X non viene utilizzato. Ha una logica e un aspetto molto simile al vecchio Norton Commander per DOS.
E' possibile lanciare Midnight Commander in una shell tramite il comando mc
. Questo software una volta avviato presenta un pannello di controllo diviso in quattro parti. Due pannelli più grandi in cui vengono visualizzati i file contenuti nella directory in cui ci si trova al momento dell'esecuzione, la linea di comando, e dei menu richiamabili tramite tasti funzione F1-F10.
Il programma può essere utilizzato anche mediante i menu a tendina, e con l'ausilio del mouse, quest'ultimo non solo in locale ma anche in remoto tramite connessioni via telnet o ssh.
Tra le caratteristiche di questo file manager, la possibilita' di montare directory FTP, visualizzare file tar, DEB ed RPM con possibilita' di estrarne singoli file, ed infine eseguire l'undeleting di file su partizioni di tipo EXT2.
Permette di individuare i PID dei processi che utilizzano un certo file, socket o filesystem ed eventualmente eseguirne il kill.
fuser [opzioni] [nome file|socket|FS]
Opzioni principali:
-k
: Esegue il kill del processo
-u
: Mostra l'owner del processo
-v
: Abilita la modalità verbosa e mostra l'output in modalità ps.