15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
09.10.2024

apt срещу yum: Управление на пакети в Linux, обяснено за системни администратори

Управлението на пакети в Linux е механизмът, чрез който софтуерът се инсталира, актуализира, конфигурира и премахва в Linux система. apt (Advanced Package Tool) управлява `.deb` пакети в дистрибуции, базирани на Debian, като Ubuntu и Linux Mint, докато yum (Yellowdog Updater Modified) управлява `.rpm` пакети в системи, базирани на Red Hat, включително CentOS и RHEL. И двата инструмента абстрахират сложността на разрешаването на зависимости, взаимодействието с хранилища и проверката на целостта на пакетите — но са архитектурно различни и не са взаимозаменяеми.

Разбирането кой инструмент управлява вашата система не е незадължително знание. То пряко влияе върху начина, по който осигурявате сървъри, автоматизирате внедрявания, пишете скриптове за управление на конфигурации (Ansible, Chef, Puppet) и поддържате цикли за прилагане на корекции за сигурност в производствени среди.

Какво е мениджър на пакети в Linux

A мениджърът на пакети е колекция от софтуерни инструменти, която автоматизира пълния жизнен цикъл на софтуера в Linux система: извличане на пакети от отдалечени хранилища, проверка на криптографски подписи, разрешаване и инсталиране на вериги от зависимости, изпълнение на скриптове преди/след инсталация и регистриране на инсталацията в локална база данни с пакети.

Базата данни с пакети е критична и често пренебрегвана. В системи, базирани на Debian, тя се намира на `/var/lib/dpkg/`. В системи, базирани на RPM, тя се съхранява в `/var/lib/rpm/`. И двете бази данни поддържат авторитетен запис за това какво е инсталирано, в каква версия и с каква собственост на файловете — което ги прави гръбнакът на системния одит и операциите за връщане към предишно състояние.

Мениджърите на пакети взаимодействат с хранилища — отдалечени сървъри, хостващи подбрани колекции от компилирани, подписани пакети. Метаданните на хранилището (списъци с пакети, контролни суми, GPG ключове) се синхронизират локално преди да се извърши каквато и да е инсталация, поради което `apt update` или `yum check-update` трябва да предхождат командите за инсталация в автоматизирани скриптове.

apt: Advanced Package Tool за системи, базирани на Debian

apt е интерфейсът от командния ред от високо ниво за управление на пакети в Debian, Ubuntu, Linux Mint, Pop!_OS и всички техни производни. Той работи върху инструмента от по-ниско ниво `dpkg`, който обработва действителната инсталация на `.deb` пакети. Мислете за `dpkg` като за двигателя, а за `apt` като за интелигентния шофьор, който знае откъде да вземе гориво и в какъв ред да го изгори.

Инструментариумът apt в детайли

Екосистемата apt включва няколко изпълними файла, които служат за различни цели:

  • `apt` — съвременният, препоръчителен интерактивен CLI (въведен в Ubuntu 14.04 / Debian 8)
  • `apt-get` — по-старият, скриптируем бекенд; предпочитан в shell скриптове поради стабилния си изходен формат
  • `apt-cache` — заявява локалния кеш на пакети за метаданни, описания и графики на зависимости
  • `dpkg` — инсталаторът на пакети от ниско ниво; използва се директно при инсталиране на локален `.deb` файл с `dpkg -i package.deb`
  • `apt-mark` — маркира пакети като задържани, автоматично инсталирани или ръчно инсталирани

Основни apt команди с технически контекст

Актуализиране на локалния индекс на пакети:

“`bash

sudo apt update

“`

Това извлича актуализирани метаданни от всички конфигурирани хранилища в `/etc/apt/sources.list` и `/etc/apt/sources.list.d/`. Не инсталира или надгражда нищо. Изпълнението на тази команда преди всяка операция по инсталиране е задължително — пропускането й означава, че може да се разрешат остарели версии на пакети или да се пропуснат корекции за сигурност.

Надграждане на инсталираните пакети:

“`bash

sudo apt upgrade

“`

Надгражда всички пакети, за които съществува по-нова версия, но няма да премахне нито един от текущо инсталираните пакети или да инсталира нов пакет за задоволяване на зависимост. За по-агресивно надграждане, което обработва промени в зависимостите:

