Den mest nyttige informatikkklassen du sannsynligvis aldri har tatt
One ting jeg konsekvent har observert gjennom karrieren min er at de mest produktive dataviterne og ingeniørene vanligvis har én ting til felles: de er kommandolinjeveivisere. De kan navigere i datamaskinens filsystem, søke etter mønstre i loggfiler og administrere jobber, kildekode og versjonskontroll alt fra kommandolinjen, uten å stole på treg navigering med musen og grafiske brukergrensesnitt.
Likevel er denne kommandolinje "trolldom", som den kan virke for noen som ikke er kjent med skallverktøy, vanligvis ikke en del av standard læreplaner for informatikk. An MIT kurs rundt mestring av kommandolinjen heter det passende "Det manglende semesteret av CS-utdanningen din".
Dette innlegget er min personlige 10-leksjons 'command-line wizardry 101'-klasse, rettet mot lesere som ønsker å jobbe mer med kommandolinjen og mindre med grafiske brukergrensesnitt. Vi vil dekke grunnleggende rundt skallet og banevariabelen, aliaser, filtillatelser, streaming og rørføring, effektiv jobbadministrasjon, tmux, ssh, git og vim.
La oss komme i gang. Velkommen til CLW 101.
1. Skallet
Når du åpner terminalen, ser du på en shell, for eksempel bash (borne again shell) eller ZSH (z-shell). Skallet er virkelig et komplett programmeringsspråk med tilgang til visse standardprogrammer som tillater filsystemnavigering og datamanipulering. Du kan finne ut hvilket skall du kjører ved å skrive:
ekko $ SHELL
I bash, hver gang du starter et nytt skall, laster skallet en sekvens av kommandoer som er spesifisert i .bashrc
fil, som vanligvis er i hjemmekatalogen din (hvis du bruker en Mac, er det vanligvis en .bash_profile
fil i stedet). I den filen kan du spesifisere nyttige ting som din banevariabel eller aliaser (mer om hvilke nedenfor).
2. Stivariabelen
Når du skriver inn navnet på visse programmer i skallet ditt, for eksempel python
, cat
eller ls
, hvordan vet skallet hvor det programmet skal hentes fra? Det er hensikten med banevariabel. Denne variabelen lagrer en liste over alle stier der skallet ser etter programmer, atskilt med kolon. Du kan inspisere banevariabelen ved å skrive:
ekko $ PATH
Og du kan legge til flere kataloger til banevariabelen din med denne kommandoen:
eksport PATH="my_new_path:$PATH"
Det er best å legge til denne kommandoen i bashrc-filen din, slik at den ekstra katalogen din alltid er i veien når du starter et nytt skall.
3. Aliaser
Aliaser er egendefinerte kommandoer som du kan definere for å unngå å skrive lange kommandoer om og om igjen, for eksempel:
alias ll="ls -lah"
alias gs="git status"
alias gp="git push origin master"
Aliaser kan også brukes til å skape sikkerhetstiltak for utviklingsarbeidsflyten din. For eksempel ved å definere
alias mv="mv -i"
terminalen din vil advare deg hvis filen du skal flytte allerede eksisterer under den nye katalogen, slik at du ikke ved et uhell overskriver filer som du ikke mente å overskrive.
Når du legger til disse aliasene i bashrc-filen din, er de alltid tilgjengelige når du starter et nytt skall.
4. Filtillatelser og sudo
Når flere brukere deler en maskin, er det viktig å stille inn filtillatelser som bestemmer hvilken bruker som kan utføre hvilke operasjoner på hvilke data. Når du skriver ls -l
, vil du se filene i din nåværende katalog sammen med deres tillatelser i følgende skjema:
-rwxrwxrwx
Her
rwx
står for henholdsvis lese-, skrive- og utførelsesrettigheter- den 3
rwx
blokker er for (1) bruker, (2) brukergruppe og (3) alle andre. I det gitte eksemplet har alle 3 av disse enhetene lese-, skrive- og kjøretillatelser. - bindestreken indikerer at dette er en fil. I stedet for bindestreken kan du også se en
d
for katalog ellerl
for en symbolsk lenke.
Du kan redigere filtillatelser med chmod
. For eksempel, hvis du vil gjøre en fil kjørbar for deg selv, skriver du
chmod u+x my_program.py
👉 Hvis en fil er kjørbar, hvordan vet skallet hvordan den skal kjøres? Dette er spesifisert med en 'hashbang' i den første raden i filen, som f.eks
#!/bin/bash
for et bash-manus eller#!/bin/python
for et python-skript.
Til slutt er det en spesiell "superbruker" som har alle tillatelsene for alle filene. Du kan kjøre hvilken som helst kommando mens den superbrukeren skriver sudo
foran den kommandoen. Du kan også starte et frittstående sudo-skall ved å kjøre
sudo su
⚠️ Bruk sudo med forsiktighet. Med sudo kan du gjøre endringer i koden som styrer datamaskinens maskinvare, og en feil kan gjøre maskinen ubrukelig. Husk, med stor makt følger stort ansvar.
5. Streaming og rørføring
De streaming operatør >
omdirigerer utdata fra et program til en fil. >>
gjør det samme, men den legger til en eksisterende fil i stedet for å overskrive den, hvis den allerede eksisterer. Dette er nyttig for å logge dine egne programmer som dette:
python my_program.py > loggfil
Et annet nyttig konsept er piping: x | y
kjører program x, og sender utdataene fra x til program y. For eksempel:
cat log.txt | tail -n5
: skriver ut de siste 5 linjene fra log.txtcat log.txt | head -n5
: skriver ut de første 5 linjene fra log.txtcat -b log.txt | grep error
: viser alle linjer i log.txt som inneholder strengen 'feil', sammen med linjenummeret (-b)
6. Administrere jobber
Hvis du kjører et program fra kommandolinjen (f python run.py
), vil programmet som standard kjøre i forgrunnen, og hindre deg i å gjøre noe annet før programmet er ferdig. Mens programmet kjører i forgrunnen, kan du:
- type kontroll+C, som vil sende et SIGINT (signalavbrudd) signal til programmet, som instruerer maskinen om å avbryte programmet umiddelbart (med mindre programmet har en måte å håndtere disse signalene internt).
- skriv kontroll+Z, som vil sette programmet på pause. Etter pause kan programmet fortsette enten ved å bringe det i forgrunnen (
fg
), eller ved å sende den til bakgrunnen (bg
).
For å starte kommandoen i bakgrunnen med en gang, bruker du &
operatør:
python run.py &
👉 Hvordan vet du hvilke programmer som kjører i bakgrunnen for øyeblikket? Bruk kommandoen
jobs
. Dette vil vise navnene på jobbene som kjører, samt deres prosess-IDer (PID).
Til slutt,kill
er et program for å sende signaler til programmer som kjører i bakgrunnen. For eksempel,
kill -STOP %1
sender et STOPP-signal og setter program 1 på pause.kill -KILL %1
sender et KILL-signal og avslutter program 1 permanent.
7. tmux
tmux
('terminal multiplexer') lar deg enkelt opprette nye terminaler og navigere mellom dem. Dette kan være svært nyttig, for eksempel kan du bruke en terminal til å navigere i filsystemet og en annen terminal til å utføre jobber. Med tmux kan du til og med ha begge disse side om side.
👉 En annen grunn til å lære tmux er ekstern utvikling: når du logger ut av en ekstern maskin (enten med vilje eller ved et uhell), blir alle programmene som aktivt kjørte inne i skallet ditt, automatisk avsluttet. På den annen side, hvis du kjører programmene dine i et tmux-skall, kan du ganske enkelt koble fra tmux-vinduet, logge ut, lukke datamaskinen og komme tilbake til det skallet senere som om du aldri har vært logget ut.
Her er noen grunnleggende kommandoer for å komme i gang med tmux:
tmux new -s run
oppretter ny terminaløkt med navnet 'run'- control-BD: løsne dette vinduet
tmux a
: fester til siste vindutmux a -t run
: fest til vindu kalt 'kjør'- control-B“ : legg til en annen terminalrute nedenfor
- kontroll-B% : legg til en annen terminalrute til høyre
- control-B➡️ : flytt til terminalruten til høyre (liknende for venstre, opp, ned)
8. SSH og nøkkelpar
ssh
er et program for å logge på eksterne maskiner. For å logge på eksterne maskiner, må du enten oppgi brukernavn og passord, eller du bruker et nøkkelpar som består av en offentlig nøkkel (som begge maskinene har tilgang til) og en privat nøkkel (som kun din egen maskin) har tilgang til).
ssh-keygen
er et program for å generere et slikt nøkkelpar. Hvis du løper ssh-keygen
, vil den som standard opprette en offentlig nøkkel kalt id_rsa.pub
og en privat nøkkel kalt id_rsa
, og plasser begge i din ~/.ssh
katalog. Du må legge til den offentlige nøkkelen til den eksterne maskinen, som du, som du burde vite nå, kan gjøre ved å koble sammen cat
, ssh
, og en strømmeoperatør:
cat .ssh/id_rsa.pub | ssh user@remote 'cat >> ~/.ssh/authorized_keys'
Nå vil du kunne bruke ssh til fjernkontrollen bare ved å oppgi din private nøkkel:
ssh fjernkontroll -i ~/.ssh/id_rsa
En enda bedre praksis er å lage en fil ~/.ssh/config
som inneholder alle ssh-autentiseringskonfigurasjonene dine. For eksempel hvis din config
filen er som følger:
Host dev
HostName fjernkontroll
IdentityFile ~/.ssh/id_rsa
Deretter kan du logge på fjernkontrollen ved å skrive ssh dev
.
9. git
git
er et versjonskontrollsystem som lar deg effektivt navigere i kodens versjonshistorikk og grener fra kommandolinjen.
👉 Merk det
git
er ikke det samme som GitHub:git
er et frittstående program som kan administrere kodens versjonering på din lokale bærbare datamaskin, mens GitHub er et sted å hoste koden din eksternt.
Her er noen viktige git-kommandoer:
git add
: spesifiserer hvilke filer du vil inkludere i neste commitgit commit -m 'my commit message'
: begår kodeendringengit checkout -b dev
: oppretter en ny gren kalt 'dev' og sjekk ut den grenengit merge dev
: slår sammen dev til gjeldende gren. Hvis dette skaper flettekonflikter, må du fikse disse konfliktene manuelt og deretter kjøregit add file_that_changed; git merge --continue
git stash
: tilbakestiller alle endringer, oggit stash pop
bringer dem tilbake. Dette er nyttig hvis du har gjort endringer i hovedgrenen, og deretter bestemmer deg for at du faktisk vil at disse endringene skal være en separat gren.git reset --hard
: tilbakestiller alle endringer permanent
Og her er noen viktige git-kommandoer for å håndtere en ekstern vert (f.eks GitHub):
git clone
: kloner en kopi av koden repo til din lokale maskingit push origin master
: sender endringene til den eksterne verten (f.eks. GitHub)git pull
: henter den nyeste versjonen fra fjernkontrollen. (Dette er det samme som å løpegit fetch; git merge;
).
👉 Før du kan kjøre en kommando som f.eks
git push origin master
, må du autentisere med et ssh-nøkkelpar (se leksjon 8). Hvis du bruker GitHub, kan du ganske enkelt lime inn den offentlige nøkkelen under profilinnstillingene dine.
10. vim
Vim er en kraftig kommandolinjebasert tekstredigerer. Det er en god idé å lære i det minste de helt grunnleggende kommandoene i vim:
- av og til må du kanskje logge på en ekstern maskin og gjøre en kodeendring der. vim er et standardprogram og derfor vanligvis tilgjengelig på alle maskiner du jobber med.
- når du løper
git commit
, som standard åpner git vim for å skrive en commit-melding. Så i det minste vil du vite hvordan du skriver, lagrer og lukker en fil.
Det viktigste å forstå om vim er at det er forskjellige driftsmoduser. Når du starter vim, er du inne navigasjonsmodus, som du bruker til å navigere gjennom filen. Type i
å starte redigeringsmodus, der du kan gjøre endringer i filen. Skriv inn Esc
tasten for å gå ut av redigeringsmodus og gå tilbake til navigasjonsmodus.
Det nyttige med navigasjonsmodus er at du raskt kan navigere og manipulere filen med tastaturet, for eksempel:
x
sletter et tegndd
sletter en hel radb
(tilbake) går til forrige ord,n
(neste) går til neste ord:wq
lagrer endringene og lukker filen:q!
ignorerer endringene dine og lukker filen
For flere (mye mer!) vim-tastatursnarveier, sjekk ut dette vim juksearket.
Avsluttende tanker
Gratulerer, du har fullført 'command line wizardry 101'. Vi har imidlertid bare skrapet i overflaten her. For inspirasjon, vurder følgende problem:
"Gitt en tekstfil og et heltall
k
, skriv utk
de vanligste ordene i filen (og antallet forekomster av dem) i synkende frekvens."
Som dataforsker kan min første impuls være å starte en Jupyter-notisbok, laste inn dataene kanskje i pandaer, og deretter bruke en funksjon som pandaer agg
. Men til en erfaren kommandolinjeveiviser, dette er en one-liner:
tr -cs A-Za-z '' | tr AZ az | sortere | uniq -c | sorter -rn | sed ${1}q
Dette ser ikke så forskjellig ut fra Stable Diffusions fantasi vist i begynnelsen av denne artikkelen. Trolldom, faktisk.
Hvordan bli en kommandolinjeveiviser Republisert fra kilde https://towardsdatascience.com/how-to-become-a-command-line-wizard-5d78d75fbf0c?source=rss—-7f60cf5620c9—4 via https://towardsdatascience. no/feed
<!–
->
- Bitcoin
- bizbuildermike
- blockchain
- blockchain-overholdelse
- blockchain konferanse
- Blockchain-konsulenter
- coinbase
- coingenius
- Konsensus
- kryptokonferanse
- krypto gruvedrift
- cryptocurrency
- desentralisert
- Defi
- Digitale eiendeler
- ethereum
- maskinlæring
- ikke soppbart token
- plato
- plato ai
- Platon Data Intelligence
- Platoblokkjede
- PlatonData
- platogaming
- polygon
- bevis på innsatsen
- W3
- zephyrnet