24
CAPITOLO 2 ESPLORAZIONE DEL FILE SYSTEM DI UNIX Sezione A – Introduzione a file e directory In UNIX un file è la componente di base per la memorizzazione di dati. UNIX considera file qualsiasi cosa, persino le periferiche collegate al computer come il monitor, la tastiera o la stampante. Esistono tre tipi di file in UNIX: File ordinari, Directory, e File speciali. Il file system è una parte del sistema operativo, che si occupa della gestione ad alto livello di file e directory all’interno della memoria di massa. È un dispositivo di archiviazione, potremmo anche dire che è il modo in cui UNIX organizza i file sui dispositivi di memorizzazione di massa come gli hard disk. In UNIX, i file sono organizzati in una struttura gerarchica simile a un albero in cui i file di livello superiore contengono gli altri file, che a loro volta ne contengono altri e così via. INTRODUZIONE ALLA STRUTTRA AD ALBERO STANDARD Comunemente, in un elaboratore l’informazione è memorizzata in modo permanente nei dischi fissi, ogni disco fisso può essere diviso in partizioni e ogni partizione può contenere un filesystem con una propria top level directory. Sorge quindi il problema di come permettere agli utenti di accedere ai vari filesystem contenuti nelle differenti partizioni: La prima possibilità consiste nell’avere root directory distinte (ad esempio in Windows abbiamo: C:\, D:\ ecc.), una per ogni partizione. Quindi per riferirsi a un file, bisogna usare un pathname che parte dalla directory root giusta. UNIX/Linux invece fa in modo che i diversi filesystem vengano combinati in un’unica struttura gerarchica, “montando” la top level directory di una partizione come foglia del filesystem di un’altra partizione. La struttura ad albero del file system di UNIX parte al livello radice: root è il nome del file a questo livello di base ed è indicato dal carattere della barra trasversale (/). La barra trasversale rappresenta quindi la directory root. Una directory è un particolare tipo di file che può contenere altri file e directory: i file normali memorizzano informazioni, mentre i file di directory memorizzano i nomi dei file normali e quelli di altre

capitolo 2

  • Upload
    ange

  • View
    218

  • Download
    0

Embed Size (px)

DESCRIPTION

Esplorazione del file system di UNIX

Citation preview

CAPITOLO 2 ESPLORAZIONE DEL FILE SYSTEM DI UNIXSezione A Introduzione a file e directory

In UNIX un file la componente di base per la memorizzazione di dati. UNIX considera file qualsiasi cosa, persino le periferiche collegate al computer come il monitor, la tastiera o la stampante.Esistono tre tipi di file in UNIX: File ordinari, Directory, e File speciali.

Il file system una parte del sistema operativo, che si occupa della gestione ad alto livello di file e directory allinterno della memoria di massa. un dispositivo di archiviazione, potremmo anche dire che il modo in cui UNIX organizza i file sui dispositivi di memorizzazione di massa come gli hard disk. In UNIX, i file sono organizzati in una struttura gerarchica simile a un albero in cui i file di livello superiore contengono gli altri file, che a loro volta ne contengono altri e cos via.

INTRODUZIONE ALLA STRUTTRA AD ALBERO STANDARD

Comunemente, in un elaboratore linformazione memorizzata in modo permanente nei dischi fissi, ogni disco fisso pu essere diviso in partizioni e ogni partizione pu contenere un filesystem con una propria top level directory.Sorge quindi il problema di come permettere agli utenti di accedere ai vari filesystem contenuti nelle differenti partizioni: La prima possibilit consiste nellavere root directory distinte (ad esempio in Windows abbiamo: C:\, D:\ ecc.), una per ogni partizione. Quindi per riferirsi a un file, bisogna usare un pathname che parte dalla directory root giusta. UNIX/Linux invece fa in modo che i diversi filesystem vengano combinati in ununica struttura gerarchica, montando la top level directory di una partizione come foglia del filesystem di unaltra partizione.

La struttura ad albero del file system di UNIX parte al livello radice: root il nome del file a questo livello di base ed indicato dal carattere della barra trasversale (/). La barra trasversale rappresenta quindi la directory root.

Una directory un particolare tipo di file che pu contenere altri file e directory: i file normali memorizzano informazioni, mentre i file di directory memorizzano i nomi dei file normali e quelli di altre directory, che prendono il nome di sottodirectory; considerate le figlie della directory genitore perch sono create allinterno di questultima.

Allinterno della directory root, vi sono (tra le altre) le directory dev, bin e home. dev sta per directory device, sono i file che rappresentano i dispositivi, ossia puntatori che puntano ai dispositivi di input e output (a differenza di Windows in cui i dispositivi si riconoscono tramite una lettera).In questa directory sono contenuti i file speciali, con questo nome tutti i dispositivi fisici e logici di I/O ( unit a disco, memoria centrale , terminali video , stampanti , ecc). Poich questi dispositivi sono trattati dal sistema operativo come file normali, tutte le operazioni di I/O all'hardware seguono regole analoghe a quelle trattate nella scrittura di un file.Alcuni file speciali contenuti nella directory dev sono, per esempio hda e ttyS0.Il primo indica il dispositivo per il controllo della periferica, hard disk sul controller a;mentre il secondo controlla il terminale. bin la directory che contiene i programmi principali eseguibili. home la home directory degli utenti.

Nella figura precedente, la root directory (/) il genitore di tutte le arte directory.Mentre la directory home, per esempio, il genitore delle sottodirectory jean, tricia e joseph.

Visto che, genitore di tutte le directory, la directory root, se in C si dovr inserire lindirizzo di un file su cui scrivere, tale indirizzo inizier con il carattere /.

USO DELLE PARTIZIONI DI UNIX

La sezione del disco che contiene un file system prende il nome di partizione: un disco pu avere diverse partizioni, ognuna delle quali separata dalle altre in modo che non venga influenzata da disturbi esterni come problemi strutturali associati con unaltra partizione.Quando si installa UNIX su un computer, uno dei primi compiti decidere come partizionare lhard disk.Le partizioni di UNIX sono identificate con nomi quali hda1 e hda2, dove le prime due lettere indicano a UNIX il tipo di periferica, per esempio hd per hard disk, mentre la terza lettera, per esempioa, indica se il disco primario o secondario (a=primario, b=secondario). Le partizioni di un disco sono numerate a partire da 1. Il nome hda1 indica a UNIX che si tratta della prima partizione del disco, mentre hda2 indica la seconda partizione dello stesso disco. Se si ha un secondo hard disk con due partizioni, queste saranno identificate come hdb1 e hdb2.

I dispositivi di memorizzazione per computer come gli hard disk prendono il nome di periferiche, le quali si collegano al computer tramite interfacce elettroniche.

Il file system di UNIX un file system virtuale, il che significa che si pu accedere a tutte le partizioni una volta che sono state montate nella struttura ad albero.

Impostazione delle partizioni del file systemIl partizionamento dei file system isola e protegge ogni singolo file system, perci se uno di essi si guasta, si pu lavorare con un altro. Si dovrebbero usare almeno tre partizioni separate per i file system: root, swap e/ usr.

La dimensione delle partizioni viene misurata in megabyte (MB, ossia un milione di caratteri).Le partizioni grandi hanno maggiori probabilit di essere danneggiate rispetto a quelle di dimensioni minori: la partizione root dovrebbe essere ridotta per evitare la corruzione dei file. Un file system root danneggiato rende il sistema non avviabile. Dopo la partizione root, si imposta la partizione swap, che agisce come estensione della memoria in modo che UNIX abbia pi spazio per lesecuzione di programmi di grandi dimensioni. Infine, la partizione /usr contiene tutti i programmi del sistema operativo non relativi al kernel che rendono utile il computer, tra i quali vi sono i pacchetti per lo sviluppo di software che permettono di programmare, i programmi di rete, quelli per laccesso a Internet, le interfacce grafiche e il grande numero di utility UNIX (programmi che svolgono operazioni utili come la copia di file, lelencazione di directory e la comunicazione con gli altri utenti). La partizione /usr dovrebbe essere la pi grande delle tre partizioni.

Oltre a queste tre partizioni separate, si pu creare una partizione /home destinata alla home directory di tutte le directory degli utenti. Una partizione home separata protegge e isola i file personali degli utenti dal software del sistema operativo UNIX.

La partizione /usrLa partizione /usr una grande partizione che memorizza la maggior parte dei file e dei programmi del sistema operativo.Anche gli strumenti per lo sviluppo di software, come i compilatori, le librerie condivise e i file di intestazione necessari per la creazione di programmi vengono memorizzati in una gerarchia di sottodirectory che parte da /usr.

La partizione /homeLa partizione /home larea di memorizzazione del lavoro di tutti gli utenti. Se la partizione /root (o qualunque altra partizione) viene danneggiata, la presenza di una partizione /home garantisce che le informazioni degli utenti non saranno perse. Sebbene si possano avere delle limitazioni alla lettura di informazioni presenti in altre partizioni, si pu accedere alla maggior parte dei file presenti nella propria home directory.

La dimensione della partizione destinata alla home directory di tutti gli utenti di un sistema dipende dal numero di utenti che il sistema deve accogliere. Lo spazio allocato pu dipendere anche da quanti dati ogni utente ha bisogno di memorizzare.

La partizione di swapLe partizioni swap consentono di avere una memoria virtuale, ossia una risorsa di memoria aggiuntiva ottenuta utilizzando parte dello spazio del disco come unestensione della memoria (RAM).

USO DEL COMANDO MOUNT

UNIX utilizza il comando mount per collegare le partizioni del file system alla struttura delle directory allavvio del sistema.Per poter utilizzare un filesystem in un sistema UNIX, necessario che questa venga agganciato al directory tree, ovvero venga visto come una directory allinterno dellalbero delle directory. Si parla quindi di montaggio del filesystem.Questa operazione informa il sistema operativo della presenza del filesystem considerato, associandolo ad una directory allinterno della struttura logica che rappresenta il mount-point (punto di montaggio) del filesystem.

La sintassi del comando mount la seguente:

Sintassimount [option] [device] [dir]

Analisi option sono ovviamente le opzioni di funzionamento del comando mount device il file di dispositivo contenente il filesystem da montare dir il mount-point (directory) nel quale montare il filesystem contenuto nel file di dispositivo indicato da device

Il comando mount senza argomenti, invece, elenca i filesystem in uso nel sistema.

Per garantire la sicurezza del sistema, solo lutente root, in genere lamministratore di sistema, pu usare il comando mount. Gli utenti normali possono invece utilizzare diversi pacchetti software per montare e smontare i file system, in particolare dischetti e CD-ROM.

