Fayllarni o'qish — cat, less, head, tail -f
Muammodan boshlaylik
Serverda ilova xato beryapti. Log fayl — /var/log/dokon/app.log, hajmi 2 GB. Uni qanday ochasiz? Muharrirda ochsangiz — server qotib qoladi. Kerak bo'lgani — faqat oxirgi 50 qator. Yoki xatolar paydo bo'layotganini real vaqtda kuzatish.
Linux da faylni o'qishning bir nechta usuli bor — har biri o'z vaziyati uchun.
cat — butun faylni chiqarish
cat /etc/hostname
cat .env
Kichik fayllar uchun ideal. Bir nechta faylni ketma-ket:
cat qism1.txt qism2.txt
Bu cat ning asl vazifasi — fayllarni birlashtirish (concatenate):
cat qism1.txt qism2.txt > toliq.txt
Foydali bayroqlar:
cat -n app.js # qator raqamlari bilan
cat -A config.txt # yashirin belgilar: tab (^I), qator oxiri ($), Windows \r (^M)
cat -A — "nega skript ishlamayapti" savoliga ko'p javob beradi: Windows da saqlangan fayllarda ^M$ ko'rinadi (qator oxiri \r\n). Tuzatish: sed -i 's/\r$//' fayl.sh yoki dos2unix fayl.sh.
[!WARNING] Katta faylga
catqilmang — 2 GB matn terminalga oqib ketadi. To'xtatish — Ctrl+C. Katta fayllar uchun —less,head,tail.
less — sahifalab ko'rish
less /var/log/syslog
less faylni to'liq yuklamaydi — gigabaytli fayllarni ham bir zumda ochadi.
| Tugma | Nima |
|---|---|
| Space / b | Keyingi / oldingi sahifa |
| ↑ ↓ | Qatorma-qator |
| g / G | Boshiga / oxiriga |
| /matn | Pastga qidirish; n — keyingi, N — oldingi |
| ?matn | Yuqoriga qidirish |
| F | "Kuzatish" rejimi (tail -f kabi); Ctrl+C — chiqish |
| -N | Qator raqamlarini yoqish/o'chirish |
| q | Chiqish |
man ham ichida less ishlatadi — tugmalar bir xil (4-dars).
less +G app.log # darhol oxiridan boshlash
less -S keng.csv # uzun qatorlarni o'ramaslik (← → bilan)
head — boshi
head fayl.txt # birinchi 10 qator
head -n 20 fayl.txt # birinchi 20 qator
head -n 1 data.csv # sarlavha qatori
head -c 100 fayl.bin # birinchi 100 bayt
tail — oxiri
tail app.log # oxirgi 10 qator
tail -n 50 app.log # oxirgi 50 qator
tail -n +2 data.csv # 2-qatordan oxirigacha (sarlavhasiz)
tail -f — real vaqtda kuzatish
Eng foydali buyruqlardan biri:
tail -f /var/log/nginx/access.log
Fayl oxirini ko'rsatadi va kutadi — yangi qatorlar qo'shilishi bilan ekranga chiqaradi. Brauzerda saytni yangilang — so'rov darhol paydo bo'ladi. To'xtatish — Ctrl+C.
tail -f -n 100 app.log # oxirgi 100 dan boshlab kuzatish
tail -F app.log # fayl qayta yaratilsa ham (log rotation)
tail -f app.log | grep --line-buffered ERROR # faqat xatolar (14-dars)
tail -f a.log b.log # bir nechta fayl
[!TIP] Debug paytida terminalni ikkiga bo'ling: birida
tail -f app.log, ikkinchisida buyruqlar yoki brauzerda harakatlar. Har bir harakatning natijasi darhol ko'rinadi.
wc — sanash
wc fayl.txt
120 845 5230 fayl.txt
qatorlar so'zlar baytlar
wc -l access.log # faqat qatorlar soni
15-darsda wc ni pipe bilan ishlatamiz: grep ERROR app.log | wc -l — xatolar soni.
Boshqa foydali vositalar
diff eski.conf yangi.conf # ikki fayl farqi
diff -u eski.conf yangi.conf # git diff ga o'xshash format
nl app.js # qator raqamlari (cat -n kabi)
tac fayl.txt # teskari tartibda (cat ning aksi)
bat — sintaksis rangli cat (o'rnatish: sudo apt install bat, Ubuntu da buyruq nomi batcat).
Qaysi biri qachon
| Vaziyat | Buyruq |
|---|---|
| Kichik fayl, bir qarashda | cat |
| Katta fayl, qidirish, varaqlash | less |
| Faylning boshi, CSV sarlavhasi | head |
| Logning oxirgi yozuvlari | tail -n 100 |
| Log ni jonli kuzatish | tail -f |
| Necha qator | wc -l |
| Ikki versiya farqi | diff -u |
Nima uchun shunday?
Nima uchun less gigabaytli faylni bir zumda ochadi, oddiy muharrir esa qotib qoladi?
Chunki less faylni oqim sifatida o'qiydi: faqat ekranda ko'rinadigan qismni diskdan oladi. Pastga varaqlasangiz — keyingi qismni o'qiydi. Muharrir esa butun faylni xotiraga yuklaydi, uni qatorlarga ajratadi va tahrirlash uchun tuzilmalar yasaydi — 2 GB fayl uchun bu bir necha gigabayt xotira. Xuddi shu g'oya tail da: u faylning oxiridan o'qiydi, boshini umuman ochmaydi. Shuning uchun serverdagi katta loglar bilan ishlashda hech qachon "ochish" emas — "o'qish" vositalari ishlatiladi.
Xulosa
Eslab qoling:
cat— kichik fayllar, birlashtirish;cat -A— yashirin belgilar (^M)less— katta fayllar;/qidirish,Goxiri,qchiqishhead -n N— boshi;tail -n N— oxiri;tail -n +2— 2-qatordantail -f— loglarni jonli kuzatish;-F— rotatsiyaga chidamliwc -l— qatorlar soni;diff -u— farq- Katta faylga
catqilmang
Keyingi dars
9-dars: Qidirish — find, which, glob naqshlar