Skip to content

03. Matn, qidiruv va oqimlar — 15 ta savol-javob

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

1. stdin, stdout va stderr nima? Ularning fayl deskriptorlari qanday?

Javob

Har bir jarayon uchta standart oqim bilan boshlanadi: stdin (0) — kiritish, stdout (1) — oddiy chiqish, stderr (2) — xato xabarlari. Xatolar alohida oqimda bo'lgani uchun natijani faylga yo'naltirib, xatolarni ekranda ko'rish yoki aksincha qilish mumkin.

2. > va >> farqi nima?

Javob

> faylni ochib, mazmunini o'chirib yangidan yozadi (fayl bo'lmasa yaratadi). >> mavjud mazmunga qo'shadi. > bilan muhim faylni tasodifan ustidan yozib yuborish oson. Shu sabab set -o noclobber ishlatiladi.

3. cmd > out.txt 2>&1 va cmd 2>&1 > out.txt farqi nima?

Javob

Yo'naltirishlar chapdan o'ngga bajariladi. Birinchisida avval stdout faylga ulanadi, so'ng stderr "stdout hozir qayerga ulangan bo'lsa, o'sha yerga" ulanadi, ya'ni ikkalasi ham faylga yoziladi. Ikkinchisida avval stderr stdout'ning eski manziliga (ekran) ulanadi, keyin stdout faylga o'tadi: xatolar ekranda qoladi. Qisqa shakl: &> out.txt (Bash).

4. Pipe (|) qanday ishlaydi?

Javob

Pipe — kernel ichidagi buferli kanal: chapdagi buyruqning stdout'i o'ngdagining stdin'iga ulanadi. Ikkala jarayon bir vaqtda ishlaydi, o'ngdagi dastur ma'lumot kelishi bilan ishlay boshlaydi, ya'ni oraliq fayl kerak emas. Bufer to'lsa, yozuvchi kutadi. Pipe stderr ni olib o'tmaydi (agar 2>&1 yoki |& ishlatilmasa).

5. grep da asosiy va kengaytirilgan regex (-E) farqi nima? Yana qaysi opsiyalar muhim?

Javob

Asosiy regex (BRE) da +, ?, |, () ni qochirish kerak; -E (ERE) da ular to'g'ridan-to'g'ri ishlaydi. Muhim opsiyalar: -i (harf registrini farqlamaslik), -v (teskari), -n (qator raqami), -c (soni), -r (rekursiv), -l (fayl nomlari), -o (faqat mos qism), -w (butun so'z), -A/-B/-C (kontekst).

6. find va locate farqi nima?

Javob

find fayl tizimini hozir aylanib chiqadi: har qanday mezon (nom, hajm, vaqt, ruxsat, egasi) bo'yicha qidiradi va amal bajara oladi, lekin sekinroq. locate oldindan tuzilgan ma'lumotlar bazasidan (updatedb) qidiradi: juda tez, lekin baza eskirgan bo'lishi mumkin va yangi fayllarni ko'rmaydi.

7. find -exec va xargs farqi nima?

Javob

Ikkalasi ham topilgan fayllarga buyruq beradi. -exec cmd {} \; har bir fayl uchun buyruqni alohida ishga tushiradi, -exec cmd {} + esa ko'p faylni bitta chaqiruvga to'playdi (tezroq). xargs stdin'dan argument ro'yxatini quradi. Nomida bo'shliq yoki maxsus belgi bo'lgan fayllar uchun find -print0 | xargs -0 xavfsiz.

8. sed nima va -i nima uchun xavfli?

Javob

sed — oqimli muharrir: matnni qator-qator o'qib, qoidalar (almashtirish s/eski/yangi/, o'chirish d, chiqarish p) qo'llaydi. -i natijani faylning o'ziga yozadi. Xato regex butun faylni buzishi mumkin. Shu sabab avval -isiz natijani ko'rish yoki -i.bak bilan zaxira qoldirish tavsiya etiladi.

9. awk qanday ishlaydi?

Javob

awk har bir qatorni o'qib, maydonlarga bo'ladi ($1, $2, … $NF — oxirgisi; $0 — butun qator) va shart { amal } shaklidagi qoidalarni qo'llaydi. -F ajratuvchini belgilaydi. BEGIN va END bloklari boshida va oxirida bir marta bajariladi, shuning uchun yig'indi, o'rtacha va guruhlash uchun qulay. NR — qator raqami.

10. Nega uniq dan oldin sort kerak?

Javob

uniq faqat qo'shni takroriy qatorlarni birlashtiradi. Saralanmagan ma'lumotda bir xil qatorlar uzoqda turishi mumkin va ular alohida qoladi. Shu sabab odatiy zanjir: sort | uniq -c | sort -rn — takrorlanishni sanash va eng ko'pini tepaga chiqarish.

11. tr va sed farqi nima? tr qachon qulay?

Javob

tr belgi-belgi almashtirish yoki o'chirish uchun (tr a-z A-Z, tr -d '\r') va faqat stdin'dan o'qiydi, fayl argumentini olmaydi. sed esa so'z va andoza (regex) bilan ishlaydi. Oddiy belgilarni o'zgartirish yoki CRLF kabi ortiqcha belgini tozalash uchun tr ixchamroq.

12. tar va gzip farqi nima?

Javob

tar ko'p faylni bitta arxivga yig'adi (siqmaydi), ruxsat va egalik ma'lumotini saqlaydi. gzip bitta oqimni siqadi. tar -czf ikkalasini birlashtiradi (c — yaratish, z — gzip, f — fayl). Shuning uchun .tar.gz ikki qatlam: avval arxivlash, keyin siqish. zip esa ikkisini bitta formatda qiladi va Windows bilan mos.

13. Arxivni ochishdan oldin nimani tekshirish kerak?

Javob

Mazmunni tar -tzf bilan ko'rish: arxiv ichida absolyut yo'l (/etc/...) yoki ../ bo'lsa, ochilganda kutilmagan joyga yozilishi mumkin. Odatda arxivni alohida bo'sh katalogga ochish (-C) tavsiya etiladi. Ishonchsiz manbadan olingan arxivlarda bu muhim xavfsizlik odati.

14. /dev/null nima uchun kerak?

Javob

/dev/null — yozilgan hamma narsani yutib yuboradigan va o'qilganda bo'sh qaytaradigan maxsus fayl. Keraksiz chiqishni (2>/dev/null) tashlab yuborish uchun ishlatiladi, masalan, find / dagi "Permission denied" xabarlarini yashirish. Lekin xatolarni ko'r-ko'rona yashirish haqiqiy muammoni ham yashirishi mumkin.

15. tee va here-document (<<EOF) nima uchun kerak?

Javob

tee stdin'ni ham stdout'ga, ham faylga yozadi (zanjir o'rtasida natijani saqlab, davom ettirish uchun). sudo tee file esa root huquqini talab qiladigan faylga yozishning to'g'ri usuli, chunki sudo cmd > file da yo'naltirishni sudo emas, joriy oddiy shell bajaradi. Here-document ko'p qatorli matnni buyruqning stdin'iga beradi (konfiguratsiya fayllarni skriptdan yozish uchun qulay).