Käsu kest UNIXis. Erinevatest Linuxi ja Unixi kestadest

Märkus: Käsukesta mõiste. Käskude kestade ülevaade. Bashi käsu kest. Toimingu omadused (käskude ajalugu, operaator "!", toimingud klahvivajutusega ). Multitegumtöötlus konsoolis. Ülesanded. Töö juhtimine. Kesköö komandöri keskkonnamuutujad

Tunni edenemine

1. Linuxi ja Unixi maailmas on arvutis töötamine selle kontseptsiooniga lahutamatult seotud käsu kest– programm, mis võimaldab kasutajal süsteemiga suhelda, sisestades ja täites käske. Sellegipoolest käsu kest on tavaline programm. Saate seda tõestada, määrates failis vaikekesta passwd kasutaja jaoks mõni muu programm. Kuid selleks, et süsteem tunneks seda kestana, peate lisama absoluutse failinime /etc/shells.

Linuxil on mitu käsukestat, nende koostis võib olenevalt distributsioonist erineda, kuid alati leiate:

Bourne Shell (sh) - vanim ja levinum käsu kest Unixi süsteemide jaoks. Pole ühtegi Unixi süsteemi, kus seda ei kasutataks.

Bourne Again Shell (bash) – pikendatud Bourne Shell. Sellel on palju meeldivaid eeliseid, mistõttu on see viimasel ajal nii populaarseks saanud. See on peaaegu kõigi Linuxi distributsioonide vaikekest.

Samuti on populaarsed kestad:

csh– shell, mille käsusüsteem on lähedane programmeerimiskeelele C

tcsh on kest, mille käsusüsteem on lähedane Tcl programmeerimiskeelele.

zsh on kest, millel on tõenäoliselt kõige laiemad võimalused. See on sh (bourne shell) laiend.

Kuna Linux kasutab vaikimisi bashi, räägime sellest.

2. Käsu kest bash oli algselt Bourne Shelli vabalt levitatav versioon. Hiljem, kui selle võimalused kasvasid, hakati seda pidama iseseisvaks tooteks. Bashi peamised omadused on järgmised:

Tabel 1.1.
Võimalus Kommenteeri
1 Rea redigeerimine Võimalus sisestatud käsku redigeerida selle uuesti kirjutamise asemel
2 Kanalite organiseerimine Võimalus I/O ümbersuunamine, kanalite korraldamine sooritatud ülesannete vahel
3 Kasutusmugavus Käskude varjunimede, käskude ajaloo, automaatse täitmise kasutamine
4 Töö juhtimine Võimalus luua ja hallata taustatöid
5 Kohandamise paindlikkus Kasutajate sisselogimisskriptifailide, keskkonnamuutujate kasutamine

I/O ümbersuunamist ja torusid käsitleme hiljem 8. õppetükis. Seetõttu jätame selle punkti välja. Kuid räägime üksikasjalikumalt bashis töötamise funktsioonidest ja selle pakutavatest eelistest.

Bash kirjutab kõik kasutaja sisestatud käsud automaatselt faili ~/.bash_history. Selle faili haldamiseks kasutage käsku ajalugu. ajalugu on sisseehitatud käsk bash. See tähendab, et sellele käsule pole ühtegi käivitatavat faili. Tema ise käsu kest teeb kõik toimingud. Ilma parameetriteta sisestatuna loetleb see lihtsalt kõik sellesse faili salvestatud käsud ja on identne käsuga cat ~/.bash_history.

Käskude ajalugu on tavaliselt kasutatavate käskude komplekti lihtsustamiseks. Käskude ajalugu saab klahvide abil loendis järjestada <вверх>Ja<вниз> .

Teine võimalus on tippida! ja käivitage käsk ja vajutage . Täidetakse viimane käsk ajaloost, mille esimesed tähed ühtivad sisestatuga. Näiteks:

$ !/usr /usr/bin/perl ./ptest.pl OK $ !xfonts bash: !xfonts: sündmust ei leitud $

Kuid kuidas saame kiirendada sisestamist, kui ajalugu ei sisalda veel vajalikku käsku? Sel juhul aitab meid võti . Pärast käsu (või failitee) paari esimese tähe tippimist vajutage Ja Bash lõpetab automaatselt teie käsu (või teeelemendi). Kui mitu faili sobib või ükski fail ei sobi, annab süsteem helisignaali. Kui nupp vajutage uuesti ja mitme faili ilmumisel kuvab süsteem loendi ja kui neid pole, kordab helisignaali

3. Alates esimesest õppetunnist oleksite pidanud meeles pidama, et Linux on multitegumtöötluskeskkond. Kuid siiani pole te veel saanud selle multitegumtöötlust ära kasutada. Esmapilgul tundub, et konsool ei võimalda kasutada süsteemi multitegumtöötluse võimalusi ning ainult graafilises keskkonnas saab korraga käivitada kahte või enamat programmi. Aga see pole tõsi! Konsool on ka multitegumtöötlus.

Esiteks saate avada mitu konsooli, avades igas neist programmi. Konsoolide vahel vahetamine toimub klahvide abil Ctrl+ , Kus x- konsooli number.

Ja isegi ühes konsoolis, kasutades tööhalduskäske, saate multitegumtöö süsteemi kõiki eeliseid kasutada.

– klahvikombinatsioon, mis saadab protsessile pealtkuulamatu signaali sigstop. Võimaldab peatada protsessi täitmise, et viia juhtimine üle käsureale.

käsk & – käsu järel olev & sümbol võimaldab seda taustal käivitada.

töökohad – kuvab praeguste shellitööde loendi.

bg<#j>– jätab töö #j tagaplaanile. Enne seda tuleb ülesanne klahvikombinatsiooniga peatada . Kui tõlgil on hetkel ainult üks ülesanne, siis seda numbrit täpsustada ei pea.

fg<#j>– paneb töö #j esiplaani täitmise režiimi. Töö tuleb peatada klahvikombinatsiooniga või olla taustal. Kui tõlgil on hetkel ainult üks ülesanne, siis seda numbrit täpsustada ei pea.

$ man bash ^Z + Peatatud man bash $ vim ^Z vim + peatatud vim $ bg 1 + man bash & $ töökohad + peatatud man bash + peatatud vim $ fg 2 + vim $ fg + man bash $

4. Keskkonnamuutujad– süsteemiteave, mis näitab teie eelistusi, nt tekstiredaktor vaikimisi, käivitatavate failide otsinguteed jne, samuti kasutaja-, süsteemi- ja kestamandaadid, näiteks kasutajanimi, Linuxi versioon jne, mida kasutavad käsutõlk ja muud programmid.

Kasutaja sageli kasutatavad muutujad on:

PATH – muutuja sisaldab teid, millelt süsteem peaks otsima käivitatavaid faile, kui täis- või suhteline tee neile.

PWD – muutuja sisaldab aktiivse kataloogi täisnime.

HOME – muutuja sisaldab täielikku teed kasutaja kodukataloog.

HOSTNAME – muutuja sisaldab arvuti nime.

LOGNAME – sisaldab kasutajanimi

SHELL – sisaldab praeguses seansis töötava käsukesta nime.

KASUTAJA – sisaldab kasutajanimi, mille seanss on hetkel avatud.

Süsteemi installitud muutujate loendit saab näha ilma parameetriteta sisestatud käsu ekspordi abil.

Bash-käsu tõlgendajal on ka oma muutujad. Selleks, et kohalikest muutujatest saaksid süsteemimuutujad, tuleb need eksportida sama ekspordikäsuga. Näiteks:

$ ekspordi deklareeri -x HOME="/home/gserg" deklareeri -x HOSTNAME="WebMedia" deklareeri -x LANG="ru_RU.KOI8-R" deklareeri -x LOGNAME="gserg" deklareeri -x PATH="/bin: /usr/bin:/usr/local/bin:/home/gserg/bin" deklareerida -x PWD="/home/gserg" deklareerida -x SHELL="/bin/bash" deklareerida -x TERM="Eterm" deklareerida -x KASUTAJA="gserg" $ REDAKTOR=/bin/vim $ ekspordi REDAKTOR $ ekspordi deklareeri -x EDITORI="/bin/vim" deklareeri -x KODU="/home/gserg" deklareeri -x HOSTNAME="WebMedia" deklareeri -x LANG="ru_RU.KOI8-R" deklareeri -x LOGNAME="gserg" deklareeri -x PATH="/bin:/usr/bin:/usr/local/bin:/home/gserg/bin:" deklareeri - x PWD="/home/gserg" deklareeri -x SHELL="/bin/bash" deklareeri -x TERM="Eterm" deklareeri -x USER="gserg" $

Meeskond määramata kustutab süsteemimuutuja. Näiteks:

$ unset EDITOR $ eksport deklareerida -x KODU="/kodu/gserg" deklareerida -x HOSTNAME="WebMedia" deklareerida -x LANG="ru_RU.KOI8-R" deklareerida -x LOGNAME="gserg" deklareerida -x PATH=" /bin:/usr/bin:/usr/local/bin:/home/gserg/bin:" deklareerida -x PWD="/home/gserg" deklareerida -x SHELL="/bin/bash" deklareerida -x TERM= "Eterm" deklareerib -x USER="gserg" $

