bash shell

teejuht
 
 
1.
algus
2.
tähistused
3.
Commands for moving - käsureal liikumise kombinatsioonid
4.
Commands for changing text - kombinatsioonid käsurea teksti muutmiseks
5.
Completion - aimamine
6.
Expansion - laienemine 
7.
Märkused- noglob, noclobber, ignoreeof 
 

algus

Need arvutikasutajaid, kes on harjunud vaid graafiliste keskkondadega pole ehk näinudki nn. käsurida ehk OS -i viipa ehk OS-i prompt'i. Selliste kasutajate jaoks on ainuke koht, kus on lubatud klaviatuuri kasutata tekstiredaktor. Muidu juhib tööd power nupp ja hiir. Ka nii on võimalik ja ehk ka mingites tingimustes otstarbekas. Linuxiga tegeldes jääb aga suurem osa võimalustest sel moel kasutamata. Ning enamasti on linuxi masinad niimoodi seatud, et kui nad tööle panna, siis satutakse peale sisselogimist sellisesse olukorda, kus on kas ainult prompt ees (mittegraafiline terminal) või on vähemalt üks automaatselt avanenud akendest (x -windows) teksti mode'is promptiga aken.

see prompt ise võib olla kaunis erineva välimusega st. tema välimust saab muuta. Nt. selline:

~/kuulujutud #

mis tähendab, et ollakse oma kodukataloogis (~) ning omakorda kataloogis kuulujutud. # on kokkuleppeliselt root õigustega kasutaja prompti viimane sümbol.

Prompti taga on kursor ja kui midagi trükkida siis see tekst ilmub vasakut paremale sinna järgi.

Miks on üldse nii palju vaja heietada sellise pealtnäha lihtsa asja juures nagu prompt? Tõepoolest, tema peamine funktsioon on pakkuda võimalust käivitada programme. Ja kui juba programm käib siis on prompt eest kadunud (alati ei pruugi nii olla aga nt. kui käivitada tekstiredaktor joe siis nii juhtub, proovige - kirjutage prompti taha joe  ja vajutage reavahetust. Muide, joe suletakse Ctrl + C, y - nii ta ei salvesta). On ka teine variant, käivitatud programm hakkab elama omaette aknas (seda vaid X-all) kuid prompt jääb ikka blokeerituks (proovige nt. xfm - X file manager; xfm saab sulgeda nt. hiirega vastavat akent sulgedes).

Selline prompti kasutus oleks aga liiga primitiivne.

Tehniliselt on asi nii:

1. peale arvuti voolu sisselülitamist käivitatkase protsess init - kõikide protsesside ema
2. seejärel käivitab ta kõik teised programmid sh. selle mis teil sisselogida võimalda (getty)
3. Olles sisse loginud käivitab getty programmi bash ehk ka teise nimega tuntud - sh (shell).

ja selle shelli nö. veepealne osa ongi promt ning kursor selle järel.
Niisiis, iga kord kui midagi promti taha kirjutada ja vajutada reavahetust tegeleb selle sisestusega programm sh.
shelli nimetetakse ka käsurea interpretaatoriks ses, et temaga suhtlemisel on palju võimalusi, kuni programmeerimiseni välja. Neid programme nimetatakse shell scriptideks.

Peale bash shelli on olemas ka csh (C - shell) ja korn shell. Bash on praegu vist kõige universaalsem ja levinuim.
 
Shell on see vahend, kui soovite aken, mille kaudu toimub suhtlemine väga erinevate arvuti osadega ja arvutis toimuvate protsessidega. Inimene kes shell-i osakab on nagu hea tõlk - ta oskab konkreetset võõrkeelt ja peale selle on kodus ka sisuliste küsimustega erinevates valdkondades : kultuur, majandus, tervishoid, teadus ...
Niisiis, tingimata tuleb huvi tunda igasuguste arvutiga sees olevate(toimuvate) asjade vastu ja nendega shelli abil manipuleerida.