Il CD-ROM uno dei dispositivi necessari pi di frequente, pertanto lo si deve montare.Supponiamo che si desideri accedere ai file di un CD: lamministratore di sistema monta il CD-ROM inserendo un disco nellunit e immettendo il comando seguente:

mount -t iso9660 -r /dev /cdrom /mnt /cdrom

Questo comando monta il CD su un dispositivo chiamato cdrom situate nella directory /dev. Il punto di mount effettivo in UNIX mount/cdrom, una directory che fa riferimento al dispositivo CD-ROM.Quando il CD montato, si pu accedere ai suoi file attraverso la directory /mnt/cdrom. UNIX supporta diversi tipi di file system, che vengono specificati con lopzione t. I CD-ROM sono classificati come dispositivi iso9660, pertanto lamministratore di sistema digita t seguito dallargomento iso9660.Lopzione r indica che il dispositivo CD-ROM di sola lettura.

Quando laccesso ai file system montati manualmente non pi necessario, lamministratore di sistema lo smonta con il comando umount prima di rimuovere il supporto di memorizzazione.Ad esempio:umount /mnt/cdrom

CONTROLLO DELLO SPAZIO SI DISCO

Il comando dfPer visualizzare un prospetto della quantit di spazio su disco libero e usato dai singoli file system del sistema, si utilizza il comando df (disk free).Lo spazio rappresentato in termini di blocchi del disco (un blocco equivale a 512 MB) e inode.

La sintassi del comando la seguente:Sintassidf [option] [--] [file]

Analisi option sono le opzioni del comando, tra queste vi sono: il doppio trattino (facoltativo) indica che i parametri successivi non sono da considerarsi opzioni. il parametro facoltativo file indica il nome di un file nel filesystem di cui si vogliono visualizzare le informazioni.Se non specificato, sono visualizzate le informazioni relative ai filesystem correntemente montati.

Ad esempio:1. user> df/(/dev/dsk/ c0t0d0s0 ) : 2231020 blocks304297 files

/proc(/proc ) : 0 blocks 11692 files

/opt(/dev/dsk/ c0t0d0s3 ) : 2486076 blocks325130 files

/usr/local(/dev/dsk/ c0t0d0s7 ) : 4067088 blocks430227 files

/opt/salaris2(apphost : /opt/solaris2) : 1995968 blocks286013 files

Nellesempio considerato: il primo campo contiene il nome del filesystem il secondo il device corrispondente (eventualmente virtuale) il terzo il numero di blocchi occupati il quarto il numero di inode

Il comando duQuesto comando (disk usage) fornisce informazioni sullo spazio occupato da una directory e da tutte le sue sottodirectory, misurato in blocchi.

La sua sintassi :Sintassidu [opzioni] [arg]

Analisi [opzioni] sono ovviamente le opzioni del comando. Ad esempio a, mostra lo spazio occupato anche dai file che si incontrano, e non solo dalle eventuali sottodirectory.Ve ne sono altre utilizzate per cambiare lunit di misura dello spazio su disco:-bVisualizza lo spazio occupato in byte

-kVisualizza lo spazio occupato in kilobyte

-mVisualizza lo spazio occupato in megabyte

[arg] se non viene specificato il nome di una particolare directory, il comando du prende come argomento la directory corrente.

Ad esempio:1. user> du LABORATORIO_SO

8LABORATORIO_SO/LABSO/CVS

16884LABORATORIO_SO/LABSO

16LABORATORIO_SO/scriptColonne

14LABORATORIO_SO/linguaggio_c

17342LABORATORIO_SO

MONITORAGGIO DELLA MEMORIA

Il comando top fornisce informazioni sulla memoria utilizzata dai processi attivi (processi che in quel momento usano la CPU), queste informazioni vengono aggiornate ad intervalli di qualche secondo.

La sintassi del comando la seguente:Sintassitop [opzioni]

Analisi [opzioni] sono ovviamente le opzioni del comando.

In questo modo verr visualizzata unintera schermata contenente i processi elencati secondo la quantit di CPU utilizzata.

Ad esempio:1. user> topload averages: 0.68, 0.39, 0.27 14 : 34 : 55245 processes: 235 sleeping, 9 zombie, 1 on cpuCPU states: 91.9% idle, 5.8% user, 2.4% kernel, 0.0% iodai, 0.0% swapMemory: 768M real, 17M free, 937M swap in use, 759M swap free

PIDUSERNAMETHRPRINICESIZERESSTATETIMECPUCOMMAND

12887root159065M56Msleep105:003.71%Xsun

4210lenisa14802856K2312Kcpu0:001.50%top

9241root159035MS6Msleep15:581.47%Xsun

24389pietro447028M25Msleep16:300.74%opera

Nellesempio precedente: la prima riga indica il carico del sistema rispettivamente nellultimo minuto, negli ultimo 5 minuti, negli ultimi 15 minuti. Il carico espresso come numero di processori necessari per far girare tutti i processi a velocit massima. Alla fine della riga c lora. La seconda contiene il numero e lo stato dei processi del sistema. La terza. Lutilizzo della CPU. La quarta contiene informazioni sulla memoria. Le restanti righe contengono informazioni sui processi (THR=thred, RES=resident)

PERCORSI

