Hoe u een opdrachtregelwizard kunt worden

Het nuttigste vak computerwetenschappen dat je waarschijnlijk nog nooit hebt gevolgd

Afbeelding gegenereerd met Stabiele diffusie

OHet enige dat ik gedurende mijn hele carrière consequent heb opgemerkt, is dat de meest productieve datawetenschappers en -ingenieurs meestal één ding gemeen hebben: ze zijn opdrachtregelwizards. Ze kunnen door het bestandssysteem van hun computer navigeren, zoeken naar patronen in logbestanden en taken, broncode en versiebeheer beheren, allemaal vanaf de opdrachtregel, zonder afhankelijk te zijn van trage navigatie met de muis en grafische gebruikersinterfaces.

Toch maakt deze opdrachtregel-'tovenarij', zoals het lijkt voor iemand die niet bekend is met shell-tools, doorgaans geen deel uit van de standaard computerwetenschappencurricula. Een MIT cursus rond het beheersen van uw opdrachtregel heet toepasselijk “Het ontbrekende semester van uw CS-onderwijs'.

Dit bericht is mijn persoonlijke 'command-line wizardry 10'-les van 101 lessen, bedoeld voor lezers die meer met de opdrachtregel willen werken en minder met grafische gebruikersinterfaces. We behandelen de basisprincipes van de shell en de padvariabele, aliassen, bestandsrechten, streaming en piping, efficiënt taakbeheer, tmux, ssh, git en vim.

Laten we beginnen. Welkom bij CLW101.

1. De schelp

Wanneer u uw terminal opent, kijkt u naar een schelp, zoals bash (borne again shell) of ZSH (z-shell). De shell is in werkelijkheid een complete programmeertaal met toegang tot bepaalde standaardprogramma's die bestandssysteemnavigatie en gegevensmanipulatie mogelijk maken. Je kunt erachter komen welke shell je gebruikt door het volgende te typen:

echo $ SHELL

In bash laadt de shell, elke keer dat je een nieuwe shell start, een reeks opdrachten die zijn gespecificeerd in het .bashrc bestand, dat zich doorgaans in uw thuismap bevindt (als u een Mac gebruikt, is er meestal een .bash_profile bestand in plaats daarvan). In dat bestand kunt u nuttige zaken opgeven, zoals uw padvariabele of aliassen (waarover meer hieronder).

2. De padvariabele

Wanneer u de naam van bepaalde programma's in uw shell typt, zoals python, catof ls, hoe weet de shell waar hij dat programma vandaan moet halen? Dat is het doel van de pad variabele. Deze variabele slaat een lijst op met alle paden waar de shell naar programma's zoekt, gescheiden door dubbele punten. U kunt uw padvariabele inspecteren door het volgende te typen:

echo $ PATH

En u kunt met deze opdracht extra mappen aan uw padvariabele toevoegen:

export PATH="mijn_nieuwe_pad:$PATH"

Het is het beste om deze opdracht aan je bashrc-bestand toe te voegen, zodat je extra map altijd in je pad staat als je een nieuwe shell start.

3. Aliassen

Aliassen zijn aangepaste opdrachten die u kunt definiëren om te voorkomen dat u steeds opnieuw lange opdrachten moet typen, zoals:

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

Aliassen kunnen ook worden gebruikt om beveiliging te creëren voor uw ontwikkelingsworkflow. Door bijvoorbeeld te definiëren

alias mv = "mv -i"

uw terminal zal u waarschuwen als het bestand dat u gaat verplaatsen al bestaat in de nieuwe map, zodat u niet per ongeluk bestanden overschrijft die u niet wilde overschrijven.

Zodra u deze aliassen aan uw bashrc-bestand hebt toegevoegd, zijn ze altijd beschikbaar wanneer u een nieuwe shell start.

4. Bestandsrechten en sudo

