Guida avanzata a Solaris

Capitolo 3 File e directory

La riga di comando di SunOS viene usata per eseguire operazioni su file e directory in maniera "manuale", digitandone il nome insieme al comando SunOS appropriato. Si tratta di un approccio diverso da quello dell'applicazione File Manager di OpenWindows, in cui i file vengono visualizzati in forma di icone e la selezione dei comandi avviene tramite menu.

Questo capitolo introduce i concetti principali e le procedure da seguire per operare su file e directory dalla riga di comando di SunOS. Le operazioni descritte possono essere effettuate da qualsiasi riga di comando di SunOS, si tratti di shell o finestre di comando dell'ambiente OpenWindows o di terminali remoti. Per utilizzare efficacemente il sistema operativo SunOS è essenziale comprendere i concetti presentati in questo capitolo.

Informazioni generali sui file

Il file è l'unità fondamentale del sistema operativo SunOS. Quasi tutti i tipi di dati vengono gestiti come file, tra cui:

Il paragrafo seguente descrive i comandi disponibili per creare, elencare, copiare, spostare e cancellare i file. Verrà inoltre spiegato come visualizzare il contenuto di un file e come determinarne la natura.

Comandi per la gestione dei file

Per ogni comando descritto in questa sezione è fornito un esempio che ne illustra l'utilizzo. Può essere utile provare ad eseguire gli esempi sulla propria workstation: l'esercitazione pratica sui comandi permetterà di comprenderli e ricordarli più facilmente.

Prima di iniziare

Prima di iniziare l'esercitazione sui file, portarsi nella propria directory home. Si tratta della directory che l'amministratore del sistema genera appositamente per l'utente quando crea il suo profilo. Eseguendo le operazioni descritte nella propria directory home sarà più difficile creare, copiare, spostare e soprattutto cancellare i file di altri utenti.

Per spostarsi nella propria directory home, digitare il comando cd senza altri argomenti. Questo comando ha come effetto lo spostamento nella directory home dell'utente che lo esegue. Digitare quindi il comando pwd per visualizzare la posizione corrente all'interno del file system, cioè la propria directory home:

$ cd
$ pwd
/export/home/nomeutente

In questo esempio, la directory home dell'utente è /export/home/nomeutente, in cui nomeutente è il nome dell'utente proprietario della directory home.

Creazione di un file di prova

Per creare un file si utilizza il comando touch. Se non esiste un file con il nome specificato, il comando touch ne crea uno nuovo. Se invece esiste già un file con lo stesso nome, touch aggiorna l'ora dell'ultimo accesso a quel file.

$ touch filetemp
$ 

Elencazione dei file (ls)

Eseguire ora il comando ls per verificare la creazione del file:

$ ls filetemp
filetemp 

Inserendo il comando ls da solo, vengono elencati tutti i file contenuti nella directory corrente. Digitando ls insieme al nome di un file, viene mostrato solo il file che corrisponde al nome inserito.

Per maggiori informazioni sul comando ls(1), vedere man Pages(1): User Commands.

Copia dei file (cp)

Usare il comando cp per copiare filetemp in un file chiamato filecopia:

$ cp filetemp filecopia
$ 

Provare ora a visualizzare entrambi i file. Si noti che entrambi i nomi iniziano con la stringa "file". Questa condizione permette di utilizzare il carattere speciale asterisco (*), un simbolo che può sostituire qualsiasi carattere o sequenza di caratteri. Digitando ls file*, il sistema visualizzerà sia filetemp che filecopia (e qualsiasi altro file della stessa directory che inizi con file):

$ ls file*
filecopia    filetemp

Il nome filecopia compare per primo perché i file vengono elencati in ordine alfabetico. (Le lettere maiuscole e i numeri precedono le lettere minuscole.)

Per maggiori informazioni sul comando cp(1), vedere man Pages(1): User Commands.

Spostamento e cambiamento di nome ai file (mv)

Il comando mv permette sia di spostare che di rinominare un file. In questo esempio, il comando mv viene utilizzato per rinominare filetemp in filevuoto:

$ mv filetemp filevuoto
$ 

Visualizzare nuovamente i due file per verificare la modifica:

$ ls file*
filecopia    filevuoto

Come si può osservare, filetemp è stato sostituito da filevuoto.

