Bourne-Again skall Eksempel på bruk av Bash.
Skaper | Brian Fox |
---|---|
Utviklet av | GNU-prosjekt |
Første versjon | 8. juni 1989 |
Siste versjon | 5.1 (7. desember 2020) |
Innskudd | git.savannah.gnu.org/cgit/bash.git |
Skrevet i | VS |
Operativsystem | GNU / Linux , BSD ( d ) , macOS og Microsoft Windows |
Miljø | X86_64 og i686 ( d ) |
Les formater | Bash-skript ( d ) |
Språk | Engelsk og fransk |
Type |
Systemgrensesnitt Kommandotolk |
Tillatelse | GPL-3.0 + ( d ) |
Dokumentasjon | www.gnu.org/software/bash/manual |
Nettsted | www.gnu.org/software/bash |
Bash (akronym for Bourne-Again shell ) er en skriptlignende kommandolinjetolk. Det er Unix-skallet til GNU- prosjektet .
Basert på Bourne-skallet , gir Bash mange forbedringer til det, spesielt fra Korn-skallet og C-skallet . Bash er gratis programvare utgitt under GNU General Public License . Det er standard tolk på mange gratis Unixes , spesielt på GNU / Linux-systemer . Det var også standard skallet for Mac OS X , erstattet med macOS Catalina (10.15) av zsh . Den ble først portet til Microsoft Windows av Cygwin- prosjektet , og siden Windows 10 er et alternativ i seg selv, kalt Windows Subsystem for Linux i operativsystemet.
"Bourne igjen" er et ordspill på Bourne-skallet . Bokstavelig talt betyr Bourne igjen "Bourne igjen", men blir også uttalt nesten som født på nytt , noe som betyr "født på ny" eller "reinkarnert". Også å bash betyr "å slå hardt" på engelsk.
Brian Fox , publiserte i 1988 den første implementeringen av Bash på vegne av Free Software Foundation . Han ble senere videresendt av Chet Ramey. Det opprinnelige Bourne-skallet , som Bash ble inspirert av, ble skrevet av Stephen Bourne i 1977. Versjon 3.0 stammer fraJuli 2004, og versjon 4.0 av Februar 2009.
De 24. september 2014, blir en stor sikkerhetsfeil offentliggjort, slik at Bash kan hackes via CGI- skript . Brukerne blir deretter invitert til å lappe den for å beskytte seg mot den.
Som alle skriptede kommandolinjetolker , utfører Bash fire grunnleggende operasjoner:
Skript er korte programmer som generelt er enkle å bygge. Bash gir en strømstyringstjeneste , det vil si at resultatet av ett skript (utdata) kan overføres til et annet skript (inngang). På denne måten kan skript "lenkes", hver utfører en enkelt, veldefinert oppgave.
Skript kan utføres manuelt av brukeren eller automatisk av systemet. For eksempel, i GNU / Linux Ubuntu-distribusjonen , resume.dinneholder katalogen et antall skript som kjøres automatisk når systemet startes på nytt, det vil si etter at systemet er ferdig med å sove. Disse skriptene brukes til å starte de forskjellige programmene på nytt avbrutt av standby.
Bash er et skall som kan brukes enten i interaktiv modus eller i batch-modus:
En "økt" er det sett med handlinger som utføres av brukeren av et datasystem, mellom øyeblikket han kobler seg til det og øyeblikket han kobler fra det.
Bash brukes oftest som standard for pålogginger i GNU / Linux-distribusjoner. Det ble også funnet som standard skall under MacOS X, til Catilina- versjonen i 2019.
Økten lukkes med kommandoen exiteller Ctrl+D(slutten på filen på Unix: brukeren lukker tolkens lesestrøm).
Bash bruker biblioteket readline som lar det, som C-skallet , automatisk fullføre (autofullføre) navnene på kommandoer og filer når du skriver Tab-tasten og øke hastigheten betydelig. Opp- og Ned-tastene lar deg enkelt navigere gjennom kommandolinjen.
Redigere kommandolinjen i vi- eller Emacs-modusDet er også mulig å velge kommandolinjeredigering av en oppførsel som ligner på vi-tekstredigereren eller den for Emacs . Det er da nødvendig å bruke kommandoene set -oog set +osom endrer alternativene til skallet. Atferden deres er kontraintuitiv fordi den set -oaktiverer et alternativ mens du set +odeaktiverer det.
set -o emacsstarter redigering av kommandolinje i emacs-modus og set -o vivi-modus. Siden versjon 2.0, har en ny intern kommando er lagt til for å konfigurere oppførselen til skallet: shopt. Det er ment å erstatte konfigurasjonen av alternativer med set. Driften av shopt -oer lik set -oog for shopt +oå set +osikre kontinuitet med set.
For å tolke en linje, segmenterer Bash den i ord. Det første ordet på en linje regnes som et kommandonavn. Vi plasserer deretter "argumentene", som også kalles "parametere" for kommandoen, det vil si dataene den vil behandle, en fil for eksempel. Til slutt kan vi legge til "alternativer" som vil endre standard oppførsel for kommandoen. Disse alternativene introduseres av "-", kort bindestrek, deretter med navnet på alternativet, eller en enkelt bokstav som en snarvei. Vi legger ikke mellomrom mellom bindestrek og navnet på alternativet.
Hver tolkning av en linje respekterer følgende begrensninger:
Det er flere typer kommandonavn assosiert med forskjellige prioritetsgrader. Når vi tolker dette første ordet, følger vi den avtagende rekkefølgen av prioriteringer:
Hvis Bash ikke finner noen samsvar i aliaser, interne kommandoer eller eksterne kommandoer med det første ordet på linjen, returnerer den en feilmelding med command not foundordet skrevet øverst på linjen foran det .
I tilfelle en ekstern kommando må skallet finne programmet som tilsvarer denne kommandoen før den kan utføres. Et uttømmende søk etter hver kommando gjennom hele filsystemet ville tatt for lang tid og gjort systemet ubrukelig i praksis. Bare et lite sett med kataloger blir faktisk konsultert når du søker etter programmet som lar kommandoen utføres. Disse katalogene er definert i en miljøvariabel kalt " $ PATH ". Hvis kommandoen ikke finnes i en av katalogene som er oppført i denne variabelen, "PATH", resulterer utførelsen i en feilmelding av typen command not found.
I motsetning til hva som skjer i Windows, inkluderer Unix-skall, inkludert Bash, av sikkerhetsmessige årsaker ikke implisitt den nåværende katalogen i PATH, men den kan plasseres der eksplisitt. Dette er for å forhindre at en person installerer skadelig program i den gjeldende katalogen, som med samme navn som en ekstern kommando kan kjøre på plass hvis en bruker skriver denne kommandoen.
En metakarakter er en karakter som har en annen betydning enn dens bokstavelige betydning. "*" Representerer ikke for Bash stjernekarakteren, den leser den som en representasjon av tegnrekkefølge eller fravær av tegn. Metategn er delt inn i to klasser, de som erstatter andre tegn og de som gjør det mulig å beskytte tegn. Disse, brukt alene som i tilbakeslag, eller parvis, tvinger Bash til å lese tegn bokstavelig, det vil si at hvis det er beskyttet, mister tegnet "*" sin status som metakarakter for å bli en "stjerne " en gang til.
Det er to surrogatmetategn:
Det er tre måter å beskytte et tegn eller en tegnstreng på:
På slutten av en linje indikerer et tilbakeslag at kommandoen fortsetter på neste linje. Denne funksjonen er spesielt nyttig for store ordrer for å gjøre dem lettere å lese.
Backslash for å danne en av spesialtegnene til CStrengene med et format som ligner $'\n', der vi noterer tilstedeværelsen av tilbakeslag, tolkes på en bestemt måte av Bash. Legg merke til at tilbakeslaget skrives etter med et brev, og at gruppen er omgitt av apostrofer. I dette tilfellet er det ikke snakk om å unnslippe betydningen av en metakarakter. Dette er en måte å indikere for Bash at kombinasjonen av tilbakeslag og bokstaven representerer en spesiell karakter av C- språket som skal tolkes i henhold til reglene fastsatt av ANSI . Dermed vil 'echo $'\a'føre til et " pip ".
Følgende tabell viser disse spesialtegnene:
Eksos tilbakeslag |
Bash transformasjon |
---|---|
\på | Piper |
\ b | Avstand mellom ryggen |
\ e | Eksos |
\ f | Sideskift (det engelske navnet på denne karakteren er form feed ) |
\ikke | Linjeskift |
\ r | Vognretur |
\ t | Horisontal fane |
\ v | Vertikal fane |
\\ | Backslash |
\ ' | En apostrof (det engelske navnet på denne karakteren er sitat ) |
\ nnn | 8-biters tegn hvis oktale verdi er nnn |
\ xHH | 8-biters tegn som har den heksadesimale verdien HH |
\ cx | Kontroll-X-karakteren |
Se ASCII
Backslash før en av Bashs metategnMetategn, inkludert "*" (stjerne), tolkes ikke av Bash som bokstavelige, noe som i noen tilfeller er upraktisk. Den finner , sed kommandoer eksemplifisere dette delikat punkt. Hvis du bruker kommandoen findvi ønsket å søke i den aktuelle katalogen, representert med “. ", Og dets underkataloger, alle filene hvis navn begynner med" min ", ville man bli fristet til å skrive følgende kommandolinje. find . -name my*Men kommandoen kommer tilbake Find: Les chemins doivent précéder l'expression.
Faktisk vil Bash erstatte "min *" -strengen med listen over filer som finnes i den nåværende katalogen, som findanses å være en liste over baner, som må spesifiseres først, og ikke som navnet på filene du skal søke etter.
En løsning er å bruke et tilbakeslag før "*" -tegnet for å unnslippe det og tvinge Bash til å tolke det som en bokstavelig. Som gir find . -name my\*.
En annen løsning ville være å bruke tilbud. Vi kunne for eksempel skrivefind . -name "my*"
Ordrene | Operasjoner | Forklaringer |
---|---|---|
A & | Lag en ny fremgangsmåte ved å utstede en kommando ( konsoll avhengig ), slik at andre kommandoer som skal angis i den samme konsoll. | |
( A & ) | Samme som kommandoen ovenfor, men denne gangen er den opprettede prosessen uavhengig av konsollen. | |
A && B | Logisk AND ( && ) | Utfør B hvis A lykkes .
B hvis A OK |
A || B | Utfør B bare hvis A mislykkes .
B hvis A KO |
|
A `B` | dynamiske parametere | A bruker resultatene av å kjøre B |
A $(B) |
Hver ordre er assosiert med tre flyter:
Eventuelt kan flere filbeskrivelser knyttes til en kommando.
Metode for bruk:
Ordrene | Operasjoner | Forklaringer |
---|---|---|
A > fichier | exit ( > ) | Utfør A-kommandoen og omdiriger standardutdata ( stdout ) til fil ved å overskrive innholdet eller ved å opprette fil hvis den ikke eksisterer |
A >> fichier | exit ( >> ) | Utfør kommando A og omdiriger standardutdata til slutten av filen |
A 2> fichier | exit ( 2> ) | Utfør A-kommandoen og omdiriger standard feilutdata ( stderr ) til fil ved å overskrive innholdet eller ved å opprette fil hvis den ikke eksisterer |
A 2>> fichier | exit ( 2 >> ) | Utfør kommando A og omdiriger standard feilutdata til slutten av filen |
A 2>&1 | utgang ( 2> og 1 ) | Utfør kommando A og omdiriger standard feilutdata til standardutgang |
A < fichier | oppføring ( < ) | Utfør En kommando passerer den filen innholdet i sin standard inngang ( stdin ) |
A | B | exit, entry ( | ) | Utfør A og send innholdet av standardutgangen til standardinngangen til B |
Bruk
Variabler refereres ved å gå foran dem med tegnet $ (eksempel ekko $ HOME ).
Noen miljøvariabler : USER , PID , HOME , PATH og SHELL .
I en kommandolinje erstatter vi en kommando som argument med resultatet (i stdout ) ved å omgi den med omvendte anførselstegn `kommandonavn` eller ved å bruke $ () ( $ (kommandonavn) ).
Regulære uttrykk eller regulære uttrykk brukes til å beskrive karakterstrenger. To kategorier kan skelnes blant disse. De liter , som er normale tegn behandles som sådan, og jokere som er symbolene har betydning for et søk. Vi har allerede diskutert karakterene *og over ?. Det er mulig å avgrense beskrivelsen av mønsteret du leter etter, og angi plasseringen.
Så ^representerer starten på en linje og $slutten. For eksempel ^terrepresenterer alle linjene som begynner med terog ter$alle de som slutter med ter.
Metategn representerer også karakterklasser. For eksempel sci[ea]ncerepresenterer innholdet i parentes en logisk ELLER. Er representert scienceog sciance. Ved hjelp av parentes er det også mulig å definere intervaller, du må legge til en bindestrek. Det følger at [0-9]tilsvarer alle sifrene 0 til 9, [a-z]alle små bokstaver og [A-Z]alle store bokstaver. Innenfor parentesene kan flere karakterklasser kombineres: for eksempel epsilon[0-9A-Z]angir det som epsilonkan følges av et tall mellom 0 og 9 eller med en stor bokstav.
Den ^ inne i hakeparenteser betyr negasjon. Så [^eo]( ^er det andre tegnet) definerer verken "e" eller "o".
Uttrykk i hakeparenteser kan ikke brukes til å beskrive en streng med tegn, de tilsvarer bare et enkelt tegn. For å beskrive en streng må du bruke parenteser, som er et vanlig underuttrykk. Den tube | viser da alternativene. lou(p|ch)erbeskrevet så vel loupersom loucher.
Vi-modus aktiveres av kommandoen set -o viog deaktiveres av set +o vi. Ved starten av en linje er du i innsettingsmodus . For å bytte til kommandomodus må du trykke på escape- tasten .
Her er et sammendrag av kommandoene, for en komplett beskrivelse gå til side vi .
Forskyvning:
Handling:
Mønster erstatning:
Ved å trykke på "n" -tasten gjentas søket / erstatningen ved neste forekomst, "N" lar deg gjenta / erstatte den forrige forekomsten.
Gjenta kommandoer:
Redigere gjeldende linje: