Menu

Daxil olun Qeydiyyat

Linux

Shell (əmr örtüyü)

Shell (əmr örtüyü)

Shell anlayışı. Shell-in növləri


Linux və Unix dünyasında kompüterdə iş əmr örtüyü (shell) ilə kəsilməz əlaqəlidir. Shell – istifadəçiyə əmrlərin daxil olunması və yerinə yetirilməsi vasitələri sistemi ilə qarşılıqlı əlaqəyə imkan verən proqramdır. Buna baxmayaraq əmr örtüyü adi proqramdır. Bunu sübut etmək üçün, istifadəçi üçün passwd faylında shell kimi başqa proqramı quraşdırmaq olar. Lakin, sistemin bu shelli tanıması üçün həmin shellin adını /etc/shells faylına düzgün şəkildə yazmaq lazımdır.
Linuxun tərkibində bir neçə shell var, onların tərkibi distributivdən asılı olaraq dəyişilə bilər, lakin, siz onu həmişə tapa bilərsiniz:
Bourne Shell (sh) – UNIX sistemi üçün ən köhnə və ən çox yayılan örtükdür. UNIX-in elə bir sistemi yoxdur ki, orada tətbiq olunmasın.
Bourne Again Shell (bash) – genişləndirilmiş Bourne Shell-dir. Çoxlu üstünlükləri var, buna görə də son zamanlar belə məşhur olmuşdur. Linuxun bütün distributivləri üçün susmaya görə örtükdür.

Həmçinin, aşağıdakı shell-lər çox məşhurdular:
csh – C proqramlaşdırma dilinə yaxın olan əmr örtüyü;
tclsh – Tcl proqramlaşdırma dilinə yaxın oan əmrləri sistemi;
zsh – ən geniş imkanlara malik olan shell-dir. sh-in genişləndirilmiş versiyasıdır.
Linuxda susmaya görə bash istifadə olunduğu üçün onun haqqında danışacağıq.

 

bash əmr örtüyü. İşin xüsusiyyətləri (əmrlərin arxivi, “!” operatoru, TAB klavişi ilə iş)


bash shelli, Burn Shellin pulsuz yayılan analoqu olmuşdur. Daha sonra, onun imkanları artdıqda onu müstəqil məhsul hesab etməyə başladılar. bash-ın əsas imkanlarını aşağıdakı şəkildə göstərmək olar:
 

No İmkanlar Haqqında
1 Sətrin redaktə olunması Verilmiş əmri yenidən yazmaq əvəzinə redaktə etmək imkanı
2 Kanalların yaradılması Məsələlərin yerinə yetirilməsi zamanı giriş-çıxışın istiqamətləndirilməsi, kanalların təşkili imkanı
3 İşdə rahatlıq Əmrlərin psevdonimləri, əmrlərin arxivi, avto-tamamlamadan istifadə
4 Məsələrlə iş Background (arxa plan) məsələləri yaratmaq və onları idarə etmək imkanı
5 Tənzimləmələrin çevikliyi Hər bir istifadəçi üçün ayrıca giriş üçün skript faylları


Giriş-çıxış istiqamətləndirilməsi və kanallarla tanışsınız. Buna görə də bu barədə yazmayacam. bash-da işin xüsusiyyətləri və bash-in üstünlükləri haqqında isə haqqında isə ətraflı aşağıda oxuya bilərsiniz.
Bash istifadəçi tərəfindən daxil olunan bütün əmrləri avtomatik olaraq ~/.bash_history faylına yazır. Bu faylla iş üçün history əmri istifadə olunur.
history – bash-in daxili əmridir. Belə ki, bu əmrə uyğun icra olunan fayl mövcud deyil. Bütün işləri shell özü yerinə yetirir. Parametrlərsiz daxil etdikdə bu əmr daxil olunmuş və ~/.bash_history faylına yazılmış bütün əmrlərin siyahısını ekrana çıxarır. cat ~/.bash_history əmri də eyni işi yerinə yetirəcək.
Əmrlərin arxivi tez-tez istifadə olunan əmrlər toplusunu sadələşdirmək üçün istifadə olunur. Əmrlərin arxivini yuxarı və aşağı istiqamətli klavişlərdən seçə bilərsiniz.
Başqa üsul isə – terminalda ! və əmrin başlanğıcını yazmaq və ENTER düyməsini sıxmaqdır. Bu zaman arxivdəki ilk hərfləri üst-üstə düşən əmr yerinə yetiriləcək.
Bəs əgər arxivdə bizə lazım olan əmr yoxdursa, daxil etməni necə sürətləndirmək olar?
Bu halda bizə TAB düyməsi kömək edəcək. İlk bir neçə hərfi daxil edib (və ya fayla gedən yolu göstərib) TAB düyməsini sıxdığınız zaman Bash avtomatik olaraq sizin əmri əlavə edəcək (və ya yolun hər hansı elementini).
Bir neçə fayl və ya heç bir fayl uyğun gəlmədikdə, sistem səs siqnalı verəcək. TAB düyməsini təkrar sıxdıqda, bir neçə fayl uyğun gələrsə - sistem siyahı verəcək, heç bir uyğun fayl yoxdursa – sistem səs siqnalını təkrar verəcək.

 

