Skip to content

Matnli fayllarni ko'rish

Faylni tahrirlash yoki qayta ishlashdan oldin uni ko'rib chiqing. Kichik konfiguratsiya fayli, katta log fayli va real vaqt rejimida yangi satrlar qo'shilib borayotgan log oqimi uchun turli vositalar kerak bo'ladi. To'g'ri ko'rish vositasini tanlash terminaldan qulay foydalanishga yordam beradi, keraksiz katta hajmdagi ma’lumotni yuklashning oldini oladi va binar boshqaruv belgilarini terminalga chiqarib yuborish xavfini kamaytiradi.

Misollar Ubuntu Server LTS, GNU Coreutils va less asosida berilgan. Siz Fayl va katalog buyruqlari maqolasidagi yo'llar va xavfsiz laboratoriya muhiti bilan ishlash tushunchalarini bilishingiz kerak.

Namuna log faylini yaratish

mkdir -p ~/lab/viewing-text
for n in $(seq 1 30); do
    printf '%s level=INFO request_id=req-%03d message="test request"\n' \
        "$(date -u +%FT%TZ)" "$n"
done > ~/lab/viewing-text/app.log

Faylni tekshiring:

file ~/lab/viewing-text/app.log
stat -c 'size=%s bytes, mode=%A, file=%n' ~/lab/viewing-text/app.log
wc -l ~/lab/viewing-text/app.log

Kutiladigan natija:

/home/<username>/lab/viewing-text/app.log: ASCII text
size=... bytes, mode=-rw-r--r--, file=/home/<username>/lab/viewing-text/app.log
30 /home/<username>/lab/viewing-text/app.log

Fayl hajmi va vaqt belgisi sizning tizimingizda boshqacha bo'lishi mumkin. Muhim jihat — fayl matnli fayl ekanligi va yangi qator belgisi bilan tugaydigan 30 ta yozuvdan iboratligidir.

Faylni chiqarishdan oldin tekshirish

Noma’lum faylni terminalga chiqarishdan oldin uning metadata ma’lumotlarini tekshiring:

ls -lh -- <file>
file -- <file>
test -r <file> && echo "readable"

<file> o'rniga haqiqiy fayl yo'lini yozing.

Bu tekshiruvlar uchta savolga javob beradi:

  1. Fayl hajmi qancha?
  2. Fayl qanday turdagi ma’lumotni saqlayotganga o'xshaydi?
  3. Joriy foydalanuvchi faylni o'qiy oladimi?

Warning

Binar fayllar, disk obrazlari, siqilgan arxivlar yoki noma’lum qurilma fayllarini tekshirmasdan cat bilan terminalga chiqarmang. Ular tushunarsiz natija, terminal boshqaruv ketma-ketliklari yoki juda katta ma’lumot oqimini chiqarishi mumkin.

Avval file buyrug'idan foydalaning. Binar faylni tekshirish kerak bo'lsa, kichik bayt chegarasi bilan hexdump -C kabi vositalardan foydalaning.

cat: kichik faylni to'liq chiqarish

cat bir yoki bir nechta fayl tarkibini standart chiqishga ketma-ket chiqaradi.

Bitta kichik faylni tez ko'rish uchun:

cat ~/lab/viewing-text/app.log

30 qatorli laboratoriya fayli uchun bu qulay. Lekin 500 MB hajmdagi log fayli uchun cat yaxshi tanlov emas. U terminalni juda ko'p ma’lumot bilan to'ldiradi va fayl ichida harakatlanish imkonini bermaydi.

Ikki fayl tarkibini ketma-ket chiqaring:

printf 'alpha\n' > ~/lab/viewing-text/a.txt
printf 'beta\n' > ~/lab/viewing-text/b.txt
cat ~/lab/viewing-text/a.txt ~/lab/viewing-text/b.txt

Natija:

alpha
beta

cat fayllar orasiga alohida ajratuvchi belgi qo'shmaydi.

Agar birinchi fayl yangi qator belgisi bilan tugamasa, ikkinchi faylning birinchi qatori terminalda shu qatorga qo'shilib ketadi.

Foydali ko'rsatish parametrlari:

cat -n ~/lab/viewing-text/a.txt
cat -A ~/lab/viewing-text/a.txt

-n natijadagi qatorlarni raqamlaydi.

