Lo scopo di questo tutorial è quello di consentire a un principiante di familiarizzare con la riga di comando su SHELL BASH. Questo piccolo tutorial vi aiuterà a familiarizzare con la Shell come un software e non come un linguaggio di programmazione. Cercheremo di essere abbastanza brevi in ogni capitolo (spiegazioni concise e chiare), tuttavia questo tutorial può essere piuttosto lungo, quindi l'idea di creare diversi capitoli. Non è necessario passare attraverso il tutorial dall'inizio alla fine. È possibile passare direttamente al capitolo che si desidera.
Cosa è la shell
Per avere una risposta più esatta vedi questo sito SHELL. La shell è un programma che si trova nella directory /bin. Si distinguono più di una shell:
La /bin/sh shell Bourne
La /bin/bash Bourne Again SHell
La /bin/csh C shell
La /bin/ksh Korn shell
La /bin/tcsh shell migliorata
La /bin/zsh/ Z shell
Il resto di questo tutorial riguarda solo la shell bash che è la shell di default per le distribuzioni
GNU/Linux. La shell permette di eseguire i comandi, esplorare il sistema, creare, modificare ed eliminare file, ecc.
Come accedere alla linea di comando
Per accedere alla linea di comando, è possibile utilizzare un terminale (
Xterm, Kterm, Gterm) o
Konsole.
Kterm è un terminale emulatore multilingue basato su Xterm. Le principali differenze tra
kterm e
xterm sono la possibilità di elaborare testo multilingue codificato in ISO2022 e la visualizzazione di un testo colorato (Vedi
man kterm).
ci sono due possibilità:
Utilizzare il menu
Desktop,
Gnome,
Kde, ecc., (questo è il metodo raccomandato).
Utilizzare il menu
avviare un comando. Nella finestra aperta, digita il nome del terminale e convalidare. La finestra
avviare un comando può essere aperta con
ALT +
F2.
Utilizzare le console virtuale (ce ne sono 6).
Le console virtuali
La console virtuale (
tty1 a
tty6) è una schermata nera dove appare un prompt dei comandi, nella forma "
login:". Dall'interfaccia grafica, è possibile accedere ad una console virtuale utilizzando la combinazione di tasti
CTRL +
ALT +
Fn,
n essendo una cifra da
1 a
6. Per esempio per accedere alla console 3 dall'interfaccia grafica premere i tasti
CTRL +
ALT +
F3.
Una volta dentro una console virtuale, la navigazione tra le diverse console virtuale si fa con la combinazione dei tasti
ALT +
Fn,
n essendo una cifra da
1 a
6
Connessione dentro una console virtuale
Al prompt
login:, digitare il login dell'utente, e convalidare premendo
Entra. Si visualizzerà così il prompt
Password:. Digitare la password dell'utente e convalidare. La password non si visualizza sulla schermata per ragioni di sicurezza. Il fatto di non vedere la schermata di ciò che si digita, non deve preoccuparci:
Se la password è valida, il prompt di comandi deve visualizzarsi, con il nome dell'utente, indicando che la connessione è riuscita:
Esempio
Il prompt di comandi della shell dopo la connessione
Il prompt di comandi della shell ha generalmente la forma seguente:
nome@computer ~ $;
nome - rappresenta il login dell'utente connesso;
computer - rappresenta il nome del computer;
~ indica la directory personale
/home/utente;
$ significa che si è connesso come utente.
Se al poste di
$ si visualizzerà il simbolo
#, allora si è connesso come superutente (root). Tieni presente che i sistemi Gnu/Linux utilizzano per convenzione
# per root e
$ per un utente diverso di root. Questo comportamento può essere cambiato modificando la variabile d'ambiente PS1, ma
è fortemente NON raccomandato.
Tornare alla modalità grafica da una console virtuale
Per Tornare alla modalità grafica da una console virtuale, utilizzare la combinazione dei tasti
ALT +
F7.
L'ambiente shell
Dopo la connessione, l'utente è connesso al suo ambiente. Ciò significa che la shell mette a sua disposizione delle variabili d'ambiente, cioè un contenitore memoria in cui sono memorizzati i dati. Per visualizzare il contenuto di una variabile d'ambiente, può essere usato il comando
echo $NOME_VARIABILE. Il nome delle variabili d'ambiente è convenzionalmente in maiuscole, è sensibile alle maiuscole (case sensitive).
Variabili d'ambiente da conoscere
HOME, USER, GROUPS, UID, PWD, SHELL, PATH, HOSTNAME:
HOME, contiene la directory d'utente;
USER, contiene il login d'utente;
PWD (print working directory), contiene la directory corrente;
SHELL, contiene il nome della shell di connessione;
PATH, contiene l'elenco delle directory dove si trovano i comandi che l'utente può eseguire;
HOSTNAME, contiene il nome del computer;
HISTSIZE, contiene la dimensione massima dei comandi eseguiti contenuti nel file cronologia;
PS1, contiene le impostazioni di visualizzazione del prompt.
Esempio di visualizzazione
Il comando
set permette di visualizzare le variabili e il loro contenuto:
File di configurazione
Quando ci si collega ad una console virtuale o si apre un terminale in modalità grafica, la shell utilizza le informazioni contenute in alcuni file (.bashrc, .bash_profile, ecc.):
Il comportamento della shell può essere cambiato modificando questi file. Il file
.bashrc è, per esempio, spiegato nel capitolo sugli
alias. Per quanto riguarda la configurazione della shell bisogna aspettare un po'. Potrai imparare a farlo nel corso del tempo, quindi non essere impaziente.
Perché usare la linea di comando
Molte soluzioni sono date in linea di comando, non perché GNU/Linux non abbia un'interfaccia grafica, ma per alcuni compiti, utilizzare la linea di comando è molto più pratico e più potente del famoso mouse.
Nozioni di comando
Un comando è un file eseguibile. L'esecuzione di un comando può essere differente a seconda il caso. I comandi usati in questo capitolo sono riportati a titolo di esempio, quindi non ostinarsi a capirli se si ha problemi con alcuni di essi. I comandi di base sono descritte più avanti.
Esempi del comando ls
Il comando
ls visualizza il contenuto di una directory. Vedi
man ls per ulteriori informazione. Senza argomento e senza opzione:
Senza argomento e con una o più opzione(i):
Con argomento:
Con argomento con una o più opzione(i):
Dove si trovano i comandi
I comandi che si può eseguire dal terminale si trovano in alcune directory sul sistema. La
variabile PATH (in italiano: "percorso") contiene un elenco di directory che contengono i comandi disponibili. Per accedere a tutti i comandi si deve essere generalmente root.
Per trovare la posizione di un comando, si usa "whereis" (in italiano "dove è"):
O "which" (in italiano "quale - chi - cosa"):
La differenza tra whereis e which:
Whereis: si usa per la ricerca dei file eseguibili, le sorgenti e le pagine di manuale di un comando;
Which: si usa per la ricerca nella variabile PATH dei file eseguibili.
Esempio: ricercare l'esistenza del comando iptables con which
L'utente yogi ricerca se il comando
iptables esiste sul sistema, il risultato è
NO:
Verificando come root:
In realtà il comando
iptables esiste sul sistema in
/sbin. La directory
/sbin non trovandosi nel PATH dell'utente yogi,
which invia un risultato negativo. Brevemente,
whereis è più rassicurante.
La documentazione (le pagine "man")
Accedere alla documentazione in linea di comando:
man
comando;
man N
comando.
N è il numero della pagine man (si vede in alto a destra).
Generalmente nella parte
SEE ALSO di una pagine di "man", si trova un elenco di comandi raccomandati per consultare avendo rapporto diretto con il comando il quale si legge il manuale.
Esempio
Esecuzione del comando
man crontab:
Il prompt sparisce e la pagina man sarà visualizzata:
vedi la parte
SEE ALSO e noti le pagine raccomandate ciò significa che si può digitare:
man 5 crontab
man 8 cron
Premere il tasto
Q per uscire dalla pagina man e tornare al prompt:
Per ottenere una descrizione di un comando, si usa l'opzione "-f":
man -f
comando;
whatis
comando.
Per trovare le voci che contengono nella loro presentazione di una parola chiave, l'opzione "-k":
man -k
comando.
La struttura di una pagina man
COMMAND(1) Manuale dell'utente Linux COMMAND(1)
NAME
comando - sintesi delle azioni del comando
SYNOPSYS
<sintassi completa del comando>
DESCRIPTION
Delle spiegazione concernenti l'esecuzione del comando
OPTIONS
Elenco delle opzioni disponibile e ciò che fanno
FILES
I file usati dal comando
SEE ALSO
comandi_cugini(1), comandi_fratelli(5), etc.
BUGS
I bug esistenti nel comando
AUTHOR
Il nome dell'autore
Qualche regole per capire SYNOPSYS e/o OPZIONI
- Testo isolato, senza [] (parentesi quadre), {} (parentesi graffe) , <> (parentesi uncinate o angolari o chevron), a digitare come tale
- Testo tra parentesi quadre [] è facoltativo
- Testo tra parentesi graffe {} contiene le scelte da fare.
le scelte sono separate da | (pipe) o da virgula ,
comando -{a|b} ciò comando -a o comando -b ma non comando -ab
- Testo tra parentesi uncinate <> deve essere sostituito col testo appropriato.
- Le parentesi (...), usati per i parametri tale i nomi dei file
- Le parentesi quadre [] e Le parentesi uncinate <> possono essere combinati
[<nome_file>] - facoltativo ma se gli usi devi scrivere il nome del file
- Le parentesi quadre [] e Le parentesi graffe {} possono essere combinati
[--opzione={a|b|c}]
Comandi base
cat - Legge (concatena) uno o più file, visualizzazione sull'uscita standard
cd - ChangeDirectory, cambia directory
chmod - CHangeMODe - cambia il mode di accesso (permissioni di accesso) di uno o più file
chown - CHangeOWNer - cambia il proprietario di uno o più file
cp - Copia dei file
crontab - Pianificazione dei compiti (task)
cut - Rimuove le specifiche parti del testo di ogni riga di un file
date - Visualizza la data nel formato richiesto
dd - DevicetoDevice - copia byte per byte tutto o parte del contenuto di un dispositivo (di solito di memorizzazione) ad un altro dispositivo.
df - Visualizza la quantità di spazio libero su tutti i file system
du - DiksUsage - l'uso del disco
echo - Visualizza il testo sull'uscita standard (sullo schermo)
exit - Ferma l'esecuzione della shell
find - Ricerca di file
fsck - FileSystemChecK - verifica l'integrità dei file sistema
grep - Ricerca in uno o più file le righe che corrispondono ad un modello
groupadd - Aggiunge un gruppo di utenti
gunzip - Decomprime i file
gzip - Comprime i file
head - Visualizza le prime righe (di default 10) di un file
help - Visualizza una guida sui comandi interni di bash
kill - Invia un segnale ad un processo
less - Programma di visualizzazione sullo schermo
ln - Creazione di symbol link
ls - Elenca il contenuto delle directory
man - Visualizza le pagine di manuale
mkdir - MaKeDIRectory - Crea una directory
mkfs - MaKeFileSystem - Crea un file sistema
more - Programma di visualizzazione sullo schermo
mount - Monta un sistema di file
mv - Sposta, rinomina un file
ps - Visualizza i processi in esecuzione
pwd - Print name of current/working directory - Visualizza il percorso completo della directory corrente
rm - Elimina un file
rmdir - Remove empty directories - Elimina una cartella vuota
tail - Visualizza le ultime 10 righe di un file
tar - Crea un archivio
su - Substitute User identity o Switch User - Cambia l'identità di un utente
uname - Visualizza delle informazioni sul sistema.
useradd - Aggiunge un utente
whereis - Individua un comando
Eseguire un comando
Ci sono tanti modi per eseguire un comando:
Utilizzando semplicemente il suo nome;
Utilizzando il percorso assoluto;
Utilizzando il percorso relativo;
Utilizzare alias (utile per i comandi lunghi e utilizzati di frequente).
Un comando può essere eseguito in background utilizzando la e commerciale (&) dopo il nome del comando. L'esecuzione di un comando in background permette di restituire la mano alla shell dopo l'esecuzione.
Esempio: Avvio di Firefox dalla linea di comando
Cambiare identità (cambiare utente)
Dalla shell puoi prendere l'identità di un altro utente esistente sul sistema, compreso l'utente root. Puoi utilizzare il comando
su o
su -. Vedi
Utilizzare il comando su per ulteriori informazioni:
La radice
Nei sistemi della famiglia
Unix, la radice rappresenta il top della struttura di directory. È rappresentata dalla
/ (
slash) e significa "
root" (
radice in italiano). Tutte le directory sul sistema sono legati alla radice, direttamente o indirettamente.
Le directory "." e ".."
. indica la directory corrente.
.. indica la directory parente:
Dove sono (posizione nella struttura)
Molto importante, quando si è connessi in una shell, è sapere dove questa si trovi all'interno della struttura. Il comando
pwd (
Print
Working
Directory) visualizza la tua posizione nella struttura:
Il pathname assoluto
Il pathname (percorso) assoluto rappresenta la struttura intera dei file, partendo dalla radice.
Esempio
Il file
b.txt si trova in
/home/user/doc/text. Sei in
/home/user/ascii. Il pathname assoluto a
b.txt è
/home/user/doc/text/b.txt:
Qualunque sia la tua posizione nella struttura utilizzare il percorso assoluto è il modo più sicuro per accedere al file desiderato.
Il pathname relativo
Il pathname relativo per accedere ad un file in riferimento alla posizione attuale nella shell. Usiamo le notazioni
. e/o
..
. permette di scendere nella struttura della directory corrente;
.. permette di salire nella struttura per raggiungere un'altra directory.
Esempio: La directory corrente
Il file
b.txt si trova in
/home/user/doc/text. Siamo in
/home/user. Il percorso relativi verso
b.txt è
./doc/text/b.txt:
Esempio: La directory parente
Il file
b.txt si trova in
/home/user/doc/text. Siamo in
/home/user/ascii. Il percorso relativi verso
b.txt è
../doc/text/b.txt:
La directory
ascii si trova in
/home/yogi quindi scrivendo
.. si fa riferimento alla directory parente
/home/yogi come punto di partenza poi in seguito si va a
doc/text (si noti che non è
/doc/text - che avrà legato
doc della radice
/).
Come si sposta nella struttura
Per spostarsi nella struttura utilizzi il comando
cd (
cd /percorso/verso/directory). Con
pwd puoi verificare la tua nuova posizione nella radice:
Cronologia
I comandi eseguiti sono registrati nella cronologia. La variabile
HISTSIZE contiene il numero massimo di comandi per la registrazione. È possibile accedere alla cronologia con il comando
history:
history [n] | less
l'opzione
n consente di visualizzare i n ultimi comandi (facoltativo);
il comando
less consente di navigare attraverso cronologia;
le frecce alto e basso consente di navigare attraverso cronologia;
!n consente di eseguire il comando corrispondente al numero "
n" nell'elenco senza bisogna digitarlo.
Completamento dei comandi
Digitare un comando in un terminale non è sempre una cosa facile, la shell permette il completamento dei comandi.
Esempio: Comando tail utilizzando il percorso assoluto
Presuppone che devo entrare in
/usr/bin/tail. Il completamento ci permette di realizzare risparmi per quanto riguarda la scrittura del comando, il tempo e la sicurezza della sintassi. Il completamento si ottiene utilizzando il tasto
TAB. Cominciamo con il primo carattere:
Digito
/u e premo
TAB;
La shell completa e scrive
/usr/;
A questo momento aggiungo
b quindi ho
/usr/b;
Premo un'altra volta
TAB e avrò
/usr/bin/;
Aggiungo
ta, ora ho /usr/bin/ta;
Premo 2 volte TAB;
La shell sul mio sistema trova 4 corrispondenze;
tac tack tail tasksel;
Continuo e aggiungo una
i;
Quindi avrò
/usr/bin/tai ;
Premo di nuovo
TAB ;
E ottengo
/usr/bin/tail.
ls /u + TAB + b + TAB + ta + TAB + TAB + i + TAB
È vero che spiegando ci sembra longo, ma è molto rapido in realtà.
Edizione dei file (vi,vim)
L'editor
VI. Molto utile soprattutto quando si rileva un problema con la modalità grafica.
Passo I: Vivamente consigliato
Copia di backup del file originale, utilizzare il comando cp (copia), seguito dal file originale seguito dal file di destinazione (non esiste qui), aggiungiamo
.originale alla fine del nome del file per distinguere la copia di backup dal file:
Passo II: Apertura di un file
Passo III: Modifica di un file
Premere il tasto
i per entrare in modalità inserimento, in basso a sinistra si vedrà
--INSERTION--. Utilizzare le frecce (destra, sinistra, alto, basso) o Pg UP e Pg Down per navigare dentro il file. L'inserimento di caratteri si fa davanti al cursore con uno spostamento a destra del cursore. Il tasto "del" permette di rimuovere il carattere:
Passo IV: Fine della modifica di un file
Premi il tasto
esc quando avrai finito.
--INSERTION-- sparisce:
Passo V: Salvare le modifiche e uscire
Premi il tasto
: (devi vederli in basso a sinistra), scrivi
wq (per
Write
Quit), premere
Enter:
Tornare nel terminale:
Gli alias
L'uso di alias è molto pratico per i lunghi comandi che vengono utilizzati regolarmente. Si evita ridigitarli. L'uso eccessivo alias può fare dimenticare i comandi e le loro opzioni. Gli alias si scrivono nel file
.bashrc nel modo seguente (vedi il capitolo
XXVIII Modifica di un file (vi, vim)):
nome_alias='comando';
Dopo aver modificato
/home/user/.bashrc, digita:
source /home/user/.bashrc
Per rendere effettiva la modifica del file .bashrc. Il comando
alias visualizza gli alias esistenti.
Le ridirezioni e I pipeline
Per prima cosa si inizia con una piccola spiegazione dei descrittori di "input - output":
Tutto ciò che scrivi nella shell si chiama
STDIN (
STandar
DINput).
Tutto ciò che vedi allo schermo può essere:
STDOUT (
STandar
DOUTput);
STDERR (
STandar
DERRor).
Questi descrittori sono numerate come segue:
0: Input standard (STDIN) <---------------- tastiera
Processo 1: output standard (STDOUT) ---------------> schermo
2: output errore (STDERR) ----------------> schermo
Le ridirezioni
Cosa è una ridirezione? È la capacità di dirigere il risultato di un comando utilizzando altre destinazioni che i descrittori standard. Per dirigere l'output dallo schermo ad una file si aggiunge
> nome file al comando eseguito
comando > file - ridirezione in modalità scrittura di un file. Il file viene creato se non esiste. Il suo contenuto verrà sostituito dal nuovo se il file esiste già;
comando >> file - ridirezione in modalità aggiunta ad un file. Il file viene creato se non esiste. Il l'output verrà aggiunto alla fine del file se esiste già;
comando < file - il comando legge il contenuto del file.
Esempi di ridirezione
cat file1 > file2: scrive il contenuto del file1 nel file2. File2 se esiste, il suo contenuto originale verrà eliminato, file2 viene creato se non esiste:
cat file1 >> file2: scrive il contenuto del file1 nel file2 - modalità aggiunta. File2 se esiste, il contenuto del file1 viene aggiunto alla fine del file2 se file2 non esiste, verrà creato:
find / -name 'file.txt' 2>/dev/null: ricerca nella root del file chiamato file.txt, gli errori, invece di essere inviati in
STDERR (
lo schermo) sono inviati in /dev/null (
un genere di cestino senza fine):
find / -name 'file.txt' 2>error.txt: ricerca nella root del file chiamato file.txt, gli errori, invece di essere inviati in
STDERR (
lo schermo) sono inviati nel file error.txt:
I Pipeline
comando1 | comando2 - il risultato di comando1 viene utilizzato da comando2
comando1 & comando2 - i comandi vengono eseguiti contemporaneamente, il comando1 viene eseguito in background
comando1 && comando2 - se il comando1 viene eseguito con successo il comando2 viene eseguito
comando1 || comando2 - il comando2 viene eseguito soltanto se il comando 1 non viene eseguito con successo
comando1;comando2 - i comandi vengono eseguiti in ordine
Esempio di pipeline
Il tubo | (pipe):
In un primo tempo viene eseguito
perl -ne 'print unless /^\s*$/' guideshell per visualizzare il file sullo schermo, le righe vuote essendo eliminate. Invece di visualizzar il risultato sullo schermo si usa | per passarlo al comando
wc che conterà il numero di righe di questo file.
Il parallelismo &:
I 2 comandi vengono eseguiti simultaneamente.
La dipendenza &&
Si noti che nel 1 caso i 2 comandi vengono eseguiti. Tuttavia, nel caso 2. Volontariamente ho fatto un errore di sintassi per il 1° comando. La shell non guarda al 2° comando e si ferma dicendo che
ech non è un comando riconosciuto.
L'alternativa ||
Nel 1° caso, si noti che solo il 1° comando viene eseguito. Nel 2° caso, la shell visualizza un messaggio di errore per il 1° comando, ma esegue comunque il 2°.
Il sequenziamento
echo a viene eseguito: aspetto 1 secondo;
echo b viene eseguito: aspetto 2 secondi;
echo c viene eseguito.
I metacaratteri della Shell
Per facilitare i comandi la shell utilizza i metacaratteri, chiamati anche come caratteri generici o joker:
* - corrisponde a qualsiasi carattere e numero di caratteri
? - corrisponde ad un carattere
[...] - corrisponde ad un carattere tra le parentesi quadre
Con le parentesi quadre si può anche utilizzare gli intervalli.
[0-9] - Tutti caratteri compresi tra 0 e 9
[a-zA-Z] - tutte le lettere sono comprese nell'intervallo (minuscole e maiuscole)
Astuzie
CD: tornare nella directory personale
CD -: tornare nella directory precedente (soltanto se hai eseguito un un cd)
CTRL + I: cancellare il contenuto della schermata
CTRL + C: fermare un comando
CTRL + Z: sospendere (mettere in pausa) un comando
CTRL + T: correggere un errore di battitura invertendo 2 lettere
CTRL + A: andare a capo linea
CTRL + E: andare alla fine della linea
CTRL + S: interrompere l'output nel terminale (nascondere l'input)
CTRL + Q: annullare interruzione dell'output nel terminale (visualizzare l'input)
CTRL + U: cancellare tutto a sinistra del cursore
CTRL + W: cancellare la parola a sinistra del cursore
CTRL + K: cancellare la parola a destra del cursore
CTRL + Y: incollare la battitura precedente
CTRL + D: cancellare il carattere corrente, se la riga è vuota sconnettere
ALT + B: andare avanti, parola per parola nella linea di comando
ALT + F: andare indietro, parola per parola nella linea di comando
ALT + D: cancellare la parola successiva
ALT + T: scambiare la parola corrente con la parola precedente
ALT + C: mette in maiuscola la lettera corrente, tutto il resto della parola corrente in minuscole, poi si sposta la parola successiva
ALT + L: mette in maiuscola dalla lettera corrente fino alla fine parola, poi si sposta la parola successiva
ALT + U: mette in minuscola dalla lettera corrente fino alla fine parola, poi si sposta la parola successiva
ALT + Backspace: cancella la parola precedente (equivalente a Ctrl+w)
Midnight Commander (alias mc)
Midnight Commander - manager in linea di comando e
uno screenshot.
L'utilità consente di visualizzare, creare, modificare, eliminare i file, ecc. Con
mc è possibile modificare i diritti, cambiare proprietario, ricercare, connettersi ad un server ftp, ecc.
mc può essere usato come un browser.
Errore: Command not found
Vedi questo tutorial (Capitolo IV.3)
PATH. Un'altra causa per questo errore: fare attenzione al case sensitive.
Esempio: Ls al posto di ls
Errore: No such file or directory
L'errore si visualizza quando si prova di eseguire un comando su un file che non esiste nel percorso dato. Cerca il file col comando
find per sapere se esiste sul disco e qual'è il suo percorso.
Errore: permesso negato
Si tratta di un problema di permessi di accesso. Leggere questo tutorial I permessi di accesso GNU/Linux.
Suggerimenti di scrittura
La shell è molto impegnativa per la scrittura dei comandi. I caratteri che hanno un senso speciale per la shell devono essere utilizzati con i meccanismi di quoting per ottenere il carattere letterale. Caratteri che hanno un senso speciale per la shell:
Lo spazio bianco
Il punto virgola
;
Lo slash
/
Il backslash
\
Il carattere
| (
pipe)
La e commerciale
&
Il punto
.
L'apostrofo semplici ( ' )
Le doppie virgolette (")
In generale si deve fare attenzione ai caratteri non-alfanumerici.
Sensibile alle maiuscole (case sensitive)
Se il comando è
ls allora
Ls non funzionerà mai. Stessa cosa per i nomi dei file e delle cartelle.
Lo spazio bianco
Prendiamo l'esempio di un file nominato: mio file.txt. Se si digita
ls -l mio file.txt per vedere gli attributi di questo file, non ottieni il risultato voluto. Perché? Perché la shell legge:
visualizzare gli attributi dei file "mio" e "file.txt". Per costringere la shell a visualizzare ciò che vogliamo, scriviamo il comando nei modi seguenti:
ls -l mio\ file.txt - Sintassi ok (il backslash permette di leggere lo spazio bianco come carattere e non come separatore di argomenti del comando);
ls -l 'mio file.txt' - Sintassi ok (gli apostrofi trattano ogni carattere letteralmente);
DOMANDA: Come posso leggere un apostrofo letteralmente tra due apostrofi?
Lo spazio ha anche il ruolo di separare gli argomenti in linea di comando;
Un semplice spazio utilizzato in un posto errato può causare danni al sistema intero.
Esempio: rimozione della radice a causa di un semplice spazio
l'utente root vuole rimuovere una cartella. utilizza il comando
rm con le opzioni
f (force) e
R (ricorsivo). La cartella da cancellare è nominata
da_cancellare e si trova in
/home/yogi/da_cancellare
Il
comando corretto
Il
comando sbagliato (errore battiture) - sistema rimosso:
Spiegazioni:
Si noti che nel 2° caso, ho accidentalmente digitato uno spazio tra
/ e
home. Che cosa è successo? Per la shell col comando rm deve prima rimuovere la root / e poi home/yogi/da_cancellare. Quindi si cancellano tutti i dati sul vostro sistema.
Nota Bene: fare attenzione a tutto quello che si digita nella shell.
Una soluzione per evitare questo è di
utilizzare il completamento dei comandi. Se si digita
/ e poi il tasto
TAB 2 volte, verranno visualizzate diverse scelte sullo schermo. Normalmente sono le directory di root: boot, bin... home... var. Basta aggiungere una
h per
home e di nuovo
TAB 2 volte e così via.
Nota Bene: prendi il tempo per leggere il seguente avviso.
Un altro esempio con lo spazio bianco
Per riconoscere lo spazio come un carattere e non come un separatore di parametri deve essere protetto (mettere un backslash davanti).
touch aa bb per crea un file vuoto nominato
aa bb:
Si noti che il risultato ottenuto non è quello voluto. Voliamo avere un unico file
aa bb e non un file
aa e un file
bb. Perché abbiamo avuto questo? Perché la Shell, quando abbiamo digitato
touch aa bb
, ha capito che deve creare un file aa e un file bb.
Correzione:
touch aa\ bb
Ora qualcuno ti dirà: ma non abbiamo creato un file aa bb ma
aa\ bb. In realtà abbiamo creato
aa bb. Il carattere
\ permette di riconoscere lo spazio come carattere letterale. Il comando
ls -l conferma l'esistenza del file
aa bb. Al posto del backslash puoi utilizzare gli apostrofi
touch 'aa bb'.
Che cosa possiamo imparare da tutto questo? Ogni volta che si desidera utilizzare caratteri non alfanumerici, come
$,
spazio,
\, e così via, come un carattere letterale, allora deve essere preceduto da backslash o messo tra apostrofi.
I comandi lunghi che hanno più di una riga:
Se il comando diventa troppo lungo si può muoversi alla prossima riga utilizzando il carattere:
\.
Eseguire uno script
Eseguire uno script shell.
Nota Bene: l'articolo originale è stato scritto da
lami20j contribuente di
CommentCaMarche.
Foto: © Unsplash.