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);-—cduchun oldingi ish katalogi;/— fayl tizimi daraxtining ildizi.
Taxminiy natija:
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:
-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:
- obyekt turi va ruxsatlar (
-— oddiy fayl,d— katalog); - hard linklar soni;
- egasi va guruhi;
- fayl hajmi;
- oxirgi o‘zgartirish vaqti;
- 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 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:
Agar nom - bilan boshlansa, buyruq uni parametr deb tushunib qolishi mumkin. -- esa parametrlar tugaganini
bildiradi:
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:
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:
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:
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:
Kerakli ma’lumotni alohida joyga nusxalab, VM snapshot borligiga ishonch hosil qilganingizdan keyingina interaktiv rekursiv variantni — faqat laboratoriyada — ishlatish mumkin:
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:
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 dirda manzil katalogmi yoki yangi fayl nomimi — buni tekshirmaslik: avvaltest -d dirvals -ld dirishlating.cp -r dir mavjud-dir/bilancp -r dir yangi-dirbir xil natija beradi deb o‘ylash: birinchisidadirmavjud katalog ichiga joylashadi, ikkinchisida esa yangi manzil sifatida yaratiladi.- yashirin fayllar yo‘q deb o‘ylash:
ls -Aularni 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 faqatpwdga qarash: nishonning o‘ziniecho,lsyokifindbilan ham ko‘zdan kechiring.
Amaliy mashqlar
~/lab/kursostidasrc,docs,backupkataloglarini bittamkdirbuyrug‘i bilan yarating vafindbilan tekshiring.- Bo‘shliqli nomga ega fayl yarating; uni quote yordamida
backupga nusxalang vacmpbilan solishtiring. - Bitta fayl haqida
ls -l,filevastatberadigan ma’lumotlarni yonma-yon qo‘yib taqqoslang. - Konfiguratsiyani almashtirish ssenariysini o‘z test fayllaringizda bajaring, so‘ng backupdan rollback qiling.
- Faqat laboratoriyada: bo‘sh katalogni
rmdirbilan, ichida fayli bor katalogni esa avval nishonni ko‘rib chiqibrm -rIbilan 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.