Wanneer meerdere gebruikers een machine delen, is het belangrijk om dit in te stellen bestandsrechten die bepalen welke gebruiker welke bewerkingen op welke gegevens kan uitvoeren. Wanneer u typt ls -l, ziet u de bestanden in uw huidige map samen met hun machtigingen in de volgende vorm:

-rwxrwxrwx

Hier

  • rwx staan ​​voor respectievelijk lees-, schrijf- en uitvoeringsrechten
  • de 3 rwx blokken zijn voor (1) gebruiker, (2) gebruikersgroep en (3) alle anderen. In het gegeven voorbeeld hebben alle drie deze entiteiten lees-, schrijf- en uitvoerrechten.
  • het streepje geeft aan dat dit een bestand is. In plaats van het streepje zie je ook een d voor map of l voor een symbolische link.

U kunt bestandsrechten bewerken met chmod. Als u bijvoorbeeld een bestand voor uzelf uitvoerbaar wilt maken, typt u

chmod u+x mijn_programma.py

👉Als een bestand uitvoerbaar is, hoe weet de shell dan hoe het moet worden uitgevoerd? Dit wordt aangegeven met een 'hashbang' in de eerste rij van het bestand, bijvoorbeeld #!/bin/bash voor een bash-script of #!/bin/python voor een Python-script.

Ten slotte is er een speciale 'supergebruiker' die alle rechten heeft voor alle bestanden. U kunt elke opdracht uitvoeren terwijl de supergebruiker schrijft sudo vóór dat bevel. Je kunt ook een zelfstandige sudo-shell starten door uit te voeren

sudo su

⚠️Gebruik sudo met zorg. Met sudo kunt u wijzigingen aanbrengen in de code die de hardware van uw computer bestuurt, en een fout kan uw machine onbruikbaar maken. Bedenk dat met grote macht een grote verantwoordelijkheid gepaard gaat.

5. Streaming en leidingen

De streaming operator > stuurt de uitvoer van een programma door naar een bestand. >> doet hetzelfde, maar voegt het toe aan een bestaand bestand in plaats van het te overschrijven, als het al bestaat. Dit is handig om uw eigen programma's als volgt te loggen:

python my_program.py > logbestand

Een ander handig concept is bies: x | y voert programma x uit, en stuurt de uitvoer van x naar programma y. Bijvoorbeeld:

  • cat log.txt | tail -n5 : drukt de laatste 5 regels van log.txt af
  • cat log.txt | head -n5 : drukt de eerste 5 regels van log.txt af
  • cat -b log.txt | grep error : toont alle regels in log.txt die de string 'error' bevatten, samen met het regelnummer (-b)

6. Banen beheren

Als u een programma vanaf uw opdrachtregel uitvoert (bijv python run.py), wordt het programma standaard uitgevoerd in de voorgronden voorkomen dat u iets anders doet totdat het programma klaar is. Terwijl het programma op de voorgrond draait, kunt u:

  • type control+C, dat een SIGINT-signaal (signal interrupt) naar het programma stuurt, dat de machine instrueert het programma onmiddellijk te onderbreken (tenzij het programma een manier heeft om deze signalen intern af te handelen).
  • typ control+Z, waardoor het programma wordt gepauzeerd. Na het pauzeren kan het programma worden voortgezet door het naar de voorgrond te brengen (fg), of door het naar de achtergrond te sturen (bg).

Om uw opdracht meteen op de achtergrond te starten, gebruikt u de & telefoniste:

python run.py &