“`bash

sudo apt full-upgrade

“`

`full-upgrade` (по-рано `dist-upgrade`) ще инсталира нови зависимости и ще премахне конфликтни пакети при необходимост. Използвайте го с внимание в производствени системи.

Инсталиране на пакет:

“`bash

sudo apt install package_name

“`

За инсталиране на множество пакети в една транзакция:

“`bash

sudo apt install nginx curl git

“`

Комбинирането на инсталации в една команда е по-ефективно, защото apt разрешава пълния граф на зависимостите веднъж, а не многократно.

Премахване на пакет (запазване на конфигурационните файлове):

“`bash

sudo apt remove package_name

“`

Пълно премахване на пакет (премахване на изпълними файлове и конфигурационни файлове):

“`bash

sudo apt purge package_name

“`

Винаги предпочитайте `purge` пред `remove` при извеждане от експлоатация на услуга. Останалите конфигурационни файлове от `remove` могат да причинят неочаквано поведение, ако пакетът бъде инсталиран отново по-късно.

Премахване на осиротели зависимости:

“`bash

sudo apt autoremove

“`

Това често се пренебрегва и води до натрупване на ненужни зависимости с течение на времето. Включете го в редовния си работен процес по поддръжка.

Търсене на пакет:

“`bash

apt search package_name

“`

Преглед на детайли за пакет преди инсталиране:

“`bash

apt show package_name

“`

Това разкрива версията на пакета, инсталирания размер, зависимостите и поддържащия — полезно преди да се изтегли непознат пакет.

Задържане на пакет на текущата му версия (критично за стабилността на производствената среда):

“`bash

sudo apt-mark hold package_name

“`

Това предотвратява `apt upgrade` от докосване на пакета. Необходимо е, когато работите с конкретна версия на ядрото или фиксирана версия на приложение.

Реален пример за използване на apt: Осигуряване на уеб сървър в Ubuntu

“`bash

sudo apt update

sudo apt install -y nginx certbot python3-certbot-nginx

sudo systemctl enable nginx

sudo systemctl start nginx

“`

Флагът `-y` потиска подканата за потвърждение, което е необходимо за неинтерактивни скриптове за осигуряване. Винаги го комбинирайте с `apt update` в същия блок на скрипта, за да гарантирате, че инсталирате от актуални метаданни на хранилището.

yum: Yellowdog Updater Modified за системи, базирани на RPM

yum е мениджърът на пакети за Red Hat Enterprise Linux (RHEL), CentOS 7 и по-стари версии на Fedora. Той управлява `.rpm` пакети и работи върху RPM базата данни. Подобно на apt над dpkg, yum осигурява разрешаване на зависимости и управление на хранилища върху суровата команда `rpm`.

Критична архитектурна бележка: В CentOS 8+, RHEL 8+ и всички съвременни версии на Fedora, yum е заменен от dnf (Dandified YUM). В тези системи командата `yum` обикновено е символна връзка или псевдоним към `dnf`. Ако управлявате система с RHEL/CentOS 8 или по-нова, трябва да пишете команди `dnf`. Синтаксисът на командите е до голяма степен съвместим, но dnf предлага значително по-добро разрешаване на зависимости, по-чист API и поддръжка на модулни хранилища.

Основни yum команди с технически контекст

Проверка за налични актуализации без прилагането им:

“`bash

sudo yum check-update

“`

Това е особено полезно в автоматизирани скриптове за наблюдение, за да се открие дали системата изостава с корекциите, без да се задейства надграждане.

Прилагане на всички налични актуализации:

“`bash

sudo yum update

“`

За разлика от `apt upgrade`, `yum update` ще инсталира и нови пакети с зависимости при необходимост. Няма отделен еквивалент на `full-upgrade` — yum се справя с това по подразбиране.

Инсталиране на пакет:

“`bash

sudo yum install package_name

“`

Премахване на пакет:

“`bash

sudo yum remove package_name

“`

Забележка: операцията за премахване на yum понякога може да се разпространи и да премахне зависими пакети. Винаги преглеждайте резюмето на транзакцията преди потвърждение.

Търсене на пакет:

“`bash

yum search package_name

“`

Преглед на информация за пакет:

“`bash

yum info package_name

“`

Списък на инсталираните пакети:

“`bash

yum list installed

“`

Изчистване на локалния кеш:

“`bash

sudo yum clean all

“`

Изчиства кешираните данни на пакети и метаданни. Изпълнете това, когато подозирате, че остарели данни от хранилището причиняват грешки при разрешаване.

Задържане на пакет на текущата му версия:

“`bash

sudo yum versionlock add package_name

“`

Изисква плъгина `yum-plugin-versionlock`. Еквивалентът на `apt-mark hold`, това е от съществено значение за поддържане на стабилни производствени среди, където конкретна версия на пакет не трябва да бъде засегната от автоматизирани актуализации.

Реален пример за използване на yum: Внедряване на Apache в CentOS 7

“`bash

sudo yum install -y httpd

sudo systemctl enable httpd

sudo systemctl start httpd

sudo firewall-cmd –permanent –add-service=http

sudo firewall-cmd –reload

“`

Честа грешка е инсталирането на Apache и забравянето да се отвори защитната стена. В системи CentOS/RHEL, `firewalld` е активна по подразбиране и ще блокира мълчаливо HTTP трафика дори ако услугата работи.

apt срещу yum: Пряко сравнение

Функцияapt (Debian/Ubuntu)yum / dnf (RHEL/CentOS/Fedora)
Формат на пакета`.deb``.rpm`
Основен инструмент`dpkg``rpm`
Основни дистрибуцииDebian, Ubuntu, Mint, Pop!_OSRHEL, CentOS, Fedora, AlmaLinux, Rocky Linux
Наследник / съвременен CLI`apt` (замени `apt-get` за интерактивна употреба)`dnf` (замени `yum` в RHEL 8+)
Разрешаване на зависимостиАвтоматично, обработва конфликтиАвтоматично; dnf е по-надежден от yum
Конфигурация на хранилище`/etc/apt/sources.list`, `/etc/apt/sources.list.d/``/etc/yum.repos.d/*.repo`
Механизъм за задържане на пакети`apt-mark hold``yum versionlock` (изисква плъгин)
Инсталиране на локален пакет`dpkg -i file.deb``rpm -i file.rpm` или `yum localinstall`
Управление на кеша`apt clean`, `apt autoclean``yum clean all`
Премахване на осиротели пакети`apt autoremove``yum autoremove` (dnf се справя по-добре с това)
История на транзакциитеОграниченаПълна история на транзакциите с възможност за връщане назад чрез `yum history`
Модулни потоциНе се поддържат нативноПоддържат се в dnf (Application Streams)
Проверка на GPG подписДаДа
Флаг за скриптиране`-y` (неинтерактивен)`-y` (неинтерактивен)

dnf: Съвременният наследник на yum

Ако управлявате система с RHEL 8+, CentOS Stream, AlmaLinux, Rocky Linux или Fedora, dnf е вашият мениджър на пакети. Преходът от yum към dnf не е козметичен — dnf разрешава редица дългогодишни архитектурни проблеми в yum:

  • Разрешаване на зависимости: dnf използва библиотеката `libsolv`, която е значително по-бърза и по-точна от разрешителя на yum
  • Стабилност на API: dnf предоставя стабилен Python API за скриптиране и автоматизация
  • Модулни потоци: dnf поддържа Application Streams, позволявайки на множество версии на един и същи софтуер (напр. PHP 7.4 и PHP 8.1) да съществуват едновременно в хранилищата
  • Връщане на транзакции: `dnf history undo <id>` ви позволява да върнете конкретна транзакция — възможност без пряк еквивалент в apt

Ключови dnf команди, които се различават от yum:

“`bash

Install a module stream (e.g., PHP 8.1)

sudo dnf module enable php:8.1

sudo dnf install php

Roll back the last transaction

sudo dnf history undo last

Check which package provides a specific file

sudo dnf provides /usr/bin/python3

“`

Управление на хранилища: Критично оперативно умение

И apt, и yum/dnf са толкова полезни, колкото хранилищата, за които са конфигурирани. Неправилно конфигурираните или ненадеждни хранилища представляват значителен риск за сигурността.

