Bourne-Again héj Példa a Bash használatára.
Teremtő | Brian fox |
---|---|
Fejlesztette | GNU Project |
Az első verzió | 1989. június 8 |
Utolsó verzió | 5,1 (2020. december 7) |
Letét | git.savannah.gnu.org/cgit/bash.git |
Beírva | VS |
Operációs rendszer | GNU / Linux , BSD ( d ) , macOS és Microsoft Windows |
Környezet | X86_64 és i686 ( d ) |
Olvassa el a formátumokat | Bash szkript ( d ) |
Nyelvek | Angol és francia |
típus |
Rendszer interfész Parancsértelmező |
Engedély | GPL-3.0 + ( d ) |
Dokumentáció | www.gnu.org/software/bash/manual |
Weboldal | www.gnu.org/software/bash |
A Bash (a Bourne-Again shell rövidítése ) parancsfájl-szerű parancssori tolmács. Ez a GNU projekt Unix héja .
A Bourne héj alapján a Bash számos fejlesztést hoz, különösen a Korn és a C héjból . A Bash egy ingyenes szoftver, amelyet a GNU General Public License keretében bocsátottak ki . Ez az alapértelmezett tolmács számos ingyenes Unixban , különösen a GNU / Linux rendszerekben . Ez volt a Mac OS X alapértelmezett héja is , amelyet a macOS Catalina (10.15) helyett zsh váltott fel . Először a Cygwin projekt portálta a Microsoft Windows rendszerbe , és mivel a Windows 10 önálló opció , az operációs rendszer Linux alrendszernek nevezve .
A "Bourne again" szójáték a Bourne-héjon . A szó szoros értelmében Bourne megint azt jelenti, hogy "újból Bourne", de azt is kiejtik, hogy szinte újjászületett , vagyis "újjászületett" vagy "reinkarnált". A bash azt is jelenti , hogy angolul "keményen kell ütni".
Brian Fox 1988-ban jelentette meg a Bash első megvalósítását a Free Software Foundation megbízásából . Később Chet Ramey közvetítette. Az eredeti Bourne-héjat , amelyből Bash ihlette, Stephen Bourne írta 1977-ben2004. júliusés a 4.0 verziója 2009. február.
A 2014. szeptember 24, egy jelentős biztonsági hiányosságot hoznak nyilvánosságra, amely lehetővé teszi a Bash CGI szkripteken keresztüli feltörését . Ezután a felhasználókat felkérik, hogy javítsák ki az ellene való védekezés érdekében.
Mint minden parancsfájlos parancssori értelmező , a Bash is négy alapvető műveletet hajt végre:
A szkriptek rövid programok, amelyeket általában könnyű felépíteni. A Bash folyamatkezelési szolgáltatást nyújt , vagyis lehetővé teszi az egyik szkript eredményének (a kimenet) átadását egy másik szkriptnek (a bemenet). Ily módon a szkriptek "láncolhatók", amelyek mindegyike egyetlen, jól definiált feladatot hajt végre.
A szkripteket a felhasználó manuálisan vagy a rendszer automatikusan végrehajthatja. Például a GNU / Linux Ubuntu disztribúcióban a könyvtár resume.dszámos olyan parancsfájlt tartalmaz, amelyek a rendszer újraindításakor automatikusan végrehajtódnak, vagyis miután a rendszer aludt. Ezeket a szkripteket a készenléti állapotban megszakított különféle programok újraindítására használják.
A Bash olyan héj, amely interaktív módban vagy kötegelt módban is használható:
A „munkamenet” a műveletek összessége, amelyet a számítógépes rendszer felhasználója végrehajt, a csatlakozás pillanatától a leválasztásig.
A Bash-t alapértelmezés szerint leggyakrabban a GNU / Linux disztribúciókban történő bejelentkezéshez használják. A MacOS X alatt alapértelmezett héjként találták, egészen a 2019-es Catilina verzióig .
A munkamenetet a ( exitvagy Ctrl+Da fájl végének jelölése a Unixon: a felhasználó bezárja a tolmács olvasási folyamát) parancs zárja.
Bash használ könyvtár readline , amely lehetővé teszi, mint a C shell , hogy automatikusan teljes (autocomplete) nevét parancsok és a fájlok, ha beírja a Tab billentyűt, és jelentősen felgyorsítja a munkát. A Fel és Le gombokkal könnyedén navigálhat a parancsok történetében.
A parancssor szerkesztése vi vagy Emacs módbanVálasztható a parancssori szerkesztéshez a vi szövegszerkesztő vagy az Emacs viselkedéséhez hasonló viselkedés is . Ezután szükség van a parancsok használatára set -o, set +oamelyek módosítják a shell opcióit. Viselkedésük ellentmondó intuitív, mert set -oaktivál egy opciót, de set +oinaktiválják azt.
set -o emacsmegkezdi a parancssori szerkesztést emacs és set -o vivi módban. Mivel 2.0-ás verzió, egy új belső parancs került konfigurálásához a viselkedését a héj: shopt. Célja az opciók konfigurációjának cseréje set. A működése shopt -ohasonló set -o, és hogy az shopt +oa set +ofolytonosság biztosítása set.
Egy vonal értelmezéséhez Bash szavakra bontja. A sor első szava parancsnévnek számít. Ezután elhelyezzük az „argumentumokat”, amelyeket a parancs „paramétereinek” is nevezünk, vagyis az általa feldolgozott adatokat, például egy fájlt. Végül hozzáadhatunk „opciókat”, amelyek módosítják a parancs szokásos viselkedését. Ezeket az opciókat a "-", a rövid kötőjel, majd az opció neve vagy egyetlen betű mutatja be parancsikonként. Nem helyezünk szóközt a gondolatjel és az opció neve közé.
Egy vonal értelmezése tiszteletben tartja a következő korlátozásokat:
A parancsnévnek több típusa van társítva, különböző prioritási fokokkal. A prioritások csökkenő sorrendjét követve az első szó értelmezésekor a következőket találjuk:
Ha a Bash nem talál egyezést az álnevekben, a belső parancsokban vagy a külső parancsokban a sor első szavával, akkor egy hibaüzenetet ad vissza az előtte command not foundlévő sor elejére beírt szóval.
Külső parancs esetén a futtatáshoz a shellnek meg kell találnia a parancsnak megfelelő programot. A teljes fájlrendszer minden parancs teljes körű keresése túl sok időt igényelne, és a rendszert a gyakorlatban használhatatlanná tenné. A parancs végrehajtását lehetővé tevő program keresésekor csak a könyvtárak egy kis csoportját keresik fel. Ezeket a könyvtárakat egy " $ PATH " nevű környezeti változó határozza meg . Ha a parancs nem található a változóban felsorolt könyvtárak egyikében, a „PATH” -ban, a végrehajtás egy ilyen típusú hibaüzenetet eredményez command not found.
Ellentétben azzal, ami a Windows rendszerben történik, biztonsági okokból a Unix héjak, köztük a Bash, nem tartalmazzák implicit módon az aktuális könyvtárat a PATH-ban, de kifejezetten ott helyezhetők el. Ennek célja annak megakadályozása, hogy az egyén rosszindulatú programot telepítsen az aktuális könyvtárba, amely ugyanolyan néven, mint egy külső parancs, futtatható a helyén, ha a felhasználó beírja ezt a parancsot.
A metakarakter olyan karakter, amelynek a szó szerinti jelentésén kívül más jelentése van. "*" Nem jelenti a Bash számára a csillag karaktert, azt olvassa, hogy bármilyen karaktersorozatot vagy karakterhiányt képvisel. A metakarakterek két osztályra oszthatók: azokra, amelyek más karaktereket helyettesítenek, és azokra, amelyek lehetővé teszik a karakterek védelmét. Ezek önmagukban, például a visszavágás esetén, vagy párban arra kényszerítik Bash-t, hogy a karaktereket szó szerint olvassa el, vagyis ha védve van, akkor a "*" karakter elveszíti metakarakter státusát, hogy "csillag" legyen. " újra.
Két helyettesítő metakarakter létezik:
A karakter vagy a karakterlánc háromféle módon védhető:
A sor végén egy visszavonás jelzi, hogy a parancs folytatódik a következő sorban. Ez a funkció különösen nagy megrendeléseknél hasznos, hogy könnyebben olvashatók legyenek.
Hátravágás a C egyik különleges karakterének kialakításáhozA hasonló formátumú húrokat, $'\n'amelyekben megjegyezzük a visszavágás jelenlétét, Bash sajátosan értelmezi. Ne feledje, hogy a visszavonást betű követi, és hogy a csoportot aposztrófok veszik körül. Ebben az esetben nem arról van szó, hogy elkerüljük a metakarakter jelentését. Ez annak a módja, hogy jelezzük Bash számára, hogy a visszavágás és a betű kombinációja a C nyelv speciális karakterét jelenti , amelyet az ANSI által meghatározott szabályok szerint kell értelmezni . Így 'echo $'\a'" csipogást " fog okozni .
Az alábbi táblázat felsorolja ezeket a speciális karaktereket:
Kipufogó visszavágás |
Bash transzformáció |
---|---|
\nál nél | Beep |
\ b | Hátsó távolság |
\ e | Kipufogó |
\ f | Oldaltörés (ennek a karakternek az angol neve form feed ) |
\nem | Sortörés |
\ r | Kocsi vissza |
\ t | Vízszintes fül karakter |
\ v | Függőleges fül karakter |
\\ | Visszavágás |
\ ' | Aposztróf (a karakter angol neve idézet ) |
\ nnn | A 8 bites karakter, amelynek oktális értéke nnn |
\ xHH | A 8 bites karakter, amelynek hexadecimális értéke HH |
\ cx | A kontroll-X karakter |
Lásd: ASCII
Visszavágás Bash egyik metakaraktere előttA metakaraktereket, köztük a "*" -t (csillagot) Bash nem értelmezi literálnak, ami bizonyos esetekben kényelmetlen. A find , sed parancsok példázzák ezt a kényes pontot. Ha a parancs használatával az findaktuális könyvtárban akartunk keresni, amelyet a „. ", És annak alkönyvtárai, az összes fájl, amelynek neve" my "-nel kezdődik, kedvet kapna a következő parancssor megírásához, find . -name my*de a parancs visszatér Find: Les chemins doivent précéder l'expression.
Valójában a Bash lecseréli a "my *" karakterláncot az aktuális könyvtárban található fájlok findlistájára, amely az elérési utak listájának tekintendő, amelyet először meg kell adni, és nem a keresendő fájlok neveként.
Az egyik megoldás az, hogy a "*" karakter előtt visszavonást használunk, hogy elkerüljük azt, és arra kényszerítjük Bash-t, hogy ezt szó szerint értelmezze. Ami ad find . -name my\*.
Egy másik megoldás az idézőjelek használata lenne. Írhatnánk példáulfind . -name "my*"
Rendelések | Tevékenységek | Magyarázatok |
---|---|---|
A & | Hozzon létre egy új eljárás kiadásával egy parancs ( konzol függő ), amely lehetővé teszi más parancsokat kell beírni ugyanazt a konzolon. | |
( A & ) | Ugyanaz, mint a fenti paranccsal, de ezúttal a létrehozott folyamat független a konzoltól. | |
A && B | Logikai ÉS ( && ) | Végezze el a B-t, ha A sikeres lesz .
B ha A OK |
A || B | Csak akkor hajtsa végre a B-t, ha A nem sikerül .
B, ha A KO |
|
A `B` | dinamikus paraméterek | A felhasználja a B futtatásának eredményeit |
A $(B) |
Minden megrendelés három folyamathoz kapcsolódik:
Opcionálisan további fájlleírók társíthatók egy parancshoz.
Használat módja:
Rendelések | Tevékenységek | Magyarázatok |
---|---|---|
A > fichier | kilépés ( > ) | Hajtsa végre az A parancsot, és a standard kimenetét ( stdout ) fájlba irányítsa , felülírva annak tartalmát, vagy létrehozva a fájlt, ha nem létezik |
A >> fichier | kilépés ( >> ) | Hajtsa végre az A parancsot, és irányítsa át a standard kimenetet a fájl végére |
A 2> fichier | kilépés ( 2> ) | Hajtsa végre az A parancsot, és irányítsa át a szabványos hibakimenetét ( stderr ) fájlba , felülírva annak tartalmát, vagy létrehozva a fájlt, ha nem létezik |
A 2>> fichier | kijárat ( 2 >> ) | Hajtsa végre az A parancsot, és irányítsa át a szokásos hibakimenetet a fájl végére |
A 2>&1 | kimenet ( 2> & 1 ) | Hajtsa végre az A parancsot, és irányítsa át a szokásos hibakimenetet a normál kimenetre |
A < fichier | bejegyzés ( < ) | Végezze el az A parancsot, átadva a fájl tartalmát a standard bemeneten ( stdin ) |
A | B | kilépés, belépés ( | ) | Végezze el az A parancsot, és küldje el szabványos kimenetének tartalmát a B szabványos bemenetére |
Használat
A változókra úgy utalunk, hogy megelőzzük őket $ előjelgel (példa echo $ HOME ).
Néhány környezeti változó : USER , PID , HOME , PATH és SHELL .
A parancssorban a parancsot argumentumként az eredménnyel ( stdout formában ) helyettesítjük azzal, hogy fordított idézőjelekkel veszjük körül a " parancs nevét ", vagy a $ () ( $ (parancs neve) ) használatával.
A karakterláncok leírására rendszeres kifejezéseket vagy szabályos kifejezéseket használnak. Két kategória különböztethető meg ezek közül. A literálok , amelyek normális karakterek, mint ilyenek, és a helyettesítő karakterek , amelyek szimbólumok, amelyek jelentést jelentenek a keresésre. Fentebb már tárgyaltuk a szereplőket *és ?. Finomíthatja a keresett minta leírását és meghatározhatja annak helyét.
Tehát ^a vonal kezdetét és $a végét jelöli . Például az ^terösszes, a kezdő terés ter$a végződő sort ábrázolja ter.
A metakarakterek a karakterosztályokat is képviselik. Például sci[ea]ncea zárójelek tartalmában logikai VAGY-t jelöl. Képviselik scienceés sciance. A zárójelek segítségével intervallumok is meghatározhatók, hozzá kell adni egy kötőjelet. Ebből következik, hogy [0-9]egyenértékű az összes 0–9 számjeggyel, [a-z]minden kisbetűvel és [A-Z]nagybetűvel. A zárójelek között számos karakterosztály kombinálható: például epsilon[0-9A-Z]meghatározza, hogy epsilonmelyiket követheti egy 0 és 9 közötti szám vagy egy nagybetű.
A szögletes zárójel ^ belseje negációt jelent. Tehát [^eo]( ^a második karakter) nem definiálja sem az "e" -t, sem az "o" -t.
A szögletes zárójelben lévő kifejezések nem használhatók karakterlánc leírására, csak egyetlen karakternek felelnek meg. A karakterlánc leírásához zárójeleket kell használnia, amelyek szabályos részkifejezést jelentenek. Ezután a cső | jelzi az alternatívákat. lou(p|ch)erismertetett, valamint loupera loucher.
A vi módot a parancs aktiválja, set -o viés a deaktiválja set +o vi. A sor elején beszúrás módban van , a parancs üzemmódba váltáshoz nyomja meg a menekülési gombot .
Itt található a parancsok összefoglalása, a teljes leírásért lásd a vi oldalt .
Elmozdulás:
Akció:
Minta cseréje:
Az "n" gomb megnyomásával a keresés / helyettesítés megismétlődik a következő előforduláskor, az "N" lehetővé teszi az előző előfordulás megismétlését / helyettesítését.
Ismételje meg a parancsokat:
Az aktuális sor szerkesztése: