Skip to content

Linuxda fayl va kataloglar bilan ishlash

Linuxda konfiguratsiya, log, dastur kodi va foydalanuvchi ma’lumoti — hammasi fayl tizimida saqlanadi. Terminalda xavfsiz ishlashning kaliti oddiy uch narsada: qayerda turganingizni aniq bilish, manba bilan manzilni adashtirmaslik va biror narsani o‘chirishdan oldin nishonni tekshirish. Bu maqolada oldingi asosiy buyruqlar bilan tanishuvni haqiqiy administrator ish jarayoniga aylantiramiz: fayl yaratamiz, nusxalaymiz, ko‘chiramiz va o‘chiramiz — har bir qadamni tekshirib borgan holda.

Misollarni muhim ma’lumoti bo‘lmagan Ubuntu Server LTS laboratoriyasida bajaring. $ prompt belgisi buyruqning bir qismi emas.

Yo‘l va joriy katalog

Fayl yo‘li — kataloglar zanjiri va obyekt nomidan iborat. /etc/ssh/sshd_config / belgisidan boshlangani uchun mutlaq (absolute) yo‘l: qayerda turganingizdan qat’i nazar, doim aynan bir obyektni bildiradi. config/app.conf esa nisbiy (relative) yo‘l — u joriy ish katalogidan boshlab hisoblanadi.

Bir nechta maxsus yozuvni yodda tuting:

  • . — joriy katalog;
  • .. — ota katalog;
  • ~ — joriy foydalanuvchining home katalogi (uni Bash kengaytiradi);
  • -cd uchun oldingi ish katalogi;
  • / — fayl tizimi daraxtining ildizi.
pwd
cd /var
cd log
pwd
cd -

Taxminiy natija:

/home/admin
/var/log
/home/admin

cd - sizni oldingi katalogga qaytaradi va uning nomini ekranga ham chiqaradi. cd .. esa “oldingi joy”ga emas, aynan bir daraja yuqoridagi ota katalogga o‘tadi — bu ikki amalni adashtirmang.

Warning

sudo bilan buyruq bajarganingizda joriy katalog o‘zgarmaydi, lekin yozish huquqingiz oshadi. Yo‘l xato bo‘lsa, yuqori huquq xatoning zararini yanada kattalashtiradi. Shuning uchun avval pwd va ls -ld <yo‘l> bilan nishonni tekshiring.

Katalog tarkibi va metadata

Endi avvalgi asosiy buyruqlarga uchta tekshiruv vositasini qo‘shamiz. file fayl mazmuniga qarab uning turini taxmin qiladi, stat obyektning hajmi, ruxsati va vaqt belgilarini batafsil ko‘rsatadi, find esa berilgan katalog ichidagi nomlarni daraxt bo‘ylab topadi. Hozircha finddan faqat laboratoriya katalogini ko‘rish uchun foydalanamiz; uning murakkab qidiruv shartlarini keyingi qidiruv mavzusida o‘rganamiz. Lokal yordamni file --help, stat --help va man find orqali ko‘rishingiz mumkin.

Oddiy ro‘yxat:

ls
ls -lah /etc/ssh

-l batafsil format, -a yashirin nomlar, -h esa hajmni o‘qishga qulay birlikda ko‘rsatadi. Natija misoli:

-rw-r--r-- 1 root root 3.2K Mar 18 09:40 ssh_config
drwxr-xr-x 2 root root 4.0K Mar 18 09:40 ssh_config.d

Qator qismlari chapdan o‘ngga:

  1. obyekt turi va ruxsatlar (- — oddiy fayl, d — katalog);
  2. hard linklar soni;
  3. egasi va guruhi;
  4. fayl hajmi;
  5. oxirgi o‘zgartirish vaqti;
  6. nomi.

Katalog qatoridagi hajm uning ichidagi barcha fayllar yig‘indisi emas. Katalog diskda qancha joy egallashini bilish uchun keyingi storage mavzularida du ishlatiladi.

ls rangiga tayanmang: rang shell aliasi va LS_COLORSga bog‘liq. Obyekt turini uning mazmunidan aniqlash uchun:

file /etc/hosts
stat /etc/hosts

file mazmun va signaturalarga qarab turini taxmin qiladi, stat esa hajm, inode, ruxsat, egalar va vaqt belgilarini ko‘rsatadi. ls -ld katalog katalogning o‘zini, ls -l katalog esa uning tarkibini ko‘rsatishini ham esdan chiqarmang.

Nomlarda bo‘shliq va tire

Shell bo‘shliqni argumentlarni ajratuvchi belgi deb biladi. Shuning uchun ichida bo‘shliq bo‘lgan nomni qo‘shtirnoqqa oling:

mkdir "hisobot 2026"
touch "hisobot 2026/iyul natijasi.txt"
ls -l "hisobot 2026/iyul natijasi.txt"

Agar nom - bilan boshlansa, buyruq uni parametr deb tushunib qolishi mumkin. -- esa parametrlar tugaganini bildiradi:

touch -- -draft
ls -l -- -draft

Avtomatlashtirishda bo‘shliqsiz, ma’noli nomlar (iyul-hisoboti.txt) qulayroq, ammo mavjud nomlarni to‘g‘ri quote qilishni ham bilib qo‘yish kerak.

Fayl va katalog yaratish

touch mavjud bo‘lmagan oddiy bo‘sh fayl yaratadi; fayl allaqachon mavjud bo‘lsa, odatda uning vaqt belgilarini yangilaydi:

mkdir -p ~/lab/fayllar/{config,backup,logs}
touch ~/lab/fayllar/config/app.conf
stat ~/lab/fayllar/config/app.conf

mkdir -p yetishmayotgan ota kataloglarni ham yaratadi va katalog allaqachon mavjud bo‘lsa xato bermaydi. Brace expansion ({config,backup,logs}) Bash tomonidan uchta alohida argumentga yoyiladi. Natijani tekshiramiz:

find ~/lab/fayllar -maxdepth 2 -print

Bu yerda find faqat laboratoriya daraxtini o‘qiydi. Natijada asosiy katalog, uchta ichki katalog va app.conf ko‘rinishi kerak.

Nusxalash: cp

Sintaksisning asosiy shakli:

cp [OPTION]... SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY

Avval sinov faylini to‘ldirib olamiz. Konfiguratsiya matnini yozish uchun oldingi maqolada o‘tilgan echodan foydalanamiz. > buyruq natijasini faylga yozadi va oldingi mazmunni butunlay almashtiradi; >> esa matnni fayl oxiriga qo‘shadi. Redirection keyinroq alohida o‘rganiladi, hozircha undan faqat shu laboratoriya faylida aniq yo‘l bilan foydalaning:

echo 'port=8080' > ~/lab/fayllar/config/app.conf
echo 'environment=lab' >> ~/lab/fayllar/config/app.conf
cp -i ~/lab/fayllar/config/app.conf ~/lab/fayllar/backup/app.conf
cmp ~/lab/fayllar/config/app.conf ~/lab/fayllar/backup/app.conf

-i mavjud manzilni bosib yozishdan oldin ruxsat so‘raydi. Undan keyingi cmp esa ikki faylni baytma-bayt solishtiradi: agar u hech narsa chiqarmasa va echo $? 0 qaytarsa, fayllar to‘liq bir xil ($? — eng oxirgi buyruqning tugash holati, 0 odatda muvaffaqiyat degani). Aliasga umid qilmasdan parametrni buyruqning o‘zida aniq yozish skript va server ishida ishonchliroq. cmp va $? haqida keyingi buyruq sintaksisi mavzusida batafsil to‘xtalamiz.

Katalogni nusxalash uchun esa rekursiya kerak:

cp -a ~/lab/fayllar/config ~/lab/fayllar/backup/config-snapshot

