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.

Shells

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.

Codici Colore

Struttura dei comandi

Comando

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

ComandoAzione
lssolo nomi files, multicolonna verticale
ls -ltutti i principali attributi dei file
ls -lhcolonna dimensione in unità più 'umane'
ls -aanche i file nascosti - sono nascosti i files il cui nome inizia con punto
ls -Fsegnalini finali per indicare il tipo di file
ls -xsolo nomi files, multicolonna orizzontale
ls -Ssortizza per dimensione file
ls -tsortizza per data di aggiornamento
ls -Xsortizza 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 pagina
  • b ^B PgSu - su di una pagina
  • r ^R - ridisegna il video
  • g - va a inizio file
  • G - va a fine file
  • /stringa | ?stringa - ricerca in avanti | all'indietro
  • n | N - prosegue la ricerca in avanti | all'indietro
  • !comando - esegue un comando shell esterno
  • v - 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 ora
  • date +'%H:%M:%S' - dà ore, minuti e secondi
  • date +'%T' - stesso effetto
  • date +'%d/%m/%y' - dà giorno, mese e anno
  • date +'%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.