Hầu hết các hệ điều hành giống Unix hiện đại đều cung cấp một cơ chế tập trung để tìm và cài đặt phần mềm. Phần mềm thường được phân phối dưới dạng package, được lưu trữ trong các repository (kho lưu trữ). Việc xử lý các gói được gọi là quản lý gói (package management). Các gói cung cấp các thành phần cốt lõi của hệ điều hành, cùng với thư viện dùng chung, ứng dụng, dịch vụ và tài liệu.

Một hệ thống quản lý gói không chỉ thực hiện cài đặt phần mềm một lần mà còn cung cấp các công cụ để nâng cấp các gói đã được cài đặt. Các repository giúp đảm bảo mã nguồn đã được kiểm duyệt để sử dụng trên hệ thống của bạn và các phiên bản phần mềm đã được các nhà phát triển và người bảo trì gói chấp thuận.
Khi cấu hình máy chủ hoặc môi trường phát triển, thường cần tìm kiếm ngoài các repository chính thức. Các gói trong bản phát hành ổn định của một bản phân phối có thể đã lỗi thời, đặc biệt là đối với phần mềm mới hoặc thay đổi nhanh chóng. Tuy nhiên, quản lý gói là một kỹ năng quan trọng đối với các quản trị viên hệ thống và nhà phát triển, và sự phong phú của các phần mềm được đóng gói cho các bản phân phối lớn là một nguồn tài nguyên quý giá.
Hướng dẫn này nhằm mục đích tham khảo nhanh cách quản lý gói trong Linux, cách tìm, cài đặt và nâng cấp các gói trên nhiều bản phân phối khác nhau, và sẽ giúp bạn trau dồi kiến thức đó giữa các hệ thống.
Tổng quan về các hệ thống quản lý gói
Hầu hết các hệ thống package được xây dựng dựa trên các bộ sưu tập tệp package. Tệp package thường là một kho lưu trữ chứa các ứng dụng đã được biên dịch và các tài nguyên khác được phần mềm sử dụng, cùng với các tập lệnh cài đặt. Các package cũng chứa các metadata (siêu dữ liệu) có giá trị, bao gồm các dependency, một danh sách các package khác cần thiết để cài đặt và chạy chúng.
Mặc dù chức năng và lợi ích của chúng tương tự nhau, các định dạng và công cụ đóng gói khác nhau tùy theo nền tảng:
- Đối với Debian / Ubuntu: các package
.debđược cài đặt bởiaptvàdpkg. - Đối với Rocky / Fedora / RHEL: các package
.rpmđược cài đặt bởiyum. - Đối với FreeBSD: các package
.txzđược cài đặt bởipkg.
Ở Debian và các hệ thống dựa trên nó, như Ubuntu, Linux Mint và Raspbian, định dạng package là tệp .deb , .apt, viết tắt của Advanced Packaging Tool, cung cấp các lệnh được sử dụng cho hầu hết các hoạt động phổ biến: tìm kiếm repository, cài đặt bộ sưu tập package và dependencies của chúng, và quản lý các bản nâng cấp. Các lệnh apt hoạt động như một giao diện cho tiện ích dpkg cấp thấp hơn, tiện ích này xử lý việc cài đặt các tệp .deb riêng lẻ trên hệ thống cục bộ và đôi khi được gọi trực tiếp.
Các bản phát hành gần đây của hầu hết các bản phân phối dựa trên Debian bao gồm một lệnh apt duy nhất, cung cấp một giao diện ngắn gọn và thống nhất cho các hoạt động phổ biến mà theo truyền thống đã được xử lý bởi các lệnh cụ thể hơn là apt-get và apt-cache.
Rocky Linux, Fedora và các thành viên khác trong gia đình Red Hat sử dụng tệp RPM. Trước đây, chúng sử dụng một trình quản lý package có tên là yum. Trong các phiên bản gần đây của Fedora và các bản dẫn xuất của nó, yum đã được thay thế bằng dnf, một bản sao hiện đại hóa nhưng vẫn giữ lại hầu hết giao diện của yum.
Hệ thống package nhị phân của FreeBSD được quản lý bằng lệnh pkg. FreeBSD cũng cung cấp Ports Collection, một cấu trúc thư mục cục bộ và các công cụ cho phép người dùng tìm nạp, biên dịch và cài đặt package trực tiếp từ mã nguồn bằng cách sử dụng Makefiles. Thường thì sử dụng pkg sẽ tiện lợi hơn nhiều, nhưng đôi khi một package đã được biên dịch sẵn không có sẵn, hoặc bạn có thể cần thay đổi các tùy chọn khi biên dịch.
Cập nhật danh sách Package
Hầu hết các hệ thống đều giữ một cơ sở dữ liệu cục bộ về các package có sẵn từ các repository từ xa. Tốt nhất là cập nhật cơ sở dữ liệu này trước khi cài đặt hoặc nâng cấp package. dnf là một trường hợp ngoại lệ một phần, nó sẽ kiểm tra các bản cập nhật trước khi thực hiện một số hoạt động, nhưng bạn có thể kiểm tra bất cứ lúc nào xem có bản cập nhật nào không.
- Đối với Debian / Ubuntu:
sudo apt update - Đối với Rocky / Fedora / RHEL:
dnf check-update - Đối với FreeBSD Packages:
sudo pkg update - Đối với FreeBSD Ports:
sudo portsnap fetch update
Nâng cấp các Package đã được cài đặt
Đảm bảo rằng tất cả phần mềm được cài đặt trên một máy luôn được cập nhật sẽ là một công việc khổng lồ nếu không có hệ thống package. Bạn sẽ phải theo dõi các thay đổi từ nhà phát triển và các cảnh báo bảo mật cho hàng trăm package khác nhau. Mặc dù trình quản lý package không giải quyết mọi vấn đề bạn sẽ gặp phải khi nâng cấp phần mềm, nhưng nó cho phép bạn duy trì hầu hết các thành phần hệ thống chỉ với vài lệnh.
Trên FreeBSD, việc nâng cấp các ports đã cài đặt có thể gây ra những thay đổi đột phá hoặc yêu cầu các bước cấu hình thủ công. Tốt nhất bạn nên đọc /usr/ports/UPDATING trước khi nâng cấp bằng portmaster.
- Đối với Debian / Ubuntu:
sudo apt upgrade - Đối với Rocky / Fedora / RHEL:
sudo dnf upgrade - Đối với FreeBSD Packages:
sudo pkg upgrade
Tìm kiếm một Package
Hầu hết các bản phân phối đều cung cấp một giao diện đồ họa hoặc giao diện dựa trên menu cho các bộ sưu tập package. Đây có thể là một cách tốt để duyệt theo danh mục và khám phá phần mềm mới. Tuy nhiên, thường thì cách nhanh nhất và hiệu quả nhất để tìm một package là tìm kiếm bằng các công cụ dòng lệnh.
- Đối với Debian / Ubuntu:
apt search search_string - Đối với Rocky / Fedora / RHEL:
dnf search search_string - Đối với FreeBSD Packages:
pkg search search_string
Lưu ý: Trên Rocky, Fedora hoặc RHEL, bạn có thể tìm kiếm cả tiêu đề và mô tả của package bằng cách sử dụng dnf search all. Trên FreeBSD, bạn có thể tìm kiếm mô tả bằng cách sử dụng pkg search -D.
Xem thông tin về một Package cụ thể
Khi quyết định cài đặt gì, việc đọc mô tả chi tiết của package thường rất hữu ích. Cùng với văn bản dễ đọc, những mô tả này thường bao gồm metadata như số phiên bản và danh sách các dependencies của package.
- Đối với Debian / Ubuntu:
apt show package - Đối với Rocky / Fedora / RHEL:
dnf info package - Đối với FreeBSD Packages:
pkg info package - Đối với FreeBSD Ports:
cd /usr/ports/category/port && cat pkg-descr
Cài đặt một Package từ Repositories
Khi bạn đã biết tên của một package, bạn thường có thể cài đặt nó và các dependency của nó chỉ với một lệnh duy nhất. Nói chung, bạn có thể cung cấp nhiều package để cài đặt cùng một lúc bằng cách liệt kê tất cả chúng.
- Đối với Debian / Ubuntu:
sudo apt install package - Đối với Rocky / Fedora / RHEL:
sudo dnf install package - Đối với FreeBSD Packages:
sudo pkg install package
Cài đặt một Package từ hệ thống tệp tin cục bộ
Đôi khi, mặc dù phần mềm không được đóng gói chính thức cho một hệ điều hành nhất định, một nhà phát triển hoặc nhà cung cấp sẽ cung cấp các tệp package để tải xuống. Bạn thường có thể tải chúng về bằng trình duyệt web hoặc qua lệnh curl trên dòng lệnh. Khi một package đã có trên hệ thống đích, nó thường có thể được cài đặt bằng một lệnh duy nhất.
Trên các hệ thống dựa trên Debian, dpkg xử lý các tệp package riêng lẻ. Nếu một package có các dependencies chưa được đáp ứng, gdebi thường có thể được sử dụng để lấy chúng từ các repository chính thức.
Trên Rocky Linux, Fedora hoặc RHEL, dnf được sử dụng để cài đặt các tệp riêng lẻ, và cũng sẽ xử lý các dependencies cần thiết.
- Đối với Debian / Ubuntu:
sudo dpkg -i package.deb - Đối với Rocky / Fedora / RHEL:
sudo dnf install package.rpm - Đối với FreeBSD Packages:
sudo pkg add package.txz
Cài đặt một Package từ hệ thống tệp tin cục bộ
Đôi khi, mặc dù phần mềm không được đóng gói chính thức cho một hệ điều hành nhất định, một nhà phát triển hoặc nhà cung cấp sẽ cung cấp các tệp package để tải xuống. Bạn thường có thể tải chúng về bằng trình duyệt web hoặc qua lệnh curl trên dòng lệnh. Khi một package đã có trên hệ thống đích, nó thường có thể được cài đặt bằng một lệnh duy nhất.
Trên các hệ thống dựa trên Debian, dpkg xử lý các tệp package riêng lẻ. Nếu một package có các dependencies chưa được đáp ứng, gdebi thường có thể được sử dụng để lấy chúng từ các repository chính thức.
Trên Rocky Linux, Fedora hoặc RHEL, dnf được sử dụng để cài đặt các tệp riêng lẻ, và cũng sẽ xử lý các dependencies cần thiết.
- Đối với Debian / Ubuntu:
sudo dpkg -i package.deb - Đối với Rocky / Fedora / RHEL:
sudo dnf install package.rpm - Đối với FreeBSD Packages:
sudo pkg add package.txz
Tìm kiếm trợ giúp
Ngoài tài liệu dựa trên web, hãy nhớ rằng các trang hướng dẫn của Unix (thường được gọi là man pages) có sẵn cho hầu hết các lệnh từ shell. Để đọc một trang, hãy sử dụng lệnh man:
man page
Trong man, bạn có thể điều hướng bằng các phím mũi tên. Nhấn / để tìm kiếm văn bản trong trang và q để thoát.
- Đối với Debian / Ubuntu:
man apt - Đối với Rocky / Fedora / RHEL:
man dnf - Đối với FreeBSD Packages:
man pkg - Đối với FreeBSD Ports:
man ports
Kết luận
Hướng dẫn này cung cấp một cái nhìn tổng quan về các hoạt động có thể được tham khảo chéo giữa các hệ thống,