Abbiamo visto che tutti i file UNIX sono memorizzati in directory dei file system, a partire dalla root directory. Per specificare un file o una directory, si utilizza il suo nome di percorso (pathname), che segue i rami del file system e del file desiderato. Una barra trasversale (/) separa i nomi delle directory.Quindi tutti i file possono essere individuati con un percorso corretto ed unico, ossia un elenco dei nomi delle directory che portano ad un file particolare.Un percorso assoluto inizia sempre a livello della root directory, mentre un percorso relativo parte dalla directory corrente.

Ad esempio, se si desidera specificare la posizione del file phones.502, sapendo che si trova nella directory source della home directory di jean, allora si scriver /home/jean/source/phones.502.Mentre, supponendo di trovarci nella directory /home/jean, il pathname sar source/phones.502.

Uso del prompt della linea di comandoIl prompt dei comandi di UNIX pu indicare la posizione corrente nel file system.Per esempio, il prompt [jean@eli jean]$ probabilmente il prompt predefinito generato dallamministratore di sistema al momento della creazione dellaccount. Il prompt [jean@eli jean]$ significa che jean lutente che sta lavorando sul computer host chiamato eli nella sua home directory, che porta il suo nome utente jean. In altre parole, jean su eli nella sua home directory.Quando Jean cambia posizione per passare a home/jean/source, il suo prompt sar il seguente [jean@eli source]$

Personalizzazione del promptIl prompt viene configurato automaticamente allaccesso.Una variabile di ambiente, PS1, contiene dei caratteri speciali di formattazione che determinano la formattazione del prompt.

Per visualizzare il contenuto della variabile di ambiente PS1:1. Si digita echo $PS1 e s preme Invio2. Apparir il contenuto della variabile PS1, che potrebbe essere simile al seguente:[ \u@\h \W] \$

I caratteri che iniziano con \ sono caratteri speciali di formattazione della shell Bash: \u visualizza il nome dellutente, \h visualizza il nome dellhost del sistema, mentre \W visualizza il nome della directory di lavoro. Il carattere \$ visualizza un # o un $, in relazione al tipo di utente connesso. Le parentesi quadre, [ e ], e lo spazio che separa \h e \W non sono caratteri speciali, quindi vengono visualizzati cos come appaiono.Quando Jean connessa al sistema eli e lavora nella sua home directory, il suo prompt sar [jean@eli jean]$ secondo il formato mostrato sopra.

Altri caratteri di formattazione per la configurazione del prompt della shell Bash sono:Caratteri di formattazioneScopo

\dVisualizza la data

\hVisualizza il nome dellhost

\nVisualizza una nuova riga

\nnnVisualizza il carattere ASCII che corrisponde al numero ottale nnn

\sVisualizza il nome della shell

\tVisualizza lora

\uVisualizza il nome dellutente

\wVisualizza il percorso della directory di lavoro

\WVisualizza il nome della directory di lavoro senza informazioni di percorso

\!Visualizza il numero del comando corrente nella cronologia dei comandi

\#Visualizza il numero del comando nella sessione corrente

\$Visualizza il simbolo # selutente root, altrimenti visualizza un simbolo $

\[Contrassegna linizio di una sequenza di caratteri non stampabili, come una sequenza di controllo

\]Contrassegna la fine di una sequenza di caratteri non stampabili

\\Visualizza il carattere \

Configurazione del prompt della shell Bash:1. Per modificare il prompt in modo che visualizzi la data e lora, digitare PS1 = \d\t> e premere Invio. Digitare il comando senza spazi tra i caratteri.Il prompt a questo punto assomiglier al seguente:mar lug 5 09 : 18 : 33>

2. Per cambiare il prompt in modo che visualizzi la directory di lavoro corrente, digitare PS1 = \w> e premere Invio. Il prompt sar il comando seguente: >Il carattere di formattazione \w visualizza il segno per rappresentare la home directory dellutente.Per cambiare il prompt in modo che visualizzi il percorso completo della directory di lavoro, si deve usare unaltra variabile di ambiente, PWD, che contiene il nome di percorso completo della directory di lavoro corrente.

3. Per visualizzare la variabile PWD nel prompt, digitare PS1 = $PWD> e premere Invio (osserviamo che si deve anteporre il segno $ alla variabile di ambiente per estrarne il contenuto). Il prompt apparir cos:/home/jean>

4. Disconnettersi dal sistema ed accedere nuovamente per reimpostare il prompt alla suo configurazione predefinita.

Il comando pwdSi pu usare il comando UNIX pwd per visualizzare il percorso corrente, infatti pwd labbreviazione di present working directory, ossia stampa la directory di lavoro.Visualizzazione del percorso corrente:1. Al prompt dei comandi $ digitare pwd e premere Invio. Il sistema visualizza il percorso della directory di lavoro corrente.

SPOSTAMENTO NEL FILE SYSTEM

Per spostarsi nella struttura delle directory di UNIX, si utilizza il comando cd (change directory), che ha la seguente sintassi:

Sintassicd directory

AnalisiDirectory il nome della directory nella quale ci su vuole spostare. Il nome della directory espresso come percorso alla destinazione, con barre trasversali che separano i nomi delle sottodirectory.

Quando si accede al sistema, si lavora nella propria home directory, che si trova sotto la directory /home.Quando si cambia directory e si desidera poi tornare nella home directory, si deve digitare cd e premere Invio (quindi cd senza argomenti sposta lutente nella sua home directory). UNIX utilizza anche il carattere tilde per indicare la home directory dellutente.

Si utilizza inoltre il comando cd . . per spostarsi nella directory madre, mentre il comando cd . indica la directory corrente.

Illustriamo un esempio che mostra lutilizzo di pwd e cd: pwd/home/bianchi cd . /progetto pwd/home/bianchi/progetto

Notiamo che punto (.) e punto punto (. .) sono alias rispettivamente per la directory corrente e per la directory madre.

Elencazione del contenuto delle directoryIl comando ls (list)visualizza i nomi dei file e delle directory contenuti in una directory.I file contenuti appaiono con colori diversificati a seconda che siano directory, file normali o file compressi. possibile fornire un argomento a ls, in modo da elencare un file specifico o visualizzare il contenuto di una particolare directory.Elencazione di un file o una directory specifici:1. Se non ci si trova nella propria home directory, digitare cd e premere Invio.2. Supponiamo di aver usato il comando cat per creare un file di nome note, che si trova nella home directory. Allora digitando note e premendo Invio, il sistema visualizza un elenco dei contenuti del file note.3. Per visualizzare il contenuto di una directory diversa da quella di lavoro corrente, si deve fornire il nome della directory come opzione del comando ls. Per esempio, per vedere il contenuto della directory /var, digitare ls /var e premere Invio. Apparir un elenco simile a questo:catman db li bloacl lock log nis preserve run spool tmp yp

Si possono usare anche delle opzioni per visualizzare informazioni specifiche o maggiori informazioni rispetto a quelle fornite dal comando da solo.Lopzione l del comando ls, genera un elencazione lunga che include informazioni complete su ogni file, questa visualizzazione spesso prende il nome di listato lungo (long listing format).Supponendo di voler visualizzare un elenco lungo delle directory /etc e /home del sistema, digiteremo nel primo caso ls l /etc e premeremo Invio, mentre nel secondo digiteremo ls l / e premeremo Invio.

In generale, il comando ls l fornisce maggiori informazioni su ogni elemento del listato rispetto ad un semplice comando ls.Osserviamo le informazioni restituite da tale comando: Tipo di file e autorizzazioni di accessola prima colonna di informazioni mostrata , ad esempio, il seguente set di caratteri:

drwxr -xr -x

il primo carattere dellelenco, d, indica che il file in realt una directory. Se invece avessimo avuto un file ordinario, sarebbe apparso il trattino (-) al posto della d, nel caso di link avremmo avuto l, b per block device (ossia file che rappresentano una periferica con interfaccia a blocchi.), c per character device (file che identificano una periferica con accesso a caratteri). I caratteri restanti indicano le autorizzazioni di accesso. Numero di collegamentiLa seconda colonna riporta il numero di file che sono collegati simbolicamente a questo file. Se il file una directory, come in questo caso, questo il numero di sottodirectory contenute (una directory contiene sempre almeno due sottodirectory, punto e punto punto). ProprietarioLa terza colonna indica il proprietario del file, in questo caso lutente root. GruppoLa quarta colonna riporta il gruppo proprietario del file, che in questo caso il gruppo root. DimensioneLa quinta colonna mostra la dimensione del file in byte. Data e oraLa sesta e la settima colonna mostrano la data e lora della creazione o dellultima modifica del file. NomeLottava colonna contiene il nome del file

Si pu utilizzare anche lopzione a (all) con il comando ls per elencare i file nascosti, quelli il cui nome inizia con un punto. Il sistema operativo in genere utilizza file nascosti per memorizzare informazioni di configurazione e per altri scopi.

Altre opzioni per il comando ls sono:-alVisualizza il listato lungo della directory visualizzando anche i file nascosti

-a*Visualizza tutte le directory

-rVisualizza i file in ordine invertito

-RElenca ricorsivamente anche il contenuto di eventuali sottodirectory incontrate

-SVisualizza i file per dimensione partendo dal pi grande

-tOrdina lelenco per data e ora dellultima modifica anzich alfabeticamente

Uso dei metacaratteriUn metacarattere un carattere speciale che pu essere utilizzato al posto di qualunque altro carattere o di un gruppo di caratteri. I metacaratteri sono utili quando si desidera lavorare con diversi file dal nome simile o con un file del quale non si riesce a ricordare il nome esatto.

Quando lutente invia un comando, la shell lo scandisce alla ricerca di eventuali metacaratteri, che processa in modo speciale. Una volta processati tutti i metacaratteri viene eseguito il comando.

I seguenti metacaratteri, chiamati wildcard, vengono usati per abbreviare il nome di un file in un pathname:

MetacarattereSignificato

*Stringa di 0 o pi caratteri

?Singolo carattere

[ ]Singolo carattere tra quelli elencati

{ }Stringa tra quelle elencate

[a-z]Indica qualsiasi carattere compreso tra a e z inclusi

[!a]Indica qualsiasi carattere diverso da a

Il metacarattere * rappresenta qualunque gruppo di caratteri in un nome di file, quindi allinterno di un pathname non altro che unabbreviazione per un nome di file.

1. Supponiamo ad esempio che in una home directory vi siano otto file: friendsinstructions.txtlist1list2list2bmemo_to_fredmemo_to_jillminutes.txtnotes

2. Se si immette il comando ls *.txt e si preme Invio, si otterr il seguente output:instructions.txt minutes.txtLargomento *.txt provoca la visualizzazione dei nomi di tutti i file che terminano con .txt .

3. Se invece si immette ls memo*, si otterr il risultato seguente:memo_to_fred memo_to_jill

