Tarkibga o'tish

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 ~/lab/editor/app.conf

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:

nano +2,1 ~/lab/editor/app.conf

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:

  1. port=8080 ni port=9090 ga o'zgartiring.
  2. mode so'zini qidiring.
  3. mode=test ni mode=staging ga o'zgartiring.
  4. Ctrl+O bilan saqlang, Enter bilan tasdiqlang, so'ng Ctrl+X bilan chiqing.

Shell’da tekshiring:

cat ~/lab/editor/app.conf

Kutiladigan mazmun:

server_name=demo
port=9090
mode=staging

Avvalgi holatga qaytarish (rollback):

cp -a ~/lab/editor/app.conf.bak ~/lab/editor/app.conf
cat ~/lab/editor/app.conf

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:

command -V vi
command -V vim
vi --version | head -n 1

Agar vim bo'lmasa, ushbu maqoladagi asosiy buyruqlar uchun vi dan foydalaning.

Faylning nusxasini yaratib, uni oching:

cp -a ~/lab/editor/app.conf.bak ~/lab/editor/vim.conf
vi ~/lab/editor/vim.conf

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, a yoki o tugmasi 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.

Normal -- i/a/o --> Insert
Insert -- Esc ----> Normal
Normal -- : ------> Command-line

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: :write buyrug'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:

E212: Can't open file for writing

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:

:w !sudo tee % > /dev/null

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:

  1. Port qatorini topish uchun /port ni yozib, Enter ni bosing.
  2. Qator boshiga o'tish uchun 0 ni bosing.
  3. 8080 ga boring, cw9090 ni yozing, so'ng Esc ni bosing.
  4. :set number ni bajaring.
  5. :wq ni bajaring.

Tekshiring:

cat ~/lab/editor/vim.conf
cat ~/lab/editor/app.conf.bak

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:

vimtutor

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:

cat ~/lab/editor/app.conf

Faylni muharrirda faqat o'qish uchun ochmoqchi bo'lsangiz:

view ~/lab/editor/app.conf
vi -R ~/lab/editor/app.conf

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 (ps orqali 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 ID qatori 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:

cat "$config"
grep -n '^port=[0-9][0-9]*$' "$config"

Kutiladigan tekshiruv natijasi:

2:port=9090

Kerak bo'lsa, avvalgi holatga qaytaring:

cp -a -- "$config.before-port-change" "$config"
cat "$config"

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 ^O kabi belgilarni Ctrl+O tugmalarini 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 :q ni 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

  1. Nano bilan mode=test ni mode=dev ga o'zgartiring, saqlang, chiqing va cat bilan tekshiring.
  2. Zaxira nusxani tiklang, so'ng Vi yoki Vim bilan faqat port qatorini o'zgartiring.
  3. Faylni view bilan oching va muharrir faqat o'qish rejimini qanday ko'rsatishini aniqlang.
  4. Agar vimtutor mavjud 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