5. Tänases tunnis tutvustame teile teist, veidi ebastandardset käsukestat Kesköö komandör. See pole nii käsu kest tavalises mõttes. See on tekstifailihaldur - analoog Nortoni komandör või Kaugel. Kesköö komandör käivitati käsuga mc. Räägime selle võimalustest.

Ekraan Kesköö komandör jagatud kaheks osaks. Peaaegu kogu ekraaniruumi hõivavad kaks paneeli, millel on kataloogide ja failide loend. Vaikimisi on teine ​​rida ekraani allservast käsurida, kus saab käivitada tavalisi shellikäske ja alumisel real kuvatakse funktsiooniklahvide viipasid ( F1-F10). Sümbolite ülemine rida sisaldab menüüd, mille abil saate täita paljusid funktsioone. Menüü kasutamiseks võite klõpsata hiirega soovitud üksusel või vajutada klahvi F9 ja kasutades võtmeid kursori juhtimine valige soovitud üksus.

Paneelid Kesköö komandör võimaldab korraga vaadata kahte kataloogi. Üks paneelidest on aktiivne (selles mõttes, et kasutaja saab selles asuvate failide ja kataloogidega teatud toiminguid teha). Aktiivsel paneelil on ühe faili või kataloogi nimi esile tõstetud ja paneeli pealkiri ülemisel real on värviliselt esile tõstetud. Pealkirja nimi on sama, mis praegu kuvatava kataloogi nimi. Peaaegu kõik toimingud tehakse aktiivsel paneelil. Mõned toimingud nagu ülekandmine või failide kopeerimine kasutada passiivset paneeli kui kopeerimist, teisaldamist jne.

Nüüd räägime põhilistest kiirklahvidest, mis aitavad teil töötada Kesköö komandör.

klahve kasutatakse aktiivse paneeli muutmiseks või +

faili märkimiseks klõpsake nuppu või +

klõpsa abi saamiseks

helistab failivaaturile

kasutades muudate faili

võimaldab teil kopeerida .

faili teisaldada või ümber nimetada

luua kataloog

Võti võimaldab teil faili ja/või kataloogi kustutada

, nagu juba mainitud, avab juurdepääsu menüüle.

- võimaldab teil välja tulla Kesköö komandör.

viib kursori failide loendi algusesse,

- vastupidi - nimekirja lõppu.

Ja muudab indikaatori asukohta leheküljel vastavalt üles ja alla.

Võti <*> lisaklaviatuuril võimaldab teil failide valikut ümber pöörata (see ei mõjuta katalooge)

Võti <+> lisaklaviatuuril võimaldab teil faile maski järgi märkida ja <-> tühjendage failid maski järgi.

+ - värskendage kataloogi sisu (lugedes uuesti kettalt või võrgust)

+ - vahetage parem ja vasak paneel.

+ - paneelide eemaldamine/tagastamine.

Kuigi klaviatuuri otseteed on optimaalne tööriist töö tegemiseks Kesköö komandör võimalikult kiire ja mugav, on algajatel üsna raske neid kõiki korraga selgeks õppida. Selle tühimiku täitmiseks ja muude võimaluste lisamiseks, millel puuduvad klaviatuuri otseteed, Kesköö komandör on menüü (helistab F9).

Menüü koosneb järgmistest elementidest: "Vasak paan", "Fail", "Käsk", "Seaded", "Parem paan".

"Vasak/parem paneel"- need menüüelemendid on täpselt samad. Ainus erinevus nende vahel on see, et tehtud toimingud adresseeritakse vasakule või paremale paneelile.

"Loendi vorming"- avab dialoogiboksi, kus saab valida vaate, milles kuvatakse failide/kataloogide loend. Valikus on standardsed, lühikesed ja laiendatud vormingud. Selle akna kasutaja saab aga ise määrata talle sobiva paneeli tüübi, valides lüliti „Kasutaja määratud”.

"Kiire vaade"- lülitab paneeli kõrvalpaneelil valitud failide automaatse vaatamise režiimi. Fookus lülitub automaatselt vastaspaneelile.

"Teave"- lülitab paneeli ümber, et vaadata teavet kõrvaloleval paneelil esiletõstetud faili kohta, nagu asukoht, õigused ja omanik, failisüsteem ja seade, millel see asub, selle failiga seotud kõvade linkide arv, samuti teave seadme kohta, milles fail asub.

"Puu"- tõlgib Kesköö komandör režiimi, mis sarnaneb OS Windowsi Exploreri töörežiimiga. Paneelil, millele käsk rakendatakse "Puu", koostatakse kataloogipuu, milles saab noolte abil navigeerida kursori juhtimine, võtmed PageUp, PageDown, Home, End. Kõrvaloleval paneelil kuvatakse puus esile tõstetud kataloogi sisu.

"Sordi järjekord"- avab dialoogiboksi, kus saate valida atribuudi, mille järgi failid ja kataloogid loendisse sorteeritakse, näiteks nimi, laiend, redigeerimisaeg, juurdepääsuaeg, atribuudi muutmise aeg, suurus, sõlm (millel fail asub) . Samuti saate jätta failid sorteerimata, sortida need tõstutundlikuks või vastupidises järjekorras.

"Filter"- võimaldab dialoogiboksi sisestatud regulaaravaldise abil valida paneelil kuvatavaid failinimesid.

"FTP-ühendus"- selle käsu abil saate protokolli kasutades luua ühenduse kaugarvutiga (või isegi kohalikuga). ftp. Kui sisestatakse ainult kaugserveri aadress, siis Kesköö komandör proovib luua anonüümset ühendust. Täisrida, millega sõlm on määratud, on järgmine:

ftp:kasutaja_nimi:parool@serveri_aadress:port/kataloog_serveris

Pärast ühenduse loomist töötage kaugfailisüsteem töötab sarnaselt kohaliku FS-iga töötamisele.

"Shelliühendus"- võimaldab avada võrguühenduse protokolli kasutades KALA (Failiedastus SHelli kaudu– failiedastus shelli kaudu). KALA kasutab protokolle RSH (Remote SHell– eemaldatud kest) või SSH (Secure SHell– kaitstud kest, analoog RSH, kuid edastatud andmete krüptimise toega). Täielik string, millega kasutaja saab kaugsõlme määrata, on järgmine:

sh:kasutaja_nimi@serveri_aadress:options/directory_on_server

Parameeter kasutajanimi, valikud ja kataloog_serveris ei nõuta. Kui kasutajanimi pole siis täpsustatud Kesköö komandör proovib kaugsüsteemi sisse logida kohalikus arvutis kasutatava kasutajanimega.

"Revideerida"- klahvikombinatsiooni analoog + - põhjustab aktiivse paneeli failide ja kataloogide loendi värskendamise, lugedes need uuesti kettalt või võrgu kaudu.

"Fail"- menüüjaotis, mille üksused pakuvad põhifunktsioone failide ja kataloogide töötlemiseks, näiteks:

"Kasutaja menüü"- võimaldab avada menüü, mille määrab kasutaja ise. Kutsutakse ka võtme järgi .

"Vaata faili"- vajutamisega sooritatava funktsiooni analoog . Võimaldab vaadata esiletõstetud faili (või siseneda kataloogi). Toetab paljusid vorminguid, nagu tekstivormingud, arhiiv, Winword DOC, Linuxi käivitatavad failid jne.

"Faili vaatamine..."- sama, mis eelmine lõik, kuid ei toimi esiletõstetud failile, vaid sellele, mille nimi ja tee sisestatakse dialoogiboksi.

"Vaata meeskonda"- võimaldab teil käsku täita ja seda vaadata standardväljund failide vaatamise režiimis.

"Redigeerimine"- avab faili redigeerimiseks. Lihtne sisseehitatud tekstiredaktor sellel on piisav komplekt sisseehitatud funktsioone konfiguratsioonifailide, programmide lähtekoodide jms redigeerimiseks ning sisseehitatud automaatne süntaksi esiletõstmine muudab toimetamise mugavamaks ja toimetatud tekstid loetavamaks.

"Kopeeri"- kopeerib faili aktiivsest paneelist passiivsesse. Analoogselt väljakutsutud funktsiooniga . Vaikimisi loetakse aktiivsel paneelil esiletõstetud fail (või failide rühm) kopeerituks ja sihtkohaks on passiivsel paneelil avatud kataloog. Seda saab muuta, kohandades välja väärtusi dialoogiaknas, mis avaneb pärast selle käsu kutsumist.

"Juurdepääsuõigused"- võimaldab dialoogiboksis muuta faili (või failide rühma) juurdepääsuõigusi.

"Sümboolne link"- loob sümboolse lingi. Vaikimisi võetakse adressaadiks aktiivsel paneelil esiletõstetud fail ning loodud link saab sama nime ja asub passiivsel paneelil avatud kataloogis. Kasutaja saab seda muuta avanevas dialoogiboksis.

"Omanik/grupp"- muudab omanikku ja/või rühma, kuhu fail/kataloog kuulub.