4. Se invece si inserisse il comando ls *s e si premesse Invio, il comando visualizzerebbe tutti i file che terminano con s:friends notes

1. user cp /JAVA/Area*. java /JAVA_backupCopia dalla directory JAVA tutti i files il cui nome inizia con la stringa Area e termina con lestensione .java, nella directory JAVA_Backup

Il metacarattere ? prende il posto di un singolo carattere.

5. Digitando ls list? E premendo Invio, ls visualizzerebbe i nomi che iniziano con list e terminano con un singolo carattere:list1 list2osserviamo che non verrebbe elencato il file list2b, perch i caratteri che seguono la parola list nel suo nome sono due.

1. user> ls /dev/tty?Mi fa vedere tutti i device tty+un solo carattere

2. user> ls /dev/tty?[234]Restituisce la lista dei file in /dev che si chiamano tty+un carattere qualsiasi+un carattere tra 2, 3, 4La risposta a tale comando potrebbe essere:/dev/ttyp2 /dev/ttyp4 /dev/ttyq3 /dev/ttyr2 /dev/ttyr4 /dev/ttyp3 /dev/ttyq2 /dev/ttyq4 /dev/ttyr3

3. user> ls /dev/tty?[2-4]In questo caso il risultato analogo al punto precedente:/dev/ttyp2 /dev/ttyp4 /dev/ttyq3 /dev/ttyr2 /dev/ttyr4 /dev/ttyp3 /dev/ttyq2 /dev/ttyq4 /dev/ttyr3

4. user> mkdir /user/studenti/rossi/{bin, doc, lib}Con questo comando creo le directory bin, doc e lib,Notiamo che per includere dobbiamo utilizzare le parentesi graffe.

Il quotingIl meccanismo del quoting utilizzato per inibire leffetto dei metacaratteri.I metacaratteri cui applicato il quoting perdono il loro significato speciale e la shell li tratta come caratteri ordinari.Ci sono tre meccanismi di quoting: il metacarattere escape (\) inibisce leffetto speciale del metacarattere che lo segue.Ad esempio:user> cp file file\?user> ls file*file file?In questo caso non interpreta ? come metacarattere, ma crea il file file?.

Tutti i metacaratteri presenti in una stringa racchiusa tra singoli apici perdono leffetto speciale.Ad esempio:user> cat file*?in questo caso * e ? no hanno pi il valore di metacaratteri, ma fanno parte del nome del file.

I metacaratteri per labbreviazione del pathname presenti in una stringa racchiusa tra doppi apici perdono il loro effetto speciale (quindi non perdono leffetto speciale TUTTI i metacaratteri della shell, comera nel caso precedente, ma solo quelli pee labbreviazione del pathname).

Sezione B Uso di file e directory

CREAZIONE DI DIRECTORY E FILE

Per creare una nuova directory, si pu utilizzare il comando mkdir (make directory), mentre per creare un file si pu usare cat. Si pu creare una directory a condizione di essere il proprietario della directory genitore. Il proprietario di un file la persona che lo crea e diventa lunico che pu controllarne laccesso.

Creazione delle nuove directory e dei file:1. Digitare cd e premere Invio per accertarsi di essere nella home directory.2. Digitare mkdir dip_4540 e premere Invio per creare una nuova directory chiamata dip_45403. Digitare ls e premere Invio: la directory dip_4540 apparir nellelenco.4. Digitare cd dip_4540 e premere Invio per passare alla nuova directory. 5. Utilizzare il comando cat per creare un file chiamato, ad esempio, phones1: cat > phones1Inserire il contenuto del file premendo Invio alla fine di ogni linea.6. Premere Ctrl + Z7. Digitare cd e premere Invio per tornare nella home directory.

Per rimuovere un file si utilizza il comando rm, mentre per eliminare una directory vuota si usa il comando rmdir.(Una directory deve essere vuota affinch sia possibile rimuoverla.)

IMPOSTAZONE DELLE AUTORIZZAZIONI PER I FILE

Linux un sistema operativo multiutente; per ogni file ci sono quattro categorie di utenti: root, owner, group, world.Lamministratore del sistema (root) ha tutti i permessi su tutti i file (pu leggere, scrivere ed eseguire ogni file). Per le altre categorie di utenti, invece, laccesso ai file regolato dai permessi.Nellanalizzare il risultato del comando ls abbiamo visto che nella prima colonna compaiono il tipo di file e le autorizzazioni per laccesso. Tale colonna era, per esempio, drwxr -xr -x, dove il primo carattere indica il tipo di file mentre i caratteri che seguono sono suddivisi in tre sezioni di specificatori di autorizzazioni, ognuna delle quali contiene tre specificatori, come mostrato in figura

La prima sezione di specificatori indica le autorizzazioni del proprietario (owner), il quale, come tutti gli utenti, appartiene ad un gruppo.La seconda sezione indica le autorizzazioni del gruppo (group): questa specifica si applica a tutti gli utenti diversi dal proprietario, ma che siano membri del gruppo del proprietario.La terza sezione indica le autorizzazioni di tutti gli altri (world), quindi si applica a tutti gli utenti diversi dal proprietario e che non appartengano al suo gruppo.

In ogni sezione il primo carattere indica lautorizzazione alla lettura: se appare il carattere r, questa categoria di utenti ha il permesso di leggere il file.Il secondo carattere indica lautorizzazione alla scrittura: se appare il carattere w, questa categoria di utenti ha il permesso di scrivere sul file e di cancellarlo.Il terzo carattere indica lautorizzazione allesecuzione: se appare il carattere x, questa categoria di utenti ha il permesso di eseguire il file.Se invece appare un trattino (-) in corrispondenza della posizione di uno qualunque di questi caratteri, quel tipo di autorizzazione negata.

NB: per attraversare una directory, bisogna avere il permesso di esecuzione su di essa.

I permessi possono essere scritti con numeri anzich con lettere. In tal caso 1 indica il permesso per lautorizzazione, mentre 0 indica che questa negata. Lordine sempre lettura, scrittura ed esecuzione; per cui, lesempio precedente equivalente a 111101101.Il permesso 7 5 5 corrisponder a 111 101 101, ovvero rwx r-x r-x rispettivamente per proprietario, gruppo e altri.

Se ad un utente viene assegnata lautorizzazione di lettura per una directory, lutente pu visualizzare un elenco del suo contenuto. Lautorizzazione in scrittura per una directory significa che lutente pu memorizzare ed eliminare file al suo interno. Lautorizzazione di esecuzione per una directory significa che lutente pu renderla la directory di lavoro corrente.

Sa sinistra a destra, le lettere drwxr-xr-x hanno il seguente significato:dIndica il tipo di file (d=directory)

rIl proprietario del file ha lautorizzazione alla lettura

wIl proprietario del file ha lautorizzazione alla scrittura

xIl proprietario del file ha lautorizzazione allesecuzione (nel caso di file, lo pu eseguire come un programma)

rIl gruppo ha autorizzazione alla lettura

-Il gruppo non ha autorizzazione alla scrittura

xIl gruppo ha autorizzazione allesecuzione

rGli altri hanno lautorizzazione alla lettura

-Gli altri non hanno lautorizzazione alla scrittura

xGli altri hanno lautorizzazione allesecuzione

ls -l /etc/passwd-rw-rr-- root root 981 Sep 20 16 : 32 /etc/passwd(passwd un file molto importante, in quanto al suo interno sono memorizzate le password degli utenti e le informazioni sulla configurazione del file di accesso).

Si pu cambiare lo schema delle impostazioni di autorizzazione sostituendo una delle lettere con un trattino per rimuovere, ossia negare, lautorizzazione.Per esempio, impostando le autorizzazioni degli altri su - - -, essi non avranno pi alcuna possibilit di leggere, scrivere o eseguire il file.

Lamministratore di sistema assegna gli identificatori di gruppo quando aggiunge un nuovo account utente. Gli id (identificatori) di gruppo danno ad un gruppo di utenti lo stesso accesso ai file da essi condivisi.Gli altri sono tutti gli utenti che non sono associati al gruppo dellutente tramite un id di gruppo.

Il comando chmodIl comando di UNIX chmod permette di impostare le autorizzazioni per i file.Si pu usare il comando chmod per impostare le autorizzazioni relative ai file di cui si proprietari, quindi lowner che pu cambiare i permessi dei file tramite questo comando.Nella sua forma pi semplice, questo comando, accetta come argomento una stringa simbolica seguita da uno o pi nomi di file. Le stringa simbolica specifica le autorizzazioni che devono essere concesse o negate alle categorie di utenti.

1. Ad esempio: ugo+rwx Nella stringa i caratteri ugo indicano lo user (equivalente a proprietario), group o others, ossia proprietario, gruppo o altri. Queste categorie di utenti saranno interessate dal comando chmod.Il carattere successivo, il segno +, indica che le autorizzazioni sono concesse.Mentre lultimo gruppo di caratteri, in questo caso rwx, indica le autorizzazioni assegnate.La stringa simbolica suddetta indica pertanto che vengono assegnate autorizzazioni di lettura, scrittura ed esecuzione al proprietario, al gruppo e agli altri utenti.

2. Supponiamo ora di usare la stringa simbolica in un comando per modificare le autorizzazioni di accesso a miofile: chmod ugo+rwx miofile

3. Se volessimo invece un comando che assegna lautorizzazione di lettura al gruppo per il file clienti, avremmo:chmod g+r clienti

4. Le stringhe simboliche permettono anche di negare autorizzazioni. Il comando che segue nega le autorizzazioni di scrittura ed esecuzione al gruppo e agli altri per il file info_account:chmod go-wx info_account

5. Se volessimo assegnare tutti i permessi al proprietario e solo lettura a gruppo e altri, riguardo il file f1, potremmo scriverechmod 744 f1Infatti, in ottale 744 corrisponde a 111100100, ossia rwxr--r--.

6. Possiamo scegliere un modo ancora diverso per assegnare i permessi. Per esempio, per ottenere il risultato precedente potremmo scriverechmod u=rwx, go=r f1Coma abbiamo gi visto, u rappresenta lownwr, o user, g rappresenta il gruppo ed o sta per world, o others.

Come mostrato negli esempi precedenti, possiamo usare i simboli +, -, = per assegnare i permessi:+Assegna i permessi che lo seguono

-Toglie i permessi che lo seguono

=Imposta esattamente i permessi che lo seguono

(per cui, in generale, chmod g+r f1 diverso da chmod g=r f1).Dalla propria directory si pu creare qualunque sottodirectory e impostare le autorizzazioni ad essa relative. Tuttavia, non consentito creare sottodirectory al di fuori della propria home directory a meno che lamministratore di sistema non prenda un provvedimento speciale.

