IlmHamroh
JavaScript Full-stack/1-qism. Kompyuter, fayllar va terminal21/40-dars13 daqiqa
Mundarija (34)

Fayl va papkalar bilan ishlash

Qisqacha: Terminalda papka mkdir (ichma-ich — mkdir -p), bo'sh fayl touch bilan yaratiladi. cp nusxalaydi (papkani — cp -r), mv ko'chiradi va nomini o'zgartiradi, rm o'chiradi. Faylni ko'rish: cat, less, head, tail. * va ? belgilari bir nechta faylni birdan tanlaydi. Eng muhim qoida: rm bilan o'chirilgan fayl savatga tushmaydi — u butunlay yo'qoladi.

Bu darsda

  • Bitta buyruq bilan ichma-ich papkalar va bir nechta fayl yaratasiz.
  • Fayl ichini cat, less, head, tail bilan ko'rasiz, tail -f bilan jonli kuzatasiz.
  • Fayl va papkalarni nusxalaysiz, ko'chirasiz, nomini o'zgartirasiz.
  • rm ni xavfsiz ishlatish qoidalarini bilasiz va nega rm -rf dan qo'rqish kerakligini tushunasiz.
  • * va ? bilan bir guruh fayl ustida ishlaysiz va natijani oldindan tekshirasiz.

Oldin bilishingiz kerak: Terminalda harakatlanish, Buyruq anatomiyasi va yordam olish, Fayl va papka nomlash qoidalari.

1. Nega bu kerak?

Malika yangi sayt boshlayapti. Unga shunday tuzilma kerak: sayt papkasi, ichida css, js, rasmlar papkalari va uch fayl. Explorer'da bu o'nga yaqin sichqoncha harakati: o'ng tugma, "Yangi papka", nom yozish, ichiga kirish, yana takrorlash.

Terminalda — ikki qator. Yana muhimi: serverda Explorer yo'q. U yerda fayllar bilan faqat shu buyruqlar orqali ishlaysiz.

Xavfsiz mashq maydoni. Bu darsdagi buyruqlarni sinash uchun alohida papka oching va faqat uning ichida ishlang. Keyingi bo'limda uni yaratamiz.

2. Yaratish: mkdir va touch

2.1 Papka: mkdir

mkdir — make directory, "papka yarat". Uy papkangizga o'tib, mashq papkasini yarating:

bash
cd
mkdir mashq
cd mashq

Bir buyruqda bir nechta papka ham bo'ladi — har bir nom alohida argument:

bash
mkdir css js rasmlar

2.2 Ichma-ich papkalar: mkdir -p

sayt/css ni yaratmoqchisiz, lekin sayt hali yo'q:

bash
mkdir sayt/css

Git Bash'da ishga tushirganimizda:

text
mkdir: cannot create directory 'sayt/css': No such file or directory

G'alati: biz yaratmoqchimiz, u esa "bunday papka yo'q" deyapti. Aslida u ota papka — sayt yo'qligidan shikoyat qilyapti: css ni qo'yadigan joy topilmadi.

-p (parents — "otalari bilan") flagi yo'lidagi barcha yetishmayotgan papkalarni ham yaratadi:

bash
mkdir -p sayt/css

-p ning ikkinchi qulayligi: papka allaqachon bo'lsa, xato bermaydi. -p siz mavjud papkani qayta yaratmoqchi bo'lsangiz — mkdir: cannot create directory 'sayt': File exists ("fayl mavjud").

Maslahat: Bash'da jingalak qavs bilan bir nechta papkani qisqa yozish mumkin: mkdir -p sayt/{css,js,rasmlar}. Shell buni sayt/css sayt/js sayt/rasmlar ga aylantiradi. Vergul atrofida bo'sh joy qo'ymang. Biz Git Bash'da sinab ko'rdik — uchala papka paydo bo'ldi.

2.3 Bo'sh fayl: touch

bash
touch sayt/index.html sayt/css/style.css sayt/js/app.js

Uchala fayl bo'sh holda paydo bo'ladi. touch so'zma-so'z "tegib o'tish" degani: agar fayl allaqachon bo'lsa, u ichiga tegmaydi, faqat "oxirgi o'zgartirilgan vaqt"ni hozirgi vaqtga yangilaydi. Biz tekshirdik: fayl matni o'zgarmadi, ls -l dagi soat yangilandi.

Endi Malikaning tuzilmasi tayyor:

flowchart TD
  M["mashq"] --> S["sayt"]
  S --> I["index.html"]
  S --> C["css"]
  S --> J["js"]
  S --> R["rasmlar"]
  C --> ST["style.css"]
  J --> A["app.js"]

Tekshirish uchun ls -R sayt — -R ichki papkalarni ham ko'rsatadi (Buyruq anatomiyasi darsidagi flag).

Tekshirib ko'ring: mkdir -p hisobot/2026/sentabr buyrug'i nechta papka yaratadi (hech biri oldin bo'lmagan bo'lsa)?

Javob

Uchta: hisobot, uning ichida 2026, uning ichida sentabr. -p yo'ldagi barcha yetishmayotgan papkalarni yaratadi. -p siz esa buyruq xato berardi, chunki hisobot yo'q.

3. Fayl ichini ko'rish

Faylga matn yozish uchun odatda VS Code ishlatiladi. Hozir esa tayyor fayl bilan ishlaymiz. menyu.txt faylida choyxona menyusi bor deylik:

text
Osh - 35000
Lag'mon - 32000
Manti - 28000
Somsa - 8000
Choy - 5000

3.1 cat — hammasini chiqarish

bash
cat menyu.txt

Butun matn ekranga chiqadi. Qisqa fayllar uchun qulay. Nomi "concatenate" (ulash) so'zidan: cat a.txt b.txt ikki faylni ketma-ket chiqaradi.

3.2 less — sahifalab o'qish

Minglab qatorli faylni cat qilsangiz, matn ekrandan "oqib" o'tib ketadi. less faylni sahifalab ko'rsatadi:

bash
less katta-fayl.txt

Boshqaruv man bilan bir xil: Space — keyingi sahifa, b — oldingi, /so'z — qidirish, q — chiqish. Aslida man qo'llanmani aynan less orqali ko'rsatadi.

3.3 head va tail — boshi va oxiri

bash
head -n 2 menyu.txt
text
Osh - 35000
Lag'mon - 32000
bash
tail -n 2 menyu.txt
text
Somsa - 8000
Choy - 5000

-n bo'lmasa, ikkalasi ham 10 qator ko'rsatadi.

3.4 tail -f — jonli kuzatish

Serverdagi dastur ishlash davomida log fayliga yozib boradi. Log — dastur nima qilganini vaqti bilan yozib boradigan "kundalik". -f (follow — "ergash") bilan tail faylning oxirini ko'rsatadi va yopilmaydi: yangi qator qo'shilishi bilan uni ham chiqaradi.

bash
tail -f server.log

Kuzatishni to'xtatish — Ctrl + C (Terminal darsida ko'rgan tugma).

Diqqat: cat ni rasm yoki arxiv kabi matn bo'lmagan faylga ishlatmang. Ekran tushunarsiz belgilar bilan to'lib ketadi, ba'zan terminal buzilib qoladi. Shunday bo'lsa, reset deb yozing yoki terminalni qayta oching.

Tekshirib ko'ring: 50 000 qatorli log faylining oxirgi 20 qatorini ko'rish uchun qaysi buyruq qulay: cat, less yoki tail?

Javob

tail -n 20 server.log. cat 50 000 qatorni ekranga to'kadi. less ham ishlaydi, lekin oxiriga borish kerak. tail aynan oxirgi qatorlarni darhol beradi.

4. Nusxalash: cp

cp — copy. Doim tartib shunday: qayerdan → qayerga.

bash
cp menyu.txt menyu-zaxira.txt

Ikkinchi nomli nusxa paydo bo'ladi. Ikkinchi argument papka bo'lsa, fayl o'sha papka ichiga o'z nomi bilan nusxalanadi:

bash
cp menyu.txt sayt/

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

bash
cp -r sayt sayt-zaxira

Diqqat: Agar menyu-zaxira.txt allaqachon bor bo'lsa, cp uni so'ramasdan ustidan yozadi. Eski matn yo'qoladi. Ehtiyot uchun -i (interactive) qo'shing — cp avval so'raydi: cp: overwrite 'menyu-zaxira.txt'? ("ustidan yozaymi?"). y — ha, n — yo'q.

5. Ko'chirish va nomini o'zgartirish: mv

mv — move. Tartib yana: qayerdan → qayerga.

Nomini o'zgartirish:

bash
mv sayt/js/app.js sayt/js/main.js

Boshqa papkaga ko'chirish:

bash
mv menyu-zaxira.txt sayt/

Ko'chirib, nomini ham o'zgartirish — bitta buyruqda:

bash
mv menyu.txt sayt/narxlar.txt

Papkani ko'chirish uchun -r shart emas: mv sayt/rasmlar sayt/img.