"Õigused (laiendatud)"- võimaldab üheaegselt muuta juurdepääsuõigusi failile ja selle omanikule ja/või rühmale. Õigused on esindatud kolme rwx-jadana omaniku, rühma ja kõigi kasutajate jaoks.

"Ümbernimetamine"- võimaldab faili ümber nimetada/teisaldada. Analoogne poolt kutsutud funktsiooniga . Vaikimisi loetakse aktiivsel paneelil esile tõstetud fail (või failide rühm) teisaldatuks/ümbernimetatuks ja sihtkohaks on passiivsel paneelil avatud kataloog. Seda saab muuta, kohandades välja väärtusi dialoogiaknas, mis avaneb pärast selle käsu kutsumist.

"Kataloogi loomine"- loob kataloogi. Analoogselt väljakutsutud funktsiooniga . Vaikimisi luuakse kataloog aktiivsel paneelil avatud kataloogis. Seda saab muuta, kui määrata avanevas dialoogiaknas loodava kataloogi täielik tee.

"Kustuta"- kustutab faili/failide rühma/kataloogi. Analoogselt väljakutsutud funktsiooniga .

"Muuda kataloogi"- muudab praegust kataloogi. Sarnaselt Bashi kesta käsuga cd. Vajalik kataloog sisestatakse dialoogiboksi.

"Märkige grupp"- Märgib failide rühma maski järgi aktiivsel paneelil avatud kataloogis. Analoogne funktsiooniga, mida kutsutakse koos <+> täiendaval klaviatuuril.

Käskude kestad ilmusid kohe Unixi arendamise alguses, need olid vajalikud, kuna need olid ainus viis süsteemiga suhtlemiseks. Selle aja jooksul on nad läbinud väga pika arengutee ja saanud palju uusi funktsioone. Linuxi kestade arengut pole lihtne hinnata. Sellest võib kirjutada väga pikalt ja ühest artiklist kindlasti ei piisa. Püüame käsitleda ainult põhitõdesid ilma liiga süvenemata. Vaatame esmalt, mis on Linuxi käsukest ja millised kestad seal on.

Mis on Linuxi/Unixi kest

Unixi kest on käsurea tõlk, mis täidab kasutaja sisestatud käske. Sisestame käsu, see tõlgendatakse, täidetakse ja seejärel saame selle täitmise tulemuse. Kest pakub traditsioonilist Unixi käsusisestusliidest, millega oleme harjunud. Tavaliselt on see must ekraan ja valge tekst. Käsud sisestame lihttekstina, samuti saame luua skripte ühest või mitmest käsust.

Kest on teie liides süsteemiga suhtlemiseks. Pärast Unixi süsteemi sisselogimist leiate end programmist nimega shell.

Thompson Shell

Kui uskuda ajalugu ja paljusid Interneti-allikaid, oli kõige esimene kest Thompsoni kest, mille kirjutas Ken Thomson Bell Labsist. Kokku oli 6 versiooni ja seda levitati aastatel 1971–1975. Toetatud olid sellised funktsioonid nagu sisendi/väljundi ümbersuunamine ja lihtsad juhtkonstruktsioonid – if, goto. Need funktsioonid toetavad kõiki kaasaegseid Linuxi käsukestasid.

PWB Shell

PWB kest on John Masheu välja töötatud Thomsoni kesta modifikatsioon. See oli kirjutatud Shelli programmeerimise mugavuse suurendamiseks. Ilmunud on huvitavad struktuurid nagu if-then-else-endif, switch ja while tsüklid.

Bourne Shell

Unix alustas oma tõusu Bourne'i kestaga. Selle kirjutas Stefan Born ettevõttes Bell Labs ja seda kasutati Unixi versioonis 7 alates 1979. aastast vaikekestana. Siin on juba rakendatud suur hulk kaasaegsetes shellides saadaolevaid funktsioone - failinimede täitmine, käskude täitmine, standardsed keskkonnamuutujad ja sisseehitatud juhtimisstruktuurid. Bourne Shelli nimi oli sh ja see asus Unixi failisüsteemis aadressil /bin/sh.

Paljudes süsteemides on Bourne'i shell (sh) programm sümboolne või kõva link ühele selle alternatiividest:

  • Almquisti kest (tuhk)
  • Bourne-Again kest (bash)
  • Korni kest (ksh)
  • Z kest (zsh)

Bourne Shelli skripti näide:

!/bin/sh
kaja "Tere maailm 1!"
kaja "Tere maailm 2!"

Almquisti kest (tuhk)

Almquisti kest, tuntud ka kui A Shell. See on kerge Unixi kest, mille algselt kirjutas Kenneth Almquist. See töötati välja 1980. aastate lõpus. See on Bourne'i kesta modifikatsioon ja asendas 1990. aastal välja antud BSD Unixis originaali. Seda saab nüüd kasutada sellistes distributsioonides nagu Debian ja Ubuntu tuha versioonina nimega dash (Debian Almquist kest) See kest on populaarne ka sisseehitatud Unixi distributsioonides.

See on kiire, kompaktne ja POSTIX-ühilduv Unixi kest, mistõttu kasutatakse seda sageli manustatud seadmetes. Kuid tuhk ei toeta käsuajalugu. Kuigi tänapäevastes versioonides on see funktsioon juba lisatud.

Bourne-Again Shell (Bash)

Kirjutas Brian Fox osana GNU projektist Bourne'i kesta tasuta ja avatud lähtekoodiga asendajana. Bash on kõigist kestadest kõige populaarsem ja laialdasemalt kasutatav. Kõik Linuxi distributsioonid on vaikimisi selle kestaga kaasas. See laiendab Bourne Shelli funktsioonide komplekti. Enamikus Unixi/Linuxi süsteemides võib selle kesta leida failisüsteemist aadressil /bin/bash. See ilmus 1989. aastal.

Sellise populaarsuse tõttu teisaldati see Windowsi ja levitati koos Cygwini ja MinGW kompilaatorite komplektiga. Bashi kasutatakse ka Androidis ja sellele pääseb juurde erinevate terminali emulaatorite abil.

See toetab automaatset lõpetamist, I/O ümbersuunamist, käskude täitmist, muutujaid ja juhtstruktuure otsuste tegemiseks (kui-siis-muidu kui) ja silmuseid.

Bash-skriptid algavad selle reaga:

See linuxi kest toetab ka failist käskude lugemist ja väljundi ümbersuunamist faili või muusse käsku.

Näidiskoodi Bashis:

!/bin/sh
kui [ $days -gt 365 ]
siis
kaja Sellest on üle aasta.
fi

Korni kest (ksh)

Kirjutas David Kron ja põhineb Bourne shelli lähtekoodil. KornShell (ksh) on kest, mis töötati välja ettevõttes Bell Labs 1980. aastal. See ühildub tagasi Bourne Shelliga ja sisaldab ka paljusid C kesta funktsioone.

Seal on järgmised versioonid ja modifikatsioonid:

  • Dtksh
  • MKS Korn kest

Skripti näide:

!/bin/ksh
print Kettaruumi kasutamine
du-k
väljumine 0

Z kest (zsh)

Paul Falstad kirjutas esimese versiooni zsh shelli käsuga 1990. aastal. See on Linuxi käsukest, mida saab kasutada interaktiivse sisselogimisshellina, mis on väga võimas käsutõlk. Zsh on tegelikult täiustatud Bourne'i kest, millel on palju täiustusi, mis sisaldavad mõningaid Bashi, KSH ja Tcshi funktsioone.

Nimi Zsh pärineb Yale'i professorilt Zhong Shaolt, kuna Paul oli Princetoni ülikooli üliõpilane.

Toetatud on järgmised huvitavad funktsioonid:

  • Rea täitmine
  • Jagatud käsuajalugu kõigi shelliseansside jaoks
  • Täiustatud töö muutujate ja massiividega
  • Mitme rea redigeerimine ühes puhvris
  • Õigekirjaparandus ja palju muud.

C kest

C-kest on tuntud ka kui Csh. Selle töötas välja Bill Joy, kui ta õppis California ülikoolis. See kest on BSD Linuxi süsteemides väga levinud. Siin on palju huvitavaid funktsioone, sealhulgas juhtstruktuurid ja grammatilised väljendid. See kest tutvustas esmakordselt ka paljusid huvitavaid funktsioone, nagu ajalugu ja redigeerimismehhanismid, varjunimed, CDPATH, ülesannete haldamine ja räsimine, väljundi ümbersuunamine, lisamine, muutuja asendamine, taustal täitmine jne.

Nagu muud tüüpi Linuxi kestad, toetab see skriptifaile, ümbersuunamis- ja juhtimisstruktuure. Csh-d kasutatakse nüüd tcsh-na paljudes süsteemides, nagu MacOS X ja Red Hat Linux. Debianis saate kasutada nii CSH-d kui ka Tcsh-d.

Näidiskood C Shellis:

!/bin/csh
kui ($ päeva > 365), siis
kaja Sellest on üle aasta.
endif

Kala

Fish või Friendly Interactive Shell on uue põlvkonna Linuxi käsukest. See on loodud selleks, et kasutajal oleks lihtsam käske täita, seal on süntaksi esiletõstmine, õigete failiaadresside esiletõstmine, kiire ajaloootsing, veebikonfiguraator, aga ka spetsiaalne skripti süntaks.

See on Linuxi uus käsukest ja selle süntaks ei sarnane ühegi teise kaasaegse käsukeelega, vaid pigem Pythoni programmeerimiskeelega.

Funktsiooni loomise näide kalas:

!/usr/bin/fish
toiminud su
funktsioon su
/bin/su --shell=/usr/bin/fish $argv
lõppu
funcsave su

Linuxi käsukestade täpsemat võrdlust näete lingil.

See on tänaseks kõik. Loodan, et see oli teile huvitav.

    Linuxi perekonna operatsioonisüsteemid, nagu ka kõik muud operatsioonisüsteemid, nõuavad interaktsiooniliidese olemasolu arvutisüsteemi komponentide ja lõppkasutaja vahel, st tarkvarataseme olemasolu, mis pakub käskude sisestamist. ja parameetrid soovitud tulemuste saavutamiseks. Seda programmi taset nimetatakse "kest" või inglise keeles - kest.

Mis on kest?

Käsu kest ( kest) pakub suhtlust kasutaja ja Linuxi operatsioonisüsteemi keskkonna vahel. See on spetsialiseeritud tarkvaratoode, mis tagab käskude täitmise ja nende täitmise tulemuste saamise ehk väga lihtsustatult öeldes on shell programm, mis on mõeldud kasutaja soovil teiste programmide täitmise tagamiseks. Shelli näide võib olla näiteks käsutõlk command.com operatsioonisüsteem MS DOS ehk shell bash Unix/Linux operatsioonisüsteemid.

Kõigil kestadel on sarnased funktsioonid ja omadused, vastavalt nende põhieesmärgile - kasutaja käskude täitmiseks ja nende täitmise tulemuste kuvamiseks:

Käsurea tõlgendus.

Juurdepääs käskudele ja nende täitmise tulemustele.

Muutujate, erimärkide ja reserveeritud sõnade tugi.

Failide töötlemine, standardsed sisend- ja väljundoperatsioonid.

Spetsiaalse shell-programmeerimiskeele juurutamine.

    Unixi / Linuxi perekonna operatsioonisüsteemide jaoks on võimalik kasutada mitut erinevat kesta, mis erinevad süsteemiga suhtlemise omaduste ja meetodite poolest. Kõige tavalisemad kestad on

sh- kest Bourne, klassikaline kest Unix OS-i jaoks

bash kest Bourne jälle(GNU Bourne-Again SHell). Võib-olla praegu kõige levinum kest Linuxi OS-i keskkonnas.

ksh- kest Korn, mis on loodud kesta arendusena Bourne käsurea ajaloo ja käskude redigeerimise võimalusega.

csh- kest C, kasutades populaarse programmeerimiskeele süntaksit C

tcsh- kesta versioon C interaktiivse käsurea redigeerimisega.

Süsteemi saab installida mitu erinevat kesta ja iga kasutaja saab kasutada oma vaikekestat. Kõik see toimub loomulikult automaatselt allalaadimise ja kasutaja registreerimisprotsessi käigus.

    Linuxi perekonna operatsioonisüsteemide laadimise ajal lülitub süsteem pärast süsteemituuma laadimist interaktiivsele režiimile - kasutaja ja operatsioonisüsteemi vahelisele suhtlusrežiimile. Linuxis on esimene alglaadimise ajal käivitatav protsess init-programm. init, mis loeb konfiguratsioonifaili sisu /etc/inittab, määrab süsteemis saadaolevate terminalide loendi ja omadused ning kutsub välja interaktiivse sisselogimisprogrammi Getty, mis palub teil sisestada oma kasutajanimi. Pärast kasutajanime ja parooli sisestamist programm Getty kutsub programm välja sisse logida, mis kontrollib konto kehtivust, navigeerib kasutaja kodukataloogi ja annab juhtimise üle seansi algkäivitusprogrammile, mis on tavaliselt kasutaja shellprogramm, mille spetsiifilise maitse määrab faili sisu /etc/passwd selle konto jaoks. Näiteks:

user1:x:508:511::/home/user1:/bin/sh
interbase:x:510:511::/home/interbase:/bin/csh
apb:x:511:513:apb:/home/apb:/bin/bash

