3 581
contributi
S3v (discussione | contributi) (nuova pagina) |
m (verifica, modifiche minori per via di comandi non presenti di default) |
||
(13 versioni intermedie di 4 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Comandi da terminale}} | |||
== Muoversi tra le directory == | == Muoversi tra le directory == | ||
Accedere da terminale ad una directory è semplicissimo, perché il comando è uguale a quello del DOS.<br> | Accedere da terminale ad una directory è semplicissimo, perché il comando è uguale a quello del DOS.<br> | ||
Riga 55: | Riga 56: | ||
mkdir cartella/sottocartella | mkdir cartella/sottocartella | ||
</pre> | </pre> | ||
== Rinominare una directory == | == Rinominare una directory == | ||
Rinominare una cartella da terminale è semplice. Se ad esempio dobbiamo assegnare alla directory “cartella” il nuovo nome “directory”, dobbiamo portarci nella directory genitore e scrivere: | Rinominare una cartella da terminale è semplice. Se ad esempio dobbiamo assegnare alla directory “cartella” il nuovo nome “directory”, dobbiamo portarci nella directory genitore e scrivere: | ||
Riga 60: | Riga 62: | ||
mv cartella/ directory/ | mv cartella/ directory/ | ||
</pre> | </pre> | ||
== Spostare (tagliare ed incollare) una directory == | == Spostare (tagliare ed incollare) una directory == | ||
Spostare (tagliare ed incollare) una directory da terminale richiede un solo semplice comando. Supponiamo di avere la seguente struttura: | Spostare (tagliare ed incollare) una directory da terminale richiede un solo semplice comando. Supponiamo di avere la seguente struttura: | ||
Riga 104: | Riga 107: | ||
</pre> | </pre> | ||
L'opzione <code>-r</code> permette di estendere ricorsivamente l'opzione di copia alle eventuali sottodirectory contenute della directory "sottocartella". | L'opzione <code>-r</code> permette di estendere ricorsivamente l'opzione di copia alle eventuali sottodirectory contenute della directory "sottocartella". | ||
== Cancellare una directory vuota == | == Cancellare una directory vuota == | ||
Volendo cancellare la directory “cartella”, dobbiamo scrivere: | Volendo cancellare la directory “cartella”, dobbiamo scrivere: | ||
Riga 113: | Riga 117: | ||
rmdir: failed to remove `cartella’: La directory non è vuota | rmdir: failed to remove `cartella’: La directory non è vuota | ||
</pre> | </pre> | ||
== Cancellare una directory non vuota == | == Cancellare una directory non vuota == | ||
{{Cautionbox|L'opzione <code>-r</code> è in grado di cancellare ricorsivamente ogni file o sottodirectory di "cartella". Prestate attenzione a come utilizzate il comando perché '''non viene chiesta alcuna conferma''' e rischiate di eliminare file o directory di sistema.}} | |||
Volendo cancellare la directory non vuota “cartella” dovremo digitare: | Volendo cancellare la directory non vuota “cartella” dovremo digitare: | ||
<pre> | <pre> | ||
rm -r cartella | rm -r cartella | ||
</pre> | </pre> | ||
Il comando precedente funziona correttamente anche se si vogliono cancellare directory vuote. | Il comando precedente funziona correttamente anche se si vogliono cancellare directory vuote. | ||
== Visualizzare la struttura di una directory == | == Visualizzare la struttura di una directory == | ||
<code>tree</code> è un comando shell che ha il compito di listare ad albero una data directory. La sintassi del comando è: | <code>tree</code> è un comando shell che ha il compito di listare ad albero una data directory. Bisogna prima installare l'omonimo pacchetto: <pre> | ||
# apt install tree | |||
</pre> | |||
La sintassi del comando è: | |||
<pre> | <pre> | ||
tree [-adfgilnopqrstuxACDFNS][-L level [-R]][-H baseHREF][-T title][-o filename][--nolinks][-P pattern] | tree [ -adfgilnopqrstuxACDFNS ][ -L level [-R] ][ -H baseHREF ][ -T title ][ -o filename ][ --nolinks ][ -P pattern ] | ||
[-I pattern][--inodes][--device][--nore-port][--dirsfirst][--version][--help][directory ...] | [ -I pattern ][ --inodes ][--device ][ --nore-port ][ --dirsfirst ][ --version ][ --help ][ directory ... ] | ||
</pre> | </pre> | ||
Alcune delle numerose opzioni che possiamo passare al comando tree sono: | Alcune delle numerose opzioni che possiamo passare al comando tree sono: | ||
Riga 224: | Riga 233: | ||
L'opzione <code>-f</code> utilizzata fino ad ora serve ad indicare che il campo direttamente successivo sarà il nome dell'archivio. | L'opzione <code>-f</code> utilizzata fino ad ora serve ad indicare che il campo direttamente successivo sarà il nome dell'archivio. | ||
<br/> | <br/> | ||
Tuttavia in questo esempio non abbiamo utilizzato alcun software di compressione per ridurre la dimensione dei dati nell'archivio. Per farlo possiamo scegliere se utilizzare il software di compressione ''gzip'' (opzione -z) | Tuttavia in questo esempio non abbiamo utilizzato alcun software di compressione per ridurre la dimensione dei dati nell'archivio. Per farlo possiamo scegliere se utilizzare il software di compressione ''gzip'' (opzione -z), ''bzip2'' (opzione -j) o ''xz'' (opzione -J):<br/> | ||
<code> | <code> | ||
$ tar czf nuovo.tar.gz dir/ # utilizza gzip | $ tar czf nuovo.tar.gz dir/ # utilizza gzip | ||
Riga 230: | Riga 239: | ||
<code> | <code> | ||
$ tar cjf nuovo.tar.bz2 dir/ # utilizza bzip2 | $ tar cjf nuovo.tar.bz2 dir/ # utilizza bzip2 | ||
</code><br/> | |||
<code> | |||
$ tar cJf nuovo.tar.xz dir/ # utilizza xz | |||
</code><br/> | </code><br/> | ||
Analogamente per decomprimere:<br/> | Analogamente per decomprimere:<br/> | ||
<code> | <code> | ||
$ tar xzf archive.tar.gz<br/> | $ tar xzf archive.tar.gz<br/> | ||
$ tar xjf archive.tar.bz2 | $ tar xjf archive.tar.bz2<br/> | ||
$ tar xJf archive.tar.xz | |||
</code><br/> | </code><br/> | ||
L'estensione dei due file è stata cambiata da ''.tar'' a ''.tar.gz'' e ''.tar. | L'estensione dei due file è stata cambiata da ''.tar'' a ''.tar.gz'', ''.tar.bz2'' e ''.tar.xz'' per indicare chiaramente con quale tipo di algoritmo sono stati compressi i dati. Esistono versioni compatte delle stesse estensioni: ''.tgz'' equivale a ''.tar.gz'', ''.tbz'' equivale a ''.tar.bz2'' e ''.txz'' equivale a ''.tar.xz''. | ||
Si può anche saltare l'algoritmo da usare per la decompressione, usando semplicemente:<br/> | |||
<code>$ tar xf archive.tar.* | |||
</code> | |||
<br/> | <br/> | ||
Nota: l'estensione corretta in realtà non è assolutamente necessaria. Possiamo chiamare tutti gli archivi .tar indipendentemente dalla compressione e questi funzioneranno perfettamente. Tuttavia in questo modo l'utente non ha modo di conoscere a colpo d'occhio l'algoritmo utilizzato. | Nota: l'estensione corretta in realtà non è assolutamente necessaria. Possiamo chiamare tutti gli archivi .tar indipendentemente dalla compressione e questi funzioneranno perfettamente. Tuttavia in questo modo l'utente non ha modo di conoscere a colpo d'occhio l'algoritmo utilizzato. | ||
Riga 244: | Riga 260: | ||
$ tar tzf archive.tar.gz | $ tar tzf archive.tar.gz | ||
</code><br/> | </code><br/> | ||
Nel caso in cui l'archivio non sia stato compresso utilizzando ''gzip'' o '' | Nel caso in cui l'archivio non sia stato compresso utilizzando ''gzip'', ''bzip2'' o ''xz'' è possibile aggiungervi singoli file o intere directory utilizzando la modalità append attivata dall'opzione <code>-r</code>:<br/> | ||
<code> | <code> | ||
$ tar rf archive.tar file dir/ | $ tar rf archive.tar file dir/ | ||
Riga 251: | Riga 267: | ||
=== Esempi === | === Esempi === | ||
* Comprimere tutte le immagini jpg dentro una directory: | * Comprimere tutte le immagini jpg dentro una directory: | ||
<code> | <code> | ||
Riga 398: | Riga 413: | ||
== Creare un collegamento == | == Creare un collegamento == | ||
Un collegamento è un particolare tipo di file che non è altro che un rimando ad un altro file o directory. Per creare un collegamento tra file o directory si deve usare il comando <code>ln</code>. | Un collegamento è un particolare tipo di file che non è altro che un rimando ad un altro file o directory. Per creare un collegamento tra file o directory si deve usare il comando <code>ln</code>, di solito con l'opzione <code>-s</code> per creare link simbolici. | ||
<pre> | <pre> | ||
ln -s <file da collegare> <nome del link> | ln -s <file da collegare> <nome del link> | ||
Riga 404: | Riga 419: | ||
Supponiamo di avere il file testo.txt nella nostra home e di voler creare un collegamento in <code>usr/bin</code> chiamato "mylink.txt". Scriverò: | Supponiamo di avere il file testo.txt nella nostra home e di voler creare un collegamento in <code>usr/bin</code> chiamato "mylink.txt". Scriverò: | ||
<pre> | <pre> | ||
ln -s | ln -s testo.txt mylink.txt | ||
</pre> | </pre> | ||
Su Linux esistono due tipi di collegamenti: Hard link e Symbolic link. | Su Linux esistono due tipi di collegamenti: Hard link e Symbolic link. | ||
=== Hard Link === | === Hard Link === | ||
Sono di fatto una copia di una voce di directory, hanno nomi diversi ma puntano allo stesso inode e quindi condividono esattamente lo stesso dato (oltre agli stessi permessi, data di modifica, owner ecc.). | Sono di fatto una copia di una voce di directory, hanno nomi diversi ma puntano allo stesso inode e quindi condividono esattamente lo stesso dato (oltre agli stessi permessi, data di modifica, owner ecc.). Non c'è modo di distinguere l'originale dal link perché sono la stessa cosa: e per cancellare il file dal file system è necessario eliminare tutti gli hard-link associati allo stesso inode. | ||
Sono permessi soltanto per file regolari, non per directory, e soltanto se i file risiedono sullo stesso file system, se li supporta. Sono supportati da ext2/3/4. | |||
=== SymLink === | === SymLink === | ||
Sono dei piccoli file che contengono un puntamento ad altri file o directory. Questi file hanno i-node autonomo e possono puntare a file di altri file system (sia locali, che di rete). Si possono facilmente visualizzare con un normale ls -l e se viene cancellato o spostato il file a cui puntano rimangono "stale": continuano ad esistere ma puntano a qualcosa che non esiste. | Sono dei piccoli file che contengono un puntamento ad altri file regolari o directory. Questi file hanno i-node autonomo e possono puntare a file di altri file system (sia locali, che di rete). Si possono facilmente visualizzare con un normale ls -l e se viene cancellato o spostato il file a cui puntano rimangono "stale": continuano ad esistere ma puntano a qualcosa che non esiste. | ||
<br/> | <br/> | ||
Un symlink appare come avente tutti i permessi aperti a tutti gli utenti, di fatto è trasparente rispetto a permessi e ownership e riflette quelli del file o directory a cui punta. | Un symlink appare come avente tutti i permessi aperti a tutti gli utenti, di fatto è trasparente rispetto a permessi e ownership e riflette quelli del file o directory a cui punta. | ||
Se il file originale è cancellato, o anche solo spostato, l'esistenza di un link simbolico diviene inutile, non è intercambiabile come per gli hard-link. Infatti mentre l'hard-link punta allo stesso inode, un link simbolico punta al percorso del file originale, e nient'altro. | |||
In genere, per prevenire problemi e salvo si necessiti di conservare una copia dell'inode, è quasi sempre consigliabile ricorrere a link simbolici. | |||
== Cambiare i permessi di lettura, scrittura ed esecuzione == | == Cambiare i permessi di lettura, scrittura ed esecuzione == | ||
Riga 428: | Riga 449: | ||
* leggibile-eseguibile al gruppo | * leggibile-eseguibile al gruppo | ||
* leggibile-eseguibile agli altri utenti | * leggibile-eseguibile agli altri utenti | ||
<br/> | |||
La tabella seguente indica il significato dei singoli valori | |||
{| | |||
|- | |||
! Valore binario (<code>rwx</code>) !! Valore decimale !! Permessi | |||
|- | |||
| 111 || 7 || lettura, scrittura ed esecuzione | |||
|- | |||
| 110 || 6 || lettura e scrittura | |||
|- | |||
| 101 || 5 || lettura ed esecuzione | |||
|- | |||
| 100 || 4 || solo lettura | |||
|- | |||
| 011 || 3 || scrittura ed esecuzione | |||
|- | |||
| 010 || 2 || solo scrittura | |||
|- | |||
| 001 || 1 || solo esecuzione | |||
|- | |||
| 000 || 0 || nessuno | |||
|} | |||
<br/> | |||
Il permesso <code>chmod 755</code> si calcola in questo modo: | Il permesso <code>chmod 755</code> si calcola in questo modo: | ||
<pre> | <pre> | ||
Riga 489: | Riga 533: | ||
chown [opzioni] utente[:gruppo] file... | chown [opzioni] utente[:gruppo] file... | ||
</pre> | </pre> | ||
Per motivi di sicurezza soltanto con [[privilegi di amministrazione]] è possibile cambiare il proprietario di un file, a prescindere che sia o meno uno dei propri. | |||
=== Esempi === | === Esempi === | ||
* Cambiare il proprietario del file <code>prova.txt</code> | * Cambiare il proprietario del file <code>prova.txt</code> | ||
<pre> | <pre> | ||
chown ferdy prova.txt | # chown ferdy prova.txt | ||
</pre> | </pre> | ||
* Cambiare proprietario e gruppo proprietario del file <code>prova.txt</code> | * Cambiare proprietario e gruppo proprietario del file <code>prova.txt</code> | ||
<pre> | <pre> | ||
chown ferdy:gruppo_desiderato prova.txt | # chown ferdy:gruppo_desiderato prova.txt | ||
</pre> | </pre> | ||
* Cambiare ricorsivamente il proprietario di tutti i file della directory <code>prova</code> | * Cambiare ricorsivamente il proprietario di tutti i file della directory <code>prova</code> | ||
<pre> | <pre> | ||
chown -R ferdy prova/ | # chown -R ferdy prova/ | ||
</pre> | </pre> | ||
Riga 513: | Riga 559: | ||
chgrp -R gruppo_voluto prova/ | chgrp -R gruppo_voluto prova/ | ||
</pre> | </pre> | ||
Per motivi di sicurezza, possono cambiare il gruppo di un file soltanto root oppure un utente che è sia proprietario del file sia membro del gruppo scelto. | |||
== Ricerca di file nel sistema == | == Ricerca di file nel sistema == | ||
Riga 518: | Riga 566: | ||
Il motore di ricerca da terminale si chiama <code>locate</code> e possiamo installarlo normalmente digitando: | Il motore di ricerca da terminale si chiama <code>locate</code> e possiamo installarlo normalmente digitando: | ||
<pre> | <pre> | ||
apt | # apt install locate | ||
</pre> | </pre> | ||
Esso fa uso di un database ad aggiornamenti costanti, ma non frequenti, pertanto se volessimo ricercare un file di recente creazione, spostamento o immissione nel sistema dovremo prima lanciare il comando di update per questo database. Da root o con permessi sudoer aggiungendo “sudo” prima della sintassi digitiamo: | Esso fa uso di un database ad aggiornamenti costanti, ma non frequenti, pertanto se volessimo ricercare un file di recente creazione, spostamento o immissione nel sistema dovremo prima lanciare il comando di update per questo database. Da root o con permessi sudoer aggiungendo “sudo” prima della sintassi digitiamo: | ||
<pre> | <pre> | ||
# updatedb | |||
</pre> | </pre> | ||
Attendiamo che l’aggiornamento sia terminato, e poi lanciamo: | Attendiamo che l’aggiornamento sia terminato, e poi lanciamo: | ||
Riga 539: | Riga 587: | ||
<code>Rsync</code> e' un comando (ed un protocollo) che permette la copia di file via rete, ottimizzando i tempi di backup e ripristino dei dati. Non è presente in un'installazione minimale di Debian; occorre pertanto installarlo col comando: | <code>Rsync</code> e' un comando (ed un protocollo) che permette la copia di file via rete, ottimizzando i tempi di backup e ripristino dei dati. Non è presente in un'installazione minimale di Debian; occorre pertanto installarlo col comando: | ||
<pre> | <pre> | ||
# apt | # apt install rsync | ||
</pre> | </pre> | ||
La sintassi del comando è la seguente: | La sintassi del comando è la seguente: | ||
<pre> | <pre> | ||
rsync -av --delete /Directory/Sorgente /Directory/Destinazione | |||
</pre> | </pre> | ||
Le opzioni usate hanno il seguente significato: | Le opzioni usate hanno il seguente significato: | ||
* <code>- | * <code>-av</code>: specifica di copiare i file mantenendo ownership, permessi e in modalità ''directory recursive'' | ||
* <code>--delete</code>: elimina dalla directory di destinazione i file non più presenti nella directory sorgente | * <code>--delete</code>: elimina dalla directory di destinazione i file non più presenti nella directory sorgente | ||
Maggiori informazioni [[Rsync | Maggiori informazioni [[Rsync | qui]]. | ||
[[Categoria:Shell]][[Categoria:Programmi da terminale]] |
contributi