Nega Linux'da "nom o'zgartirish" alohida buyruq emas? Inode darsini eslang: fayl nomi — papkadagi yorliq. Nomni almashtirish ham, bitta disk ichida ko'chirish ham — faqat yorliqni boshqa joyga yozish. Fayl baytlari joyidan qimirlamaydi. Shuning uchun katta faylni ham mv bir zumda "ko'chiradi".

Diqqat: mv ham mavjud faylni so'ramasdan almashtiradi. Biz sinab ko'rdik: a.txt da A, b.txt da B edi. mv a.txt b.txt dan keyin b.txt ichida A qoldi, eski B yo'qoldi. Kerak bo'lsa, mv -i ishlating.

Tekshirib ko'ring: mv hisobot.txt eski/ va mv hisobot.txt eski.txt farqi nima? (eski — mavjud papka.)

Javob

Birinchisi faylni eski papkasi ichiga ko'chiradi, nomi hisobot.txt bo'lib qoladi. Ikkinchisi faylni joyida qoldirib, nomini eski.txt ga o'zgartiradi. Farqni oxiridagi / va papkaning mavjudligi hal qiladi.

6. O'chirish: rm — eng xavfli buyruq

6.1 Asosiy shakllari

Buyruq Nima qiladi
rm fayl.txt Faylni o'chiradi
rmdir papka Bo'sh papkani o'chiradi
rm -r papka Papkani ichidagi hamma narsa bilan o'chiradi
rm -i fayl.txt O'chirishdan oldin so'raydi
rm -rf papka Hech narsa so'ramasdan, hammasini o'chiradi

-f (force — "majburan") so'rovlarni o'chiradi va mavjud bo'lmagan fayl haqida ham jim turadi.

6.2 Savat yo'q

Explorer'da o'chirilgan fayl "Korzina"ga (Recycle Bin) tushadi va uni qaytarish mumkin. Terminalda bunday savat yo'q. rm faylning nomini o'chiradi va disk joyini bo'sh deb belgilaydi — "bekor qilish" tugmasi yo'q. Git Bash'dagi rm ham Windows savatini chetlab o'tadi.

6.3 Bitta bo'sh joy — katta falokat

Jasur mashq ichidagi eski papkasini o'chirmoqchi edi va shunday yozdi:

text
rm -rf ~ /mashq/eski

~ dan keyin tasodifan bo'sh joy tushib qoldi. Shell buni ikki argument deb o'qiydi: ~ (butun uy papkasi!) va /mashq/eski. Natija — uy papkasidagi hujjatlar, rasmlar, loyihalar butunlay o'chadi. -f tufayli hech narsa so'ralmaydi ham.

Zamonaviy Linux'dagi rm rm -rf / ni (butun diskni) sukut bo'yicha rad etadi — bu himoya rasmiy hujjatlarda yozilgan. Uni hech qachon sinab ko'rmang. Lekin uy papkasi yoki loyiha papkasi uchun bunday himoya yo'q.

6.4 Xavfsiz o'chirish odatlari

  1. rm dan oldin pwd — qayerdaligingizni tekshiring.
  2. O'chiradigan narsani avval ls bilan ko'ring: ls eski — keyin o'sha yo'lni rm -r eski da ishlating.
  3. -f ni odat qilmang. Oddiy rm -r so'ragan joyda to'xtab, o'ylab olasiz.
  4. Muhim papkada rm -i ishlating.
  5. Enter'dan oldin buyruqni yana bir marta o'qing — ayniqsa bo'sh joylarni.

Tekshirib ko'ring: rmdir sayt/css buyrug'i Directory not empty xatosini berdi. Bu nimani bildiradi va papkani qanday o'chirish mumkin?

Javob

"Papka bo'sh emas" — ichida style.css bor. rmdir faqat bo'sh papkani o'chiradi, bu uning himoyasi. Ichidagisi bilan o'chirish uchun rm -r sayt/css. Avval ls sayt/css bilan ichida nima borligiga qarang.

7. Glob belgilari: * va ?

7.1 Ikki belgi

Bir guruh faylni bittalab yozmaslik uchun shablon belgilari bor. Ular glob (inglizcha "wildcard" — joker) deb ataladi:

Belgi Ma'nosi Misol
* Istalgan belgilar, istalgan soni (nol ham) *.txt — barcha .txt fayllar
? Aynan bitta istalgan belgi dars?.txt — dars1.txt, dars2.txt

