Paket menejerlari — apt, dnf, snap

~12 daq · Linux · Paketlar va muhit

Muammodan boshlaylik

Windows da dastur o'rnatish: saytga kirish, .exe ni yuklab olish, "Next, Next, Finish", har bir dastur o'zicha yangilanadi (yoki yangilanmaydi). Saytni adashtirsangiz — virus.

Linux da:

sudo apt install nginx

Bir buyruq: rasmiy, tekshirilgan manbadan yuklab oladi, kerakli bog'liqliklarni o'zi o'rnatadi, keyin apt upgrade bilan barcha dasturlar bir vaqtda yangilanadi. Bu — paket menejeri. App Store ning dasturchilar uchun versiyasi — 1990-yillardan beri.


apt — Ubuntu va Debian

Asosiy buyruqlar

sudo apt update                  # paketlar ro'yxatini yangilash (hech narsa o'rnatmaydi!)
sudo apt upgrade                 # o'rnatilganlarni yangilash
sudo apt install nginx           # o'rnatish
sudo apt install git curl htop   # bir nechtasi
sudo apt remove nginx            # o'chirish (sozlamalar qoladi)
sudo apt purge nginx             # sozlamalari bilan o'chirish
sudo apt autoremove              # endi kerak bo'lmagan bog'liqliklarni o'chirish

[!INFO] apt update va apt upgrade — turli narsalar. update — "do'kon katalogini yangilash" (qaysi versiyalar mavjud). upgrade — haqiqiy yangilash. install dan oldin har doim update qiling — aks holda eski katalogdan eski versiya o'rnatilishi yoki "paket topilmadi" xatosi chiqishi mumkin.

Tipik birinchi buyruq yangi serverda:

sudo apt update && sudo apt upgrade -y

-y — "Davom etaymi? [Y/n]" savoliga avtomatik "ha". Skriptlarda va Dockerfile larda kerak.

Qidirish va ma'lumot

apt search "web server"          # qidirish
apt show nginx                   # batafsil: versiya, hajm, bog'liqliklar
apt list --installed             # o'rnatilganlar
apt list --installed | grep php  # o'rnatilgan PHP paketlari
apt list --upgradable            # yangilanishi mumkin bo'lganlar

Buyruq qaysi paketda?

htop
Command 'htop' not found, but can be installed with:
sudo apt install htop

Ubuntu o'zi aytadi. Yoki fayl bo'yicha:

dpkg -S /usr/bin/curl            # bu fayl qaysi paketdan

Paketlar qayerdan keladi: repozitoriyalar

apt paketlarni repozitoriyalardan — Ubuntu ning rasmiy serverlaridan yuklaydi. Ro'yxat:

cat /etc/apt/sources.list.d/ubuntu.sources
ls /etc/apt/sources.list.d/

Rasmiy repozitoriyadagi versiyalar barqaror, lekin ko'pincha eski. Masalan, Ubuntu 24.04 da Node.js 18 bo'lishi mumkin, siz esa 22 ni xohlaysiz.

Uchinchi tomon repozitoriyasi

Ko'p loyihalar o'z repozitoriyasini beradi. Masalan, Node.js (NodeSource):

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash -
sudo apt install -y nodejs
node -v

Docker, PostgreSQL, Nginx ning yangi versiyalari — xuddi shunday, rasmiy qo'llanmalarida.

