2.1 Linux Command Line: Comandi di Base
Introduzione
Le moderne distribuzioni Linux hanno una vasta gamma di interfacce utente grafiche, ma un amministratore di sistema deve sapere come lavorare dalla riga di comando o shell come viene comunemente chiamata.
La shell è un programma che consente la comunicazione tra il sistema operativo e l’utente. La shell è un interprete di comandi testuale che legge l’input dell’utente e lo traduce in comandi di sistema.
Esistono diverse shell in Linux, in questo corso ne vedremo solo alcune:
Shell Bourne-again (Bash) C shell (csh o tcsh, il csh migliorato) shell Korn (ksh) Z shell (zsh)
Su Linux la più comunemente usata è la shell Bash. Questa è anche quella che verrà utilizzata nei nostri esempi ed esercizi.
Quando si utilizza la shell interattiva, l’utente inserisce i comandi nel cosiddetto prompt. A seconda della distribuzione Linux, il modo in cui il prompt predefinito appare può variare leggermente;
Ma solitamente esegue la seguente struttura:
nome utente @hostname current_directory shell_type
Su Ubuntu o Debian GNU/Linux, il prompt per un utente regolare sarà probabilmente simile al seguene:
carol @mycomputer: ~$
Il prompt del superutente sarà simile al seguente:
root @mycomputer: ~#
Su CentOS o Red Hat Linux, il prompt per un utente normale sarà invece simile al seguente:
[dave @mycomputer ~] $
E il prompt del superutente sarà simile a questo:
[root @mycomputer ~] #
Spieghiamo ogni componente della struttura: username
Nome dell’utente che esegue il nome shellhostname
Nome dell’host su cui la shell runscurrent_directory
La directory in cui si trova la shell. A ~ significa che la shell si trova nella home directory dell’utente.shell_type
$
indica che la shell è gestita da un utente normale.
#
indica che la shell è gestita da root ovvero super utente.
Poiché non abbiamo bisogno di privilegi speciali, useremo un prompt senza privilegi nei seguenti esempi. Per brevità, useremo solo $come prompt.
Struttura della riga di comando
La maggior parte dei comandi sulla riga di comando ha la stessa struttura di base:
comando [opzione/parametri...] [argomento/i...]
Prendi il seguente comando come esempio:
$ls -l /home
Spieghiamo lo scopo di ogni componente:Comando
Programma che l’utente eseguirà – ls nell’esempio di cui sopra. Opzione (s) /Parametro (s)
Un «switch» che modifica il comportamento del comando in qualche modo, come -l nell’esempio precedente. Le opzioni sono accessibili in una forma breve e in una forma lunga. Ad esempio, -l è identico a —format=long.
Più opzioni possono essere combinate pure e per la forma breve, le lettere possono di solito essere digitate insieme. Ad esempio, i seguenti comandi fanno tutti lo stesso:
$ls -al
$ls -a -l
$ls —all —long
Argomento (i)
Dati aggiuntivi richiesti dal programma, ad esempio un nome file o un percorso, ad esempio/home nell’esempio precedente.
L’unica parte obbligatoria di questa struttura è il comando stesso. In generale, tutti gli altri elementi sono facoltativi, ma un programma può richiedere determinate opzioni, parametri o argomenti da specificare.
I comandi NoteMost visualizzano una breve panoramica dei comandi disponibili quando vengono eseguiti con il parametro -h. Impareremo presto ulteriori modi per saperne di più sui comandi Linux.
Tipi di comportamento dei comandi
La shell supporta due tipi di comandi: interno
Questi comandi fanno parte della shell stessa e non sono programmi separati. Ci sono circa 30 comandi di questo tipo. Il loro scopo principale è l’esecuzione di attività all’interno della shell (ad esempio cd, set, export) .External
Questi comandi risiedono in singoli file. Questi file sono solitamente programmi binari o script. Quando viene eseguito un comando che non è una shell incorporata, la shell utilizza la variabile PATH per cercare un file eseguibile con lo stesso nome del comando. Oltre ai programmi installati con il gestore di pacchetti della distribuzione, gli utenti possono creare anche i propri comandi esterni.
Il tipo di comando mostra il tipo di comando specifico:
$type echo
echo è una shell incorporata
$type uomo
l'uomo è /usr/bin/man
Utilizzo del globbing per manipolare file e directory
La shell ha molte caratteristiche che rendono più facile lavorare con i file per l’utente. Uno di loro è globbing. Globbing utilizza caratteri jolly, che sono caratteri o gruppi di caratteri che facilitano modelli o raggruppamento di nomi di file. I caratteri jolly più utilizzati sono: *
Zero, una o più occorrenze di carattere arbitrario?
Una singola occorrenza di un carattere arbitrario [a-z]
Una singola occorrenza di un carattere incluso nell’intervallo specificato [! a-z]
Una singola occorrenza di un carattere non incluso nell’intervallo specificato [sun|moon]
Al verificarsi di una delle due opzioni
Vediamo alcuni esempi di file abbinati da caratteri jolly: *
Corrisponde a tutti i file e le directory nella directory corrente.
Esempi: ssh-b, paranormala*
Corrisponde a tutti i file e le directory il cui nome inizia con un.
Esempi: alien, annaf*.txt
Corrisponde a tutti i file e le directory il cui nome inizia con f e termina con .txt.
Esempi: file.txt, freddy.txtp??
Corrisponde a tutti i file e directory il cui nome inizia con p seguito da esattamente due caratteri.
Esempi: torta, pi4f [a-z] [0-9]
Corrisponde a qualsiasi file il cui nome inizia con f, seguito da una lettera minuscola, seguito da un numero.
Esempi: fa0, fb8g [! a-z]
Corrisponde a qualsiasi file il cui nome inizia con g, seguito da un carattere che non è una lettera minuscola.
Esempi: gF, g6a [lien|mmy] .txt
Corrisponde a qualsiasi file il cui nome inizia con un, seguito da alien o mmy, seguito da .txt.
Esempi: alien.txt, ammy.txt
Citando
Come utente Linux, dovrai creare o manipolare file o variabili in vari modi. Questo è facile quando si lavora con nomi di file brevi e valori singoli, ma diventa più complicato quando, ad esempio, sono coinvolti spazi, caratteri speciali e variabili. Le shell forniscono una funzione chiamata citazione che incapsula tali dati utilizzando vari tipi di virgolette (» «, ”, “). In Bash, ci sono tre tipi di virgolette:
Doppie quoteSingole QuoteBack
Ad esempio, i seguenti comandi non agiscono nello stesso modo a causa della citazione:
$touch $USER
$touch «$USER»
$touch '$USER'
$touch `$USER`
Nota non essere confuso da $USER nell’esempio precedente. Si tratta di una variabile che, per impostazione predefinita, è impostata sul nome utente corrente. Introdurremo le variabili più tardi. Per ora, ricorda solo che $USER potrebbe essere sostituito con il nome dell’utente corrente.
Quotazioni doppie
Le virgolette doppie dicono alla shell di prendere il testo tra le virgolette («…») come caratteri normali. Tutti i caratteri speciali perdono il loro significato, tranne $(segno del dollaro), (barra rovesciata) e `(backquote). Ciò significa che le variabili, la sostituzione dei comandi e le funzioni aritmetiche possono ancora essere utilizzate.
Ad esempio, la sostituzione della variabile $USER non è influenzata dalle virgolette doppie:
$echo Sono $USER
Io sono tom
$echo «Sono $USER»
Io sono tom
Un carattere di spazio, d’altra parte, perde il suo significato come separatore di argomenti:
$touch nuovo file
$ls -l
-rw-r— 1 studenti tom 0 ott 8 15:18 file
-rw-rw-r— 1 tom studenti 0 ott 8 15:18 nuovo
$touch «nuovo file»
$ls -l
-rw-rw-r— 1 studenti tom 0 ott 8 15:19 nuovo file
Come puoi vedere, nel primo esempio, il comando touch crea due singoli file, il comando interpreta le due stringhe come singoli argomenti. Nel secondo esempio, il comando interpreta entrambe le stringhe come un argomento, quindi crea solo un file. Tuttavia, è consigliabile evitare il carattere di spazio nei nomi dei file. Invece, è possibile utilizzare un trattino basso (_) o un punto (.).
Quotazioni Singole
Le virgolette singole non hanno le eccezioni delle virgolette doppie. Revoca ogni significato speciale da ogni personaggio. Prendiamo uno dei primi esempi dall’alto:
$echo Sono $USER
Io sono tom
Quando si applicano le virgolette singole si vede un risultato diverso:
$echo 'Sono $USER'
Sono $USER
Il comando ora visualizza la stringa esatta senza sostituire la variabile.
Quotazioni Indietro
Le virgolette con maggior potere sono le virgolette posteriori. Queste virgolette racchiudono un comando completo. Durante l’elaborazione delle virgolette indietro, la shell esegue il comando e sostituisce le virgolette con l’output dei comandi:
$hostname
localhost
$nomehost touch
$ls -l
-rw-rw-r— 1 studenti tom 0 Ott 8 16:08 hostname
$tocco `hostname`
$ls -l*
-rw-rw-r— 1 studenti tom 0 ott 8 15:45 localhost
Come puoi vedere, i due comandi visualizzano due risultati diversi. Nel primo esempio, il comando touch crea un file con il nome hostname, quindi tratta letteralmente la parola. Nel secondo esempio, le virgolette indietro eseguono il nome host prima del tocco, sostituiscono le virgolette indietro con l’output di hostname e quindi eseguono il comando touch risultante.
Un’altra espressione Bash che ha la stessa funzionalità delle virgolette posteriori è $():
$touch $(nome host)
$ls -l
-rw-rw-r— 1 studenti tom 0 ott 8 15:45 localhost
Tuttavia, questa notazione è al di là dell’ambito dell’esame Linux Essentials.