Bash 101: Arbeid på CLI

Kommandolinjen kan være svært skremmende for nye brukere. Å måtte bruke kommandolinjen er en av de viktigste klager og frykt for mange brukere som venture i Linux. Men det trenger ikke å være skremmende, og du trenger ikke å vite alt for å dyppe tåa i og finne ut hvor nyttig CLI kan være.

Når vi snakker om kommandolinjen på Linux, vi vanligvis snakker om GNU Bash. I denne opplæringen, vil jeg vise noen av de grunnleggende om Bash uten å bli for dypt inn Bash funksjonalitet. Dette betyr at jeg skal skumme over mye at flere ekspertbrukere allerede vet, men prøver å gi en fornuftig oversikt for nye brukere som ikke er (ennå) gung-ho om bruk av CLI.

Hva er Bash ?

Bash er skallet for de fleste store Linux-distribusjoner. Hvis du kjører opensuse, Ubuntu, Fedora, Slackware, Mandriva, så når du er på en konsoll eller har en terminal åpen, du jobber med Bash. Navnet "Bash" er faktisk modellert etter Bourne skall, et skall som ble opprettet av Stephen Bourne og distribuert med Unix starter i slutten av 1970-tallet. Den "Bourne Again Shell" emulerer den originale Bourne shell på mange måter, men legger også til en rekke funksjoner og kjører på langt flere operativsystemer enn den opprinnelige.

Hvis du er nytt kvartal til Linux, har du sikkert hørt en god del snakk om "skall", men kan ikke være helt klar på hva som blir diskutert. I utgangspunktet er skallet et brukergrensesnitt. Shell er ikke synonymt med kommandolinjen. Når du bruker en skrivebordsmiljø som GNOME, tar et skall (i tilfelle av GNOME, Nautilus) kommandoer fra brukeren og forteller operativsystemet hva de skal gjøre. Det er en drastisk forenkling, men den grunnleggende ideen er at skallet er grensesnittet til datamaskinen.

Det er litt mer enn det også. Bash er også "kommandoen tolk", som er å si at det kjører skript ikke-interaktivt. De samme kommandoene som du bruker på kommandolinjen kan settes sammen og kjøres som et program.

er Bash ikke den eneste skall spillet i byen, bare de mest populære. De fleste Linux store Linux distroer skip med GNU Bash som standard, men du vil vanligvis finne alternative skjell i pakken repositories. I tillegg til Linux, er GNU Bash leveres med Mac OS X, og Bash er tilgjengelig for omtrent alle operativsystem du ønsker å kjøre. Andre Unix-type operativsystemer vanligvis skip med andre skjell som standard, men du kan installere Bash på dem lett nok. Kjører alternative skjell på Linux eller Bash på andre operativsystemer er litt utenfor omfanget av denne opplæringen, men det er alltid godt å vite at det finnes alternativer.

kjører kommandoer

La oss starte med å kjøre en noen kommandoer på skallet. Du har sikkert allerede hatt minst en liten erfaring med skallet spørsmål. Vanligvis hvis du er logget inn som en vanlig bruker, vil du se noe som dette:


 user @ LUN: ~ $ 


De fleste distroer satt opp standard for å vise en $ rask hvis du er logget inn som en vanlig bruker og en # rask hvis du er logget inn som root. Noen tutorials og guider vise hver kommando og skallet kjapp i eksempler. Jeg vil bare vise kommandoene som du skal bruke. Det er godt å huske på at det er ingen "angre" i bash, så vær forsiktig. Du kan imidlertid fortelle bash for å prøve å hindre at minst en vanlig feil - skrive filer. Gjør dette ved å bruke settet kommandoen:


 set -o noclobber 


Som du sikkert gjettet, "noclobber" forteller bash at det ikke bør overskrive eksisterende filer når produksjonen er omdirigert til dem. Når noclobber ikke er satt, vil en kommando som dette overskrive målfilen:

 cp fil1 file2 

Så hvis "file2" eksisterer, vil den bli overskrevet uten kommentar. Det er slik de fleste Linux-brukere liker det. Men hvis du er ekstra forsiktige, vil sette noclobber alternativet viser dette:

 bash: file2: kan ikke overskrive eksisterende fil 

Hvis det var ingen "file2" og deretter bash ville gjerne skrive til den. Men siden en fil med det navnet finnes, nekter den å overskrive den. Hvis du virkelig
vil overskrive den, kan du legge den -f (force) muligheten til å cp:

 cp -f fil1 file2 

finner jeg den "noclobber" muligheten til å være irriterende, men det kan være en god ting å sette mens du bli vant til skallet.

Kjøre kommandoer

Det er nyttig å kunne kjøre enkle kommandoer (som vim) fra shell, men enda mer nyttig for å få dem som arbeider sammen. De fleste skallkommandoer og verktøy du finner på et Unix-basert system er ment å ta inn og produsere et resultat som kan brukes av andre programmer i skallet.

For eksempel på opensuse Jeg pleier å bruke den zypper kommando skallet til å styre pakker. Noen ganger ønsker jeg å se etter et nytt stykke programvare, og søkeordet produserer for mange resultater. Jeg kan kombinere zypper kommandoen med grep for å begrense disse resultatene:

 zypper se vim | grep Editor 

| i midten kalles en "pipe" og omdirigeringer output fra den første kommandoen (zypper se vim) til grep, som deretter søker etter strengen "Editor".

Hva om du ønsker å kjøre et par kommandoer på rad? Du kan skrive dem i en om gangen, eller du kan kjede dem med bash operatører. Du har allerede sett hvordan du bruker den grunnleggende røret. En annen måte er å kjøre kommandoen sekvensielt ved å skille dem med et semikolon, som dette:

 Command1; Command2 

Det forteller skallet å kjøre Command1 og deretter når den er ferdig, gå videre til Command2. Du kan også fortelle skallet å kjøre Command1 og deretter Command2 bare hvis den første kommandoen er vellykket med "og" (&&) operatør:

 Command1 &&Command2 

Alternativt kan du fortelle skallet til å kjøre en kommando, og deretter følge opp med en ny kommando om den neste kommandoen er mislykket ved å bruke "eller" operator som så:

 Command1 || Command2 

Dette kan være veldig nyttig når du skriver skall-skript. Det er litt utenfor rammen av denne opplæringen, men disse aktørene kommer i spesielt nyttig når man skal vurdere om en kommando er eller ikke er vellykket.

Navigering Shell

Når du er på skallet spørsmål, har du noen kraftige redigeringsmuligheter på fingertuppene, men det er ikke opplagt på først.

Som standard bruker Bash Emacs-lignende snarveier for å flytte rundt på kommandolinjen. Dette kan spare deg for mye tid å måtte skrive ting hvis du oppgi en lang kommando som dette og deretter innse at den første kommandoen er feilstavet, eller du glemte å legge til "sudo" foran det:

 zypper se - t mønster -r repo-oss 

Vil du skrive inn at hvis du glemte å legge til "sudo" i begynnelsen? Selvfølgelig ikke. I stedet kan du skrive Ctrl-en, og markøren vil flytte til begynnelsen av kommandolinjen. Skrive Ctrl-e vil flytte deg til slutten av kommandolinjen. Her er noen av de bevegelseskommandoer som vil spare deg for masse å skrive tid:

Ctrl-a: Flytt til begynnelsen av linjen

Ctrl-e. Flytt til . enden av linjen

Ctrl-k: Slett teksten fra markøren til slutten av linjen

Ctrl-w:.. Slett forrige ord

Alt -d: Slett det neste ordet

Alt-f.. Flytte frem et ord

Alt-b: Flytt bakover et ord

Ctrl-n. Rull ned i historien

Ctrl-p:. Bla opp i historien

Vi vil komme til historien ting i bare et øyeblikk. Merk at piltastene på tastaturet vanligvis
fungere like bra, men det er godt å vite at andre kommandoer også.

Hvis du er kjent med Vim og vi-som tastetilordninger, er det mulig å fortelle bash å bruke vi-som tastetilordninger stedet. Selvfølgelig, hvis du er kjent med vi-som tastetilordninger, din sannsynligvis ganske kjent med skall, også! Hvis du vil angi dette, kjører "set -o vi" og bash vil bytte til vi-som tastetilordninger. Den vil starte i innsettingsmodus, så hvis du ønsker å bruke VI bevegelser, traff Esc først.

En annen nyttig funksjon er kategorien ferdigstillelse. Når du skriver en kommando eller filnavn, prøve å skrive de første tegnene og deretter trykke Tab. Hvis det er bare én kommando eller filnavn som passer, vil bash automatisk fullføre det for deg. Så, for eksempel, hvis du skriver noe sånt som "-kommandoen reallylongfilename" og du skriver "reallyTAB" bash bør fylle filnavnet. Dette kan spare mye tid og krefter å skrive.

Bash vil også sette inn den siste strengen på en kommandolinje i neste kommando hvis du bruker ESC-. Hvis den siste kommandoen var noe sånt som "mkdir Katalog" du kan da skrive "cd ESC-." og bash vil bytte i "Katalog" til kommandolinjen.

Multitasking og Jobs

Når du bruker en skrivebordsmiljø som KDE eller GNOME, er det lett å se multitasking i aksjon fordi du kan se flere programmer som kjører samtidig. Du vil bare se resultatet av en kommando om gangen (eller en serie med kommandoer), men bash er i stand til å kjøre programmer i bakgrunnen mens du gjør noe i forgrunnen.

La oss si at du kick off en jobb som kommer til å ta lang tid å kjøre, som gzipping en virkelig stor fil. Hvis du starter det med en og det vil fortelle bash å kjøre den i bakgrunnen:

 gzip really_big_file &

Hvis du glemmer å legge til og eller det viser seg at et program er å ta mye lengre tid å kjøre enn du forventet, kan du stoppe den ved å bruke Ctrl-z. Dette vil stoppe jobben og returnere bash teksten.

Jobben kan holde stanset på ubestemt tid. Eller du kan starte den opp igjen og kjøre den i bakgrunnen ved hjelp av bg kommandoen. Bash vil gjerne kjøre flere jobber i bakgrunnen, eller la dem bli stoppet.

Hvis du vil teste forskjellen mellom stoppet og bakgrunn, starte en GUI applikasjon fra skallet som Gedit eller Firefox, uten å legge på &og kjør deretter Ctrl-z på skallet. Du vil se at programmet slutter å svare, fordi det er blitt stoppet. Nå kjører bg og det vil begynne å kjøre i bakgrunnen, og du kan samhandle med det igjen.

Du kan ta en jobb i forgrunnen ved å kjøre fg (forgrunnen). For CLI-apps og verktøy, betyr dette at deres produksjon vil gå til konsollen eller terminal emulator, og de vil ta inndata fra tastaturet igjen. Vær oppmerksom på at noen jobber ikke håndterer kjøres i bakgrunnen veldig godt, slik som toppen. Så igjen, det er egentlig ingen grunn til å kjøre topp i bakgrunnen uansett.

Bash er fint nok til at det ikke lar deg gå ut av skallet hvis du har forlatt jobbene som kjører i bakgrunnen. Hvis du kjører exit mens en jobb i bakgrunnen, vil bash si "Det er stoppet jobber." og nekter å gå ut. Første gang, uansett. Hvis du kjører exit en gang uten å stoppe jobben, deretter bash vil avslutte.

Hvis du vil se alle de jobbene som blir håndtert av bash bare kjøre "jobber" på skallet. Du vil se omtrent slik ut:

 [1] + Stoppet toppen [2] Kjører xload &[3] - Running xclock &

Å arbeide med de jobbene som bruker bg eller fg, angi jobbnummer . Så, for å bringe xload i forgrunnen, kjør:

 fg 2 
Historie

Bash husker hva du gjør. Når du kjører en kommando, er den lagt til din historie. Mye som nettleseren din historie, men enda mer nyttig

La oss si at du kjører en kommando med et par alternativer eller argumenter, som så.

 sudo zypper se bash 

Hvis du ønsker å re-run som befaler du kan bla opp i historien og gjen kjøre den, eller bare skrive! å kjøre den siste kommandoen.

En annen hendig triks er å bruke! kommandoen for å kjøre den siste forekomst av en bestemt kommando. Så hvis du har jobbet på shell for litt og bestemmer deg for å raskt å kjøre en kommando som du brukte tidligere, du kan bruke! Kommando og skallet vil se gjennom historien og kjøre den siste forekomst av denne kommandoen med alle alternativene. La oss si du kjøre følgende kommandoer:

 ls top cd ~ /bin vi command.sh ls 

Hvis du deretter kjøre besøke M vil det automatisk tolke det som "vi command.sh" uten å skrive! hele kommandoen. Merk at skallet erstatter ~ for ditt hjemmeområde.

Du kan også se din nyere historie ved å skrive (stor overraskelse her) "historie" på skallet. Det vil gi en nummerert liste over dine kommandoer. Du kan deretter kjøre kommandoer ved hjelp! n
, der n
er antall kommandoen du ønsker å kjøre igjen.

skrape overflaten
< p> Jeg håper at dette hjelper deg i gang på skallet. Det er mye å dekke når det gjelder å bruke kommandolinjen, og dette berører kun overflaten. Men du kan finne ganske mye nyttig info i Bash Manual i mellomtiden.