Strumenti da riga di comando per sviluppatori
Pubblicato: 2022-03-11Nel mondo online di oggi, la battaglia per attirare utenti continua a imperversare, con i produttori di app che preferiscono app mobili o web. Le applicazioni desktop stanno diventando sempre meno rilevanti. Inoltre, tendono anche a non essere altro che rich client per le app Web: Electron è la piattaforma popolare preferita.
Questo significa che presto abbandoneremo il desktop come piattaforma? No, certo che no, non lo direi. Inoltre, mentre le app della GUI sembrano essersi bloccate di recente, c'è un segmento di app desktop che continua a crescere.
Hai mai visto un film con gli hacker? Il più delle volte, queste persone vengono mostrate mentre lavorano davanti a monitor che mostrano una sorta di terminale (di solito con uno sfondo scuro e un primo piano chiaro). Questo terminale, a sua volta, tende ad essere inondato di personaggi di passaggio che apparentemente hanno un significato per la persona che li guarda.
Tali rappresentazioni degli hacker in azione sono spesso derise dagli sviluppatori professionisti e ci sono persino alcuni programmi che simulano vari effetti "hacker", solo per divertimento.
Tuttavia, nel mondo reale, gli strumenti da riga di comando non vengono utilizzati per il loro valore di intrattenimento.
Perché utilizziamo ancora gli strumenti dell'interfaccia a riga di comando
Questo articolo è incentrato sul lato pratico dell'utilizzo degli strumenti dell'interfaccia della riga di comando (CLI). Conoscere i comandi CLI e utilizzare strumenti di qualità può renderti più produttivo e può anche aprire le porte a vari approcci all'automazione che sono molto più pratici con le interfacce testuali che con le app GUI.
Puoi migliorare nell'esecuzione di attività ripetitive nella GUI, al punto che i tuoi clic multipli vengono ascoltati come un unico lungo. Il problema è che questo non batterà ancora l'efficienza di uno script specializzato. Inoltre, eseguire le stesse operazioni manualmente introduce sia un carico cognitivo aggiuntivo che una maggiore possibilità di errore umano. Come al solito, ci affidiamo ai computer per gestire compiti che gli esseri umani possono trovare noiosi, ripetitivi o opprimenti.
Vale la pena sapere che uno strumento terminale può offrire diversi tipi di interfacce. Ce ne sono di non interattivi come ls, che prendono semplicemente i parametri e forniscono l'output. Ci sono interfacce interattive o semi-interattive che si trovano più spesso nei gestori di pacchetti. ("Sei sicuro di voler procedere con l'installazione da una fonte non verificata?") Poi, ci sono le interfacce utente testuali (TUI), che sono app GUI interattive progettate per adattarsi ai limiti di un terminale. Probabilmente il più famoso è Midnight Commander (mc), un clone del popolarissimo Norton Commander (negli anni '90).
Strumenti da riga di comando essenziali
Se vuoi diventare un abitante della console, devi dotarti di un set minimo di strumenti di sviluppo della riga di comando: gli elementi essenziali. Le cose senza le quali sicuramente non puoi vivere sono una shell interattiva (mira a qualcosa di moderno con un comodo completamento delle schede) e un editor di testo .
Ora, menzionerò la filosofia UNIX , che spesso è alla base delle decisioni di progettazione prese dagli autori dello strumento, consapevolmente o meno. Alcuni dei punti chiave possono essere così riassunti:
- Tratta tutto come un file.
- Fai solo una cosa, ma falla bene.
- Leggi dallo standard input, scrivi nello standard output e comunica gli errori a un flusso di errori standard.
- In caso di esito positivo, restituisce il codice 0. Un valore diverso da zero indica un errore (che può essere specificato dall'esatto codice di ritorno).
- Consenti il concatenamento dei comandi e lo scripting.
Guscio
La prima cosa che vedi quando apri un terminale è una shell. Questa è la parte che rende possibile l'interazione tra l'utente e la macchina. Interpreta i tuoi comandi, li divide in nomi di programmi e argomenti ed esegue tutti i comandi della shell che gli vengono lanciati.
Storicamente, ci sono stati molti diversi tipi di conchiglie. Tra i più popolari c'erano csh (C Shell) e varie implementazioni della Bourne Shell (solitamente conosciute semplicemente come sh ). Bourne Shell è stato esteso a Korn Shell, che ha anche guadagnato un po' di trazione ed è ancora utilizzato dai suoi appassionati. Csh è attualmente la shell predefinita su alcuni sistemi BSD, mentre quasi tutti gli altri sistemi operativi simili a UNIX preferiscono una sorta di Bourne Shell. Le distribuzioni Linux tendono a favorire bash mentre Mac OS X viene fornito con zsh come scelta predefinita.
Ci sono altre possibilità là fuori, ma sono molto meno popolari, ad eccezione di Microsoft PowerShell sui sistemi Windows. PowerShell si ispira in parte alle shell UNIX interattive come zsh e in parte al runtime .NET. Invece di trattare tutto come testo, un concetto comune nel mondo UNIX, consente la manipolazione dei dati orientata agli oggetti.
Anche se Microsoft PowerShell è abbastanza popolare nel regno di Windows, molti programmi con origini UNIX (i più importanti sono Git, Autotools o Make) tendono a preferire alcune variazioni di Bourne Shell. Per questo motivo sono nati progetti come msys (in bundle con Git per Windows), Cygwin o il recente WSL di Microsoft. Se vuoi una sensazione simile a Linux su Windows, MSys è la scelta migliore qui. Se desideri un ambiente Linux completo in grado di eseguire binari Linux standard, WSL è la strada da percorrere. Per una via di mezzo—API UNIX ma compilata come eseguibile di Windows (usala solo quando sai effettivamente perché ne hai bisogno)—Cygwin è la risposta.
Editore
Una volta che avrai familiarizzato con il tuo guscio, vorrai acquisire alcune abilità utili. Poiché la maggior parte del lavoro di codifica ruota attorno alla scrittura di testo (codice, README, messaggi di commit), è essenziale una buona conoscenza degli editor di testo interattivi. Ce ne sono molti tra cui scegliere e poiché un editor è uno degli strumenti più necessari per qualsiasi sviluppatore, probabilmente ci sono altrettante opinioni su quale sia il migliore.
Gli editor di testo più popolari possono essere separati in due gruppi di base: editor di testo semplici e editor di testo programmabili .
Entrambi possono essere ottimi per scrivere codice, ma, come suggerisce il nome, quelli programmabili offrono la possibilità di modellare e personalizzare l'editor in base alle proprie esigenze. Ciò ha un prezzo, tuttavia, poiché tendono anche ad avere una curva di apprendimento più ripida e potrebbero richiedere più tempo per la configurazione.
Editor di testo di base
Tra i semplici editor di testo, GNU Nano è il più diffuso. In realtà, è un clone dell'editor pico, quindi se uno non è disponibile sul tuo sistema, puoi provare l'altro. Un'altra alternativa, più moderna, ad entrambi è il micro editor. Se vuoi qualcosa di semplice ed estensibile allo stesso tempo, questo è un buon punto di partenza.
Editor di testo programmabili
Molti sviluppatori si affidano a editor programmabili di diversi campi, come Vim e GNU Emacs. Entrambi gli editor possono essere eseguiti nella console o in modalità GUI ed entrambi hanno avuto un impatto sulle associazioni di tasti presenti in altri software. Entrambi offrono non solo un'API ma anche veri e propri linguaggi di programmazione integrati. Emacs si concentra su LISP e Vim usa il proprio VimL, ma offre anche interfacce ad altri popolari linguaggi di scripting (come Lua, Perl, Python o Ruby). Vale la pena menzionare anche un approccio più recente a Vim, chiamato Neovim, poiché sta iniziando a ottenere un seguito serio.
Può creare un po' di confusione, ma c'è anche un editor chiamato vi che è un predecessore di Vim (che, per inciso, sta per " Vi i mproved "). È molto più semplice di Vim, ma se hai abbastanza fiducia per scrivere in Vim, non dovrebbe essere una sfida per te se ti trovi a dover usare vi.
Poiché pico/GNU Nano e vi/Vim sono solitamente preinstallati su vari sistemi, è una buona idea almeno coglierne le basi (uscire da Vim è notoriamente un problema difficile per i principianti). In questo modo, se hai bisogno di modificare qualcosa su una macchina remota, sarai pronto indipendentemente dall'editor già presente. Sul tuo dispositivo privato, sentiti libero di utilizzare qualsiasi editor che ritieni più comodo.
Editor di sistema predefinito
Un'ultima cosa da notare è che il tuo sistema potrebbe avere quello che viene chiamato un editor predefinito .
La variabile d'ambiente $EDITOR
punta all'editor predefinito e nelle shell compatibili con Bourne (sh, bash, ksh, zsh) puoi vederlo inserendo echo $EDITOR
. Se il valore è diverso dalla tua scelta personale, puoi impostarlo tu stesso aggiungendo export EDITOR=my-awesome-editor
alla configurazione di runtime della tua shell ( ~/.profile
, ~./bashrc
, ~/.zshrc
e così via).
Altri programmi, come i sistemi di controllo della versione e i client di posta, utilizzeranno questo editor quando necessitano di un input di testo più lungo.
multiplexer
Non appena inizi a fare cose serie in CLI, incontrerai la limitazione di poter mantenere aperta una sola applicazione alla volta. Durante la codifica, potresti voler modificare il codice, eseguirlo, correggere gli errori ed eseguire di nuovo. Quando cerchi un bug, potresti voler elencare i registri e vedere cosa viene registrato quando invii una richiesta al server. In genere, ciò significherebbe passare costantemente tra le due applicazioni o aprire diverse finestre di terminale.
È qui che un multiplexer di terminale può aiutarti. Quando si parla di multiplexer, alcune persone presumono immediatamente che l'argomento riguardi GNU Screen. È stato il primo strumento diffuso nel suo genere ed è ancora oggi molto popolare (spesso installato di default). Il suo moderno sostituto è tmux che, ovviamente, sta per " t erminal m ltiple x er".
Questi due consentono di avere più di una finestra aperta in una determinata sessione del terminale e passare liberamente da una sessione all'altra. Consentono di dividere le finestre in riquadri, il che aiuta a eseguire più applicazioni contemporaneamente e osservarne l'output in tempo reale (senza cambiare finestra). Inoltre, funzionano in modalità client-server, il che significa che puoi staccarli in qualsiasi momento e tornare più tardi per continuare il lavoro da dove eri rimasto. Quest'ultima caratteristica ha portato alla popolarità di Screen quando le persone volevano sessioni IRC persistenti.

Per la maggior parte dei casi d'uso, GNU Screen o tmux dovrebbero essere ottimi per te, ma se per qualche motivo li consideri troppo pesanti in termini di risorse, ci sono anche alternative più leggere. C'è dtach/atach e c'è abduco. Hanno una portata limitata di proposito, ma possono svolgere bene le rispettive funzioni.
Gestore di pacchetti
A questo punto, potresti iniziare a pensare di installare tutti i suddetti software sulla tua macchina. Un problema è che ciascuno degli strumenti ha istruzioni di installazione diverse. A volte, è necessario scaricare i sorgenti e compilarli da soli, a volte si ottiene il file binario autonomo ea volte si ottiene quello che viene chiamato pacchetto binario , che di solito significa un eseguibile compresso insieme ad alcuni metadati.
Per facilitare il processo di installazione del software, i creatori di sistemi operativi hanno sviluppato un concetto di gestori di pacchetti. In parole povere, un gestore di pacchetti è come un app store per CLI e app desktop. Precede gli app store reali di alcuni decenni. Il problema è che quasi ogni sistema ha il proprio gestore di pacchetti. Debian, Ubuntu e le distribuzioni GNU/Linux derivate usano APT, le distribuzioni basate su Red Hat preferiscono yum o DNF, altre distribuzioni Linux hanno mezzi più esotici per installare software e così fanno diversi cloni BSD. Oltre ai gestori di pacchetti integrati, ci sono anche quelli installati dagli utenti come Chocolatey per MS Windows e Homebrew per Mac OS X/macOS. Quando vuoi scrivere istruzioni su come installare il tuo programma, potresti finire per scrivere casi per ciascuno di quei sistemi. Sembra un po' troppo, vero?
Fortunatamente l'ultimo dei sistemi citati, Homebrew, potrebbe essere il più portatile, grazie a Linuxbrew, un port di Homebrew su sistemi GNU/Linux. La cosa divertente è che funziona anche su WSL se vuoi avere un'esperienza utente simile su Microsoft Windows. Tieni presente che WSL non è ufficialmente supportato, però.
Quindi, oltre alla portabilità, cos'altro può offrire Homebrew? Prima di tutto, non interferisce con i pacchetti di sistema, quindi tutto ciò che installi risiede su un livello separato rispetto al sistema operativo. Inoltre, di solito non sono necessari permessi di root per installare i pacchetti. È quindi possibile avere pacchetti di sistema stabili e testati ma allo stesso tempo verificare le loro versioni più recenti senza sacrificare la stabilità del sistema.
Se volevi testare gli editor, ho detto prima che tutto ciò che devi fare su un sistema con Homebrew o Linuxbrew è eseguire questo comando:
brew install emacs micro nano vim neovim
.
La roba lucida
Ciò di cui abbiamo già parlato è senza dubbio utile per il lavoro. Ma ci sono anche applicazioni che, sebbene non necessarie, portano comunque conforto nella vita di tutti i giorni. Potresti non averne bisogno, ma vale sempre la pena conoscerli.
Filtro interattivo
La ricerca nella cronologia dei comandi può essere noiosa. Sebbene sia bash che zsh siano dotati di combinazione di tasti Ctrl+R, mostra solo una sostituzione alla volta. Inoltre, devi inserire il testo esatto che hai usato prima. Dal momento che questa è un'operazione abbastanza comune, una volta che inizi a usare la riga di comando, sembra un ottimo posto per migliorare.
I filtri interattivi, come fzy, percol, peco o fzf ti aiutano a filtrare lunghe righe di testo. Può essere la suddetta cronologia dei comandi, tutte le righe di codice in una directory di progetto o un elenco di nomi di file generati da find .
. L'idea generale qui è di presentarti prima con tutte le righe disponibili e quindi fare affidamento su algoritmi di ricerca fuzzy per filtrare tutto ciò che non corrisponde.
Ad esempio, associando Ctrl+R a fzf mostra un elenco dei comandi più recenti, che puoi navigare su e giù usando le frecce, oppure puoi digitare git
per mostrare solo i comandi che contengono Git da qualche parte all'interno. Personalmente, quando lavoro con una shell che non ha un filtro interattivo, mi sento improvvisamente un po' perso. Questa caratteristica è davvero avvincente!
Inoltre, puoi rendere disponibile il tuo filtro interattivo all'interno del tuo editor di testo programmabile. In questo modo, avrai capacità di ricerca unificate tra la tua shell e il tuo editor.
Navigatore interattivo
Facebook PathPicker è stato di grande aiuto quando lavoravo principalmente con progetti C++. Il registro degli errori generato dal compilatore può diventare piuttosto grande e piuttosto sgradevole e la capacità di trovare i percorsi effettivi all'interno di quel registro è stata un vantaggio per la produttività.
In un dato file di testo o nel contenuto dello schermo quando utilizzato con tmux, fpp filtra tutto tranne i percorsi dei file. Presenta quindi un'interfaccia utente in cui è possibile selezionare uno o più di questi percorsi ed eseguire un comando con essi. La risposta più comune sarebbe aprire i file in un editor, ovviamente, che è l'azione predefinita.
Git interfaccia utente
È probabile che almeno uno dei progetti su cui lavori utilizzi Git come sistema di controllo della versione. Pur essendo completamente potente, Git CLI non è l'apice di un'esperienza utente eccellente. Per risparmiarti un po' di stress leggendo tutte le opzioni nell'aiuto di Git $SUBCOMMAND
, ti consiglio di dare un'occhiata a tig. Offre una bella interfaccia utente della console per le operazioni che ne traggono vantaggio, come log
o blame
.
Un altro strumento che mira ad aiutare gli utenti di GIt è fac, che è l'acronimo di Fix All Conflicts . Come avrai intuito, è utile quando ti imbatti in conflitti mentre esegui unioni o rebase. È un'alternativa ad altri strumenti di unione come vimdiff.
Gestore di file
C'è stato un tempo negli anni '90 in cui tutti volevano un file manager a due riquadri. La tendenza è iniziata con Norton Commander. Molti altri hanno seguito lo stesso percorso, ma quello che vede ancora una base di utenti stabile è Midnight Commander. Il caso d'uso più ovvio è usare mc per manipolare file locali, ma è anche molto utile quando si lavora con macchine remote.
Come la maggior parte dei programmi da riga di comando, è molto leggero, quindi non ci sono problemi a eseguirlo su ssh e grazie al supporto dei protocolli FTP e FISH, puoi avere un file system locale visibile in un riquadro e quello remoto nell'altro: un comodo funzionalità quando si desidera evitare di digitare o copiare i nomi dei file come argomenti in scp.
Strumenti CLI solo per divertimento
"Tutto lavoro e niente gioco rendono Jack un ragazzo noioso" , dicono. Ci sono molti programmi, da riga di comando e altro, che servono solo al tuo divertimento. Il videogioco Rogue rientra in questa categoria. Ha persino dato il nome all'intero genere di giochi! Altri giocattoli popolari sono fortune e cowsay, che possono rendere la tua giornata un po' meno noiosa se li usi da qualche parte negli script CI, ad esempio.
Ma per alcuni di noi, l'attrattiva principale dell'utilizzo di una console in primo luogo è sentirsi come un hacker nei film. No More Secrets e Hollywood Hacker rappresentano bene questo gruppo. Provalo quando qualcuno ti sta guardando lavorare e la tua reputazione di hacker aumenterà sicuramente!
Riga di comando in pratica
Quindi, cosa c'è di così attraente nella riga di comando che compensa le ore trascorse a imparare a usare la shell, l'editor e tutte le opzioni di varie app? La risposta breve è produttività , che deriva da due cose:
Uno è che quando ti viene presentata solo una finestra del terminale e nient'altro, puoi concentrarti più intensamente, poiché non c'è molto che ti distragga. Nessuna notifica spuntata, nessuna pubblicità, nessuna foto di graziosi gattini. Solo tu e il tuo obiettivo.
La seconda cosa è l'automazione. Puoi inserire diverse azioni combinate di frequente in uno script e chiamarlo in seguito nel suo insieme invece di digitarle tutte a mano ogni volta. Puoi tornare rapidamente a un comando particolarmente complesso che hai scritto una volta cercando nella cronologia della tua shell. Fondamentalmente, puoi registrare e riprodurre qualsiasi cosa e il codice è disponibile come documentazione di ciò che hai fatto.
Anche la possibilità di aggiungere alias contribuisce ai guadagni. Ad esempio, mi ritrovo spesso a creare commit in Git aggiornando lo stesso finché non è perfetto (per il momento). Una volta che ho messo in scena i file desiderati, git carmh
. Non cercare di cercarlo nel manuale, poiché è il mio alias privato che significa commit --amend --reuse-message=HEAD
. Risparmia un po 'di digitazione di sicuro.
Il fatto è che le persone si annoiano a ripetere le stesse azioni più e più volte e la noia riduce la concentrazione. Questo può portare a errori ed errori. L'unico modo per evitarli è non intrecciare azioni ad alta e bassa focalizzazione. La scrittura del codice è molto focalizzata e la revisione di un messaggio di commit e dei contenuti è molto focalizzata, ma quando devi ripetere diversi clic meccanici qua e là per arrivare alla fase di revisione del commit, è probabile che il tuo focus sia ridotto. La riga di comando non è, ovviamente, esente da tali attività meccaniche, ma grazie all'automazione è possibile evitarne la maggior parte.
Ulteriori esplorazioni
Potresti essere già a conoscenza di alcuni o tutti gli strumenti da riga di comando menzionati in questo articolo. Potresti aver imparato qualcosa di nuovo e utile durante la lettura. Se è così, eccellente: il mio obiettivo qui non era quello di offrire una panoramica completa e il confronto di diversi strumenti, ma di dimostrare alcuni strumenti cruciali che ho trovato utili nel mio lavoro quotidiano, nella speranza che alcuni di essi possano essere utili, anche.
Ci sono programmi da riga di comando molto più interessanti là fuori e, se sei interessato a loro, ti consiglio di controllare l'elenco curato di Awesome Shell di alcuni dei migliori strumenti da riga di comando disponibili oggi.
La maggior parte delle app della GUI hanno la loro controparte terminale. Ciò include browser Web, client di posta elettronica, client di chat (IRC, Slack, XMPP), suite PIM o fogli di calcolo. Se conosci qualche buon programma che non ho menzionato, per favore riportalo nei commenti.