#10 – Linux terminali va bash. Veb-dasturlash kursi


Dennis Ritchi xotirasiga bag’ishlanadi


Bu terminal. Terminal OT (Operatsion Tizim) da o’ranatilgan dasturlarga murojaat qilish uchun maxsus dastur. Uni kimdir terminal desa, kimdir console deydi. Windows da command line, ruschasiga комманданая строка, buyruqlar qatori nomli dastur bor bu vazifa uchun.

Terminal bu oddiygina oynalik dastur. U o’zida hech narsa saqlamaydi. Uning ishlashi uchun boshqa dastur kerak. Eng mashxuri bash. Yana bitta dastur bu shell. Ko’pchilik bash ni qulayroq deb bilishadi, shu jumladan men ham. Lekin hammaning didi har hil.

Linux OT’ida terminal boshidan o’ranatilgan bo’ladi. U bash yoki, shell da ishlashi tizim moslamalariga bog’liq.

Mac OT’ida ham terminal o’rnatilgan va odatda u yerda bash dasturi ishlatiladi.

Windows’ning command line dasturi juda kambag’al. Lekin, ushbu OT’ga ham terminal va bash o’rnatsa bo’ladi. PHP haqidagi darsimizda, xampp’ni o’rnatgan bo’lsangiz, ushbu xampp dasturida shell’ni chaqiruvchi tugmacha mavjud.

Windows’ning 11 chi versiyasida Linux buyruqlarini qo’llash imkoniyatlari paydo bo’ladi deb va’da berishgan edi. Windows 11 chiqdi, lekin u yerda qanchalik Linux buyruqlarini qo’llash amalga oshirilganidan habarim yo’q. Bilganlar bo’lsa izoh qoldiring.


Ushbu matn “Taklif” deyiladi. Chunki u bizga yangi buyruq kiritishni taklif qilmoqda


Taklifning chap tomonida foydalanuvchi logini turadi. Odatda bu nomni OT o’rnatayotganda ko’rsatasiz.


Logindan so’ng kuchukcha belgisi va kompyuter nomi joylashgan. Bu nomni ham OT o’rnatayotganda ko’rsatasiz.


Ikki nuqtadan so’ng esa hozir qaysi papkada turganimiz chop etilgan. Tilda belgisi “foydalanuvchining uy papkasi” degan ma’noni beradi. Gap shundaki OT’larda barcha foydalanuvchilarning shaxsiy papkalari mavjud. Ushbu papkani uy papkasi deymiz.

Foydalanuvchilarning uy papkalari Windows OT’ida C:\Users papkasida joylashsa, *nix tizimlarida /home papkasida joylashgan bo’ladi. *nix tizimlari haqida dars davomida kengroq tushuncha beraman.