Et shellis edukalt tegutseda tuleks teada (või olla valmis järgi uurima) järgmisi asju:

failisüsteem
arvutivõrk (Internet)
protsessid ehk töötavad arvutiprogrammid
tekstitöötlus
programmeerimine
inglise keel
arvuti riistvara

Allpool pole tehnilistele küsimustele vastuseid, need leiab konkreetest küsimust puudutavalt leheküljelt.
Nt. ei seleta me loogiliste tehete tegemist süstemaatiliselt, ainult kasutame seda vajadusel. Konkreetse ülevaate loogilistest tehetest saab mujalt.

Suureks varasalveks mis juba on teie arvuti kõvakettal on man bash.

Tähistused

Järgnevas vaatame neid võimalusi mida esmapilgul on ehk isegi ebamugav kasutada:

NB! C - Ctrl klahv, M - Meta ehk Alt

Nt.
C-x, C-v       : toimub Crtl klahvi all hoides x vajutades ja siis C -v  - näete bashi versiooni

M-t                  : toimub kahe käsureale kirjutatud sõna äravahetamine: Kirjutage käsureale 'xvf  tar' ja hoidke alti all ja samal ajal vajutage 't'.

(Mõnes olukorras, nt. X-i aknas mc's ei tööta F5, F6 .. klahvid. Siiski saab nende funktsioone esile kutsuda ja nii:

Vajutage ja vabastage esmalt Esc, seejärel vajutage vastavat numbrit 5, 6 ..)
Samuti ei pruugi X-i aknas Alt käia, siis talitage nii:

M - t                :toimub Esc klahvi vajutus ja vabastamine ning t klahvi vajutamine ja vabastamine)
 
tab aimab kirjutatud käsu lõppu (kõikide olemasolevate käskude hulgast), kui neid on mitu näitab millised on võimalused. sama failinimede puhul (kõikide kataloogi failide seast): 
 
bash'is saab anda ühe rea peal ka mitu korraldust kui nad eraldada semikooloniga:
bash # clear; ls -l; date

samuti saab programme sh. shell script'e käivitada

. käsunimi
exec käsunimi

Nt. nii shell script'i käivitamine ei loo uut PID'i.

Commands for moving - käsureal liikumise kombinatsioonid
 
 
 
C-a rea algusse
C-e rea lõppu
C-f täht edasi
C-b täht tagasi
M-f sõna edasi
M-b sõna tagasi
C-l puhasta eksraan
C-u puhasta rida
 
 

Commands for changing text - kombinatsioonid käsurea teksti muutmiseks
 
 
C-d kustuta sümbol kursori alt
C-t vaheta kaks viimast sümbolit
M -t  vaheta kaks sõna
M-u uppercase'i sõna (tuleb olla sõna ees)
M-l lowercase'i sõna
M-c capitalize'i sõna
 

Completion - aimamine
 
See on võimalus trükkida prompti järele asjast paar algussümbolit ning ülejäänu aimab bash ise. On järgmised võimalused:

all possible username competions
bash# C-x, ~
adm         games       imre        man         postmaster  uucp
bin         guest       kaak        news        root        www
daemon      halt        lp          nobody      shutdown
ftp         immo        mail        operator    sync

bash#i C-x, ~
immo, imre

username completion
bash#k M - ~
bash#kaak

ja ülejäänud on toodud tabelis, nende realiseerimine toimub nagu ees näidatud:
 
 
kombinatsioonid mida aimab
M - /, C-x / faili nime
M - $, C -x $ keskkonna muutujat
M - @, C-x, @ hosts failis olevate masinate nime
M - !, C-x, ! käsku
 

Expansion - laienemine

Linuxis on põhimõtteliselt setset erinevat sorti laienemist:

brace expansion,
tilde expansion,
parameter and variable expansion,
command substitution,
arithmetic expansion,
word splitting, and
pathname expansion.

Kes on valmis põhjalikuks selgituseks vaadaku man bash-i; järgnev on vaid põgus aga see-eest konkreetne:

1. brace expansion:
bash #mkdir a{1,2,3,4,5}_fail

loob failid:

bash #ls -l
total 5
drwxr-xr-x   2 root     root         1024 Jul 28 18:49 a1_fail
drwxr-xr-x   2 root     root         1024 Jul 28 18:49 a2_fail
drwxr-xr-x   2 root     root         1024 Jul 28 18:49 a3_fail
drwxr-xr-x   2 root     root         1024 Jul 28 18:49 a4_fail
drwxr-xr-x   2 root     root         1024 Jul 28 18:49 a5_fail

Loomulikult võib mkdir -i asemel ka teisi korraldusi kasutada.

2. tilde expansion
asendab ~ muutuja $HOME ehk kasutaja kodukataloogi nimega

bash #echo ~/{1,2,3,4}
/root/1 /root/2 /root/3 /root/4

3. parameter and variable expansion
laseb hingata sisse muutujat:

bash #echo ${OSTYPE}is on hää
Linuxis on hää

4. command substitution
asendab käsu käsu output'iga

bash #echo `ls`
a1_fail a2_fail a3_fail a4_fail a5_fail

bash #echo $(ls)
a1_fail a2_fail a3_fail a4_fail a5_fail

5.  arithmetic expansion

bash #echo $((1+2*$SHLVL))
9
bash #echo $[1+2*$SHLVL]
9

6. word splitting

-

7. pahtname expansion
see on nn. wildcard'ide kasutamine

kuvame kõik failid kataloogis rekursiivselt st. õhjani välja

bash # ls *
-rw-r--r--   1 root     root            0 Jul 28 19:28 mina1
-rw-r--r--   1 root     root            0 Jul 28 19:29 mina1c
-rw-r--r--   1 root     root            0 Jul 28 19:28 mina2
-rw-r--r--   1 root     root            0 Jul 28 19:29 mina2c
-rw-r--r--   1 root     root            0 Jul 28 19:28 mina3
-rw-r--r--   1 root     root            0 Jul 28 19:29 mina3c
-rw-r--r--   1 root     root            0 Jul 28 19:28 mina4
-rw-r--r--   1 root     root            0 Jul 28 19:28 mina5

kuvame vaid teatud tingimusele vastavate nimedage failid:
 

bash #ls -l mina[2-4]*
-rw-r--r--   1 root     root            0 Jul 28 19:28 mina2
-rw-r--r--   1 root     root            0 Jul 28 19:29 mina2c
-rw-r--r--   1 root     root            0 Jul 28 19:28 mina3
-rw-r--r--   1 root     root            0 Jul 28 19:29 mina3c
-rw-r--r--   1 root     root            0 Jul 28 19:28 mina4

bash #ls -l mina?c
-rw-r--r--   1 root     root            0 Jul 28 19:29 mina1c
-rw-r--r--   1 root     root            0 Jul 28 19:29 mina2c
-rw-r--r--   1 root     root            0 Jul 28 19:29 mina3c
 
 

Märkused- noglob, noclobber, ignoreeof

1. seda kas arvuti käsitleb *, ? ja ~ nn. metasümbolite ek wildcard'iedena või mitte saab määrata korraldusega:

set +o noglob
set -o noglob

vahest on nad lipsanud failinimedesse ja siis ei saa muidu nende failide poole pöörduda

2. standardväljundi ümbersuunamisel kasutatakse sellist konstruktsiooni

ls > output.faili.nimi

kui fail on olemas siis kirjutatakse hoiatamate üle. Sellises olukorras saab arvuti hoiatama panna korraldusega:

set +o noclobber
set -o noclobber

3. mõnikorda on vaga ebamugav kui arvuti C-d -ga teid väljalogib, seda saab muuta:

set +o ignoreeof
set -o ignoreeof

Tavaliselt on vaikimise seed nii seatud, et *, ?, ~ on metasümbolid, faili kirjutatakse üle ja C-d teid välja ei viska.