Tại Sao Package Manager Quan Trọng Hơn Bạn Nghĩ
SSH vào một server Linux mới và công cụ đầu tiên bạn sẽ dùng tới là package manager. Nó cài phần mềm, giải quyết dependency và giữ hệ thống luôn được cập nhật. Vấn đề với người mới: các distro khác nhau đi kèm với các package manager khác nhau, và các lệnh không dùng chéo được.
Nếu bạn đã từng gõ apt install nginx trên máy CentOS và thắc mắc tại sao lại thất bại, bạn đã gặp phải rào cản này rồi. Hướng dẫn này đề cập đến bốn package manager phổ biến nhất — apt, yum, dnf và pacman — để bạn biết chính xác nên dùng cái nào trên bất kỳ distro nào bạn làm việc.
Package Manager Nào Dùng Cho Distro Nào?
- apt — Debian, Ubuntu, Linux Mint, Pop!_OS
- yum — CentOS 7, RHEL 7, Fedora phiên bản cũ
- dnf — Fedora, CentOS 8+, RHEL 8+, AlmaLinux, Rocky Linux
- pacman — Arch Linux, Manjaro, EndeavourOS
Các định dạng package cũng khác nhau: các distro dựa trên Debian dùng file .deb, các distro dựa trên Red Hat dùng file .rpm, còn Arch dùng .pkg.tar.zst. Package manager trừu tượng hóa tất cả điều đó — bạn chạy một lệnh và nó tự xử lý phần còn lại.
Cài Đặt: Đưa Package Vào Hệ Thống
Cùng một thao tác nhưng trông khác nhau trên mỗi distro. Khi đã nhận ra quy luật, việc chuyển đổi giữa các hệ thống sẽ bớt vất vả hơn nhiều.
Cài Đặt Package
# apt (Debian/Ubuntu)
sudo apt update && sudo apt install nginx
# yum (CentOS 7 / RHEL 7)
sudo yum install nginx
# dnf (Fedora / CentOS 8+ / AlmaLinux)
sudo dnf install nginx
# pacman (Arch Linux)
sudo pacman -Syu nginx
Một thói quen đáng hình thành với apt: luôn chạy apt update trước khi cài đặt. Bỏ qua bước này và package index có thể đã cũ — bạn có thể cài phiên bản lỗi thời, hoặc gặp lỗi dependency mà không rõ nguyên nhân.
dnf tự động xử lý bước đó. Nó làm mới metadata trước khi cài đặt, đây là lý do chính khiến hầu hết mọi người thích dùng nó hơn yum hiện nay.
Lưu ý lệnh pacman ở trên dùng -Syu, không phải chỉ -Sy. Trên Arch, luôn nâng cấp toàn bộ hệ thống trước khi cài package mới. Làm mới database mà không nâng cấp tạo ra tình huống nâng cấp một phần có thể gây lỗi theo những cách không rõ ràng.
Gỡ Cài Đặt Package
# apt
sudo apt remove nginx
# Để xóa cả các file cấu hình còn sót lại:
sudo apt purge nginx
# yum / dnf
sudo yum remove nginx
sudo dnf remove nginx
# pacman
sudo pacman -R nginx
# Xóa cùng với các dependency không dùng nữa:
sudo pacman -Rs nginx
Sự khác biệt giữa apt purge và apt remove khiến nhiều người nhầm lẫn. remove giữ lại các file cấu hình trên đĩa; purge xóa chúng hoàn toàn. Trên server production Ubuntu 22.04, tôi đã chuyển sang dùng purge làm mặc định khi xóa các service cũ. Các file cấu hình từ package đã xóa âm thầm tích lũy — sau vài tháng bảo trì thông thường, các config mồ côi tăng lên nhanh hơn bạn nghĩ.
Nâng Cấp Tất Cả Package
# apt
sudo apt update && sudo apt upgrade
# Nâng cấp toàn diện (xử lý các thay đổi dependency):
sudo apt full-upgrade
# yum
sudo yum update
# dnf
sudo dnf upgrade
# pacman
sudo pacman -Syu
pacman -Syu của Arch thực hiện nâng cấp toàn bộ hệ thống rolling-release. Chạy thường xuyên — để hệ thống Arch không đồng bộ với repo là đang tự rước vào rắc rối. Nâng cấp một phần có thể gây lỗi theo những cách khó truy vết.
Các hệ thống Ubuntu và RHEL thận trọng hơn. Việc nâng cấp được thực hiện theo giai đoạn và có thể dự đoán trước, giúp chúng an toàn hơn cho các server mà bạn không thể theo dõi liên tục.
Cấu Hình: Tinh Chỉnh Cách Package Manager Hoạt Động
Cấu hình mặc định đủ dùng cho hầu hết trường hợp, nhưng biết vị trí các file cấu hình rất hữu ích khi có sự cố — hoặc khi bạn cần lấy package từ repository của bên thứ ba.
Cấu Hình apt (Debian/Ubuntu)
Các repository được định nghĩa trong /etc/apt/sources.list và các file riêng lẻ trong /etc/apt/sources.list.d/. Thêm PPA là tùy chỉnh phổ biến nhất trên Ubuntu:
# Thêm một PPA
sudo add-apt-repository ppa:deadsnakes/python3.12
sudo apt update
# Xem tất cả repo đã cấu hình
cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/
Cần giữ nguyên một package ở phiên bản hiện tại và không cho nó tự động nâng cấp? Dùng apt-mark hold:
# Giữ nguyên package ở phiên bản hiện tại
sudo apt-mark hold nginx
# Bỏ giữ sau này
sudo apt-mark unhold nginx
Cấu Hình dnf (Fedora/RHEL/AlmaLinux)
File cấu hình chính nằm tại /etc/dnf/dnf.conf. Các repository nằm trong /etc/yum.repos.d/ dưới dạng file .repo. Một số tùy chọn đáng bật lên khi cài mới:
# /etc/dnf/dnf.conf — các tùy chọn hữu ích
[main]
fastestmirror=True
keepcache=True
max_parallel_downloads=10
Cài EPEL (Extra Packages for Enterprise Linux) gần như luôn là việc đầu tiên tôi làm trên server AlmaLinux hoặc Rocky Linux mới — nó bổ sung hàng nghìn package không có trong repo mặc định:
# Trên AlmaLinux / Rocky Linux / RHEL
sudo dnf install epel-release
sudo dnf update
Cấu Hình pacman (Arch Linux)
Arch lưu cấu hình tại /etc/pacman.conf. Các tùy chỉnh thông thường bao gồm bật repo multilib cho phần mềm 32-bit, hoặc cài đặt AUR helper. yay là cái được sử dụng rộng rãi nhất:
# Cài đặt yay (AUR helper) — thực hiện với user thường, không phải root
git clone https://aur.archlinux.org/yay.git
cd yay && makepkg -si
# Sau đó dùng yay giống pacman, nhưng cả cho AUR package
yay -S google-chrome
AUR là điểm hút lớn nhất của Arch đối với người dùng desktop. Nó bao gồm một loạt package do cộng đồng duy trì — phần mềm mà bạn đơn giản không tìm thấy trong repo chính thức của Debian hay Fedora.
Kiểm Tra & Giám Sát: Giữ Hệ Thống Sạch và Dễ Kiểm Soát
Cài package chỉ mất vài giây. Thách thức liên tục là biết những gì thực sự có trên hệ thống, phát hiện các package mồ côi trước khi chúng chồng chất, và xác minh rằng không có gì bị hỏng âm thầm.
Tìm Kiếm và Kiểm Tra Package
# Tìm kiếm package theo tên
apt search nginx
dnf search nginx
yum search nginx
pacman -Ss nginx
# Hiển thị thông tin chi tiết về một package
apt show nginx
dnf info nginx
pacman -Si nginx
# Liệt kê tất cả package đã cài đặt
dpkg --get-selections # Debian/Ubuntu
rpm -qa # RHEL/CentOS/Fedora
pacman -Q # Arch
Tìm và Xóa Package Mồ Côi
Xóa một phần mềm nhưng các dependency được kéo vào cùng không phải lúc nào cũng bị xóa theo. Các package thừa đó lãng phí dung lượng và đôi khi gây nhầm lẫn trong các lần nâng cấp sau.
# apt — xóa các package được cài như dependency mà không còn cần thiết
sudo apt autoremove
# dnf
sudo dnf autoremove
# pacman — liệt kê package mồ côi
pacman -Qdt
# Xóa chúng
sudo pacman -Rns $(pacman -Qtdq)
Trên server production Ubuntu 22.04 của tôi, chỉ một lần chạy apt autoremove sau khi dọn dẹp phiên bản lớn đã lấy lại gần 400MB dung lượng đĩa. Trên VPS mà storage tốn tiền, loại bảo trì thường xuyên này rất đáng làm.
Kiểm Tra Tính Toàn Vẹn Package
# Kiểm tra tính toàn vẹn các RPM package đã cài (hệ thống yum/dnf)
rpm -Va
# Kiểm tra một package cụ thể
rpm -V nginx
# Trên Debian/Ubuntu, cài lại để khôi phục các file bị hỏng
sudo apt --reinstall install nginx
# Trên Arch, kiểm tra các file của package
pacman -Qk nginx
Xem Lịch Sử và Log Package
Có sự cố xảy ra và bạn cần biết điều gì đã thay đổi. Log package là nơi đầu tiên cần xem.
# Lịch sử apt
cat /var/log/apt/history.log
# Lịch sử giao dịch dnf
dnf history
dnf history info 5 # Chi tiết về giao dịch số 5
dnf history undo 5 # Quay lại giao dịch đó
# Log của pacman
cat /var/log/pacman.log | tail -50
dnf history undo thực sự bị đánh giá thấp hơn mức xứng đáng. Một bản cập nhật package làm hỏng gì đó trong stack của bạn? Quay lại đúng giao dịch đó — không cần phải tự tìm xem trước đây bạn đang dùng phiên bản nào. Tôi đã dùng lệnh này hai lần để khôi phục sau lần nâng cấp PHP bị lỗi trên máy CentOS 8. Không có downtime cả hai lần.
Bảng Tham Khảo Nhanh
| Tác vụ | apt | dnf / yum | pacman |
|---|---|---|---|
| Cập nhật index | apt update | dnf check-update | pacman -Sy |
| Cài đặt | apt install pkg | dnf install pkg | pacman -S pkg |
| Gỡ cài đặt | apt remove pkg | dnf remove pkg | pacman -R pkg |
| Nâng cấp tất cả | apt upgrade | dnf upgrade | pacman -Syu |
| Tìm kiếm | apt search pkg | dnf search pkg | pacman -Ss pkg |
| Thông tin package | apt show pkg | dnf info pkg | pacman -Si pkg |
| Xóa package mồ côi | apt autoremove | dnf autoremove | pacman -Rns $(pacman -Qtdq) |
| Xem lịch sử | /var/log/apt/history.log | dnf history | /var/log/pacman.log |
Thực Ra Bạn Nên Dùng Cái Nào?
Bạn không thực sự chọn — distro quyết định. Nhưng mỗi công cụ có phong cách riêng biệt:
- apt ổn định và có thể dự đoán. Đúng thứ bạn cần trên server mà sự bất ngờ là điều không hay.
- dnf có lịch sử giao dịch và khả năng rollback tốt nhất. Lựa chọn ưu tiên của tôi trên enterprise Linux.
- yum về cơ bản đã bị khai tử. Nếu bạn vẫn đang chạy hệ thống dùng nó, hãy lên kế hoạch migration khi có cơ hội.
- pacman nhanh, và AUR làm nó tuyệt vời cho desktop. Rolling release có nghĩa là bạn phải luôn cập nhật — không lý tưởng cho server ít bảo trì.
Khi các lệnh đã thành phản xạ, việc chuyển đổi giữa các distro không còn cảm giác như bắt đầu lại từ đầu. Các khái niệm đều giống nhau ở cả bốn — repo, package, dependency, dọn dẹp. Chỉ có cú pháp thay đổi.

