02 β Linux server asoslari¶
β¬ οΈ Oldingi: 01 β DevOps nima va nega kerak Β· π README Β· Keyingi: 03 β Bash skripting va avtomatlashtirish β‘οΈ
Bu bobda: nega deyarli barcha serverlar Linux (Ubuntu)'da ishlashini va lokal kompyuteringizdan serverga
sshbilan qanday ulanishni o'rganamiz, Linux fayl tizimi ierarxiyasini (/etc,/var,/home,/opt,/usr,/tmp,/rootβ FHS) va absolyut/nisbiy yo'l farqini ko'ramiz, kundalik ish uchun eng kerakli buyruqlarni (ls,cd,cat/less/tail -f,cp/mv/rm,mkdir -p,find,grep,nano/vim) qo'lga olamiz, foydalanuvchi va guruh bilan ishlashni (whoami,sudo,adduser,usermod -aG, nega root'da ishlamaslik), fayl ruxsatlarini (rwx, sakkizlik755/644/600,chmod/chown/chmod +x), paket boshqaruvini (apt update && apt upgrade,apt install/remove/search), process boshqaruvini (ps aux,top/htop,kill,&/jobs),systemctlvajournalctlasoslarini hamda disk/xotirani kuzatishni (df -h,du -sh,free -h) muammodan yechimga olib boramiz.
Muammo¶
Tasavvur qiling: 01-bobda DevOps falsafasini o'qib, ruhlandingiz. Endi arzon VPS oldingiz, provayder sizga elektron pochtaga uchta narsa yubordi:
Brauzerda hech qanday "boshqaruv paneli" yo'q. Faqat shu uchta qator. Endi nima qilasiz? Bu serverga qanday "kirasiz"? Ichida fayllar qayerda turadi? Ilovangizni qayerga qo'yasiz? Va eng muhimi β qora ekranda kursor miltillab turibdi, har bir noto'g'ri buyruq butun serverni buzib qo'yishi mumkindek tuyuladi.
Yaxshi xabar: server β bu sizning kompyuteringizning "klaviaturasiz va monitorsiz" ukasi, xolos. U ham operatsion tizimda ishlaydi β deyarli har doim Linux'da. Bu bob sizni o'sha qora ekran bilan do'st qiladi: ulanishdan, fayllarni topishgacha, ruxsatlarni sozlashdan dastur o'rnatishgacha. Bob oxirida server sizga "begona" emas, "uy" bo'lib qoladi.
π Bu bob β poydevor. Docker, CI/CD, Nginx, Kubernetes β keyingi hamma narsa shu yerda o'rgangan buyruq va tushunchalar ustiga quriladi. Shoshilmang, har bir buyruqni o'zingiz tering.
Nega serverlar Linux'da ishlaydi¶
Lokalda Windows yoki macOS ishlatasiz β chunki unda brauzer, ofis dasturlari va chiroyli oyna kerak. Lekin serverning vazifasi boshqacha: u xizmatni (sayt, API, ma'lumotlar bazasi) yillab, uzluksiz, monitorsiz ishlatib turishi kerak. Aynan shu ish uchun Linux yutuqli:
- Bepul va ochiq. Litsenziya to'lovi yo'q β minglab serverni bemalal ishga tushirasiz.
- Yengil. Grafik oyna yo'q (server'da
Desktopo'rnatilmaydi) β butun quvvat ilovangizga ketadi. - Barqaror. Yillab qayta yuklamasdan ishlaydi.
- Skriptlanadi. Hamma narsa buyruq orqali bajariladi β demak avtomatlashtirsa bo'ladi (DevOps'ning yuragi shu).
Linux'ning ko'plab "ta'mlari" (distributiv) bor: Ubuntu, Debian, CentOS/Rocky, Alpine va boshqalar. Biz Ubuntu Server'ni tanlaymiz β chunki u eng keng tarqalgan, hujjatlari boy va internetdagi ko'p qo'llanma aynan unga mo'ljallangan.
βΉοΈ Joriy versiya: Ubuntu 26.04 LTS ("Resolute Raccoon", 2026-04-23 chiqdi). LTS β Long Term Support, uzoq muddat (5+ yil) yangilanish oladi degani; production uchun aynan LTS oling. Oldingi 24.04 LTS ham hali to'liq qo'llab-quvvatlanadi β agar provayder unisini bersa, kitobdagi hamma narsa bir xil ishlaydi.
π‘ Docker (06-bobdan) ham aslida Linux ustida quriladi. Linux'ni bilish β keyin konteyner ichida nima bo'layotganini tushunish demak. Bu bob bekorga "poydevor" deb atalmagan.
Serverga SSH bilan ulanish¶
Lokal kompyuteringizdan masofadagi serverga ulanish uchun SSH (Secure Shell β xavfsiz qobiq) ishlatiladi. SSH β bu sizning terminalingiz bilan serverning terminali o'rtasida shifrlangan tunnel: siz buyruq yozasiz, u serverda bajariladi, natija qaytib keladi. Hamma narsa shifrlangan, hech kim eshitolmaydi.
Quyidagi diagramma oqimni ko'rsatadi: lokal mashinangiz SSH mijozi orqali internet bo'ylab serverning 22-portiga ulanadi.
SSH mijozi macOS, Linux va zamonaviy Windows 10/11'da allaqachon o'rnatilgan (ssh buyrug'i terminalda ishlaydi). Ulanish formati oddiy:
Yuqoridagi misol uchun:
Birinchi marta ulanganda SSH server'ning "barmoq izini" tasdiqlashingizni so'raydi β bu normal, yes deb javob bering:
The authenticity of host '203.0.113.42' can't be established.
ED25519 key fingerprint is SHA256:Xy9...aB2.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
So'ng parolni so'raydi (terminalda parol terilganda hech narsa ko'rinmaydi β bu xavfsizlik, davom etavering). To'g'ri kiritsangiz, server sizni kutib oladi:
Mana, endi siz serverdasiz. Oxiridagi # belgisi β siz root (eng kuchli foydalanuvchi) ekaningizni bildiradi.
β οΈ Parol bilan ulanish β vaqtinchalik yechim. U xavfsiz emas: parol o'g'irlanishi yoki "brute-force" qilinishi mumkin. To'g'ri usul β SSH kalit (parolsiz, kriptografik juftlik). Uni va serverni mustahkamlashni 04-bobda ("Tarmoq va server xavfsizligi") chuqur ko'ramiz. Hozircha parol bilan kirib, asoslarni o'rganamiz.
Serverdan chiqish uchun:
Fayl tizimi: hamma narsa daraxtning bir shoxida¶
Windows'da disklar C:\, D:\ bo'lib ajraladi. Linux'da bunaqa emas: bitta daraxt bor, uning ildizi / (slash) deb ataladi. Hamma narsa β fayllar, papkalar, hatto qurilmalar β shu yagona daraxtning shoxlarida turadi.
Bu daraxtning tuzilishi tasodifiy emas β u FHS (Filesystem Hierarchy Standard β fayl tizimi ierarxiyasi standarti) bo'yicha tartiblangan. Har bir papkaning aniq vazifasi bor:
| Yo'l | Vazifasi | DevOps uchun nega muhim |
|---|---|---|
/etc |
Konfiguratsiya fayllari (sozlamalar) | Nginx, SSH, systemd sozlamalari shu yerda |
/var |
O'zgaruvchan ma'lumot: loglar, bazalar | /var/log β server loglari shu yerda |
/home |
Oddiy foydalanuvchilar uy papkalari | Ilovangiz ko'pincha /home/deploy/... da turadi |
/root |
root foydalanuvchining uy papkasi |
/home ichida emas, alohida |
/opt |
Qo'shimcha (uchinchi tomon) dasturlar | Ba'zi ilovalar shu yerga o'rnatiladi |
/usr |
O'rnatilgan dasturlar va kutubxonalar | /usr/bin da deyarli barcha buyruqlar |
/tmp |
Vaqtinchalik fayllar (qayta yuklashda tozalanadi) | Vaqtinchalik yuklash, build keshi uchun |
/bin, /sbin |
Asosiy tizim buyruqlari | ls, cp kabi buyruqlar joyi |
π Asosiy qoida: sozlama kerakmi β /etc'ga qara; log kerakmi β /var/log'ga qara; ilovam qayerda β odatda /home'da yoki /opt'da. Bu uchta yo'lni yodda tutsangiz, serverda adashmaysiz.
Absolyut vs nisbiy yo'l¶
Yo'lni ikki xil ko'rsatish mumkin:
- Absolyut yo'l β
/dan boshlanadi, har doim aynan bitta joyni bildiradi:/var/log/nginx/access.log. Qayerda turishingizdan qat'i nazar ishlaydi. - Nisbiy yo'l β hozir turgan papkangizga nisbatan:
log/app.log(joriy papka ichidagilogpapkasi)..β joriy papka,..β bir pog'ona yuqori,~β uy papkangiz.
cd /var/log # absolyut: aniq /var/log ga boramiz
cd nginx # nisbiy: /var/log/nginx ga (hozirgi joydan)
cd .. # bir pog'ona yuqori: /var/log ga qaytamiz
cd ~ # uy papkasiga (root uchun /root, deploy uchun /home/deploy)
π‘ Adashsangiz, pwd (print working directory) yozing β u qaysi papkada turganingizni absolyut yo'l bilan aytadi. Yangi terminalda eng birinchi refleksingiz pwd bo'lsin.
Kundalik buyruqlar: navigatsiya va fayllar¶
Endi serverda harakatlanaylik. Quyidagi buyruqlar β sizning kunlik nonu tuzingiz.
Qayerdaman va nima bor:
pwd # qaysi papkadaman?
ls # papkadagi fayllar ro'yxati
ls -la # batafsil: yashirin fayllar (.) ham, ruxsatlar ham, hajm ham
cd /etc/nginx # papkaga kirish
cd # uy papkasiga qaytish (argumentsiz cd ~ ga teng)
ls -la natijasi shunday ko'rinadi (haqiqiy Ubuntu serverdan):
total 20
drwxr-xr-x 4 root root 4096 Jun 13 16:59 .
drwxr-xr-x 1 root root 4096 Jun 13 16:59 ..
-rw------- 1 root root 49 Jun 13 16:59 .env
drwxr-xr-x 2 root root 4096 Jun 13 16:59 log
drwxr-xr-x 2 root root 4096 Jun 13 16:59 skriptlar
Bu jadvalning ustunlarini hozircha tanang: birinchi ustun (drwxr-xr-x) β ruxsatlar (pastda chuqur ko'ramiz), root root β egasi va guruhi, 4096 β hajm baytda, oxiri β nom. d bilan boshlansa β papka, - bilan β oddiy fayl.
Fayl ichini ko'rish:
cat /etc/hostname # butun faylni ekranga to'kadi (kichik fayl uchun)
less /var/log/syslog # uzun faylni sahifalab ko'rish (q bilan chiqish)
tail -n 20 app.log # oxirgi 20 qatorni
tail -f /var/log/nginx/access.log # JONLI kuzatish: yangi qatorlar real vaqtda oqib chiqadi
β οΈ tail -f (follow) β DevOps'ning eng sevimli buyruqlaridan biri. U faylni yopmaydi, balki yangi yozuvlarni real vaqtda ko'rsatib turadi. Loglarni jonli kuzatish uchun ajoyib. Chiqish uchun Ctrl+C.
Fayl va papka boshqaruvi:
mkdir loyiha # bitta papka yaratish
mkdir -p loyiha/log/2026 # -p: butun zanjirni (yo'q oraliq papkalarni ham) yaratadi
cp manba.txt nusxa.txt # nusxa ko'chirish
cp -r papka1 papka2 # -r: papkani ichidagisi bilan ko'chirish
mv eski.txt yangi.txt # ko'chirish YOKI nomini o'zgartirish
rm fayl.txt # faylni o'chirish
rm -r papka # papkani ichidagisi bilan o'chirish
β οΈ rm'da Recycle Bin yo'q. O'chirilgan fayl butunlay yo'qoladi. Ayniqsa rm -rf / kabi buyruqlardan ehtiyot bo'ling β u butun serverni o'chiradi. Hech qachon rm -rf ni o'ylamasdan, ayniqsa o'zgaruvchi bilan (rm -rf $DIR/) yozmang.
Topish va izlash:
find /home -name "*.sh" # /home ichidagi barcha .sh fayllarni topadi
find /var/log -name "*.log" # barcha log fayllarni
grep "ERROR" app.log # fayl ichida "ERROR" so'zi bor qatorlarni topadi
grep -r "TODO" . # joriy papkadan (rekursiv) qidirish
grep β DevOps'da loglardan xatolikni qidirishning asosiy quroli. Masalan:
Matnni tahrirlash: serverda fayl ochib tahrirlash kerak bo'ladi (masalan Nginx sozlamasi). Ikki muharrir bor:
nanoβ boshlovchi uchun.nano fayl.confbilan ochiladi, oddiy matn muharriri kabi yozasiz,Ctrl+Osaqlash,Ctrl+Xchiqish (pastda ko'rsatma turadi).vimβ kuchli, lekin o'rganish kerak.vim fayl.confbilan ochiladi;ibilan yozish rejimi,Escbilan chiqish,:wqsaqlab chiqish,:q!saqlamasdan chiqish.
π‘ Boshida nano ishlating β u sodda. vim zo'r, lekin avval undan "qanday chiqishni" bilib oling (Esc keyin :q!) β bu eng mashhur "qopqonlardan" biri.
Foydalanuvchi va guruh: nega root'da ishlamaslik kerak¶
Server bilan tanishganda siz root bo'lasiz. root β bu Linux'dagi "xudo": hamma narsani o'chirishi, o'zgartirishi, har qanday faylga tegishi mumkin. Aynan shu β xavf.
β οΈ Nega root'da kundalik ishlamaslik kerak? root bo'lib bitta xato buyruq (masalan noto'g'ri rm -rf) butun serverni o'ldiradi β hech kim sizni to'xtatmaydi. Agar dasturingiz buzilsa va u root bo'lib ishlasa, hujumchi butun serverni egallaydi. Eng yaxshi amaliyot: oddiy foydalanuvchi yarating, unga kerak bo'lganda sudo bilan vaqtincha kuch bering.
sudo (superuser do) β bitta buyruqni vaqtincha root huquqi bilan bajarish:
sudo apt update # bu buyruq root huquqi bilan ishga tushadi
sudo nano /etc/hosts # himoyalangan faylni tahrirlash uchun
Yangi foydalanuvchi yaratish (illustrativ β o'z serveringizda, root bo'lib turib bajaring):
Bu buyruq parol va bir nechta savol so'raydi, so'ng /home/deploy uy papkasini yaratadi. Endi bu foydalanuvchiga sudo huquqini berish uchun uni sudo guruhiga qo'shamiz:
π usermod -aG ni yaxshilab tushuning: -a (append, qo'shish) va -G (group, guruh) β birga ishlatilishi shart. Faqat -G yozsangiz, foydalanuvchi avvalgi barcha guruhlaridan chiqib, faqat shu guruhda qoladi (xavfli xato). -aG esa qo'shadi, eskilarini saqlaydi.
Endi keyingi safar serverga oddiy foydalanuvchi sifatida ulanasiz:
Bu rejimda buyruq oxiridagi belgi # emas, $ bo'ladi β siz oddiy foydalanuvchi ekaningizni bildiradi. root kuchi kerak bo'lganda β sudo qo'shasiz.
Ruxsatlar: kim nima qila oladi¶
Linux'da har bir fayl uchun uch toifa odamga uch xil huquq beriladi. Toifalar: egasi (owner), guruh (group), boshqalar (others). Huquqlar: o'qish (r β read), yozish (w β write), bajarish (x β execute).
ls -l'dagi -rwxr-xr-x qatorini ana shu ko'z bilan o'qing. Quyidagi diagramma uni ochib beradi.
-rwxr-xr-x ni uchga bo'lib o'qing (birinchi - β fayl turi, papka bo'lsa d):
| Toifa | Belgilar | Ma'nosi |
|---|---|---|
| Egasi | rwx |
o'qiydi, yozadi, bajaradi |
| Guruh | r-x |
o'qiydi, bajaradi (yozolmaydi) |
| Boshqalar | r-x |
o'qiydi, bajaradi (yozolmaydi) |
Sakkizlik (octal) raqamlar¶
Har bir huquqning soni bor: r=4, w=2, x=1. Bir toifa uchun ularni qo'shasiz:
rwx= 4+2+1 = 7r-x= 4+0+1 = 5rw-= 4+2+0 = 6r--= 4+0+0 = 4---= 0 = 0
Demak rwxr-xr-x = 755. Eng ko'p uchraydigan uchta qiymat:
| Octal | Belgi | Qachon ishlatiladi |
|---|---|---|
755 |
rwxr-xr-x |
Skript va papkalar (egasi to'liq, boshqalar o'qiydi+bajaradi) |
644 |
rw-r--r-- |
Oddiy fayllar (egasi yozadi, boshqalar faqat o'qiydi) |
600 |
rw------- |
Maxfiy fayllar: .env, SSH kalit (faqat egasi o'qiydi/yozadi) |
chmod va chown¶
chmod (change mode) β ruxsatlarni o'zgartiradi. chown (change owner) β egasini o'zgartiradi.
chmod 644 .env # ruxsatni aniq 644 ga o'rnatish
chmod 600 .env # maxfiy faylga
chmod +x deploy.sh # "bajarish" huquqini qo'shish (skriptni ishga tushiriladigan qilish)
chown deploy:deploy app.log # egasini va guruhini deploy ga o'tkazish
chown -R deploy:deploy /opt/app # -R: papka ichidagi hamma narsani
Quyidagi misollar haqiqiy Ubuntu serverda ishga tushirilgan va natijalari aynan ko'chirilgan:
π Sir: maxfiy fayllarni (.env, SSH kalitlar, parollar) doim 600 qiling. SSH kalitlar 644 (boshqalar o'qiy oladigan) bo'lsa, SSH ularni rad etadi ("permissions too open" xatosi). Bu β eng ko'p uchraydigan SSH muammosi.
Paket boshqaruvi: dasturlarni o'rnatish¶
Linux'da dastur o'rnatish uchun .exe yuklab olmaysiz. Buning o'rniga paket menejeri bor β Ubuntu'da bu apt (Advanced Package Tool). U dasturlarni rasmiy ombordan (repository) yuklab, bog'liqliklari bilan o'rnatadi. Worry-free.
Quyidagi buyruqlar root huquqini talab qiladi β shuning uchun sudo bilan (illustrativ β o'z serveringizda):
sudo apt update # paketlar ro'yxatini yangilash (har doim avval shuni)
sudo apt upgrade # o'rnatilgan paketlarni yangi versiyaga ko'tarish
sudo apt install nginx # nginx ni o'rnatish
sudo apt install -y htop curl git # -y: barcha savolga avtomatik "ha"
sudo apt remove nginx # o'chirish (sozlamalar qoladi)
sudo apt purge nginx # o'chirish + sozlamalar bilan
sudo apt search nginx # paket qidirish
π Oltin qoida: har doim avval apt update, keyin apt install. update paketlar ro'yxatini (qaysi versiya bor) yangilaydi; upgrade esa dasturlarni o'zini yangilaydi. Ikkalasini birga ko'pincha shunday yozishadi:
Bu yerda && β "birinchi muvaffaqiyatli tugasa, ikkinchisini ham bajar" degani (bu mantiqni 03-bobda chuqur ko'ramiz).
π‘ Yangi server olganingizdan keyin birinchi ishingiz β sudo apt update && sudo apt upgrade -y bilan tizimni yangilash. Bu xavfsizlik yamoqlarini ham o'rnatadi.
Process boshqaruvi: nima ishlab turibdi¶
Serverdagi har bir ishlab turgan dastur β process (jarayon). Har birining PID (process ID) raqami bor. Ularni ko'rish va boshqarish kerak.
ps aux # barcha ishlab turgan processlar ro'yxati
ps aux | grep nginx # faqat nginx bilan bog'liqlarini (quvur orqali grep ga uzatamiz)
top # JONLI ko'rinish: CPU/xotira yuki real vaqtda (q bilan chiqish)
htop # top ning chiroyli, qulay versiyasi (apt install htop kerak)
ps aux natijasi shunday ustunlarni beradi (illustrativ server chiqishi):
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 168120 11500 ? Ss 09:00 0:01 /sbin/init
www-data 842 0.3 1.2 145200 49800 ? S 09:05 0:12 nginx: worker process
deploy 1337 1.1 3.4 998200 138400 ? Sl 09:10 2:45 node /opt/app/server.js
PID ni bilib, processni to'xtatish mumkin:
kill 1337 # processga "muloyim" to'xtash signalini yuborish (u tozalanib chiqadi)
kill -9 1337 # MAJBURIY o'ldirish (process javob bermay qolsa, oxirgi chora)
β οΈ kill -9 (SIGKILL) β processni darhol, hech narsa saqlamasdan o'ldiradi. Avval oddiy kill (SIGTERM) ni sinab ko'ring β u dasturga "yig'ishtirib chiq" deydi. -9 faqat process qotib qolganda.
Foreground va background. Buyruq odatda terminalni "band" qiladi (foreground). Uni orqa fonga (background) o'tkazib, terminalni bo'shatish mumkin:
./uzun-vazifa.sh & # & β buyruqni orqa fonda ishga tushiradi
jobs # shu terminaldagi background vazifalar ro'yxati
fg # oxirgi background vazifani foreground ga qaytarish
π‘ & bilan ishga tushirilgan vazifa terminalni yopganda to'xtaydi. Server'da ilovani doimiy ishlatish uchun & yetarli emas β buning uchun systemd ishlatiladi (pastda asoslarini, 19-bobda to'liq ko'ramiz).
systemd: xizmatlarni boshqarish (asos)¶
Serverdagi doimiy xizmatlar (Nginx, ma'lumotlar bazasi, sizning ilovangiz) systemd orqali boshqariladi. U xizmatni avtomatik ishga tushiradi, qulasa qayta ko'taradi, server qayta yuklanganda yana yoqadi. Boshqaruvchi buyruq β systemctl (illustrativ β o'z serveringizda):
sudo systemctl status nginx # holatini ko'rish (ishlayaptimi, xato bormi)
sudo systemctl start nginx # ishga tushirish
sudo systemctl stop nginx # to'xtatish
sudo systemctl restart nginx # qayta ishga tushirish
sudo systemctl enable nginx # server qayta yuklanganda AVTOMATIK yoqilsin
sudo systemctl disable nginx # avtomatik yoqishni o'chirish
systemctl status nginx taxminan shunday ko'rinadi (illustrativ):
β nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Sat 2026-06-13 09:05:11 UTC; 2h ago
Main PID: 842 (nginx)
Yashil active (running) β xizmat sog'lom ishlayapti. enabled β qayta yuklashda o'zi yonadi.
Xizmat loglarini ko'rish uchun journalctl:
sudo journalctl -u nginx # nginx xizmatining barcha loglari
sudo journalctl -u nginx -f # JONLI kuzatish (tail -f kabi)
sudo journalctl -u nginx --since "1 hour ago" # oxirgi 1 soatlik
βΉοΈ -u (unit) β qaysi xizmatning logini ko'rsatishni bildiradi. systemd va journalctl'ni 19-bobda to'liq, o'z xizmat faylingizni (.service unit) yozishgacha o'rganamiz. Hozircha shu uchta buyruqni biling β ular bilan har qanday xizmatni tekshira olasiz.
Disk va xotirani kuzatish¶
Server "to'lib" qolsa (disk yoki RAM tugasa) ilova ishdan chiqadi. Buni oldindan ko'rish uchun uch buyruq:
df -h # disk bo'sh joyi (-h: odam o'qiydigan ko'rinish: GB, MB)
du -sh /var/log # ma'lum papka qancha joy egallayotgani (-s: yig'indi, -h: o'qiluvchan)
free -h # operativ xotira (RAM) holati
df -h natijasi (illustrativ server chiqishi):
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 12G 26G 32% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
Use% ustuni 90%'dan oshsa β diqqat, joy bo'shatish vaqti keldi (eski loglarni, keraksiz Docker image'larni tozalash). du -sh esa qaysi papka "semirib" ketganini topadi:
free -h esa RAM holatini ko'rsatadi (illustrativ):
total used free shared buff/cache available
Mem: 2.0Gi 801Mi 412Mi 6.9Mi 786Mi 1.0Gi
Swap: 1.0Gi 0B 1.0Gi
π‘ available ustuniga qarang β bu haqiqatan bo'sh, ilovaga berib bo'ladigan xotira (free ustuni emas, chunki Linux bo'sh RAM'ni keshga ishlatadi β bu normal). available doim 0'ga yaqinlashsa, server "swap"'ga o'tib sekinlashadi yoki ilovani o'ldiradi.
π DevOps'ning oltin odati: muammo chiqsa, avval shu uchtasini tekshiring β df -h (disk to'lganmi?), free -h (RAM tugaganmi?), journalctl -u xizmat (xato logda nima deyapti?). Ko'p "sirli" nosozlik aslida to'lgan disk yoki tugagan xotira bo'lib chiqadi.
Xulosa¶
Bu bobda serverning qora ekranini "uy"ga aylantirdik. Endi siz: ssh bilan ulanasiz, fayl tizimida (/etc, /var, /home) adashmaysiz, fayllarni ko'chirasiz/topasiz/tahrirlaysiz, ruxsatlarni (755/644/600) tushunasiz, apt bilan dastur o'rnatasiz, ishlab turgan processlarni ko'rasiz va systemctl/journalctl bilan xizmatlarni tekshirasiz. Bu β keyingi hamma narsaning poydevori.
Keyingi bobda shu buyruqlarni bitta faylga jamlab, takrorlanadigan vazifalarni avtomatlashtirishni β ya'ni Bash skriptingni o'rganamiz. Aynan shu joydan "qo'lda qilish" o'rnini "skript qiladi" egallay boshlaydi.
02-bob mashqlari¶
π‘ Bu mashqlarni iloji boricha haqiqiy serverda yoki lokal Linux/WSL'da bajaring. Server buyruqlari (
apt,adduser,systemctl) uchun arzon VPS yoki lokal virtual mashina oling β ko'pi haqiqiy server talab qiladi.
Oson¶
- Serveringizga (yoki lokal Linux/WSL'ga)
ssh foydalanuvchi@manzilbilan ulaning. Ulanib bo'libwhoamivapwdyozing β siz kimsiz va qaysi papkadasiz? ls -labilan uy papkangizdagi barcha fayllarni (yashirinlari ham) ko'ring. Nechta yashirin fayl (.bilan boshlanadigan) bor?cd /etcbilan o'ting,pwdbilan tasdiqlang,lsbilan ichidagi sozlama fayllarini ko'ring, so'ngcd ~bilan uyga qayting.mkdir -p mashq/birinchi/ikkinchiyozing vals -R mashqbilan butun zanjir yaratilganini tasdiqlang.df -hvafree -hni ishga tushiring. Diskning necha foizi band? RAM'dan qanchaavailable?
O'rta¶
- Bitta matn fayl yarating (
nano salom.txt), ichiga ikki qator yozing, saqlang (Ctrl+O,Ctrl+X). So'ngcat salom.txtbilan tarkibini ko'ring.
Yechim
nano salom.txt
# nano ochiladi β yozing:
# Birinchi qator
# Ikkinchi qator
# Ctrl+O bosib Enter (saqlash), keyin Ctrl+X (chiqish)
cat salom.txt
Kutilgan chiqish:
nano β eng sodda muharrir; pastdagi ^O, ^X belgilari Ctrl tugmasini bildiradi.
salom.txtfaylidan nusxa oling (cp), nusxaning nomini o'zgartiring (mv), so'ng asl faylni o'chiring (rm). Har qadamdan keyinlsbilan tekshiring.
Yechim
cp salom.txt nusxa.txt # nusxa olish
ls # ikkala fayl ko'rinadi
mv nusxa.txt yangi.txt # nomini o'zgartirish
ls # endi salom.txt va yangi.txt
rm salom.txt # aslini o'chirish
ls # faqat yangi.txt qoldi
mv β bir vaqtning o'zida ham ko'chirish, ham nomini o'zgartirish buyrug'i (yangi nom bo'lsa β qayta nomlaydi).
ls -lchiqishidan biror faylning ruxsat qatorini (masalan-rw-r--r--) toping va uni sakkizlik raqamga (octal) aylantiring. Hisoblashni izohlab yozing.
Yechim
-rw-r--r-- ni uchga bo'lamiz (birinchi - β fayl turi):
- Egasi:
rw-= 4+2+0 = 6 - Guruh:
r--= 4+0+0 = 4 - Boshqalar:
r--= 4+0+0 = 4
Demak rw-r--r-- = 644 β oddiy fayllar uchun standart ruxsat. Tekshirish: chmod 644 fayl.txt keyin ls -l fayl.txt aynan -rw-r--r-- berishi kerak.
- Bitta log faylini (yoki o'zingiz
ERRORso'zli qatorlar bor fayl yarating)grepbilan filtrlang: faqatERRORbor qatorlarni chiqaring.
Yechim
# Sinov fayli yaratamiz:
printf '2026-06-13 INFO ishga tushdi\n2026-06-13 ERROR ulanish uzildi\n2026-06-13 ERROR disk toldi\n' > app.log
grep "ERROR" app.log
Kutilgan chiqish:
grep "namuna" fayl β fayl ichidan namunaga mos qatorlarni chiqaradi; loglardan xato qidirishning asosiy usuli.
ps auxni ishga tushiring va unigrepga uzatib (ps aux | grep bash), faqatbashbilan bog'liq processlarni ko'ring.
Yechim
| (quvur, pipe) β birinchi buyruqning chiqishini ikkinchisining kirishiga uzatadi. Bu yerda ps aux barcha processlarni beradi, grep bash esa ulardan faqat bash bor qatorlarni ajratadi. (Pipe'ni keyingi 03-bobda chuqurroq ko'ramiz.)
Qiyin¶
- Yangi oddiy foydalanuvchi yarating va unga
sudohuquqini bering. So'ng o'sha foydalanuvchi sifatida qayta ulaning. (Illustrativ β o'z serveringizda root bo'lib bajaring.)
Yechim
# root bo'lib turib:
adduser deploy
# parol va savollarga javob bering
usermod -aG sudo deploy # sudo guruhiga QO'SHISH (-aG juda muhim!)
# tekshirish:
groups deploy # ro'yxatda "sudo" ko'rinishi kerak
# chiqib, yangi foydalanuvchi bilan ulanish:
exit
ssh deploy@SERVER_MANZILI
Endi prompt $ bilan tugaydi (root emas). root kuchi kerak bo'lganda buyruq oldiga sudo qo'shasiz. -aG dagi -a (append) eskidagi guruhlarni saqlaydi β uni unutsangiz, foydalanuvchi boshqa guruhlardan chiqib ketadi.
- Bir papka va undagi barcha fayllarning egasini
deployfoydalanuvchiga, ruxsatini esa skript uchun755, maxfiy.envuchun600qilib sozlang. (Illustrativ β o'z serveringizda yoki lokal Linux'da.)
Yechim
sudo mkdir -p /opt/app
sudo cp -r ./loyiha/* /opt/app/ # ilovani joylash (namuna)
# butun papka egasini deploy ga o'tkazish:
sudo chown -R deploy:deploy /opt/app
# skriptni bajariladigan qilish:
sudo chmod 755 /opt/app/deploy.sh
# maxfiy faylni faqat egaga ko'rinadigan qilish:
sudo chmod 600 /opt/app/.env
# tekshirish:
ls -l /opt/app
Kutilgan natija: deploy.sh β -rwxr-xr-x (755), .env β -rw------- (600), egasi deploy deploy. -R bayrog'i chown/chmod'ni papka ichidagi hamma narsaga rekursiv qo'llaydi.
htopni o'rnating va undan eng ko'p CPU yoki xotira ishlatayotgan processni toping. (Illustrativ β o'z serveringizda.)
Yechim
htop interaktiv: CPU/xotira yuki rangli ustunlarda ko'rinadi. F6 (yoki >) bilan saralash ustunini tanlang β PERCENT_CPU yoki PERCENT_MEM ni tanlasangiz, eng ochko'z process yuqoriga chiqadi. F10 yoki q bilan chiqish. top (o'rnatishsiz) ham xuddi shuni soddaroq qiladi.
- Nginx'ni o'rnating, holatini tekshiring, qayta ishga tushiring, so'ng uning oxirgi loglarini ko'ring. (Illustrativ β o'z serveringizda.)
Yechim
sudo apt update
sudo apt install -y nginx
sudo systemctl status nginx # active (running) ko'rinishi kerak
sudo systemctl restart nginx # qayta ishga tushirish
sudo systemctl enable nginx # server qayta yuklanganda avtomatik yonsin
sudo journalctl -u nginx --since "10 min ago" # oxirgi 10 daqiqalik log
status yashil active (running) bersa β ishlayapti. Brauzerda serverning IP manzilini ochsangiz, Nginx'ning "Welcome" sahifasi ko'rinadi. systemd va journalctl'ni 19-bobda chuqur ko'ramiz.
- Serveringizda qaysi papka eng ko'p joy egallayotganini toping:
/varichinidu -shbilan tekshirib, eng "og'ir" papkani aniqlang. (Illustrativ β o'z serveringizda.)
Yechim
Bu /var ostidagi har bir papkaning hajmini chiqaradi. Odatda eng og'iri /var/log (loglar) yoki Docker o'rnatilgan bo'lsa /var/lib/docker. Toza serverga qarab, masalan:
Eng og'irini topib (du -sh /var/log/* bilan ichiga kirib), keraksiz eski loglarni tozalash mumkin. df -h bilan birga ishlatib, disk to'lishining sababini aniqlaysiz.
- Tasavvur qiling: ilovangiz ishlamay qoldi. Faqat uchta buyruq bilan dastlabki tashxis qo'ying. Qaysi buyruqlarni, qanday tartibda ishlatasiz va har biri nimani aniqlaydi β izohlab yozing.
Yechim
Dastlabki tashxis uchun uch buyruq, shu tartibda:
# 1. Xizmat umuman ishlayaptimi?
sudo systemctl status myapp
# -> active (running) emas, failed bo'lsa β xizmatning o'zi qulagan
# 2. Logda aniq qanday xato?
sudo journalctl -u myapp --since "30 min ago"
# -> xato matni (port band, fayl topilmadi, ruxsat yo'q...) shu yerda
# 3. Resurs tugamadimi?
df -h # disk to'lib qolgan bo'lishi mumkin (yozolmaydi)
free -h # RAM tugab, ilova "o'ldirilgan" bo'lishi mumkin
Tartib mantiqiy: avval xizmat holatini (ishlayaptimi), keyin sababini (logda nima), so'ng resursni (disk/RAM tugamadimi) tekshiramiz. Ko'p "sirli" nosozlik aslida to'lgan disk yoki tugagan xotira bo'lib chiqadi β shuning uchun df -h/free -h doim ro'yxatda bo'lsin.
β¬ οΈ Oldingi: 01 β DevOps nima va nega kerak Β· π README Β· Keyingi: 03 β Bash skripting va avtomatlashtirish β‘οΈ