Linux va terminal

Fayllar bilan ishlash

Endi papkalar ichida navigatsiya qilishni bilamiz. Bu darsda fayllarning o'zi bilan ishlashni o'rganamiz: yaratish, nusxalash, ko'chirish, o'chirish, mazmunini o'qish, qidirish va โ€” eng qizig'i โ€” buyruqlarni bir-biriga ulash (oqimlarni yo'naltirish).

touch โ€” bo'sh fayl yaratish

touch buyrug'i bo'sh fayl yaratadi (yoki mavjud faylning vaqt belgisini yangilaydi):

touch hujjat.txt

Bir necha faylni birdaniga yaratish mumkin:

touch a.txt b.txt c.txt
touch asosan test uchun tez bo'sh fayl yaratishga ishlatiladi. Ichiga matn yozadigan fayl kerak bo'lsa, matn muharriri (nano) yoki oqim yo'naltirish (>) qulayroq โ€” ular haqida quyida gaplashamiz.

cp โ€” fayl nusxalash

cp (copy) fayl nusxasini yaratadi. Sintaksis: cp manba maqsad:

cp hujjat.txt nusxa.txt

Faylni boshqa papkaga nusxalash:

cp hujjat.txt ~/zaxira/

Papkani (ichidagi hamma narsa bilan) nusxalash uchun -r (recursive) flagi kerak:

cp -r loyiha loyiha-zaxira

Bu "loyiha" papkasini butun mazmuni bilan "loyiha-zaxira" nomi ostida nusxalaydi.

mv โ€” ko'chirish va qayta nomlash

mv (move) faylni boshqa joyga ko'chiradi. Qiziq jihati: agar manba va maqsad bir papkada bo'lsa, bu aslida qayta nomlashga aylanadi:

mv eski-nom.txt yangi-nom.txt    # qayta nomlash
mv hujjat.txt ~/arxiv/            # ko'chirish

cp dan farqli, mv papkalar uchun -r talab qilmaydi โ€” u har qanday narsani (fayl yoki papka) bir joydan ikkinchisiga bemalol ko'chiradi:

mv eski-papka yangi-papka
Nusxa qoldirmasdan faqat nomini o'zgartirmoqchi bo'lsangiz โ€” mv ishlating (cp emas). cp ikkita nusxa qoldiradi, mv esa bittani ko'chiradi/nomlaydi.

rm โ€” fayl o'chirish (ehtiyotkorlik bilan!)

rm (remove) faylni o'chiradi:

rm keraksiz.txt

Papkani ichidagi hamma narsa bilan o'chirish uchun -r (recursive):

rm -r eski-loyiha

Yozishdan himoyalangan fayllar uchun so'roqsiz majburiy o'chirish -f (force) bilan bo'ladi:

rm -rf vaqtinchalik
rm bilan o'chirilgan fayl Savatga tushmaydi โ€” u butunlay yo'qoladi va qaytarib bo'lmaydi! Ayniqsa rm -rf / kabi buyruq butun tizimni o'chirib yuborishi mumkin. Har doim yo'lni ikki-uch marta tekshiring. Xavfsizlik uchun rm -i (interaktiv) har bir fayldan oldin tasdiq so'raydi.
rm -i muhim.txt    # 'o'chirilsinmi?' deb so'raydi

cat, less โ€” fayl mazmunini o'qish

cat (concatenate) fayl mazmunini to'liq ekranga chiqaradi:

cat hujjat.txt

Kichik fayllar uchun qulay. Lekin fayl katta bo'lsa, hammasi ekrandan o'tib ketadi. Bunday holatda less ishlatiladi โ€” u faylni sahifalab, aylantirib ko'rish imkonini beradi:

less katta-log.txt

less ichida boshqaruv: strelkalar bilan aylantirasiz, / bilan qidirasiz, q tugmasi bilan chiqasiz. Bu โ€” katta fayllarni o'qishning eng qulay usuli.

head, tail โ€” boshi va oxiri

Katta faylning butunini emas, faqat boshini yoki oxirini ko'rish kerak bo'lganda:

head hujjat.txt        # birinchi 10 qator
tail hujjat.txt        # oxirgi 10 qator

Qatorlar sonini -n bilan belgilash mumkin:

head -n 5 hujjat.txt   # birinchi 5 qator
tail -n 20 hujjat.txt  # oxirgi 20 qator

tail ning eng foydali flagi โ€” -f (follow). U faylni "jonli" kuzatadi: fayl oxiriga yangi qatorlar qo'shilsa, ular darhol ekranda paydo bo'ladi. Bu server log'larini real vaqtda kuzatishda bebaho:

tail -f /var/log/nginx/access.log
Web-server yoki dasturingiz log'ini tail -f bilan kuzatib turing โ€” har bir so'rov yoki xato darhol ko'rinadi. To'xtatish uchun Ctrl+C bosing.

nano va vim โ€” matn muharrirlari

Terminalda faylni tahrirlash uchun matn muharriri kerak. Ikki mashhur variant bor:

nano โ€” yangi boshlovchi uchun eng oson. Ochish:

nano hujjat.txt

Ichida oddiy yozasiz. Pastda yordamchi tugmalar ko'rinadi (^ belgisi Ctrlni bildiradi): saqlash โ€” Ctrl+O, chiqish โ€” Ctrl+X.

vim โ€” juda kuchli, lekin o'rganish qiyinroq muharrir. Ochish:

vim hujjat.txt

vimning eng muhim tugmalari (yangi boshlovchi uchun minimum):

Ko'plab yangi foydalanuvchilar vimdan "chiqolmay" qoladi โ€” bu mashhur hazil. Agar qamalib qolsangiz: Esc bosing, keyin :q! yozib Enter bosing. Boshda esa nanodan foydalaning โ€” u ancha oson.

find โ€” fayllarni qidirish

find berilgan papka ichidan (rekursiv) fayllarni qidiradi. Sintaksis: find qayerda -shart:

find . -name hujjat.txt

Bu joriy papkadan (.) boshlab "hujjat.txt" nomli faylni qidiradi. Namunalar bilan qidirish uchun tirnoq ichida * ishlatiladi:

find . -name '*.js'          # barcha .js fayllar
find /home -name '*.log'     # /home ichidagi barcha log fayllar
find . -type d -name src     # 'src' nomli faqat papkalar

Foydali shartlar: -type f โ€” faqat fayllar, -type d โ€” faqat papkalar, -size +10M โ€” 10 megabaytdan katta fayllar.

grep โ€” matn ichidan qidirish

grep fayl(lar) ichidan berilgan matnni o'z ichiga olgan qatorlarni topadi. Bu โ€” dasturchining eng ko'p ishlatadigan vositalaridan biri:

grep 'xato' log.txt

Bu "xato" so'zi bor barcha qatorlarni chiqaradi. Muhim flaglar:

grep -rn 'TODO' .        # loyihadagi barcha TODO izohlarni topish
grep -i 'error' log.txt  # 'error', 'Error', 'ERROR' โ€” hammasini
grep -rn โ€” kod ichidan biror funksiya yoki o'zgaruvchi qayerda ishlatilganini topishning eng tez usuli. Masalan, grep -rn 'getUserData' src/ shu funksiya nomi uchraydigan barcha joyni qator raqami bilan ko'rsatadi.

wc โ€” sanash

wc (word count) fayldagi qatorlar, so'zlar va belgilar sonini sanaydi:

wc hujjat.txt

Natija: qatorlar so'zlar belgilar fayl-nomi tartibida chiqadi. Alohida ko'rsatkichlar:

wc -l hujjat.txt    # faqat qatorlar soni
wc -w hujjat.txt    # faqat so'zlar soni
wc -c hujjat.txt    # faqat belgilar (baytlar) soni

Oqimlarni yo'naltirish: > >> |

Bu โ€” terminalning eng kuchli imkoniyati. Odatda buyruq natijasi ekranga chiqadi. Lekin uni faylga yozish yoki boshqa buyruqqa uzatish mumkin.

> โ€” natijani faylga yozadi (fayl ustiga yozadi, eski mazmun o'chadi):

ls -l > royxat.txt        # ls natijasini faylga saqlash
echo 'Salom' > salom.txt  # matnni faylga yozish

>> โ€” natijani fayl oxiriga qo'shadi (eski mazmun saqlanadi):

echo 'Yangi qator' >> royxat.txt

| (quvur, pipe) โ€” bir buyruq natijasini ikkinchi buyruqning kirishiga uzatadi. Bu โ€” buyruqlarni zanjirga ulash:

cat log.txt | grep 'xato'          # faylni o'qib, ichidan 'xato'ni topish
ls -l | wc -l                     # papkadagi fayllar sonini sanash
cat log.txt | grep 'xato' | wc -l # 'xato' bor qatorlar sonini sanash

Oxirgi misolni o'qib chiqaylik: cat faylni o'qiydi, natijani grepga uzatadi (u faqat "xato"li qatorlarni qoldiradi), keyin wc -l ularni sanaydi. Uch buyruq bitta zanjirda ishladi.

> va >> ni aralashtirib yubormang! > mavjud faylni butunlay o'chirib, ustiga yozadi. Muhim faylga > yozib yuborsangiz, uning eski mazmuni yo'qoladi. Qo'shimcha yozish uchun doim >> ishlating.

Xulosa