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
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
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):
iโ yozish rejimiga o'tish (insert);- Esc โ yozish rejimidan chiqish (buyruq rejimiga);
:wโ saqlash (write);:qโ chiqish (quit);:wqโ saqlab chiqish;:q!โ o'zgarishlarni saqlamay majburan chiqish.
: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:
-iโ katta-kichik harfni farqlamaydi;-rโ papka ichidagi barcha fayllarni rekursiv qidiradi;-nโ mos qator raqamini ham ko'rsatadi;-vโ teskarisi: matn bo'lmagan qatorlarni chiqaradi;-cโ nechta qator mos kelganini sanaydi.
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
touchโ bo'sh fayl yaratish;cpโ nusxalash (papka uchun-r);mvโ ko'chirish yoki qayta nomlash;rmโ o'chirish (Savatga tushmaydi!);rm -rpapka uchun,rm -itasdiq so'rab;catโ kichik fayl,lessโ katta fayl;head/tailโ boshi/oxiri,tail -fโ jonli kuzatish;nanoโ oson muharrir,vimโ kuchli (chiqish::q!);findโ nom bo'yicha fayl qidirish;grep -rnโ matn ichidan qidirish;wc -lโ qatorlarni sanash;>faylga yozadi (ustiga),>>qo'shadi,|buyruqlarni zanjirga ulaydi.