4. Matnlar bilan ishlash asoslari
Unix dunyosida hamma narsa matn: konfiguratsiya fayllari, log'lar, kod, hatto tarmoq trafigi ham. Shuning uchun matnni samarali o'qish, qidirish va o'lchash — har bir muhandisning asosiy ko'nikmasi.
Bu bobda eng ko'p ishlatiladigan olti buyruqni o'rganamiz: cat, less, head, tail, grep, wc.
4.1. cat — fayl mazmunini chiqarish
cat (concatenate) — fayl mazmunini stdoutga chiqaradi.
cat hello.txt # mazmun
cat -n hello.txt # qator raqamlari bilan
cat -A hello.txt # ko'rinmas belgilarni ko'rsatadi ($ end-of-line)
cat -s file.txt # ketma-ket bo'sh qatorlarni 1 ga siqadi
# Bir nechta fayllarni birlashtirib chiqarish
cat header.txt body.txt footer.txt
# Faylga birlashtirib yozish
cat part1.txt part2.txt > full.txtcat antipattern
Boshlovchilar ko'p qiladigan xato:
cat file.txt | grep "foo" # ❌ keraksiz cat
grep "foo" file.txt # ✅ to'g'riBu "UUOC" — Useless Use of Cat deb ataladi.
4.2. less — interaktiv ko'rish
Katta fayllarni cat qilsangiz, ekrandan o'tib ketadi. less — sahifama-sahifa o'qish uchun:
less /var/log/system.log
less -N file.txt # qator raqamlari bilan
less +F access.log # follow rejimi (yangi qatorlarni real time)Ichida tezkor buyruqlar:
| Tugma | Vazifasi |
|---|---|
↑ ↓ yoki j k | Yuqori / Past |
Space / b | Sahifa pastga / yuqoriga |
g / G | Boshiga / Oxiriga |
/so'z | Qidirish |
n / N | Keyingi / Oldingi natija |
q | Chiqish |
h | Yordam |
less vs more
more eski buyruq — faqat pastga harakatlanadi. less — kuchliroq, ikki tomonga. "less is more" degan iborani aynan shu yerdan eshitgan bo'lsangiz kerak 😉
4.3. head — boshini ko'rish
head file.txt # birinchi 10 qator (default)
head -n 5 file.txt # birinchi 5 qator
head -5 file.txt # qisqartma shakli
head -c 100 file.txt # birinchi 100 bayt
head *.log # bir nechta fayl uchun4.4. tail — oxirini ko'rish
tail file.txt # oxirgi 10 qator
tail -n 20 file.txt # oxirgi 20 qator
tail -f /var/log/nginx.log # FOLLOW — yangi qatorlar real time
tail -F file.txt # follow + retry (fayl o'chirilsa ham)
tail -n +5 file.txt # 5-qatordan oxirigachatail -f server log monitoringi uchun ideal
Server live-debug qilayotganda eng ko'p ishlatiladigan buyruq:
tail -f /var/log/app.log | grep ERRORhead + tail = O'rta qism
# 50-60 qatorlarni olish
sed -n '50,60p' file.txt
# yoki
head -60 file.txt | tail -114.5. wc — qator, so'z, belgi sanash
wc (word count):
wc file.txt
# 42 210 1573 file.txt
# qatorlar so'zlar baytlar nomi
wc -l file.txt # faqat qatorlar
wc -w file.txt # faqat so'zlar
wc -c file.txt # faqat baytlar
wc -m file.txt # belgilar (multibyte hisobga olib)Real misollar:
ls | wc -l # katalogdagi fayllar soni
cat /etc/passwd | wc -l # tizim foydalanuvchilari soni
grep -c "ERROR" app.log # xatoliklar soni (-c)
find . -name "*.js" | wc -l # loyihadagi .js fayllar soni4.6. grep — matn qidirish (qudrat!)
grep — Global Regular Expression Print. Linux dunyosining eng kuchli matn-qidiruv vositasi.
grep "kalit" file.txt # qator ichida "kalit" bo'lgan qatorlar
grep -i "error" log.txt # case-insensitive (kichik/katta farqsiz)
grep -n "TODO" code.py # qator raqamlari bilan
grep -c "warning" log.txt # nechta marta uchragani (faqat son)
grep -v "INFO" log.txt # INFO BO'LMAGAN qatorlar (invert)
grep -r "API_KEY" . # rekursiv barcha fayllarda
grep -l "import" *.py # FAYL NOMLARI ro'yxati (kontentsiz)
grep -w "cat" file.txt # FAQAT to'liq so'z (cathedral'ni topmaydi)
grep -A 3 "ERROR" log.txt # ERROR'dan keyin 3 qator
grep -B 2 "ERROR" log.txt # ERROR'dan oldin 2 qator
grep -C 2 "ERROR" log.txt # ERROR atrofidan 2 qatorRegular Expression bilan
grep "^Salom" file.txt # SALOM bilan boshlanadigan qatorlar
grep "tugadi$" file.txt # tugadi bilan tugaydigan qatorlar
grep "[0-9]\{3\}" log.txt # 3 ta raqamli pattern
grep -E "(error|fail)" log # extended regex: error YOKI failegrep va fgrep
grep -E=egrep— kengaytirilgan regexgrep -F=fgrep— qattiq matn (regex'siz, tezroq)
Real misollar
# Apache log'da 404 xatoliklar
grep " 404 " /var/log/apache/access.log
# Kodda TODO va FIXME
grep -rn -E "(TODO|FIXME|XXX)" src/
# IP manzillarni topish
grep -E -o "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log
# Email addresslarni topish
grep -E -o "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" contacts.txt4.7. Qo'shimcha foydali buyruqlar
sort — tartiblash
sort file.txt # alifbo bo'yicha
sort -r file.txt # teskari
sort -n numbers.txt # son bo'yicha
sort -u file.txt # unique (takrorlarni olib tashlaydi)
sort -k 2 file.txt # 2-ustun bo'yicha
sort -t',' -k 3 csv.txt # CSV'da 3-ustun bo'yichauniq — takrorlarni boshqarish
sort file.txt | uniq # takrorlanmaganlar
sort file.txt | uniq -c # har biri necha marta uchragani
sort file.txt | uniq -d # FAQAT takrorlanganlaruniq faqat ketma-ket dublikatlarni topadi
Shuning uchun har doim sort bilan kombinatsiyada ishlatiladi.
cut — ustunlarni ajratish
cut -d':' -f1 /etc/passwd # birinchi ustun (foydalanuvchi nomi)
cut -d',' -f1,3 data.csv # 1 va 3-ustunlar
cut -c1-10 file.txt # har qatorning 1-10 belgilaritr — belgilarni o'zgartirish
echo "salom" | tr 'a-z' 'A-Z' # SALOM
echo "a,b,c,d" | tr ',' '\n' # vergulni newline'ga
cat file.txt | tr -d ' ' # bo'shliqlarni o'chirish
cat file.txt | tr -s ' ' # ketma-ket bo'shliqlarni 1 ga siqish4.8. Real-world misollar
Top 10 IP — eng ko'p so'rov yuborgan
awk '{print $1}' access.log \
| sort \
| uniq -c \
| sort -rn \
| head -10Disk hajmini eng ko'p egallagan kataloglar
du -h /var | sort -rh | head -20Log fayldagi xatolik statistikasi
grep -E "ERROR|WARN|FATAL" app.log \
| awk '{print $4}' \
| sort \
| uniq -c \
| sort -rnLoyihada satrlar sonini hisoblash (kodlar)
find . -name "*.py" -exec wc -l {} + | sort -nFoydalanuvchilar ro'yxati va shell'lari
cut -d':' -f1,7 /etc/passwd4.9. Tez-tez uchraydigan xatolar
Eslatma
cat | grep— keraksiz.grep "x" fileto'g'ri.grepregex'da maxsus belgilar..*?belgilarini escape qiling:grep "\.com".sort | uniqtartibi muhim.uniqo'zi sort qilmaydi.tail -flog rotation'ni sezmaydi.tail -F(katta F) ishlating.- Katta fayllarni
cat'lamang.lessishlating.
4.10. Mashqlar
/etc/passwdfaylida nechta foydalanuvchi/bin/bashishlatishini toping.- Joriy katalogdagi eng katta 5 ta faylni hajmi bo'yicha tartiblang.
dmesgnatijasidan barchaerrorso'zli qatorlarni (case-insensitive) chiqaring va sanang.~/.bash_historyfaylidagi eng ko'p ishlatgan 10 ta buyruqni toping.ls -lanatijasidan faqat kataloglarni (dbilan boshlanadigan) chiqaruvchi pipeline yozing.
4.11. Xulosa
| Buyruq | Vazifasi |
|---|---|
cat | Faylni to'liq chiqarish, birlashtirish |
less | Interaktiv ko'rish (katta fayllar uchun) |
head | Birinchi N qator |
tail | Oxirgi N qator, -f bilan follow |
grep | Matn qidirish, regex bilan |
wc | Qator, so'z, belgi sanash |
sort | Tartiblash |
uniq | Takrorlarni boshqarish |
cut | Ustun ajratish |
tr | Belgilarni almashtirish/o'chirish |
Endi siz har qanday matnli ma'lumotni o'qib, qidirib, hisoblay olasiz. Bu — DevOps va sistema administratorining kundalik hayotidagi 80% ishi.
Keyingi bobda biz birinchi Bash skriptimizni yozamiz!
Keyingi sahifa: 5. Birinchi Bash skript →