👉 Hoe weet je welke programma's momenteel op de achtergrond draaien? Gebruik de opdracht jobs. Hierdoor worden de namen van de lopende taken weergegeven, evenals hun proces-ID's (PID's).

Tenslottekill is een programma dat signalen verzendt naar programma's die op de achtergrond draaien. Bijvoorbeeld,

  • kill -STOP %1 zendt een STOP-signaal, waardoor programma 1 wordt gepauzeerd.
  • kill -KILL %1 stuurt een KILL-signaal, waardoor programma 1 definitief wordt beëindigd.
Vier terminalvensters op de terminal van mijn persoonlijke Macbook met tmux (afbeelding door de auteur).

7. tmux

tmux ('terminal multiplexer') stelt u in staat eenvoudig nieuwe terminals aan te maken en daartussen te navigeren. Dit kan uiterst handig zijn; u kunt bijvoorbeeld één terminal gebruiken om door uw bestandssysteem te navigeren en een andere terminal om taken uit te voeren. Met tmux kun je deze zelfs naast elkaar gebruiken.

👉 Een andere reden om tmux te leren is ontwikkelen op afstand: wanneer je uitlogt bij een externe machine (opzettelijk of per ongeluk), worden alle programma's die actief in je shell draaiden automatisch beëindigd. Aan de andere kant, als u uw programma's in een tmux-shell uitvoert, kunt u eenvoudigweg het tmux-venster loskoppelen, uitloggen, uw computer sluiten en later naar die shell terugkeren alsof u nooit bent uitgelogd.

Hier zijn enkele basisopdrachten om u op weg te helpen met tmux:

  • tmux new -s run creëert een nieuwe terminalsessie met de naam 'run'
  • control-BD: maak dit venster los
  • tmux a : hechten aan laatste venster
  • tmux a -t run : hechten aan venster met de naam 'run'
  • control-B“: voeg hieronder nog een terminalpaneel toe
  • control-B%: voeg nog een terminalvenster aan de rechterkant toe
  • control-B➡️: ga naar het terminalvenster naar rechts (vergelijkbaar voor links, omhoog, omlaag)

8. SSH en sleutelparen

ssh is een programma voor het inloggen op externe machines. Om in te loggen op externe machines, moet u een gebruikersnaam en wachtwoord opgeven, of u gebruikt een sleutelpaar, bestaande uit een openbare sleutel (waartoe beide machines toegang hebben) en een privésleutel (waartoe alleen uw eigen machine toegang heeft). heeft toegang tot).

ssh-keygen is een programma voor het genereren van zo'n sleutelpaar. Als je vlucht ssh-keygen, wordt standaard een openbare sleutel gemaakt met de naam id_rsa.pub en een privésleutel met de naam id_rsaen plaats beide in uw ~/.ssh map. U moet de openbare sleutel aan de externe machine toevoegen, wat u, zoals u inmiddels zou moeten weten, kunt doen door samen te lassen cat, ssh, en een streamingoperator:

kat .ssh/id_rsa.pub | ssh gebruiker@remote 'cat >> ~/.ssh/authorized_keys'

Nu kun je ssh op afstand gebruiken door simpelweg je privésleutel op te geven:

ssh remote -i ~/.ssh/id_rsa

Een nog betere gewoonte is om een ​​bestand te maken ~/.ssh/config die al uw ssh-authenticatieconfiguraties bevat. Als uw config bestand is als volgt:

Host-ontwikkelaar
Hostnaam op afstand
Identiteitsbestand ~/.ssh/id_rsa

Vervolgens kunt u op afstand inloggen door simpelweg te typen ssh dev.

9. git

git is een versiebeheersysteem waarmee u efficiënt door de versiegeschiedenis en vertakkingen van uw code kunt navigeren vanaf de opdrachtregel.

👉Houd daar rekening mee git is niet hetzelfde als GitHub: git is een zelfstandig programma dat de versiebeheer van uw code op uw lokale laptop kan beheren, terwijl GitHub een plek is om uw code op afstand te hosten.

Hier zijn enkele essentiële git-opdrachten:

  • git add : specificeert welke bestanden u in de volgende commit wilt opnemen
  • git commit -m 'my commit message' : voert de codewijziging door
  • git checkout -b dev : maakt een nieuwe branch aan met de naam 'dev' en bekijk die branch
  • git merge dev : voegt dev samen met de huidige branch. Als hierdoor samenvoegconflicten ontstaan, moet u deze conflicten handmatig oplossen en vervolgens uitvoeren git add file_that_changed; git merge --continue
  • git stash : zet alle wijzigingen terug, en git stash pop brengt ze terug. Dit is handig als u wijzigingen in de hoofdvertakking hebt aangebracht en vervolgens besluit dat u deze wijzigingen eigenlijk in een afzonderlijke vertakking wilt hebben.
  • git reset --hard : zet alle wijzigingen permanent terug