Taklifning ohirida dollar ($), yoki panjara (#) belgisi turadi. Dollar belgisi – buyruqlar oddiy foydalanuvchi tomonidan bajarilayotganligini, panjara belgisi esa, buyruqlar super foydalanuvchi tomonidan bajarilayotganini ko’rsatadi. Oddiy foydalanuvchida faqat o’zining uy papkasi ichida o’zgartirishlar huquqi bo’lsa, super foydalanuvchi – tizimning istalgan joyida o’zgartirish kiritishi mumkin. *nix tizimlarida super foydalanuvchi odatda root loginiga ega bo’ladi


*NIX TIZIMLARI

1969-yilda “Bell Labs” ishchilari Ken Tompson va Denis Ritchi (ularni Dasturlash tillari darsidan – C tili asoschilari sifatida bilasiz), UNIX (yuniks) OT’ini yaratishadi. U assembler tilida yozilgan. Keyingi versiyasi B tilida yoziladi va B tili asosida C tili yaratiladi. Uchinchi versiyasining yadrosi esa C tilida yoziladi.

UNIX OT’izmi ochiq kodlik bo’lib, istagan odam uning kodiga o’zgartirish kiritib, o’zining OT’ini yaratishi mumkin edi.

Lekin “Bell Labs” kompaniyasi “AT&T” kompaniyasiga tegishli edi. “AT&T” esa OT’lardan yaxshigina pul ishlash mumkinligini tushunib, UNIX’ning yangi versiyalarini litsenziyalay boshlaydi. Bu esa UNIX’ning eski, bepul versiyalari ustida qurilgan yangi OT’larni jadal rivojlanishiga olib keladi. Misol uchun Berkeley Universiteti UNIX asosida BSD OT’ini chiqaradi. Uning asosida esa ko’plab yangi OT’lar paydo bo’ladi, jumladan: NetBSD. FreeBSD, OpenBSD, SunOS va hokazo.

Apple maxsulotlarida ishlatiluvchi MacOS va iOS ham FreeBSD asosida qurilgan.

“AT&T” Berkeley Universitetini sudga beradi va sud BSD OT’idan barcha AT&T’da yozilgan kodlar olib tashlanmaguncha, uni tarqatishni ta’qiqlab qo’yadi.

1983-yilda Richard Stolman – GNU loyihasini yurg’izadi. Loyiha nomi – “GNU is Not Unix” so’zlaridan olingan abbreviatura hisoblanadi va “GNU – Unix Emas” ma’nosini beradi. Bu loyihadan maqsad: UNIX kodlaridan foydalanmasdan, mutlaqo bepul UNIX’simon OT yararish edi. GNU loyohasida ko’plab dasturlar yaratiladi, lekin ularning yadrosi – ya’ni OT’ning o’zi bo’lmaydi.

1991-yilda Linus Torvalds yangi UNIX’simon OT’ni taqdim etadi. Uning do’stlari hazil tariqasida Linus va UNIX so’zlarini qo’shib, bu tizimni Linux deb atay boshlashadi. Bu nom hozirgacha saqlanib qolgan.

Linux ham “ochiq kodlik” bo’lganligi uchun, Linux OT’i va GNU dasturlaridan foydalanib istagan odam Linux distributivini yaratishi mumkin edi. Shuning uchun ham dunyoda minglab Linux distributivlari mavjud. Distributiv aslida alohida OT, lekin ular shunchalik ko’p va bir-birga o’xshashki – ularni Linux distributivi deyishadi. Debian, Ubuntu, Fedora, Kali kabi mashxur distributivlarning o’zi 300 dan ortiq.

2008-yilda Linux’ga asoslangan Android OT’i yaratildi.

2020-yilning statistikasiga qaraganda Linux 100% super kompyuterlarda ishlatiladi. 80% serverlarda esa UNIX’simon OT’lar o’rnatilgan, Bu ham asosan Linux OT’i.

Ko’rib turganingizdek Denis Ritchi “farzandi” bo’lgan UNIX OT minglab boshqa OT yaratilishiga sababchi bo’ldi. Shu jumladan: Linux, Android, MacOS, iOS, FreeBSD va hokazo. Ularning ishlash prinsiplari bir-biriga juda o’xshash. Shuning uchun ham ularni UNIX oilasi, yoki UNIX’simon OT’lar, ko’pincha esa *nix tizimlari deb aytishadi.

UNIX OT’ini yozish uchun o’ylab topilgan C tili, hozirgi kunda C++, PHP, Java, C#, Python, JavaScript kabi ko’plab tillar paydo bo’lishiga sababchi bo’lgan.

Stiv Jobsning vafoti dunyoni larzaga solgani bo’lsada, undan bir hafta o’tib vafot etgan Denis Ritchi o’limi – ommaviy axborot vositalari e’tiborini torgani yo’q. Bu esa adolatdan emas deb hisoblayman.

BUYRUQLAR

Tizimda o’rnatilgan dasturlarni chaqirib ko’raylik. Shulardan biri: pwd


Uni terib, enter tugmasini bosamiz. Ekranga /home/kadirov jumlasi chiqdi. Bu qaysi papkada turganimiz haqida ma’lumot. pwd – Print Working Directory degani. Qaysi papkada ishlayotganimni ekranga chiqar degan ma’noni beradi. Biz nima ish qilsak ham aynan shu papkaga nisbatan bajariladi. Misol uchun yangi papka yaratsam, u /home/kadirov papkasi ichida yaratiladi.


mkdir dasturi Make Directory so’zidan qisqartma bo’lib, u yangi papka yaratish uchun xizmat qiladi. Ushbu dastur nomidan so’ng yangi papka nomini yozamiz. Dastur bizga hech qanday xabar chiqarmasdan nihoyasiga yetdi. Bu yaxshi, chunki terminalda xabar yo’qliginig o’zi — hushxabar. Agar biror xato bo’lganida — biz bu haqda xabarni ko’rgan bo’lar edik.


Misol uchun ushbu buyruqni qayta teramiz. Qayta termaslik uchun klaviaturadagi yuqori strelkasini bosish ham mumkin. Yuqori va pastgi strelkalar orqali oldinroq yuborilgan buyruqlarni ko’rish mumkin.

Enter’ni bosganimizda “test papkasini yarata olmayman, u allaqachon mavjud” mazmunidagi xabarni ko’rishimiz mumkin. Ya’ni aksariyat dasturlar muvaffaqiyatli yakunlanishsa – hech qanday xabar chiqarmaydilar. Faqat xato bo’lganida biror xabar ko’rishimiz mumkin.


Oynani tozalash uchun CTRL + L “issiq tugma”lari, yoki clear buyrug’idan foydalanish mumkin. Clear ham dastur, lekin terminalda dasturlarni chaqirishimizni “buyruq berish” deb ataymiz. Shuning uchun ham “mkdir buyrug’i” deganda mkdir dasturini chaqirish nazarda tutiladi.


Keyingi dastur ls. Ushbu buyruq biz turgan papka ichida joylashgan fayl va papkalarni ekranga chiqaradi. E`tibor bering, biz oldinroq yaratgan test papkasi ham ko’rinmoqda.


Barcha dasturlarni o’zimizga moslash mumkin. Umumiy dasturlash teoriyasidan Parametr nima ekanligi esingizda bo’lsa kerak? Funksiya chaqirayotganda uning parametrlari orqali o’zimizga moslar edik. Dastularni chaqirayotganda ham ularga parametrlar berish mumkin. Ingliz tilida, dastur parametrlarini ko’proq options deyishadi.

Dastruchilar, yaratayotgan dasturida qanday parametrlar bo’lishini o’zlari hal qilishadi. Lekin urf bo’lgan qonunlar ham bor va dasturchilar bu urflarni qo’llashga harakat qilishadi.

Misol uchun parametr nomi bir nechta belgidan iborat bo’lsa, bu parametr oldidan ikki chiziq qo’yiladi. Misol uchun –help parametri. Ko’pchilik dasturlarda –help parametri bor, u “Yordam” ma’nosini beradi. Bu parametr orqali dastur nima ish bajarishini, mavjud parametrlar va boshqa ma’lumotni bilish mumkin

Probel orqali bir nechta parametrlar ishlatish mumkin. Misol uchun –quote-name parametri fayl va papka nomlarini qo’shtirnoqqa oladi. –size parametri esa fayl va papkalarning hajmini ham chop etadi

Agar parametr bitta belgidan iborat bo’lsa, uning oldidan bitta chiziqcha qo’yamiz. Misol uchun ls dasturining l parametri, papka va fayllarni ro’yxat ko’rinishida chop etadi.


ls dasturi yashirincha fayl va papkalarni ham ko’rsatishi uchun -a parametridan foydalanish mumkin. *nix tizimlarida nuqtadan boshlangan fayllar yashiringan fayllar deyiladi. Yoki, ularni tizim fayllari ham deyish mumkin.

Parametr bitta belgidan iborat bo’lsa, uni bir chiziq orqali ko’rsatish mumkin dedik. Bitta belgidan iborat parametrlarning yana bir qulay tomoni: bitta chiziqdan so’ng bir nechta parametr ko’rsatish mumkin. Bu yerda yarincha fayl va papkalar, ro’yxat shaklida ekranga chiqadi.

Vertikal slesh orqali dasturlarning chop etayotgan matnini ekranga emas, boshqa dasturga yo’naltirishimiz mumkin. Misol uchun grep dasturiga. Ushbu dastur unga yuborilgan qatorlarni biror qolip bo’yicha solishtiradi va mos kelganini ekranga chiqaradi.

Bu yerda biz o’zimiz turgan papkadagi barcha fayl va papkalar ro’yxatini “Do” so’ziga filtrladik. Ekranga Documents va Downloads papkalari chiqdi.

Agar biz “tes” so’zi bor qatorlarni olmoqchi bo’lsak, ekranga Templates va biz oldinroq yaratgan test papkalari chiqadi

echo dasturi orqali biror matnni ekranga chiqarish mumkin.

Yoki, katta belgisi (>) orqali ushbu matnni faylga yozishimiz mumkin. Agar ushbu fayl bo’lmasa, u yaratiladi. Buning uchun katta belgisidan so’ng faylga yo’l ko’rsatishimiz kerak. Yo’l korsatishni HTML dasridan eslasangiz kerak? Bu relative, ya’ni nisbiy yo’l. Yo’l hozirgi turgan papkamizga nisbatan ko’rsatiladi. Horizgi turgan papkamiz ichida test papkasi bor, uning ichida akmal.txt fayli bor demoqdamiz.

cat dasturi esa, biror faylning matnini ekranga chiqaradi. Buning uchun dastur nomidan so’ng, faylimizga yo’l ko’rsatishimiz kerak.


Terminalda yo’l ko’rsatish juda qulay. Men “te” harflarini tergach klaviaturadagi “tab” tugmasini bosaman. U odatda “Caps Lock” tugmasining yuqorisida joylashgan.

Shunda terminalning o’zi “test/” deb yozadi. Chunki hozir turgan papkamda “te” harflari bilan boshlanuvchi boshqa papka, yoki fayl yo’q.


So’ng, yana bir marotaba tabni bosaman, shunda “akmal.txt” so’zi avtomatik ravishda qo’yiladi. Chunki test papkasida boshqa fayl yo’q. Demak ushbu faylda nima borligini bilish uchun “cat te” deb yozdim va ikki marotaba “tab” tugmasini bosdim. Bu vaqtni juda tejaydi.


Shu sababdan ham Linux OT foydalanuvchilari ko’proq terminaldan foydalanishadi. Chunki Linux tashqi ko’rinishi qanchalik chiroyli bo’lmasin, avval fayl menendjerini ochib, keyin test papkasini ochib, so’ng akmal.txt faylini ochguncha bir necha soniya ko’proq vaqt ketishi mumkin. Soniyalarning qadrini mensimaslik mumkin, lekin har bir amaldan bir necha soniya tejab, ancha tez ishlashni o’rganish mumkin. “tab”dan boshqa ham tez ishlash uchun yordam beradigan imkoniyatlar ko’p. Darslarimda ular haqida ham ko’proq ma’lumot berishga harakat qilaman.

Windows’da esa buning iloji yo’q, chunki ushbu OT’da tashqi ko’rinishsiz ishlab bo’lmaydi.

MacOS ham *nix OT’i ekanligini aytgandim. Shuning uhcun bu OT’da ham vaqtingizni tejovchi terminal mavjud.


cd dasturining nomi Change Directory so’zlaridan olingan. U biz ishlab turgan papkani o’zgartiradi. Endi barcha buyruqlarimiz test papkasiga nisbatan beriladi

Bu narsadan terminalning ikki nuqtadan so’ng yozilgan yo’li ham ma’lumot berib turibdi.

Endi ls dasturi faqat akmal.txt falini ko’rsatmoqda

ls dasturiga ham yo’l ko’rsatishimiz mumkin. Shunda u biz turgan papka emas, yo’l ko’rsatgan papkamiz ichidagi fayl va papkalarni ko’rsatadi. Bu yerda biz test papkasidan chiqmoqdamiz, ya’ni yana home papkasini ko’rsat dedik.


HTML darsida nisbiy yo’l ko’rgan edik. Undan tashqari absolute, yani mutlaq yo’l ham bor. U qaysi papkada turganizdan qat’iy nazar bir hil bo’ladi. Yo’l tizimning ildizidan boshlab to’liq ko’rsatilishi shart. Windows’da bu yo’l masalan “С:\” deb boshlansa, *nix tizimlarida disklar ham papka shaklida ulanadi. Shuning uchun mutlaq yo’llar “/” dan boshlanishadi.

Mana mening uy papkamga mutlaq yo’l. Mutlaq yo’lni boshqacha qilib, to’liq yo’l ham deyishadi


mv dasturi move so’zidan olingan va u biror fayl, yoki papkani bir joydan, ikkinchi joyga ko’chiradi. Biz ushbu papkadagi akmal.txt faylini, papka “tashqarisiga”, ya’ni uy papkamizga ko’chirdik.

ls dasturi orqali uni ko’rishimiz mumkin.

Endi, ushbu faylni qaytarib test papkasiga ko’chirdik. Faqat bu safar uning nomini kadirov.txt ga o’zgartirdik.

ls orqali ushbu fayl nomi o’zgarganiga amin bo’lishimiz mumkin.

mv dadsturini fayl, yoki papka nomlarini o’zgartirish uchun ham ishlatish mumkin.

ls orqali buni tekshirdik


cp dasturi esa copy so’zidan olingan va uni fayl va papkalardan nusxa ko’chirish uchun ishlatishadi


yana ls’ga murojaat qilamiz

rm esa remove so’zidan olingan va u fayl va papkalarni o’chirish uchun hizmat qiladi.

Fayl o’chirilganiga amin bo’lamiz


cd dasturiga yo’l ko’rsatmasak, u bizni uy papkamizga olib o’tadi.

Agar katta matnga ega faylimiz bo’lsa

Lekin biz uning faqat ohirgi qatorlarini ko’rmoqchi bo’lsak tail (ingilizchasiga dum degani) dasturidan foydalanish mumkin

Agar tail dasturiga -f parametrini bersak, unda matnlar ekranga chiqqach dastur o’z ishini to’xtatmaydi. U terminalda “osilib” turaveradi.

Boshqa dastur orqali faylga o’zgartirish kiritsak, tail dasturi o’zgarishni birdan ekranga chiqaradi. Bu dasturlarning LOG fayllarini analiz qilish uchun juda qulay. Dasturlar odatda har bir muhim qadamlarni maxsus fayllarga yozib borishadi. Bu fayllarni log’lar deymiz.

Shu o’rinda echo dan so’ng ikkita sterkla qo’yib (>>) fayl matnini to’liq almashtirish o’rniga, yangi matnni faylning ohiriga joylash mumkin.

“Osilib” turgan dasturlardan chiqish uchun CTRL + C issiq tugmalarini bosish kerak. Bu “Cancel”, ya’ni bekor qilish ma’nosini beradi.

Bir xil “osilib” turuvchi dasturlarda yozish imkoni bor, u yerda exit (chiqish) deb yozib, yana bashga qaytish mumkin. Klaviaturada chiqish ma’nosini beruvchi yana bir issiq tugmalar – CTRL + D. Hullas biror dasturga kirib qolsangiz va undan chiqa olmasangiz, manashu 3 variantdan birini bajarib ko’ring. Uch variant ham yordam bermasa, terminal oynasini yopish mumkin. Shunda, teminalda ishlab turgan barcha dasturlar – ishlashni to’xtatishadi.

Endi test papkamizni o’chirmoqchi bo’lsak, dastur papkani o’chira olmasligi haqida xabar olamiz. Chunki papka bo’sh emas. Avval ichidagi fayllarni, undan keyingina papkaning o’zini o’chirishimiz mumkin.

Lekin papkamizda yuzlab fayllar bo’lishi mumkin. Har birini alohida o’chirib o’tirmaslik uchun, -r parametrini ko’rsatishimiz mumkin. Shunda dasturning o’zi barcha fayl va papkani o’chiradi. Bazida u ogohlantirishlar chiqarishi va fayl, yoki papakalarni o’chirmasligi mumkin. “Ogohlantirib o’tirmasdan o’chirayver” demoqchi bo’lsak -f parametrini qo’shishimiz mumkin

Shuning uchun ham hech qachon, eshitayapsizmi, hech qachon bunaqa kod yozmang. Ayniqsa super foydalanuvchi nomidan. …yo’q-yo’q, hayolingizga ham keltirmang

40+

Fikr bildirish