Appendice A — La Shell

A.1 Che cos’è una Shell?

Una shell è un’interfaccia testuale che funge da intermediario tra l’utente e il sistema operativo. Riceve i comandi, li interpreta e li trasmette al kernel del sistema operativo per l’esecuzione, restituendo poi l’output all’utente.

A.1.1 Differenze tra sistemi operativi

  • Windows 10/11: pur essendo possibile utilizzare una shell Bash installando il Windows Subsystem for Linux (WSL), l’ambiente di riferimento nativo è PowerShell, progettato specificamente per l’ecosistema Windows e integrato con il suo framework di automazione.
  • macOS/Linux: entrambi i sistemi utilizzano Zsh come shell predefinita moderna, erede della classica Bash. Per un’esperienza di terminale più fluida e produttiva, si consiglia di utilizzare terminali moderni come warp, che arricchiscono l’interazione tradizionale con funzionalità intelligenti.

A.1.2 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: Evitate spazi nei nomi di file e cartelle.

A.1.2.1 Gestione dei 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).

A.1.2.2 Visualizzazione e manipolazione dei 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.

A.1.3 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.

A.1.3.1 Gestione dei 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.

A.1.3.2 Visualizzazione e manipolazione dei 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.
Consiglio

Familiarizzare con l’uso dei percorsi relativi è essenziale per navigare in modo efficiente tra le directory, rendendo il processo più intuitivo e meno soggetto a errori.

Convenzioni per la denominazione.

  • 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: evitate 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, poiché molti di essi hanno significati riservati nei sistemi operativi. Anche il trattino (-) può talvolta generare problemi in contesti specifici.

  • Differenziazione tra maiuscole e minuscole: i sistemi derivati da Unix distinguono tra maiuscole e minuscole (ad esempio, File.txt e file.txt sono file diversi), mentre Windows non lo fa. Per garantire la massima portabilità, adottate una convenzione coerente (ad esempio, solo minuscole) e considerate sempre come entità separate i nomi che differiscono per la presenza o l’assenza di maiuscole.

Seguire queste linee guida migliora notevolmente l’organizzazione, riduce i rischi di conflitti e aumenta l’efficienza nella gestione quotidiana dei file.

Con la pratica, la riga di comando si rivela uno strumento estremamente potente ed efficiente. Queste indicazioni forniscono le basi per iniziare a navigare e gestire i file dal terminale, costituendo un punto di partenza solido per approfondimenti successivi (si veda, ad esempio, Robbins, 2016). La padronanza dell’ambiente shell rappresenta una competenza fondamentale nel lavoro di data science.

Bibliografia

Robbins, A. (2016). Bash Pocket Reference: Help for Power Users and Sys Admins. O’Reilly Media, Inc.