Fayllarni o'qish — cat, less, head, tail -f

~10 daq · Linux · Fayl tizimi

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 cat qilmang — 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, G oxiri, q chiqish
  • head -n N — boshi; tail -n N — oxiri; tail -n +2 — 2-qatordan
  • tail -f — loglarni jonli kuzatish; -F — rotatsiyaga chidamli
  • wc -l — qatorlar soni; diff -u — farq
  • Katta faylga cat qilmang

Keyingi dars

9-dars: Qidirish — find, which, glob naqshlar