Come diventare un mago da riga di comando

Il corso di informatica più utile che probabilmente non hai mai seguito

Immagine generata con Diffusione stabile

OUna cosa che ho costantemente osservato nel corso della mia carriera è che i data scientist e gli ingegneri più produttivi hanno solitamente una cosa in comune: sono procedure guidate da riga di comando. Possono navigare nel file system del proprio computer, cercare modelli nei file di registro e gestire lavori, codice sorgente e controllo della versione, tutto dalla riga di comando, senza fare affidamento sulla navigazione lenta con il mouse e le interfacce utente grafiche.

Tuttavia, questa "magia" da riga di comando, come potrebbe apparire a qualcuno che non ha familiarità con gli strumenti della shell, non fa tipicamente parte dei programmi di studio standard di informatica. UN corso MIT su come padroneggiare la riga di comando è giustamente chiamato "Il semestre mancante della tua formazione in informatica".

Questo post è il mio corso personale di 10 lezioni sulla "magia da riga di comando 101", destinato ai lettori che desiderano lavorare di più con la riga di comando e meno con le interfacce utente grafiche. Tratteremo le nozioni di base sulla shell e sulla variabile di percorso, alias, permessi dei file, streaming e piping, gestione efficiente dei lavori, tmux, ssh, git e vim.

Iniziamo. Benvenuti al CLW101.

1. Il guscio

Quando apri il terminale, stai guardando a conchiglia, come bash (borne Again Shell) o ZSH (z-Shell). La shell è davvero un linguaggio di programmazione completo con accesso a determinati programmi standard che consentono la navigazione nel file system e la manipolazione dei dati. Puoi scoprire quale shell stai utilizzando digitando:

echo $ SHELL

In bash, ogni volta che si avvia una nuova shell, la shell carica una sequenza di comandi specificati all'interno del file .bashrc file, che in genere si trova nella tua directory home (se usi un Mac, di solito c'è un file .bash_profile file invece). In quel file puoi specificare cose utili come la variabile del percorso o gli alias (ne parleremo più avanti).

2. La variabile del percorso

Quando digiti il ​​nome di determinati programmi nella tua shell, come ad esempio python, cat, o ls, come fa la shell a sapere da dove prendere quel programma? Questo è lo scopo del variabile del percorso. Questa variabile memorizza un elenco di tutti i percorsi in cui la shell cerca programmi, separati da due punti. Puoi controllare la variabile del percorso digitando:

echo $ PATH

E puoi aggiungere ulteriori directory alla variabile del percorso con questo comando:

esporta PERCORSO="mio_nuovo_percorso:$PATH"

È meglio aggiungere questo comando al tuo file bashrc, in modo che la tua directory aggiuntiva sia sempre nel tuo percorso quando avvii una nuova shell.

3. Alias

Alias sono comandi personalizzati che puoi definire per evitare di digitare comandi lunghi più e più volte, come ad esempio:

alias ll="ls -lah"
alias gs="stato git"
alias gp="git push origin master"

Gli alias possono essere utilizzati anche per creare protezioni per il flusso di lavoro di sviluppo. Ad esempio, definendo

alias mv="mv -i"

il tuo terminale ti avviserà se il file che stai per spostare esiste già nella nuova directory, in modo da non sovrascrivere accidentalmente file che non intendevi sovrascrivere.

Una volta aggiunti questi alias nel file bashrc, saranno sempre disponibili quando avvii una nuova shell.

4. Permessi dei file e sudo

Quando più utenti condividono una macchina, è importante impostare permessi sui file che determinano quale utente può eseguire quali operazioni su quali dati. Quando digiti ls -l, vedrai i file nella directory corrente insieme alle relative autorizzazioni nel seguente formato:

-rwxrwxrwx

Qui,

  • rwx rappresentano rispettivamente i diritti di lettura, scrittura ed esecuzione
  • il 3 rwx i blocchi sono per (1) utente, (2) gruppo di utenti e (3) tutti gli altri. Nell'esempio fornito, tutte e 3 queste entità hanno autorizzazioni di lettura, scrittura ed esecuzione.
  • il trattino indica che si tratta di un file. Al posto del trattino puoi vedere anche a d per directory o l per un collegamento simbolico.

Puoi modificare i permessi dei file con chmod. Ad esempio, se desideri rendere eseguibile un file per te stesso, dovrai digitare

chmod u+x mio_programma.py

👉 Se un file è eseguibile, come fa la shell a sapere come eseguirlo? Questo viene specificato con un 'hashbang' nella prima riga del file, come ad esempio #!/bin/bash per uno script bash o #!/bin/python per uno script Python.

Infine, c'è uno speciale "superutente" che dispone di tutte le autorizzazioni per tutti i file. Puoi eseguire qualsiasi comando mentre scrive il superutente sudo davanti a quel comando. Puoi anche avviare una shell sudo autonoma eseguendo

