Shell (əmr örtüyü). Task Scheduling (Məsələlərin planlaşdırılması).


Shell anlayışı. Shellin 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/bashbu 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




************************************************************



Task Scheduling (Məsələlərin planlaşdırılması)

       Linux-da inzibatçı hər hansı bir proqramın onun iştirak olmadan da yerinə yetirilməsinə ehtiyac duya bilər. Bu zaman bu mümkün halı həyata keçirmək üçün müəyyən bir vasitə lazımdır. Belə ki, müasir Linux sistemlərində bu məqsədlə məsələlərin planlaşdırılması (task scheduling) mexanizmindən istifadə mümkündür.  Bu mexanizm task scheduling demonları ( "planlaşdırma cinləri" :) ) - at və cron vasitəsi ilə həyata keçirilir.

Bu proqramlar vasitəsi ilə proqramların yerinə yetirilməsini əvvəlcədən təyin olunmuş vaxta quraşdırmaq mümkündür. at əmri yalnız bir dəfə icra olunacaq məsələnin yerinə yetirilməsi hallarında istifadə olunur. Lakin, əgər məsələni müəyyən bir periodlarla həyata keçirmək tələb olunursa, bu zaman ən yaxşısı, cron demonundan və crontab əmrindən istifadə etməkdir.


Task scheduling metodu, serverdə (və ya fərdi kompüterdə) hər an baş verən proseslər anlayışını əks etdirir.

Məsələlərin planlaşdırılması üçün aşağıdakına analoji olan forma tətbiq olunur:




Ayın hər bir günü üçün qeydlər hazırlanır. Buna uyğun olaraq həftəlik forma qurulur. Bu forma qeyd olunmuş saatları planlaşdırmağa imkan verir. Bazar ertəsi üçün bu cür formaya nümunə:



 

Bu formalar serverin iş vaxtını optimal istifadə etməyə və məsələləri düzgün şəkildə planlaşdırmağa imkan verir. Bütün məsələlər qeyd olunduqdan sonra, yeni məsələlərin yerləşdirilməsi üçün yer axtarılacaq.  Təcrübəli sistem inzibatçıları hesab edirlər ki, məsələlərin planlaşdırılması üçün hər bir məsələyə təxminən bir saat qeyd etmək lazımdır ki, gözlənilməyən məsələləri yerləşdirmək hər zaman mümkün olsun. Həmçinin, yüksək sistemin yüklənməsi zamanını da nəzərə almaq lazımdır. Eyni zamanda bir neçə məsələni planlamaq məsləhət görülmür.

2 comments:

  1. Task Scheduling üçün ən çox yayılan və mənim nəzərimcə işlədilməsi, ayarlanması daha rahat , həm də anlaşıqlı olan cron demonu-dur(daemon). crontab /etc/crontabs faylında, /etc/cron.d, /var/spool/cron kataloglarındakı (kataloqların dəqiq adları distrubitivdən asılı olaraq fərqli ola bilər)məlumat fayllarında göstərilən qaydaya uyğun əməliyyatları yerinə yerinə yetirir (Fayllardakı məlumatlar demon işə düşdükdə yaddaşa yükləndiyindən, faylın məzmunundakı hər hansı dəyişikliklərin qüvvəyə minməsi üçün demon yenidən işə salınmalıdır) /etc/crontabs faylı demon üçün əsas fayl sayılır. Dəqiqə, saat, gün, ay ,həftə günü və istifadəçi adı dəqiqliyi ilə prosesləri icara etməyə imkan verir. Formatı belədir dəq (0-59), saat (14-00 = 2 P.M.; 2-00=2 ), ayın günü (1-31),ay (1-12 və ya ingilis abreviaturaları jan,feb və s), həftə günləri (0,7 hər ikisi bazar günü olmaqla 0-7 və ya ingilis , abreviaturaları mon, thu və s), sistem istifadəçisinin adı, yerinə yetirləcək komanda( icra oluna biləcək istənilənəməliyyat, skript icrası, bəlli komanda və s). Məsələn hər gün gecə saat 03:30 da deyək ki hər hansı bazanın backup edilməsi üçün bu faylda
    30 3 * * * root /usr/bachupscripts/backup_my_db.sh
    yazmaq kifayətdir.
    hər gün gecə saat 01:00-da sistemin yenidən yüklənməsi
    * 1 * * * root /usr/bin/reboot
    və s.
    /var/spool/cron katalogundakı faylların adı istifadəçi adları ilə əlaqələndirilir və bu əlaqələndirildiyi sistemə giriş etmiş istifadəçinin adından yerinə yetirilir, /etc/cron.d kataloqundakı faylların adlarına məhdudiyyət yoxdur, adətən əsas fayldan burada hər iş üçün ayrıca fayl tərtib edirlər. Faylların formatları oxşardır.
    Ətraflı məlumat üçün: $man crontab


    ReplyDelete
    Replies
    1. Anonymous, məlumat üçün təşəkkür edirəm. Bu barədə məqaləm hazırdır, lakin, hələki yayımlamamışam.

      Delete