• Základy programování v shellu. Příkazový shell v UNIXu

    Příkazový jazyk shell (v překladu - shell, shell) je vlastně programovací jazyk velmi vysoké úrovně. V tomto jazyce uživatel ovládá počítač. Obvykle po přihlášení začnete komunikovat s shellem. Znakem, že shell (shell) je připraven přijímat příkazy, je výzva, kterou vysílá na obrazovku. V nejjednodušším případě je to jeden dolar („$“). Shell není nezbytný a jediný příkazový jazyk (ačkoli je standardizován v rámci standardu POSIX mobilní systémy). Poměrně oblíbený je například jazyk cshell, existují i ​​kshell, bashell a další. Navíc si každý uživatel může vytvořit svůj vlastní příkazový jazyk. Může současně pracovat s různými příkazovými jazyky na jedné instanci operačního systému. shell je jedním z mnoha UNIXových příkazů. To znamená, že sada příkazů "shell" obsahuje příkaz "sh" - volání interpretu "shell". První „shell“ se zavolá automaticky, když se přihlásíte a zobrazí výzvu. Poté můžete volat libovolné příkazy k provedení, včetně opět samotného „shell“, který vám vytvoří nový shell uvnitř toho starého. Pokud tedy například připravíte soubor "file_1" v editoru:

    Echo Ahoj!

    pak to bude běžný textový soubor obsahující příkaz "echo", který po provedení zobrazí na obrazovce vše napsané vpravo od něj. Soubor "file_1" můžete nastavit jako spustitelný pomocí příkazu "chmod 755 soubor_1". Ale lze to provést explicitním vyvoláním příkazu "sh" ("shell"):

    Sh soubor_1

    Sh< file1

    Soubor lze také spustit v aktuální instanci „shell“. K tomu existuje specifický příkaz "." (tečka), tzn.

    Soubor_1

    Protože UNIX je systém pro více uživatelů, můžete dokonce osobní počítač pracovat paralelně, řekněme, na 12 obrazovkách (přechod z obrazovky na obrazovku ALT / funkční klávesa), s novým (nebo stejným) uživatelem na každé obrazovce s vlastním příkazovým shellem. V grafickém režimu X-Window můžete také otevřít velké množství oken a každé okno může mít svého uživatele s vlastním příkazovým shellem... Základním prvkem jazyka shellu je příkaz.

    Struktury příkazů:

    Příkazy shellu mají obvykle následující formát:

    <имя команды> <флаги> <аргумент(ы)>

    Například:

    ls -ls /usr/bin

    Kde ls je název příkazu pro vydání obsahu adresáře, -ls jsou příznaky ("-" je znak příznaků, l je dlouhý formát, s je velikost souborů v blocích), /usr/bin je adresář, pro který se příkaz provádí Tento příkaz zobrazí obsah adresáře /usr/bin v dlouhém formátu a zároveň přidá informaci o velikosti každého souboru v blocích rozmanitost v prezentaci argumentů .Počet příkazů, které mají exotické formáty, zahrnují takové "spuštěné" příkazy jako cc - volání kompilátoru C, tar - práce s archivy, dd - kopírování souboru s transformací, find - hledání souborů a řada dalších Zpravidla , první slovo shellu je považováno za příkaz, tedy na příkazovém řádku

    první slovo bude shell interpretovat jako (zřetězení) příkaz, který zobrazí soubor s názvem "cat" (druhé slovo) v aktuálním adresáři. Přesměrování příkazů Standardní vstup (vstup) - "stdin" v OS UNIX se provádí z klávesnice terminálu a standardní výstup (výstup) - "stdout" je směrován na obrazovku terminálu. Existuje také standardní soubor diagnostických zpráv - "stderr", o kterém bude řeč o něco později. Tým, se kterým se dá pracovat standardní vchod a výstup se nazývá FILTER. Uživatel má pohodlné prostředky pro přesměrování vstupu a výstupu na jiné soubory (zařízení). Symboly ">" a ">>" označují přesměrování výstupu. ls >soubor_1 Příkaz "ls" zobrazí seznam souborů v aktuálním adresáři a vloží je do souboru "soubor_1" (místo zobrazení na obrazovce). Pokud soubor "file_1" dříve existoval, bude přepsán novým.

    Pwd >>soubor_1

    příkaz pwd vytvoří plně kvalifikovaný název aktuálního adresáře a umístí jej na konec souboru "file_1", tzn. ">>" se připojí k souboru, pokud není prázdný. symboly"<" и "<<" обозначают перенаправление ввода.

    WC-l

    spočítá a zobrazí počet řádků v souboru file_1.

    Ed soubor_2<

    vytvoří soubor "file_2" pomocí editoru přímo z terminálu. Konec vstupu je určen znakem vpravo "<<" (т. е. "!"). То есть ввод будет закончен, когда первым в очередной строке будет "!". Можно сочетать перенаправления. Так

    WC-l soubor_4

    Wc -l >soubor_4

    se provádějí stejným způsobem: spočítá se počet řádků souboru "soubor_3" a výsledek se uloží do souboru "soubor_4". Zařízení, které kombinuje standardní výstup jednoho příkazu se standardním vstupem jiného příkazu, se nazývá POTRUBÍ a je označeno svislým pruhem "|".

    Ls | wc -l

    seznam souborů v aktuálním adresáři bude předán na vstup příkazu "wc", který zobrazí počet řádků v adresáři. Potrubí může také kombinovat více než dva příkazy, když všechny, možná kromě prvního a posledního, jsou filtry:

    Kočičí soubor_1 | grep -hresult | seřadit | cat -b > soubor_2

    Tento kanál ze souboru "file_1" ("cat") vybere všechny řádky obsahující slovo "result" ("grep"), seřadí ("sort") výsledné řádky a poté očísluje ("cat -b") a výstup výsledku do souboru "file_2". Protože zařízení UNIX jsou reprezentována speciálními soubory, lze je použít v přesměrování. Speciální soubory jsou umístěny v adresáři "/dev". Například "lp" - tisk; "console" - konzole; "ttyi" - i-tý terminál; "null" - fiktivní (prázdný) soubor (zařízení). Pak např.

    Ls > /dev/lp

    vytiskne obsah aktuálního adresáře a soubor_1< /dev/null обнулит файл "file_1".

    seřadit soubor_1 | tričko /dev/lp | ocas -20

    V tomto případě bude soubor "file_1" setříděn a vytištěn a na obrazovce se také zobrazí posledních 20 řádků. Vraťme se k přesměrování ukončení. Standardní soubory jsou číslovány:

    0 - stdin, 1 - stdout 2 - stderr. Pokud si nepřejete, aby se na obrazovce zobrazovala chybová zpráva, můžete ji přesměrovat z obrazovky do vámi zadaného souboru (nebo ji zcela „vyhodit“ přesměrováním do souboru „prázdné zařízení“ - /dev/null). Například při provádění příkazu

    Kočičí soubor_1 soubor_2

    který by měl na obrazovce postupně zobrazovat obsah souborů „soubor_1“ a „soubor_2“, vám dá například následující

    111111 222222 cat: f2: Žádný takový soubor nebo adresář

    kde 111111 222222 je obsah souboru "file_1" a soubor "file_2" chybí, jak je hlášeno příkazem "cat" ve standardním diagnostickém souboru, ve výchozím nastavení, stejně jako standardní výstup reprezentovaný obrazovkou. Pokud takovou zprávu na obrazovce nechcete, můžete ji přesměrovat do souboru, který jste určili:

    Kočičí soubor_1 soubor_2 2>f-err

    chybové zprávy budou odeslány (jak je indikováno přesměrováním "2>") do souboru "f-err". Mimochodem, všechny informace můžete odeslat do jednoho "ff" souboru, v tomto případě pomocí konstrukce

    Cat soubor_1 soubor_2 >>ff 2>ff

    Můžete určit nejen, který ze standardních souborů se má přesměrovat, ale také na který standardní soubor se má přesměrovat.

    Kočičí soubor_1 soubor_2 2>>ff 1>&2

    Zde je nejprve "stderr" přesměrován (v režimu připojení) do souboru "ff" a poté je standardní výstup přesměrován na "stderr", což je nyní soubor "ff". To znamená, že výsledek bude podobný předchozímu. Konstrukce "1>&2" - znamená, že kromě čísla standardního souboru, na který se má přesměrovat, je nutné předřadit "&"; celá struktura je psána bez mezer.<- закрывает стандартный ввод. >- zavře standardní výstup. příkazové soubory. Aby mohl být textový soubor použit jako příkaz, existuje několik možností. Nechte editor vytvořit soubor s názvem „cmd“ obsahující jeden řádek v následujícím tvaru:

    datum; pwd; ls

    Shell můžete vyvolat jako příkaz, označený „sh“, a předat mu soubor „cmd“, buď jako argument, nebo jako přesměrovaný vstup, tzn.

    $ sh cmd

    $sh

    Každý z těchto příkazů vytiskne datum, poté název aktuálního adresáře a poté obsah adresáře. Zajímavější a pohodlnější možností pro práci s dávkovým souborem je přeměnit jej na spustitelný, tzn. stačí z toho udělat příkaz, kterého se dosáhne změnou bezpečnostního kódu. Chcete-li to provést, musíte povolit spuštění tohoto souboru. Například,

    Chmod 711 cmd

    vytvoří bezpečnostní kód "rwx__x__x". Pak jednoduchý hovor

    bude mít za následek provedení stejných tří příkazů. Výsledek bude stejný, pokud soubor s obsahem

    datum; pwd; ls

    je reprezentováno jako: date pwd ls, protože zalomení řádku je také oddělovačem v posloupnosti příkazů. Spustitelné soubory tedy mohou být nejen soubory získané kompilací a sestavením, ale také soubory napsané v jazyce shellu. Provádějí se v interpretačním režimu pomocí interpretu shellu.

    Ladění dávkových souborů

    SHELL používá dva mechanismy pro ladění dávkových souborů. První: set -v vytiskne řádky dávkového souboru tak, jak jsou načítány. Tento režim se používá při hledání syntaktických chyb. Chcete-li jej použít, nemusíte upravovat dávkový soubor, například: sh -v proc... kde proc je název dávkového souboru. Přepínač -v lze použít ve spojení s přepínačem -n, který zabraňuje provádění následujících příkazů (příkaz set -n blokuje terminál, dokud není zadán znak EOF). Příkaz set -x vytiskne příkazy tak, jak jsou prováděny, přičemž řádky programu jsou vytištěny na terminál a jejich hodnoty jsou nahrazeny proměnnými. Chcete-li vypnout přepínače -x a -v, můžete použít příkaz set - a nastavit - přiřadit příslušnou hodnotu proměnné makra. PROSTŘEDÍ SHELL (PROMĚNNÉ A PARAMETRY) Dávkové soubory můžete psát v jazyce shellu a učinit je spustitelnými pomocí příkazu "chmod". Poté se neliší od ostatních příkazů OS UNIX.

    Shell proměnné

    Název proměnné shellu je posloupnost písmen, číslic a podtržítek začínající písmenem. Hodnota proměnné shellu je znakový řetězec. Skutečnost, že v shellu jsou pouze dva datové typy: znakový řetězec a textový soubor na jedné straně usnadňuje zapojení koncových uživatelů do programování, kteří nikdy předtím neprogramovali, a na druhé straně způsobuje vnitřní protest mezi mnoha programátory, kteří jsou zvyklí na větší rozmanitost a větší flexibilitu jazykových prostředků. Je však zajímavé sledovat, jak špičkoví programátoři, kteří zvládli „pravidla hry“ shellu, v něm píší programy mnohokrát rychleji než v C, ale co je obzvláště zajímavé, v některých případech tyto programy fungují dokonce rychlejší než ty implementované v C. Název proměnné je podobný tradičnímu pojetí identifikátoru, tzn. název může být posloupnost písmen, čísel a podtržítek, začínající písmenem nebo podtržítkem. Operátor přiřazení "=" lze použít k přiřazení hodnot proměnným.

    Var_1=13 - "13" není číslo, ale řetězec dvou číslic. var_2="UNIX OS" - Zde jsou potřeba dvojité uvozovky (" "), protože v řetězci je mezera.

    Existují další způsoby, jak přiřadit hodnoty proměnným shellu. Tedy např. vstup

    DAT=`datum`

    způsobí, že příkaz "date" bude proveden jako první (zadní uvozovky označují, že jako první musí být proveden přiložený příkaz) a výsledek jeho provedení, místo toho, aby byl vytištěn na standardní výstup, je přiřazen jako hodnota proměnné v tento případ "DAT". Hodnotu proměnné můžete také přiřadit pomocí příkazu "read", který umožňuje příjem hodnoty proměnné z displeje (klávesnice) v dialogovém režimu. Obvykle před příkazem "read" v dávkovém souboru předchází příkaz "echo", který umožňuje předtisknout nějaký druh zprávy na obrazovku. Například:

    echo -n "Zadejte třímístné číslo:" přečti x

    Při provádění tohoto fragmentu dávkového souboru po zobrazení zprávy

    Zadejte třímístné číslo:

    překladač se zastaví a počká na zadání hodnoty z klávesnice. Pokud zadáte řekněme "753", stane se to hodnotou proměnné "x". Jeden příkaz "read" může číst (přiřazovat) hodnoty pro několik proměnných najednou. Pokud je ve "čtení" více proměnných, než je zadáno (odděleno mezerami), zbývajícím se přiřadí prázdný řetězec. Pokud je v příkazu „read“ více předávaných hodnot než proměnných, pak jsou ty nadbytečné ignorovány. Při přístupu k proměnné shellu musíte před jménem uvést symbol "$". Na obrazovce se tedy zobrazí příkazy echo $var_2 echo var_2

    UNIX OS var_2 Escape

    Pojďme se blíže podívat na únikové techniky používané v shellu. Znaky escape jsou dvojité uvozovky (" "), jednoduché uvozovky (" ") a zpětná lomítka (\). Jejich činnost je zřejmá z příkladů: Můžete napsat několik úkolů na jeden řádek.

    X=22 y=33 z=$x A="$x" B="$x" C=\$x D="$x + $y + $z" E="$x + $y + $z " F=$x\ +\ $y\ +\ $z

    (přiřazení G=$x+$y by nebylo provedeno kvůli mezerám) Potom

    echo A = $A B = $B C = $C echo D = $D E = $E F = $F hodnocení eval echo A = $A hodnocení eval echo B = $B hodnocení eval echo C = $C

    Zobrazeno na obrazovce

    A = 22 B = $x C = $x D = 22 + 33 + 22 E = $x + $y + $z F = 22 + 33 + 22 hodnoceno A = 22 hodnoceno B = 22 hodnoceno C = 22

    Uveďme několik dalších příkladů souvisejících s escapováním zalomení řádků. Nechte proměnnou "string" přiřadit hodnotu "array" 2x3: abc def Všimněte si, že abyste se vyhnuli přiřazení mezer navíc, druhý řádek pole začíná od první pozice následujícího řádku: string="abc def" Pak tam jsou tři způsoby, jak zapsat proměnnou do příkazu "echo" echo $string echo "$string" echo "$string" poskytne tři různé výsledky: abc def $string abc def a sekvenci příkazů echo "str_1 str_2" > file_1 echo "str_1 str_2" > file_2 cat file_1 file_2 bude poskytovat výstup v pořadí identické soubory soubor_1 a soubor_2: str_1 str_2 str_1 str_2 Všimněte si také, že zpětné lomítko (\) nejenže uniká znaku, který za ním následuje, což umožňuje použití speciálních znaků jednoduše jako znaků, které se reprezentují (může také uniknout samo sebe - \\), ale v dávkovém souboru vám zpětné lomítko umožňuje sloučit řádky do jednoho (s útěkem na konec řádku). Například výše uvedený příklad příkazového řádku:

    Kočičí soubor_1 | grep -hresult | seřadit | cat -b > soubor_2

    lze zapsat do dávkového souboru, řekněme jako

    Kočičí soubor_1 | grep -h \výsledek | seřadit | cat -b > soubor_2

    Mimochodem, symbol potrubí také poskytuje efekt pokračování příkazového řádku. V tomto případě to může poskytnout hezčí výsledek, například:

    Kočičí soubor_1 | grep -hresult | seřadit | cat -b > soubor_2

    Manipulace s proměnnými shellu Přestože se s proměnnými shellu obecně zachází jako s řetězci, tj. „35“ není číslo, ale řetězec dvou znaků „3“ a „5“, v některých případech mohou být interpretovány odlišně, například jako celá čísla. Příkaz "expr" má různé možnosti. Pojďme si některé ilustrovat na příkladech: Spuštění dávkového souboru:

    X=7 y=2 a=`výraz $x + $y` ; echo a=$a a=`expr $a + 1` ; echo a=$a b=`expr $y - $x` ; echo b=$b c=`výraz $x "*" $y` ; echo c=$c d=`expr $x / $y` ; echo d=$d e=`expr $x % $y` ; echo e=$e

    se zobrazí na obrazovce

    A=9 a=10 b=-5 c=14 d=3 e=1

    Operace násobení („*“) musí být escapována, protože v shellu je tato ikona vnímána jako speciální znak, což znamená, že toto místo lze nahradit libovolnou posloupností znaků. S příkazem "expr" jsou možné nejen (celočíselné) aritmetické operace, ale také operace s řetězci:

    A=`expr "koktejl" : "kohout"` ; echo $A B=`expr "koktejl" : "ocas"` ; echo $B C=`expr "koktejl" : "vařit"` ; echo $C D=`expr "kohout" : "koktejl"` ; echo $D

    Na obrazovce se zobrazí čísla s počtem odpovídajících znaků v řetězcích (od začátku). Druhý z řádků nemůže být delší než první:

    4 0 0 0

    Export proměnných UNIX má koncept procesu. Proces nastane, když je spuštěn příkaz k provedení. Například při psaní „r“ na klávesnici "Proces "p" je vytvořen. "p" zase může plodit další procesy. Řekněme, že "p" volá "p1" a "p2", které postupně vytvářejí odpovídající procesy. Každý proces má své vlastní prostředí - sadu proměnných, které má k dispozici Například před spuštěním "p" již existovalo prostředí, ve kterém již byly některé proměnné definovány. Spuštěním "p" se vytvoří nové prostředí, ve kterém se vytvoří "p1" a "p2". Proměnné jsou local v rámci procesu, ve kterém jsou deklarovány, tedy tam, kde jsou jim přiřazeny hodnoty. Aby byly dostupné dalším spawnovaným procesům, musí být předány explicitně. K tomu se používá vestavěný příkaz "export".

    Možnosti

    Parametry lze předávat do dávkového souboru. Shell používá poziční parametry (tj. pořadí, ve kterém se objevují, je významné). V dávkovém souboru začínají proměnné odpovídající parametrům (podobně jako proměnným shellu) znakem „$“, po kterém následuje jedna z číslic od 0 do 9: Nechť se „examp-1“ volá „kohout“ a parametry „ocasu“. Tyto parametry vstupují do nového prostředí pod standardními názvy „1“ a „2“. (Standardní) proměnná s názvem "0" bude obsahovat název volaného výpočtu. Při přístupu k parametrům se před číslici umístí znak dolaru "$" (jako při přístupu k proměnným): $0 odpovídá názvu daného dávkového souboru; $1 první parametr; $2 je druhý parametr a tak dále. Vzhledem k tomu, že počet proměnných, kterým lze parametry předávat, je omezen na jednu číslici, tzn. 9. ("0", jak již bylo uvedeno, má zvláštní význam), pak pro přenos více parametry, je použit speciální příkaz "shift". Příkaz "set" poskytuje zvláštní přístup k parametrům. Například fragment

    Nastavte a b s ozvěnou první=$1 sekunda=$2 třetí=$3

    se zobrazí na obrazovce

    První=a Druhá=b Třetí=c

    těch. příkaz "set" nastavuje hodnoty parametrů. To je náhodou velmi pohodlné. Například příkaz "date" zobrazí aktuální datum, řekněme "Mon May 01 12:15:10 2000", skládající se z pěti slov, pak

    Nastavit odezvu `date` $1 $3 $5

    se zobrazí na obrazovce

    Po 01 2000

    Příkaz "set" také umožňuje řídit provádění programu, například: set -v vypíše řádky čitelné shellem do terminálu. set +v zruší předchozí režim. set -x vypíše příkazy do terminálu před provedením. set +x zruší předchozí režim. Příkaz "set" bez parametrů vypíše do terminálu stav softwarového prostředí.

    Substituce shellového interpretu

    Před přímou interpretací a prováděním příkazů obsažených v dávkových souborech se shell spustí různé druhy střídání: 1. NÁHRADNÍ VÝSLEDKY. Všechny příkazy uzavřené v uvozovkách se provedou a na jejich místo se nahradí výsledek. 2. NÁHRADA HODNOT PARAMETRŮ A PROMĚNNÝCH. To znamená, že slova začínající na "$" jsou nahrazena odpovídajícími hodnotami proměnných a parametrů. 3. INTERPRETACE MEZER. Uniklé mezery jsou ignorovány. 4. GENEROVÁNÍ NÁZVŮ SOUBORŮ. Slova se kontrolují na přítomnost speciálních znaků ("*", "?", "") a provádějí se odpovídající generace. Softwarové prostředí Každý proces má své prostředí, ve kterém běží. Shell používá řadu proměnných prostředí. Pokud zadáte příkaz „set“ bez parametrů, na obrazovce se zobrazí informace o řadě standardních proměnných vytvořených při přihlášení (a předávaných všem vašim novým procesům „děděním“) a také o proměnných vytvořených a exportovaných vašimi procesy . Konkrétní typ a obsah zobrazovaných informací závisí do značné míry na tom, která verze systému UNIX je používána a jak je systém nainstalován.

    Výsledek provedení nastavit příkazy bez parametrů (neúplné):

    HOME=/root PATH=/usr/local/bin:/usr/bin:/bin:.:/usr/bin/X11: IFS= LOGNAME=sae MAIL=/var/spool/mail/sae PWD=/home/ sae/STUDY/SHELL PS1=$(PWD):" " PS2=> SHELL=/bin/bash

    Pojďme se vyjádřit k hodnotám proměnných. HOME=/root je název domovského adresáře, kam uživatel skončí po přihlášení. Čili správným zadáním uživatelského jména a hesla se dostanu do adresáře "/root". PATH=/bin:/usr/bin:.:/usr/local/bin:/usr/bin/X11 - tato proměnná nastavuje sekvenci souborů, které "shell" hledá pro příkaz. Názvy souborů jsou zde odděleny dvojtečkami. Pořadí procházení odpovídá pořadí jmen ve stopě. Ale zpočátku hledání probíhá mezi takzvanými vestavěnými příkazy. Mezi vestavěné příkazy patří nejčastěji používané příkazy, jako je "echo", "cd", "pwd", "date". Poté se systém podívá do adresáře "/bin", který může obsahovat příkazy "sh", "cp", "mv", "ls" atd. Dále adresář "/usr/bin" s příkazy "cat", "cc", "expr", "nroff", "man" a mnoha dalšími. Dále se vyhledávání provádí v aktuálním adresáři ("." nebo jiné označení "prázdný", tj. ""), kde se s největší pravděpodobností nacházejí příkazy, které jste napsali. Po zadání příkazového řádku a stisknutí "shell" (po provedení nezbytných náhrad) rozpozná název odpovídající příkazu a vyhledá jej v adresářích uvedených v PATH. Pokud je příkaz umístěn mimo tyto adresáře, nebude nalezen. Pokud existuje několik příkazů se stejným názvem, bude volán ten, který se nachází v adresáři zobrazeném jako první. PATH, stejně jako ostatní proměnné, lze snadno změnit přidáním, přeskupením nebo vyloučením adresářů. IFS= (Internal Field Separator) uvádí znaky, které se používají k oddělení slov (polí). Jedná se o "mezera", "tab" a "line feed", takže zde vlevo od zadání není nic vidět a dva řádky jsou obsazené. LOGNAME=root - přihlašovací jméno ("username"). MAIL=/var/spool/mail/root je název souboru, který přijímá (e-mailovou) poštu. PWD=/root - název aktuálního adresáře PS1=$(PWD):" " - typ promteru. V tomto případě výzva zobrazí název aktuálního adresáře, dvojtečku a mezeru. To znamená, že zde bude "/root:". PS2=> - tato výzva (zde ">") se používá jako pozvánka k pokračování v psaní (na dalším řádku) nedokončeného příkazu. Zadejte například otevírací závorku "(" a po stisknutí na dalším řádku uvidíte tuto výzvu. Pokud ještě nevíte, co dál, napište uzavírací závorku ")" a zmizí. SHELL=/bin/sh – Tato proměnná určuje shell, který uživatel používá. V tomto případě se používá standardní shell („sh“). Počáteční prostředí je nastaveno automaticky při přihlášení pomocí souborů jako "/etc/rc" a "/etc/.profile". Jedním ze způsobů, jak jednoduše změnit prostředí (např. cestu pro vyhledávání příkazů, zobrazení výzvy, zobrazení shellu, barvu obrazovky atd.), je umístění těchto informací do vašeho domovského adresáře ve specializovaném souboru „.profile“ ($(HOME)/.profil ) přiřazením požadovaných hodnot proměnným prostředí. To znamená, zavolejte tento soubor do editoru a napište, co chcete). Poté se při každém přihlášení automaticky spustí tento soubor a nastaví nové prostředí. Tento soubor MUSÍ být umístěn ve vašem HOME adresáři (přihlašovací adresář). Všimněte si, že názvy souborů začínající tečkou mají obecně zvláštní status. Nezobrazují se tedy na obrazovce pomocí jednoduchého příkazu "ls" - tento příkaz musíte volat s příznakem "-a". Mimochodem, nejsou ničeny bez rozdílu příkazem "rm *". Samotný interpret shellu automaticky přiřazuje hodnoty následujícím proměnným (parametrům): ? hodnota vrácená posledním příkazem; $ číslo procesu; ! číslo procesu na pozadí;

    1. počet pozičních parametrů předávaných do shellu;
    • seznam parametrů jako jeden řádek;

    @ seznam možností jako sbírka slov; - vlajky předány do pláště. Při přístupu k těmto proměnným (to znamená, když je používáte v dávkovém souboru - shell programu), byste měli dát "$" dopředu. Důležitá role při vytváření unikátních souborů hraje speciální proměnná "$$", jejíž hodnota odpovídá číslu procesu, který tento výpočet provádí. Každý nový výpočet provedený počítačem zahájí jeden nebo více procesů, které automaticky obdrží čísla v pořadí. Pokud tedy jako název souboru použijete číslo procesu, můžete si být jisti, že každý nový soubor bude mít nový název (ne přepíše existující). Výhodou je i hlavní nevýhoda tohoto způsobu pojmenování souborů. Není známo, jaká jména budou souborům přiřazena. A pokud je v rámci tohoto procesu možné najít soubor „bez hledání“, tj. odkazem na něj pomocí $$, pak lze takové soubory snadno ztratit. Vytváří to další problémy při ladění programů. Volání tlumočníka Po přihlášení uživatele do systému (příkazem login) je volán tlumočník jazyka SHELL. Pokud přihlašovací adresář uživatele obsahuje soubor .profile, pak před přijetím byť jediného příkazu z terminálu provede interpret tento soubor (předpokládá se, že soubor .profile obsahuje příkazy). Během volání lze zadat následující přepínače: -c řetězec Příkazy se čtou ze zadaného řetězce. -s Příkazy se čtou ze standardního vstupu. Zprávy tlumočníka se zapisují do standardního diagnostického souboru. -i Interaktivní režim. Pokud je prvním znakem parametru "0" -, pak se příkazy čtou ze souboru .profile.

    STRUKTURY PROGRAMU===

    Stejně jako v každém programovacím jazyce mohou být v textu v jazyce shellu komentáře. K tomu slouží symbol „#“. Vše, co je v řádku (v dávkovém souboru) nalevo od tohoto symbolu, vnímá interpret jako komentář. Například,

    # Toto je komentář.

    Jako každý procedurální programovací jazyk má i jazyk shell operátory. Řada operátorů umožňuje řídit pořadí provádění příkazů. U takových operátorů je často nutné zkontrolovat podmínku, která určuje směr pokračování výpočtů.

    příkaz test(“)

    Příkaz test kontroluje, zda je splněna určitá podmínka. Pomocí tohoto (vestavěného) příkazu se vytvoří příkazy pro výběr jazyka shellu a smyčky. Dva možné formáty příkazů:

    zkušební stav

    [podmínka]

    použijeme druhou možnost, tzn. místo toho, abychom před podmínku psali slovo "test", uzavřeme podmínku do hranatých závorek, která je programátorům známější. Ve skutečnosti shell rozpozná tento příkaz z úvodní závorky "[" jako slovo odpovídající příkazu "test". Mezi závorkami a podmínkou v nich obsaženou musí být mezery. Mezi hodnotami a porovnávacím znakem nebo operací musí být také mezery. Shell používá podmínky různých "typů". PODMÍNKY KONTROLY SOUBORU: -f soubor "soubor" je běžný soubor; -d soubor soubor "soubor" - adresář; -c soubor "soubor" je speciální soubor; -r soubor má oprávnění číst soubor "soubor"; -w soubor má oprávnění zapisovat do souboru "soubor"; -s soubor "soubor" není prázdný.

    PODMÍNKY KONTROLY ŘETĚZCE: str1 = str2 řetězce "str1" a "str2" se shodují; str1 != str2 řetězce "str1" a "str2" se neshodují; -n str1 řetězec "str1" existuje (není prázdný); -z str1 řetězec "str1" neexistuje (prázdný). Příklady.

    x="kdo je kdo"; export x; [ "kdo je kdo" = "$x" ]; echo $? 0 x=abc; export x ; [ abc = "$x" ] ; echo $? 0 x=abc; export x ; [ -n "$x" ] ; echo $? 0 x="" ; export x ; [ -n "$x" ] ; echo $? 1

    Kromě toho existují dvě standardní hodnoty podmínky, které lze použít místo podmínky (není potřeba závorek). PODMÍNKY POROVNÁNÍ CELÉHO ČÍSLA: x -eq y "x" se rovná "y", x -ne y "x" se nerovná "y", x -gt y "x" je větší než "y", x -ge y "x" je větší než nebo rovno "y", x -lt y "x" je menší než "y", x -le y "x" je menší nebo rovno "y". KOMPLEXNÍ PODMÍNKY: Implementováno pomocí typických logických operací: ! (ne) převrátí hodnotu výstupního kódu. -o (nebo) odpovídá logickému "OR". -a (a) odpovídá logickému AND.

    Podmíněné prohlášení „pokud“.

    Obecně platí, že příkaz "if" má strukturu

    pokud podmínka, pak seznam

    Zde "elif" je zkratka pro "else if" a lze jej použít spolu s úplným, tj. vnoření libovolného počtu příkazů "if" (i jiných příkazů) je povoleno. Určitě by měl být „seznam“ v každém případě smysluplný a v daném kontextu přípustný. Nejvíce zkrácená struktura tohoto operátoru

    Pokud podmínka, pak seznam fi

    je-li podmínka splněna (zpravidla je to ten, kdo obdržel kód dokončení "0", pak se provede "seznam", jinak se přeskakuje. Příklady. Nechť se píše "if-1"

    Pokud [ $ 1 -gt $ 2 ]

    pak pwd else echo $0: Dobrý den!

    Potom zavolání if-1 12 11 dá /home/sae/STUDY/SHELL a if-1 12 13 dá if-1: Ahoj!

    Výpis volání ("případ")

    Příkaz výběru "případ" má strukturu:

    Řetězec pouzdra dovnitř

    vzor) seznam příkazů;; vzor) seznam příkazů;; ... vzor) seznam příkazů;;

    Zde jsou „případ“, „in“ a „esac“ pomocná slova. "Řetězec" (může to být jeden znak) je porovnán se "vzorem". Poté se provede "seznam příkazů" vybraného řádku. Nezvykle se podívejte na konec výběrových řádků ";;", ale zde napište ";" byla by to chyba. Pro každou alternativu lze provést několik příkazů. Pokud jsou tyto příkazy napsány na jednom řádku, pak znak ";" bude použit jako oddělovač příkazů. Poslední řádek výběru má obvykle vzor "*", což znamená "libovolná hodnota" ve struktuře "případ". Tento řetězec je vybrán, pokud hodnota proměnné (zde $z) neodpovídá žádnému z dříve zapsaných vzorů oddělených závorkou ")". Hodnoty se vyhledávají v pořadí, v jakém byly zapsány.

    Příkaz výčtové smyčky ("for")

    Operátor smyčky "for" má strukturu:

    Pro jméno

    do seznam provedených příkazů, kde "for" je funkční slovo, které definuje typ cyklu, "do" a "done" jsou servisní slova, která zvýrazňují tělo cyklu. Nechte příkaz "lsort" reprezentovat dávkový soubor

    Pro i v soubor_1 soubor_2 soubor_3 proveďte proc_sort $i hotovo

    V tomto příkladu hraje jméno "i" roli parametru smyčky. Tento název lze považovat za proměnnou shellu, které jsou postupně přiřazeny uvedené hodnoty (i=soubor_1, i=soubor_2, i=soubor_3) a příkaz „proc_sort“ se provádí ve smyčce. Často se používá tvar „pro i v *“, což znamená „pro všechny soubory v aktuálním adresáři“. Nechť "proc_sort" je reprezentován dávkovým souborem

    Kočka 1 $ | seřadit | tee /dev/lp > $(1)_sorted

    těch. určené soubory jsou postupně seřazeny, výsledky řazení jsou vytištěny ("/dev/lp") a odeslány do souborů file_1_sorted file_2_sorted a file_3_sorted

    Příkaz smyčky s pravdivou podmínkou ("while")

    Struktura „while“, která také poskytuje výpočty, je vhodnější, když není předem znám přesný seznam hodnot parametrů nebo musí být tento seznam získán jako výsledek výpočtů ve smyčce. Příkaz cyklu "while" má strukturu:

    zatímco podmínka

    do seznam provedených příkazů, kde "while" je funkční slovo, které definuje typ smyčky s pravdivou podmínkou. Seznam příkazů v těle smyčky (mezi "do" a "done") se opakuje, dokud podmínka není pravdivá (tj. výstupní kód posledního příkazu v těle smyčky je "0") nebo dokud není smyčka přerušena uvnitř pomocí speciálních příkazů ("break", "continue" nebo "exit"). Při prvním vstupu do smyčky musí být podmínka pravdivá. Příkaz "break [n]" umožňuje opustit smyčku. Pokud "n" chybí, pak je ekvivalentní "break 1". "n" označuje počet vnořených smyček, ze kterých se má opustit, například "přerušení 3" - výstup ze tří vnořených smyček. Na rozdíl od příkazu "break" příkaz "continue [n]" pouze ukončí provádění aktuální smyčky a vrátí se na START smyčky. Může být i s parametrem. Například "pokračovat 2" znamená výstup na začátek druhé (pokud se počítá z hloubky) vnořené smyčky. Příkaz "exit [n]" umožňuje ukončit proceduru společně s návratovým kódem "0" nebo "n" (pokud je zadán parametr "n"). Tento příkaz lze použít nejen ve smyčkách. I v lineárním sledu instrukcí může být užitečné při ladění zastavit provádění (aktuálního) výpočtu v daném bodě.

    Příkaz smyčky s nepravdivou podmínkou ("až")

    Operátor smyčky "až" má strukturu:

    do stavu

    do seznam provedených příkazů, kde "až" je funkční slovo, které definuje typ smyčky s chybnou podmínkou. Seznam příkazů v těle cyklu (mezi "do" a "done") se opakuje, dokud není podmínka nepravdivá nebo dokud není smyčka zevnitř přerušena speciálními příkazy ("break", "continue" nebo "exit") . Při prvním vstupu do smyčky podmínka nesmí být pravdivá. Rozdíl oproti operátoru "while" je v tom, že podmínka smyčky se kontroluje na nepravdivost (pro nenulový výstupní kód posledního příkazu těla smyčky) se kontroluje PO každém (včetně prvního!) provedení příkazů tělo smyčky. Příklad.

    dokud neučiní falešné

    read x if [ $x = 5 ] then echo dost ; break else echo some more fi

    Zde program čeká v nekonečné smyčce na zadání slov (opakováním fráze „nějaké další“ na obrazovce), dokud není zadáno „5“. Poté se vydá „dost“ a příkaz „break“ ukončí provádění smyčky.

    Prázdné prohlášení

    Prázdný příkaz má formát

    :

    Nicnedělání. Vrátí hodnotu "0".

    Funkce shellu

    Funkce umožňuje připravit seznam příkazů shellu pro následné provedení. Popis funkce vypadá takto:

    Name() (seznam příkazů)

    po kterém dojde k volání funkce jménem. Po provedení funkce se nevytvoří žádný nový proces. Provádí se v prostředí odpovídajícího procesu. Argumenty funkce se stanou jejími pozičními parametry; název funkce je jejím nulovým parametrem. Provádění funkce můžete přerušit příkazem "return [n]", kde (nepovinné) "n" je návratový kód.

    Manipulace s přerušením ("past")

    Někdy je nutné chránit provádění programu před přerušením. Nejběžnější přerušení jsou následující, odpovídající signálům: 0 odchod z tlumočníka, 1 uvolnění (odpojení vzdáleného účastníka), 2 přerušení od , 9 zabití (nezachyceno), 15 ukončení provádění. Pro ochranu před přerušeními existuje příkaz "trap", který má formát:

    Zachyťte signály "seznamu příkazů".

    Pokud se v systému vyskytnou přerušení, jejichž signály jsou uvedeny s mezerou v "signálech", provede se "seznam příkazů", po kterém (pokud nebyl v seznamu příkazů proveden příkaz "exit") se vrátí do bodu přerušení a provádění dávkového souboru bude pokračovat. Například, pokud chcete smazat soubory v "/tmp" před přerušením provádění nějakého dávkového souboru, pak to lze provést příkazem "trap":

    Trap "rm /tmp/* ; exit 1" 1 2 15

    který předchází ostatním příkazům v souboru. Zde se po smazání souborů provede „exit“ z dávkového souboru.

    =====================================================

    LABORATORNÍ PRÁCE č. 1 (čas na dokončení - 3 hodiny)

    Předmět: „Úvod doskořápka

    1. Úvod do shellu

    Shell je příkazový interpret (příkazový procesor), který funguje jako rozhraní mezi uživatelem a unixovým jádrem. Solaris nabízí tři hlavní shelly:

      Výchozí Bourne shell je /sbin/sh

      C shell -- /bin/csh

      Příkazový procesor Korn-- ./bin/ksh

    Kromě těch, které jsou uvedeny, Solaris poskytuje další shelly:

      J shell -- /sbin/jsh

      Omezený Korn l -- / usr/ bin/rsh

      T-shell -- /usr/bin/tcsh

      Znovu GNU Bourne -- /usr/bin/bash

      Z shell - usr/bin/zsh

    Výběr pláště je věcí osobních preferencí.

    2. Spusťte příkazy

    Jakýkoli příkaz v Unixu se skládá z názvu programu, který se má spustit (příkaz), voleb (přepínačů) a argumentů předávaných programu. Oddělovače příkazového řádku jsou mezery nebo tabulátory.

    Příklad

    $ /bin/ping –t 10 192.168.2.13

    argument

    shell prompt

    Pokud při spouštění programu není zadána cesta ke spustitelnému souboru, operační systém postupně prohledá adresáře zadané v proměnné PATH. Pokud je v prohlíženém adresáři program se stejným názvem, spustí se ke spuštění. Aktuální pracovní adresář se při hledání programů nevyhledává, pokud není nastaven v proměnné PATH.

    ! Z bezpečnostních důvodů se administrátorovi doporučuje nepřidávat aktuální adresář a domovské (osobní) adresáře uživatele do proměnné PATH.

    Příklady

    Spuštění programu s úplnou cestou

    $ / usr/ místní/ zásobník/ můj_ program

    Spuštění programu z vyššího (nadřazeného) adresáře

    $ ../ místní/ zásobník/ můj_ program

    Spuštění programu z aktuálního adresáře

    $ ./ můj_ program

    3. Speciální znaky v shellu

    Některé znaky ve skořápce mají speciální význam.

    3.1. Vzory generování názvu souboru

    ? (otazník) odpovídá libovolnému jednotlivému znaku kromě první tečky;

    (hranaté závorky) definovat skupinu symbolů (je vybrán jeden symbol ze skupiny);

    - (znaménko mínus") definuje rozsah platných znaků;

    ! (Vykřičník) odmítá skupinu znaků, která za ním následuje;

    * (symbol hvězdy) odpovídá libovolnému počtu znaků kromě první tečky.

    3.2. symboly přesměrování I/O

    < - přesměrování vstupu;

    >, >> - přesměrování výstupu;

    2>, 2>> - přesměrování chybových zpráv;

    | - dopravník.

    3.3. Symboly zástupných znaků

    $variable_nameq - variabilní substituce;

    $ (příkaz) nebo "příkaz" - substituce příkazů;

    ~ - tilda substituce.

    4. Hledat

    Pro rychlé hledání soubory a adresáře se používá příkaz whereis, pro hlubší příkaz find (hledání souborů splňujících zadané požadavky;).

    5. vi textový editor

    Textový editor vi je univerzální textový editor, který lze nalézt na jakémkoli Unixu. Kromě úprav textové soubory, editor vi lze použít k úpravě příkazového řádku.

    Editor vi má 3 provozní režimy (viz obrázek).

    Vstup do editoru vi

    Odejít z vi

    Znak „~“ (tilda) na první pozici označuje prázdné (neexistující) řádky souboru.

    Hlavním režimem je příkazový, ve kterém se příkazy zadávají stisknutím určité sekvence kláves (nejsou nijak zobrazeny na obrazovce).

    Pohyb v textu v příkazovém režimu se provádí pomocí šipek a kláves (vlevo, odjet) (dolů), (nahoru), (doprava).

    Některé příkazy vi jsou uvedeny v tabulce.

    Smazat aktuální řádek

    Zkopírujte aktuální řádek do schránky

    Pohyb kurzoru

    Vkládání znaků označených kurzorem do vyrovnávací paměti

    Vložit nový řádek zespodu

    Nahoře vložte nový řádek

    Přidat za kurzor

    Připojit za aktuální řádek

    Vložit před kurzor

    Vložit před aktuální řádek

    Nahrazení znaku znakem zadaným z klávesnice

    Vložit text ze schránky

    . (tečka)

    Znovu proveďte poslední provedený příkaz

    Zrušit poslední příkaz

    Vrátit zpět všechny změny na aktuálním řádku

    Smazat znak nad kurzorem

    V režimu zadávání se do textu vkládají všechny znaky napsané na klávesnici.

    V režimu posledního řádku se příkaz, který zadáte, zobrazí na posledním řádku obrazovky.

    6. Pomoc

    Unix má elektronický manuál, který obsahuje popis účelu příkazů, jejich syntaxi, příklady použití atd. Manuál se volá příkazem man:

    7. Základní příkazy shellu

    SZO– zobrazování informací o aktivních uživatelích;

    echo– výstup zpráv na terminál;

    prapor– výstup zpráv na terminál velkými písmeny;

    muž– volání do systému online nápovědy;

    datum – výstup aktuálního data;

    napsat– přenos zpráv na terminál jiného uživatele;

    zpráva– povolení/zákaz zobrazování zpráv od jiných uživatelů;

    pošta– odesílání/příjem pošty;

    zprávy- seznámení s novinkami systému;

    pwd– zobrazit absolutní cestu k aktuálnímu pracovnímu adresáři;

    CD– změna pracovního adresáře;

    ls– zobrazení informací o obsahu adresáře;

    mkdir- vytvoření adresáře;

    rmdir– smazání adresáře;

    dotek– aktualizace časového razítka souboru;

    cp– kopírování souborů;

    kočka- slučování a zobrazování obsahu souborů;

    více– stránkování obsahu souboru.

    mv – přesunutí nebo přejmenování souboru;

    rm– smazání souboru;

    alias– vytvoření pseudonymu;

    tr– transformace postavy;

    výstup- dokončení proudu skořápka-A;

    tričko– zachycení výsledků potrubí;

    střih – výběr polí z řetězce;

    grep– vyhledávání podle vzoru;

    pr– výstup souboru na standardní výstup ve stanoveném formátu;

    seřadit- třídění;

    hlava– výstup prvních řádků souboru;

    ocas- výstup posledních řádků souboru;

    toaleta- počítání počtu znaků, slov a řádků;

    číst, echo - čtení a zobrazování hodnot proměnných;

    test- hodnocení hodnoty výrazu;

    expr, nechat- výpočet aritmetických výrazů;

    8. Shell- programy

    Shell umožňuje uložit sekvenci příkazů do souboru a poté jej provést. Chcete-li spustit soubor s programem shell pro spuštění, musíte k přístupovým právům přidat oprávnění ke spuštění:

    $ chmod +x název_souboru_programu

    Větvení v programech shellu je organizováno pomocí operátorů:

    Jestliže pak jinak

    Příkazy smyčky:

    CVIČENÍ

    1. Který z následujících příkazů způsobí zobrazení uvítací zprávy na obrazovce? co nejsou? Proč?

    $ echo ahoj

    $ echo ahoj

    $ echo AHOJ, SVĚTE

    $ prapor Ahoj

    $ PRAPOR AHOJ, SVĚT

    2. Pomocí příkazů vytiskněte zprávu z více řádků echo A prapor.

    3. Vypište datum do dvou řádků: na první řádek - den, měsíc, rok, na druhý řádek - aktuální čas, s komentářem k výstupu.

    4. Použití příkazu napsat, odešlete zprávu do konzole. Odesílejte zprávy na více terminálů současně.

    5. Použití příkazu zpráva, určit, zda jsou na vašem terminálu povoleny zprávy. Zakázat zprávy. Jaká bude reakce systému, když se vám někdo pokusí poslat zprávu?

    6. Pojmenujte své DOMOV-katalog.

    7. Procházejte podstrom adresářů počínaje adresářem /export/home pomocí příkazů cd, ls A pwd.

    8.. Vytvořte ve svém DOMOV-adresářové podadresáře formuláře:

    ovocné květy

    jablko hruška hrozny růže fialka pampeliška

    tmavozelený

    9. Být ve svém DOMOV-adresář, vytvořte následující podadresáře pomocí jediného příkazového řádku:

    ABECEDA

    10. Být ve svém DOMOV-adresář, smaže všechny podadresáře adresáře A.

    11. Být in DOMOV-adresář, vytvořte soubor macintosh ve stávajícím katalogu jablko a několik souborů v adresářích temný A zelená. Vstupte do katalogu Fsnižuje. Být v adresáři Fsnižuje, zkopírujte všechny podadresáře Fruity spolu se soubory, které obsahují, do speciálně vytvořeného adresáře košík.

    12. Být v katalogu Fsnižuje, odstranit adresář Fruity.

    13. Přečtěte si soubor .profil pomocí příkazů kočka A více.

    14. Vytvořte v DOMOV- textový soubor adresáře můj soubor z více řádků pomocí příkazu kočka. Vytvořte textový soubor MyFile, zapsáním stejných řádků do něj. Kolik souborů jste získali? Proč?

    15. Prohlédněte si obsah souboru vytvořeného v úloze 2.2 můj soubor. Zkopírujte soubor můj soubor do souboru mycopy. Prohlédněte si obsah obou souborů.

    16. Přesuňte soubor mycopy do katalogu květiny.

    17. Být in DOMOV-adresář, vytvořte odkaz myodkaz na soubor mycopy umístěný v adresáři květiny. Zobrazit soubor s odkazem.

    18. Přidejte do souboru řádek můjodkaz. Který ze souborů můjodkaz, můjkopírovat, můjsoubor změnil? Proč?

    19. Jaký příkaz lze použít k určení počtu odkazů? Určete počet odkazů pro soubory můjodkaz, můjkopírovat, můjsoubor.

    Smazat soubor mycopy. Co se stalo se souborem odkazu? Určete počet odkazů pro soubory můjodkaz, můjsoubor.

    20. Vytvořte alias dir An, která vytiskne obsah aktuálního adresáře v rozšířeném formátu.

    21. Odhlaste se a znovu se přihlaste. Funguje alias? dir? Co je třeba udělat, aby se alias mezi relacemi „neztratil“?

    22. Vytvořte alias směřovat, který vytiskne seznam souborů v pracovním adresáři, jejichž názvy začínají tečkou.

    23. Použití příkazu dotek, vytvořte soubory v novém adresáři s názvy tak, aby současně:

    Šablona A* shodných 5 souborů;

    Šablona * A odpovídající 4 soubory;

    Šablona ??.? odpovídající 3 soubory;

    Šablona * aa* odpovídající 2 soubory;

    Šablona??? odpovídá 1 souboru.

    24. Jaký příkaz byste měli zadat, abyste provedli následující:

    a) zobrazit názvy všech souborů začínající tečkou;

    b) zobrazit názvy všech souborů končících na „.txt“;

    c) vytisknout názvy všech souborů obsahujících slovo "můj";

    25. Změňte všechna malá písmena na velká v jednom souboru, všechna velká písmena na malá v jiném. Odstraňte ze souboru všechny duplicitní mezery.

    26. Vytvořte soubor s názvem * . Smažte pouze tento soubor. Buďte opatrní při používání znaků pro generování názvu souboru!

    27. Vytvořte soubor se znakem mezery v názvu. Jak takový soubor smazat?

    28. Použití příkazu kočka zdvojnásobí obsah souboru připojením původního obsahu na konec stejného souboru. Přejděte do adresáře květiny. Přidat do souboru seznam vypsat obsah adresáře květiny. Zobrazení obsahu souboru

    29. Zkuste číst pomocí příkazu kočka neexistující soubor. Jaká je reakce systému? Udělejte totéž přesměrováním chybových zpráv do souboru moje chyba. Co vidíte na obrazovce? Prohlédnout soubor moje chyba.

    30. Vytvořte kanál pro seznam pouze jmen a oprávnění souborů aktuálně ve vašem pracovním adresáři.

    31. Změňte sestavený kanál tak, aby byl seznam uložen v souboru seznam Tvůj jeho DOMOV-adresář a byl zobrazen pouze počet souborů v seznamu.

    32. Zobrazte obsah souboru /etc/passwd, seřazené podle pole uživatelského jména.

    33. Vytvořte alias přihlášenna, který zobrazí abecedně seřazený seznam jmen aktuálně přihlášených uživatelů do systému.

    33. Pomocí příkazů zobrazte aktuální datum velkými písmeny datum A prapor.

    34. Přiřadit k proměnné JSEM Vaše registrační jméno. Spusťte další skořápka. Vidíte tuto proměnnou? Co je potřeba udělat, aby to bylo vidět ve vygenerovaném skořápka? Změňte hodnotu proměnné JSEM v generované skořápka. Exit se vytvořil skořápka. Podívejte se na hodnotu této proměnné v originále skořápka. Vysvětlete výsledek.

    35. Napište skořápka-program info, který vyzve uživatele k zadání jména, adresy, dne, měsíce a roku narození a zobrazí tyto informace v opačném pořadí

    36. Napište skořápka- program, který zobrazí výzvu k zadání čísla, zadané číslo uloží do proměnné Y a vytiskněte zprávu "Y je větší než 7", pokud hodnota Y větší než 7 a "Y jene větší než 7” v opačném případě.

    37. Napište program shellu, který zobrazí následující statistiky:

    a) vaše jméno;

    b) počet argumentů, se kterými je spuštěn;

    c) vypíše každý z jeho argumentů a délku argumentu ve znacích;

    38. Napište skořápka-program, který určí počet argumentů na příkazovém řádku a vydá chybovou zprávu, pokud počet argumentů není roven třem, nebo samotné argumenty, pokud se jejich počet rovná třem.

    39. Pište skořápka- program, který zobrazí výzvu k zadání ID uživatele, zkontroluje, zda ID vyhovuje těm, které se používají v systému, a zobrazí celé jméno DOMOV-adresář nebo v případě neplatného identifikátoru vydat chybové hlášení.

    40. Napište shellový program Ahoj, poskytující následující odpověď na argumenty příkazového řádku:

    Argument "-d"- program provede příkaz datum;

    Argument "-l"- program zobrazí obsah aktuálního adresáře;

      pokud na příkazovém řádku nejsou žádné nebo neplatné argumenty, program zobrazí nápovědu o svých možnostech.

    41. Napište program slova, která uživatele vyzve k zadání jednoho slova po druhém, dokud slovo nezadá konec. Zapamatujte si všechna zadaná slova. Po zadání slova konec zobrazit všechna zadaná slova na obrazovce.

    42. Změňte systémovou výzvu tak, aby obsahovala úplnou cestu k aktuálnímu pracovnímu adresáři .

    43. Napište program virus, která vytvoří spustitelnou kopii sebe sama s jiným jménem a poté se smaže.

    44. Napište program virus2 , který hledá v aktuálním adresáři programu příkazový jazyk a přidá k jejich textu příkaz pro zobrazení slova infikovaný!”.

    45. Napište program virus3 , která do nalezených programů v příkazovém jazyce přidává svůj vlastní kód, aby infikovala jiné programy.

    46. ​​Napište program virus4 úpravou vašeho viru tak, aby při infikování byl infikující kód odstraněn z infikujícího programu.

    47. Napište program antivirus, který by našel všechny programy prostředí infikované vaším virem.

    48. Upravte vyvinutý program tak, aby infikované programy nejen našel v jím určeném adresáři, ale také je „vyléčil“ uložením infikované verze do nového souboru s koncovkou . vir a odebráním atributu vykonat z takového souboru.

    49. Napište program virus5 , které by:

    a) by infikoval programy shellu v aktuálním adresáři a jeho podadresářích virem pouze v případě, že by uživatel zadal příkaz ls;

    b) chovat se jako tým ls, aniž by cokoli rozdali na terminálu své práce.

    50. Napište virus6 program založený na programech virus2 -virus5 , jehož infikující kód nemohl být detekován vámi vyvinutým programem antivirus a k infekci by došlo při jakékoli hodnotě proměnné CESTA.

    51. Napište program supervirus, jehož spuštění infikuje vaše soubory virem vyvinutým v předchozí úloze a pokaždé, když se přihlásíte do systému, dojde k pokusu infikovat soubory vašich spolubojovníků. Program supervirus vymaže se po prvním spuštění.

    52. Napište program superantivirus, který detekuje a kompletně „vyléčí“ (pokud je uvedena příslušná volba) všechny soubory v zadaném adresáři a jeho podadresářích od všech vyvinutých virů.

    Anotace: Koncept příkazového shellu. Přehled příkazových shellů. příkazový shell bash. Funkce práce (historie příkazů, operátor "!", akce po stisknutí klávesy ). Multitasking v konzoli. Úkoly. Správa úkolů. Proměnné prostředí půlnočního velitele

    Postup lekce

    1. Ve světě Linuxu a Unixu je práce na počítači neoddělitelně spjata s pojmem příkazový shell- program, který umožňuje uživateli komunikovat se systémem zadáváním a prováděním příkazů. Nicméně, příkazový shell je pravidelný program. Můžete to dokázat nastavením jako výchozí shell v souboru passwd pro uživatele jiný program. Ale aby to systém poznal jako shell, musíte přidat absolutní název souboru /etc/shells.

    Linux je dodáván s několika příkazovými shelly, jejich složení se může lišit v závislosti na distribuci, ale vždy můžete najít:

    Bourne Shell (sh) - nejstarší a nejběžnější příkazový shell pro unixové systémy. Neexistuje jediný unixový systém, kde by se nepoužíval.

    Bourne Again Shell (bash) - rozšířený Bourne Shell. Má spoustu příjemných předností, a proto se stal tak oblíbeným v Nedávno. Je to "výchozí" shell pro téměř všechny distribuce Linuxu.

    Populární skiny jsou také:

    csh- shell, jehož příkazový systém je blízký programovacímu jazyku C

    tcsh je shell, jehož příkazový systém je blízký programovacímu jazyku Tcl.

    zsh je pravděpodobně nejvýkonnější shell. Jedná se o rozšíření sh (bourne shell) .

    Vzhledem k tomu, že Linux používá bash "ve výchozím nastavení", budeme o něm mluvit.

    2. příkazový shell bash byl původně freewarová alternativa k Bourne Shell. Později, když jeho schopnosti rostly, pak začal být považován za samostatný produkt. Hlavní rysy bash jsou:

    Tabulka 1.1.
    Příležitost Komentář
    1 Editace čar Možnost upravit zadaný příkaz místo jeho opětovného přepisování
    2 Organizace kanálu Příležitost I/O přesměrování, organizování kanálů mezi úkoly
    3 Snadnost použití Použití aliasů příkazů, historie příkazů, automatické dokončování
    4 Řízení práce Schopnost vytvářet a spravovat úlohy na pozadí
    5 Flexibilita Použití souborů přihlašovacích skriptů pro každého uživatele zvlášť, proměnné prostředí

    Přesměrování I/O a kanály budou popsány později v lekci 8. Proto tento bod vynecháme. Ale pojďme se bavit o funkcích práce v bash, o výhodách, které poskytuje.

    Bash automaticky zapisuje všechny příkazy zadané uživatelem do souboru ~/.bash_history. Ke správě tohoto souboru se používá příkaz historie. historie je vestavěný příkaz bash. To znamená, že neexistuje žádný spustitelný soubor odpovídající tomuto příkazu. Sebe příkazový shell provádí všechny akce. Zadáno bez voleb, jednoduše vypíše všechny příkazy uložené v tomto souboru a je identické s cat ~/.bash_history .

    Historie příkazů slouží ke zjednodušení sady často používaných příkazů. Historii příkazů lze v seznamu třídit pomocí kláves <вверх>A<вниз> .

    Další způsob je napsat ! a povel start a stiskněte . Bude proveden poslední příkaz z historie, jehož první písmena odpovídají zadaným písmenům. Například:

    $ !/usr /usr/bin/perl ./ptest.pl OK $ !xfonts bash: !xfonts: událost nenalezena $

    Jak ale zrychlit zadávání, když příkaz, který potřebujeme, ještě není v historii? V tomto případě nám pomůže klíč . Po zadání několika prvních písmen příkazu (nebo cesty k souboru) stiskněte A bash automaticky dokončí váš příkaz (nebo prvek cesty). V případě, že se shoduje několik souborů nebo se neshoduje žádný soubor, systém vydá problém zvukový signál. Pokud tlačítko stiskněte znovu, když se vejde několik souborů - systém zobrazí seznam, a když žádný - zopakujte pípnutí

    3. Od první lekce byste si měli pamatovat, že Linux je multitaskingové prostředí. Dosud jste však stále nemohli využívat jeho multitasking. Na první pohled se zdá, že konzole neumožňuje využívat multitaskingové možnosti systému a pouze v grafickém prostředí lze spouštět dva a více programů současně. Ale není! Konzole je také multitaskingová.

    Za prvé, můžete otevřít více konzol otevřením programu v každé z nich. Přepínání mezi konzolami bude probíhat pomocí kláves ctrl+ , Kde X je číslo konzole.

    A dokonce i v jedné konzoli s pomocí příkazů pro řízení úloh můžete plně využít všech výhod multitaskingového systému.

    - kombinace kláves, která vysílá nezachytitelný signál do procesu sigstop. Umožňuje zastavit provádění procesu a přenést řízení na příkazový řádek.

    příkaz & - symbol & za příkazem umožňuje jeho spuštění Pozadí.

    joby – uvádí aktuální pracovní místa příkazový interpret.

    bg<#j>– staví úlohu #j do pozadí. Předtím musí být úloha zastavena kombinací kláves . Pokud má v tuto chvíli tlumočník pouze jeden úkol, lze číslo vynechat.

    fg<#j>- přepne úlohu #j do režimu provádění na popředí. Úloha musí být zastavena kombinací kláves nebo být v pozadí. Pokud má v tuto chvíli tlumočník pouze jeden úkol, lze číslo vynechat.

    $ man bash ^Z + Stopped man bash $ vim ^Z vim + Stopped vim $ bg 1 + man bash & $ jobs + Stopped man bash + Stopped vim $ fg 2 + vim $ fg + man bash $

    4. Proměnné prostředí– systémové informace udávající vaše preference, jako např textový editor výchozí, hledat cesty pro spustitelné soubory atd., stejně jako identity uživatelů, systému a prostředí, jako je Uživatelské jméno, Linux verze a tak dále, které používá interpret příkazů a další programy.

    Proměnné běžně používané uživatelem jsou:

    PATH - proměnná obsahuje cesty, ve kterých má systém hledat spustitelné soubory, pokud je plná resp relativní cesta jim.

    PWD - proměnná obsahuje celý název aktuálního adresáře.

    HOME - proměnná obsahuje úplnou cestu domovský adresář uživatele.

    HOSTNAME - proměnná obsahuje název počítače.

    LOGNAME - obsahuje Uživatelské jméno

    SHELL - obsahuje název příkazového shellu spuštěného v aktuální relaci.

    USER - obsahuje Uživatelské jméno Relace, která je aktuálně otevřená.

    Seznam proměnných nainstalovaných v systému lze zobrazit příkazem export, zadaným bez parametrů.

    Bash shell má své vlastní proměnné. Aby se z lokálních proměnných staly systémové proměnné, musí být exportovány pomocí stejného exportního příkazu. Například:

    $ export deklarovat -x HOME="/home/gserg" deklarovat -x HOSTNAME="WebMedia" deklarovat -x LANG="cs_RU.KOI8-R" deklarovat -x LOGNAME="gserg" deklarovat -x PATH="/bin: /usr/bin:/usr/local/bin:/home/gserg/bin" deklarovat -x PWD="/home/gserg" deklarovat -x SHELL="/bin/bash" deklarovat -x TERM="Eterm" deklarovat -x USER="gserg" $ EDITOR=/bin/vim $ export EDITOR $ export deklarovat -x EDITOR="/bin/vim" deklarovat -x HOME="/home/gserg" deklarovat -x HOSTNAME="WebMedia" deklarovat -x LANG="ru_RU.KOI8-R" deklarovat -x LOGNAME="gserg" deklarovat -x PATH="/bin:/usr/bin:/usr/local/bin:/home/gserg/bin:" deklarovat - x PWD="/home/gserg" deklarovat -x SHELL="/bin/bash" deklarovat -x TERM="Eterm" deklarovat -x USER="gserg" $

    tým odstaveno odstraní systémovou proměnnou. Například:

    $ unset EDITOR $ export deklarovat -x HOME="/home/gserg" deklarovat -x HOSTNAME="WebMedia" deklarovat -x LANG="cs_RU.KOI8-R" deklarovat -x LOGNAME="gserg" deklarovat -x PATH=" /bin:/usr/bin:/usr/local/bin:/home/gserg/bin:" deklarovat -x PWD="/home/gserg" deklarovat -x SHELL="/bin/bash" deklarovat -x TERM= "Eterm" deklaruje -x USER="gserg" $

    5. V dnešní lekci vám představíme další, trochu nestandardní, příkazový shell půlnoční velitel. Není příkazový shell v obvyklém smyslu. Jedná se o správce textových souborů - analogový velitel Norton nebo Daleko. půlnoční velitel spusťte příkazem mc. Budeme mluvit o jeho schopnostech.

    Obrazovka Půlnoční velitel" rozdělena na dvě části. Téměř celý prostor obrazovky zabírají dva panely se seznamem adresářů a souborů. Ve výchozím nastavení je druhý řádek ve spodní části obrazovky příkazový řádek, kde můžete spouštět normální příkazy shellu, a spodní řádek zobrazuje výzvy pro funkční klávesy (F1-F10). Horní řádek symbolů obsahuje nabídku, pomocí které lze provádět mnoho funkcí. Chcete-li použít nabídku, můžete kliknout na požadovanou položku nebo stisknout klávesu F9 a pomocí kláves ovládání kurzoru vyberte požadovanou položku.

    Panely půlnoční velitel umožňují prohlížení dvou adresářů současně. Jeden z panelů je aktivní (ve smyslu, že uživatel může provádět určité akce se soubory a adresáři, které se v něm nacházejí). V aktivním panelu je zvýrazněn název jednoho ze souborů nebo adresáře a název panelu v horním řádku je zvýrazněn barevně. Název titulu je stejný jako název aktuálně zobrazeného adresáře. Téměř všechny operace se provádějí v aktivním panelu. Některé operace jako převod resp kopírování souborů použijte pasivní panel jako místo pro kopírování, přenos atd.

    Nyní si povíme něco o základních klávesových zkratkách, které vám pomohou pracovat Půlnoční velitel "ohm.

    klávesy se používají ke změně aktivního panelu nebo +

    pro označení souboru stiskněte nebo +

    klikněte pro pomoc

    vyvolá prohlížeč souborů

    používáním upravíte soubor

    vám umožní zkopírovat soubor.

    přesunout nebo přejmenovat soubor

    vytvořit adresář

    Klíč smaže soubor a/nebo adresář

    , jak již bylo zmíněno, otevírá přístup do menu.

    - umožňuje opustit půlnoční velitel.

    přesune ukazatel na začátek seznamu souborů,

    - naopak - až na konec seznamu.

    A změní polohu indikátoru na stránce nahoru a dolů.

    Klíč <*> na přídavná klávesnice invertuje výběr souborů (neovlivňuje adresáře)

    Klíč <+> na přídavné klávesnici vám umožní označit soubory maskou a <-> zrušte zaškrtnutí souborů podle masky.

    + - aktualizovat obsah adresáře (přečtením z disku nebo ze sítě)

    + - vyměňte pravý a levý panel.

    + - odstranit/vrátit panely.

    I když kombinace klávesové zkratky jsou tím nejlepším nástrojem k dokončení práce Půlnoční velitel "ohm co nejrychleji a nejpohodlněji, pro začátečníky je docela obtížné naučit se je všechny najednou. Chcete-li vyplnit tuto mezeru a přidat další funkce, které nemají klávesové zkratky, půlnoční velitel má menu (volané pomocí F9).

    Menu se skládá z položek: "Levý panel", "Soubor", "Příkaz", "Nastavení", "Pravý panel".

    "Levý/pravý panel"- tyto položky nabídky jsou naprosto stejné. Rozdíly mezi nimi jsou pouze v tom, že provedené akce budou adresovány levému nebo pravému panelu.

    "Formát seznamu"- otevře dialogové okno, ve kterém můžete vybrat pohled, ve kterém se zobrazí seznam souborů / adresářů. Vybírat můžete ze standardních, krátkých a rozšířených formátů. Uživatel v tomto okně však může definovat vzhled panelu i tak, že mu bude vyhovovat zaškrtnutí přepínače "Definováno uživatelem".

    "Rychlý pohled"- přepne panel do režimu automatického prohlížení souborů vybraných na sousedním panelu. Zaostření se automaticky přepne na protější panel.

    "Informace"- přepne panel na zobrazení informací o souboru zvýrazněného v sousedním panelu, jako je umístění, přístupová práva a vlastník, souborový systém a zařízení, na kterém se nachází, počet pevných odkazů spojených s tímto souborem a také informace o zařízení, na kterém je soubor umístěn.

    "Strom"- překládá půlnoční velitel do režimu podobného režimu Průzkumník z OC Windows. V panelu, na který je příkaz aplikován "Strom", je vytvořen adresářový strom, ve kterém se lze pohybovat pomocí šipek ovládání kurzoru, klíče PageUp, PageDown, Home, End. Další panel zobrazuje obsah adresáře zvýrazněného ve stromu.

    "Pořadí řazení"- otevře dialogové okno, ve kterém můžete vybrat atribut, podle kterého budou soubory a adresáře řazeny v seznamu, např. název, přípona, čas úpravy, čas přístupu, čas úpravy atributu, velikost, uzel (na kterém se soubor nachází ). Soubory můžete také ponechat neseřazené, rozlišovat malá a velká písmena nebo řadit v obráceném pořadí.

    "Filtr"- umožňuje vybrat názvy souborů, které se zobrazí v panelu pomocí regulárního výrazu zadaného v dialogovém okně.

    "FTP připojení"- pomocí tohoto příkazu můžete navázat spojení se vzdáleným (nebo i místním) počítačem pomocí protokolu ftp. Pokud je zadána pouze adresa vzdáleného serveru, pak půlnoční velitel se pokusí navázat anonymní spojení. Celý řádek, kterým je uzel určen, je následující:

    ftp:uživatelské_jméno:heslo@adresa_serveru:port/adresář_na_serveru

    Po navázání spojení pracujte s vzdálený souborový systém probíhá podobně jako při práci s místním FS.

    "Spojení shell"- umožňuje otevřít síťové připojení protokolem RYBA (Přenos souborů přes SHell– přenos souborů přes shell). RYBA používá protokoly RSH (Remote SHell)– vzdálený shell ) nebo SSH (Secure Shell)- chráněný plášť, analog RSH, ale s podporou šifrování přenášených dat). Úplný řetězec, pomocí kterého může uživatel určit vzdáleného hostitele, je:

    sh:uživatelské_jméno@adresa_serveru:možnosti/adresář_serveru

    Parametr Uživatelské jméno, možnosti a adresář_na_serveru není požadováno. Li Uživatelské jméno není tedy specifikováno půlnoční velitel se pokusí přihlásit do vzdáleného systému pomocí uživatelského jména používaného na místním počítači.

    "Znovu navštívit"- podobně jako klávesové zkratky + - způsobí aktualizaci seznamu souborů a adresářů v aktuálním panelu jejich opětovným načtením z disku nebo přes síť.

    "Soubor"- sekce menu, jejíž položky poskytují základní funkce pro zpracování souborů a adresářů, jako jsou:

    "Uživatelské menu"- umožňuje vyvolat menu, které si nastavuje uživatel sám. Vyvoláno také klíčem .

    "Prohlédnout soubor"- analog funkce prováděné při lisování . Umožňuje zobrazit zvýrazněný soubor (nebo zadat adresář). Podporuje mnoho formátů jako např textové formáty, archiv, Winword DOC, linuxové binární soubory atd.

    "Prohlédnout soubor..."- stejné jako v předchozím odstavci, ale neovlivňuje zvýrazněný soubor, ale ten, jehož název a cesta budou zadány v dialogovém okně.

    "Týmový pohled"- umožňuje provést příkaz a zobrazit jej standardní výstup v režimu prohlížení souborů.

    "Editace"- otevře soubor pro úpravy. Jednoduché inline textový editor má dostatečnou sadu vestavěných funkcí pro editaci konfiguračních souborů, zdrojových textů programu atd. a vestavěnou automatickou zvýraznění syntaxe díky nim jsou úpravy pohodlnější a upravitelné texty jsou čitelnější.

    "Kopírovat"- zkopíruje soubor z aktivního panelu do pasivního. Analog funkce volané pomocí . Ve výchozím nastavení je soubor (nebo skupina souborů) zvýrazněný v aktivním panelu považován za zkopírovaný a cílem je adresář otevřený v pasivním panelu. To lze změnit opravou hodnot polí v dialogovém okně, které se otevře po zavolání tohoto příkazu.

    "oprávnění"- umožňuje změnit oprávnění pro soubor (nebo skupinu souborů) v dialogovém okně.

    "Symbolický odkaz"- vytváří symbolický odkaz. Ve výchozím nastavení je soubor zvýrazněný v aktivním panelu považován za adresovatelný a vytvořený odkaz bude mít stejný název a bude umístěn v adresáři otevřeném v pasivním panelu. Uživatel to může změnit v dialogovém okně, které se otevře.

    "Vlastník/skupina"- změní vlastníka a/nebo skupinu, do které soubor/adresář patří.

    "Oprávnění (pokročilé)"- umožňuje současně změnit přístupová práva k souboru a jeho vlastníka a/nebo skupiny. Oprávnění jsou reprezentována jako tři sekvence rwx pro vlastníka, skupinu a všechny uživatele.

    "Přejmenovat"- umožňuje přejmenovat/přesunout soubor . Analog funkce volané pomocí . Ve výchozím nastavení je soubor (nebo skupina souborů) zvýrazněný v aktivním panelu považován za přesunutý/přejmenovaný a cílem je adresář otevřený v pasivním panelu. To lze změnit opravou hodnot polí v dialogovém okně, které se otevře po zavolání tohoto příkazu.

    "Vytvořit adresář"- vytvoří adresář. Analog funkce volané pomocí . Ve výchozím nastavení je adresář vytvořen v adresáři otevřeném v aktivním panelu. To lze změnit zadáním úplné cesty k adresáři, který se má vytvořit v dialogovém okně, které se otevře.

    "Vymazat"- smaže soubor/skupinu souborů/adresář. Analog funkce volané pomocí .

    "Změnit adresář"- změní aktuální adresář. Podobně jako příkaz cd v prostředí Bash. V dialogovém okně se zadá požadovaný adresář.

    "Označit skupinu"- Označí skupinu souborů maskou v adresáři otevřeném v aktivním panelu. Analog funkce volané pomocí <+> na volitelné klávesnici.

        Operační systémy rodiny Linux, stejně jako jakýkoli jiný OS, vyžadují rozhraní pro interakci mezi komponentami počítačového systému a koncovým uživatelem, tj. přítomnost softwarové vrstvy, která poskytuje vstup příkazů a parametrů pro získání požadované výsledky. Tato softwarová vrstva se nazývá "skořápka" nebo při anglický jazyk - skořápka.

    Co je to skořápka?

    příkazový shell ( skořápka) zajišťuje interakci mezi uživatelem a prostředím operačního systému Linux. Je specializovaná softwarový produkt, který zajišťuje provádění příkazů a získávání výsledků jejich provádění, nebo, pokud je to velmi zjednodušeno, shell je program, který je navržen tak, aby na žádost uživatele zajistil provádění jiných programů. Příkladem shellu může být například příkazový interpret command.com Operační systém MS DOS nebo shell bash Operační systémy Unix/Linux.

    Všechny shelly mají podobné funkce a vlastnosti v souladu s jejich hlavním účelem - provádět uživatelské příkazy a zobrazovat výsledky jejich provádění:

    Interpretace příkazového řádku.

    Přístup k příkazům a jejich výsledkům.

    Podpora proměnných, speciálních znaků a vyhrazených slov.

    Zpracování souborů, standardní vstupní a výstupní operace.

    Implementace speciálního shell programovacího jazyka.

        Pro operační systémy rodiny Unix / Linux je možné použít několik různých shellů, které se liší vlastnostmi a způsoby interakce se systémem. Nejběžnější jsou mušle

    sh- skořápka Bourne, klasický unixový shell

    bash skořápka Bourne znovu(GNU Bourne-Again Shell). Snad nejrozšířenějším v tuto chvíli je shell v prostředí operačních systémů rodiny Linux.

    ksh- skořápka Korn, navržený jako shell voj Bourne s historií příkazového řádku a možností úpravy příkazů.

    csh- skořápka C, používající syntaxi oblíbeného programovacího jazyka C

    tcsh- shell verze C s interaktivní editací příkazového řádku.

    Na systém lze nainstalovat několik různých shellů a každý uživatel může použít svůj vlastní výchozí shell. To vše se samozřejmě děje automaticky během procesu stahování a registrace uživatele.

        Při načítání operačních systémů rodiny Linux dochází po načtení jádra systému k přechodu do interaktivního režimu - režimu interakce mezi uživatelem a operačním systémem. V Linuxu je prvním procesem, který se spustí během bootování, inicializační program. init, který načte obsah konfiguračního souboru /etc/inittab, určuje seznam a vlastnosti terminálů dostupných v systému a volá program interaktivního přihlášení getty A, která zobrazí výzvu k uživatelskému jménu. Po zadání uživatelského jména a hesla se program getty volá program přihlásit se, který ověří účet, přejde do domovského adresáře uživatele a přenese řízení na program počátečního spouštění relace, což je obvykle program shellu uživatele, jehož konkrétní varianta je určena obsahem souboru. /etc/passwd Pro tento účet. Například:

    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

    Jak můžete vidět z obsahu souboru /etc/passwd, pro uživatele uživatel1 shell bude spuštěn sh(Bourne shell), na uživatele mezizákladní- skořápka csh(C shell) a pro uživatele apb- skořápka bash(Bourne Again). Po spuštění shellu se na obrazovce zobrazí příkazový řádek (obvykle ve formě znaku dolaru $ pokud se práce provádí v kontextu standardního uživatelského účtu nebo lb # pokud je shell používán pod privilegovaným uživatelským účtem ( vykořenit).

    Při opuštění shellu vrátí jádro systému řízení programu init, který restartuje proces přihlášení a zobrazí výzvu k uživatelskému jménu na terminálu. Opuštění shellu lze provést jedním ze dvou způsobů:

    Prostřednictvím týmu výstup provedené uživatelem

    Když proces shellu přijme signál zabít odeslané jádrem, například při restartu systému.

    Interpretace příkazového řádku.

        Uživatelský vstup v reakci na výzvu shellu se běžně nazývá příkazový řádek nebo tým. Linuxový příkaz je znakový řetězec názvu příkazu a argumentů oddělených mezerami. Argumenty poskytnuté příkazu Extra možnosti které určují jeho chování. Nejčastěji používané argumenty jsou možnosti A jména soubory a adresáře. Například příkazový řádek

    ls -l soubor01 soubor02

    Obsahuje příkaz ls, volbu -l a dva názvy souborů file01 file02 .

    Při použití více možností je lze kombinovat. Shodné jsou například varianty následujících příkazů:

    Ls-l-d
    ls-ld

    Volají se příkazy, které jsou součástí shellu vestavěný. Mezi takové příkazy patří například cd, if, case atd. Vestavěné příkazy se přirozeně mohou pro různé shelly lišit. Kromě vestavěných příkazů je možné použít programové moduly, které jsou samostatnými spustitelnými soubory nebo soubory skripty nebo scénáře- běžné textové soubory obsahující sekvenčně prováděné řádky s příkazy shellu. Některé skripty (skripty) mohou být spouštěny procesy Linuxu, jako je například plánovač úloh cron. Plánovač úloh je zpravidla navržen tak, aby automaticky prováděl naplánované úlohy správy systému. Úkoly cron jsou příkazy nebo skripty a spouštějí se automaticky, bez jakéhokoli lidského zásahu a lze je spouštět v kontextu různých uživatelských účtů. V případě, že úloha plánovače zahrnuje spuštění nějakého skriptu, nastává problém s výběrem shellu, který by měl být spuštěn jako podřízený proces cron pro zpracování příkazů ze souboru skriptu - koneckonců, shell může být jakýkoli a syntaxe skriptu zpravidla zahrnuje použití konkrétního shellu, pro který je napsán. Aby se tento problém odstranil, je v rodině operačních systémů Linux obvyklé uvádět na prvním řádku skriptu typ shellu potřebného pro jeho spuštění ve tvaru:

    #!/bin/bash- pro shell bash

    #!/bin/sh- pro shell sh

    Podepsat # je znak komentáře a znaky následující za ním nejsou interpretovány jako příkaz. Tato technika umožňuje explicitně určit, který shell by měl být použit pro zpracování následného obsahu souboru. Pokud skript neobsahuje položku, která výslovně definuje požadovaný shell, pak se použije nastavení z účtu, v jehož kontextu se daný skript spouští. V tomto případě je možné, že skript napsaný pro shell, např. tch bude předán shellu k provedení bash, což znemožní provedení.

    Při provádění příkazů nebo skriptů, proměnné prostředí(v angličtině - životní prostředí, jehož hodnoty charakterizují softwarové prostředí, ve kterém jsou příkazy vykonávány. Takové proměnné mohou obsahovat obecná systémová nastavení, grafické nebo příkazové shelly, cesty ke spustitelným souborům a tak dále. Hodnoty proměnných prostředí se nastavují na systémové úrovni (pro všechny uživatele) a na úrovni konkrétního uživatele. K nastavení proměnných prostředí na systémové úrovni se používá obsah souborů:

    /etc/profile- nastavuje proměnné pouze pro shelly. Může spouštět libovolné skripty v shellech kompatibilních s Bourne Shell.

    /etc/bash.bashrc- nastavuje proměnné pouze pro interaktivní shelly. Spouští také bash skripty.

    /etc/environment- používá modul PAM-env. V tomto souboru lze zadat pouze páry. jméno=hodnota.

    Každý z těchto souborů má svou vlastní aplikaci, takže byste si měli pečlivě vybrat tu, která vyhovuje vašim účelům. Například pokud chcete přidat vlastní adresář ~/bin do proměnné CESTA pro všechny uživatele umístěte následující kód do jednoho z inicializačních souborů systémového prostředí (/etc/profile nebo /etc/bash.bashrc):

    # Pokud je ID uživatele větší nebo rovno 1000 a adresář ~/bin existuje a to

    #nebylo dříve přidáno do proměnné PATH,

    # export ~/bin do $PATH.

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

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

    V operačních systémech Linux se obvykle pro servisní účty používá uživatelské ID menší než 1000 nebo menší než 500. V tomto příkladu bude proměnná prostředí nastavena pro všechny místní uživatelé systémy s ID 1000 nebo více.

    Pokud potřebujete změnit prostředí pro konkrétního uživatele, upravte obsah uživatelského prostředí:

    - ~/.bash_profile, ~/.bash_login a tak dále. - soubory inicializace shellu z domovského adresáře uživatele.

    - ~/.profil- inicializační soubor uživatelského profilu. Používá se mnoha shelly k definování proměnných prostředí.

    ~/.pam_environment- vlastní ekvivalent souboru /etc/environment, který používá modul PAM-env.

    Chcete-li například přidat adresář ~/bin uživatele do vyhledávací cesty pro spustitelné soubory určené proměnnou CESTA, například v souboru ~/.profil dej řádek:

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

    Chcete-li nastavit proměnné prostředí pro grafické aplikace, používá se obsah souborů nastavení grafického prostředí uživatele ~/.xinitrc

    Mnohem běžnější je nastavení proměnných prostředí pro aktuální uživatelskou relaci. Chcete-li například přidat vlastní adresář ~/bin ve spustitelné vyhledávací cestě:

    exportovat PATH=~/bin:$PATH

    Nová hodnota proměnné CESTA bude trvat pouze do konce aktuální uživatelské relace.

    Chcete-li zobrazit hodnotu proměnné, můžete použít příkaz echo $proměnná, Například:

    echo $PATH

    V současné době je nejčastější shell, jak je uvedeno výše, je bash. To je způsobeno především tím, že skořápka bash je sh- přidaný kompatibilní příkazový shell užitečné funkce z mušlí Korn ( ksh) a C shell ( csh). Shell bash může spouštět většinu shell skriptů bez jakýchkoliv úprav sh a snaží se co nejvíce přiblížit standardu POSIX, což vedlo k mnoha vylepšením, jak pro programování, tak pro interaktivní použití. V moderním provedení bash existuje režim úprav příkazového řádku, neomezená velikost historie příkazů, nástroje pro správu úloh, možnost používat aliasy, rozsáhlý seznam vestavěných příkazů, funkce shellu atd. Obvykle, bash nejlépe vyhovuje potřebám běžného uživatele, díky čemuž se stal nejpoužívanějším v prostředí Linuxu.

    Při spuštění bash bez možností příkazového řádku se shell spustí v interaktivním režimu a na obrazovce se zobrazí příkazový řádek. Interaktivní shell obvykle čte data z uživatelského terminálu a zapisuje data na stejný terminál, standardní zařízení Vstupem je klávesnice a standardním výstupem je displej. Uživatel zadává příkazy na klávesnici a výsledek jejich provedení se zobrazí na displeji.

    Hlavním prostředím pro interakci s UNIXem je příkazový řádek. Jeho podstatou je, že každý řádek přenesený uživatelem do systému je příkaz, který musí provést. Dokud nestisknete klávesu Vstupte, řádek lze upravit a poté je odeslán do systému.

    Příkazy jsou interpretovány a prováděny speciálním programem − skořápka(nebo "shell", v angličtině). Prostřednictvím příkazového shellu jsou spravovány uživatelské procesy - k tomu se používají nástroje pro výměnu mezi procesy.

    Příkazový shell je přímo připojen k terminálu, přes který se přenášejí řídicí sekvence a text. Obrázek (3.1) ukazuje obecné schéma interakce uživatele se systémem při použití příkazového řádku.

    Obrázek 3.1. Rozhraní příkazového řádku

    Simultánní přístup do systému

    Každý počítač se systémem UNIX poskytuje možnost přihlášení a přístupu k systému více uživatelům současně. I když mají všichni uživatelé k dispozici pouze jeden monitor a jednu systémovou klávesnici, je tato funkce užitečná: současná registrace více uživatelů v systému vám umožňuje pracovat střídavě, aniž byste museli pokaždé dokončit všechny započaté úkoly a poté v nich pokračovat. Pod stejným přihlašovacím jménem je možné se do systému přihlásit i vícekrát. Můžete tak přistupovat ke stejným zdrojům a organizovat paralelní práci na několika úkolech.

    Typický způsob, jak moderní verze UNIXu organizovat paralelní práci uživatelů, je virtuální konzole. Virtuální konzole je několik programů paralelně spuštěných operačním systémem, které umožňují uživateli přihlásit se do systému v textovém režimu a přistupovat k příkazovému řádku (viz Obrázek 3.2 – „Virtuální a grafické konzole“).

    V operační systém Přepínání mezi Linuxem virtuální konzole v textovém režimu se provádí pomocí klávesové zkratky alt-F1,alt-F2 a tak dále. V tomto případě je každá virtuální konzole označena speciálním názvem: "tty1", "tty2" atd. Ke každé kombinaci je přiřazena odpovídající očíslovaná virtuální konzole. Každá z těchto konzolí je spojena se svou vlastní terminál, který je charakterizován souborem zařízení s příslušným názvem (například /dev/tty1).

    Moderní verze systému UNIX poskytují uživatelům grafická uživatelská rozhraní, která také poskytují možnosti příkazového řádku. Této schopnosti je dosaženo pomocí grafické terminály- speciální programy, které emulují textový terminál v grafickém okně.

    Je také možné spustit několik grafických subsystémů, přepínání mezi nimi pak bude probíhat podobně jako přepínání mezi virtuálními konzolemi - kombinace kláves ctrl-alt-F1.

    Obrázek 3.2. Virtuální a grafické konzole

    Každé koncové zařízení má své možnosti vstup a výstup informací. Příklady takových schopností jsou: počet barev displeje, schopnost pohybovat kurzorem a měnit velikost obrazovky, sada řídicích znaků atd. Terminály jsou rozděleny podle typy: sada funkcí regulovaných ve speciálním konfiguračním souboru. Příklady typů jsou: tty (dálnopis) nebo xterm (grafický terminál). Typ terminálu je explicitně specifikován v názvu zařízení terminálu (například /dev/tty1). Všechna nastavení typu terminálu jsou umístěna v adresáři /etc/termcap.