Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!


Shell

Iš Pipedijos - durniausios enciklopedijos.
Jump to navigation Jump to search

Shell arba šelas - tai tokia visiškai ne grafinė, o tekstinė vartotojo aplinka, esanti UNIX, o tuo pačiu - ir visokiose Linux, BSD ir kitose panašiose OS. Tekstinėje aplinkoje galima rašyti komandas ar pasileisti kokias nors programas, kaip kad Midnight Commander. Ta pati tekstinė valdymo aplinka sukuria ir tam tikrą programavimo aplinką, kurioje galima rašyti nelabai sudėtingas programas, darančias visokius nelabai sudėtingus OS valdymo darbus.

Viskas labai paprasta: parašote komandą, kaip kokiame messengeryje rašytumėte žinutę, ir paspaudžiate mygtuką Enter. Svarbu tik suprast, kad kitoje pusėje - ne žmogus, o kompiuteris, su kuriuo kalbatės specialia komandų kalba.

Daugeliui pusiau patyrusių vartotojų shell aplinka primena DOS, nes tenai irgi komandinė eilutė būdavo. Tai kai kurie taip ir sako kaip nors, kad "kažkoksai dosas tame linukse yra". Tai išties istorija yra tokia, kad būtent DOS tą šitokios aplinkos idėją kadaise iš UNIX sistemų ir perėmė, tik kad implementavo kraštutinai primityviai, ribotai ir prastai.

Tekstinės aplinkos privalumas - kad lengvai ir patogiai prie jos galima prisijungti iš kur nori. Pvz., stovi jūsų serveris kur nors JAV, o jūs čia Lietuvoje - tai įsijungiate SSH, prisijungiate prie savo serverio ir darote, ką norite. Arba, pvz., stovi jūsų kompiuteris namie - tai prasiforvardinat portą iš routerio į savo kompą ir taip pasijungiate prie savo naminio kompo kad ir iš Amerikos.

Aišku, toksai pasijungimas nėra grafinis - jis yra tekstinis, tačiau daryti galima beveik viską, ką tik nori. Tik paveiksliukų ar filmų nesigauna žiūrėti.


Populiariausių šelų rūšys

Išties yra ne vienas shell - jų yra visa krūva, įvairiausių. Populiariausi yra tokie (pavadinimus rašome iš mažosios, nes tai yra komandos, o jose mažosios ir didžiosios raidės skiriasi):

  • Thompson shell - įdomus gal tiktai istoriškai, nes nuo jo atsirado visokie paipai.
  • sh arba Bourne shell - klasikinis shell, yra visuose UNIX. Klasikinis, visų naudojamas. Arba, jei nenaudojamas, tai pakeičiamas į tokį patį, tik malonesnį bash.
  • bash - pagerintas klasikinis shell, panašus į paprastą sh, bet mokantis mygtukus "aukštyn" ir "žemyn", turintis komandų istoriją ir pan.
  • csh - niekieno nesuprantamas shell, kuris savo komandomis kiek panašesnis į C kalbą ir geriau tinka programavimui, tačiau niekieno nenaudojamas. Yra visose UNIX tipo sistemose.
  • tcsh - tas pats csh, tik naujesnis ir pagerintas taip, kad bent jau įmanoma naudotis būtų.
  • ksh - visokių hipsterių shell, kurį naudoja tie, kas nori vaizduoti, kad jiems reikia kažko geresnio už bash, bet kurie nemoka naudotis csh. Tiesą sakant, niekas negali pasakyti, kuo realiai ksh skiriasi nuo bash. Hint: turi visokius masyvus, kas aktualu nebent programuojantiems.
  • zsh - toksai pusiau kaip bash, pusiau kaip ksh, bet pasitaikantis gal nebent tiktai MacOS-X sistemose, bet geras.
  • ash - toksai kadaise sukurtas open source pakaitalas klasikiniam sh šelui
  • Busybox - toksai specialus šelas, kuriame sukišta viskas, kas tik galima

UNIX/Linux shell komandų naudojimas ir sintaksė

Pirmiausiai svarbu žinoti svarbų dalyką: shell komandose skiriamos didžiosios ir mažosios raidės. Visos komandos rašomos tik mažosiomis raidėmis. Kadangi UNIX palikimą palaiko ir Linux, tai visos šitos komandos veikia ir Linux sistemose. Tiesa, skirtingose UNIX sistemose gali truputį skirtis komandų parametrai, bet paprastai tie skirtumai būna maži.

