Nozioni fondamentali su Bash

Completato

Per comprendere Bash, prima è necessario conoscere la sintassi di Bash. Quando si conosce la sintassi, è possibile applicarla a ogni comando di Bash eseguito.

La sintassi completa per un comando di Bash è:

command [options] [arguments]

Bash considera la prima stringa che incontra come comando. Il comando seguente usa il comando ls (per "list") di Bash per visualizzare il contenuto della directory di lavoro corrente:

ls

I comandi di Bash sono spesso accompagnati da argomenti. È ad esempio possibile includere un nome di percorso in un comando ls per elencare il contenuto di un'altra directory:

ls /etc

Per la maggior parte dei comandi di Bash sono disponibili opzioni per modificarne il funzionamento. Le opzioni, chiamate anche flag, aggiungono istruzioni più specifiche a un comando. Ad esempio, i file e le directory i cui nomi iniziano con un punto sono nascosti all'utente e non vengono visualizzati da ls. È tuttavia possibile includere il flag -a (per "all") in un comando ls e visualizzare tutto quanto nella directory di destinazione:

ls -a /etc

È anche possibile combinare i flag per brevità. Ad esempio, invece di immettere ls -a -l /etc per visualizzare tutti i file e le directory nella directory /etc di Linux in forma estesa, è possibile immettere questo comando:

ls -al /etc

Bash è conciso. È incredibile (e motivo di orgoglio per gli appassionati di Bash) quante operazioni a volte sia possibile eseguire con un unico comando.

Come ottenere assistenza

Le opzioni e gli argomenti che è possibile o necessario usare variano da un comando all'altro. Fortunatamente la documentazione di Bash è incorporata nel sistema operativo. Per visualizzare la Guida, è sufficiente un comando. Per informazioni sulle opzioni per un comando, usare il comando man (per "manual"). Ad esempio, per visualizzare tutte le opzioni per il comando mkdir ("make directory"), eseguire questo comando:

man mkdir

man si rivelerà utilissimo per conoscere Bash. man consente di trovare le informazioni necessarie per comprendere il funzionamento di qualsiasi comando.

La maggior parte dei comandi di Bash e di Linux supporta l'opzione --help, che visualizza una descrizione della sintassi e delle opzioni del comando. Per provare, immettere mkdir --help. L'output sarà simile al seguente:

Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
    
Mandatory arguments to long options are mandatory for short options too.
  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask
  -p, --parents     no error if existing, make parent directories as needed
  -v, --verbose     print a message for each created directory
  -Z                   set SELinux security context of each created directory
                         to the default type
      --context[=CTX]  like -Z, or if CTX is specified then set the SELinux
                         or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit
    
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report mkdir translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'

La Guida ottenuta in questo modo è in genere più concisa di quella ottenuta con man.

Usare i caratteri jolly

I caratteri jolly sono simboli che rappresentano uno o più caratteri nei comandi di Bash. Il carattere jolly usato più di frequente è l'asterisco, che rappresenta zero caratteri o una sequenza di caratteri. Si supponga che la directory corrente contenga centinaia di file di immagine, ma di voler visualizzare solo i file PNG, ovvero quelli i cui nomi terminano con .png. Ecco il comando per elencare solo tali file:

ls *.png

Nota

In Linux non esiste un concetto formale di estensione di file come negli altri sistemi operativi. Questo non significa che i file PNG non avranno un'estensione .png, Significa solo che in Linux il fatto che i nomi file terminino con .png non ha un significato particolare.

Si supponga che la directory corrente contenga anche file JPEG. Alcuni terminano con .jpg, mentre altri terminano con .jpeg. Ecco un modo per elencare tutti i file JPEG:

ls *.jpg *.jpeg

Ed eccone un altro:

ls *.jp*g

Il carattere jolly * corrisponde a zero o più caratteri, ma il carattere jolly ? rappresenta un singolo carattere. Se la directory corrente contiene file denominati 0001.jpg, 0002.jpg e così via fino a 0009.jpg, il comando seguente li elenca tutti:

ls 000?.jpg

Un altro modo per usare i caratteri jolly per filtrare l'output consiste nell'usare le parentesi quadre, che denotano i gruppi di caratteri. Il comando seguente elenca tutti i file nella directory corrente i cui nomi contengono un punto immediatamente seguito da una lettera J o P minuscola. Elenca quindi tutti i file .jpg, .jpeg e .png, ma non i file .gif:

ls *.[jp]*

In Linux i nomi di file e i comandi applicati a essi fanno distinzione tra maiuscole e minuscole, quindi per elencare tutti i file nella directory corrente i cui nomi contengono un punto seguito da una lettera J o P maiuscola o minuscola, è possibile immettere questo comando:

ls *.[jpJP]*

Le espressioni racchiuse tra parentesi quadre possono rappresentare intervalli di caratteri. Il comando seguente, ad esempio, elenca tutti i file nella directory corrente i cui nomi iniziano con una lettera minuscola:

ls [a-z]*

Questo comando, al contrario, elenca tutti i file nella directory corrente i cui nomi iniziano con una lettera maiuscola:

ls [A-Z]*

Quest'ultimo comando elenca tutti i file nella directory corrente i cui nomi iniziano con una lettera minuscola o maiuscola:

ls [a-zA-Z]*

In base a quanto si è detto, quale operazione eseguiranno i comandi seguenti?

ls [0-9]*
ls *[0-9]*
ls *[0-9]

Se è necessario usare uno dei caratteri jolly come carattere ordinario, è possibile anteporvi una barra rovesciata per farlo diventare un carattere letterale o di escape. Se quindi per qualche motivo, anche se è meglio evitarlo, è stato usato un asterisco come parte del nome di un file, è possibile cercarlo usando un comando come il seguente:

$ ls *\**