Introduzione a Unix
Indietro | Capitolo 3 Iniziamo | Avanti

# 3.7 Comandi di gestione dei file

Per creare, copiare, rimuovere file e per modificarne i permessi si possono usare i seguenti comandi.

Tabella 3-3. Comandi di gestione dei file

Comando/Sintassi | Cosa fa
--- | ---
`chgrp [`opzioni`] `gruppo file`` | cambia il gruppo assegnato ad un file
`chmod [`opzioni`] `file`` | cambia i permessi di accesso a file o directory
`chown [`opzioni`] `proprietario file`` | cambia il proprietario di un file; può essere usato solamente dal super-user
`cp [`opzioni`] `file1 file2`` | copia ``file1`` in ``file2``; ``file2`` non dovrebbe già esistere. Questo comando crea o sovrascrive ``file2``
`mv [`opzioni`] `file1 file2`` | muove (rinomina) ``file1`` in ``file2``
`rm [`opzioni`] `file`` | elimina un file o una directory (`-r` rimuove ricorsivamente le directory e il loro contenuto) (`-i` chiede conferma prima di rimuove i file)

Se si ha una certa familiarità con DOS la tabella che segue paragona i suoi simili comandi a quelli Unix in modo tale da fornire un appropriato quadro di riferimento.

Tabella 3-4. Comandi di gestione dei file Unix vs DOS

Comando | Unix | Dos
--- | --- | ---
copia un file | `cp` | `copy`
muove un file | `mv` | `move` (non supportato in tutte le versioni di Dos)
rinomina un file | `mv` | `rename` & `ren`
elimina un file | `rm` | `erase` & `del`
mostra un file a schermo | `cat` | `type`
mostra un file a schermo, una pagina alla volta | `more`, `less`, `pg` | `type /p` (non supportato in tutte le versioni di Dos)

## 3.7.1 cp - copia un file

Il comando cp(1) copia il contenuto di un file in un altro file.

Sintassi

`cp [`opzioni`] `filename1 filename2``

Opzioni generali

`-i` | interattivo (chiede conferma prima di procedere)
`-r` | copia ricorsivamente una directory

Esempi:

    % cp filename1 filename2

Si hanno due copie del file, ognuna con un identico contenuto. Questi file sono completamente indipendenti tra loro e possono essere editati e modificati entrambi quando necessario. Ciascuno di essi ha il proprio inode, i propri blocchi di dati e il proprio elemento nella tabella di directory.

## 3.7.2 mv - sposta un file

Il comando mv(1) rinomina (sposta) un file.

Sintassi

`mv [`opzioni`] `vecchio_file nuovo_file``

Opzioni generali

`-i` | interattivo (chiede conferma prima di procedere)
`-f` | non chiede la conferma quando si sovrascrive un file esistente (ignora `-i`)

Esempi:

    % mv vecchio_file nuovo_file

Il file ``nuovo_file`` sostituisce ``vecchio_file``. In realtà tutto quello che è stato fatto è aver aggiornato l'elemento della tabella di directory per attribuire al file il nuovo nome. Il contenuto del file rimane come era prima della rinominazione.

## 3.7.3 rm - elimina un file

Il comando rm(1) elimina un file.

Sintassi

`rm [`opzioni`] `filename``

Opzioni generali

`-i` | interattivo (chiede conferma prima di procedere)
`-r` | rimuove una directory ricorsivamente, rimuovendo prima i file e le directory sottostanti
`-f` | non chiede conferma prima di procedere (ignora `-i`)

Esempi:

    % rm filename

Visualizzando il contento della directory si vedrà che quel file non esiste più. In realtà tutto quello che è stato fatto è aver rimosso l'elemento dalla tabella di directory e marcato l'inode come “non usato”. Il contenuto del file è ancora sul disco, ma ora il sistema non ha più modo di identificare quei blocchi di dati con il nome del file eliminato. Non c'è un certo comando per “riprendere” un file che è stato eliminato in questo modo. Per questa ragione molti utenti alle prime armi effettuano un alias del comando di eliminazione in `rm -i` dove l'opzione `-i` chiede di confermare prima di rimuovere il file. Simili alias sono generalmente messi nel file `.cshrc` per la shell C (vedere il Capitolo 5).

## 3.7.4 Permessi dei file

Ciascun file e directory ha permessi che stabiliscono chi può leggerlo, scriverlo e/o eseguirlo. Per scoprire i permessi assegnati a un file, può essere usato il comando ls(1) con l'opzione `-l`. Quando si ha la necessità di conoscere il gruppo per il quale i permessi sono stati assegnati si può usare l'opzione `-g` insieme a `ls -l` (solamente BSD).

Quando si usa il comando `ls -lg` su un file (`ls -l` su SysV) l'output sarà mostrato come il seguente:

    -rwxr-x--- user Unixgroup size Month nn hh:mm filename