Per maggiori informazioni sul comando mv(1), vedere man Pages(1): User Commands.

Cancellazione dei file (rm)

A questo punto, utilizzare il comando rm per cancellare filecopia; verificare quindi il risultato dell'operazione con il comando ls:

$ rm filecopia
$ ls file*
filevuoto


Avvertenza - Avvertenza -

Un file cancellato non può più essere recuperato, a meno che non ne esista una copia di backup. Fare perciò molta attenzione nell'uso del comando rm, soprattutto se associato al carattere speciale "*". I file cancellati con rm non possono essere in alcun modo recuperati.


Per maggiori informazioni sul comando rm(1), vedere man Pages(1): User Commands.

Visualizzazione del contenuto di un file (more, cat)

Il comando more permette di visualizzare il contenuto di un file. Per utilizzarlo, digitare more seguito dal nome del file che si desidera visualizzare. Il contenuto del file scorrerà lungo lo schermo. Se il file è più lungo di una videata, compare l'indicazione:

--Continua--(nn%)

dove nn è la percentuale del file visualizzata fino a quel punto.

Anche il comando cat permette di visualizzare il contenuto di un file, ma in questo caso l'intero contenuto scorre sullo schermo in un'unica passata, senza pause tra una videata e l'altra. Il comando cat viene usato in genere per unire due o più file in un unico file più grande, come nell'esempio seguente:

$ cat file1 file2 file3 > fileunico
$ ls file*
file1
file2
file3
fileunico
$

Per maggiori informazioni sui comandi more(1) o cat(1), vedere man Pages(1): User Commands.

Identificazione del tipo di file (file)

Alcuni file, tra cui i file binari e gli eseguibili, non possono essere né stampati né visualizzati sullo schermo. Il comando file può essere d'aiuto per identificare la natura di un determinato file.

In questo esempio, il comando file viene utilizzato per determinare la natura di filecopia:

$ file filecopia
filecopia:    testo ascii

Directory e gerarchie

Finora è stato spiegato come elencare, copiare, rinominare e cancellare i file. A questo punto si possono esaminare questioni più ampie. Ad esempio, dove sono situati i file? In questo paragrafo viene descritta la struttura gerarchica delle directory. Si consiglia di leggere attentamente la parte descrittiva e quindi provare ad eseguire gli esempi illustrati nei paragrafi successivi.

Struttura gerarchica delle directory

I file sono raggruppati in directory, che a loro volta sono organizzate in una struttura gerarchica. Al livello più alto della gerarchia si trova la directory "radice" o "root", rappresentata da una barra "/".

Come illustrato nella figura Figura 3-1, ogni directory del file system può contenere a sua volta molte directory. Per convenzione, i diversi livelli delle directory vengono separati con una barra /. Si osservi ad esempio che la directory root (/) contiene, tra le altre, le sottodirectory /usr, /bin, /home e /lib. La sottodirectory /home contiene a sua volta utente1, utente2 e utente3.

Per specificare una directory (o un file al suo interno) occorre indicare i nomi delle directory in cui essa è contenuta. Questo tipo di indicazione viene detta percorso. Ad esempio, il percorso della directory utente3 che compare nella figura è /home/utente3.

Figura 3-1 La struttura gerarchica del file system

Graphic

Tutte le sottodirectory e i file contenuti in una stessa directory devono avere un nome unico, che li identifichi in modo esclusivo. È invece possibile che due o più file contenuti in directory diverse abbiano lo stesso nome. Ad esempio, la directory /usr contiene la sottodirectory /usr/lib. Tra /usr/lib e /lib non vi sono conflitti in quanto i percorsi sono diversi.

I percorsi dei file hanno esattamente la stessa struttura dei percorsi delle directory. Il percorso di un file descrive la sua collocazione nella gerarchia del file system. Ad esempio, se la directory /home/utente2 contiene un file di nome relazione5, il percorso del file sarà /home/utente2/relazione5. Questo percorso indica che il file relazione5 si trova nella directory utente2, la quale è contenuta nella directory home, la quale è contenuta a sua volta nella directory root (/).

Le directory possono contenere solo sottodirectory, solo file o entrambi.

Visualizzazione della directory corrente (pwd)

Il comando pwd visualizza la posizione attuale dell'utente nella gerarchia del file system:

$ pwd
/home/utente1

L'esempio precedente ha valore puramente indicativo, in quanto l'output del comando dipende dalla struttura delle directory del sistema. La posizione corrente nella gerarchia del file system viene detta directory corrente.

La directory home

Ogni utente dispone di una propria directory home. Aprendo una Finestra di comando o una Shell nell'ambiente OpenWindows, la posizione iniziale è sempre la directory home. Questa directory viene predisposta dall'amministratore del sistema al momento della creazione del profilo utente.

Spostamento in un'altra directory (cd)

Il comando cd permette di spostarsi in un'altra directory della gerarchia del file system:

$ cd /usr/lib
$ pwd
/usr/lib

Digitato senza argomenti, il comando cd riporta l'utente alla sua directory home. Se ad esempio la directory home è /home/utente1, il comando ha l'effetto seguente:

$ cd
$ pwd
/home/utente1

Nelle C shell, si può utilizzare il carattere tilde (~) come abbreviazione per la directory home. Ad esempio, per spostarsi nella sottodirectory musica sotto la propria directory home si potrà digitare:

esempio% cd ~/musica

Il tilde può essere utilizzato anche per specificare la directory home di un altro utente. Ad esempio, digitando:

esempio% cd ~nomeutente

dove nomeutente è il nome di login di un altro utente, ci si sposterà nella directory home di quell'utente.


Nota -

Se si utilizza una Bourne shell, il carattere ~ non ha lo stesso effetto.


Se si utilizza la Bourne shell, è possibile che l'amministratore di sistema abbia configurato la workstation in modo che il comando $home specifichi la directory home dell'utente. In questo caso, digitando:

$ $home/musica

ci si sposterà nella sottodirectory musica della propria directory home. Analogamente, digitando:

$ $homenomeutente

dove nomeutente rappresenta il nome di login di un altro utente, ci si sposterà nella directory home dell'utente specificato.

La directory immediatamente "sopra" una sottodirectory viene detta directory di livello superiore. Nell'esempio precedente, /home è la directory di livello superiore rispetto a /home/utente1. Il livello superiore viene indicato con il simbolo .. ("punto-punto"). Il comando cd .. produce perciò uno spostamento nella directory di livello superiore, come illustrato nell'esempio seguente:

$ pwd
/home/utente1
$ cd ..
$ pwd
/home

Se la directory corrente è /home/utente1 e si desidera operare su un file contenuto in /home/utente2, è possibile utilizzare il comando seguente:

$ pwd
/home/utente1
$ cd ../utente2
$ pwd
/home/utente2

Il percorso ../utente2 ordina al sistema di cercare utente2 nella directory di livello superiore. L'uso di questo comando abbreviato permette di non scrivere l'intero percorso /home/utente2.

Creazione di una directory (mkdir)

La creazione di una nuova directory è un'operazione molto semplice. È sufficiente digitare il comando mkdir seguito dal nome della nuova directory:

$ mkdir fiori
$ cd fiori
$ mkdir primule
$ cd primule
$ pwd
/home/utente2/fiori/primule

Percorso relativo

Il percorso completo di una directory o di un file inizia con una barra (/) e descrive l'intera struttura della directory tra il file o la directory specificata e la directory radice. In molti casi è tuttavia possibile utilizzare un percorso più breve che indichi la posizione relativa del file o della directory rispetto alla directory di lavoro corrente.

Per spostarsi in una sottodirectory della directory corrente è sufficiente indicare il nome della directory di destinazione senza specificarne il percorso. Nell'esempio precedente, il comando cd fiori utilizza il percorso relativo della directory di destinazione. Il suo percorso completo, supponendo che la directory corrente sia /home/utente2, sarebbe infatti /home/utente2/fiori.

Provare a creare diverse sottodirectory e a spostarsi dall'una all'altra. Usare sia i percorsi completi che i percorsi relativi e verificare di volta in volta la posizione corrente con il comando pwd.

Spostamento e cambiamento di nome alle directory

Per cambiare nome a una directory, si esegue un comando che "sposta" la directory originale in un'altra di nome diverso. Il comando da utilizzare è mv:

$ pwd
/home/utente2/fiori
$ ls
primule
$ mv primule viole
$ ls
viole

Il comando mv permette anche di spostare una directory all'interno di un'altra:

$ pwd
/home/utente2/fiori
$ ls
viole
$ mv viole ../fiori2
$ ls ../fiori2
viole

In questo esempio, la directory viole viene spostata da fiori a fiori2 utilizzando il comando mv.

Copia di una directory

Il comando cp -r permette di copiare un'intera directory e il suo contenuto:

$ cp -r fiori fiori3
$

Questo comando copia tutti i file e le sottodirectory contenute nella directory fiori in una nuova directory fiori3. Questa operazione viene detta copia ricorsiva, e viene specificata con l'opzione -r. Se si cerca di copiare una directory senza usare questa opzione viene visualizzato un messaggio di errore.

Cancellazione di una directory (rmdir)

Per cancellare una directory vuota, usare il comando rmdir come segue:

$ rmdir fiori3
$ 

Se la directory specificata contiene file o sottodirectory, il comando rmdir non la cancella.

Per cancellare una directory e tutto il suo contenuto, comprese eventuali sottodirectory e i rispettivi file, occorrerà utilizzare rm -r (aggiungendo cioè l'opzione ricorsiva -r). Digitare quanto segue:

$ rm -r fiori3
$


Avvertenza - Avvertenza -

Le directory cancellate con il comando rmdir non possono essere recuperate, possono essere recuperate le directory cancellate con rm -r.


Visualizzazione delle differenze tra due file (diff)

Accade spesso che diverse persone che hanno accesso ad un file ne effettuino una copia e la modifichino. Il comando diff permette di identificare le differenze esistenti tra due versioni di un file ASCII. Il comando:

$ diff primo_file secondo_file

confronta riga per riga primo_file e secondo_file cercando eventuali differenze. Quando il programma individua una o più righe diverse, esso determina se la differenza riscontrata è il risultato di un'aggiunta, di una cancellazione o di una modifica, e individua il numero di righe interessate. L'output del comando indica i numeri delle righe che presentano differenze in ciascuno dei file, seguito dalle parti di testo che risultano diverse.

Se la differenza è il risultato di un'aggiunta, diff visualizza una riga nella forma seguente:

p[,p] a s[,s]

in cui p è il numero di una riga di primo_file e s è il numero di una riga di secondo_file.

Se la differenza è il risultato di una cancellazione, diff utilizza una d al posto della a; se è il risultato di una modifica, diff utilizza una c.

Le righe diverse dei due file seguono immediatamente i numeri di riga. Il testo di primo_file è preceduto da un simbolo di minore (<), mentre il testo di secondo_file è preceduto da un simbolo di maggiore (>).

Questo esempio mostra due file e l'output ottenuto con il comando diff:

$ cat agenda.7.15
Settimana del 7/15

Giorno:  Ora:        Azione:                 Note:

M       10:00        Team hardware        ogni due settimane
M       1:30         Team software
G       3:00         Team documentazione
V       1:00         Colloquio
$ cat agenda.7.22
Settimana del 7/22

Giorno:  Ora:        Azione:                 Note:

L       8:30         Riunione staff             tutto il giorno
M       10:00        Team hardware         ogni due settimane
M       1:30         Team software
G       3:00         Team documentazione
$ diff agenda.7.15 agenda.7.22
1c1
< Settimana del 7/15
---
> Settimana del 7/22
4a5
> L       8:30         Riunione staff             tutto il giorno
8d8
< V       1:00         Colloquio

Se i file confrontati sono identici, il comando diff non genera alcun output.

Il comando diff(1) dispone di molte altre opzioni oltre a quelle descritte. Per maggiori informazioni, vedere man Pages(1): User Commands.

Confronto fra tre file (diff3)

Per individuare le differenze fra tre versioni di un file, usare il comando diff3 come segue:

$ diff3 file1 file2 file3

diff3 confronta tre versioni di un file e visualizza le parti di testo differenti marcandole con i seguenti codici:

==== tutti i file sono diversi

====1 file1 è diverso

====2 file2 è diverso

====3 file3 è diverso

Uso di bdiff su file di grandi dimensioni

Se occorre confrontare file di grandi dimensioni, è consigliabile usare il comando bdiff anziché diff. La sintassi dei due comandi è la stessa:

$ bdiff primo_file secondo_file

Si consiglia di usare bdiff al posto di diff per file più lunghi di 3500 righe.

Ricerca di un file (find)

Il comando find ricerca i file che soddisfano le condizioni specificate dall'utente a partire dalla directory indicata. Ad esempio, è possibile cercare i file il cui nome contenga una determinata stringa o che siano stati modificati in un arco di tempo stabilito.

A differenza di molti comandi, le opzioni di find sono formate da più caratteri, e il nome della directory di partenza deve precedere le opzioni sulla riga di comando:

$ find directory opzioni

dove directory è il nome della directory di partenza e opzioni sono le opzioni del comando find.

Ogni opzione definisce un criterio per la selezione del file. Il programma seleziona solo i file che soddisfano tutti i criteri specificati. Aumentando il numero delle opzioni si restringe perciò il campo dei file corrispondenti. L'opzione -print indica che il risultato della ricerca deve essere visualizzato sullo schermo. (Come verrà descritto più avanti, il comando find può essere usato anche per l'esecuzione di comandi; in questo caso può essere superfluo visualizzare i file selezionati.)

