Khi mình mới chuyển từ CentOS sang Ubuntu, mình mất khoảng 1 tuần để quen với hệ thống package management. Không phải vì apt khó — mà vì có quá nhiều lệnh trông giống nhau: apt, apt-get, apt-cache, dpkg… Cứ không biết cái nào “chuẩn”, cái nào là alias của cái nào.
Bài này mình giải thích thẳng vào vấn đề đó. Không phải “hướng dẫn A-Z cho người mới” — mà là giúp bạn hiểu bức tranh tổng thể để dùng đúng công cụ đúng lúc.
So sánh các công cụ quản lý package trên Ubuntu
Ubuntu không chỉ có một mà đến bốn công cụ chính. Mỗi cái có lý do tồn tại riêng:
1. dpkg — nền tảng của tất cả
dpkg là tầng thấp nhất, làm việc trực tiếp với file .deb. Nó cài đặt, gỡ bỏ, và truy vấn package đã cài. Hạn chế lớn nhất: không tự xử lý dependency. Thử cài package A mà cần B — dpkg báo lỗi rồi dừng, không tự đi tìm B về như apt làm.
2. apt-get — lớp bọc cũ, đáng tin cậy
apt-get sinh ra để giải quyết đúng cái hạn chế đó — tự động kéo dependency từ repository về. Lý do nó vẫn sống sót trong script đến tận bây giờ: output format cực kỳ ổn định, Canonical cam kết không thay đổi giữa các phiên bản. Mấy Dockerfile từ 2015 dùng apt-get vẫn build được ngày hôm nay.
3. apt — giao diện mới, thân thiện hơn
Ra mắt từ Ubuntu 16.04, apt được thiết kế để thay thế apt-get trong thao tác hàng ngày. Progress bar, màu sắc rõ hơn, và gộp luôn nhiều lệnh của apt-get + apt-cache vào một chỗ. Tiện để dùng tay, nhưng không nên dùng trong script vì output format không được cam kết ổn định.
4. snap — hướng đi khác hoàn toàn
snap là hệ thống riêng của Canonical. Mỗi package đóng gói cùng toàn bộ dependency vào một bundle độc lập, chạy trong sandbox và tự cập nhật. Nghe hay, nhưng giá phải trả là kích thước: snap chromium nặng khoảng 170MB, trong khi cài qua apt chỉ tốn ~80MB. Trên server production mình thường tránh snap vì cả hai lý do đó — nặng và khởi động chậm hơn rõ rệt.
Ưu nhược điểm từng công cụ
| Công cụ | Ưu điểm | Nhược điểm |
|---|---|---|
dpkg |
Cài trực tiếp file .deb local, truy vấn nhanh thông tin package | Không xử lý dependency, không kéo từ repo |
apt-get |
Output ổn định, backward-compatible, phù hợp script/CI | Output khó đọc hơn khi dùng tay |
apt |
Progress bar, gộp nhiều lệnh, tiện dùng tay | Output format không được cam kết ổn định |
snap |
Sandbox, auto-update, chạy được nhiều distro | Package nặng gấp 2x, khởi động chậm hơn |
Lúc mới dùng mình cứ tưởng tutorial dùng apt-get có nghĩa là apt sai. Không phải — cả hai đều đúng, chỉ khác ngữ cảnh nên dùng.
Chọn công cụ phù hợp với từng tình huống
Nguyên tắc mình đang theo, đơn giản thôi:
- Dùng hàng ngày trên terminal →
apt: Tiện, đẹp, đủ dùng. - Viết shell script, cron job, CI/CD →
apt-get: Output ổn định, không lo Canonical thay đổi format. - Cài file
.debtải về thủ công →dpkg -i: Sau đó chạyapt-get install -fđể fix dependency nếu cần. - Cài app GUI, cần version mới nhất hoặc sandbox →
snap: Nhưng trên server thì tránh.
Các lệnh apt thực tế thường dùng nhất
Cập nhật danh sách package
Trước khi cài bất cứ thứ gì, luôn chạy lệnh này trước:
sudo apt update
Lưu ý: apt update chỉ đồng bộ danh sách, không nâng cấp package nào cả. Muốn nâng cấp thì dùng:
# Nâng cấp tất cả package đang cài
sudo apt upgrade
# Nâng cấp và tự xử lý cả thêm/bỏ dependency nếu cần
sudo apt full-upgrade
Cài và gỡ package
# Cài một package
sudo apt install nginx
# Cài nhiều package cùng lúc
sudo apt install git curl wget build-essential
# Gỡ package nhưng giữ lại config
sudo apt remove nginx
# Gỡ package VÀ xóa luôn config — dùng khi muốn reset sạch
sudo apt purge nginx
# Xóa nốt các dependency không còn dùng nữa
sudo apt autoremove
Mình hay dùng purge thay remove khi gỡ service như nginx hay mysql. Lý do: nếu sau này cài lại, không muốn bị ảnh hưởng bởi config cũ còn sót.
Tìm kiếm và xem thông tin package
# Tìm package theo tên hoặc mô tả
apt search "web server"
# Xem thông tin chi tiết của một package
apt show nginx
# Xem package nào cung cấp một file/lệnh cụ thể
dpkg -S /usr/bin/curl
# Liệt kê tất cả package đã cài
dpkg -l
# Kiểm tra package cụ thể đã cài chưa, version bao nhiêu
dpkg -l | grep nginx
Cài file .deb local
Hay gặp nhất khi tải file .deb từ trang chủ — Google Chrome, VS Code, Slack…:
# Cài file .deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
# Nếu bị lỗi dependency, apt tự fix bằng lệnh này
sudo apt-get install -f
Quản lý repository
# Xem danh sách repository đang dùng
cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/
# Thêm PPA (Personal Package Archive)
sudo add-apt-repository ppa:ondrej/php
sudo apt update
# Xóa PPA
sudo add-apt-repository --remove ppa:ondrej/php
Một số lệnh hay dùng khác
# Xem lịch sử cài/gỡ package
cat /var/log/apt/history.log
# Giữ nguyên version, không cho tự động nâng cấp
sudo apt-mark hold nginx
# Bỏ hold
sudo apt-mark unhold nginx
# Xem package nào đang bị hold
apt-mark showhold
# Dọn cache apt — thường giải phóng được vài trăm MB
sudo apt clean
Một vài lưu ý thực tế từ kinh nghiệm dùng
Sau thời gian dùng Ubuntu cho cả server lẫn máy dev, có mấy điều mình ước biết sớm hơn:
- Luôn chạy
apt updatetrướcapt install— bỏ bước này hay gặp cài được package cũ hoặc “package not found” dù package đó có thật trên repo. - Thấy thông báo “The following packages were automatically installed and are no longer required”? Chạy
sudo apt autoremovecho gọn, không có gì phải lo. - Trong script automation, thêm
-yvàDEBIAN_FRONTEND=noninteractiveđể tắt mọi prompt tương tác:
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y nginx
- Muốn biết package nào đang chiếm nhiều dung lượng nhất:
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | tail -20
Nếu bạn đến từ CentOS/RHEL thì chuyển sang Ubuntu không khó. Nhớ một quy tắc là đủ: yum/dnf ≈ apt, còn rpm ≈ dpkg. Logic giống nhau, tên lệnh khác.