В Debian/Ubuntu, добавете хранилище на трета страна по безопасен начин:

“`bash

Import the GPG key

curl -fsSL https://example.com/gpg.key | sudo gpg –dearmor -o /usr/share/keyrings/example-archive-keyring.gpg

Add the repository with key reference

echo "deb [signed-by=/usr/share/keyrings/example-archive-keyring.gpg] https://repo.example.com/apt stable main" | sudo tee /etc/apt/sources.list.d/example.list

sudo apt update

“`

В RHEL/CentOS, добавете хранилище:

“`bash

sudo yum-config-manager –add-repo https://repo.example.com/centos/example.repo

Or manually create /etc/yum.repos.d/example.repo

“`

Принцип на сигурност: Никога не добавяйте хранилище, без да проверите независимо неговия GPG ключ. Компрометирано хранилище може да изпрати злонамерени пакети, които ще бъдат инсталирани с root привилегии.

Избор на правилния мениджър на пакети за вашата сървърна среда

Мениджърът на пакети, който използвате, се определя от вашата Linux дистрибуция — вие не избирате apt или yum независимо. Това, което избирате, е вашата дистрибуция, и това решение има последствия за наличността на пакети, корпоративните договори за поддръжка, честотата на корекции за сигурност и съвместимостта с инструменти.

  • Ubuntu LTS (apt): Най-добрият избор за общи VPS Хостинг натоварвания, уеб сървъри и среди за разработчици. Версиите с дългосрочна поддръжка получават 5 години актуализации за сигурност, разширяеми до 10 с Ubuntu Pro.
  • RHEL / AlmaLinux / Rocky Linux (dnf): Стандартът за корпоративни производствени среди, особено при работа на Dedicated Сървъри, изискващи сертифицирани софтуерни стекове, рамки за съответствие (PCI-DSS, HIPAA) или внедрявания на приложения, поддържани от ISV.
  • Debian Stable (apt): Изключително консервативни версии на пакети, което го прави идеален за сървъри, където стабилността е приоритет пред най-новия софтуер. Широко използван за дългосрочно работещи бази данни и пощенски сървъри.
  • CentOS Stream / Fedora (dnf): Подходящ за среди за разработка и тестване, където искате да следите промените в upstream RHEL преди да попаднат в стабилни версии.

При внедряване на контролен панел като cPanel, основният мениджър на пакети е от съществено значение. cPanel официално поддържа AlmaLinux, Rocky Linux и CloudLinux — всички базирани на dnf. Ако използвате VPS с cPanel, ще работите в dnf среда при съвременни внедрявания.

За среди, където имате нужда от графичен или уеб-базиран интерфейс за управление на пакети и конфигурация на сървъра, без да се налага да използвате командния ред, разгледайте VPS Контролни панели, които абстрахират управлението на пакети в потребителски интерфейс, като същевременно използват apt или dnf под капака.

Укрепване на сигурността чрез управление на пакети

Мениджърите на пакети са основна повърхност за атаки при атаки по веригата на доставки. Тези практики са задължителни за всеки сървър, достъпен от интернет:

  • Активирайте автоматични актуализации за сигурност — В Ubuntu: пакетът `unattended-upgrades`. В RHEL/CentOS: `dnf-automatic` с `apply_updates = yes` в `/etc/dnf/automatic.conf`.
  • Проверявайте GPG подписи — Никога не деактивирайте проверката на GPG (`–nogpgcheck` в yum/dnf или `–allow-unauthenticated` в apt) извън изолирани лабораторни среди.
  • Редовно одитирайте инсталираните пакети — Използвайте `dpkg -l` или `rpm -qa` за генериране на пълен манифест на пакетите. Сравнявайте го с известна добра базова линия.
  • Премахвайте ненужни пакети — Всеки инсталиран пакет е повърхност за атака. Изпълнявайте `apt autoremove` или `dnf autoremove` след основни внедрявания.
  • Фиксирайте критични пакети — Използвайте `apt-mark hold` или `dnf versionlock` за предотвратяване на нежелани надграждания на пакети като ядрото, OpenSSL или двигатели на бази данни в производствени системи.