Komandos užrašomos, pvz., taip:

ls

Aukščiau esanti komanda reiškia, kad jūs norite pamatyti, kokie yra failai tame kataloge, kuriame dabar esate. Parašius komandą, paspaudžiamas mygtukas Enter ir tada komanda įvykdoma. Jos vykdymo rezultatai išvedami čia pat ekrane.

Kas yra komandos parametras? Ogi tai reikia suprasti maždaug taip, kad yra sakinys, kuris įvedamas tekstu ir paspaudžiamas Enter klavišas. Tada shell aplinka ir įvykdo tai, ką nurodė vartotojas. Visame tame įvestame sakinyje pirmas žodis yra pati komanda, o visi kiti žodžiai - tai jau įvairūs parametrai. Parametrai nuo komandos ir tarpusavyje skiriami tarpais. Parametrai, kurie nurodo komandos veikimo būdą, būna pradedami minuso ženklu. Pvz., taip:

ls -al

Šitas parametras "-al" reiškia, kad išvedinėti visus failus, įskaitant ir nematomus, o taip pat, kad išvedinėti pilnus failų duomenis su visokiomis datomis, dydžiais ir panašiai.

Paprastai komandos turi daug galimų parametrų, tai juos kartais galima sužinoti su parametru "--help" ar tiesiog įvedus komandą "man komandospavadinimas" (pvz., "man ls"), tai tada galima gauti visą žinyną su visu tų parametrų aprašymu. Labai praverčia.


Visokios pypkės

Dar tenai yra toksai reiškinys, kaip pypkės arba paipai (angliškai "pipe") - tai tokie duomenų kanalai. Painiai aiškinant, viskas UNIX sistemose yra failai, ir klaviatūra yra failas, ir ekranas irgi yra failas, ir išvis vieni failai visur. Taip kad jei įvykdoma komanda, tai tada ji kažką paima iš failo ir atiduoda kažką į kitą failą, pagal nutylėjimą - į ekraną. Bet galima tą komandos išvedamą tekstą perduoti kitai komandai, o iš tos - dar kitai komandai ir taip toliau. Tai vat tas perdavimas yra padaromas, užrašant stačią brūkšnį, kuris taip ir vadinamas - pypke.

Gaunasi maždaug taip:

ls -al | grep pr0n | less

Tokiu atveju komanda ls perduoda savo duomenis į grep, kuri suranda žodį "pr0n", o tada jau tekstas perduodamas į less, kuri leidžia visą tą išvestį patogiai peržiūrėti, nes galim spėti, kad to pr0n turite labai daug, gal daugiau, nei 9000, o gal ir melejoną failų.

Štai toksai gaunasi sąryšis tarp UNIX ir Pipedijos - ogi per pypkes!

Shell komandų rūšys

Yra trijų rūšių shell komandos:

  • Vidinės ir standartinės komandos - jos dažniausiai yra palaikomos pačios shell programos viduje, o jei yra ne shell viduje, tai guli /bin/ kataloge, kurio programos yra prieinamos visiems ir visada, netgi minimaliausiose sistemose.
  • Išorinės komandos - jos yra ne shell programos viduje, o guli kur nors /usr/bin/ kataloge, t.y., jų gali nebūti pačiose minimaliausiose sistemose, bet realiai visvien būna.
  • Vartotojo komandos - jos yra padaromos, kaip shell skriptai ar dar kokios nors kitos programos, kurios yra tik ten, kur jas pats vartotojas pasidarė ar pasidėjo. Tokios komandos yra nestandartinės, todėl jų čia nenagrinėsim.


Svarbiausių UNIX/Linux shell komandų sąrašas

Standartiškiausios, visur esančios UNIX/Linux shell komandos paprastai yra iš dviejų raidžių (nors yra išimčių). Ilgesnės komandos dažniausiai jau yra papildomos, pridėtos vėlesniais laikais. Tačiau kai kurios iš tų papildomų komandų egzistuoja taip seniai ir taip visur, kad nerasite sistemos, kur tokių komandų nebūtų.