Konsolda çoxməsələlilik. Məsələ. Məsələlərlə iş


İlk dərsdən bilməlisiniz ki, Linux – çoxməsələli vasitədir. Lakin, bu günə kimi siz hələ onun çoxməsələləliyindən istifadə etməmisiniz. İlk baxışdan elə görünür ki, konsol sistemin çoxməsələliyindən istifadə etməyə imkan vermir və yalnız qrafik rejimdə iki və ya daha çox proqramı işlətmək olar. Lakin, bu belə deyil. Konsol da çoxməsələlidir.
Əvvəlcə bunu qeyd edim ki, siz eyni anda bir neçə konsol aça bilərsiniz. Konsollar arasındakı əlaqə <Ctrl+Alt+Fx> kombinasiyası ilə yerinə yetirilir. Burada x – konsolun nömrəsidir. Hətta, bir konsolda məsələlərlə iş əmri vasitəsilə siz tam şəkildə çoxməsələli sistemin bütün üstünlüklərindən yararlana bilərsiniz.
<Ctrl+Z> – sigstop siqnalını prosesə göndərən kombinasiyadır. Əmrlər sətrinin idarə olunması üçün prosesi dayandırmağa imkan verir;
&əmri – əmrdən sonra & simvolu həmin əmri arxa fon rejimində (background) icra etməyə imkan verir;
jobs – əmr interpretatorundan cari məsələlərin siyahısı ekrana çıxarır;
bg <#j> – #j məsələsini arxa fon rejiminə keçirir. Bundan əvvəl məsələ <Ctrl+Z> kombinasiyası ilə dayandırılmalıdır. Əgər hal-hazırda interpretatorda yalnız bir məsələ varsa, onda nömrəni qeyd etməmək olar;
fg <#j> – #j məsələsini ön planda (foreground) yerinə yetirilmə rejiminə keçirmək. Məsələni <Ctrl+Z> kombinasiyası vasitəsilə dayandırmaq və ya onu background rejiminə keçirmək lazımdır. Əgər hal-hazırda interpretatorda yalnız bir məsələ varsa, onda nömrəni qeyd etməmək olar.

 

Bash üçün proqramlaşdırma dili


Bildiyiniz kimi Linuxda istifaədçinin ƏS-ni istifadə etməsi üçün iki əsas üsul var. Bunlardan biri GUI adlandırdığımız qrafik rejim, digəri də konsol (shell) adlandırdığımız əmrlər sətridir.
Shell proqramlaşdırma əslində konsoldan verilən əmrləri müəyyən bir qaydaya əsasən işlətməkdən ibarətdir. Yəni, konsoldan işə saldığımız əmrləri bir fayla növbə ilə yazaraq, ən sadə skripti yazmış oluruq. Əlbəttə ki, məlum məqsədlərə istiqamətlənmiş proqramlar üçün funksiya, massiv kimi daha yüksək səviyyədə strukturları istifadə etməyimiz lazim ola bilər ki,bash bunları yüksək səviyyədə təmin edir. Aşağıdakı şəkildə siz Shell, script anlayışlarını daha yaxşı başa düşəcəksiniz.

Kod yazmağa başlamazdan əvvəl bir əlavə edim. Dərs boyunca yazılmış kodları siz də Linuxda yazıb yerinə yetirə bilərsiniz. Editor olaraq KDE-də Kedit, Gnome-da Gedit istifadə etməniz məsləhətdir. Əgər hər işinizi konsolda görmək istəsəniz, pico, nano və ya Vi kimi konsol əsaslı editorlardan istifadə edə bilərsiniz.
Əgər hal-hazırda əlinizin altında Linux/UNIX yoxdursa və quraşdırmaq imkanınız yoxdursa, internetdən pulsuz şəkildə Shell hesabını təmin edən firmalardan birindən yararlana bilərsiniz. Bir Shell hesabı açdıqdan sonra Putty SSH proqramı ilə nümunə kodları yerinə yetirə bilərsiniz.
Sözü daha çox uzatmadan proqramlaşdırma dünyasının o məşhur ilk proqramı ilə kodlaşdırmağa başlayaq. Bəli, bu proqram “Hello World!” adlanır :)