Papkada dars1.txt, dars2.txt va dars10.txt bor. Biz Git Bash'da tekshirdik:

  • ls dars?.txt → dars1.txt dars2.txt. dars10.txt chiqmadi: ? aynan bitta belgi, 10 esa ikkita.
  • ls dars*.txt → uchalasi ham.

7.2 Shablonni shell ochadi

Muhim sir: * ni ls yoki rm emas, shell ochadi. Buyruq ishga tushishidan oldin shell *.txt ni mos fayllar ro'yxatiga almashtiradi. Buyruqqa tayyor nomlar keladi.

Shuning uchun xavfsiz tekshirish usuli bor — echo bilan shablon nimaga aylanishini ko'rish:

bash
echo *.txt
text
a.txt b.txt dars1.txt dars10.txt dars2.txt menyu.txt

Natija sizni qoniqtirsa — keyin echo o'rniga rm yozasiz. Bu odat sizni ko'p fayllarni tasodifan o'chirishdan saqlaydi.

Ikki nozik joy (ikkalasini ham sinab ko'rdik):

  • * nuqta bilan boshlanadigan yashirin fayllarni tanlamaydi: echo *.txt .yashirin.txt ni ko'rsatmadi.
  • Hech narsa mos kelmasa, bash shablonni o'zgarishsiz qoldiradi: echo *.xyz → *.xyz. Shuning uchun ls *.xyz xatosi ls: cannot access '*.xyz': No such file or directory ko'rinishida chiqadi.

Tekshirib ko'ring: Papkada rasm1.png, rasm2.png, rasm12.png, logo.png bor. ls rasm?.png va ls *.png nimalarni ko'rsatadi?

Javob

ls rasm?.png → rasm1.png va rasm2.png. rasm12.png tushmaydi, chunki ? bitta belgi. ls *.png → to'rttalasi, logo.png ham, chunki * istalgan uzunlikdagi boshlanishga mos.

8. PowerShell'da nima boshqacha?

Bu darsdagi buyruqlar bash uchun. PowerShell'da ba'zilari ishlaydi, ba'zilari yo'q — biz Windows PowerShell 5.1'da tekshirdik:

Bash PowerShell'da
mkdir -p a/b/c Ishlaydi
touch fayl.txt Yo'q — New-Item fayl.txt
cp -r papka nusxa Ishlaydi
rm -rf papka Xato — Remove-Item papka -Recurse -Force
head -n 5 f.txt Get-Content f.txt -TotalCount 5
tail -f log.txt Get-Content log.txt -Wait -Tail 10

rm -rf PowerShell'da A parameter cannot be found that matches parameter name 'rf' xatosini beradi — "rf nomli parametr topilmadi". To'liq farqlar — PowerShell asoslari darsida.

9. Ko'p uchraydigan xatolar

9.1 Papkani -r siz nusxalash

text
cp: -r not specified; omitting directory 'sayt'

"-r ko'rsatilmagan; sayt papkasi tashlab ketildi". Tuzatish: cp -r sayt sayt-zaxira.

9.2 Papkani oddiy rm bilan o'chirish

text
rm: cannot remove 'sayt': Is a directory

"O'chirib bo'lmadi: bu papka". Tuzatish: bo'sh bo'lsa rmdir sayt, ichida narsa bo'lsa rm -r sayt (avval ls sayt!).

9.3 Ota papkasiz mkdir

text
mkdir: cannot create directory 'sayt/css': No such file or directory

Xato yaratilayotgan css haqida emas, yo'qolgan sayt haqida. Tuzatish: mkdir -p sayt/css.

9.4 Ustidan yozib yuborish

cp va mv mavjud faylni jim almashtiradi. Xato xabari yo'q — shuning uchun bu eng ayyor xato. Tuzatish: muhim fayllar bilan -i ishlating va avval ls bilan qarang.

9.5 Bo'sh joyli nom

rm mening fayl.txt — mening va fayl.txt nomli ikki faylni o'chirishga urinadi. Ular mavjud bo'lsa — ikkalasi ham o'chadi. Tuzatish: rm "mening fayl.txt", yaxshisi — nomlarda bo'sh joy ishlatmang.

10. Mashqlar

1-mashq (oson): Loyiha skeleti

mashq papkasi ichida quyidagi tuzilmani ikki buyruq bilan yarating:

text
portfolio/
├── index.html
├── css/
│   └── style.css
└── rasmlar/

Ishora: birinchi buyruq — papkalar uchun -p bilan, ikkinchisi — fayllar uchun touch.

Yechim
bash
mkdir -p portfolio/css portfolio/rasmlar
touch portfolio/index.html portfolio/css/style.css

mkdir -p ikki yo'lni oladi va portfolio ni ham o'zi yaratadi. touch ikki bo'sh fayl ochadi. Tekshirish: ls -R portfolio. Qisqa variant: mkdir -p portfolio/{css,rasmlar}.

2-mashq (o'rta): Oxirida nima qoladi?

Bo'sh papkada ketma-ket bajarildi:

bash
mkdir hujjatlar
touch reja.txt
cp reja.txt hujjatlar/
mv reja.txt reja-eski.txt
cp reja-eski.txt hujjatlar/reja.txt
rm reja-eski.txt

Oxirida joriy papkada va hujjatlar ichida qaysi fayllar bor? hujjatlar/reja.txt ga necha marta yozildi?

Yechim
  • Joriy papkada: faqat hujjatlar papkasi. reja.txt avval reja-eski.txt ga aylandi, keyin o'chirildi.
  • hujjatlar ichida: bitta reja.txt.
  • Unga ikki marta yozildi: 3-qatorda nusxalandi, 5-qatorda esa cp uni so'ramasdan ustidan yozdi. Fayllar bo'sh bo'lgani uchun farq sezilmaydi, lekin haqiqiy ishda eski matn yo'qolgan bo'lardi.

3-mashq (qiyin): Tozalash

loglar papkasida app.log, app1.log, app2.log, app15.log, muhim.txt bor. Quyidagilarni bajaring:

  1. app1.log va app2.log ni bitta shablon bilan tanlang (app.log va app15.log tanlanmasin). Avval echo bilan tekshiring, keyin o'chiring.
  2. Qolgan barcha .log fayllarni o'chiring, muhim.txt ga tegmang.
  3. app15.log o'chirilishidan oldin uning oxirgi 5 qatorini ko'rib qo'yish kerak edi. Qaysi buyruq bilan?
Yechim
bash
cd loglar
echo app?.log
rm app?.log
tail -n 5 app15.log
echo *.log
rm *.log
  1. app?.log — app dan keyin aynan bitta belgi: app1.log va app2.log. app.log da belgi yo'q, app15.log da ikkita. echo avval ro'yxatni ko'rsatadi — to'g'ri bo'lsa, rm.
  2. *.log — qolgan app.log va app15.log. muhim.txt tanlanmaydi, chunki .log bilan tugamaydi.
  3. tail -n 5 app15.log — shuning uchun u yechimda rm *.log dan oldin turibdi. O'chirilgandan keyin ko'rib bo'lmaydi: savat yo'q.

11. Real ishda

  • Yangi loyiha. mkdir -p va touch bilan loyiha skeleti bir necha soniyada quriladi. Ko'p vositalar (masalan, keyinroq ko'radigan Vite) buni o'zi qiladi, lekin ichida aynan shu amallar.
  • Server loglari. Sayt xato bersa, dasturchi serverga kirib tail -f bilan logni kuzatadi va xatoni jonli ko'radi. Eski loglarni ko'rish — less.
  • Zaxira. Muhim sozlama faylini o'zgartirishdan oldin cp nginx.conf nginx.conf.bak — bu serverdagi odatiy ehtiyotkorlik.
  • Xavfsizlik madaniyati. Tajribali dasturchilar ham rm -rf dan oldin to'xtab, yo'lni tekshiradi. Jamoadagi skriptlarda o'chirishdan oldin tekshiruv qo'yiladi. Intervyularda "rm -rf bilan bog'liq qanday xavflarni bilasiz?" deb so'rashlari mumkin.

Xulosa

  • mkdir -p — ichma-ich papkalar; touch — bo'sh fayl (mavjud faylda faqat vaqtni yangilaydi).
  • cat — butun fayl, less — sahifalab (q — chiqish), head/tail -n — boshi/oxiri, tail -f — jonli kuzatish (Ctrl + C — to'xtatish).
  • cp (papka — cp -r) va mv: tartib doim "qayerdan → qayerga"; ikkalasi mavjud faylni so'ramasdan almashtiradi — -i ishlating.
  • rm savatsiz, butunlay o'chiradi. Oldin pwd va ls, -f ni odat qilmang, bo'sh joylarni tekshiring.
  • * — istalgan belgilar, ? — aynan bitta belgi. Shablonni avval echo bilan tekshiring.

Keyingi dars: Fayl va matn qidirish — minglab fayl orasidan kerakli faylni va fayllar ichidan kerakli so'zni find va grep bilan topishni o'rganamiz.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
Fayl va papkalar bilan ishlash — IlmHamroh