Mundarija (34)
- Bu darsda
- 1. Nega bu kerak?
- 2. Yaratish: mkdir va touch
- 2.1 Papka: mkdir
- 2.2 Ichma-ich papkalar: mkdir -p
- 2.3 Bo'sh fayl: touch
- 3. Fayl ichini ko'rish
- 3.1 cat — hammasini chiqarish
- 3.2 less — sahifalab o'qish
- 3.3 head va tail — boshi va oxiri
- 3.4 tail -f — jonli kuzatish
- 4. Nusxalash: cp
- 5. Ko'chirish va nomini o'zgartirish: mv
- 6. O'chirish: rm — eng xavfli buyruq
- 6.1 Asosiy shakllari
- 6.2 Savat yo'q
- 6.3 Bitta bo'sh joy — katta falokat
- 6.4 Xavfsiz o'chirish odatlari
- 7. Glob belgilari: * va ?
- 7.1 Ikki belgi
- 7.2 Shablonni shell ochadi
- 8. PowerShell'da nima boshqacha?
- 9. Ko'p uchraydigan xatolar
- 9.1 Papkani -r siz nusxalash
- 9.2 Papkani oddiy rm bilan o'chirish
- 9.3 Ota papkasiz mkdir
- 9.4 Ustidan yozib yuborish
- 9.5 Bo'sh joyli nom
- 10. Mashqlar
- 1-mashq (oson): Loyiha skeleti
- 2-mashq (o'rta): Oxirida nima qoladi?
- 3-mashq (qiyin): Tozalash
- 11. Real ishda
- Xulosa
Fayl va papkalar bilan ishlash
Qisqacha: Terminalda papka
mkdir(ichma-ich —mkdir -p), bo'sh fayltouchbilan yaratiladi.cpnusxalaydi (papkani —cp -r),mvko'chiradi va nomini o'zgartiradi,rmo'chiradi. Faylni ko'rish:cat,less,head,tail.*va?belgilari bir nechta faylni birdan tanlaydi. Eng muhim qoida:rmbilan 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,tailbilan ko'rasiz,tail -fbilan jonli kuzatasiz. - Fayl va papkalarni nusxalaysiz, ko'chirasiz, nomini o'zgartirasiz.
rmni xavfsiz ishlatish qoidalarini bilasiz va negarm -rfdan 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:
cd
mkdir mashq
cd mashqBir buyruqda bir nechta papka ham bo'ladi — har bir nom alohida argument:
mkdir css js rasmlar2.2 Ichma-ich papkalar: mkdir -p
sayt/css ni yaratmoqchisiz, lekin sayt hali yo'q:
mkdir sayt/cssGit Bash'da ishga tushirganimizda:
mkdir: cannot create directory 'sayt/css': No such file or directoryG'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:
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 bunisayt/css sayt/js sayt/rasmlarga 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
touch sayt/index.html sayt/css/style.css sayt/js/app.jsUchala 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/sentabrbuyrug'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:
Osh - 35000
Lag'mon - 32000
Manti - 28000
Somsa - 8000
Choy - 50003.1 cat — hammasini chiqarish
cat menyu.txtButun 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:
less katta-fayl.txtBoshqaruv 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
head -n 2 menyu.txtOsh - 35000
Lag'mon - 32000tail -n 2 menyu.txtSomsa - 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.
tail -f server.logKuzatishni to'xtatish — Ctrl + C (Terminal darsida ko'rgan tugma).
Diqqat:
catni rasm yoki arxiv kabi matn bo'lmagan faylga ishlatmang. Ekran tushunarsiz belgilar bilan to'lib ketadi, ba'zan terminal buzilib qoladi. Shunday bo'lsa,resetdeb yozing yoki terminalni qayta oching.
Tekshirib ko'ring: 50 000 qatorli log faylining oxirgi 20 qatorini ko'rish uchun qaysi buyruq qulay:
cat,lessyokitail?
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.
cp menyu.txt menyu-zaxira.txtIkkinchi nomli nusxa paydo bo'ladi. Ikkinchi argument papka bo'lsa, fayl o'sha papka ichiga o'z nomi bilan nusxalanadi:
cp menyu.txt sayt/Papkani nusxalash uchun -r (recursive — "ichidagi hamma narsa bilan") kerak:
cp -r sayt sayt-zaxiraDiqqat: Agar
menyu-zaxira.txtallaqachon bor bo'lsa,cpuni so'ramasdan ustidan yozadi. Eski matn yo'qoladi. Ehtiyot uchun-i(interactive) qo'shing —cpavval 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:
mv sayt/js/app.js sayt/js/main.jsBoshqa papkaga ko'chirish:
mv menyu-zaxira.txt sayt/Ko'chirib, nomini ham o'zgartirish — bitta buyruqda:
mv menyu.txt sayt/narxlar.txtPapkani 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:
mvham mavjud faylni so'ramasdan almashtiradi. Biz sinab ko'rdik:a.txtdaA,b.txtdaBedi.mv a.txt b.txtdan keyinb.txtichidaAqoldi, eskiByo'qoldi. Kerak bo'lsa,mv -iishlating.
Tekshirib ko'ring:
mv hisobot.txt eski/vamv hisobot.txt eski.txtfarqi 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:
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
rmdan oldinpwd— qayerdaligingizni tekshiring.- O'chiradigan narsani avval
lsbilan ko'ring:ls eski— keyin o'sha yo'lnirm -r eskida ishlating. -fni odat qilmang. Oddiyrm -rso'ragan joyda to'xtab, o'ylab olasiz.- Muhim papkada
rm -iishlating. - Enter'dan oldin buyruqni yana bir marta o'qing — ayniqsa bo'sh joylarni.
Tekshirib ko'ring:
rmdir sayt/cssbuyrug'iDirectory not emptyxatosini 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.txtchiqmadi:?aynan bitta belgi,10esa 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:
echo *.txta.txt b.txt dars1.txt dars10.txt dars2.txt menyu.txtNatija 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.txtni ko'rsatmadi.- Hech narsa mos kelmasa, bash shablonni o'zgarishsiz qoldiradi:
echo *.xyz→*.xyz. Shuning uchunls *.xyzxatosils: cannot access '*.xyz': No such file or directoryko'rinishida chiqadi.
Tekshirib ko'ring: Papkada
rasm1.png,rasm2.png,rasm12.png,logo.pngbor.ls rasm?.pngvals *.pngnimalarni 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
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
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
mkdir: cannot create directory 'sayt/css': No such file or directoryXato 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:
portfolio/
├── index.html
├── css/
│ └── style.css
└── rasmlar/Ishora: birinchi buyruq — papkalar uchun -p bilan, ikkinchisi — fayllar uchun touch.
Yechim
mkdir -p portfolio/css portfolio/rasmlar
touch portfolio/index.html portfolio/css/style.cssmkdir -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:
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.txtOxirida joriy papkada va hujjatlar ichida qaysi fayllar bor? hujjatlar/reja.txt ga necha marta yozildi?
Yechim
- Joriy papkada: faqat
hujjatlarpapkasi.reja.txtavvalreja-eski.txtga aylandi, keyin o'chirildi. hujjatlarichida: bittareja.txt.- Unga ikki marta yozildi: 3-qatorda nusxalandi, 5-qatorda esa
cpuni 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:
app1.logvaapp2.logni bitta shablon bilan tanlang (app.logvaapp15.logtanlanmasin). Avvalechobilan tekshiring, keyin o'chiring.- Qolgan barcha
.logfayllarni o'chiring,muhim.txtga tegmang. app15.logo'chirilishidan oldin uning oxirgi 5 qatorini ko'rib qo'yish kerak edi. Qaysi buyruq bilan?
Yechim
cd loglar
echo app?.log
rm app?.log
tail -n 5 app15.log
echo *.log
rm *.logapp?.log—appdan keyin aynan bitta belgi:app1.logvaapp2.log.app.logda belgi yo'q,app15.logda ikkita.echoavval ro'yxatni ko'rsatadi — to'g'ri bo'lsa,rm.*.log— qolganapp.logvaapp15.log.muhim.txttanlanmaydi, chunki.logbilan tugamaydi.tail -n 5 app15.log— shuning uchun u yechimdarm *.logdan oldin turibdi. O'chirilgandan keyin ko'rib bo'lmaydi: savat yo'q.
11. Real ishda
- Yangi loyiha.
mkdir -pvatouchbilan 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 -fbilan 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 -rfdan oldin to'xtab, yo'lni tekshiradi. Jamoadagi skriptlarda o'chirishdan oldin tekshiruv qo'yiladi. Intervyularda "rm -rfbilan 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) vamv: tartib doim "qayerdan → qayerga"; ikkalasi mavjud faylni so'ramasdan almashtiradi —-iishlating.rmsavatsiz, butunlay o'chiradi. Oldinpwdvals,-fni odat qilmang, bo'sh joylarni tekshiring.*— istalgan belgilar,?— aynan bitta belgi. Shablonni avvalechobilan 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.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!