GNU cp -a (--archive) katalogni rekursiv nusxalaydi va imkon qadar atributlarini saqlab qoladi. Oddiy cp -r tarkibni nusxalaydi, lekin ownership, timestamp va link semantikasi backup talabi uchun yetarli bo‘lmasligi mumkin. Shuni ham unutmang: production backup uchun cpning o‘zi strategiya emas — bunda versiyalash, boshqa qurilma, tekshiruv va restore sinovi ham zarur.

Ko‘chirish va nomini o‘zgartirish: mv

Bir fayl tizimi ichida mv ko‘pincha shunchaki katalog yozuvini qayta nomlaydi; boshqa fayl tizimiga ko‘chirganda esa fayl avval nusxalanadi, so‘ng manba o‘chiriladi. Shu sabab katta faylni boshqa mountga ko‘chirish har doim tez va atomar bo‘lishiga ishonmang.

Quyidagi misolda birinchi marta test va &&ni ishlatamiz. test -f yo‘l oddiy fayl mavjudligini tekshiradi va terminalga odatda hech narsa chiqarmaydi. &&ning o‘ng tomonidagi buyruq esa faqat chapdagi tekshiruv muvaffaqiyatli bo‘lgandagina bajariladi. Demak, xabar faqat yangi fayl haqiqatan mavjud bo‘lsagina chiqadi; bu sintaksisga keyingi maqolada kengroq to‘xtalamiz.

mv -i ~/lab/fayllar/backup/app.conf ~/lab/fayllar/backup/app.conf.old
test -f ~/lab/fayllar/backup/app.conf.old && echo "ko‘chirish muvaffaqiyatli"

Manzil allaqachon mavjud bo‘lsa, -i tasdiq so‘raydi. Avtomatlashtirishda bunday interaktiv prompt jarayonni osib qo‘yishi mumkin; shuning uchun u yerda holatni oldindan test bilan tekshirib, siyosatni aniq belgilang. GNU Coreutilsda -n mavjud manzilni bosib yozmaslikka xizmat qiladi, ammo portable skript uchun maqsad muhitning hujjatini tekshirib oling.

O‘chirish: avval nimani o‘chirayotganingizni aniqlang

Bo‘sh katalogni olib tashlashning eng xavfsiz yo‘li:

mkdir ~/lab/fayllar/empty
rmdir ~/lab/fayllar/empty
test ! -e ~/lab/fayllar/empty && echo "bo‘sh katalog olib tashlandi"

Ichida biror narsa bo‘lsa, rmdir xato beradi. Bu cheklovni kamchilik emas, himoya deb qarang.

Oddiy sinov faylini interaktiv o‘chirish:

touch ~/lab/fayllar/keraksiz.tmp
ls -l -- ~/lab/fayllar/keraksiz.tmp
rm -i -- ~/lab/fayllar/keraksiz.tmp
test ! -e ~/lab/fayllar/keraksiz.tmp && echo "fayl olib tashlandi"

Danger

rm odatda faylni Trash savatiga yubormaydi. rm -r katalog daraxtini rekursiv o‘chiradi, -f esa ayrim himoya va savollarni chetlab o‘tadi. rm -rfni kundalik “yechim” sifatida ishlatmang. Uni production serverda yoki qiymati o‘zgaruvchidan kelgan yo‘lga sinab ko‘rmasdan bajarmang.

Laboratoriya daraxtini tozalash kerak bo‘lsa, avval mutlaq nishonni hisoblang va tarkibini ko‘ring:

target="$HOME/lab/fayllar"
echo "Nishon: $target"
find "$target" -maxdepth 2 -print

Kerakli ma’lumotni alohida joyga nusxalab, VM snapshot borligiga ishonch hosil qilganingizdan keyingina interaktiv rekursiv variantni — faqat laboratoriyada — ishlatish mumkin:

rm -rI -- "$target"

GNU rm -I ko‘p fayl yoki rekursiv amal oldidan bir marta tasdiq so‘raydi; bu -fdan ancha xavfsizroq. Rollback yo‘li — snapshotni tiklash yoki oldindan olingan, tekshirilgan backupdan qaytarish. rmning o‘zida undo tugmasi yo‘q.

