Fayl va papkalar — touch, mkdir, cp, mv, rm

~15 daq · Linux · Fayl tizimi

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] cp standart holatda so'ramasdan mavjud faylning ustiga yozadi. Muhim fayllar bilan ishlaganda -i ishlating.


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 pwd va ls — qayerda turganingiz va nima o'chishini ko'ring
  • Naqsh (*) bilan o'chirishdan oldin ls *.log bilan nimaga mos kelishini tekshiring
  • rm -rf o'rniga avval rm -ri yoki -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-cli paketi bor: trash fayl.txt, keyin trash-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 nom
  • touch — bo'sh fayl
  • cp — nusxa; papka uchun -r; zaxira uchun -a
  • mv — ko'chirish va nom o'zgartirish
  • rm — qaytarib bo'lmaydi; papka — -r; -i — so'rash
  • cp va mv so'ramasdan ustiga yozadi — -i / -n
  • Glob: *, ?, [0-9]; avval ls bilan tekshiring
  • O'chirishdan oldin: pwd, ls

Keyingi dars

8-dars: Fayllarni o'qish — cat, less, head, tail -f