L'opzione -name nomefile ordina a find di selezionare i file che corrispondono al nomefile specificato. In questo caso nomefile rappresenta l'ultimo componente del percorso del file. Ad esempio, l'ultimo componente del percorso /usr/lib/calendario è calendario. Questa parte del percorso viene spesso definita nome base del file.

Ad esempio, per ricercare tutti i file della directory corrente e delle relative sottodirectory il cui nome termina in s, digitare quanto segue:

$ find . -name '*s' -print
./alias
./alias/files
./alias/files/gks
./src/gks
$

Qui di seguito sono descritte alcune delle opzioni più comuni:

-name nomefile

Seleziona i file il cui ultimo componente corrisponde a nomefile. Per indicare un modello di ricerca anziché il nome esatto del file, inserire nomefile fra virgolette singole.

-user id_utente

Seleziona i file di proprietà di id_utente. id_utente può essere un nome di login o il numero dell'ID utente.

-group gruppo

Seleziona i file di proprietà del gruppo.

-m time n

Seleziona i file che sono stati modificati negli ultimi n giorni.

-newer file_di_riferimento

Seleziona i file modificati più recentemente del file_di_riferimento.

È anche possibile specificare un ordine di precedenza, inserendo le opzioni tra parentesi precedute dal carattere di escape "\" (ad esempio, \(opzioni\) ). All'interno delle parentesi è possibile inserire tra le opzioni il flag -o, per indicare a find di selezionare i file che corrispondono a ogni singolo criterio specificato anziché solo i file che soddisfano entrambi i criteri:

$ find . \( -name AAA -o -name BBB \) -print
./AAA
./BBB

Si può anche invertire il senso di un'opzione facendola precedere da un punto esclamativo (a sua volta preceduto da un carattere di escape). In questo modo find seleziona i file che non corrispondono all'opzione specificata:

$ find . \!-name BBB -print
./AAA

È inoltre possibile utilizzare find per eseguire sui file selezionati una determinata operazione, usando l'opzione

-exec comando '{}' \;

Questa opzione termina con un punto e virgola preceduto dal carattere di escape (\;). Le parentesi graffe fra virgolette vengono sostituite dai nomi dei file selezionati da find.

Ad esempio, si può usare find per cancellare automaticamente i file temporanei. Se si utilizza un criterio coerente per denominare i file temporanei, si potrà usare find per cercarli e cancellarli ovunque si trovino. Ad esempio, se i file temporanei vengono chiamati prova o esempio, il comando seguente permetterà di ricercarli e cancellarli automaticamente:

$ find . \( -name prova -o -name esempio \) -exec rm '{}' \;

Per maggiori informazioni su find(1), vedere man Pages(1): User Commands.

Sicurezza di file e directory


Nota -

Leggere questo paragrafo con attenzione. Una chiara comprensione delle autorizzazioni dei file è importante per molte operazioni quotidiane.


Le autorizzazioni dei file sono un metodo per proteggere file e directory dalla lettura e dalla scrittura da parte di utenti non autorizzati. In alcuni casi può essere opportuno autorizzare altri utenti a leggere determinati file ma non a modificarli. In altri casi si possono avere sul proprio sistema file eseguibili (programmi) da condividere. Le autorizzazioni consentono di controllare il tipo di accesso degli altri utenti ai propri file.

