Skip to content

02. Shell va terminal — 15 ta savol-javob

Avval javobni o'zingiz ayting, so'ng ochib solishtiring.

1. Terminal, shell va kernel orasidagi farq nima?

Javob

Terminal (emulyator) — matn kiritish va chiqarish oynasi, u faqat belgilarni uzatadi. Shell (Bash, Zsh) — kiritilgan qatorni o'qib, tahlil qiladigan va buyruqni bajaradigan dastur. Kernel — shell so'ragan ishni (jarayon yaratish, faylni ochish) haqiqatda bajaradi. Zanjir: klaviatura → terminal → shell → kernel → natija → terminal ekrani.

2. Bash va sh bir xilmi?

Javob

Yo'q. sh — POSIX standartidagi minimal shell (ko'p tizimda dash yoki Bash'ga havola). Bash esa uning ustiga massivlar, [[ ]], brace expansion va boshqa kengaytmalar qo'shgan. #!/bin/sh bilan yozilgan skriptda Bash'ga xos sintaksis ishlamasligi mumkin; bunday imkoniyat kerak bo'lsa, shebang #!/usr/bin/env bash bo'lishi kerak.

3. Nima uchun cd ichki (builtin) buyruq?

Javob

Joriy katalog har bir jarayonning o'z xususiyati. Agar cd alohida dastur bo'lsa, u bola jarayonda ishlab, faqat o'zining katalogini o'zgartirardi va tugagach shell joyida qolardi. Shu sabab joriy shell jarayonining ichida bajarilishi shart. Shunga o'xshash builtin'lar: export, alias, source. Turini type buyruq bilan tekshirasiz.

4. Shell buyruqni bajarishdan oldin qatorni qanday qayta ishlaydi?

Javob

Avval qatorni so'zlarga ajratadi va qo'shtirnoqlarni ko'rib chiqadi, so'ng kengaytmalarni bajaradi: brace expansion ({a,b}), tilde (~), o'zgaruvchilar ($VAR), buyruq almashtirish ($(...)), arifmetika va oxirida fayl nomi andozalari (*, ?, [ ] — globbing). Faqat shundan keyin tayyor argumentlar dasturga beriladi. Demak, * ni dastur emas, shell kengaytiradi.

5. Qo'shtirnoqlar ("...", '...') va qochirish (\) qanday ishlaydi?

Javob

Bittalik qo'shtirnoq ichida hamma narsa matn sifatida qoladi, hech narsa kengaytirilmaydi. Ikkitalik qo'shtirnoqda $VAR, $(...) va \ ishlaydi, lekin so'zlarga bo'linish va globbing bo'lmaydi. \ keyingi bitta belgining maxsus ma'nosini bekor qiladi. Qiymati bo'shliq yoki * bo'lishi mumkin bo'lgan o'zgaruvchini doim "$VAR" ko'rinishida yozish kerak.

6. PATH o'zgaruvchisi nima va buyruq qanday topiladi?

Javob

PATH — shell buyruqni qidiradigan kataloglar ro'yxati (: bilan ajratilgan). Shell birinchi bo'lib alias, funksiya va builtin'larni tekshiradi, keyin PATH dagi kataloglarni chapdan o'ngga ko'rib chiqadi va birinchi topilganini ishga tushiradi. Joriy katalogdagi dastur uchun ./dastur deb yozish kerak, chunki . xavfsizlik nuqtai nazaridan PATH da bo'lmaydi.

7. Buyruq haqida yordamni qaerdan olasiz: man, --help, info?

Javob

buyruq --help — qisqa foydalanish; man buyruq — to'liq qo'llanma (bo'limlar: 1 — buyruqlar, 5 — fayl formatlari, 8 — admin buyruqlari); info — GNU vositalarining batafsil hujjati; apropos kalit — nomi noma'lum buyruqni so'z bo'yicha qidiradi. Builtin'lar uchun help cd.

8. Chiqish kodi (exit status) nima va qayerda saqlanadi?

Javob

Har bir buyruq tugaganda raqamli kod qaytaradi: 0 — muvaffaqiyat, noldan farqli — xato (turli xatolarga turli raqam). Oxirgi buyruqning kodi $? da turadi, lekin u har yangi buyruqdan keyin yangilanadi, shuning uchun kerak bo'lsa, darhol o'zgaruvchiga saqlab olinadi. if, &&, || aynan shu kodga qarab ishlaydi.

9. Login shell, interaktiv va noninteraktiv shell farqi nima?

Javob

Interaktiv shell — foydalanuvchi bilan terminal orqali muloqot qiladi. Login shell — tizimga kirishda ochiladi (/etc/profile, ~/.profile o'qiladi). Interaktiv, lekin login bo'lmagan shell (terminalda yangi oyna) ~/.bashrc ni o'qiydi. Noninteraktiv shell (skript, cron) odatda profil fayllarini o'qimaydi. Shu sabab cron'da sizning PATH ingiz yoki aliaslaringiz bo'lmaydi.

10. Alias, shell funksiyasi va muhit o'zgaruvchisi (export) farqi nima?

Javob

Alias — buyruq nomi uchun oddiy matn almashtirish (argumentni o'rtaga qo'ya olmaydi). Funksiya — shell ichidagi kichik dastur, argument qabul qiladi. Oddiy o'zgaruvchi faqat joriy shellda ko'rinadi; export qilingach, u bola jarayonlarga ham beriladi (muhit o'zgaruvchisi). Aliaslar skriptlarda sukut bo'yicha ishlamaydi.

11. .bashrc va .profile (yoki .bash_profile) qaysi vaqtda o'qiladi?

Javob

.profile/.bash_profile — login shell ochilganda bir marta o'qiladi: PATH va muhit o'zgaruvchilari uchun joy. .bashrc — har bir yangi interaktiv shellda o'qiladi: alias, prompt, funksiyalar uchun joy. Ko'p sozlamalarda .profile ichidan .bashrc chaqiriladi, shu sabab ikkalasi birgalikda ishlaydi. O'zgarishdan keyin source ~/.bashrc bilan qayta yuklanadi.

12. Nano va Vim farqi nima? Vim'ning rejimlari qaysilar?

Javob

Nano — oddiy muharrir, buyruqlar pastda ko'rinib turadi, yangi boshlovchiga qulay. Vim — rejimli (modal) muharrir: Normal rejimda tugmalar buyruq bo'ladi, Insert (i) rejimida matn yoziladi, Command (:) rejimida saqlash/chiqish (:wq, :q!) bajariladi. Vim deyarli har bir serverda bor, shuning uchun minimal bilish (kiritish, saqlash, chiqish, qidirish) kerak.

13. cat, less va tail -f qachon ishlatiladi?

Javob

cat — qisqa faylni to'liq chiqaradi yoki fayllarni birlashtiradi. less — katta fayllarni sahifalab ko'rish, faylni to'liq xotiraga yuklamaydi, ichida qidirish mumkin. head/tail — boshi/oxiri. tail -f (yoki -F) — log faylga yangi qatorlar yozilishini jonli kuzatish uchun.

14. Absolyut va nisbiy yo'l farqi? ~, ., .. nimani bildiradi?

Javob

Absolyut yo'l / bilan boshlanadi va tizim ildizidan hisoblanadi, nisbiy yo'l joriy katalogdan. . — joriy katalog, .. — bir daraja yuqori, ~ — foydalanuvchining uy katalogi (shell kengaytiradi). Skript va cron'da absolyut yo'l ishonchli, chunki joriy katalog noaniq bo'lishi mumkin.

15. rm bilan qanday xavf bor? mv nega nomni o'zgartirish uchun ham ishlatiladi?

Javob

rm axlat qutisiga tashlamaydi: o'chirilgan fayl odatda qaytmaydi. rm -rf tasdiq so'ramaydi va bo'sh o'zgaruvchi yoki noto'g'ri yo'l (rm -rf "$DIR/") halokatli bo'lishi mumkin. Avval ls yoki echo bilan ko'ring. mv esa faylning katalog yozuvini o'zgartiradi: bir xil fayl tizimi ichida nomni almashtirish va boshqa katalogga o'tkazish bir amal, shu sabab alohida "rename" buyrug'i yo'q.