En hier zijn enkele essentiële git-opdrachten voor het omgaan met een externe host (bijvoorbeeld GitHub):

  • git clone : kloont een kopie van de coderepository naar uw lokale computer
  • git push origin master : pusht de wijzigingen naar de externe host (bijv. GitHub)
  • git pull : haalt de nieuwste versie van de afstandsbediening. (Dit is hetzelfde als hardlopen git fetch; git merge;).

👉 Voordat u een opdracht kunt uitvoeren zoals git push origin master, moet je je authenticeren met een ssh-sleutelpaar (zie les 8). Als u GitHub gebruikt, kunt u eenvoudig de openbare sleutel onder uw profielinstellingen plakken.

10. vim

Vim is een krachtige op de opdrachtregel gebaseerde teksteditor. Het is een goed idee om op zijn minst de basiscommando's in vim te leren:

  • zo nu en dan moet u mogelijk inloggen op een externe machine en daar een codewijziging doorvoeren. vim is een standaardprogramma en daarom meestal beschikbaar op elke machine waarop u werkt.
  • tijdens het rennen git commit, standaard opent git vim voor het schrijven van een commit-bericht. U wilt dus op zijn minst weten hoe u een bestand schrijft, opslaat en sluit.

Het belangrijkste dat u over vim moet begrijpen, is dat er verschillende bedieningsmodi zijn. Zodra je vim start, ben je binnen navigatiemodus:, waarmee u door het bestand navigeert. Type i beginnen bewerkingsmodus, waarin u wijzigingen in het bestand kunt aanbrengen. Typ de Esc toets om de bewerkingsmodus te verlaten en terug te keren naar de navigatiemodus.

Het handige van de navigatiemodus is dat je snel door het bestand kunt navigeren en het bestand kunt manipuleren met je toetsenbord, bijvoorbeeld:

  • x verwijdert een teken
  • dd verwijdert een hele rij
  • b (terug) gaat naar het vorige woord, n (volgende) gaat naar het volgende woord
  • :wq slaat uw wijzigingen op en sluit het bestand
  • :q! negeert uw wijzigingen en sluit het bestand

Voor meer (veel meer!) vim-sneltoetsen, ga naar deze vim-cheatsheet.

Foto door Vasili Koloda on Unsplash

Laatste gedachten

Gefeliciteerd, u heeft 'opdrachtregelwizard 101' voltooid. We hebben hier echter alleen maar het oppervlak bekrast. Beschouw ter inspiratie het volgende probleem:

“Gegeven een tekstbestand en een geheel getal k, print het kmeest voorkomende woorden in het bestand (en het aantal keren dat ze voorkomen) in afnemende frequentie.”

Als datawetenschapper kan mijn eerste impuls zijn om een ​​jupyter-notebook te lanceren, de gegevens misschien in panda's te laden en vervolgens een functie zoals panda's te gebruiken. agg. Maar voor een doorgewinterde opdrachtregelwizard: dit is een oneliner:

tr -cs A-Za-z '' | tr AZ az | sorteer | uniq -c | sorteer -rn | sed ${1}q

Dit ziet er niet veel anders uit dan de verbeelding van Stable Diffusion die in het begin van dit artikel werd getoond. Tovenarij, inderdaad.

Hoe u een opdrachtregelwizard kunt worden. Opnieuw gepubliceerd vanuit bron https://towardsdatascience.com/how-to-become-a-command-line-wizard-5d78d75fbf0c?source=rss—-7f60cf5620c9—4 via https://towardsdatascience. com/feed

<!–

->

Tijdstempel:

Meer van Blockchain-adviseurs