I tipi di autorizzazioni disponibili per file e directory sono i seguenti:

Le autorizzazioni possono essere impostare per tre categorie di utenti:

Visualizzazione delle autorizzazioni e dello stato (ls -l)

In precedenza è stato descritto l'uso del comando ls per l'elencazione dei file. Abbinando al comando ls l'opzione -l, è possibile ottenere un elenco dei file in formato lungo. I file e le directory vengono elencati in ordine alfabetico. La Figura 3-2 illustra questo metodo di visualizzazione:

Figura 3-2 Visualizzazione delle autorizzazioni e dello stato di file e directory

Graphic

Il primo carattere della riga indica il tipo di file. Un trattino (-) indica un file, una d una directory, mentre altri caratteri possono indicare altri tipi di file speciali.

I nove caratteri successivi indicano le autorizzazioni del file o della directory. La sequenza è formata da tre gruppi di tre caratteri ciascuno, indicanti rispettivamente le autorizzazioni del proprietario, del gruppo e degli altri utenti. Le autorizzazioni di filevuoto, rw-r--r--, indicano che il proprietario può leggere e scrivere il file, il gruppo e gli altri utenti lo possono leggere mentre nessuno lo può eseguire. Le autorizzazioni della directory fiori2, rwxr-xr-x, indicano che tutti gli utenti possiedono l'autorizzazione in lettura ed esecuzione sulla directory, mentre solo il proprietario ha l'autorizzazione in scrittura.

Oltre alle autorizzazioni dei file, l'elenco visualizzato contiene le seguenti informazioni:

Spostarsi nella propria directory home con il comando cd e provare ad eseguire il comando ls -l. (Il risultato sarà naturalmente diverso da quello illustrato nell'esempio.)

Provare ora a digitare il comando seguente:

$ ls -l nomedir

dove nomedir è il nome di una directory effettivamente presente nel file system. Indicando il nome di una directory, il comando ls -l visualizza le informazioni relative a tutti i file e directory contenuti nella directory specificata.

Elencazione dei file "nascosti" (ls -a)

Alcuni tipi di file non vengono elencati utilizzando il semplice comando ls. I nomi di questi file iniziano con il carattere . ("punto"), come ad esempio .cshrc, .login e .profile. Per elencare anche i "file punto", usare il comando ls -a:

$ ls -a
.
..
.cshrc
.login
.profile
filevuoto

Si noti che i file che iniziano con il carattere . sono elencati prima degli altri. L'elenco illustrato contiene due file speciali: il primo è il file ., che rappresenta il riferimento alla directory corrente, il secondo è il file .., che rappresenta il riferimento alla directory di livello superiore.

In genere, i file che iniziano con il carattere . vengono usati dai programmi di utilità del sistema e non vengono modificati dall'utente (a parte alcune eccezioni).

Modifica delle autorizzazioni (chmod)

Il comando chmod permette di cambiare le autorizzazioni di un file o di una directory. Questa operazione può essere eseguita solo dal proprietario del file o della directory o da un utente root. La sintassi generale del comando chmod è la seguente:

chmod  autorizzazioni nome

dove autorizzazioni indica le autorizzazioni da modificare e nome è il nome del file o della directory su cui si desidera eseguire l'operazione.

Le autorizzazioni possono essere specificate in vari modi. Qui di seguito viene illustrata una delle forme di indicazione più semplici:

  1. Usare una o più lettere per indicare gli utenti interessati:

    • u (user - il proprietario)

  2. g (group - il gruppo)

  3. o (other - altri utenti)

  4. a (all - tutte le categorie)

  5. Indicare se le autorizzazioni devono essere aggiunte (+) o eliminate (-).

  6. Usare una o più lettere per indicare le autorizzazioni di interesse:

    • r (read - lettura)

  7. w (write - scrittura)

  8. x (execute - esecuzione)

Nell'esempio seguente, viene aggiunta l'autorizzazione di scrittura alla directory viole per gli utenti appartenenti allo stesso gruppo del proprietario (autorizzazioni diventa perciò g+w e nome viene sostituito con viole):

$ ls -l viole
drwxr-xr-x  3 utente2           1024 feb 10 11:15 viole
$ chmod g+w viole
$ ls -l viole
drwxrwxr-x  3 utente2           1024 feb 10 11:15 viole
$

Come si può osservare, per effetto del comando il trattino (-) nella sequenza di caratteri relativa alle autorizzazioni del gruppo è diventato una w.

Per eliminare dalla stessa directory le autorizzazioni di lettura ed esecuzione degli utenti esterni al gruppo (autorizzazioni viene sostituito in questo caso da o-rx), digitare il seguente comando:

$ ls -l viole
drwxrwxr-x  3 utente2           1024 feb 10 11:15 viole
$ chmod o-rx viole
$ ls -l viole
drwxrwx---  3 utente2           1024 feb 10 11:15 viole
$

In seguito al comando, la r (lettura) e la x (esecuzione) del gruppo di caratteri relativi alle autorizzazioni degli altri utenti sono state sostituite da trattini (-).

Quando si crea un nuovo file o una nuova directory, il sistema assegna automaticamente le autorizzazioni di default.

In generale, le autorizzazioni di default per i nuovi file sono le seguenti:

-rw-r--r--

Per le nuove directory sono invece le seguenti:

drwxr-xr-x

Perciò, per creare un nuovo file petunia che sia eseguibile dal proprietario (utente2) occorrerà procedere come segue:

$ ls -l petunia
-rw-r--r--  3 utente2           1024 feb 10 12:27 petunia
$ chmod u+x petunia
$ ls -l petunia
-rwxr--r--  3 utente2           1024 feb 10 12:27 petunia
$

Per modificare con un solo comando le autorizzazioni di tutte le categorie di utenti, usare l'opzione a. Per creare ad esempio un nuovo file rosa che sia eseguibile da tutti gli utenti, procedere come segue:

$ ls -l rosa
-rw-r--r--  3 utente2           1024 feb 10 11:31 rosa
$ chmod a+x rosa
$ ls -l rosa
-rwxr-xr-x  3 utente2           1024 feb 10 11:31 rosa
$

In seguito al comando, in tutte le categorie comparirà la lettera x.

È anche possibile cambiare le autorizzazioni di più file e directory utilizzando il carattere speciale *. Ad esempio, per cambiare le autorizzazioni di tutti i file della directory corrente fiori in modo che solo il proprietario vi abbia accesso di scrittura, procedere come segue:

$ pwd
/home/utente2/fiori
$ ls -l
-rwxrwxrwx  3 utente2          21032 feb 12 10:31 giglio
-rwxrwxrwx  3 utente2          12675 feb 08 09:31 mughetto
-rwxrwxrwx  2 utente2             68 feb 10 11:09 narciso
-rwxrwxrwx  1 utente2           1024 feb 14 16:38 rosa
$ chmod go-w *
$ ls -l
-rwxr-xr-x  3 utente2          21032 feb 12 10:31 giglio
-rwxr-xr-x  3 utente2          12675 feb 08 09:31 mughetto
-rwxr-xr-x  2 utente2             68 feb 10 11:09 narciso
-rwxr-xr-x  1 utente2           1024 feb 14 16:38 rosa
$

Nell'esempio, l'uso del comando pwd permette di verificare che la directory in cui viene eseguita l'operazione chmod sia la directory corrente.

Impostazione di autorizzazioni assolute

Finora si è parlato del comando chmod per la modifica delle autorizzazioni in modo relativo rispetto alle impostazioni correnti. Il comando chmod prevede tuttavia un'altra forma di utilizzo, in cui vengono impiegati codici numerici per specificare i diversi tipi di autorizzazioni. Utilizzato in questa forma, chmod permette di impostare le autorizzazioni di un file o di una directory in modo assoluto.

La sintassi di chmod per l'impostazione di autorizzazioni assolute è la seguente:

chmod codnum nome

dove codnum è il codice numerico e nome è il nome del file o della directory su cui si desidera eseguire l'operazione.

Il codice numerico completo è costituito da tre cifre. Ogni cifra viene utilizzata per una delle tre categorie di utenti: proprietario, gruppo e altri. Ad esempio, il comando seguente imposta le autorizzazioni assolute di lettura, scrittura ed esecuzione per il proprietario e per il gruppo e la sola autorizzazione di esecuzione per gli altri utenti:

$ chmod 771 rosa

La Tabella 3-1 illustra la correlazione tra le autorizzazioni descritte per il file rosa e il codice numerico 771.

Tabella 3-1 Autorizzazioni del file rosa

Autorizzazione 

Proprietario 

Gruppo 

Altri 

Lettura 

Scrittura 

Esecuzione 

Totale 

Ogni colonna della Tabella 3-1 rappresenta una delle categorie di utenti: proprietario, gruppo e altri. Per impostare le autorizzazioni in lettura occorre aggiungere il codice 4 alla colonna appropriata; per impostare le autorizzazioni in scrittura occorre aggiungere un 2, mentre per le autorizzazioni di esecuzione occorre aggiungere un 1. Il totale delle tre colonne indicato nell'ultima riga della tabella rappresenta il codice numerico completo.

Qui di seguito è illustrato un altro esempio dell'uso di questo metodo per impostare le autorizzazioni assolute, con l'aggiunta del comando ls -l per evidenziare il risultato ottenuto:

$ ls -l mughetto
-rw-r--r--  3 utente2           1024 feb 10 11:46 mughetto
$ chmod 755 mughetto
$ ls -l mughetto
-rwxr-xr-x  3 utente2           1024 feb 10 11:48 mughetto
$

Le autorizzazioni del file mughetto sono state impostate in modo che il proprietario possa leggere, scrivere ed eseguire il file, e in modo che i membri del gruppo e gli altri utenti possano leggerlo ed eseguirlo. La Tabella 3-2 illustra nei dettagli la composizione del codice numerico relativo alle autorizzazioni del file mughetto.

Tabella 3-2 Autorizzazioni del file mughetto

Autorizzazione 

Proprietario 

Gruppo 

Altri 

Lettura 

Scrittura 

Esecuzione 

Totale 

Per applicare al file ciclamino le autorizzazioni di lettura, scrittura ed esecuzione per tutte le categorie di utenti, il comando da eseguire sarà il seguente:

$ ls -l ciclamino
-rw-r--r--  3 utente2           1024 feb 10 11:51 ciclamino
$ chmod 777 ciclamino
$ ls -l ciclamino
-rwxrwxrwx  3 utente2           1024 feb 10 11:53 ciclamino
$

La Tabella 3-3 illustra la composizione del codice utilizzato per questo esempio.

Tabella 3-3 Autorizzazioni del file ciclamino

Autorizzazione 

Proprietario 

Gruppo 

Altri 

Lettura 

Scrittura 

Esecuzione 

Totale 

Il codice numerico 777 rappresenta il livello massimo di autorizzazioni che è possibile attribuire a un file o a una directory.

Come per la modifica delle autorizzazioni relative, anche nel caso delle autorizzazioni assolute è possibile usare il carattere speciale * per eseguire il comando su tutti i file della directory corrente. Ad esempio, per modificare le autorizzazioni assolute di tutti i file della directory corrente fiori in modo che il proprietario abbia le autorizzazioni di lettura, scrittura ed esecuzione, il gruppo le autorizzazioni di lettura ed esecuzione e gli altri utenti solo l'autorizzazione di esecuzione, inserire il comando seguente:

$ pwd
/home/utente2/fiori
$ ls -l
-rwxrwxrwx  3 utente2          21032 feb 12 10:31 giglio
-rwxrwxrwx  3 utente2          12675 feb 08 09:31 mughetto
-rwxrwxrwx  2 utente2             68 feb 10 11:09 narciso
-rwxrwxrwx  1 utente2           1024 feb 14 16:38 rosa
$ chmod 751 *
$ ls -l
-rwxr-x--x  3 utente2          21032 feb 12 10:31 giglio
-rwxr-x--x  3 utente2          12675 feb 08 09:31 mughetto
-rwxr-x--x  2 utente2             68 feb 10 11:09 narciso
-rwxr-x--x  1 utente2           1024 feb 14 16:38 rosa
$

Nell`esempio viene utilizzato anche il comando pwd per verificare che la directory nella quale si esegue l'operazione sia la directory corrente. Il comando ls -l è inserito solo per illustrare il risultato della modifica delle autorizzazioni. Quando si impostano le autorizzazioni assolute non è necessario conoscere le autorizzazioni correnti.

Per maggiori informazioni sul comando chmod(1), vedere man Pages(1): User Commands.