Instrumente de linie de comandă pentru dezvoltatori
Publicat: 2022-03-11În lumea online de astăzi, bătălia pentru a atrage utilizatori continuă să se dezvolte, producătorii de aplicații preferând fie aplicațiile mobile, fie aplicațiile web. Aplicațiile desktop devin din ce în ce mai puțin relevante. În plus, ei tind să nu fie altceva decât clienți bogați pentru aplicațiile web – Electron fiind platforma populară de alegere.
Înseamnă asta că vom abandona în curând desktop-ul ca platformă? Nu, desigur că nu, n-aș spune asta. În plus, în timp ce aplicațiile GUI par să se fi blocat recent, există un segment de aplicații desktop care continuă să crească.
Ați văzut vreodată vreun film cu hackeri? De cele mai multe ori, acești oameni sunt afișați lucrând în fața monitoarelor care afișează un fel de terminal (de obicei, cu un fundal întunecat și un prim plan deschis). Acest terminal, la rândul său, tinde să fie inundat de personaje trecătoare care aparent au o anumită semnificație pentru persoana care le urmărește.
Astfel de reprezentări ale hackerilor în acțiune sunt adesea batjocorite de dezvoltatorii profesioniști și există chiar și unele programe care simulează diverse efecte „hacker”, doar pentru distracție.
Cu toate acestea, în lumea reală, instrumentele din linia de comandă nu sunt folosite pentru valoarea lor de divertisment.
De ce folosim în continuare instrumentele de interfață cu linia de comandă
Acest articol se concentrează pe partea practică a utilizării instrumentelor de interfață de linie de comandă (CLI). Cunoașterea comenzilor CLI și utilizarea instrumentelor de calitate vă poate face mai productiv și, de asemenea, vă poate deschide porți către diverse abordări ale automatizării, care sunt mult mai practice cu interfețele textuale decât cu aplicațiile GUI.
Puteți deveni mai buni la îndeplinirea sarcinilor repetitive în GUI, până în punctul în care clicurile dvs. multiple sunt auzite ca un singur lung. Problema este că acest lucru încă nu va depăși eficiența unui script specializat. În plus, efectuarea manuală a acelorași operațiuni introduce atât o încărcătură cognitivă suplimentară, cât și o posibilitate crescută de eroare umană. Ca de obicei, ne bazăm pe computere pentru a gestiona sarcinile pe care oamenii le pot considera plictisitoare, repetitive sau copleșitoare.
Merită să știți că un instrument terminal poate oferi mai multe tipuri de interfețe. Există unele non-interactive precum ls, care pur și simplu preiau parametrii și furnizează rezultatul. Există interfețe interactive sau semi-interactive care se găsesc cel mai des în managerii de pachete. („Sunteți sigur că doriți să continuați cu instalarea dintr-o sursă neverificată?”) Apoi, există interfețe de utilizator textuale (TUIs), care sunt aplicații GUI interactive concepute pentru a se potrivi limitărilor unui terminal. Probabil cel mai faimos este Midnight Commander (mc), o clonă extrem de populară (în anii '90) Norton Commander.
Instrumente esențiale pentru linia de comandă
Dacă doriți să deveniți un locuitor al consolei, trebuie să vă echipați cu un set minim de instrumente pentru dezvoltatori de linie de comandă - elementele esențiale. Lucrurile fără de care cu siguranță nu poți trăi sunt un shell interactiv (țintește ceva modern cu completare convenabilă a filelor) și un editor de text .
Acum, voi aminti filozofia UNIX , care este adesea fundamentul din spatele deciziilor de proiectare luate de autorii instrumentului, fie conștient sau nu. Unele dintre punctele cheie pot fi rezumate după cum urmează:
- Tratați totul ca pe un fișier.
- Fă un singur lucru, dar fă-l bine.
- Citiți de la intrarea standard, scrieți în ieșirea standard și comunicați erorile către un flux de erori standard.
- Când ați reușit, returnați codul 0. O valoare diferită de zero înseamnă o eroare (care poate fi specificată prin codul de returnare exact).
- Permite înlănțuirea comenzilor și scriptarea.
Coajă
Primul lucru pe care îl vedeți când deschideți un terminal este un shell. Aceasta este partea care face posibilă interacțiunea dintre utilizator și mașină. Îți interpretează comenzile, le împarte în nume de program și argumente și execută toate comenzile shell pe care le arunci.
Din punct de vedere istoric, au existat multe tipuri diferite de scoici. Printre cele mai populare au fost csh (C Shell) și diverse implementări ale Bourne Shell (cunoscute de obicei pur și simplu sub numele de sh ). Bourne Shell a fost extins în Korn Shell, care a câștigat, de asemenea, o oarecare tracțiune și este încă folosit de entuziaștii săi. Csh este în prezent shell-ul implicit pe unele sisteme BSD, în timp ce aproape toate celelalte sisteme de operare asemănătoare UNIX preferă un fel de Bourne Shell. Distribuțiile Linux tind să favorizeze bash, în timp ce Mac OS X vine cu zsh ca alegere implicită.
Există și alte posibilități, dar sunt mult mai puțin populare, cu excepția Microsoft PowerShell pe sistemele Windows. PowerShell este inspirat în parte din shell-urile UNIX interactive, cum ar fi zsh, și în parte din runtime-ul .NET. În loc să trateze totul ca text, un concept comun în lumea UNIX, permite manipularea datelor orientată pe obiecte.
Chiar dacă Microsoft PowerShell este destul de popular în domeniul Windows, multe programe cu origini UNIX (cele mai notabile fiind Git, Autotools sau Make) tind să prefere unele variante ale Bourne Shell. Din această cauză, s-au născut proiecte precum msys (la pachet cu Git pentru Windows), Cygwin sau WSL recent al Microsoft. Dacă doriți un sentiment asemănător Linux pe Windows, MSys este cea mai bună alegere aici. Dacă doriți un mediu Linux cu funcții complete, capabil să ruleze binare Linux standard, atunci WSL este calea de urmat. Pentru ceva intermediar - API UNIX, dar compilat ca un executabil Windows (folosește-l doar atunci când știi de ce ai nevoie de asta) - Cygwin este răspunsul.
Editor
Odată ce vă familiarizați cu carcasa dvs., veți dori să acumulați câteva abilități utile. Deoarece cea mai mare parte a activității de codare se învârte în jurul scrierii textului (cod, README-uri, mesaje commit), o bună cunoaștere a editorilor de text interactiv este esențială. Există multe dintre care să alegeți și, deoarece un editor este unul dintre cele mai necesare instrumente pentru orice dezvoltator, probabil că există tot atâtea opinii despre care editor este cel mai bun.
Cele mai populare editoare de text pot fi împărțite în două grupuri de bază: editori de text simple și editori de text programabili .
Ambele pot fi grozave pentru scrierea codului, dar, după cum sugerează și numele, cele programabile oferă posibilitatea de a modela și personaliza editorul pentru a se potrivi perfect nevoilor dumneavoastră. Totuși, acest lucru are un preț, deoarece acestea tind, de asemenea, să aibă o curbă de învățare mai abruptă și pot necesita mai mult timp pentru configurare.
Editori de text de bază
Dintre editorii de text simpli, GNU Nano este cel mai răspândit. De fapt, este o clonă a editorului pico, așa că dacă una nu este disponibilă pe sistemul dvs., puteți încerca pe cealaltă. O altă alternativă, mai modernă, la ambele este microeditorul. Dacă vrei ceva simplu și extensibil în același timp, acesta este un loc bun de început.
Editore de text programabile
Mulți dezvoltatori se bazează pe editori programabili din diferite tabere, cum ar fi Vim și GNU Emacs. Ambele editori pot rula în consolă sau în modul GUI și ambele au avut un impact asupra legăturilor de taste găsite în alte software-uri. Ambele oferă nu numai un API, ci și limbaje de programare reale încorporate. Emacs se concentrează pe LISP și Vim folosește propriul său VimL, dar oferă și interfețe pentru alte limbaje de scripting populare (cum ar fi Lua, Perl, Python sau Ruby). Merită menționată și o abordare mai recentă a Vim, numită Neovim, deoarece începe să capete o atenție serioasă.
Poate fi oarecum confuz, dar există și un editor numit vi, care este un predecesor al lui Vim (care, de altfel, înseamnă „ Vi i m probed”). Este mult mai simplu decât Vim, dar dacă ai suficientă încredere să scrii în Vim, nu ar trebui să fie o provocare pentru tine dacă te simți nevoit să folosești vi.
Deoarece pico/GNU Nano și vi/Vim sunt de obicei preinstalate pe diferite sisteme, este o idee bună să înțelegeți cel puțin elementele de bază (pentru a părăsi Vim este o problemă notoriu de grea pentru începători). În acest fel, dacă trebuie să editați ceva pe o mașină la distanță, veți fi gata, indiferent de ce editor este deja acolo. Pe dispozitivul dvs. privat, nu ezitați să utilizați orice editor pe care îl considerați cel mai confortabil.
Editor de sistem implicit
Un ultim lucru de remarcat este că sistemul dumneavoastră poate avea ceea ce se numește un editor implicit .
Variabila de mediu $EDITOR
indică editorul implicit și în shell-urile compatibile cu Bourne (sh, bash, ksh, zsh) o puteți vedea introducând echo $EDITOR
. Dacă valoarea diferă de alegerea dvs. personală, o puteți seta singur adăugând export EDITOR=my-awesome-editor
la configurația de rulare a shell-ului dvs. ( ~/.profile
, ~./bashrc
, ~/.zshrc
și așa mai departe).
Alte programe, cum ar fi sistemele de control al versiunilor și clienții de e-mail, vor folosi acest editor atunci când au nevoie de introducerea textului mai lungă.
Multiplexor
De îndată ce începeți să faceți lucruri serioase în CLI, veți întâlni limitarea de a putea menține o singură aplicație deschisă la un moment dat. Când codați, este posibil să doriți să editați codul, să-l executați, să remediați greșelile și să executați din nou. Când căutați o eroare, este posibil să doriți să enumerați jurnalele și să vedeți ce se înregistrează atunci când trimiteți o solicitare către server. De obicei, acest lucru ar însemna fie comutarea constantă între cele două aplicații, fie deschiderea mai multor ferestre de terminal.
Aici vă poate ajuta un multiplexor terminal. Când vorbim de multiplexoare, unii oameni presupun imediat că subiectul este GNU Screen. A fost primul instrument larg răspândit de acest gen și este încă foarte popular astăzi (deseori fiind instalat implicit). Înlocuitorul său modern este tmux care, fără a fi surprinzător, înseamnă „ terminal multiplu x er”.
Acestea două vă permit să aveți mai mult de o fereastră deschisă într-o anumită sesiune de terminal și să comutați liber între acele sesiuni. Acestea vă permit să împărțiți ferestrele în panouri, ceea ce ajută la rularea mai multor aplicații în același timp și la observarea rezultatelor lor în timp real (fără a comuta nicio fereastră). De asemenea, funcționează într-un mod client-server, ceea ce înseamnă că le puteți detașa în orice moment și puteți reveni mai târziu pentru a continua munca exact de unde ați rămas. Această ultimă caracteristică a dus la popularitatea lui Screen atunci când oamenii doreau sesiuni IRC persistente.

Pentru majoritatea cazurilor de utilizare, GNU Screen sau tmux ar trebui să fie grozave pentru dvs., dar dacă dintr-un motiv oarecare le-ați considera prea grele în resurse, există și alternative mai ușoare. Există dtach/atach și există abduco. Aceștia au un domeniu limitat în mod intenționat, dar își pot îndeplini bine sarcinile respective.
Manager de pachete
În acest moment, este posibil să începeți să vă gândiți să instalați tot software-ul menționat mai sus pe mașina dvs. O problemă este că fiecare instrument are instrucțiuni de instalare diferite. Uneori, trebuie să descărcați surse și să le compilați singur, uneori obțineți binarul autonom și uneori obțineți ceea ce se numește pachet binar , care înseamnă de obicei un executabil comprimat împreună cu unele metadate.
Pentru a ușura procesul de instalare a software-ului, creatorii de sisteme de operare au venit cu un concept de manageri de pachete. Mai simplu, un manager de pachete este ca un magazin de aplicații pentru CLI și aplicații desktop. El precede magazinele de aplicații reale cu câteva decenii. Problema este că aproape fiecare sistem are propriul manager de pachete. Distribuțiile Debian, Ubuntu și derivate GNU/Linux folosesc APT, distribuțiile bazate pe Red Hat preferă yum sau DNF, alte distribuții Linux au mijloace mai exotice de instalare a software-ului, la fel și diferite clone BSD. Pe lângă managerii de pachete încorporați, există și altele instalate de utilizator, cum ar fi Chocolatey pentru MS Windows și Homebrew pentru Mac OS X/macOS. Când doriți să scrieți instrucțiuni despre cum să instalați programul, puteți ajunge să scrieți cazuri pentru fiecare dintre aceste sisteme. Pare puțin prea mult, nu-i așa?
Din fericire, ultimul dintre sistemele menționate, Homebrew, poate fi cel mai portabil, datorită Linuxbrew, un port al Homebrew către sistemele GNU/Linux. Lucrul amuzant este că funcționează chiar și pe WSL dacă doriți să aveți o experiență de utilizator similară pe Microsoft Windows. Rețineți că WSL nu este acceptat oficial, totuși.
Deci, în afară de portabilitate, ce altceva poate oferi Homebrew? În primul rând, nu interferează cu pachetele de sistem, așa că tot ceea ce instalați se află pe un strat separat de sistemul de operare. În plus, nu sunt necesare permisiuni root pentru a instala pachete. Prin urmare, puteți avea pachete de sistem care sunt stabile și testate, dar în același timp să le verificați versiunile mai noi, fără a sacrifica stabilitatea sistemului.
Dacă doriți să testați editorii, am menționat mai devreme că tot ce trebuie să faceți pe un sistem fie cu Homebrew, fie cu Linuxbrew este să rulați această comandă:
brew install emacs micro nano vim neovim
.
Lucrurile Strălucitoare
Ceea ce am discutat deja este, fără îndoială, util pentru muncă. Dar există și aplicații care, deși nu sunt necesare, aduc totuși confort în viața de zi cu zi. Poate că nu aveți nevoie de ele, dar merită întotdeauna să le cunoașteți.
Filtru interactiv
Căutarea în istoricul comenzilor poate fi plictisitoare. În timp ce atât bash, cât și zsh prezintă combinarea tastelor Ctrl+R, afișează doar o înlocuire la un moment dat. În plus, trebuie să introduceți textul exact pe care l-ați folosit înainte. Deoarece aceasta este o operațiune destul de comună, odată ce începeți să utilizați linia de comandă, pare un loc bun pentru îmbunătățire.
Filtrele interactive, cum ar fi fzy, percol, peco sau fzf vă ajută să filtrați rândurile lungi de text. Acesta poate fi fie istoricul comenzilor menționat mai sus, toate liniile de cod dintr-un director de proiect, fie o listă de nume de fișiere generate de find .
. Ideea generală aici este să vă prezentați mai întâi toate liniile disponibile și apoi să vă bazați pe algoritmi de găsire neclară pentru a filtra tot ceea ce nu se potrivește.
De exemplu, legarea Ctrl+R la fzf vă arată o listă cu cele mai recente comenzi, pe care le puteți naviga în sus și în jos folosind săgeți, sau puteți tasta git
pentru a afișa numai comenzile care au Git undeva în interior. Personal, când lucrez cu un shell care nu are filtru interactiv, mă simt brusc puțin pierdut. Această caracteristică este cu adevărat convingătoare!
În plus, puteți face filtrul interactiv disponibil în editorul de text programabil. În acest fel, veți avea capabilități de căutare unificate între shell și editor.
Navigator interactiv
Facebook PathPicker a fost de mare ajutor când lucram mai ales cu proiecte C++. Jurnalul de erori generat de compilator poate deveni destul de mare și destul de urât, iar capacitatea de a găsi căile reale în interiorul acelui jurnal a fost un avantaj pentru productivitate.
În orice fișier text dat sau în conținutul ecranului atunci când este utilizat cu tmux, fpp filtrează totul, în afară de căile fișierelor. Apoi prezintă o interfață de utilizare în care puteți selecta una sau mai multe dintre acele căi și puteți rula o comandă cu ele. Cel mai obișnuit răspuns ar fi deschiderea fișierelor într-un editor, desigur, care este acțiunea implicită.
UI Git
Sunt șanse ca cel puțin unul dintre proiectele la care lucrați să folosească Git ca sistem de control al versiunilor. Deși este complet puternic, Git CLI nu este punctul culminant al experienței excelente pentru utilizator. Pentru a vă scuti de stres citind toate opțiunile din ajutorul Git $SUBCOMMAND
, vă recomand să verificați tig. Oferă o interfață de consolă frumoasă pentru operațiunile care beneficiază de ea, cum ar fi log
sau blame
.
Un alt instrument care își propune să ajute utilizatorii GIt este fac, care este un acronim pentru Fix All Conflicts . După cum probabil ați ghicit, este util atunci când vă confruntați cu conflicte în timp ce faceți îmbinări sau rebaze. Este o alternativă la alte instrumente de îmbinare precum vimdiff.
Manager de fișiere
A fost o perioadă în anii 90 când toată lumea dorea un manager de fișiere cu două panouri. Tendința a început cu Norton Commander. Mulți alții au urmat aceeași cale, dar cel care încă vede o bază stabilă de utilizatori este Midnight Commander. Cel mai evident caz de utilizare este utilizarea mc pentru a manipula fișiere locale, dar este și foarte util atunci când lucrați cu mașini la distanță.
La fel ca majoritatea programelor din linia de comandă, este foarte ușor, așa că nu există nicio problemă să-l rulați prin ssh și, datorită acceptării protocoalelor FTP și FISH, puteți avea un sistem de fișiere local vizibil într-un panou și pe cel de la distanță în celălalt - un convenabil caracteristică atunci când doriți să evitați tastarea sau copierea numelor fișierelor ca argumente pentru scp.
Instrumente CLI doar pentru distracție
„Toată munca și nicio joacă îl fac pe Jack un băiat plictisitor”, spun ei. Există o mulțime de programe, linie de comandă și altele, care servesc doar la distracția ta. Jocul video Rogue se încadrează în această categorie. A dat chiar nume întregului gen de jocuri! Alte jucării populare sunt avere și cowsay, care vă pot face ziua puțin mai puțin plictisitoare dacă le folosiți undeva în scripturile CI, de exemplu.
Dar pentru unii dintre noi, principala atracție a utilizării unei console este, în primul rând, să se simtă ca un hacker în filme. No More Secrets și Hollywood Hacker reprezintă bine acest grup. Încearcă-l când cineva te urmărește lucrând, iar credința ta de hacker va crește cu siguranță!
Linia de comandă în practică
Deci, ce este atât de atrăgător la linia de comandă care compensează orele petrecute învățând cum să folosești shell-ul, editorul și toate comutatoarele diferitelor aplicații? Răspunsul scurt este productivitatea , care provine din două lucruri:
Unul este că atunci când ți se prezintă doar o fereastră de terminal și nimic mai mult, te poți concentra mai intens, deoarece nu există prea multe care să-ți distragă atenția. Nu apar notificări, fără reclame, fără poze cu pisoi drăguți. Doar tu și obiectivul tău.
Al doilea lucru este automatizarea. Puteți pune mai multe acțiuni combinate frecvent într-un script și îl puteți apela mai târziu în ansamblu, în loc să le introduceți pe toate manual de fiecare dată. Puteți reveni rapid la o comandă deosebit de complexă pe care ați scris-o cândva, căutând în istoricul shell-ului dvs. Practic, puteți înregistra și reda orice, iar codul este disponibil ca documentație a ceea ce ați făcut.
Abilitatea de a adăuga aliasuri contribuie, de asemenea, la câștiguri. De exemplu, mă trezesc adesea să creez comite în Git, actualizându-l pe același până când este perfect (pentru moment). Odată ce pun în scenă fișierele dorite, rulez git carmh
. Nu încercați să o căutați în manual, deoarece este aliasul meu privat care înseamnă commit --amend --reuse-message=HEAD
. Cu siguranță economisește ceva tastare.
Ideea este că oamenii se plictisesc repetând aceleași acțiuni iar și iar, iar plictiseala reduce concentrarea. Acest lucru poate duce la greșeli și erori. Singura modalitate de a le evita este să nu împletești acțiuni cu focalizare mare și focalizare redusă. Scrierea codului este foarte concentrată și revizuirea unui mesaj de commit și a conținutului este foarte concentrată, dar atunci când trebuie să repetați mai multe clicuri mecanice ici și colo pentru a ajunge la etapa de revizuire a comiterii, sunt șansele ca concentrarea dvs. să fie redusă. Linia de comandă nu este, desigur, lipsită de astfel de activități mecanice, dar datorită automatizării, puteți evita cele mai multe dintre ele.
Explorări ulterioare
Este posibil să fi fost deja la curent cu unele sau toate instrumentele de linie de comandă menționate în acest articol. Este posibil să fi învățat ceva nou și util în timp ce îl citiți. Dacă da, excelent - scopul meu aici nu a fost să ofer o imagine de ansamblu cuprinzătoare și o comparație a diferitelor instrumente, ci să demonstrez câteva instrumente cruciale pe care le-am găsit utile în munca mea de zi cu zi, în speranța că unele dintre ele le-ați putea găsi utile, de asemenea.
Există programe mult mai interesante în linia de comandă și, dacă sunteți interesat de ele, vă recomand să verificați lista organizată de Awesome Shell cu unele dintre cele mai bune instrumente de linie de comandă disponibile astăzi.
Cele mai multe dintre aplicațiile GUI au omologul lor terminal. Acestea includ browsere web, clienți de e-mail, clienți de chat (IRC, Slack, XMPP), suite PIM sau foi de calcul. Dacă cunoașteți programe bune pe care nu le-am menționat, vă rugăm să le aduceți în comentarii.