Bourne-Again kuori
Luoja | Brian kettu |
---|---|
Kehittäjä | GNU-projekti |
Ensimmäinen versio | 8. kesäkuuta 1989 |
Viimeinen versio | 5,1 (7. joulukuuta 2020) |
Tallettaa | git.savannah.gnu.org/cgit/bash.git |
Kirjoitettu | VS |
Käyttöjärjestelmä | GNU / Linux , BSD ( d ) , macOS ja Microsoft Windows |
Ympäristö | X86_64 ja i686 ( d ) |
Lue muodot | Bash-skripti ( d ) |
Kieli (kielet | Englanti ja ranska |
Tyyppi |
Järjestelmän käyttöliittymä Komentotulkki |
Lisenssi | GPL-3.0 + ( d ) |
Dokumentointi | www.gnu.org/software/bash/manual |
Verkkosivusto | www.gnu.org/software/bash |
Bash (lyhenne sanoista Bourne-Again -kuori ) on komentosarjojen kaltainen komentorivin tulkki. Se on GNU- projektin Unix-kuori .
Perustuu Bourne shell , Bash tuo monia parannuksia sitä, erityisesti kansallisen Korn Shell ja C Shell . Bash on ilmainen ohjelmisto, joka on julkaistu GNU General Public License -lisenssillä . Se on oletuksena tulkin monista vapaa Unixes , erityisesti GNU / Linux-järjestelmissä . Se oli myös oletuksena kuori on Mac OS X , korvataan MacOS Catalina (10.15) mennessä zsh . Se siirrettiin ensimmäisen kerran Microsoft Windowsille Cygwin- projektin avulla , ja koska Windows 10 on erillinen vaihtoehto, nimeltään käyttöjärjestelmän Windows-alijärjestelmä Linuxille .
"Bourne again" on sanaleikki Bourne-kuoressa . Kirjaimellisesti Bourne tarkoittaa jälleen "Bourne again", mutta lausutaan myös melkein kuin uudestisyntyneenä , mikä tarkoittaa "uudestisyntynyt" tai "reinkarnaatio". Myös lyödä tarkoittaa "lakko kova" Englanti.
Brian Fox julkaisi vuonna 1988 Bashin ensimmäisen toteutuksen Free Software Foundationin puolesta . Chet Ramey välitti hänet myöhemmin. Alkuperäinen Bourne , josta Bash innostui, on kirjoittanut Stephen Bourne vuonna 1977. Versio 3.0 on vuodeltaHeinäkuu 2004ja version 4.0 versiosta Helmikuu 2009.
24. syyskuuta 2014, merkittävä turvallisuusvirhe julkistetaan, mikä sallii Bashin hakkeroinnin CGI- komentosarjojen kautta . Sen käyttäjiä pyydetään sitten korjaamaan se suojaamaan sitä.
Kuten kaikki käsikirjoittivat komentorivin tulkkia , Bash suorittaa neljä perustoiminnot:
Skriptit ovat lyhyitä ohjelmia, jotka on yleensä helppo rakentaa. Bash tarjoaa säätelyn palvelu , joka on, se mahdollistaa tulos yhden kirjoitus (lähtö) ja edelleen toiselle kirjoitus (tulo). Tällä tavalla komentosarjat voidaan "ketjuttaa", joista kukin suorittaa yhden, hyvin määritellyn tehtävän.
Käyttäjä voi suorittaa komentosarjat manuaalisesti tai järjestelmä voi suorittaa ne automaattisesti. Esimerkiksi GNU / Linux Ubuntu -jakelussa hakemisto resume.dsisältää useita komentosarjoja, jotka suoritetaan automaattisesti, kun järjestelmä käynnistetään uudelleen, ts. Järjestelmän nukkumisen jälkeen. Näitä komentosarjoja käytetään valmiustilan keskeyttämien ohjelmien uudelleenkäynnistämiseen.
Bash on kuori, jota voidaan käyttää joko interaktiivisessa tilassa tai erätilassa:
"Istunto" on joukko toimia, jotka tietokonejärjestelmän käyttäjä suorittaa hetken, jona hän muodostaa yhteyden siihen, ja hetken välillä, jolloin hän irrottaa siitä.
Bashia käytetään useimmiten oletuksena kirjautumiseen GNU / Linux-jakelussa. Se todettiin myös oletuskuoreksi MacOS X: ssä, vuoden 2019 Catilina- versioon asti .
Istunto suljetaan komennolla exittai Ctrl+D(Unix-tiedoston lopun merkki: käyttäjä sulkee tulkin lukuvirran).
Bash käyttää kirjastoa, readline jonka avulla se, kuten C-kuori , voi täydentää ( täyttää automaattisesti) komentojen ja tiedostojen nimet kirjoittamalla sarkainnäppäintä ja nopeuttaa huomattavasti työtä. Ylös- ja Alas-näppäimillä voit helposti selata komentohistoriaa.
Komentorivin muokkaaminen vi- tai Emacs-tilassaOn myös mahdollista valita komentorivin muokkaamiseksi käyttäytyminen, joka on samanlainen kuin vi-tekstieditorissa tai Emacsissa . Silloin on tarpeen käyttää komentoja set -oja set +ojotka muuttavat vaihtoehtoja kuoren. Heidän käyttäytymisensä on vasta-intuitiivista, koska se set -oaktivoi vaihtoehdon ja set +opoistaa sen käytöstä.
set -o emacskäynnistää komentorivin muokkauksen emacs- ja set -o vivi-tilassa. Koska versio 2.0, uusi sisäinen komento on lisätty konfiguroimiseksi käyttäytymistä kuori: shopt. Se on tarkoitettu korvaamaan vaihtoehtojen kokoonpano set. Toiminta shopt -oon samanlainen set -oja että shopt +oon set +ovarmistaa jatkuvuus set.
Viivan tulkitsemiseksi Bash segmentoi sen sanoiksi. Rivin ensimmäistä sanaa pidetään komennon nimellä. Sitten sijoitamme "argumentit", joita kutsutaan myös komennon "parametreiksi", eli tiedot, joita se käsittelee, esimerkiksi tiedosto. Lopuksi voimme lisätä "vaihtoehtoja", jotka muuttavat komennon vakiokäyttäytymistä. Nämä vaihtoehdot ovat "-", lyhyt väliviiva, sitten vaihtoehdon nimi tai yksittäinen kirjain pikakuvakkeena. Emme sijoita välilyöntiä viivan ja vaihtoehdon nimen väliin.
Jokainen viivan tulkinta noudattaa seuraavia rajoituksia:
Eri prioriteettitasoihin liittyy useita komentojen nimityyppejä. Seuraamalla alenevaa prioriteettijärjestystä tulkittaessa tätä ensimmäistä sanaa, löydämme:
Jos Bash ei löydä yhtäläisyyksiä aliaksista, sisäisistä komennoista tai ulkoisista komennoista rivin ensimmäisen sanan kanssa, se palauttaa virheilmoituksen, jossa command not foundsana on kirjoitettu sitä edeltävän rivin alkuun.
Ulkoisen komennon tapauksessa kuoren on löydettävä tätä komentoa vastaava ohjelma, ennen kuin se voidaan suorittaa. Koko tiedostojärjestelmän kattava haku jokaiselle komennolle vie liian paljon aikaa ja tekisi järjestelmästä käyttökelvoton. Vain pieni joukko hakemistoja tarkastellaan tosiasiallisesti, kun haetaan ohjelmaa, joka sallii komennon suorittamisen. Nämä hakemistot on määritelty ympäristömuuttujassa nimeltä " $ PATH ". Jos komentoa ei löydy jostakin tässä muuttujassa luetellusta hakemistosta, "PATH", suoritus johtaa tämän tyyppiseen virhesanomaan command not found.
Toisin kuin Windowsissa tapahtuu, turvallisuussyistä Unix-kuoret, mukaan lukien Bash, eivät epäsuorasti sisällä nykyistä hakemistoa PATH: ssa, mutta se voidaan sijoittaa sinne nimenomaisesti. Tämä estää henkilöä asentamasta haittaohjelmaa nykyiseen hakemistoon, joka samoin kuin ulkoinen komento voisi toimia sen sijaan, jos käyttäjä kirjoittaisi tämän komennon.
Metamerkkiä on merkki, joka on muu merkitys kuin sen kirjaimellisen merkityksen. "*" Ei edusta Bashille tähtimerkkiä, se lukee sen edustavan mitä tahansa merkkijonoa tai merkkien puuttumista. Metahahmot on jaettu kahteen luokkaan, jotka korvaavat muita merkkejä ja jotka mahdollistavat merkkien suojaamisen. Nämä, joita käytetään yksinään, kuten taaksepäin, tai pareittain, pakottavat Bashin lukemaan hahmot kirjaimellisesti, toisin sanoen jos merkki on suojattu, se menettää asemansa metakuvana ja siitä tulee "tähti". ”Uudelleen.
Korvaavia metahahmoja on kaksi:
Hahmoa tai merkkijonoa voidaan suojata kolmella tavalla:
Rivin lopussa palan vinoviiva osoittaa, että komento jatkuu seuraavalla rivillä. Tämä toiminto on erityisen hyödyllinen suurille tilauksille, jotta ne olisi helpompi lukea.
Takaoviiva muodostaen yhden C: n erikoismerkeistä$'\n'Bash tulkitsee tietyllä tavalla merkkijonot, joiden muoto on samankaltainen ja joissa huomautetaan takaviivan läsnäolo. Huomaa, että taaksepäin viivaa seuraa kirjain ja että ryhmää ympäröivät heittomerkit. Tässä tapauksessa ei ole kyse metakirjan merkityksen välttämisestä. Tämä on tapa osoittaa Bashille, että käänteisen viivan ja kirjaimen yhdistelmä edustaa C- kielen erikoismerkkiä, joka on tulkittava ANSI: n vahvistamien sääntöjen mukaisesti . Siten 'echo $'\a'aiheuttaa " piippauksen ".
Seuraavassa taulukossa luetellaan nämä erikoismerkit:
Pakoputken takaviiva |
Bash-muunnos |
---|---|
\ at | Piippaus |
\ b | Takaväli |
\ e | Pakokaasu |
\ f | Sivunvaihto (tämän merkin englanninkielinen nimi on lomake ) |
\ei | Rivinvaihto |
\ r | Vaunun paluu |
\ t | Vaaka-välilehden merkki |
\ v | Pystysuuntainen sarkainmerkki |
\\ | Kenoviiva |
\ ' | Heittomerkki (tämän merkin englanninkielinen nimi on lainaus ) |
\ nnn | 8-bittinen merkki, jonka oktaaliarvo on nnn |
\ xHH | 8-bittinen merkki, jonka heksadesimaaliarvo on HH |
\ cx | Control-X-merkki |
Katso ASCII
Takaisin viiva ennen yhtä Bashin metahahmoistaBash ei tulkitse metahahmoja, mukaan lukien "*" (tähti) literaaleina, mikä on joissakin tapauksissa hankalaa. Löydä , sed -komennot ovat esimerkki tästä herkästä kohdasta. Jos findhalusimme komennon avulla etsiä nykyisestä hakemistosta, jota edustaa ”. "Ja sen alihakemistot, kaikki tiedostot, joiden nimi alkaa" my ", kiusaus kirjoittaa seuraava komentorivi, find . -name my*mutta komento palaa Find: Les chemins doivent précéder l'expression.
Itse asiassa Bash korvaa "minun *" -merkkijonon nykyisen hakemiston tiedostoluettelolla, jota findpidetään luettelona poluista, jotka on määritettävä ensin, eikä etsittävien tiedostojen niminä.
Yksi ratkaisu on käyttää taaksepäin vinoviivaa "*" -merkin edessä sen välttämiseksi ja pakottaa Bash tulkitsemaan se kirjaimeksi. Mikä antaa find . -name my\*.
Toinen ratkaisu olisi lainausmerkkien käyttö. Voisimme esimerkiksi kirjoittaafind . -name "my*"
Tilaukset | Toiminnot | Selitykset |
---|---|---|
A & | Luo uusi prosessi antamalla A-komento ( riippuvainen konsolista), jolloin muut komennot voidaan syöttää samaan konsoliin. | |
( A & ) | Sama kuin yllä oleva komento, mutta tällä kertaa luotu prosessi on riippumaton konsolista. | |
A && B | Looginen JA ( && ) | Suorita B, jos A onnistuu .
B jos A OK |
A || B | Suorita B vain, jos A epäonnistuu .
B jos A KO |
|
A `B` | dynaamiset parametrit | A käyttää B: n suorittamisen tuloksia |
A $(B) |
Jokainen tilaus liittyy kolmeen virtaan:
Valinnaisesti komentoon voidaan liittää ylimääräisiä tiedostokuvaajia .
Käyttötapa:
Tilaukset | Toiminnot | Selitykset |
---|---|---|
A > fichier | poistuminen ( > ) | Suorita komento ja ohjata sen vakiotulosteeseen ( stdout ), jolloin tiedosto päällekirjoittamalla sen sisältöä tai luomalla tiedoston , jos se ei ole |
A >> fichier | poistua ( >> ) | Suorita komento A ja ohjaa sen vakiotulosteen tiedoston loppuun |
A 2> fichier | poistuminen ( 2> ) | Suorita A-komento ja ohjaa sen tavallinen virhelähtö ( stderr ) tiedostoon korvaamalla sen sisältö tai luomalla tiedosto, jos sitä ei ole |
A 2>> fichier | uloskäynti ( 2 >> ) | Suorita komento A ja ohjaa sen vakiovirhelähtö tiedoston loppuun |
A 2>&1 | lähtö ( 2> & 1 ) | Suorita komento A ja ohjaa vakiovirhelähtö vakiolähtöönsä |
A < fichier | merkintä ( < ) | Suorita A-komento, joka välittää tiedoston sisällön vakiotulossa ( stdin ) |
A | B | poistuminen, pääsy ( | ) | Suorita A ja lähetä sen vakiotulostuksen sisältö B: n vakiotuloon |
Käyttää
Muuttujiin viitataan edeltämällä niitä merkillä $ (esimerkki echo $ HOME ).
Jotkut ympäristömuuttujat : USER , PID , HOME , PATH ja SHELL .
Komentorivillä korvataan komento argumenttina sen tuloksella ( vakiona ) ympäröimällä se käänteisillä lainausmerkeillä `komennon nimi` tai käyttämällä $ () ( $ (komennon nimi) ).
Merkkijonojen kuvaamiseen käytetään säännöllisiä lausekkeita tai säännöllisiä lausekkeita. Näistä voidaan erottaa kaksi luokkaa. Literals , jotka ovat normaaleja merkkejä pidetään sellaisina, ja jokerimerkkejä , jotka ovat symboleja, joiden merkitys haku. Olemme jo keskustelleet hahmoista *ja edellä ?. Voit tarkentaa etsimäsi kuvion kuvausta ja määrittää sen sijainnin.
Siten ^edustaa rivin alkua ja $loppua. Esimerkiksi ^teredustaa kaikkia rivejä, jotka alkavat terja ter$kaikki, jotka päättyvät ter.
Metahahmot edustavat myös merkkiluokkia. Esimerkiksi sci[ea]ncesuluissa on looginen TAI. Ovat edustettuina scienceja sciance. Suluissa on myös mahdollista määrittää intervallit, sinun on lisättävä viiva. Tästä seuraa, että se [0-9]vastaa kaikkia numeroita 0–9, [a-z]kaikkia pieniä kirjaimia ja [A-Z]kaikkia isoja kirjaimia. Suluissa voi yhdistää useita merkkiluokkia: esimerkiksi epsilon[0-9A-Z]määrittelee, mitä epsilonvoi seurata luku 0-9 tai iso kirjain.
^ Sisällä neliön suluissa tarkoittaa negaatio. Joten [^eo]( ^on toinen merkki) ei määritä "e" eikä "o".
Hakasulkeissa olevia lausekkeita ei voida käyttää merkkijonon kuvaamiseen, ne vastaavat vain yhtä merkkiä. Merkkijonon kuvaamiseen on käytettävä sulkeita, jotka ovat säännöllinen alilauseke. Putki | sitten osoittaa vaihtoehtoja. lou(p|ch)eron kuvattu samoin louperkuin loucher.
Vi-tila aktivoidaan komennolla set -o vija deaktivoidaan set +o vi. Rivin alussa olet lisäystilassa , jotta voit siirtyä komentotilaan , sinun on painettava poistumisnäppäintä .
Tässä on yhteenveto komennoista, täydellinen kuvaus mene sivulle vi .
Siirtymä:
Toiminta:
Kuvion vaihto:
"N" -näppäimen painaminen toistaa haun / korvaamisen seuraavalla esiintymisellä, "N" antaa sinun toistaa / korvata edellisen esiintymän.
Toista komennot:
Nykyisen rivin muokkaaminen: