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.
************************************************************
Task Scheduling (Məsələlərin planlaşdırılması)
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ə:
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
************************************************************
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.
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.
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
ReplyDelete30 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
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