GNU -A tabulyatsiya belgilarini, qator oxirlarini va ayrim ekranda ko'rinmaydigan belgilarni ko'rinadigan qiladi. Bu bo'sh joylar yoki qator oxiridagi yangi qator belgisi muhim bo'lganida foydalidir.

less: katta fayllarni sahifalab ko'rish

Fayl bir ekran hajmidan katta bo'lsa yoki matn ichida qidirish kerak bo'lsa, less dan foydalaning:

less ~/lab/viewing-text/app.log

less ichida ko'p ishlatiladigan tugmalar:

  • Space yoki f — bir ekran oldinga o'tish.
  • b — bir ekran orqaga qaytish.
  • g — fayl boshiga o'tish.
  • G — fayl oxiriga o'tish.
  • /request_id=req-020 — oldinga qarab qidirish.
  • n va N — keyingi va oldingi mos natijaga o'tish.
  • q — dasturdan chiqish.

Qator raqamlari va uzun qatorlar bilan ishlash:

less -N -S ~/lab/viewing-text/app.log

-N qator raqamlarini ko'rsatadi.

-S uzun qatorlarni keyingi qatorga o'ramaydi. Ularning ekranga sig'magan qismini vaqtincha yashiradi. Qatorning qolgan qismini ko'rish uchun gorizontal harakatlanish tugmalaridan foydalaning.

Bu parametrlar faylning o'zini o'zgartirmaydi.

more ham sahifalab ko'rish dasturi bo'lib, favqulodda tiklash muhitlarida mavjud bo'lishi mumkin. Odatda less qulayroq, chunki u orqaga harakatlanish va kengroq qidirish imkoniyatlarini beradi.

head: fayl boshini ko'rish

Standart holatda head faylning dastlabki 10 qatorini chiqaradi:

head ~/lab/viewing-text/app.log

Aniq beshta qatorni chiqarish:

head -n 5 ~/lab/viewing-text/app.log

Natija namunasi:

2026-07-29T06:00:00Z level=INFO request_id=req-001 message="test request"
2026-07-29T06:00:00Z level=INFO request_id=req-002 message="test request"
2026-07-29T06:00:00Z level=INFO request_id=req-003 message="test request"
2026-07-29T06:00:00Z level=INFO request_id=req-004 message="test request"
2026-07-29T06:00:00Z level=INFO request_id=req-005 message="test request"

Sizdagi vaqt belgisi boshqacha bo'ladi. Muhim jihat — dastlabki beshta yozuv ko'rsatilganidir.

Fayl boshidan baytlar bo'yicha namuna olish:

head -c 80 ~/lab/viewing-text/app.log
printf '\n'

-c belgilarni emas, baytlarni sanaydi. Shu sababli u UTF-8 belgining o'rtasidan kesib yuborishi mumkin.

Oddiy qatorlarga asoslangan log fayllari uchun -c o'rniga -n dan foydalanish ma’qul.

tail: fayl oxirini ko'rish va o'sishini kuzatish

Standart holatda tail faylning oxirgi 10 qatorini chiqaradi:

tail ~/lab/viewing-text/app.log
tail -n 3 ~/lab/viewing-text/app.log

+N shakli yordamida ma’lum qatordan boshlab chiqarish mumkin:

tail -n +26 ~/lab/viewing-text/app.log

30 qatorli faylda bu buyruq 26-qatordan 30-qatorgacha bo'lgan qismini chiqaradi.

+ belgisi ma’noni o'zgartiradi:

  • tail -n 5 — oxirgi 5 qator;
  • tail -n +5 — 5-qatordan fayl oxirigacha.

Log faylini real vaqt rejimida kuzatish

Birinchi terminalda quyidagi buyruqni ishga tushiring:

tail -f ~/lab/viewing-text/app.log

Ikkinchi terminalda faylga yangi qator qo'shing:

printf '%s level=ERROR request_id=req-031 message="database timeout"\n' \
    "$(date -u +%FT%TZ)" >> ~/lab/viewing-text/app.log

Birinchi terminalda yangi qator darhol ko'rinadi.

tail -f ni to'xtatish uchun Ctrl+C tugmalarini bosing.

GNU tail -f standart holatda ochilgan fayl deskriptori orqali faylni kuzatadi.

