Appendice C — La Shell

C.1 Che cos’è una Shell?

Una shell è un programma che riceve comandi dall’utente tramite tastiera (o da file) e li passa al sistema operativo per l’esecuzione. Può essere accessibile tramite un terminale (o un emulatore di terminale).

C.1.1 Breve Storia della Shell

  • 1971: Ken Thompson di Bell Labs sviluppa la shell per UNIX.
  • 1977: Stephen Bourne introduce la Bourne shell (sh).
  • Dopo il 1977: Viene sviluppata la C shell (csh) e tcsh.
  • Bash: Sviluppata da Brian Fox come sostituto migliorato della Bourne shell.
  • 1990: Paul Falsted sviluppa Zsh, che diventa la shell predefinita per macOS dal 2019.

C.1.2 Windows vs macOS/Linux

  • Windows 10: È possibile utilizzare Bash attivando il Windows Subsystem for Linux. Tuttavia, l’ambiente preferito è solitamente PowerShell.
  • macOS/Linux: Zsh è la shell predefinita in entrambi i sistemi. È consigliabile sfruttare l’applicazione warp per un’esperienza utente moderna e ottimizzata.

C.1.3 Comandi di Base Unix

  • pwd: Mostra il percorso della directory corrente.
  • ls: Elenca file e cartelle nella directory corrente.
  • cd: Cambia directory. Senza argomenti, ti porta alla directory home.
  • mkdir: Crea una nuova directory.
  • rmdir: Rimuove una directory vuota.
  • Importante: Evitare spazi nei nomi di file e cartelle.

C.1.3.1 Gestione File

  • mv: Rinomina o sposta file (usa \ o '' per i nomi di file con spazi).
  • cp: Copia file o cartelle (usa -r per le cartelle).
  • rm: Rimuove file o cartelle (usa -i per confermare prima di eliminare).

C.1.3.2 Visualizzazione e Manipolazione Contenuti dei File

  • less/more: Visualizza il contenuto dei file con possibilità di navigazione.
  • cat: Mostra l’intero contenuto di un file.
  • head: Mostra le prime righe di un file.
  • tail: Mostra le ultime righe di un file.

C.1.4 Comandi di Base PowerShell

Per adattare i comandi Unix per l’utilizzo in PowerShell di Windows, molti dei comandi rimangono simili grazie alla natura cross-platform di PowerShell e alla sua flessibilità nel gestire sia gli stili di comando Unix che quelli tradizionali di Windows. Ecco come si traducono i comandi:

  • Get-Location o semplicemente pwd: Mostra il percorso della directory corrente, simile a pwd in Unix.
  • Get-ChildItem o semplicemente ls: Elenca file e cartelle nella directory corrente, equivalente a ls in Unix.
  • Set-Location o semplicemente cd: Cambia directory. cd senza argomenti ti porta alla directory home in PowerShell con cd ~.
  • New-Item -ItemType Directory -Name 'nomeDirectory': Crea una nuova directory, simile a mkdir in Unix.
  • Remove-Item -Path 'nomeDirectory' -Force: Rimuove una directory, anche se non vuota. Equivalente a rmdir in Unix, ma più potente perché può rimuovere anche directory con contenuti utilizzando il parametro -Force.

C.1.4.1 Gestione File

  • Move-Item -Path 'origine' -Destination 'destinazione': Rinomina o sposta file, equivalente a mv in Unix.
  • Copy-Item -Path 'origine' -Destination 'destinazione': Copia file o cartelle, simile a cp in Unix. Usa -Recurse per copiare cartelle.
  • Remove-Item -Path 'file' -Force: Rimuove file o cartelle, simile a rm in Unix. Usa -Force per rimuovere senza conferme e -Recurse per rimuovere cartelle con contenuti.

C.1.4.2 Visualizzazione e Manipolazione Contenuti dei File

  • Get-Content 'file' | More: Visualizza il contenuto dei file con possibilità di navigazione, simile a less/more in Unix.
  • Get-Content 'file': Mostra l’intero contenuto di un file, equivalente a cat in Unix.
  • Get-Content 'file' -Head <numero>: Mostra le prime righe di un file, simile a head in Unix.
  • Get-Content 'file' -Tail <numero>: Mostra le ultime righe di un file, equivalente a tail in Unix.

È cruciale familiarizzarsi con l’utilizzo dei percorsi relativi per semplificare gli spostamenti tra le diverse directory. L’impiego dei percorsi relativi rende il processo di navigazione più intuitivo e meno incline agli errori.

  • Nomi Chiari e Concisi: Evitate di includere spazi nei nomi dei file e delle cartelle. Preferite l’utilizzo di trattini bassi (_) per separare le parole e mantenere una struttura leggibile e facilmente comprensibile.

  • Evitare Caratteri Speciali: È importante evitare l’inserimento di caratteri speciali come asterischi (*), dollari ($), slash (/, ), punti (.), virgole (,), punti e virgole (;), parentesi (()), parentesi quadre ([]), parentesi graffe ({}), ampersand (&), barre verticali (|), punti esclamativi (!), punti interrogativi (?) nei nomi dei file e delle cartelle. Talvolta, anche l’uso del trattino (-) può causare problemi; quindi è consigliabile evitarlo. Questi caratteri possono generare problemi di compatibilità con alcuni sistemi operativi o applicazioni, rendendo più complessa la gestione dei file.

  • Differenziazione tra Maiuscole e Minuscole: Unix distingue tra maiuscole e minuscole (tratta le lettere come oggetti distinti), mentre Windows non lo fa. Per evitare confusioni, è consigliabile adottare una politica conservativa: considerate i nomi che differiscono solo per la case delle lettere come distinti.

Seguendo questi consigli, è possibile ottimizzare notevolmente l’organizzazione e la gestione dei propri file, migliorando l’efficienza del lavoro e riducendo il rischio di errori.

Con la pratica, la riga di comando diventa uno strumento molto efficiente. Questa breve guida fornisce le basi per iniziare a esplorare e gestire i file dal terminale, offrendo una base di partenza per ulteriori apprendimenti. La familiarità con la shell è fondamentale nella data science.