Fayl va papkalar — touch, mkdir, cp, mv, rm
Muammodan boshlaylik
Yangi loyiha uchun papkalar tuzilishi kerak: src, public, tests, ichida bir nechta fayl. Grafik interfeysda — o'ng tugma, "Yangi papka", nom yozish, kirish, yana... 20 marta. Terminalda — bitta qator.
Lekin ehtiyot bo'lish kerak: terminalda savat (korzinka) yo'q. rm bilan o'chirilgan fayl — butunlay yo'qoladi.
mkdir — papka yaratish
mkdir loyiha
mkdir src public tests # bir nechta birdaniga
Ichma-ich papkalar — -p (parents):
mkdir -p loyiha/src/components/ui
-p siz — loyiha/src mavjud bo'lmasa xato. -p bilan — barcha kerakli papkalar yaratiladi, mavjudlari bo'lsa xato bermaydi.
Brace expansion — bir nechta nom
mkdir -p dokon/{src,public,tests}
mkdir -p dokon/src/{routes,models,controllers}
Shell {a,b,c} ni avval kengaytiradi:
echo dokon/{src,public,tests}
dokon/src dokon/public dokon/tests
Raqamlar bilan: mkdir dars-{1..10} → dars-1 ... dars-10.
touch — bo'sh fayl
touch index.js
touch dokon/src/{app,server,config}.js
Fayl mavjud bo'lsa — faqat o'zgartirish vaqtini yangilaydi (mazmuniga tegmaydi).
Mazmun bilan fayl yaratish (13-darsda batafsil):
echo "PORT=3000" > .env
cp — nusxalash
cp manba nishon
cp config.js config.backup.js # faylni nusxalash
cp config.js ~/zaxira/ # papkaga (nomi saqlanadi)
cp a.txt b.txt c.txt ~/zaxira/ # bir nechta faylni papkaga
cp -r src src-eski # papkani — -r (recursive) majburiy
| Bayroq | Nima |
|---|---|
-r |
Papkalarni ichidagilari bilan |
-i |
Ustiga yozishdan oldin so'rash |
-n |
Mavjud faylni ustiga yozmaslik |
-v |
Nima qilinayotganini ko'rsatish |
-p |
Ruxsatlar va vaqtlarni saqlash |
-a |
Arxiv rejimi: -r + -p + havolalar — zaxira uchun eng yaxshi |
[!WARNING]
cpstandart holatda so'ramasdan mavjud faylning ustiga yozadi. Muhim fayllar bilan ishlaganda-iishlating.
mv — ko'chirish va nomini o'zgartirish
Linux da "nomini o'zgartirish" buyrug'i alohida yo'q — bu shunchaki ko'chirish:
mv eski.txt yangi.txt # nomini o'zgartirish
mv rasm.png ~/Pictures/ # boshqa papkaga
mv rasm.png ~/Pictures/avatar.png # ko'chirish + yangi nom
mv *.log loglar/ # barcha .log fayllarni
mv eski-papka yangi-papka # papka — -r shart emas
mv ham ustiga so'ramasdan yozadi: -i — so'rash, -n — yozmaslik.
rm — o'chirish
rm fayl.txt
rm a.txt b.txt c.txt
rm *.tmp
rm -r eski-papka # papka ichidagilari bilan
rmdir bosh-papka # faqat bo'sh papka
| Bayroq | Nima |
|---|---|
-r |
Papkalarni ichidagilari bilan |
-i |
Har bir fayl uchun so'rash |
-I |
3 tadan ko'p fayl bo'lsa bir marta so'rash |
-f |
So'ramasdan, xatolarni ko'rsatmasdan (force) |
-v |
Nima o'chirilayotganini ko'rsatish |
[!WARNING]
rm— qaytarib bo'lmaydi. Savat yo'q, "Ctrl+Z" yo'q.rm -rf— so'ramasdan, ichidagi hamma narsa bilan o'chiradi. Ishlatishdan oldin ikki marta tekshiring.
Mashhur falokatlar
rm -rf / papka # ❌ bo'shliq! "/" va "papka" — ikki argument
rm -rf $PAPKA/ # ❌ $PAPKA bo'sh bo'lsa → rm -rf /
rm -rf * # ❌ noto'g'ri papkada turgan bo'lsangiz
Xavfsizlik odatlari:
- O'chirishdan oldin
pwdvals— qayerda turganingiz va nima o'chishini ko'ring - Naqsh (
*) bilan o'chirishdan oldinls *.logbilan nimaga mos kelishini tekshiring rm -rfo'rniga avvalrm -riyoki-I- Skriptlarda:
rm -rf "${PAPKA:?}/"— bo'sh bo'lsa xato beradi (39-dars) - Muhim narsalar — Git da va zaxirada
[!TIP] Grafik muhitda savatga yuborish uchun
trash-clipaketi bor:trash fayl.txt, keyintrash-restore. Serverda esa — zaxira nusxa (41-dars).
Glob naqshlar (wildcards)
Shell fayl nomlarini naqsh bo'yicha kengaytiradi — buyruqdan oldin:
| Naqsh | Mos keladi |
|---|---|
* |
Istalgan belgilar (0 yoki ko'p) |
? |
Bitta istalgan belgi |
[abc] |
a, b yoki c dan biri |
[0-9] |
Bitta raqam |
{a,b} |
a yoki b (brace expansion) |
ls *.js # barcha .js fayllar
ls rasm?.png # rasm1.png, rasmA.png (rasm10.png emas)
ls log-2026-11-0[1-5].txt
rm *.{tmp,bak} # .tmp va .bak
cp src/*.css public/
* yashirin fayllarni (.env) o'z ichiga olmaydi.
Amaliy misol: loyiha skeleti
mkdir -p ~/loyihalar/dokon/{src/{routes,models},public/{css,js},tests}
cd ~/loyihalar/dokon
touch src/app.js src/routes/{mahsulot,buyurtma}.js public/index.html README.md
echo "node_modules" > .gitignore
tree -a
.
├── .gitignore
├── README.md
├── public
│ ├── css
│ ├── index.html
│ └── js
├── src
│ ├── app.js
│ ├── models
│ └── routes
│ ├── buyurtma.js
│ └── mahsulot.js
└── tests
Bir necha soniyada.
Nima uchun shunday?
Nima uchun Linux rm uchun savat yoki "Ishonchingiz komilmi?" so'rovini standart qilmaydi?
UNIX falsafasi: foydalanuvchi nima qilayotganini biladi. Buyruqlar skriptlarda ishlatiladi — har bir o'chirishda so'rash avtomatlashtirishni imkonsiz qilardi. Savat esa "yashirin" disk joyini egallaydi — serverda bu muammo. Linux ning yondashuvi: buyruq aniq aytilganini qiladi, xavfsizlik esa boshqa qatlamlarda — ruxsatlar (boshqalarning fayllarini o'chira olmaysiz, 20-dars), -i bayrog'i, Git va zaxira nusxalar. Bu kuchli vosita — va kuchli vosita ehtiyotkorlikni talab qiladi.
Xulosa
Eslab qoling:
mkdir -p a/b/c— ichma-ich;{a,b,c}— bir nechta nomtouch— bo'sh faylcp— nusxa; papka uchun-r; zaxira uchun-amv— ko'chirish va nom o'zgartirishrm— qaytarib bo'lmaydi; papka —-r;-i— so'rashcpvamvso'ramasdan ustiga yozadi —-i/-n- Glob:
*,?,[0-9]; avvallsbilan tekshiring - O'chirishdan oldin:
pwd,ls
Keyingi dars
8-dars: Fayllarni o'qish — cat, less, head, tail -f