[!WARNING] curl ... | sudo bash — internetdan skriptni root huquqi bilan ishga tushirish. Faqat rasmiy va ishonchli manbalardan (rasmiy hujjatlarda ko'rsatilgan URL). Shubha bo'lsa — avval skriptni yuklab, o'qing: curl -fsSL URL -o setup.sh && less setup.sh.

PPA — Ubuntu uchun shaxsiy repozitoriyalar:

sudo add-apt-repository ppa:ondrej/php     # PHP ning yangi versiyalari
sudo apt update
sudo apt install php8.4

dpkg — .deb fayllar

Ba'zi dasturlar .deb fayl sifatida tarqatiladi (Chrome, VS Code):

wget https://example.com/dastur.deb
sudo apt install ./dastur.deb          # bog'liqliklarni ham o'rnatadi

./ muhim — aks holda apt uni repozitoriyadan qidiradi. Past darajali dpkg -i bog'liqliklarni o'rnatmaydi — apt install ./... afzal.


Boshqa distributivlar

Distributiv Menejer O'rnatish Yangilash
Ubuntu, Debian apt apt install apt update && apt upgrade
Fedora, RHEL, Rocky dnf dnf install dnf upgrade
Alpine (Docker) apk apk add apk update && apk upgrade
Arch pacman pacman -S pacman -Syu
macOS brew brew install brew upgrade

Tushunchalar bir xil — faqat buyruq nomlari farq qiladi. Dockerfile larda apk add ni ko'rsangiz — bu Alpine.


snap va flatpak

snap (Ubuntu) — dastur barcha bog'liqliklari bilan bitta "paketda", tizimdan izolyatsiyalangan:

sudo snap install code --classic
snap list

Afzallik: eng yangi versiyalar, avtomatik yangilanish. Kamchilik: kattaroq, ba'zan sekinroq ishga tushadi. Serverlarda kamroq, ish stolida ko'proq ishlatiladi.


Til paket menejerlari

Har bir dasturlash tilining o'z menejeri bor — ular tizim paketlaridan alohida:

Til Menejer Misol
JavaScript npm, pnpm npm install express
Python pip, uv pip install fastapi
PHP composer composer require laravel/framework
Rust cargo cargo add serde

Qoida: tizim vositalari (nginx, git, curl) — apt dan; loyiha kutubxonalari — tilning menejeridan, loyiha ichiga.

[!WARNING] sudo pip install yoki sudo npm install -g dan qoching — tizim Python iga yoki Node iga aralashib, apt paketlarini buzishi mumkin. Python uchun — virtual muhit (python3 -m venv .venv), Node uchun — nvm yoki loyiha ichida npm install.


Avtomatik xavfsizlik yangilanishlari

Serverda xavfsizlik yamalarini qo'lda kuzatish qiyin. Ubuntu da:

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Endi xavfsizlik yangilanishlari har kuni avtomatik o'rnatiladi. Ba'zi yangilanishlar (yadro) qayta yuklashni talab qiladi:

cat /var/run/reboot-required 2>/dev/null

Nima uchun shunday?

Nima uchun Linux da dasturlar markazlashgan repozitoriyalardan o'rnatiladi, saytlardan emas?

Uch katta afzallik. Xavfsizlik: paketlar raqamli imzolangan — apt ularni tekshiradi, soxta yoki o'zgartirilgan paket o'rnatilmaydi. Bog'liqliklar: 50 ta dastur bitta openssl kutubxonasidan foydalanadi — u bir marta o'rnatiladi va bir marta yangilanadi; zaiflik topilsa, bitta apt upgrade hammasini tuzatadi. Takrorlanuvchanlik: apt install nginx git — har bir Ubuntu serverda bir xil natija, skriptga yoki Dockerfile ga yoziladi. Windows dagi "har dastur o'zicha" modeli bu uchalasini ham qiyinlashtiradi.


Xulosa

Eslab qoling:

  • sudo apt update — katalog; sudo apt upgrade — yangilash; avval doim update
  • apt install, remove, purge, autoremove
  • apt search, apt show, apt list --installed
  • Yangi versiyalar — rasmiy uchinchi tomon repozitoriyalari (NodeSource, Docker)
  • curl | sudo bash — faqat ishonchli manbadan
  • apt install ./fayl.deb
  • dnf (Fedora), apk (Alpine), brew (macOS) — xuddi shu g'oya
  • Til kutubxonalari — npm/pip/composer bilan, sudo siz
  • unattended-upgrades — avtomatik xavfsizlik yangilanishlari

Keyingi dars

30-dars: Muhit o'zgaruvchilari — PATH, export, .bashrc, alias