#!/bin/bash
echo "Hello World!"

Beləliklə, ilk shell skriptimizi yazmış olduq. Yuxarıdakı sadə proqramda diqqətimizi cəlb edən bir sətir var.
#!/bin/bash – bu sətir sonrakı alt sətirlərin hansı shell tərəfindən interpretasiya olunacağını bildirən standart bir anlayışdır və hər bash skriptində olmalıdır. Əgər bash proqramı /bin/bash deyil, fərqli bir yerdədirsə, onda skriptlərin başlığına həmin sətir yazılmalıdır. Linuxda bir proqramın hansı kataloqda yerləşdiyini which əmri ilə tapa bilərsiniz.
$ which bash yazsaq, aşağıdakı nəticəni alarıq:


/bin/bash

Skriptimizi yadda saxladıqdan sonra ondan istifadə etmə icazəsini verək. Bunun üçün Linuxda chmod əmri istifadə olunur. Skriptimizi hello.sh adı ilə yadda saxladığımızı nəzərə alsaq, aşağıdakı əmri verməklə skriptimizə istifadə icazəsi vermiş olarıq:


$ chmod 700 hello.sh

Bundan sonra skriptimizi işə salaq.


$./hello.sh

Bu zaman ekrana aşağıdakı mətn çıxacaq:


Hello World

 

Dəyişən vasitələr


Dəyişən vasitələr – susmaya görə mətn redaktoru, icra olunan faylların axtarılması yolları və s. bu kimi imtiyazlarınızı göstərən sistem məlumatı, həmçinin, istifadəçinin (istifadəçi adı və s.), sistemin (Linuxun versiyası və s.) və shellin (və s.) əmr interpretatoru və başqa proqramar tərəfindən istifadə olunan identifikasiya məlumatlarıdır.
İsitfadəçi tərəfindən tez-tez istifadə oolunan dəyişənlər aşağıdakılardır:
PATH – bu dəyişən sistemdə icra olunan faylların axtarıldığı yolları özündə saxlayır (Əgər konsolda həmin fayla gedən yol tam və ya nisbi yol daxil olunmursa);
PWD – cari kataloqun tam adını verən dəyişən;
HOME – istifadəçinin ev kataloqunun tam yolunu saxlayan dəyişən;
HOSTNAME – kompüterin adını saxlayan dəyişən;
LOGNAME – hal-hazırda açıq olan seansda istifadəçinin adını saxlayan dəyişən;
SHELL – cari seansda işə salınmış konsolun adını saxlayır;
USER – hal-hazırda açıq olan seansda istifadəçinin adını saxlayan dəyişən;
Sistemdə quraşdırılmış dəyişənlərin siyahısını export əmri vasitəsilə (parametrsiz şəkildə verdikdə) görmək olar.
Dəyişən vasitələri eynilə adi dəyişənlər kimi istifadə edə bilərik.
1.


#echo $HOME

yazsanız, aşağıdakı nəticəni alarsınız.


/root

2.


$echo $SHELL

yazsanız, aşağıdakı nəticəni alarsınız.


/bin/bash

 

Dəyişən vasitələrin təsviri


Dəyişən vasitələr ƏS-nin qurulması zamanı yaranır. Lakin, onları özümüz də təyin edə və davamlı istifadə etmək üçün yadda saxlaya bilərik. Məsələn, QADAGAN_OLUNMUSH_BOLGE adlı bir dəyişən təyin edib, onu bütün proqramlar üçün keçərli etmək istəsək, aşağıdakı əmr işimizi görəcək:


$export QADAGAN_OLUNMUSH_BOLGE=/home/huzeyfe/tools/security

Təyin etdiyimiz bu dəyişənlər sistem növbəti dəfə işə salındıqda itəcəklər. Qalıcı etmək üçün /etc/bashrc və ya öz ev kataloqumuzdakı .bashrc faylına yazmalıyıq.

 

Dəyişənlər


Bash dili olduqca güclüdür. Əsas hissəsi dəyişənlərin elan olunması hissəsidir. Dəyişənləri təyin etmək və istifadə etmək olduqca asandır. Digər dillərdən fərqli olaraq - dəyişənin tipini elan etmək tələb olunmur, onun harda istifadə olunmasına əsasən tipi müəyyən olunur. Dəyişənləri böyük hərflərlə adlandırmaq bir qayda kimi qəbul olunmuşdur. Məsələn:
#!/bin/bash
TERM=vt100
CONTER=0


Bizi dəstəkləyənlər