Amaliy ssenariy: konfiguratsiyani xavfsiz almashtirish

Muammo: app.conf.new sinovdan o‘tdi va joriy app.confni almashtirishi kerak. To‘g‘ridan-to‘g‘ri bosib yozsak, eski holatni yo‘qotamiz. Shuning uchun avval backup olamiz.

cd ~/lab/fayllar/config
pwd
ls -l -- app.conf app.conf.new
cp -a -- app.conf ../backup/app.conf.before-change
cmp -- app.conf ../backup/app.conf.before-change
mv -i -- app.conf.new app.conf
cat app.conf

Oqim aniq: nishonni tekshirdik → atributlari bilan backup oldik → backupni asl fayl bilan solishtirdik → interaktiv almashtirdik → muhim qiymatni ko‘rib tasdiqladik. Biror narsa noto‘g‘ri ketsa, rollback:

cp -a -- ../backup/app.conf.before-change app.conf

Haqiqiy service konfiguratsiyasida bundan tashqari konfiguratsiya validatori va service reload jarayoni ham kerak bo‘ladi; ularni service boshqaruvi mavzusida ko‘rib chiqamiz.

Ko‘p uchraydigan xatolar

  • cp source dir da manzil katalogmi yoki yangi fayl nomimi — buni tekshirmaslik: avval test -d dir va ls -ld dir ishlating.
  • cp -r dir mavjud-dir/ bilan cp -r dir yangi-dir bir xil natija beradi deb o‘ylash: birinchisida dir mavjud katalog ichiga joylashadi, ikkinchisida esa yangi manzil sifatida yaratiladi.
  • yashirin fayllar yo‘q deb o‘ylash: ls -A ularni ko‘rsatadi; * odatda nuqta bilan boshlangan nomlarni qamramaydi.
  • quote qilinmagan o‘zgaruvchi yoki bo‘shliqli yo‘l: har doim "$target" shaklidan foydalaning.
  • sudoni har bir buyruqqa qo‘shish: home laboratoriyasida u kerak emas va root egaligidagi fayllarni tasodifan yaratib qo‘yadi.
  • rm -rfdan oldin faqat pwdga qarash: nishonning o‘zini echo, ls yoki find bilan ham ko‘zdan kechiring.

Amaliy mashqlar

  1. ~/lab/kurs ostida src, docs, backup kataloglarini bitta mkdir buyrug‘i bilan yarating va find bilan tekshiring.
  2. Bo‘shliqli nomga ega fayl yarating; uni quote yordamida backupga nusxalang va cmp bilan solishtiring.
  3. Bitta fayl haqida ls -l, file va stat beradigan ma’lumotlarni yonma-yon qo‘yib taqqoslang.
  4. Konfiguratsiyani almashtirish ssenariysini o‘z test fayllaringizda bajaring, so‘ng backupdan rollback qiling.
  5. Faqat laboratoriyada: bo‘sh katalogni rmdir bilan, ichida fayli bor katalogni esa avval nishonni ko‘rib chiqib rm -rI bilan olib tashlang.

Tekshiruv mezoni: mashq oxirida find ~/lab/kurs -maxdepth 3 -print natijasi rejangizga mos bo‘lsin va production yo‘llariga hech narsa yozilmagan bo‘lsin.

Xulosa

Fayl boshqaruvida tezlikdan oldin aniqlik turadi: pwd bilan kontekstni, ls va stat bilan nishonni, cmp yoki test bilan natijani tekshiring. cp asl faylni joyida qoldiradi, mv uni boshqa nom yoki joyga o‘tkazadi, rm esa qaytarish imkonini bermaydi. Keyingi matn muharrirlari mavzusida shu fayllarning ichidagi matnni Nano va Vim bilan nazorat ostida o‘zgartirishni o‘rganamiz.

Manbalar