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.
Il file è l'unità fondamentale del sistema operativo SunOS. Quasi tutti i tipi di dati vengono gestiti come file, tra cui:
Documenti -- File di testo, come lettere o relazioni, sorgenti di programmi o qualsiasi altro tipo di dati che sia possibile scrivere e salvare.
Comandi -- La maggior parte dei comandi sono file eseguibili, vale a dire file che è possibile eseguire per avviare un determinato programma. Un esempio di un file eseguibile è il comando date esaminato al capitolo precedente, in quanto esegue un programma che restituisce la data corrente.
Dispositivi -- Tutti i dispositivi come terminali, stampanti o unità disco vengono gestiti come file.
Directory -- Una directory non è altro che un file che contiene altri file.
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.
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 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.
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 $ |
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.
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.
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.
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 |
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.
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.
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 |
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.
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.
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.
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.
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.
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.
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.
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 |
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.
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.
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.
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 $ |
Le directory cancellate con il comando rmdir non possono essere recuperate, né possono essere recuperate le directory cancellate con rm -r.
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:
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.
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
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.
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.
Seleziona i file di proprietà di id_utente. id_utente può essere un nome di login o il numero dell'ID utente.
Seleziona i file di proprietà del gruppo.
Seleziona i file che sono stati modificati negli ultimi n giorni.
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.
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:
r - autorizzazione di lettura. È necessaria per esaminare e copiare un file o per elencare il contenuto di una directory.
w - autorizzazione di scrittura. È necessaria per modificare, cancellare o rinominare un file, o per aggiungere o eliminare un file da una directory.
x - autorizzazione di esecuzione. È necessaria per utilizzare un file eseguibile, ad esempio un programma, o per accedere a una directory.
Le autorizzazioni possono essere impostare per tre categorie di utenti:
Gruppo - altri utenti appartenenti allo stesso gruppo dell'utente (ad esempio tutti gli utenti di uno stesso reparto). I gruppi vengono creati dall'amministratore del sistema.
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:
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:
Numero dei collegamenti del file o della directory
Nome del proprietario (utente2 in questo caso)
Data e ora dell'ultimo aggiornamento del file o della directory
Nome del file o della directory
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.
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).
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:
Usare una o più lettere per indicare gli utenti interessati:
u (user - il proprietario)
g (group - il gruppo)
o (other - altri utenti)
a (all - tutte le categorie)
Indicare se le autorizzazioni devono essere aggiunte (+) o eliminate (-).
Usare una o più lettere per indicare le autorizzazioni di interesse:
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:
Nell'esempio, l'uso del comando pwd permette di verificare che la directory in cui viene eseguita l'operazione chmod sia la directory corrente.
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 |
4 |
4 |
0 |
Scrittura |
2 |
2 |
0 |
Esecuzione |
1 |
1 |
1 |
Totale |
7 |
7 |
1 |
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 |
4 |
4 |
4 |
Scrittura |
2 |
0 |
0 |
Esecuzione |
1 |
1 |
1 |
Totale |
7 |
5 |
5 |
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 |
4 |
4 |
4 |
Scrittura |
2 |
2 |
2 |
Esecuzione |
1 |
1 |
1 |
Totale |
7 |
7 |
7 |
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:
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.