INODE E LINK

Per ogni oggetto del filesystem, UNIX memorizza le informazioni gestionali in una struttura chiamata inode, memorizzata su disco ed avente un indice che ne identifica la posizione allinterno di un array di inode.Quindi inode un puntatore ad unarea del disco libera oppure occupata da un file.

Ad ogni file corrisponde un numero di inode, tale numero non altro che lindice dellinode nellarray.Tale struttura contiene: La locazione dei contenuti degli oggetti su disco; Il tipo di oggetto (-d, -l, ); La taglia in byte delloggetto; Lora dellultima volta in cui linode del file stato modificato (ctime); Lora dellultima volta in cui il contenuto del file stato modificato (mtime); Lora dellultima volta in cui il file stato utilizzato, letto o eseguito (atime); Il possessore del file; Il gruppo del file; I permessi riguardanti il file.

Quindi linode contiene tutte le informazioni riferite ad un file di qualunque tipo (comprese le directory), escluso il nome del file. In particolare, linode contiene i riferimenti necessari per raggiungere i blocchi di dati del file ed ogni inode raggiungibile tramite un numero (indice).Un blocco di dati una zona del disco utilizzata per contenere dati, il contenuto di un file pu essere distribuito in pi blocchi da dati.

La directory un file (cio un inode come gli altri) contenente un elenco di nomi di file abbinati al numero di inode rispettivo.Quindi le directory sono tabelle che associano i nomi dei file ai rispettivi numeri di inode.Le voci contenute in una directory sono dei collegamenti, indicati come collegamenti fisici o hard link, a degli inode. Quindi nella directory vi sono diverse voci, ognuna delle quali contiene il nome del file e il riferimento allinode corrispondente (collegamento fisico).

Quando un programma chiama un file tramite il nome, il sistema operativo trova linode corrispondente grazie alle directory, e linode punta ai blocchi di memoria in cui sono memorizzate le informazioni riguardanti il file.

Rappresentiamo, in maniera stilizzata, un esempio di struttura del filesystem:

Quando due file puntano allo stesso indice, vuol dire che sono la stessa cosa. Perci uno di essi sar un link, anche se non sappiamo dire a priori quale dei due.

I file, nella memoria di massa, sono scritti, se possibile, in modo contiguo; altrimenti si dispongono in blocchi separati.La deframmentazione serve proprio a fare in modo che il sistema operativo riorganizzi la memoria di massa, rendendo quanto pi possibile attigue le allocazioni da parte dello stesso file.

LINK E LINK SIMBOLICI

Hard linkAbbiamo visto che la directory contiene i collegamenti fisici allinode. Possiamo creare ulteriori collegamenti fisici, creando altri file che fanno riferimento allo stesso spazio in memoria (allo stesso indice di inode). In questo caso, il collegamento creato ha la stessa valenza di quello originale: con lhard link del file f2, creo un file, f2_new, cha ha un indice inode analogo a quello di f2; ottengo in questo modo un ulteriore collegamento fisico e cancellando il file f2, non avr problemi per quanto riguarda f2_new.

Il comando utilizzato per creare questo tipo di collegamento ln.

Con il comando ln f1 f1_newotteniamo leffetto analizzato sopra, il file f2_new un link avente lo stesso inode di f2.

Soft linkPossiamo creare anche dei collegamenti cosiddetti simbolici, in questo caso i file creati non fanno riferimento allo spazio in memoria, ma al file di partenza.Con il soft link del file g2, creo un file, g2_new, che ha un pathname analogo a quello di g2; in questo modo non ottengo un collegamento fisico, ma solo un puntatore al file g2 e cancellando questultimo file g2_new rimarr appeso.

Il comando utilizzato per creare questo tipo di collegamento ln s.

Con il comando: ls s g2 g2_newotteniamo leffetto analizzato sopra, il file g2_new un link avente lo stesso pathname di g2.

COPIA DI FILE

Si utilizza il comando cp per copiare un file di origine in un file di destinazione. UNIX sovrascrive il file di destinazione senza avvisare, a meno che si utilizzi lopzione i.La notazione punto unabbreviazione per indicare la directory corrente come destinazione di un comando cp.

Alcune opzioni per tale comando sono:-fForza la sovrascrittura dei file, senza chiedere interventi da parte dellutente

-iattiva la modalit interattiva, che chiede conferma prima dell'eventuale sovrascrittura di file preesistenti

-pmantiene, se possibile, gli attributi del file

-r, -Rpermette di attivare la modalit ricorsiva, consentendo la copia di directory

Il comando mvIl comando mv (move) serve per spostare, o rinominare, file e directory.La sintassi del comando la seguente: mv [opzioni] origine destinazione, mentre le opzioni sono le stesse del comando cp.Alcuni esempi di utilizzo del comando mv:1. mv miofile nuovofilecambier il nome del file miofile in nuovofile

2. mv miofile /provaSposter il file miofile nella directory prova, sovrascrivendo un eventuale file con lo stesso nome.

3. mv /prova /prova_nuovaCambier il nome della directory prova in prova_nuova

I comandi cp e mv possono prendere come primo argomento una lista di file; in tal caso il secondo argomento deve essere una directory:Ad esempio: Cp f1 f2 f3 d1Copia i file f1, f2, f3 nella directory d1.