Ако управлявате пощенски сървър или хоствате имейл инфраструктура, поддържането на пакети като Postfix, Dovecot и техните TLS зависимости актуални е особено критично. Комбинирайте стриктното управление на пакети с правилно конфигурирани SSL Сертификати за поддържане на криптирана транспортна сигурност. По същия начин, средите за уеб хостинг, управлявани чрез платформи за Споделен Уеб Хостинг, се възползват от поддържането на основната сигурност на пакетите от хостинг доставчика, но разбирането на слоя с пакети остава ценно за отстраняване на грешки и персонализирана конфигурация.

Практическа матрица за вземане на решения и основни изводи

Преди да изпълните каквато и да е команда за управление на пакети в производствена система, преминете през този контролен списък:

Контролен списък преди операция:

  • Потвърдете коя дистрибуция и версия използвате: `cat /etc/os-release`
  • Потвърдете правилния мениджър на пакети: `which apt` или `which dnf` или `which yum`
  • В системи с apt: винаги изпълнявайте `sudo apt update` преди `apt install` или `apt upgrade`
  • В системи с yum/dnf: `sudo yum check-update` или `sudo dnf check-update` преди надграждания
  • Прегледайте резюмето на транзакцията преди потвърждаване на операция по инсталиране или премахване
  • За производствени сървъри: тествайте надграждания на пакети първо в тестова среда
  • След основни надграждания: проверете статуса на услугите с `systemctl status <service>`
  • След премахване на пакети: изпълнете `apt autoremove` или `dnf autoremove` за почистване на осиротели пакети

Архитектурни решения:

  • Използвайте `apt full-upgrade` вместо `apt upgrade` само когато разбирате и приемате, че пакети могат да бъдат премахнати
  • Използвайте `dnf` вместо `yum` в системи с RHEL 8 / CentOS 8 или по-нови
  • Използвайте `apt-get` (не `apt`) в shell скриптове и CI/CD тръбопроводи за стабилен, разбираем изход
  • Използвайте `yum versionlock` или `apt-mark hold` преди автоматизиран тръбопровод за актуализации да засегне производствен сървър
  • Никога не добавяйте хранилища на трети страни, без да импортирате и проверявате техните GPG ключове

ЧЗВ

Каква е разликата между apt и apt-get?

`apt` е съвременната, потребителски ориентирана команда, въведена за обединяване на `apt-get` и `apt-cache` в един инструмент с по-чист изход и лента за напредък. `apt-get` остава наличен и се предпочита в скриптове, тъй като форматът на изхода му е гарантирано стабилен между версиите. За интерактивна употреба в терминала, `apt` е текущият стандарт.

Мога ли да използвам apt на CentOS или RHEL сървър?

Не. apt е изключително за системи, базирани на Debian, и управлява `.deb` пакети. CentOS и RHEL използват RPM формата на пакети, управляван от yum или dnf. Форматите на пакети и базите данни са архитектурно несъвместими — няма слой за конвертиране.

Какъв е еквивалентът на apt autoremove в yum?

`sudo yum autoremove` или `sudo dnf autoremove` премахва пакети, инсталирани като зависимости, но вече ненужни за нито един изрично инсталиран пакет. Реализацията в dnf е по-надеждна от наследствената версия в yum.

Как да предотвратя надграждането на конкретен пакет от apt или yum?

В системи с apt: `sudo apt-mark hold package_name`. В системи с yum/dnf: инсталирайте плъгина `yum-plugin-versionlock` и изпълнете `sudo yum versionlock add package_name`, или в dnf: `sudo dnf versionlock add package_name`. И двата механизма оцеляват при команди `upgrade` и `update` до изричното им освобождаване.

Актуален ли е yum през 2024 г.?

За системи с CentOS 7 и RHEL 7, все още в производство, да — yum остава мениджърът на пакети. Въпреки това, CentOS 7 достигна края на жизнения си цикъл през юни 2024 г. Всяка система, все още работеща с CentOS 7, трябва да бъде мигрирана към AlmaLinux 8/9 или Rocky Linux 8/9, и двете от които използват dnf. Писането на нови скриптове за автоматизация, насочени изключително към yum, вече не е препоръчително.

15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало