Introduzione alla shell


  • Una shell è un programma il cui scopo principale è leggere i comandi ed eseguire altri programmi.
  • Questa lezione utilizza Bash, la shell predefinita in molte implementazioni di Unix.
  • I programmi possono essere eseguiti in Bash inserendo i comandi nel prompt della riga di comando.
  • I principali vantaggi della shell sono l’elevato rapporto tra azioni e battute, il supporto per l’automazione di attività ripetitive e la capacità di accedere a macchine in rete.
  • Una sfida significativa nell’uso della shell può essere quella di sapere quali comandi devono essere eseguiti e come eseguirli.

Navigazione tra file e directory


  • Il file system è responsabile della gestione delle informazioni sul disco.
  • Le informazioni sono memorizzate in file, che sono memorizzati in cartelle.
  • le cartelle possono anche memorizzare altre cartelle, che formano un albero di cartelle.
  • pwd stampa la cartella di lavoro corrente dell’utente.
  • ls [path] stampa un elenco di uno specifico file o cartella; ls da solo elenca la cartella di lavoro corrente.
  • cd [path] cambia la cartella di lavoro corrente.
  • La maggior parte dei comandi accetta opzioni che iniziano con un singolo -.
  • i nomi delle cartelle in un percorso sono separati con / su Unix, ma \ su Windows.
  • / da sola è la cartella principale dell’intero file system.
  • Un percorso assoluto specifica una posizione dalla radice del file system.
  • Un percorso relativo specifica una posizione a partire da quella corrente.
  • . da solo significa “la cartella corrente”; .. significa “la cartella sopra quella corrente”.

Lavorare con i file e le directory


  • cp [old] [new] copia un file.
  • mkdir [path] crea una nuova cartella.
  • mv [old] [new] sposta (rinomina) un file o una cartella.
  • rm [path] rimuove (elimina) un file.
  • * corrisponde a zero o più caratteri in un nome di file, quindi *.txt corrisponde a tutti i file che terminano in .txt.
  • ? corrisponde a qualsiasi singolo carattere in un nome di file, quindi ?.txt corrisponde a a.txt ma non a any.txt.
  • L’uso del tasto Control può essere descritto in molti modi, tra cui Ctrl-X, Control-X e ^X.
  • La shell non ha un cestino: una volta che qualcosa è stato cancellato, è davvero sparito.
  • La maggior parte dei nomi dei file è something.extension. L’estensione non è necessaria e non garantisce nulla, ma viene normalmente utilizzata per indicare il tipo di dati contenuti nel file.
  • A seconda del tipo di lavoro svolto, potrebbe essere necessario un editor di testo più potente di Nano.

Tubi e filtri


  • wc conta righe, parole e caratteri nei suoi input.
  • cat mostra il contenuto dei suoi input.
  • sort ordina i suoi input.
  • head visualizza le prime 10 righe del suo input per impostazione predefinita, senza ulteriori argomenti.
  • tail visualizza le ultime 10 righe del suo input per impostazione predefinita, senza ulteriori argomenti.
  • command > [file] reindirizza l’output di un comando a un file (sovrascrivendo qualsiasi contenuto esistente).
  • command >> [file] aggiunge l’output di un comando a un file.
  • [first] | [second] è una pipeline: l’output del primo comando viene usato come input del secondo.
  • Il modo migliore per usare la shell è usare le pipe per combinare semplici programmi monouso (filtri).

Cicli


  • Un ciclo for ripete i comandi una volta per ogni cosa in un elenco.
  • Ogni ciclo for ha bisogno di una variabile per riferirsi alla cosa su cui sta operando.
  • Usare $name per espandere una variabile (cioè per ottenere il suo valore). si può usare anche ${name}.
  • Non usare spazi, virgolette o caratteri jolly come ‘*’ o ‘?’ nei nomi dei file, perché complicano l’espansione delle variabili.
  • Dare ai file nomi coerenti e facili da abbinare con i caratteri jolly, per facilitarne la selezione per il loop.
  • Usare il tasto freccia su per scorrere i comandi precedenti e modificarli e ripeterli.
  • Usare Ctrl+R per cercare tra i comandi precedentemente inseriti.
  • Usare history per visualizzare i comandi recenti e ![number] per ripetere un comando per numero.

Script di shell


  • Salva i comandi in file (di solito chiamati script di shell) per riutilizzarli.
  • bash [filename] esegue i comandi salvati in un file.
  • $@ si riferisce a tutti gli argomenti della riga di comando di uno script di shell.
  • $1, $2, ecc. si riferiscono al primo argomento della riga di comando, al secondo argomento della riga di comando, ecc.
  • Mettere le variabili tra virgolette se i valori possono contenere spazi.
  • Lasciare che siano gli utenti a decidere quali file elaborare è più flessibile e più coerente con i comandi Unix integrati.

Trovare le cose


  • find trova file con proprietà specifiche che corrispondono ai modelli.
  • grep seleziona le righe dei file che corrispondono ai modelli.
  • --help è un’opzione supportata da molti comandi bash e programmi che possono essere eseguiti da Bash, per visualizzare ulteriori informazioni sull’uso di tali comandi o programmi.
  • man [command] visualizza la pagina del manuale per un determinato comando.
  • $([command]) inserisce l’output di un comando al suo posto.