Terminal matn muharrirlari: Nano va Vim
Ko'p serverlarda grafik ish stoli bo'lmaydi. SSH orqali ulanib, konfiguratsiya faylini to'g'rilash, qisqa eslatma yozish yoki cron yozuvini ko'rib chiqish kerak bo'lsa, terminal muharriri kerak bo'ladi. Nano’ni o'rganish oson, chunki unda matn odatdagidek yoziladi. Vim esa rejimli (modal) muharrir: boshida qiyinroq tuyuladi, lekin asosiy buyruqlarni o'zlashtirib olgach, u bilan juda tez ishlaysiz.
Muharrirni bilish xavfsiz administratorlikning faqat bir qismi. Muhim faylni tahrirlashdan oldin uning zaxira nusxasini oling. Tahrirlagandan keyin esa xizmatni qayta yuklashdan (reload) oldin fayl mazmunini va xizmat konfiguratsiyasining sintaksisini tekshiring. Quyidagi misollarda faqat ~/lab/editor katalogi ishlatiladi.
Xavfsiz tahrirlash laboratoriyasini tayyorlash
mkdir -p ~/lab/editor
printf 'server_name=demo\nport=8080\nmode=test\n' > ~/lab/editor/app.conf
cp -a ~/lab/editor/app.conf ~/lab/editor/app.conf.bak
ls -l ~/lab/editor/app.conf*
Kutiladigan natija:
-rw-r--r-- ... /home/<username>/lab/editor/app.conf
-rw-r--r-- ... /home/<username>/lab/editor/app.conf.bak
Zaxira nusxa tahrirdan oldin yaratildi. Har doim shunday qilishni odat qiling.
Warning
/etc ichidagi haqiqiy fayllarda mashq qilmang. Tizim fayllarini tahrirlash uchun sudo kerak bo'lishi mumkin, lekin yuqori huquq sizni noto'g'ri qiymat yozib qo'yishdan himoya qilmaydi. Production konfiguratsiyasini o'zgartirishdan oldin VM snapshot, faylning zaxira nusxasi va tekshiruv buyrug'idan foydalaning.
Nano: to'g'ridan-to'g'ri tahrirlash
Laboratoriya faylini oching:
Nano faylni ekranning asosiy qismida ko'rsatadi, pastda esa tugmalar bo'yicha qisqa yordam turadi. Nano yozuvida ^ belgisi Ctrl tugmasini, M- esa Meta tugmasini (odatda Alt) bildiradi. Masalan, ^O deganda ^ va O belgilarini yozish emas, Ctrl+O tugmalarini bosish tushuniladi.
Nano’ning ko'p ishlatiladigan tugmalari:
| Amal | Tugma |
|---|---|
| Yordam | Ctrl+G |
| Qidirish | Ctrl+W, yangi Nano’da Ctrl+F ham |
| Joriy faylni saqlash | Ctrl+O, keyin Enter |
| Chiqish | Ctrl+X |
| Joriy qatorni qirqib olish | Ctrl+K |
| Qirqilgan matnni qo'yish | Ctrl+U |
| Joriy qatorni nusxalash | Alt+6 |
| Bekor qilish / qaytarish (undo / redo) | Alt+U / Alt+E |
| Qator va ustunga o'tish | Alt+G |
Faylni ma’lum qatordan ochish:
GNU Nano’da bu buyruq kursorni 2-qator, 1-ustunga qo'yadi. Biror tugma kutilganidek ishlamasa, shu tizimning o'zida nano --help yoki man nano ni tekshiring: Nano’ning turli versiyalarida tugma birikmalari farq qilishi mumkin.
Nano bilan mashq
Nano ichida:
port=8080niport=9090ga o'zgartiring.modeso'zini qidiring.mode=testnimode=stagingga o'zgartiring.Ctrl+Obilan saqlang,Enterbilan tasdiqlang, so'ngCtrl+Xbilan chiqing.
Shell’da tekshiring:
Kutiladigan mazmun:
Avvalgi holatga qaytarish (rollback):
Vim va Vi: rejimli tahrirlash
vi — Unix’ning an’anaviy muharrir interfeysi. Vim ("Vi Improved", ya’ni "yaxshilangan Vi") Vi uslubidagi buyruqlarni saqlagan holda ko'plab yangi imkoniyatlar qo'shadi. Ba’zi distributivlarda vi Vim’ning yengil versiyasi bo'ladi, boshqalarida esa Vi bilan mos keladigan boshqa muharrir bo'lishi mumkin.
Tizimingizda nima borligini tekshiring:
Agar vim bo'lmasa, ushbu maqoladagi asosiy buyruqlar uchun vi dan foydalaning.
Faylning nusxasini yaratib, uni oching:
Boshlovchi bilishi kerak bo'lgan uchta rejim
Vim’dagi chalkashliklarning aksariyati rejimlar bilan bog'liq:
- Normal rejim: harakatlanish, o'chirish, nusxalash, qo'yish, qidirish va buyruqlar uchun. Vim shu rejimda ochiladi.
- Insert rejimi: matn yozish uchun. Unga
i,ayokiotugmasi bilan o'tasiz. - Command-line rejimi: saqlash, chiqish, sozlamalar va yordam uchun. Unga Normal rejimda
:tugmasini bosib o'tasiz.
Qaysi rejimda turganingizni bilmasangiz, Esc ni bosing. Odatda bu sizni Normal rejimga qaytaradi.
Vim’ning eng zarur buyruqlari
Normal rejimda harakatlanish:
| Amal | Tugma |
|---|---|
| Chapga, pastga, yuqoriga, o'ngga | h, j, k, l |
| Keyingi / oldingi so'z | w / b |
| Qator boshi / oxiri | 0 / $ |
| Fayl boshiga / oxiriga o'tish | gg / G |
| Oldinga qarab qidirish | /text, keyin Enter |
| Keyingi / oldingi moslik | n / N |
Tahrirlash:
| Amal | Tugma |
|---|---|
| Kursordan oldin yozish | i |
| Kursordan keyin yozish | a |
| Pastda yangi qator ochish | o |
| Belgini o'chirish | x |
| Qatorni o'chirish | dd |
| Qatorni nusxalash | yy |
| Kursordan keyin qo'yish | p |
| So'zni almashtirish | cw |
| Bekor qilish / qaytarish (undo / redo) | u / Ctrl+R |
Command-line rejimi:
:w: faylni saqlaydi (yozadi).:q: saqlanmagan o'zgarish bo'lmasa, chiqadi.:wq: saqlaydi va chiqadi.:q!: saqlanmagan o'zgarishlarni tashlab yuborib, chiqadi.:set number: qator raqamlarini ko'rsatadi.:15: 15-qatorga o'tadi.:help :write::writebuyrug'i bo'yicha yordamni ochadi.
Note
:w! faylga yozish huquqini o'z-o'zidan bermaydi. Muharrir ishlayotgan jarayonning o'zida faylga yozish huquqi bo'lishi shart. Muharrirni sudo bilan ishga tushirsangiz, uning plaginlari va sozlamalari ham root huquqi bilan ishlashi mumkin. Imtiyozli tahrirlar uchun jamoangizda tasdiqlangan usuldan foydalaning.
Yozish huquqi bo'lmaganda saqlash
Yozish huquqi bo'lmagan faylni ochib, uni saqlamoqchi bo'lsangiz, Vim indamay o'tib ketmaydi va ishdan chiqmaydi, balki xato haqida aniq xabar beradi:
Bu xabar :w dan keyin ekranning eng pastidagi buyruq qatorida chiqadi. Xabar aynan yozilgan narsani bildiradi: faylni tahrirlayotgan jarayonda bu faylga yozish huquqi yo'q. Bunga odatda quyidagilar sabab bo'ladi (eng ko'p uchraydiganidan boshlab):
- faylni oddiy foydalanuvchi sifatida ochgansiz, lekin uning egasi root yoki boshqa xizmat hisobi;
- faylning o'zi emas, katalog yozishga ruxsat bermayapti (saqlash paytida faylni qayta nomlash uchun ota katalogga yozish huquqi kerak);
- fayl tizimi faqat o'qish (read-only) rejimida o'rnatilgan.
sudo ni ishlatishdan oldin sabab qaysi biri ekanini tekshiring:
ls -l -- <file>
ls -ld -- "$(dirname -- <file>)"
mount | grep -w "$(df --output=target -- <file> | tail -n 1)"
Agar faylni tahrirlash uchun haqiqatan ham yuqori huquq kerak bo'lsa, ochiq muharrirda saqlashga qayta-qayta urinmang: faylni sudo bilan qayta ochish xavfsizroq. Saqlanmagan o'zgarishlarni yo'qotmaslik uchun esa quyidagi usul bor:
Bu buyruq muharrirdagi matnni (buffer) sudo tee orqali xuddi shu faylga yozadi (Vim’da % — joriy fayl nomi). Bunda muharrirni qayta ishga tushirish va saqlanmagan o'zgarishlarni yo'qotish shart bo'lmaydi. Keyin, boshqa imtiyozli tahrirlardagi kabi, natijani cat bilan ko'ring yoki zaxira nusxa bilan diff qilib solishtiring.
Vim bilan mashq
vi ~/lab/editor/vim.conf ichida:
- Port qatorini topish uchun
/portni yozib,Enterni bosing. - Qator boshiga o'tish uchun
0ni bosing. 8080ga boring,cw9090ni yozing, so'ngEscni bosing.:set numberni bajaring.:wqni bajaring.
Tekshiring:
Faqat rejalashtirilgan qiymat farq qilishi kerak. Matn bilan ishlashga oid keyingi darslarda diff kabi vositalar yordamida bu farqni aniq ko'rasiz. Hozircha asosiy ish tartibi shu: zaxira nusxa olish, tahrirlash, ko'zdan kechirish va tekshirish.
Vim’ni xavfsiz mashq qilish uchun:
Agar vimtutor o'rnatilmagan bo'lsa, Vim yoki Vi ichidan :help orqali ichki yordamdan foydalaning.
Faqat o'qish uchun ko'rish
Kichik faylni faqat ko'rib chiqmoqchi bo'lsangiz, muharrir emas, ko'rish buyrug'idan foydalaning:
Faylni muharrirda faqat o'qish uchun ochmoqchi bo'lsangiz:
Faqat o'qish rejimi tasodifiy o'zgarishdan saqlaydi, lekin xavfsizlik himoyasi emas. Agar jarayonda faylga yozish huquqi bo'lsa, bu rejimni ko'pincha muharrirning ichidan bekor qilish mumkin. O'zgarishga mutlaqo yo'l qo'ymaslik kerak bo'lsa, cat, less yoki faylning nusxasidan foydalaning.
Swap fayllar va bir vaqtda tahrirlash
Agar fayl boshqa joyda ham ochiq bo'lsa yoki oldingi tahrirlash sessiyasi kutilmaganda uzilib qolgan bo'lsa, Vim swap fayl haqida ogohlantirishi mumkin. Swap faylni o'ylamasdan o'chirmang.
Bu ogohlantirish bir qatorli xabar emas, butun ekranni egallaydigan so'rov bo'lib, quyidagicha ko'rinadi:
E325: ATTENTION
Found a swap file by the name ".app.conf.swp"
owned by: admin dated: Tue Jul 29 10:15:03 2026
file name: ~admin/lab/editor/app.conf
modified: YES
user name: admin host name: web01
process ID: 18422
While opening file "app.conf"
dated: Tue Jul 29 10:12:40 2026
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r app.conf"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".app.conf.swp"
to avoid this message.
Swap file ".app.conf.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (D)elete it, (A)bort:
Harfni tanlashdan oldin (1) va (2) raqamli xatboshilarni o'qing: Vim ularda qaysi holatda bo'lishingiz mumkinligini tushuntiradi. Birinchisi — faylni boshqa dastur ham tahrirlayotgan bo'lishi mumkin; ikkinchisi — oldingi tahrirlash sessiyasi kutilmaganda uzilib qolgan. Oxirgi qatorda esa tanlash uchun variantlar berilgan:
O(Open Read-Only, faqat o'qish uchun ochish) — ishonchingiz komil bo'lmaganda eng xavfsiz tanlov. Faylni ko'rib chiqasiz, lekin unga yozmaysiz, shuning uchun boshqa sessiya bilan to'qnashuv bo'lmaydi.E(Edit anyway, baribir tahrirlash) — faylni boshqa jarayon yoki boshqa terminalda o'zingiz ochib turgan bo'lishingiz mumkinligini bilgan holda davom etasiz. Bunda ikki sessiya saqlash paytida bir-birining o'zgarishlarini bilinmay o'chirib yuborishi mumkin.R(Recover, tiklash) —vim -r <file>ni to'g'ridan-to'g'ri ishga tushirish bilan bir xil. Vim swap fayldagi o'zgarishlarni yangi buffer’ga tiklaydi. Shunda oldingi sessiya uzilib qolganda saqlanmay qolgan o'zgarishlarni ko'rib chiqib, qayta saqlay olasiz.D(Delete it, o'chirish) — faylni boshqa hech qanday faol sessiya ishlatmayotganini (psorqali yoki jamoadan so'rab) aniqlaganingizdan va tiklash uchun ma’lumot kerak emasligiga ishonch hosil qilganingizdan keyingina tanlang. Avval o'chirib, keyin surishtirsangiz, boshqa odamning saqlanmagan ishini butunlay yo'qotib qo'yishingiz mumkin.Q(Quit, chiqish) /A(Abort, to'xtatish) — hech narsaga tegmasdan orqaga chiqing va avval vaziyatni o'rganing.
Javob berishdan oldin tekshiring:
- Boshqa terminal hali ham faylni tahrirlayaptimi? (Shu xostda
ps -ef | grep -- "vi[m]* .*app.conf"ni bajaring yoki serverga kirish huquqi bor boshqa odamlardan so'rang.) - Oldingi sessiya saqlanmagan o'zgarishlar bilan uzilib qolganmi? So'rovdagi
process IDqatori sessiya qaysi jarayonga (PID) tegishli bo'lganini ko'rsatadi;ps -p <pid>esa shu jarayon hali mavjudligini ko'rsatadi. vi -r <file>bilan tiklash kerakmi?
Ishonchingiz bo'lmasa, tahrirlamasdan chiqing (Q). Eski swap faylni faqat uni hech qaysi muharrir ishlatmayotgani va tiklash uchun kerak emasligi aniq bo'lgandagina o'chiring.
Amaliy vaziyat: bitta konfiguratsiya qiymatini o'zgartirish
Muammo: xizmat portini 8080 dan 9090 ga o'zgartirish kerak. Bu xizmat haqiqiy emas, mashq uchun o'ylab topilgan, shuning uchun uni oddiy buyruq bilan shu kompyuterning o'zida tekshiramiz.
Fayl yo'lini o'zgaruvchiga yozing va zaxira nusxa oling:
config="$HOME/lab/editor/app.conf"
cp -a -- "$config" "$config.before-port-change"
cat "$config.before-port-change"
Nano yoki Vim’da faqat port qatorini tahrirlang.
Natijani tekshiring:
Kutiladigan tekshiruv natijasi:
Kerak bo'lsa, avvalgi holatga qaytaring:
Production’da oddiy grep tekshiruvi o'rniga haqiqiy tekshiruv vositasidan foydalaning: nginx -t, sshd -t, systemd-analyze verify, ilovaning konfiguratsiyani tekshirish buyrug'i yoki dasturning o'zi taqdim etadigan dry-run rejimi.
Keng tarqalgan xatolar
- Nano’dagi
^Okabi belgilarniCtrl+Otugmalarini bosish o'rniga harfma-harf yozib qo'yish. - Nano’da matnni o'zgartirgandan keyin saqlashni unutish.
- Vim’da hali Normal rejimda turib, matn yozishga urinish.
- Vim’da saqlanmagan o'zgarishlar bor paytda
:qni ishlatish; saqlash uchun:wq, bekor qilish uchun:q!ni ishlating. - Production fayllarini zaxira nusxasiz va tekshiruv buyrug'isiz tahrirlash.
- Boshqa faol sessiya bor-yo'qligini tekshirmasdan Vim’ning swap ogohlantirishlariga e’tibor bermaslik.
- Muharrirdagi faqat o'qish rejimi fayl ruxsatlari kabi himoya qiladi deb o'ylash.
Mashqlar
- Nano bilan
mode=testnimode=devga o'zgartiring, saqlang, chiqing vacatbilan tekshiring. - Zaxira nusxani tiklang, so'ng Vi yoki Vim bilan faqat
portqatorini o'zgartiring. - Faylni
viewbilan oching va muharrir faqat o'qish rejimini qanday ko'rsatishini aniqlang. - Agar
vimtutormavjud bo'lsa, uni ishga tushiring va kamida harakatlanish hamda matn kiritish bo'yicha dastlabki qismlarni tugating.
Mashqni bajardim deyish uchun: rejalashtirilgan bitta o'zgarishni kirita olishingiz, aynan nima o'zgarganini ko'rsata olishingiz va zaxira nusxadan faylni avvalgi holatiga qaytara olishingiz kerak.
Manbalar
- GNU Nano qo'llanmasi: https://www.nano-editor.org/dist/latest/nano.html
- Ubuntu
nano(1)qo'llanma sahifasi: https://manpages.ubuntu.com/manpages/noble/man1/nano.1.html - Vim hujjatlari ro'yxati: https://vimhelp.org/
- Vim’da birinchi qadamlar: https://vimhelp.org/usr_02.txt.html
- Ubuntu
vim(1)qo'llanma sahifasi: https://manpages.ubuntu.com/manpages/noble/man1/vim.1.html