Štai tokios yra dažniau naudojamos vidinės ir standartinės UNIX shell komandos, o taip pat kitos UNIX aplinkos programos, kurios dažnai naudojamos kartu su šelu (skliaustuose - žodžiai, nuo kurių kilo komanda, jie padeda įsiminti komandos pavadinimą):

  • ls (list) - parodyti failų sąrašą
  • cd (change directory) - pereitį į katalogą/direktoriją
  • pwd (print working directory) - parodyti einamąjį katalogą/direktoriją
  • mv (move) - perkelti failą į kur nors
  • ln (link) - sukurti nuorodą į failą
  • rm (remove) - ištrinti failą ar (su parametru -rf) direktoriją
  • cp (copy) - kopijuoti failą ar direktoriją
  • mkdir (make directory) - sukurti direktoriją
  • rmdir (remove directory) - ištrinti direktoriją
  • ps (processes) - parodyti, kokie vyksta procesai (paleistos programos)
  • df (disk free) - parodyti, kiek yra laisvos vietos diskuose
  • du (disk usage) - pasižiūrėti, kiek kas naudoja disko
  • man (manual) - parodyti komandos aprašymą
  • cat (concatenate) - išvesti failą į ekraną
  • head (head) - išvesti į ekraną failo pradžią
  • tail (tail) - išvesti į ekraną failo pabaigą
  • echo (echo) - parašyti kažką ekrane (naudojama programuojant)
  • kill (kill) - perduoti kokiam nors procesui signalą (dažniausiai - išjungimo signalą)
  • grep (jprst, nes tai yra nesąmoninga abreviatūra) - surasti tekstą faile
  • more (more) - išvesti failą į ekraną su galimybe vaikščioti po jį
  • less (more) - geresnė more versija

Dar yra ir kitų komandų, kurios daugiau kaip programos naudojamos:


Kaip shell vadinasi lietuviškai

Pavadinimas "šelas" yra nuo anglų kalbos žodžio "shell", kuris reiškia apvalkalą (ar, siauriau kalbant - kriauklę). Tačiau niekas aplvalkalu lietuviškai tokių dalykų nevadina.

Mūsų kalbainių siūlomas pavadinimas "aplinka" reiškia visiškai ką kitą, nei "shell" - ne tik patį šelą, bet ir visą tai, kas yra aplinkui jį, pvz., kartu naudojamas programas bei bendrai katalogų ir failų struktūrą, kuri UNIX sistemų atveju labai svarbi. Tų programų gali būti daug ir įvairių, o katalogų ir failų taip pat nemažai (ir jie gali nesikeisti, nors šelas gali keistis, bet gali būti ir atvirkščiai - keistis šelas, bet litki ta pati failų/katalogų struktūra), tad standartinė UNIX aplinka yra dar atskira, gerokai platesnė tema.

Kartais siūlomas tiesioginis vertinys "komandų interpretatorius" yra ne tik tiesioginis vertinys, bet ir abiem žodžiais vėlgi nelietuviškas, o ir per daug apibendrinantis, reiškiantis ne tik UNIX šelus, bet ir įvairius programavimo kalbų interpretatorius, kaip pvz., BASIC kalbos, o taip pat DOS ar dar kitų OS komandų interpretatorius, kaip kad Command.Com ar kitus. Bandymai versti į visai jau lietuvišką "nurodymų vykdyklė" tapo tokiu pajuokos reikalu, kad neprigijo netgi visiškų prietrankų tarpe.

Taigi, taip ir įsitvirtino tas žodis - "šelas", nes taip visiems paprasčiau.


Dar žr.


Visokios svarbios Linux temos, kurias turi žinoti kiekvienas
Linux-logo-tux-pingvinas.jpg
Linux distribucijos:
Red Hat Fedora SUSE OpenSUSE Debian Alpine Linux Linux Mint Slackware Arch Linux CentOS Ubuntu
Desktopai:
XFCE LXDE Gnome MATE Cinnamon CDE KDE GnuStep Enlightenment
Svarbios sąvokos:
Xterm Šelas X-Window Langų menedžeris
Svarbios programos:
Midnight Commander Vi Busybox Lynx Wine
Ne Linux:
GNU/Linux UNIX FreeBSD MacOS-X QNX