Nagu faili sisust näha /etc/passwd, kasutaja jaoks kasutaja1 kest lastakse käiku sh(Bourne'i kest), kasutajale baasidevaheline- kest csh(C kest) ja kasutaja jaoks apb- kest bash(Bourne Again) Pärast kesta käivitumist kuvatakse ekraanile käsuviip (tavaliselt dollarimärgi kujul $ kui tööd tehakse tavakasutajakonto ehk naela kontekstis # , kui shelli kasutatakse root kasutajakonto all ( juur).

Shellist väljumisel tagastab süsteemituum programmi juhtimise init, mis taaskäivitab sisselogimisprotsessi ja kuvab terminalis kasutajanime viipa. Kestast väljumist saab teha kahel viisil:

Meeskonna kaudu väljuda teostab kasutaja

Kui shell-protsess võtab vastu signaali tappa, mille saadab kernel, näiteks süsteemi taaskäivitamisel.

Käsurea tõlgendus.

    Tavaliselt kutsutakse välja kasutaja sisend vastuseks shelli viipale käsurida või meeskond. Linuxi käsk on käsu nime ja argumentide märgijada, mis on eraldatud tühikutega. Argumendid annavad käsule täiendavaid parameetreid, mis määravad selle käitumise. Enamasti kasutatakse argumentidena valikuid Ja nimed failid ja kataloogid. Näiteks käsurida

ls -l fail01 fail02

Sisaldab käsku ls, suvandit -l ja kahte failinime fail01 fail02.

Mitme valiku kasutamisel saab neid kombineerida. Näiteks järgmised käsusuvandid on identsed:

Ls -l -d
ls -ld

Kutsutakse käske, mis on kesta osa sisseehitatud. Sellisteks käskudeks on näiteks cd, if, case jne. Loomulikult võivad sisseehitatud käsud eri shellisuvandite puhul erineda. Lisaks sisseehitatud käskudele on võimalik kasutada programmimooduleid, mis on eraldi käivitatavad failid ehk failid skriptid või stsenaariumid- tavalised tekstifailid, mis sisaldavad järjestikku täidetavaid ridu koos shellikäskudega. Mõningaid skripte (skripte) saavad käivitada Linuxi protsessid, näiteks ülesannete planeerija cron. Tööülesannete planeerija on tavaliselt loodud süsteemihaldustoimingute automaatseks täitmiseks ajakava alusel. Ülesanded cron on käsud või skriptid ja täidetakse automaatselt, ilma inimese sekkumiseta ning neid saab käivitada erinevate kasutajakontode kontekstis. Juhul kui planeerija ülesanne hõlmab skripti täitmist, tekib probleem kesta valimisel, mis tuleks käivitada alamprotsessina cron skriptifaili käskude töötlemiseks - lõppude lõpuks võib kest olla mis tahes ja skripti süntaks nõuab reeglina konkreetse kesta kasutamist, mille jaoks see on kirjutatud. Selle probleemi kõrvaldamiseks on Linuxi operatsioonisüsteemides tavaks märkida skripti esimesele reale selle täitmiseks vajaliku kesta tüüp järgmisel kujul:

#!/bin/bash- kesta jaoks bash

#!/bin/sh- kesta jaoks sh

Sign # on märk kommentaarist ja sellele järgnevaid märke ei tõlgendata käsuna. See meetod võimaldab teil selgesõnaliselt määrata, millist kesta tuleks järgneva faili sisu töötlemiseks kasutada. Kui skript ei sisalda kirjet, mis selgesõnaliselt määratleks vajaliku shelli, siis kasutatakse selle konto sätteid, mille kontekstis skripti käivitatakse. Sel juhul on võimalik, et näiteks shelli jaoks kirjutatud skript tch antakse täitmiseks kestale bash, mis muudab selle täitmise võimatuks.

Käskude või skriptide täitmisel kasutage keskkonnamuutujad(inglise keeles - keskkond, mille väärtused iseloomustavad tarkvarakeskkonda, milles käske täidetakse. Sellised muutujad võivad sisaldada üldisi süsteemisätteid, graafilisi või käsukesta parameetreid, käivitatavate failide teid jne. Keskkonnamuutujate väärtused määratakse süsteemi tasemel (kõigile kasutajatele) ja konkreetse kasutaja tasemel. Keskkonnamuutujate määramiseks süsteemi tasemel kasutatakse failide sisu:

/etc/profile- määrab muutujad ainult käsukestade jaoks. Saab käivitada mis tahes skripte kestades, mis ühilduvad Bourne'i kestaga.

/etc/bash.bashrc- määrab muutujad ainult interaktiivsete kestade jaoks. Samuti käitab see bash-skripte.

/etc/environment- kasutab PAM-env moodul. Selles failis saab määrata ainult paare nimi=väärtus.

Igal neist failidest on oma rakendus, nii et peaksite hoolikalt valima oma eesmärkidele sobiva faili. Näiteks kui teil on vaja lisada kohandatud kataloog ~/bin muutujaks PATH kõigi kasutajate jaoks asetage järgmine kood ühte süsteemikeskkonna lähtestamisfailidest (/etc/profile või /etc/bash.bashrc):

# Kui kasutaja ID on suurem või võrdne 1000 ja seal on ~/bin kataloog ja see

#pole varem PATH muutujale lisatud,

# eksportida ~/bin asukohta $PATH.

Kui [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin)

Ekspordi PATH=$HOME/bin:$(PATH)

Tavaliselt kasutatakse Linuxi operatsioonisüsteemides teenusekontode jaoks kasutaja ID-d alla 1000 või alla 500. Selles näites määratakse keskkonnamuutuja kõigile süsteemi kohalikele kasutajatele, kelle ID on 1000 või suurem.

Kui teil on vaja konkreetse kasutaja keskkonda muuta, muutke kasutaja keskkonna sisu:

- ~/.bash_profile, ~/.bash_login jne. - kesta lähtestamisfailid kasutaja kodukataloogist.

- ~/.profiil- kasutajaprofiili lähtestamisfail. Paljud kestad kasutavad seda keskkonnamuutujate määratlemiseks.

~/.pam_environment- faili /etc/environment kohandatud analoog, mida kasutab moodul PAM-env.

Näiteks kasutajakataloogi ~/bin lisamiseks muutujaga määratud täitmisfailide otsinguteele PATH, näiteks faili ~/.profiil pane rida:

eksport PATH="$(PATH):/home/user/bin"

Graafiliste rakenduste keskkonnamuutujate määramiseks kasutatakse kasutaja graafilise keskkonna seadete failide sisu ~/.xinitrc

Sagedamini määratakse praeguse kasutajaseansi jaoks keskkonnamuutujate väärtused. Näiteks kohandatud kataloogi lisamiseks ~/bin käivitatavate failide otsinguteel:

eksport PATH=~/bin:$PATH

Uus muutuja väärtus PATH kestab vaid praeguse kasutajaseansi lõpuni.

Muutuja väärtuse vaatamiseks võite kasutada käsku kaja $muutuja, Näiteks:

kaja $PATH

Praegu on kõige levinum kest, nagu eespool mainitud bash. Selle põhjuseks on eelkõige asjaolu, et kest bash on sh- ühilduv käsukest, mis lisab kasulikke funktsioone Korni kestast ( ksh) ja C kest ( csh). Kest bash suudab käivitada enamiku shell-programmeerimiskeele jaoks kirjutatud skripte ilma muudatusteta sh ja püüab jõuda standardile võimalikult lähedale POSIX, mis tõi kaasa palju täiustusi nii programmeerimisel kui ka interaktiivsel kasutamisel. Kaasaegses teostuses bash seal on käsurea redigeerimisrežiim, piiramatu käsuajaloo suurus, ülesannete haldamise tööriistad, varjunimede kasutamise võimalus, ulatuslik sisseehitatud käskude loend, käsukesta funktsioonid jne. Üldiselt bash sobib kõige paremini tavakasutaja vajadustega, mistõttu on see Linuxi keskkonnas enim kasutatud.

Käivitamisel bash ilma käsurea parameetriteta käivitub kest interaktiivses režiimis, kuvades ekraanil käsuviiba. Interaktiivne kest loeb tavaliselt andmeid kasutaja terminalist ja kirjutab andmeid samasse terminali, kusjuures standardseks sisendseadmeks on klaviatuur ja standardseks väljundseadmeks ekraan. Kasutaja sisestab klaviatuuril käsud ja nende täitmise tulemus kuvatakse ekraanil.

  • Õpetus

Miks ja kellele artikkel on mõeldud?

Algselt oli see meeldetuletus õpilastele, kes hakkavad töötama Unixi-laadsete süsteemidega. Teisisõnu, artikkel on mõeldud neile, kellel puudub varasem Unixi käsureaga töötamise kogemus, kuid ühel või teisel põhjusel soovivad või peavad õppima sellega tõhusalt suhtlema.

Mana (dokumentatsiooni) ümberjutustamist ei toimu ja artikkel ei tühista ega asenda mingil viisil nende lugemist. Selle asemel räägin peamistest asjadest (käsklustest, tehnikatest ja põhimõtetest), mida pead juba unix shellis töötamise algusest aru saama, et töö oleks tõhus ja nauditav.

Artikkel käsitleb täisväärtuslikke unix-laadseid keskkondi, millel on täielikult toimiv kest (eelistatavalt zsh või bash) ja üsna lai valik standardprogramme.

Mis on kest

Shell (shell, aka “käsurida”, ehk CLI, aka “konsool”, aka “terminal”, aka “must aken valgete tähtedega”) on tekstiliides operatsioonisüsteemiga suhtlemiseks (noh, rangelt ma mõtlen seda on programm, mis pakub sellist liidest, kuid nüüd on see erinevus tühine).

Üldiselt näeb shellis töötamine välja järgmine: kasutaja (st teie) sisestab klaviatuurilt käsu, vajutab sisestusklahvi, süsteem täidab käsu, kirjutab täitmise tulemuse ekraanile ja ootab jälle järgmist käsku sisestada.

Tüüpiline kesta tüüp:

Kest on peamine viis kõigi Unixi-laadsete serverisüsteemidega suhtlemiseks.

Kust leidub käsureasüsteeme?

Kui unixi kest võib teid oodata, on populaarsed valikud:
  • MacOS (bash);
  • kaugjuurdepääs serverile töö või isikliku veebiprojekti jaoks;
  • kodune failiserver kaugjuurdepääsuga;
  • Ubuntu, PC-BSD sülearvutis/lauaarvutis – unixilaadseid süsteeme on tänapäeval lihtne paigaldada ja kasutada.

Milliseid probleeme on mõistlik kestaga lahendada?

Looduslikud ülesanded, mille jaoks kest sobib, kasulik ja asendamatu:
  • interaktiivne töö terminalis:
    • koostamine, tööde teostamine make kaudu;
    • tekstifailide võrdlemine;
    • kiire ad-hoc andmete analüüs (logis olevate unikaalsete IP-de arv, kirjete jaotus tundide/minutite järgi jne);
    • ühekordsed massitoimingud (lõpetage palju protsesse; kui töötate versioonihaldussüsteemiga, pöörake tagasi või lahendage hulk faile);
    • süsteemis toimuva diagnostika (semaforid, lukud, protsessid, deskriptorid, kettaruum jne);
  • skriptimine:
    • installiskriptid, mille puhul te ei saa loota teiste tõlkide olemasolule - see pole algajatele;
    • funktsioonid interaktiivse kesta kohandamiseks (kutse mõjutamine, kataloogi muutmine, keskkonnamuutujate seadistamine) pole samuti just algajatele;
    • ühekordsed skriptid, näiteks failide massiline ümberkodeerimine;
    • makefailid.

Absoluutselt esimesed sammud

Alustame: logige sisse ja välja

Veenduge, et teate täpselt, kuidas kesta käivitada ja kuidas sellest väljuda.

Kui töötate masinaga, kuhu on installitud Ubuntu, peate käivitama programmi Terminal. Kui olete lõpetanud, saate lihtsalt akna sulgeda.

MacOS-is - käivitage ka terminal.

Kaugserverile juurdepääsuks kasutage ssh-d (kui teil on kohapeal MacOS, Ubuntu või mõni muu unixilaadne süsteem) või putty (kui teil on Windows).

Kes ma olen, kus ma olen?

Käivitage järgmised käsud:
  • hostinimi - kuvab selle masina (serveri) nime, milles parasjagu viibite;
  • whoami - kuvab teie sisselogimise (teie nime süsteemis);
  • puu -d / |vähem - kataloogipuu pseudograafiline esitus masinas; kerimisest väljumine - q ;
  • pwd - kuvab kataloogi, kus te praegu olete; käsureal ei saa olla “lihtsalt niisama”, sa pead olema mingis kataloogis (=praegune kataloog, töökataloog). Tõenäoliselt kuvatakse teie viipas praegune töökataloog.
  • ls - aktiivses kataloogis olevate failide loend; ls /home - määratud kataloogis olevate failide loend;

Käskude ajalugu (ajalugu)

Täisväärtusliku käsurea oluline omadus on käsuajalugu.

Käivitage mitu käsku: hostname, ls, pwd, whoami. Nüüd vajutage üles klahvi. Eelmine käsk ilmub sisestusreale. Üles- ja allaklahvide abil saate ajaloos edasi ja tagasi liikuda. Kui jõuate hostinime juurde, vajutage sisestusklahvi - käsk täidetakse uuesti.

Ajaloost pärit käske ei saa mitte ainult korduvalt täita, vaid ka redigeerida. Kerige ajalugu käsu ls juurde, lisage sellele lüliti -l (selgub, et ls -l , miinuse ees on tühik, pärast mitte). Vajutage sisestusklahvi - muudetud käsk täidetakse.

Ajaloo kerimine, käskude redigeerimine ja uuesti täitmine on käsureal töötamisel kõige levinumad toimingud, seega harjuge sellega.

Kopeeri-kleebi

Käsurida on väga tekstikeskne: käsud on tekst, enamiku standardprogrammide sisendandmed on tekst ja väljundiks on enamasti tekst.

Teksti suurepärane asi on see, et seda saab kopeerida ja kleepida ning see kehtib ka käsureal.

Proovige käsu kuupäeva +"%y-%m-%d, %A"
Kas sisestasite selle täielikult käsitsi või kopeerisite selle artiklist? Veenduge, et saate selle kopeerida, terminali kleepida ja käivitada.

Kui olete õppinud kasutama meest, veenduge, et saate spikrist näidiskäske kopeerida ja käivitada. Kontrollimiseks otsige üles kuupäevaprogrammi spikri jaotis NÄITED, kopeerige ja käivitage esimene antud näide (igaks juhuks: dollarimärk ei ole käsu osa, see on sisendviipa sümboolne kujutis).

Kuidas täpselt terminalist teksti kopeerida ja terminali kleepida, sõltub teie süsteemist ja selle seadistustest, mistõttu universaalseid juhiseid kahjuks anda ei saa. Ubuntus proovige seda: kopeeri - lihtsalt vali hiirega, kleebi - hiire keskmine nupp. Kui see ei tööta või kui teil on mõni muu süsteem, vaadake Internetist või küsige kogenumatelt sõpradelt.

Klahvid ja valikud

Käskude ajalugu uurides olete juba avastanud, et käsul ls on vähemalt kaks võimalust. Kui nimetate seda niisama, väljastab see lihtsa loendi:

Akira@latitude-e7240: ~/shell-survival-quide> ls Makefile shell-first-steps.md shell-first-steps.pdf shell-survival-quide.md shell-survival-quide.pdf
Kui lisate lüliti -l, kuvatakse iga faili kohta üksikasjalik teave:

Akira@latitude-e7240: ~/shell-survival-quide> ls -l kokku 332 -rw-rw-r-- 1 akira akira 198. veebruar 13 11:48 Makefile -rw-rw-r-- 1 akira akira 15107 veebr. 14 22:26 shell-first-steps.md -rw-rw-r-- 1 akira akira 146226 13. veebruar 11:49 shell-first-steps.pdf -rw-rw-r-- 1 akira akira 16626 13. veebruar 11 :45 shell-survival-quide.md -rw-rw-r-- 1 akira akira 146203 13. veebruar 11:35 shell-survival-quide.pdf
See on väga tüüpiline olukord: kui lisada käsukutsele spetsiaalsed modifikaatorid (klahvid, valikud, parameetrid), muutub käsu käitumine. Võrdle: puu / ja puu -d / , hostinimi ja hostinimi -f .

Lisaks võivad käsud võtta parameetritena failinimesid, kataloogide nimesid või lihtsalt tekstistringe. Proovige:

Ls -ld /home ls -l /home grep juur /etc/passwd

mees

mees – abi teie masinas saadaolevate käskude ja programmide, samuti süsteemikutsete ja C-standardi teegi osas.

Proovige: man grep , man atoi , man chdir , man man .

Edasi-tagasi kerimine toimub nuppude “üles”, “alla”, “PageUp”, “PageDown” abil. Otsige abiartiklist konkreetset teksti: vajutage / (kaldkriips), sisestage otsimiseks tekst ja vajutage sisestusklahvi. Liikumine järgmiste esinemiste juurde – klahv n.

Kõik viiteartiklid on jagatud kategooriatesse. Kõige olulisem:

  • 1 - käivitatavad programmid ja shellikäsud (wc, ls, pwd jne);
  • 2 - süsteemikutsed (kahvel, dup2 jne)
  • 3 - raamatukogu funktsioonid (printf, scanf, cos, exec).
Nimede kokkulangevuse korral on vaja märkida, millisest kategooriast tunnistust näidata. Näiteks man 3 printf kirjeldab funktsiooni C standardteegist ja man 1 printf kirjeldab sama nimega konsooliprogrammi.

Saate vaadata kõigi teie arvutis saadaolevate abiartiklite loendit, kasutades käsku man -k. (täpp on ka osa komadast).

vähem

Kui väikeses terminaliaknas on vaja vaadata väga pikka teksti (faili sisu, pikk mees vms), kasutatakse spetsiaalseid “piileri” programme (sõnast page ehk lehekeerajad). Kõige populaarsem kerimisseade on väiksem ja see pakub teile manlehtede lugemisel kerimist.

Proovige käitumist võrrelda:

Kass /etc/bash.bashrc kass /etc/bash.bashrc |vähem

Saate faili piiparile üle kanda otse parameetrites:

Vähem /etc/bash.bashrc

Üles ja alla kerimine - nupud "üles", "alla", "PageUp", "PageDown", väljumine - nupp q. Otsige konkreetset teksti: vajutage / (kaldkriips), sisestage otsitav tekst ja vajutage sisestusklahvi. Liikumine järgmiste esinemiste juurde – klahv n. (Kas tunnete ära juhised inimese kohta? Pole ime, et abi kuvamiseks kasutatakse ka vähem.)

Õigused

Iga fail või kataloog on seotud “õiguste” kogumiga: faili lugemise õigus, faili kirjutamise õigus, faili täitmise õigus. Kõik kasutajad on jagatud kolme kategooriasse: failiomanik, failiomanike rühm ja kõik teised kasutajad.

Failide õigusi saate vaadata ls -l abil. Näiteks:

> ls -l Makefile -rw-r--r-- 1 akira õpilased 198. veebruar 13 11:48 Makefile
See väljund tähendab, et omanik (akira) saab faili lugeda ja kirjutada, rühm (õpilased) ainult lugeda ja kõik teised kasutajad saavad samuti ainult lugeda.

Kui saate töötamise ajal teate loa keelamisest, tähendab see, et teil pole piisavalt õigusi objektile, millega soovite töötada.

Loe lähemalt man chmodist.

STDIN, STDOUT, konveierid (torud)

Iga töötava programmiga on seotud 3 standardset andmevoogu: sisendandmevoog STDIN, väljundandmevoog STDOUT, veaväljundvoog STDERR.

Käivitage wc programm, sisestage tekst Good day today, vajutage Enter, sisestage tekst good day, vajutage Enter, vajutage Ctrl+d. WC programm näitab statistikat tähtede, sõnade ja ridade arvu kohta teie tekstis ja lõpus:

> wc hea päev täna hea päev 2 5 24
Sel juhul sisestasite programmi STDIN-i kaherealise teksti ja saite STDOUT-is kolm numbrit.

Nüüd käivitage käsk head -n3 /etc/passwd, see peaks välja nägema umbes selline:

> head -n3 /etc/passwd root:x:0:0:root:/root:/bin/bash deemon:x:1:1:deemon:/usr/sbin:/usr/sbin/nologin bin:x: 2:2:bin:/bin:/usr/sbin/nologin
Sel juhul ei lugenud peaprogramm STDIN-ist midagi, vaid kirjutas kolm rida STDOUT-i.

Võite seda ette kujutada nii: programm on toru, millesse voolab STDIN ja välja voolab STDOUT.

Unixi käsurea kõige olulisem omadus on see, et "toru" programme saab omavahel ühendada: ühe programmi väljundit (STDOUT) saab edastada sisendandmetena (STDIN) teisele programmile.

Sellist ühendatud programmide konstruktsiooni nimetatakse inglise keeles toruks või vene keeles konveieriks või toruks.

Programmide ühendamine konveieriks toimub sümboliga | (vertikaalne riba)

Käivitage käsk head -n3 /etc/passwd |wc , see näeb välja umbes selline:

> head -n3 /etc/passwd |wc 3 3 117
Juhtus nii: head programm väljastas STDOUT-is kolm tekstirida, mis läksid kohe wc programmi sisendisse, mis omakorda luges kokku märkide, sõnade ja ridade arvu saadud tekstis.

Saate ühendada nii palju programme kui soovite. Näiteks saate eelmisele torujuhtmele lisada veel ühe wc-programmi, mis loeb, mitu sõna ja tähte oli esimese wc väljundis:

> head -n3 /etc/passwd |wc |wc 1 3 24

Konveierite (torude) loomine on käsureal töötamisel väga levinud ülesanne. Näide selle kohta, kuidas seda praktikas tehakse, leiate jaotisest "Üherealise torujuhtme loomine".

I/O ümbersuunamine

Programmi väljundit (STDOUT) ei saa mitte ainult konveieri kaudu teise programmi üle kanda, vaid ka lihtsalt faili kirjutada. See ümbersuunamine toimub kasutades > (suurem kui märk):

Kuupäev > /tmp/today.txt
Selle käsu täitmise tulemusena ilmub kettale fail /tmp/today.txt. Vaadake selle sisu failiga cat /tmp/today.txt

Kui sama nimega fail oli juba olemas, siis selle vana sisu hävitatakse. Kui faili ei eksisteerinud, luuakse see. Kataloog, kus fail luuakse, peab enne käsu täitmist olemas olema.

Kui te ei soovi faili üle kirjutada, vaid pigem lisada väljundi selle lõppu, kasutage >> :

Kuupäev >> /tmp/today.txt
Kontrollige, mis on nüüd failis kirjutatud.

Lisaks saate STDIN-i asemel programmile edastada mis tahes faili. Proovige:

WC

Mida teha, kui midagi on ebaselge

Kui puutute kokku süsteemi käitumisega, millest te aru ei saa, või soovite saavutada teatud tulemuse, kuid ei tea, kuidas, soovitan teil tegutseda järgmises järjekorras (muide, see ei kehti ainult kestade kohta):
  • Sõnastage küsimus või ülesanne võimalikult selgelt - pole midagi raskemat kui "millegi, mida ma ei tea, mille" lahendamine;
  • pea meeles, kui oled sama või sarnase probleemiga juba kokku puutunud – sel juhul tasub proovida lahendust, mis eelmisel korral töötas;
  • loe läbi vastavad man-lehed (kui saad aru, millised man-lehed sinu puhul sobivad) – ehk leiad sobivaid näiteid käskude kasutamisest, vajalikke valikuid või linke teistele käskudele;
  • mõtle: kas ülesannet on võimalik veidi muuta? - võib-olla saate tingimusi pisut muutes probleemi, mida juba teate, kuidas lahendada;
  • esitage oma selgelt sõnastatud küsimus otsingumootoris - võib-olla leiate vastuse Stack Overflow'lt või muudelt saitidelt;
Kui ükski ülaltoodust ei aita, küsi nõu õpetajalt, kogenud kolleegilt või sõbralt. Ja ärge kartke küsida "rumalaid" küsimusi – häbi pole mitte teada, vaid häbi pole küsida.

Kui lahendate keerulise probleemi (ise, Interneti või teiste inimeste abiga), kirjutage oma lahendus üles juhuks, kui teil või teie sõpradel peaks sama probleem uuesti ilmnema. Saate selle salvestada lihtsas tekstifailis, Evernote'is või avaldada sotsiaalvõrgustikes.

Töömeetodid

Kopeeri ja kleebi- man-lehtedelt, StackOverflow artiklitest jne. Käsurea koosneb tekstist, kasutage seda ära: kopeerige ja kasutage näidiskäske, kirjutage õnnestunud leiud mälestuseks üles, avaldage need Twitteris ja blogides.

Tõmmake ajaloost eelmine käsk, lisage konveierile veel üks käsk, käivitage, korrake.Cm. Vaadake ka jaotist "Ühe voodri torujuhtme loomine".

Põhilised käsud

  • muuda teise kataloogi: cd ;
  • failide sisu vaatamine: kass, vähem, pea, saba;
  • failiga manipuleerimine: cp, mv, rm;
  • kataloogi sisu vaatamine: ls , ls -l , ls -lS ;
  • kataloogi struktuur: puu , puu -d (kataloogi saab edasi anda parameetrina);
  • otsi faile: leia . -nimi ...;

Analüütika

  • wc, wc -l;
  • sort -k - sorteeri määratud välja järgi;
  • sort -n - numbriline sortimine;
  • diff - failide võrdlus;
  • grep , grep -v , grep -w , grep "\ " , grep -E - teksti otsimine;
  • uniq , uniq -c - stringi kordustamine;
  • awk - valikus awk "(print $1)" saab igalt realt ainult esimese välja jätta, saab $1 muuta väärtuseks $2, $3 jne;

Süsteemi diagnostika

  • ps axuww - teave masinas töötavate protsesside (töötavate programmide) kohta;
  • top - kõige ressursimahukamate protsesside interaktiivne vaatamine;
  • df - kasutatud ja vaba kettaruum;
  • du - kataloogis olevate failide kogumaht (rekursiivselt koos alamkataloogidega);
  • strace , ktrace - mida süsteem kutsub protsessi teeb;
  • lsof – milliseid faile protsess kasutab;
  • netstat -na, netstat -nap - millised pordid ja pesad on süsteemis avatud.

Teil ei pruugi olla mõnda programmi, mida tuleb täiendavalt installida. Lisaks on mõned nende programmide valikud saadaval ainult privilegeeritud kasutajatele (root).

Mass- ja poolautomaatne täitmine

Jäta see osa algusest peale, kui jõuad lihtsa shelliskriptimiseni.
  • test - tingimuste kontrollimine;
  • while read-loop rida rea ​​haaval STDIN;
  • xargs - STDIN-i stringide asendamine määratud programmi parameetritega;
  • seq - naturaalarvude jadade genereerimine;
  • () - kombineerida mitme käsu väljundit;
  • ; - teha üht asja teise järel;
  • && - käivitatakse, kui esimene käsk on edukalt lõpule viidud;
  • || - käivitada, kui esimene käsk ebaõnnestub;
  • tee - dubleeri programmi väljund STDOUT-i ja faili kettale.

Mitmesugust

  • kuupäev - praegune kuupäev;
  • curl - laadib dokumendi määratud URL-ilt alla ja kirjutab tulemuse STDOUT-i;
  • touch - värskenda faili muutmise kuupäeva;
  • tappa - protsessile signaali saatmine;
  • tõsi - ei tee midagi, tagastab tõese, kasulik igaveste silmuste korraldamiseks;
  • sudo - täitke käsk root "a.

Ühe voodri torujuhtme loomine

Vaatame näidet reaalsest ülesandest: peame hävitama kõik praeguse kasutajana töötavad Task-6-serveri protsessid.

1. samm.
Saate aru, milline programm toodab ligikaudu vajalikke andmeid, isegi kui mitte puhtal kujul. Meie ülesande jaoks tasub hankida kõigi süsteemi protsesside loend: ps axuww. Käivitage.

2. samm.
Vaadake saadud andmeid silmaga, mõelge välja filter, mis viskab osa mittevajalikke andmeid välja. See on sageli grep või grep -v . Kasutage klahvi "Üles", et eemaldada ajaloost eelmine käsk, määrata sellele leiutatud filter ja käivitada.

Ps axuww |grep `whoami`
- ainult praeguse kasutaja protsessid.

3. samm.
Korrake sammu 2, kuni saate vajalikud puhtad andmed.

"
- kõik vajaliku nimega protsessid (pluss võib-olla ka lisatoimingud, nagu vim task-6-server.c jne),

Ps axuww |grep `whoami` | grep "\ " | grep -v vim ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v vähem
- ainult nõutava nimega protsessid

Ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v vähem |awk "(prindi $2)"

Nõutavate protsesside pid, etapp 3 on lõpetatud

4. samm.
Rakenda sobiv lõppkäitleja. Klahvi „Üles” abil tõmbame ajaloost välja eelmise käsu ja lisame töötluse, mis viib probleemi lahendamise lõpule:

  • |wc -l protsesside arvu loendamiseks;
  • >pids faili kirjutamiseks pids;
  • |xargs tapab -9 tapmisprotsessi.

Koolitusülesanded

Kas soovite uusi oskusi harjutada? Proovige järgmisi ülesandeid.
  • hankige kõigi oma kodukataloogis olevate failide ja kataloogide loend;
  • hankige loend kõigist meeste artiklitest kategooriast 2 (süsteemikutsed);
  • loe, mitu korda sõna grep esineb grep programmi man-lehel;
  • loendage, kui palju protsesse töötab praegu administraatorina;
  • leida, milline käsk esineb maksimaalses arvus abikategooriates (mees);
  • loendage, mitu korda sõna var ilmub lehel ya.ru.
Vihje: vajate find , grep -o , awk "(print $1)" , grep regulaaravaldisi , curl -s .

Mida edasi õppida?

Kui sulle hakkab käsurida meeldima, siis ära lõpeta, vaid täienda oma oskusi.

Siin on mõned programmid, mis tulevad kindlasti kasuks, kui elate käsureal:

  • leida keeruliste valikutega
  • apropos
  • asukoha määramine
  • telnet
  • netcat
  • tcpdump
  • rsync
  • ekraan
  • zgrep, zless
  • visudo
  • crontab -e
  • sendmail
Lisaks tasub aja jooksul omandada mingi skriptikeel, näiteks perl või python või isegi mõlemad.

Kellele seda vaja on?

Kas tänapäeval tasub üldse käsurida ja shelliskriptimist õppida? Kindlasti seda väärt. Toon vaid mõned näited Facebooki nõuetest kandidaatidele, kes soovivad FB-s tööd saada.

Kindlasti teavad peaaegu kõik Habri lugejad sh ja bash kestasid. Samuti on enamik meist midagi zsh-st ja tcsh-st kuulnud. Olemasolevate kestade loetelu sellega aga ei lõpe. Need võib laias laastus jagada kolme rühma:

  • Bourne'i kesta kloonid (bash, zsh)
  • C kest (csh, tcsh)
  • Põhineb populaarsetel programmeerimiskeeltel (psh, ipython, scsh)
  • Eksootiline, spetsiifiline ja kõik muu
Arutletakse neist kõige huvitavamatest.

Selle artikli kirjutamise eesmärk ei olnud kõigi olemasolevate käsukestade ülevaatamine ega klassifitseerimine. Tahan lihtsalt rääkida mõnest selle valdkonna huvitavast tootest ja avardada lugeja silmaringi. Mul on hea meel. Kui see julgustab kedagi teemat põhjalikumalt uurima või koguni mõne teise teema juurde minema.
Esiteks lühidalt, mis see on. Käsu kest või käsutõlk on rakendus, mis pakub kasutajale käsurea liidest, kuhu kasutaja kas sisestab käske individuaalselt või käivitab käskude loendist koosnevaid skripte. Suuliselt ja mitteametlikes tekstides nimetatakse seda sageli "shelliks", ingliskeelsest kestast - shell.

Kõige laialdasemalt kasutatavad POSIX-iga ühilduvad kestad pärinevad Bourne'i kestast, seega alustame sellest

Bourne'i kest ja selle kloonid

Bourne'i kest, käivitatav fail: sh. Selle looja Stephen Bourne'i järgi nime saanud käsukest. Enamik operaatoreid laenati ALGOL 68 keelest. See ilmus UNIX-i operatsioonisüsteemi 7. väljaandes, kus see oli vaikekestaks. Tänaseni on valdaval enamusel Unixi-laadsetest süsteemidest /bin/sh – sümboolne või kõva link sh-ühilduva kestaga.

Jälle Bourne'i kest, käivitatav fail: bash. Pealkirja võib tõlkida kui "Bourne'i taassündinud jalutuskäik". Tõenäoliselt tänapäeval kõige populaarsem kest. De facto standard Linuxi jaoks. Ma ei hakka sellel pikemalt peatuma, sest... Internetis on bashi kohta palju häid artikleid. Näiteks siin ja siin.

Z kest, käivitatav fail: zsh. Tasuta kaasaegne SH-ühilduv kest. Sellel on bashi ees mitmeid eeliseid, mis on peamiselt seotud interaktiivses režiimis töötamisega. Nad kirjutasid sellest Habré ja
Lisaks on sellesse rühma kuuluvaid kestasid üsna palju: Korn shell (ksh) ja Almquist kest (tuhk) jne, kuid me ei hakka neil üksikasjalikult peatuma.

C kest

C kest, käivitatav fail: csh Vi autori Bill Joy välja töötatud käsukest. Csh-skriptikeele aluseks oli, nagu nimigi ütleb, C-keel. sel ajal, 1978. aastal, oli see BSD UNIXi arendajate ja kasutajate seas populaarseim programmeerimiskeel. Praegu on csh populaarseim tasuta rakendus tcsh.

TENEX C Shell, käivitatav fail: tcsh. Automaatne täitmine ilmus esmakordselt tcsh-s. See on FreeBSD vaikeshell. Saate selle kohta rohkem lugeda.
Süntaksi erinevuse selgeks näitamiseks toon mitu näidet skriptidest, mis teevad sama asja csh ja sh-ühilduva käsutõlgi jaoks.

Tingimuslik ehitus:

Silmus, mis arvutab kahe esimesed 10 astet:

#!/bin/sh i=2 j=1, samas kui [ $j -le 10 ]; tee kaja "2 **" $j = $i i=`avaldis $i "*" 2` j=`avaldis $j + 1` tehtud #!/bin/csh komplekt i = 2 komplekt j = 1 while ($j<= 10) echo "2 **" $j = $i @ i *= 2 @ j++ end

Bash, zsh ja tcsh uusimate versioonide poolt toetatavate funktsioonide loend on aga väga sarnane ja konkreetse kesta valik on enamasti maitse küsimus. Harvem levinud kestadega on olukord erinev. Siin on erinevused olulisemad.

Populaarsetel programmeerimiskeeltel põhinevad käsukestad.

Perl Shell, käivitatav fail: psh. Kest, mis ühendab ülaltoodud kestade omadused ja Perli keele võimsuse. Sest psh on kirjutatud perlis ja võib töötada isegi Windowsis. Mõned näited psh-i kasutamisest:
ls | s/y/k/ # Asendamine regulaaravaldiste abil ls | ( print ++$i, ": $_"; )q # Kiirfilter. Sulgude sees on Perli avaldis, kus $_ sisaldab ühte väljundi rida.

netstat | ( $_>2; )g # grep filtrid. Prinditakse ainult need read, mille puhul sulgudes olev avaldis tagastab tõese, käsk >[=FOO] # Suuna ümber avatud faili deskriptori käsk > fail # Samaväärne käsuga 2> fail bashis. Suunab väljundi ja veavoo ümber faili grep foo lib/**/*.pm # Kasutage **, mis tähendab praegust kataloogi ja kõiki alamkatalooge Scsh , käivitatav fail scsh
. Avatud lähtekoodiga käsutõlk, mis kasutab skriptikeelena skeemi 48. Ei toeta muude kestade standardfunktsioone (käskude ajalugu, teksti redigeerimine käsureal, tee/käskude lisamine). Skriptimine on soovitatav, kuid mitte interaktiivse töö jaoks. Võib meeldida funktsionaalse programmeerimise austajatele. Allpool on näide skriptist, mis kuvab kõigi keskkonnamuutuja PATH kataloogides asuvate käivitatavate failide nimed

#!/usr/local/bin/scsh -s !# (define (käivitatavad failid) (koos-cwd dir (filter fail-käivitatav? (kataloog-failide kaust #t)))) (define (writeln x) (kuva x) (uusrea)) (iga writeln jaoks (lisa-map käivitatavad failid ((infix-splitter ":") (getenv "PATH")))) IPython
. See on Pythoni programmeerimiskeele interaktiivne kest, millel on mitmeid lisafunktsioone. IPythonil on spetsiaalne profiil süsteemi kestana töötamiseks. Selle režiimi käivitamise viis sõltub, nagu ma aru saan, versioonist, kuid minu masinas näeb see välja järgmine:

ipython3 --profile=pysh

  • IPythonist on juba päris palju kirjutatud, ka vene keeles (lingid artikli lõpus). Püüan loetleda selle peamised funktsioonid käsu kestana kasutamise seisukohast:
  • Platvormideülene. Windowsi jaoks on isegi versioon
  • Pythoni koodi, samuti failinimede ja süsteemikäskude automaatne täitmine.
  • Käskude ajalugu ja sellel põhinevad makrod
  • Mehhanism, mis kiirendab navigeerimist kataloogides, järjehoidjates ja paljus muus
Nagu näete, on IPython oma interaktiivsete võimaluste poolest vähemalt sama hea kui bash. Skriptide osas on IPython mugav neile, kes tunnevad pythoni paremini kui bashi. Tegelikult erinevad IPythoni skriptid puhtast Pythonist ainult süsteemikäskude lihtsustatud kutsumise poolest. Siin on mõned näited pythoni ja süsteemikäskude integreerimisest:
# Oletame, et tahtsime arvutada dpkg logifailide kogumahu: Sisse : cd /var/log/ /var/log Sisse : log_files = !ls -l dpkg.log* Sisse : log_files Out: "-rw-r- -r-- 1 juurjuur 1824 Nov 3 16:41 dpkg.log" Sisse : rea jaoks logi_failides: ....: suurus += int(line.split()) ....: Sisse : suurus Välja: 1330009 # ..või järjestikku pingida kümme hosti In : for i in range(100,110): ....: !ping -c 1 192.168.0.$i ....:
Puhka
Muidugi pole see isegi populaarsete kestade täielik loetelu. Lisaks ülaltoodud kategooriatele on ka neid, mis kasutavad oma süntaksit, mis ei ühildu sh-ga ega kopeeri olemasolevat keelt. Näiteks võiks olla sõbralik interaktiivne kest (kala). Aga lõpetuseks tahaksin rääkida mitte sellest, vaid konkreetsemast unemajast.

Sleep Dummy Shell, käivitatav fail: magamiskott. Rangelt võttes ei saa unekestat käsuprotsessoriks nimetada, sest see ei saa käske töödelda. Ja üldiselt ei saa see midagi teha, välja arvatud perioodiliselt standardväljundisse tärnide "*" kirjutamine. Seda kasutatakse aga just käsukestana ja sel põhjusel: oletame, et tahame anda kellelegi võimaluse teha ssh-tunneleid meie serveri kaudu, kus töötab Linux või Unix. Lugege lisateavet ssh tunnelimise kohta. Kuid me ei vaja, et kellelgi oleks juurdepääs meie serveri käsureale ja failisüsteemile. Sleepshell on selliseks juhuks mõeldud. Loome serveris konto shellina ja installime selle jaoks sleepshelli. Konto omanik saab porte ühendada ja edastada, kuid ei saa käske täita.

See on kõik. Loodan, et oli huvitav. Mul on hea meel saada kommentaare ja nõuandeid artikli teksti kohta.

Seotud lingid
www.faqs.org/faqs/unix-faq/shell/shell-differences – kestade erinevuste ja sarnasuste kokkuvõtlik tabel
www.mariovaldez.net/software/sleepshell – Sleep Dummy Shell
ipython.org/ipython-doc/dev/interactive/shell.html – IPython süsteemi kestana
www.opennet.ru/base/dev/ipython_sysadmin.txt.html – IPythoni kest süsteemiadministraatori tööriistana