Agar log fayli nomi o'zgartirilib rotatsiya qilinsa, jarayon eski faylni kuzatishda davom etishi mumkin.

Fayl nomi bo'yicha kuzatish uchun:

tail -F ~/lab/viewing-text/app.log

GNU Coreutils dasturida -F quyidagiga teng:

--follow=name --retry

Bu parametr ko'plab log rotatsiyasi tizimlari uchun foydalidir.

Agar dastur oddiy faylga emas, systemd-journald xizmatiga log yozsa, tail o'rniga quyidagidan foydalaning:

journalctl -f -u <service>

wc yordamida sanash

wc ~/lab/viewing-text/app.log
wc -l ~/lab/viewing-text/app.log
wc -c ~/lab/viewing-text/app.log

Parametrsiz wc qatorlar, so'zlar va baytlar sonini chiqaradi.

wc -l ekranda ko'rinadigan qatorlar sonini emas, yangi qator belgilarining sonini hisoblaydi.

Oxirida yangi qator belgisi bo'lmagan faylga misol:

printf 'first\nsecond' > ~/lab/viewing-text/no-final-newline.txt
wc -l ~/lab/viewing-text/no-final-newline.txt

Natija:

1 /home/<username>/lab/viewing-text/no-final-newline.txt

Faylda ko'rinish jihatidan ikkita qator bor, lekin faqat bitta yangi qator belgisi mavjud.

Standart chiqish va standart xato oqimi

Agar cat faylni ocha olmasa, xatolik standart xato oqimiga chiqariladi:

cat ~/lab/viewing-text/missing.txt
echo "status=$?"

Odatdagi natija:

cat: /home/<username>/lab/viewing-text/missing.txt: No such file or directory
status=1

Standart chiqishni boshqa faylga yo'naltirish standart xato oqimini yashirmaydi:

cat ~/lab/viewing-text/missing.txt > ~/lab/viewing-text/output.txt

Xatolik terminalda ko'rinishda davom etadi.

Bash cat dasturini ishga tushirishdan oldin qayta yo'naltirishni tayyorlaydi. Shu sababli output.txt fayli yaratilishi yoki mavjud bo'lsa tarkibi tozalanishi mumkin.

Maqsadingiz faqat faylni ko'rish bo'lsa, keraksiz > qayta yo'naltirishidan foydalanmang.

Pipe va qayta yo'naltirishlar keyingi matn va oqimlar bo'limida tushuntiriladi.

Faylni o'qish huquqi bo'lmasa

Production muhitidagi ko'plab log fayllarini barcha foydalanuvchilar o'qiy olmaydi. Ayniqsa, alohida tizim foydalanuvchisi nomidan ishlaydigan servislar /var/log ichiga yozgan fayllar shunday bo'lishi mumkin:

tail -n 20 /var/log/auth.log
tail: cannot open '/var/log/auth.log' for reading: Permission denied

Bu tail dasturidagi xato emas. Bu ruxsat tizimining to'g'ri ishlayotganini bildiradi.

Muammoni quyidagi tartibda tekshiring:

ls -l /var/log/auth.log
id
groups

Fayl egasi va guruhini o'z foydalanuvchingiz hamda a’zo bo'lgan guruhlaringiz bilan taqqoslang.

Ko'p uchraydigan uchta yechim, tavsiya etilish tartibida:

  • Agar foydalanuvchi hisobingiz faylni o'qish huquqiga ega guruhga qo'shilishi mumkin bo'lsa, har safar root huquqiga o'tish o'rniga shu guruhga qo'shilish to'g'riroq. Debian va Ubuntu tizimlarida ko'plab tizim loglari uchun bu ko'pincha adm guruhidir:

    sudo usermod -aG adm <username>
    

    Guruhdagi o'zgarish kuchga kirishi uchun yangi login sessiyasini boshlash kerak.

  • Agar kerakli huquqni beradigan guruh bo'lmasa va faylni faqat bir martalik o'qish yetarli bo'lsa, haqiqiy muammoni tekshirayotgan administrator uchun quyidagidan foydalanish mumkin:

    sudo tail -n 20 /var/log/auth.log
    
  • Agar bir nechta aniq foydalanuvchiga doimiy o'qish huquqi kerak bo'lsa, keng guruh yoki doimiy root huquqi o'rniga log fayliga setfacl orqali aniq ruxsat berish mumkin. Lekin log rotatsiyasi vaqtida servis ruxsatlarni qayta o'rnatishi mumkin. Bu mavzu ruxsatlar va ACL haqidagi maqolalarda ko'rib chiqiladi.