sudo su

⚠️ Usa sudo con cura. Con sudo puoi apportare modifiche al codice che controlla l'hardware del tuo computer e un errore potrebbe rendere la tua macchina inutilizzabile. Ricorda, da un grande potere derivano grandi responsabilità.

5. Streaming e tubazioni

Il Streaming operatore > reindirizza l'output da un programma a un file. >> fa la stessa cosa, ma si aggiunge a un file esistente invece di sovrascriverlo, se esiste già. Questo è utile per registrare i tuoi programmi come questo:

python mio_programma.py > file di registro

Un altro concetto utile è tubatura: x | y esegue il programma x e dirige l'output da x al programma y. Per esempio:

  • cat log.txt | tail -n5 : stampa le ultime 5 righe da log.txt
  • cat log.txt | head -n5 : stampa le prime 5 righe da log.txt
  • cat -b log.txt | grep error : mostra tutte le righe in log.txt che contengono la stringa 'error', insieme al numero di riga (-b)

6. Gestire i lavori

Se esegui un programma dalla riga di comando (ad es python run.py), il programma verrà eseguito per impostazione predefinita nel formato primo pianoe impedirti di fare qualsiasi altra cosa finché il programma non sarà terminato. Mentre il programma è in esecuzione in primo piano è possibile:

  • digitare control+C, che invierà un segnale SIGINT (signal interrupt) al programma, che ordina alla macchina di interrompere immediatamente il programma (a meno che il programma non abbia un modo per gestire questi segnali internamente).
  • digitare control+Z, che metterà in pausa il programma. Dopo la pausa è possibile proseguire il programma portandolo in primo piano (fg), oppure inviandolo allo sfondo (bg).

Per avviare subito il comando in background, utilizzare il file & operatore:

python run.py &

👉 Come fai a sapere quali programmi sono attualmente in esecuzione in background? Usa il comando jobs. Verranno visualizzati i nomi dei lavori in esecuzione e i relativi ID di processo (PID).

Infine,kill è un programma per inviare segnali ai programmi in esecuzione in background. Per esempio,

  • kill -STOP %1 invia un segnale di STOP mettendo in pausa il programma 1.
  • kill -KILL %1 invia un segnale KILL, terminando il programma 1 in modo permanente.
Quattro riquadri del terminale sul terminale del mio Macbook personale con tmux (immagine dell'autore).

7. tmux

tmux ("multiplexer terminale") consente di creare facilmente nuovi terminali e di navigare tra di essi. Questo può essere estremamente utile, ad esempio puoi utilizzare un terminale per navigare nel file system e un altro terminale per eseguire lavori. Con tmux puoi anche avere entrambi questi elementi fianco a fianco.

👉 Un altro motivo per imparare tmux è lo sviluppo remoto: quando ti disconnetti da una macchina remota (volontariamente o accidentalmente), tutti i programmi che erano attivamente in esecuzione nella tua shell vengono automaticamente terminati. D'altra parte, se esegui i tuoi programmi all'interno di una shell tmux, puoi semplicemente staccare la finestra tmux, disconnetterti, chiudere il computer e tornare a quella shell più tardi come se non fossi mai stato disconnesso.

Ecco alcuni comandi di base per iniziare con tmux:

  • tmux new -s run crea una nuova sessione terminale con il nome 'run'
  • control-BD: stacca questa finestra
  • tmux a : allega all'ultima finestra
  • tmux a -t run : collegato alla finestra chiamata 'esegui'
  • control-B“: aggiungi un altro riquadro terminale di seguito
  • control-B%: aggiungi un altro riquadro terminale a destra
  • control-B➡️: passa al riquadro del terminale a destra (simile per sinistra, su, giù)

8. SSH e coppie di chiavi

ssh è un programma per accedere a macchine remote. Per accedere alle macchine remote, dovrai fornire un nome utente e una password, oppure utilizzare una coppia di chiavi, composta da una chiave pubblica (a cui entrambe le macchine hanno accesso) e una chiave privata (a cui solo la tua macchina ha accesso) ha accesso).

ssh-keygen è un programma per generare tale coppia di chiavi. Se corri ssh-keygen, per impostazione predefinita creerà una chiave pubblica denominata id_rsa.pub e una chiave privata denominata id_rsae inseriscili entrambi nel tuo ~/.ssh directory. Dovrai aggiungere la chiave pubblica alla macchina remota, cosa che, come ormai dovresti sapere, puoi fare collegando insieme cat, sshe un operatore di streaming:

cat .ssh/id_rsa.pub | ssh utente@remoto 'cat >> ~/.ssh/authorized_keys'

Ora sarai in grado di utilizzare ssh in remoto semplicemente fornendo la tua chiave privata:

