Uso della Shell
La shell è l'interprete di comandi per l'interfaccia CLI.
La shell possiede anche un linguaggio di programmazione suo proprio - shells diverse hanno linguaggi con sintassi in generale simile, ma co molte differenze nei dettagli.
Vi sono state più shell storicamente notevoli:
sh
- 'Bourne' shell (1971)- un dipendente della AT&T, non Jason Bourne dei romanzi
- molto di base, se si vuole rilanciare il comand precedente, occorre ridigitarlo
- il linguaggio di scripting associato è basilare, un poco 'strano'
csh
- C shell di Berkeley (circa 1981)- l'idea era di far assomigliare lo scripting al linguaggio C - non è riuscito molto bene
- il linguaggio di scripting C shell è completamente incompatibile con quello della Bourne shell
- l'interattività è migliore, ma ancora molto ostica
ksh
- 'Korn' shell, nome dell'autore (AT&T, 1986)- più interattiva, con comandi tratti dall'editor 'vi'
- lo scripting è un superinsieme della Bourne shell
- è la shell di default dello Unix IBM - AIX
bash
- 'Bourne' again shell.- gioco di parole, rifacimento della shell di Bourne
- l'interattività è molto migliorata
- lo scripting è un superinsieme di quello della Bourne shell ma diverso da quello della Korn shell
Fino a non tanti anni fa' il suggerimento era:
- usare la bash per comandi interattivi
- programmare i Bourne shell per la massima portabilità
Non è più vero. Tutti i Linux e anche gli Unix moderni hanno la Bourne shell: meglio usare questa sia per il comportamento interattivo che per le procedure (scripts).
Codice colore
Quando si listano dei file col comando ls
, sia in Ubuntu che in Red Hat, in realtà si invoca un alias, definito come:
alias ls='ls --color=auto'
Provare a dare il comando alias
e lo si vede.
Questo fa sì che i file vengano colorati diversi a seconda del loro tipo.
Struttura dei comandi
Il comando è il primo elemento della linea di comando.
Le opzioni sono precedute dal trattino:
-a -b -c = -abc = -bc -a
Le opzioni indicano un comportamento variante rispetto al comando principale.
Il trattino indicante l'opzione è stato inventato dallo Unix System V, Lo Unix di Berkeley non ce l'aveva.
Teoricamente le opzioni sono indipendenti e possono essere date in qualsiasi ordine. Non è sempre vero però, a volte le opzioni devono essere date in un ordine prestabilito e possono esserci opzioni che dipendono dalla presenza di altre, precedenti, opzioni.
A volte si hanno opzioni diverse logicamente incompatibili tra loro.
In qualche comando vi è un insieme di opzioni alternative tra cui occorre necessariamente usarne una e una sola: si chiamano opzioni chiave.
Le opzioni sono decise dai programmatori e diverse per comandi diversi: non esistono opzioni comuni a tutti i programmi.
L'unico modo è di leggere il manuale.
Da qualche anno a questa parte si è affermato un nuovo stile di opzioni, precedute da due trattini, in cui l'intera parola a seguire rappresenta l'opzione, non ogni singolo carattere.
Per esempio:
-bar = -b -a -r
sono tre opzioni--bar
è una singola opzione
Non tutti i programmatori usano questa convenzione, però.
Esempio. Opzioni di ls
Comando | Azione |
---|---|
ls | solo nomi files, multicolonna verticale |
ls -l | tutti i principali attributi dei file |
ls -lh | colonna dimensione in unità più 'umane' |
ls -a | anche i file nascosti - sono nascosti i files il cui nome inizia con punto |
ls -F | segnalini finali per indicare il tipo di file |
ls -x | solo nomi files, multicolonna orizzontale |
ls -S | sortizza per dimensione file |
ls -t | sortizza per data di aggiornamento |
ls -X | sortizza per estensione |
ls -? | paginata di aiuto |
- Non necessariamente i nomi dei file hanno un'estensione
- L'estensione viene utilizzata dai programmi, non dal sistema operativo, oppure è per chiarezza umana
- L'estensione non è necessariamente di tre caratteri
Contenuto di un File
Mandare tutto il contenuto di un file ad output:
cat file
Paginare il file:
more file
- (vecchio e deprecato)less file
- (il meno è meglio del più)
Principali comandi interni di less:
SPAZIO ^F PgGiu
- giù di una paginab ^B PgSu
- su di una paginar ^R
- ridisegna il videog
- va a inizio fileG
- va a fine file/stringa | ?stringa
- ricerca in avanti | all'indietron | N
- prosegue la ricerca in avanti | all'indietro!comando
- esegue un comando shell esternov
- entra in editazione del file corrente- Secondo la variabile d'ambiente EDITOR
- Al termine dell'editazione si torna in less
q ZZ
- esce dalla visualizzazione
Il Comando date
Il comando date ha un feature che non è una opzione, ma una stringa di formattazione: questa è racchiusa tra singoli apici e preceduta dal carattere +
(più).
date
- visualizza stringa di data e oradate +'%H:%M:%S'
- dà ore, minuti e secondidate +'%T'
- stesso effettodate +'%d/%m/%y'
- dà giorno, mese e annodate +'%D'
- stile americano
E' possibile, per il superuser usare il comando 'date' per settare la data e l'ura corrente:
date MMDDhhmmYYYY.ss
Esempio: date 073114352017.00
- 31 luglio 2017 alle 14:35:00
Nota
In ambiente enterprise non è una buona idea settare la data a mano.
Tutte le varianti moderne di Unix devono avere l'ora sincronizzata mondialmente a meno di mezzo secondo di scarto. Questo è possibile soltanto usando il Network Time Protocol (NTP).
Nella precedente 'arte di amministrazione di sistema', c'era la raccomandazione di compiere un reboot immediato se si cambiavano i seguenti parametri:
- ora di sistema
- nome del computer
- indirizzo IP
La ragione era che molti servizi mettono questi parametri in cache quando sono attivati, e l'unico modo di garantire la sanità del sistema era di farlo ripartire dall'inizio.
Chi non lo faceva si accorgeva che a distanza di tempo, minuti a giorni a mesi, si verificavano 'strane' inconsistenze, sempre al momento meno opportuno per un restart.
I server di oggi non devono MAI essere spenti. Devono essere installati, configurati, e lasciati da soli per anni. Qualora si verificassero dei crash dovuti a condizioni ambientali (mancanza di corrente, ecc. - che pure non devono verificarsi se c'è un'unità di continuità appropriata), i sistemi devono ristartare da soli e tornare in produzione piena da soli.
Il target di RHEL è proprio questo: si autoamministra.
Occorre comunque adottare avvedutezze:
- avere un'aggiornamento automatico della release, con opportuno contratto
- usare solo hardware approvato
- usare solo software previsto dalla distribuzione, o software approvato dalla Red Hat (Java, DB Oracle, ecc.)
- monitorare automaticamente da remoto lo stato del server con utilities che forniscano allerte automatiche
Red Hat Enterprise Server possiede ambienti che informano i servizi all'atto dei cambiamenti dei parametri principali di sistema, consentendo il loro aggiornamento senza bisogno di un reboot.