Lệnh apt trong Linux — Quản lý gói phần mềm hệ thống

Bạn đã bao giờ rơi vào tình huống đang quản trị một hệ thống VPS quan trọng thì phát hiện phần mềm cần thiết lại chưa được cài đặt, hay một gói thư viện cũ kỹ đang gây xung đột hệ thống chưa nhỉ? Với tư cách là một Senior System Admin, mình hiểu rằng việc kiểm soát các gói phần mềm một cách chuẩn xác là yếu tố sống còn để giữ cho server luôn ổn định. Vậy apt là gì và tại sao nó lại quan trọng đến thế? Thực tế, apt là công cụ quản lý gói cực kỳ mạnh mẽ trên các bản phân phối Debian hoặc Ubuntu. Hiểu rõ cách dùng apt sẽ giúp bạn hoàn toàn làm chủ việc quản lý phần mềm, từ cách cài đặt mới đến cách cập nhật hệ thống một cách mượt mà nhất. Trong bài viết này, mình sẽ đồng hành cùng bạn để khám phá mọi khía cạnh về apt Linux, giúp bạn nắm vững cách cài đặt gói phần mềm một cách chuyên nghiệp và nhanh chóng nhất, đúng không nào?

Cần chuẩn bị gì trước khi dùng lệnh apt?

  • Quyền user: Yêu cầu quyền quản trị cao nhất (root) hoặc sử dụng tiền tố sudo để thực thi các thao tác thay đổi hệ thống.
  • Distro/OS hỗ trợ: Chỉ áp dụng cho các bản phân phối dựa trên Debian như Ubuntu, Linux Mint, Kali Linux hoặc Debian.
  • Package dependencies: Lệnh apt là một phần của gói dpkg, thường đã được cài đặt sẵn trên các hệ điều hành hỗ trợ. Trong trường hợp hiếm hoi hệ thống thiếu, bạn có thể cần cài đặt gói dpkg bằng trình quản lý gói thấp hơn.

Cú pháp lệnh apt là gì?

Lệnh apt hỗ trợ nhiều dạng cú pháp khác nhau trên các hệ thống Linux dựa trên Debian/Ubuntu.

apt [OPTIONS] COMMAND [ARGUMENT]...

Các tùy chọn thường dùng của lệnh apt là gì?

Lệnh apt cung cấp các tùy chọn để quản lý gói phần mềm, cập nhật hệ thống và xử lý các phụ thuộc. Các tùy chọn dưới đây được nhóm theo chức năng chính của lệnh.

Tùy chọn ngắn Tùy chọn dài Mô tả
-h --help apt --help hiển thị thông báo trợ giúp và danh sách các lệnh con có sẵn.
-v --version apt --version hiển thị phiên bản của apt đang cài đặt trên hệ thống.
-y --yes apt install -y gói_tên tự động trả lời "có" cho tất cả các câu hỏi trong quá trình cài đặt.
--no-install-recommends apt install --no-install-recommends gói_tên cài đặt gói mà không cài các gói được khuyến nghị.
--only-upgrade apt install --only-upgrade gói_tên chỉ nâng cấp gói nếu nó đã được cài đặt trước đó.
-s --simulate apt install -s gói_tên mô phỏng các thao tác mà không thực hiện thay đổi thực tế.
-qq apt install -qq gói_tên loại bỏ hầu hết các thông báo đầu ra, chỉ hiển thị lỗi nếu có.
--allow-unauthenticated apt install --allow-unauthenticated gói_tên cho phép cài đặt các gói không được xác thực bằng khóa GPG.
--no-autoremove apt upgrade --no-autoremove nâng cấp các gói mà không tự động gỡ bỏ các gói không cần thiết.
--autoremove apt autoremove xóa tự động các gói không cần thiết mà không còn được phụ thuộc bởi gói nào khác.

xem thêm: Package Management

Sử dụng lệnh apt trong các tình huống thực tế như thế nào?

Phần dưới đây trình bày các kịch bản vận hành hệ thống Debian/Ubuntu phổ biến mà quản trị viên thường xuyên thực hiện.

apt update là gì? Cập nhật danh sách gói phần mềm

sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Reading package lists... Done

Lệnh này tải về danh sách các gói phần mềm mới nhất từ các kho lưu trữ (repositories). Trong thực tế, đây là bước bắt buộc phải thực hiện trước khi cài đặt hoặc nâng cấp bất kỳ phần mềm nào để đảm bảo hệ thống truy cập đúng phiên bản mới nhất.

apt install là gì? Cài đặt một gói phần mềm mới

sudo apt install nginx
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  nginx
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.

Lệnh này cho phép bạn tải xuống và cài đặt một gói cụ thể cùng với các phụ thuộc (dependencies) cần thiết. Trên môi trường production, việc sử dụng lệnh này giúp tự động hóa việc thiết lập các dịch vụ như web server hoặc database một cách nhanh chóng.

apt upgrade là gì? Nâng cấp toàn bộ gói hiện có

sudo apt upgrade
Reading package lists... Done
Calculating upgrade...
The following packages will be upgraded:
  openssl libc6
1 upgraded, 0 newly installed, 0 to remove.

Lệnh này nâng cấp tất cả các gói phần mềm đã cài đặt lên phiên bản mới nhất hiện có trong kho lưu trữ. Trong thực tế, việc chạy lệnh này định kỳ giúp vá các lỗ hổng bảo mật và tối ưu hóa hiệu suất của hệ điều hành.

apt autoremove là gì? Dọn dẹp các gói phụ thuộc thừa

sudo apt autoremove
Reading package lists... Done
Unused dependencies:
  libssl1.1
0 upgraded, 0 newly installed, 1 removed and 0 not upgraded.

Lệnh này tự động gỡ bỏ các gói phụ thuộc không còn được sử dụng bởi bất kỳ phần mềm nào khác trong hệ thống. Trên các máy chủ có dung lượng ổ cứng hạn chế, việc sử dụng lệnh này giúp giải phóng không gian lưu trữ một cách an toàn.

apt list --installed là gì? Liệt kê các gói đã cài đặt

apt list --installed | grep python3
python3/jammy,now 3.10.6-1 all installed
python3-minimal/jammy,now 3.10.6-1 all installed

Lệnh này kết hợp với pipe để lọc và hiển thị danh sách các gói đang có mặt trên hệ thống. Trong các tác vụ automation hoặc kiểm tra tính tương thích của script, cách tiếp cận này giúp xác định nhanh chóng phiên bản phần mềm hiện tại của máy chủ.

Các lỗi thường gặp khi sử dụng lệnh apt là gì?

Trong quá trình quản trị hệ thống Debian hoặc Ubuntu, người dùng thường gặp phải các lỗi phát sinh từ quyền hạn, kết nối mạng hoặc xung đột gói phần mềm.

Lỗi thiếu quyền quản trị (Permission denied)

apt update
E: Could not open lock file /var/lib/apt/lists/lock - open (Permission denied)
E: Unable to lock directory /var/lib/apt/lists/

Lỗi xảy ra khi người dùng thực hiện lệnh với quyền user thường thay vì quyền root hoặc sử dụng sudo.

Lỗi khóa file hệ thống (Could not get lock)

apt install nginx
E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1234 (apt)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

Lỗi này xuất hiện khi một tiến trình quản lý gói khác đang chạy ngầm hoặc một trình cập nhật tự động đang chiếm dụng tài nguyên.

Lỗi không tìm thấy gói phần mềm (Unable to locate package)

apt install non-existent-package
E: Unable to locate package non-existent-package

Lỗi này xảy ra khi tên gói bị viết sai hoặc danh sách chỉ mục của kho lưu trữ chưa được cập nhật qua lệnh update.

Lỗi không thể kết nối đến kho lưu trữ (Temporary failure resolving)

apt update
Err:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Err:1: Temporary failure resolving 'archive.ubuntu.com'

Lỗi này cho thấy hệ thống đang gặp vấn đề về kết nối internet hoặc cấu hình DNS không thể phân giải được tên miền của kho lưu trữ.

Lỗi phụ thuộc gói phần mềm (Unmet dependencies)

apt install package-a
The following packages have unmet dependencies:
  package-a : Depends: package-b but it is not installable

Lỗi này xảy ra khi gói phần mềm yêu cầu một hoặc nhiều gói phụ thuộc khác nhưng hệ thống không thể tìm thấy hoặc không thể cài đặt chúng.

Quy trình thực tế dùng apt trong quản trị hệ thống Debian/Ubuntu?

Trong kịch bản triển khai và bảo trì một Web Server, apt đóng vai trò là công cụ cốt lõi để quản lý gói phần mềm và đảm bảo tính an toàn cho hệ thống.

Bước 1: Cập nhật danh sách gói phần mềm từ kho lưu trữ

sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Reading package lists... Done

Lệnh này cho phép bạn đồng bộ hóa danh sách các phiên bản phần mềm mới nhất từ các repository về máy cục bộ để chuẩn bị cho việc nâng cấp.

Bước 2: Nâng cấp các gói phần mềm hiện có lên phiên bản mới

sudo apt upgrade
Reading package lists... Done
Calculating upgrade... Done
The following packages will be upgraded:
  nginx openssl
0 upgraded, 0 newly installed, 2 upgraded, 0 to remove.

Sau khi cập nhật danh sách, lệnh này thực hiện tải xuống và cài đặt các bản vá lỗi hoặc phiên bản mới của các gói phần mềm đã có trên hệ thống.

Bước 3: Cài đặt phần mềm mới cho dịch vụ

sudo apt install nginx
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  nginx
0 upgraded, 1 newly installed, 0 to remove.

Trong trường hợp cần thiết lập dịch vụ mới, lệnh này cho phép bạn cài đặt phần mềm kèm theo tất cả các gói phụ thuộc (dependencies) cần thiết để ứng dụng hoạt động.

Bước 4: Kiểm tra và dọn dẹp các gói không còn sử dụng

sudo apt autoremove
Reading package lists... Done
Removing unused dependencies...
Done

Để tối ưu hóa không gian lưu trữ sau khi gỡ bỏ các phần mềm, lệnh này giúp loại bỏ các gói phụ thuộc tự động cài đặt trước đó nhưng hiện không còn cần thiết cho bất kỳ phần mềm nào khác.

Việc sử dụng lệnh apt trên VPS đòi hỏi sự chính xác về quyền hạn và trạng thái hệ thống. Người quản trị thường gặp lỗi khi thực hiện apt update mà không có quyền root, dẫn đến thông báo Permission denied. Cách xử lý là sử dụng sudo apt update để cấp quyền thực thi. Trong các trường hợp VPS đang chạy tiến trình cập nhật ngầm, lệnh apt sẽ bị khóa bởi file lock, ngăn chặn mọi thao tác cài đặt mới. Để giải quyết, cần chờ tiến trình cũ kết thúc hoặc kiểm tra tiến trình đang chiếm dụng qua lệnh ps aux. Một lưu ý quan trọng khi quản trị VPS là sự khác biệt giữa apt và apt-get. Trong khi apt-get được ưu tiên cho các script tự động hóa nhờ tính ổn định cao, apt cung cấp giao diện tương tác trực quan hơn cho người dùng trực tiếp. Việc kết hợp lệnh sudo apt upgrade giúp đồng bộ hóa toàn bộ gói phần mềm, nhưng cần kiểm tra kỹ sự tương thích của các dịch vụ đang chạy để tránh gián đoạn hệ thống.

Những câu hỏi thường gặp về lệnh apt?

Dưới đây là các tình huống và thắc mắc phổ biến nhất mà người dùng thường gặp khi sử dụng công cụ quản lý gói apt.

Làm thế nào để cập nhật danh sách gói phần mềm từ kho lưu trữ?

Để đảm bảo hệ thống nhận diện được các phiên bản phần mềm mới nhất, bạn cần cập nhật danh sách các gói từ các nguồn đã cấu hình.

sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Reading package lists... Done

Làm sao để nâng cấp tất cả các gói phần mềm hiện có lên phiên bản mới?

Sau khi thực hiện cập nhật danh sách gói, lệnh này cho phép bạn tải xuống và cài đặt các phiên bản mới nhất của tất cả phần mềm đang có trên hệ thống.

sudo apt upgrade
Reading package lists... Done
Calculating upgrade... Done
10 upgraded, 0 newly installed, 0 to remove.

Cách cài đặt một gói phần mềm mới là gì?

Bạn sử dụng lệnh install kèm theo tên gói cụ thể để tiến hành tải xuống và cài đặt phần mềm đó vào hệ thống.

sudo apt install curl
Reading package lists... Done
Building dependency tree... Done
curl is already the newest version (7.81.0-1ubuntu1.14).

Làm thế nào để tìm kiếm một gói phần mềm khi không nhớ tên chính xác?

apt search nginx
nginx/jammy,now 1.18.0-6ubuntu14.4 amd64
  nginx web server

Cách gỡ bỏ một gói phần mềm khỏi hệ thống?

Lệnh remove cho phép bạn xóa bỏ gói phần mềm, tuy nhiên các tệp cấu hình của gói đó vẫn có thể được giữ lại trên hệ thống.

sudo apt remove curl
Reading package lists... Done
Removing curl (7.81.0-1ubuntu1.14) ...

Cách xóa hoàn toàn một gói phần mềm bao gồm cả các tệp cấu hình?

Để dọn dẹp triệt để, bạn sử dụng lệnh purge để xóa cả gói phần mềm lẫn các tệp cấu hình liên quan.

sudo apt purge curl
Reading package lists... Done
Purging curl (7.81.0-1ubuntu1.14) ...

Làm thế nào để dọn dẹp các gói phụ thuộc không còn được sử dụng?

Khi gỡ bỏ các phần mềm, các gói phụ thuộc đi kèm có thể không còn cần thiết. Lệnh autoremove giúp loại bỏ chúng để tiết kiệm dung lượng.

sudo apt autoremove
Reading package lists... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

apt là công cụ quản lý gói phần mềm mạnh mẽ và phổ biến nhất trên các hệ điều hành dựa trên Debian. Việc làm chủ các tham số như apt install để cài đặt nhanh chóng các ứng dụng mới, hay apt update để cập nhật danh sách gói phần mềm từ kho lưu trữ, chắc chắn sẽ giúp công việc quản trị hệ thống của bạn trở nên vô cùng dễ dàng, đúng không nhỉ? Bạn có thể hoàn toàn yên tâm tin tưởng vào khả năng xử lý thông minh của công cụ này trong mọi tình huống thực tế. Chúc bạn thành công!