ssh remote -i ~/.ssh/id_rsa

Una pratica ancora migliore è creare un file ~/.ssh/config che contiene tutte le configurazioni di autenticazione ssh. Ad esempio, se il tuo config il file è il seguente:

Sviluppatore host
Nome host remoto
FileIdentità ~/.ssh/id_rsa

Quindi puoi accedere in remoto semplicemente digitando ssh dev.

9. git

git è un sistema di controllo della versione che ti consente di navigare in modo efficiente nella cronologia delle versioni e nei rami del tuo codice dalla riga di comando.

👉 Tienilo presente git non è la stessa cosa di GitHub: git è un programma autonomo in grado di gestire il controllo delle versioni del tuo codice sul tuo laptop locale, mentre GitHub è un luogo in cui ospitare il tuo codice in remoto.

Ecco alcuni comandi git essenziali:

  • git add : specifica quali file vuoi includere nel prossimo commit
  • git commit -m 'my commit message' : conferma la modifica del codice
  • git checkout -b dev : crea un nuovo ramo chiamato "dev" e controlla quel ramo
  • git merge dev : unisce dev nel ramo corrente. Se ciò crea conflitti di unione, dovrai risolverli manualmente e quindi eseguire git add file_that_changed; git merge --continue
  • git stash : annulla tutte le modifiche e git stash pop li riporta indietro. Ciò è utile se hai apportato modifiche al ramo principale e poi decidi che desideri effettivamente che tali modifiche siano un ramo separato.
  • git reset --hard : annulla tutte le modifiche in modo permanente

Ed ecco alcuni comandi git essenziali per gestire un host remoto (ad esempio GitHub):

  • git clone : clona una copia del repository del codice sul computer locale
  • git push origin master : invia le modifiche all'host remoto (ad esempio GitHub)
  • git pull : estrae l'ultima versione dal telecomando. (È come correre git fetch; git merge;).

👉 Prima di poter eseguire un comando come git push origin master, dovrai autenticarti con una coppia di chiavi ssh (vedi Lezione 8). Se usi GitHub, puoi semplicemente incollare la chiave pubblica nelle impostazioni del tuo profilo.

10.vim

Vim è un potente editor di testo basato su riga di comando. È una buona idea imparare almeno i comandi di base di vim:

  • di tanto in tanto potrebbe essere necessario accedere a una macchina remota e apportare una modifica al codice lì. vim è un programma standard e quindi solitamente disponibile su qualsiasi macchina su cui lavori.
  • durante l'esecuzione git commit, per impostazione predefinita git apre vim per scrivere un messaggio di commit. Quindi almeno vorrai sapere come scrivere, salvare e chiudere un file.

La cosa più importante da capire su Vim è che esistono diverse modalità operative. Una volta avviato Vim, sei dentro modalità di navigazione, che usi per navigare nel file. Tipo i per avviare modalità Modifica, in cui è possibile apportare modifiche al file. Digitare il Esc tasto per uscire dalla modalità modifica e tornare alla modalità navigazione.

L'aspetto utile della modalità di navigazione è che puoi navigare e manipolare rapidamente il file con la tastiera, ad esempio:

  • x cancella un carattere
  • dd cancella un'intera riga
  • b (indietro) va alla parola precedente, n (successivo) va alla parola successiva
  • :wq salva le modifiche e chiude il file
  • :q! ignora le modifiche e chiude il file

Per ulteriori (molto di più!) Scorciatoie da tastiera di Vim, dai un'occhiata questo cheatsheet di Vim.

Foto di Vasil Koloda on Unsplash

Conclusioni

Congratulazioni, hai completato la "magia della riga di comando 101". Tuttavia, qui abbiamo solo scalfito la superficie. Per trarre ispirazione, considera il seguente problema:

“Dato un file di testo e un numero intero k, stampa il kle parole più comuni nel file (e il numero delle loro occorrenze) con una frequenza decrescente.

Come scienziato dei dati, il mio primo impulso potrebbe essere quello di avviare un notebook Jupyter, caricare i dati magari in Panda e quindi utilizzare una funzione come Panda agg. Tuttavia, per un esperto mago della riga di comando, questa è una battuta:

tr -cs A-Za-z '' | tr AZ az | ordinare | unico -c | sort -rn | sed ${1}q

Questo non sembra molto diverso dall'immaginazione di Stable Diffusion mostrata all'inizio di questo articolo. Magia, davvero.

Come diventare una procedura guidata da riga di comando Ripubblicato dalla fonte https://towardsdatascience.com/how-to-become-a-command-line-wizard-5d78d75fbf0c?source=rss—-7f60cf5620c9—4 tramite https://towardsdatascience. com/feed

<!–

->

Timestamp:

Di più da Consulenti Blockchain