La zona dedicata ai caratteri e trattini (-rwxr-x---) è la zona che mostra il tipo di file e i permessi del file, come spiegato nella precedente sezione. Quindi la stringa di permessi dell'esempio, -rwxr-x---, permette al proprietario `user` del file di leggerlo, modificarlo ed eseguirlo; gli utenti del gruppo `Unixgroup` del file possono leggerlo ed eseguirlo; gli altri utenti del sistema non possono accedere in alcun modo al file.

## 3.7.5 chmod - cambio dei permessi del file

Il comando per cambiare i permessi ad un elemento (file, directory, ecc.) è chmod(1) (cambio dei modi). La sintassi richiede l'uso del comando con tre cifre (rappresentanti i permessi del proprietario (u), i permessi del gruppo (g) e i permessi degli altri utenti (o)) seguite da un argomento (che può essere un nome di un file o una lista di file e directory). Oppure può essere usato con una rappresentazione simbolica dei permessi, indicando a quale utenza questi vanno applicati.

Ogni tipo di permesso è rappresentato dal proprio numero equivalente:

lettura=4, scrittura=2, esecuzione=1

o da singoli caratteri:

lettura=r, scrittura=w, esecuzione=x

Il permesso 4 o r specifica il permesso di lettura. Se i permessi desiderati sono lettura e scrittura, il 4 (rappresentante la lettura) e il 2 (rappresentante la scrittura) sono addizionati per ottenere il permesso 6. Quindi, un permesso settato a 6 vorrà concedere un permesso di lettura e di scrittura.

Alternativamente si può usare una notazione simbolica che usa un carattere rappresentativo per l'utenza a cui ci si riferisce, uno per il permesso e uno per l'operazione, dove l'operazione può essere:

+ | aggiunge permessi
- | rimuove permessi
= | setta permessi

Quindi per settare i permessi di lettura e di scrittura per il proprietario del file si usa nella notazione simbolica u=rw.

Sintassi

`chmod `nnn` [`lista argomenti`]` | modalità numerica
`chmod [`chi`] `op` [`perm`] [`lista argomenti`]` | modalità simbolica

dove `nnn` sono i tre numeri rappresentanti i permessi del proprietario, del gruppo e degli altri utenti; `chi` può essere u,g,o oppure a (tutti) e `perm` può essere r,w,x. Nella notazione simbolica si può separare la specifica dei permessi con una virgola, come mostrato nell'esempio qui sotto.

Opzioni generali

`-f` | forza (nessun messaggio di errore viene generato se la modifica non ha avuto successo)
`-R` | discesa ricorsiva attraverso la struttura delle directory e cambio dei modi

Esempi:

Se i permessi desiderati per il `file1` sono: proprietario: lettura, scrittura ed esecuzione; gruppo: lettura ed esecuzione; altri: lettura ed esecuzione; il comando da usare è:

`chmod 755 file1` oppure `chmod u=rwx,go=rx file1`

> Nota: Quando si assegnano i permessi a un file per l'utenza gruppo e per l'utenza altri è necessario che il minimo permesso di esecuzione (inteso come permesso di accesso) per la directory nella quale il file è posizionato sia abilitato. Un semplice modo per far questo è posizionarsi nella directory nella quale i permessi devo essere garantiti e digitare:

> `chmod 711 .` oppure `chmod u=rw,+x .` oppure `chmod u=rwx,go=x .`

> dove il punto (.) indica la directory corrente.

## 3.7.6 chown - cambio del proprietario del file

Il proprietario di un file può essere cambiato con il comando chown(8). Su molte versioni Unix questo può essere realizzato solo dal super-user, ad esempio, un utente normale non può attribuire i suoi file ad altri proprietari. chown(8) è usato come qui sotto, dove `#` rappresenta il prompt di shell per il super-user.

Sintassi

`chown [`opzioni`] `utente`[:`gruppo`] `file`` | (SVR4)
`chown [`opzioni`] `utente`[.`gruppo`] `file`` | (BSD)

Opzioni generali

`-R` | discende ricorsivamente attraverso la struttura della directory
`-f` | forza, non riporta errori

Esempi:

    # chown nuovo_proprietario file

## 3.7.7 chgrp - cambio del gruppo del file

Con il comando chgrp(1) tutti possono cambiare il gruppo dei propri file in un altro gruppo di appartenenza.

Sintassi

`chgrp [`opzioni`] `gruppo file``

Opzioni generali

`-R` | discende ricorsivamente attraverso la struttura della directory
`-f` | forza, non riporta errori

Esempi:

    % chgrp nuovo_gruppo file

Indietro | Partenza | Avanti
Navigazione e controllo delle directory | Risali | Comandi di visualizzazione

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.