Log faylida Permission denied xatosini ko'rib, uning ruxsat rejimini chmod yordamida kengaytirmang.

Bu tizimdagi barcha foydalanuvchilar uchun kirishni ochishi mumkin. Ularning ayrimlari autentifikatsiya yoki dastur loglarini umuman ko'rmasligi kerak.

Bundan tashqari, log rotatsiyasi vositasi keyingi aylantirishda siz o'zgartirgan ruxsatlarni yana avvalgi holatga qaytarishi mumkin.

Amaliy vaziyat: eng so'nggi xato kontekstini topish

Muammo: servis katta app.log fayliga yozdi va siz faylni tahrirlamasdan eng so'nggi xatoni topishingiz kerak.

Faylni tekshiring:

log="$HOME/lab/viewing-text/app.log"
file "$log"
stat -c 'size=%s modified=%y' "$log"
test -r "$log" || echo "not readable"

Laboratoriya uchun bitta xato yozuvini qo'shing:

printf '%s level=ERROR request_id=req-032 message="cache unavailable"\n' \
    "$(date -u +%FT%TZ)" >> "$log"

Fayl oxirini ko'ring:

tail -n 20 "$log" | less

To'g'ridan-to'g'ri qidiring:

grep -n 'level=ERROR' "$log" | tail -n 5

Natija namunasi:

31:2026-07-29T06:00:00Z level=ERROR request_id=req-031 message="database timeout"
32:2026-07-29T06:01:00Z level=ERROR request_id=req-032 message="cache unavailable"

Xulosa:

  • tail vaqt oralig'ini toraytiradi;
  • less atrofdagi kontekstni ko'rishga yordam beradi;
  • grep -n aniq mos natijalar uchun qator raqamlarini ko'rsatadi.

Keng tarqalgan xatolar

  • Juda katta fayllar uchun cat ishlatib, terminal tarixini keraksiz ma’lumot bilan to'ldirish.
  • tail -f qo'lda to'xtatilmaguncha ishlashda davom etishini unutish.
  • tail -f har qanday log rotatsiyasi usulida fayl nomini kuzatishda davom etadi deb hisoblash.
  • UTF-8 matnda head -c ishlatib, belgini o'rtasidan kesib yuborish.
  • wc -l natijasini yangi qator belgilarining soni emas, ekranda ko'rinadigan qatorlar soni deb tushunish.
  • Faylni faqat ko'rmoqchi bo'lib, natijani qayta yo'naltirish va tasodifan fayl tarkibini tozalab yuborish.

Mashqlar

  1. ~/lab/viewing-text katalogida 50 qatorli fayl yarating va faqat dastlabki yetti qatorini ko'rsating.
  2. Faqat oxirgi beshta qatorni ko'rsating. Keyin tail -n +46 yordamida 46-qatordan fayl oxirigacha bo'lgan qismini chiqaring.
  3. Faylni less -N -S bilan oching, request ID bo'yicha qidiring va hech narsani o'zgartirmasdan dasturdan chiqing.
  4. Oxirida yangi qator belgisi bo'lmagan fayl yarating va nima uchun wc -l kutilganidan bitta kam qator ko'rsatishini tushuntiring.

Tekshirish mezoni: fayl hajmi, kerakli ma’lumot faylning qayerida joylashgani va faylga yangi ma’lumot yozilib borayotgan-bormayotganiga qarab cat, less, head va tail orasidan to'g'ri vositani tanlay olishingiz kerak.

Manbalar

  • GNU Coreutils qo'llanmasi: https://www.gnu.org/software/coreutils/manual/coreutils.html
  • cat buyrug'i: https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html
  • head buyrug'i: https://www.gnu.org/software/coreutils/manual/html_node/head-invocation.html
  • tail buyrug'i: https://www.gnu.org/software/coreutils/manual/html_node/tail-invocation.html
  • wc buyrug'i: https://www.gnu.org/software/coreutils/manual/html_node/wc-invocation.html
  • less qo'llanma sahifasi: https://man7.org/linux/man-pages/man1/less.1.html