Cách dùng APT trên Debian/Ubuntu Image Cách dùng APT trên Debian/Ubuntu

Bài viết này giới thiệu với các bạn về cách dùng apt trên bản phân phối Debian/Ubuntu của hệ điều hành Linux qua các cách sử dụng lệnh apt dưới đây giúp cho các bạn có thể tự cài đặt các gói mà các bạn cần từ đó giúp cho các bạn có thể tự tìm hiểu và tự học Linux cơ bản dễ dàng hơn.

1. Giới thiệu về lệnh apt

Lệnh apt (Advanced Package Tool) là một công cụ được sử dụng để quản lý các gói phần mềm trên các bản phân phối Linux thuộc dòng Ubuntu/Debian. Chúng ta có thể sử dụng nó để tìm và cài đặt các gói mới, cập nhật và nâng cấp gói, loại bỏ các gói, theo dõi tất cả các phần mềm được cài đặt.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về cách sử dụng lệnh apt trên bản phân phối Ubuntu.

2. Sử dụng lệnh apt

👉 Ví dụ 1: Cài đặt gói

Để cài đặt gói chúng ta sử dụng lệnh sudo apt install packagename. Điều này sẽ xác định các phụ thuộc tự động và cài đặt chúng.

Ví dụ sau đây cài đặt gói nodejs.

blogd@ubuntuserver:~$ sudo apt install nodejs
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libc-ares2 libnode64 libuv1 nodejs-doc
Suggested packages:
  npm
The following NEW packages will be installed:
  libc-ares2 libnode64 libuv1 nodejs nodejs-doc
0 upgraded, 5 newly installed, 0 to remove and 29 not upgraded.
Need to get 6,489 kB of archives.
After this operation, 29.4 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 libc-ares2 amd64 1.14.0-1 [37.1 kB]
Get:2 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 libuv1 amd64 1.24.1-1 [69.5 kB]
Get:3 http://vn.archive.ubuntu.com/ubuntu disco/universe amd64 libnode64 amd64 10.15.2~dfsg-1 [5,397 kB]

Theo mặc định sudo apt install, sẽ nhắc chúng ta chấp nhận hoặc từ chối trước khi cài đặt các gói. Nếu bạn muốn apt cài đặt tự động mà không hỏi xác nhận lại, hãy sử dụng tùy chọn -y.

Trong ví dụ này chúng ta cài đặt gói apache2 tự động không hỏi xác nhận lại bằng tùy chọn -y:

blogd@ubuntuserver:~$ sudo apt install -y apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  apache2-doc apache2-suexec-pristine | apache2-suexec-custom www-browser
The following NEW packages will be installed:
  apache2
0 upgraded, 1 newly installed, 0 to remove and 29 not upgraded.
Need to get 95.5 kB of archives.
After this operation, 539 kB of additional disk space will be used.
Get:1 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 apache2 amd64 2.4.38-2ubuntu2 [95.5 kB]
Fetched 95.5 kB in 2s (50.3 kB/s)
Selecting previously unselected package apache2.
(Reading database ... 67970 files and directories currently installed.)
Preparing to unpack .../apache2_2.4.38-2ubuntu2_amd64.deb ...
Unpacking apache2 (2.4.38-2ubuntu2) ...
Setting up apache2 (2.4.38-2ubuntu2) ...
Processing triggers for systemd (240-6ubuntu5) ...
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for ufw (0.36-1ubuntu1) ...

Chúng ta có thể thực hiện cài đặt nhiều gói cùng một lúc với apt. Bạn có thể cài đặt nhiều gói cùng một lúc bằng cách cung cấp tất cả các tên gói cú pháp như bên dưới:

sudo apt install <package_1> <package_2> <package_3>

Bạn có thể cài đặt một gói mà không muốn nâng cấp. Trong trường hợp đó, bạn có thể sử dụng tùy chọn --no-upgrade theo cú pháp sau:

sudo apt install <package_name> --no-upgrade

Khi cài đặt một gói thì theo mặt định thì phiên bản mới nhất có sẵn trong kho sẽ được cài đặt. Nếu chúng ta không muốn cài đặt phiên bản mới nhất, chúng ta có thể chỉ định số phiên bản.

sudo apt install <package_name>=<version_number>

Lưu ý: Bạn sẽ cần biết chính xác số phiên bản mà bạn muốn cài đặt.

👉 Ví dụ 2: Kiểm tra tất cả các phụ thuộc của một gói

Để có thể hiển thị tất cả thông tin về các phụ thuộc của một gói cụ thể chúng ta thực hiện như bên dưới:

blogd@ubuntuserver:~$ sudo apt depends apache2
apache2
  PreDepends: dpkg (>= 1.17.14)
  Depends: apache2-bin (= 2.4.38-2ubuntu2)
  Depends: apache2-data (= 2.4.38-2ubuntu2)
  Depends: apache2-utils (= 2.4.38-2ubuntu2)
  Depends: lsb-base
  Depends: mime-support
  Depends: <perl:any>
    perl
  Depends: procps
  Conflicts: <apache2.2-bin>
  Conflicts: <apache2.2-common>
  Breaks: libapache2-mod-proxy-uwsgi (<< 2.4.33)
  Recommends: ssl-cert
  Suggests: apache2-doc
 |Suggests: apache2-suexec-pristine
  Suggests: apache2-suexec-custom
  Suggests: <www-browser>
    dillo
    edbrowse
    hv3
    lynx
    netsurf
    netsurf-fb
    netsurf-gtk
    chromium-browser
    elinks
...

👉 Ví dụ 3: Tìm kiếm một gói

Chúng ta có thể sử dụng tùy chọn search để có thể tìm kiếm một tên gói và hiển thị tất cả các gói phù hợp.

blogd@ubuntuserver:~$  sudo apt search apache2
Sorting... Done
Full Text Search... Done
apache2/disco,now 2.4.38-2ubuntu2 amd64 [installed]
  Apache HTTP Server

apache2-bin/disco,now 2.4.38-2ubuntu2 amd64 [installed,automatic]
  Apache HTTP Server (modules and other binary files)

apache2-data/disco,now 2.4.38-2ubuntu2 all [installed,automatic]
  Apache HTTP Server (common files)

apache2-dev/disco 2.4.38-2ubuntu2 amd64
  Apache HTTP Server (development headers)

apache2-doc/disco 2.4.38-2ubuntu2 all
  Apache HTTP Server (on-site documentation)

apache2-ssl-dev/disco 2.4.38-2ubuntu2 amd64
  Apache HTTP Server (mod_ssl development headers)

apache2-suexec-custom/disco 2.4.38-2ubuntu2 amd64
  Apache HTTP Server configurable suexec program for mod_suexec

apache2-suexec-pristine/disco 2.4.38-2ubuntu2 amd64
  Apache HTTP Server standard suexec program for mod_suexec

apache2-utils/disco,now 2.4.38-2ubuntu2 amd64 [installed,automatic]
  Apache HTTP Server (utility programs for web servers)
...

👉 Ví dụ 4: Xem thông tin về gói

Khi chúng ta cần biết thêm về một gói trước khi cài đặt hoặc gỡ bỏ nó, bạn có thể sử dụng tùy chọn show để có thể hiển thị thông tin về một gói. Tùy chọn này sẽ giúp chúng ta hiển thị thông tin các gói đã cho như phụ thuộc, kích thước cài đặt và tải xuống của gói, các nguồn khác nhau mà gói có sẵn từ đó, mô tả nội dung của gói:

blogd@ubuntuserver:~$ sudo apt show firefox
Package: firefox
Version: 67.0+build2-0ubuntu0.19.04.1
Priority: optional
Section: web
Origin: Ubuntu
Maintainer: Ubuntu Mozilla Team <ubuntu-mozillateam@lists.ubuntu.com>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 183 MB
Provides: gnome-www-browser, iceweasel, www-browser
Depends: lsb-release, libatk1.0-0 (>= 1.12.4), libc6 (>= 2.29), libcairo-gobject2 (>= 1.10.0), libcairo2 (>= 1.10.0), libdbus-1-3 (>= 1.9.14), libdbus-glib-1-2 (>= 0.78), libfontconfig1 (>= 2.12.6), libfreetype6 (>= 2.3.5), libgcc1 (>= 1:4.2), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.31.8), libgtk-3-0 (>= 3.4), libpango-1.0-0 (>= 1.22.0), libpangocairo-1.0-0 (>= 1.14.0), libstartup-notification0 (>= 0.8), libstdc++6 (>= 6), libx11-6, libx11-xcb1, libxcb-shm0, libxcb1, libxcomposite1 (>= 1:0.3-1), libxdamage1 (>= 1:1.1), libxext6, libxfixes3, libxrender1, libxt6
Recommends: xul-ext-ubufox, libcanberra0, libdbusmenu-glib4, libdbusmenu-gtk3-4
Suggests: fonts-lyx
Replaces: kubuntu-firefox-installer
Task: ubuntu-desktop-minimal, ubuntu-desktop, kubuntu-desktop, kubuntu-full, xubuntu-desktop, lubuntu-desktop, ubuntustudio-desktop, ubuntukylin-desktop, ubuntu-mate-core, ubuntu-mate-desktop, ubuntu-budgie-desktop
Xul-Appid: {ec8030f7-c20a-464f-9b0e-13a3a9e97384}
Supported: 9m
Download-Size: 48.5 MB
APT-Sources: http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 Packages
Description: Safe and easy web browser from Mozilla
 Firefox delivers safe, easy web browsing. A familiar user interface,
 enhanced security features including protection from online identity theft,
 and integrated search let you get the most out of the web.

N: There is 1 additional record. Please use the '-a' switch to see it

👉 Ví dụ 5: Trong quá trình cài đặt gói, chúng ta có thể gặp lỗi liên quan đến các phụ thuộc gói bị hỏng, để kiểm tra xem bạn không gặp phải các vấn đề này thực hiện lệnh bên dưới:

blogd@ubuntuserver:~$ sudo apt check firefox
Reading package lists... Done
Building dependency tree
Reading state information... Done
blogd@ubuntuserver:~$ sudo apt check apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done

👉 Ví dụ 6: Cập nhật các gói hệ thống (System Packages)

Lệnh apt hoạt động trên dữ liệu của các gói có sẵn. Nếu dữ liệu không được cập nhật, hệ thống sẽ không biết liệu có gói nào mới hơn không. Vì vậy việc cập nhật kho lưu trữ nên là điều quan trọng cần làm trong hệ thống Linux:

blogd@ubuntuserver:~$ sudo apt update
Hit:1 http://vn.archive.ubuntu.com/ubuntu disco InRelease
Get:2 http://vn.archive.ubuntu.com/ubuntu disco-updates InRelease [97.5 kB]
Hit:3 http://vn.archive.ubuntu.com/ubuntu disco-backports InRelease
Get:4 http://vn.archive.ubuntu.com/ubuntu disco-security InRelease [97.5 kB]
Get:5 http://vn.archive.ubuntu.com/ubuntu disco-security/main Translation-en [36.4 kB]
Fetched 231 kB in 3s (69.5 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.

Trong đó đầu ra chúng ta thường sẽ bắt gặp 3 thông tin cơ bản:

  • Hit: Không có thay đổi trong phiên bản
  • Ign: Gói đang bị bỏ qua.
  • Get: Có một phiên bản mới có sẵn. Nó sẽ tải thông tin về phiên bản. Bạn có thể thấy thông tin tải xuống kích thước tính bằng KB.

👉 Ví dụ 7: Nâng cấp hệ thống

Bạn có thể nâng cấp các gói đã cài đặt sử dụng lệnh dưới đây:

blogd@ubuntuserver:~$ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  apt apt-utils bash bind9-host cloud-init console-setup console-setup-linux debconf debconf-i18n dnsutils ibverbs-providers
  keyboard-configuration libapt-inst2.0 libapt-pkg5.0 libbind9-161 libdns-export1104 libdns1104 libibverbs1 libirs161 libisc-export1100
29 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 8,058 kB of archives.
After this operation, 11.3 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 bash amd64 5.0-3ubuntu1.1 [636 kB]
Get:2 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 libapt-pkg5.0 amd64 1.8.1 [821 kB]
Get:3 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 libapt-inst2.0 amd64 1.8.1 [56.7 kB]
Get:4 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 apt amd64 1.8.1 [1,209 kB]
Get:5 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 apt-utils amd64 1.8.1 [206 kB]
Get:6 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 python3-debconf all 1.5.71ubuntu1 [4,064 B]
Get:7 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 debconf-i18n all 1.5.71ubuntu1 [206 kB]
Get:8 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 debconf all 1.5.71ubuntu1 [122 kB]
Get:9 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 console-setup-linux all 1.178ubuntu12.1 [982 kB]
Get:10 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 console-setup all 1.178ubuntu12.1 [105 kB]
Get:11 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 keyboard-configuration all 1.178ubuntu12.1 [370 kB]
Get:12 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 libisc-export1100 amd64 1:9.11.5.P1+dfsg-1ubuntu2.4 [163 kB]
Get:13 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 libdns-export1104 amd64 1:9.11.5.P1+dfsg-1ubuntu2.4 [752 kB]
...

Qua lệnh này thì tất cả các gói sẽ được nâng cấp.

Ngoài ra chúng ta có thể nâng cấp tất cả các gói hoàn chỉnh bằng cách sử dụng lệnh dưới đây:

sudo apt full-upgrade

👉 Ví dụ 8: Loại bỏ các gói không sử dụng

Khi chúng ta thực hiện cài đặt gói mới trên hệ thống của mình, phần phụ thuộc cũng được cài đặt và sử dụng một số thư viện hệ thống với các gói khác. Sau khi loại bỏ gói cụ thể thì các phụ thuộc của nó sẽ vẫn còn trên hệ thống, do đó để loại bỏ chúng hãy sử dụng chế độ tự động như sau:

blogd@ubuntuserver:~$ sudo apt autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

👉 Ví dụ 9: Để có thể xóa tất cả kho lưu trữ cũ của các gói đã tải xuống chúng ta chạy lệnh bên dưới:

blogd@ubuntuserver:~$ sudo apt autoclean
Reading package lists... Done
Building dependency tree
Reading state information... Done
blogd@ubuntuserver:~$ sudo apt clean

👉 Ví dụ 10: Loại bỏ các gói với tập tin cấu hình của nó

Khi chúng ta chạy lệnh apt với tùy chọn remove thì nó chỉ xóa các tệp gói nhưng các tệp cấu hình vẫn còn trên hệ thống. Do đó, để xóa gói và tệp cấu hình của nó chúng ta cần sử dụng tùy chọn purge như bên dưới:

blogd@ubuntuserver:~$ sudo apt purge apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 libjansson4 liblua5.2-0
  ssl-cert
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
  apache2*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 539 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 79520 files and directories currently installed.)
Removing apache2 (2.4.38-2ubuntu2) ...
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for ufw (0.36-1ubuntu1) ...
(Reading database ... 79470 files and directories currently installed.)
Purging configuration files for apache2 (2.4.38-2ubuntu2) ...
Processing triggers for systemd (240-6ubuntu5) ...
Processing triggers for ufw (0.36-1ubuntu1) ...

👉 Ví dụ 11: Tìm trợ giúp khi sử dụng APT

Lệnh bên dưới sẽ liệt kê cho bạn tất cả các tùy chọn với mô tả về cách sử dụng lệnh apt trên hệ thống của bạn.

blogd@ubuntuserver:~$ apt help
apt 1.8.1 (amd64)
Usage: apt [options] command

apt is a commandline package manager and provides commands for
searching and managing as well as querying information about packages.
It provides the same functionality as the specialized APT tools,
like apt-get and apt-cache, but enables options more suitable for
interactive use by default.

Most used commands:
  list - list packages based on package names
  search - search in package descriptions
  show - show package details
  install - install packages
  reinstall - reinstall packages
  remove - remove packages
  autoremove - Remove automatically all unused packages
  update - update list of available packages
  upgrade - upgrade the system by installing/upgrading packages
  full-upgrade - upgrade the system by removing/installing/upgrading packages
  edit-sources - edit the source information file

See apt(8) for more information about the available commands.
Configuration options and syntax is detailed in apt.conf(5).
Information about how to configure sources can be found in sources.list(5).
Package and version choices can be expressed via apt_preferences(5).
Security details are available in apt-secure(8).
                                        This APT has Super Cow Powers.

3. Giới thiệu apt-cache

apt-cache là một công cụ được sử dụng để tìm kiếm các gói phần mềm, thu thập thông tin của các gói và cũng được sử dụng để tìm kiếm những gói có sẵn đã sẵn sàng để cài đặt trên các hệ thống dựa trên Debian hoặc Ubuntu. Ngoài ra, nó được sử dụng để có được thông tin của các gói phần mềm. Công cụ này sử dụng bộ đệm gói của apt (Advanced Packaging Tool) để tìm các gói và tên gói.

4. Sử dụng apt-cache

👉 Ví dụ 1: Để có thể liệt kê tất cả các gói có sẵn chúng ta chạy lệnh bên dưới:

blogd@ubuntuserver:~$ sudo apt-cache pkgnames
aspell-ar
geoclue-plazes
ekg2-scripting-python
mpt-status
libgirara-gtk3-3
liblouisxml-dev
golang-github-inconshreveable-log15-dev
astyle
pari-elldata
trackballs-data
libx32go14-amd64-cross
uwsgi-src
libpegex-perl
python-lldb-6.0

👉 Ví dụ 2: Tìm kiếm tên gói và mô tả của gói

Để tìm ra tên gói và với mô tả trước khi cài đặt chúng ta sử dụng tùy chọn search kết hợp với lệnh apt-cache. Nó sẽ hiển thị danh sách các gói phù hợp với mô tả ngắn thực hiện như sau:

blogd@ubuntuserver:~$ sudo apt-cache search vsftpd
resource-agents - Cluster Resource Agents
vsftpd - lightweight, efficient FTP server written for security
vsftpd-dbg - lightweight, efficient FTP server written for security (debug)
ccze - robust, modular log coloriser
ftpd - File Transfer Protocol (FTP) server
yasat - simple stupid audit tool

👉 Ví dụ 3: Để tìm và liệt kê tất cả các gói bắt đầu bằng vsftpd bạn có thể sử dụng lệnh sau:

blogd@ubuntuserver:~$ sudo apt-cache pkgnames vsftpd
vsftpd
vsftpd-dbg

👉 Ví dụ 4: Chúng ta có thể kiểm tra thông tin của gói cùng với mô tả (phiên bản, kiểm tra tổng kích thước, kích thước cài đặt, danh mục,...). Sử dụng tùy chọn show như bên dưới:

blogd@ubuntuserver:~$ sudo apt-cache show mysql-server
Package: mysql-server
Architecture: all
Version: 5.7.26-0ubuntu0.19.04.1
Priority: optional
Section: database
Source: mysql-5.7
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 106
Depends: mysql-server-5.7
Filename: pool/main/m/mysql-5.7/mysql-server_5.7.26-0ubuntu0.19.04.1_all.deb
Size: 9952
MD5sum: d76992ebf18a990efb02c1915a95d7db
SHA1: 6a8a2c4f50aea0e3c522b553160f9b94c4fc29af
SHA256: 1ebdc8b1862bdb28d615fbb7a892d1da0d173816ea267cecb1657f4d1b33770c
Homepage: http://dev.mysql.com/
Description-en: MySQL database server (metapackage depending on the latest version)
 This is an empty package that depends on the current "best" version of
 mysql-server (currently mysql-server-5.7), as determined by the MySQL
 maintainers. Install this package if in doubt about which MySQL
 version you need. That will install the version recommended by the
 package maintainers.
 .
 MySQL is a fast, stable and true multi-user, multi-threaded SQL database
 server. SQL (Structured Query Language) is the most popular database query
 language in the world. The main goals of MySQL are speed, robustness and
 ease of use.
Description-md5: b8b44aa3bf1e86bb2834ded6d9d869b5
Task: lamp-server
Supported: 9m

👉 Ví dụ 5: Chúng ta có thể kiểm tra các phụ thuộc cho các gói cụ thể bằng việc sử dụng tùy chọn showpg để kiểm tra các phụ thuộc cho các gói phần mềm cụ thể cho dù các gói phụ thuộc được cài đặt hay không.

blogd@ubuntuserver:~$ sudo apt-cache showpkg vsftpd
Package: vsftpd
Versions:
3.0.3-12 (/var/lib/apt/lists/vn.archive.ubuntu.com_ubuntu_dists_disco_main_binary-amd64_Packages)
 Description Language:
                 File: /var/lib/apt/lists/vn.archive.ubuntu.com_ubuntu_dists_disco_main_binary-amd64_Packages
                  MD5: 81386f72ac91a5ea48f8db0b023f3f9b
 Description Language: en
                 File: /var/lib/apt/lists/vn.archive.ubuntu.com_ubuntu_dists_disco_main_i18n_Translation-en
                  MD5: 81386f72ac91a5ea48f8db0b023f3f9b


Reverse Depends:
  vsftpd-dbg,vsftpd 3.0.3-12
  ubumirror,vsftpd
Dependencies:
3.0.3-12 - debconf (18 0.5) debconf-2.0 (0 (null)) libc6 (2 2.28) libcap2 (2 1:2.10) libpam0g (2 0.99.7.1) libssl1.1 (2 1.1.0) libwrap0 (2 7.6-4~) adduser (0 (null)) libpam-modules (0 (null)) lsb-base (2 3.0-6) netbase (0 (null)) procps (0 (null)) ftp-server (0 (null)) logrotate (0 (null)) ssl-cert (0 (null)) ftp-server (0 (null))
Provides:
3.0.3-12 - ftp-server (= )
Reverse Provides:

👉 Ví dụ 6: Để kiểm tra số liệu thống kê của bộ nhớ đệm chúng ta sử dụng tuỳ chọn stats sẽ hiển thị số liệu thống kê tổng thể về bộ đệm.

blogd@ubuntuserver:~$ apt-cache stats
Total package names: 88855 (1,777 k)
Total package structures: 89055 (3,918 k)
  Normal packages: 63190
  Pure virtual packages: 872
  Single virtual packages: 14085
  Mixed virtual packages: 422
  Missing: 10486
Total distinct versions: 66005 (5,280 k)
Total distinct descriptions: 129617 (3,111 k)
Total dependencies: 414780/111970 (10.1 M)
Total ver/file relations: 3061 (73.5 k)
Total Desc/File relations: 64081 (1,538 k)
Total Provides mappings: 19349 (464 k)
Total globbed strings: 188535 (4,297 k)
Total slack space: 31.0 k
Total space accounted for: 31.0 M
Total buckets in PkgHashTable: 50503
  Unused: 8630
  Used: 41873
  Utilization: 82.9119%
  Average entries: 2.12679
  Longest: 60
  Shortest: 1
Total buckets in GrpHashTable: 50503
  Unused: 8630
  Used: 41873
  Utilization: 82.9119%
  Average entries: 2.12201
  Longest: 11
  Shortest: 1

5. Giới thiệu apt-get

apt-get là một tiện ích quản lý gói mạnh mẽ và miễn phí, được sử dụng để làm việc với thư viện Ubuntu APT (Advanced Packaging Tool) thực hiện cài đặt, tìm kiếm gói, cập nhật, loại bỏ các gói phần mềm hiện có, nâng cấp các gói phần mềm hiện tại và sử dụng để nâng cấp toàn bộ hệ điều hành.

apt-get yêu cầu các đặc quyền quản trị supperuser, vì nó liên quan đến các khía cạnh cốt lõi của hệ thống.

6. Sử dụng apt-get

👉 Ví dụ 1: Trước khi bắt đầu với apt-get chúng ta cần cập nhật bản sao cơ sở dữ liệu cục bộ. Nếu như không được cập nhật thì hệ thống sẽ không biết các gói mới hơn có sẵn hay không. Để thực hiện cập nhật, hãy chạy lệnh bên dưới:

blogd@ubuntuserver:~$ sudo apt-get update
Hit:1 http://vn.archive.ubuntu.com/ubuntu disco InRelease
Get:2 http://vn.archive.ubuntu.com/ubuntu disco-updates InRelease [97.5 kB]
Hit:3 http://vn.archive.ubuntu.com/ubuntu disco-backports InRelease
Get:4 http://vn.archive.ubuntu.com/ubuntu disco-security InRelease [97.5 kB]
Get:5 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 Packages [149 kB]
Get:6 http://vn.archive.ubuntu.com/ubuntu disco-updates/universe amd64 Packages [203 kB]
Fetched 548 kB in 9s (60.8 kB/s)
Reading package lists... Done

Trong đó đầu ra chúng ta thường sẽ bắt gặp 3 thông tin cơ bản:

  • Hit: Không có thay đổi trong phiên bản
  • Ign: Gói đang bị bỏ qua.
  • Get: Có một phiên bản mới có sẵn. Nó sẽ tải thông tin về phiên bản. Bạn có thể thấy thông tin tải xuống kích thước tính bằng KB.

👉 Ví dụ 2: Khi cơ sở dữ liệu đã được cập nhật thì chúng ta có thể nâng cấp các gói đã được cài đặt trên máy. Nó sẽ cập nhật bất kỳ ứng dụng lên các phiên bản mới nhất hiện có.

blogd@ubuntuserver:~$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  apt apt-utils bash bind9-host cloud-init console-setup console-setup-linux debconf debconf-i18n dnsutils ibverbs-providers
  keyboard-configuration libapt-inst2.0 libapt-pkg5.0 libbind9-161 libdns-export1104 libdns1104 libibverbs1 libirs161 libisc-export1100
  libisc1100 libisccc161 libisccfg163 liblwres161 netplan.io python3-debconf python3-distupgrade ubuntu-release-upgrader-core
  unattended-upgrades
29 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 8,058 kB of archives.
After this operation, 11.3 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 bash amd64 5.0-3ubuntu1.1 [636 kB]
Get:2 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 libapt-pkg5.0 amd64 1.8.1 [821 kB]
Get:3 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 libapt-inst2.0 amd64 1.8.1 [56.7 kB]
Get:4 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 apt amd64 1.8.1 [1,209 kB]
Get:5 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 apt-utils amd64 1.8.1 [206 kB]
Get:6 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 python3-debconf all 1.5.71ubuntu1 [4,064 B]
Get:7 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 debconf-i18n all 1.5.71ubuntu1 [206 kB]
Get:8 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 debconf all 1.5.71ubuntu1 [122 kB]
...

Khi chúng ta cần nâng cấp một chương trình cụ thể thay vì toàn bộ hệ thống, hãy sử dụng lệnh bên dưới:

blogd@ubuntuserver:~$ sudo apt-get upgrade [package_name]

Chúng ta có thể kết hợp các lệnh lại với nhau, sao cho một lệnh có thể chạy nhiều chức năng. Để thực hiện cập nhật theo sau là nâng cấp, bạn có thể chạy lệnh này:

blogd@ubuntuserver:~$ sudo apt-get update -y && sudo apt-get upgrade -y

Khi thực hiện lệnh trên thì máy chạy bản cập nhật, sau đó chạy nâng cấp. Các tùy chọn -y giúp chúng ta tự động cập nhật và nâng cấp mà không hỏi xác nhận lại

👉 Ví dụ 3: Cài đặt gói

Để cài đặt gói chúng ta sử dụng lệnh sudo apt-get install packagename. Điều này sẽ xác định các phụ thuộc tự động và cài đặt chúng.

Ví dụ sau đây cài đặt gói apache2.

blogd@ubuntuserver:~$ sudo apt-get install apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 libjansson4 liblua5.2-0
  ssl-cert
Suggested packages:
  apache2-doc apache2-suexec-pristine | apache2-suexec-custom www-browser openssl-blacklist
The following NEW packages will be installed:
  apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 libjansson4
  liblua5.2-0 ssl-cert
0 upgraded, 12 newly installed, 0 to remove and 0 not upgraded.
Need to get 2,118 kB of archives.
After this operation, 8,677 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 libapr1 amd64 1.6.5-1 [91.6 kB]
Get:2 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 libaprutil1 amd64 1.6.1-3build1 [84.7 kB]
Get:3 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 libaprutil1-dbd-sqlite3 amd64 1.6.1-3build1 [10.6 kB]
Get:4 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 libaprutil1-ldap amd64 1.6.1-3build1 [8,692 B]
Get:5 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 libbrotli1 amd64 1.0.7-2 [268 kB]
Get:6 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 libjansson4 amd64 2.12-1build1 [28.9 kB]
...

👉 Ví dụ 4: Bạn cũng có thể cài đặt nhiều gói cùng một lúc bằng cách sử dụng lệnh bên dưới:

blogd@ubuntuserver:~$ sudo apt-get install php libapache2-mod-php mysql-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libapache2-mod-php7.2 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.1-6 libfcgi-perl libhtml-parser-perl
  libhtml-tagset-perl libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmecab2
  libtimedate-perl liburi-perl mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7 php-common
  php7.2 php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-readline
Suggested packages:
  php-pear libdata-dump-perl libipc-sharedcache-perl libwww-perl mailx tinyca
The following NEW packages will be installed:
  libapache2-mod-php libapache2-mod-php7.2 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.1-6 libfcgi-perl
  libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl
  liblwp-mediatypes-perl libmecab2 libtimedate-perl liburi-perl mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server
  mysql-server-5.7 mysql-server-core-5.7 php php-common php7.2 php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-readline
0 upgraded, 31 newly installed, 0 to remove and 0 not upgraded.
Need to get 25.5 MB of archives.
After this operation, 181 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 mysql-common all 5.8+1.0.5 [7,352 B]
Get:2 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client-core-5.7 amd64 5.7.26-0ubuntu0.19.04.1 [7,109 kB]
Get:3 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 mysql-client-5.7 amd64 5.7.26-0ubuntu0.19.04.1 [2,305 kB]
Get:4 http://vn.archive.ubuntu.com/ubuntu disco-updates/main amd64 mysql-server-core-5.7 amd64 5.7.26-0ubuntu0.19.04.1 [7,863 kB]
Get:5 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 libevent-core-2.1-6 amd64 2.1.8-stable-4build1 [85.9 kB]
...

👉 Ví dụ 5: Để có thể cài đặt gói mà không cần nâng cấp chúng ta sử dụng tuỳ chọn --no-upgrade sẽ ngăn các gói đã cài đặt nâng cấp.

blogd@ubuntuserver:~$ sudo apt-get install pinta --no-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Skipping pinta, it is already installed and upgrade is not set.
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

👉 Ví dụ 6: Tuỳ chọn --only-upgrade sẽ không cài đặt các gói mới mà chỉ nâng cấp các gói đã cài đặt và vô hiệu hóa cài đặt mới của các gói.

blogd@ubuntuserver:~$ sudo apt-get install pinta --only-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
pinta is already the newest version (1.6-2).
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

👉 Ví dụ 7: Khi chúng ta muốn cài đặt một phiên bản cụ thể của các gói thì chúng ta chỉ cần sử dụng = để nối tên gói với phiên bản mong muốn.

blogd@ubuntuserver:~$ sudo apt-get install vsftpd=3.0.3-12
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  vsftpd
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 115 kB of archives.
After this operation, 338 kB of additional disk space will be used.
Get:1 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 vsftpd amd64 3.0.3-12 [115 kB]
Fetched 115 kB in 2s (67.5 kB/s)
...

👉 Ví dụ 8: Để gỡ cài đặt gói khỏi hệ thống của bạn mà không xóa các tệp cấu hình của chúng (để sau này sử dụng lại cùng cấu hình). Chúng ta sử dụng lệnh remove như được hiển thị:

blogd@ubuntuserver:~$ sudo apt-get remove vsftpd
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  vsftpd
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 338 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 88970 files and directories currently installed.)
Removing vsftpd (3.0.3-12) ...
Processing triggers for man-db (2.8.5-2) ...

👉 Ví dụ 9: Lệnh trên sẽ loại bỏ gói nhưng giữ các tệp cấu hình vì vậy nếu bạn muốn xóa cả gói và các tệp cấu hình được liên kết, bạn có thể chạy lệnh này:

blogd@ubuntuserver:~$ sudo apt-get purge vsftpd
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  vsftpd*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
(Reading database ... 88918 files and directories currently installed.)
Purging configuration files for vsftpd (3.0.3-12) ...
Processing triggers for systemd (240-6ubuntu5) ...

👉 Ví dụ 10: Ngoài ra, bạn có thể kết hợp cả hai lệnh với nhau như hiển thị bên dưới.

blogd@ubuntuserver:~$ sudo apt-get remove --purge vsftpd
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  vsftpd*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 338 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 88970 files and directories currently installed.)
Removing vsftpd (3.0.3-12) ...
Processing triggers for man-db (2.8.5-2) ...
(Reading database ... 88918 files and directories currently installed.)
Purging configuration files for vsftpd (3.0.3-12) ...
Processing triggers for systemd (240-6ubuntu5) ...

👉 Ví dụ 11: Để có thể dọn sạch không gian đĩa chúng ta sử dụng tùy chọn clean bằng cách làm sạch (download) .deb files (gói) từ kho lưu trữ.

blogd@ubuntuserver:~$ sudo apt-get clean

👉 Ví dụ 12: Khi chúng ta cần tải mã nguồn gói xuống với nguồn apt trước hết chúng ta cần phải kích hoạt deb-src như bên dưới:

blogd@ubuntuserver:~$ grep '^deb ' /etc/apt/sources.list | \
blogd@ubuntuserver:~$ sudo apt update  -y

Tiếp theo chúng ta cần cài đặt gói dpkg-dev cho lệnh dpkg-source.

blogd@ubuntuserver:~$ sudo apt install -y dpkg-dev
Reading package lists... Done

👉 Ví dụ 13: Để tải chỉ mã nguồn của gói đặc biệt sử dụng tùy chọn --download-only source với package-name như sau:

blogd@ubuntuserver:~$ sudo apt-get --download-only source vsftpd
Reading package lists... Done
Need to get 234 kB of source archives.
Get:1 http://vn.archive.ubuntu.com/ubuntu disco/main vsftpd 3.0.3-12 (dsc) [1,856 B]
Get:2 http://vn.archive.ubuntu.com/ubuntu disco/main vsftpd 3.0.3-12 (tar) [197 kB]
Get:3 http://vn.archive.ubuntu.com/ubuntu disco/main vsftpd 3.0.3-12 (diff) [35.2 kB]
Fetched 234 kB in 3s (78.2 kB/s)
Download complete and in download only mode

👉 Ví dụ 14: Chúng ta có thể tải xuống và giải nén mã nguồn của gói vào một thư mục cụ thể, bằng lệnh bên dưới:

blogd@ubuntuserver:~$ sudo apt-get source vsftpd
Reading package lists... Done
Skipping already downloaded file 'vsftpd_3.0.3-12.dsc'
Skipping already downloaded file 'vsftpd_3.0.3.orig.tar.gz'
Skipping already downloaded file 'vsftpd_3.0.3-12.debian.tar.xz'
Need to get 0 B of source archives.
dpkg-source: info: extracting vsftpd in vsftpd-3.0.3
dpkg-source: info: unpacking vsftpd_3.0.3.orig.tar.gz
dpkg-source: info: unpacking vsftpd_3.0.3-12.debian.tar.xz
dpkg-source: info: using patch list from debian/patches/series
dpkg-source: info: applying 0020-manpage-hyphen.patch
dpkg-source: info: applying 0001-builddefs.patch
dpkg-source: info: applying 0002-config.patch
...

👉 Ví dụ 15: Để có thể tải xuống, giải nén và biên dịch mã nguồn cùng một lúc, sử dụng tùy chọn --compile source như hiển thị bên dưới:

blogd@ubuntuserver:~$ sudo apt-get  goaccess
Reading package lists... Done
NOTICE: 'goaccess' packaging is maintained in the 'Git' version control system at:
https://salsa.debian.org/debian/goaccess.git
Please use:
git clone https://salsa.debian.org/debian/goaccess.git
to retrieve the latest (possibly unreleased) updates to the package.
Need to get 381 kB of source archives.
Get:1 http://vn.archive.ubuntu.com/ubuntu disco/universe goaccess 1:1.2-4 (dsc) [2,096 B]
Get:2 http://vn.archive.ubuntu.com/ubuntu disco/universe goaccess 1:1.2-4 (tar) [353 kB]
Get:3 http://vn.archive.ubuntu.com/ubuntu disco/universe goaccess 1:1.2-4 (diff) [26.6 kB]
Fetched 381 kB in 4s (106 kB/s)
dpkg-source: info: extracting goaccess in goaccess-1.2
dpkg-source: info: unpacking goaccess_1.2.orig.tar.gz
dpkg-source: info: unpacking goaccess_1.2-4.debian.tar.xz
dpkg-source: info: using patch list from debian/patches/series
dpkg-source: info: applying 0001-Makefile.am-don-t-install-resources.patch

👉 Ví dụ 16: Cách để kiểm tra nhật ký thay đổi của gói bạn hãy sử dụng tuỳ chọn changelog tải một change-log gói và hiển thị phiên bản gói được cài đặt.

blogd@ubuntuserver:~$ sudo apt-get changelog vsftpd
vsftpd (3.0.3-12) unstable; urgency=low

  [Ryan Chu]
  * Fix faulty logic of greping PID in vsftpd.init (closes: #911396)

  [Keng-Yu Lin]
  * Bump Standards-Version to 4.3.0

 -- Keng-Yu Lin <kengyu@lexical.tw>  Wed, 06 Mar 2019 14:52:35 +0800

vsftpd (3.0.3-11) unstable; urgency=low

  [Michael Stone]
  * postinst: check if a file exists rather than a directory (Closes: #905242)

 -- Keng-Yu Lin <kengyu@lexical.tw>  Thu, 02 Aug 2018 12:01:54 +0800
...

👉 Ví dụ 17: Tuỳ chọn check là một công cụ chẩn đoán. Nó được sử dụng để cập nhật bộ đệm gói và kiểm tra các phụ thuộc bị hỏng.

blogd@ubuntuserver:~$ sudo apt-get check
Reading package lists... Done
Building dependency tree
Reading state information... Done

👉 Ví dụ 18: Sử dụng tuỳ chọn build-dep giúp chúng ta có thể tìm kiếm các kho lưu trữ cục bộ trong hệ thống và cài đặt các phụ thuộc xây dựng cho gói. Nếu gói không tồn tại trong kho lưu trữ cục bộ, nó sẽ trả về mã lỗi.

blogd@ubuntuserver:~$  sudo apt-get build-dep netcat
Reading package lists... Done
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  autoconf automake autopoint autotools-dev debhelper dh-autoreconf dh-strip-nondeterminism dwz gettext intltool-debian
  libarchive-zip-perl libfile-stripnondeterminism-perl libtool m4 po-debconf
0 upgraded, 15 newly installed, 0 to remove and 0 not upgraded.
Need to get 3,927 kB of archives.
After this operation, 12.3 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 m4 amd64 1.4.18-2 [199 kB]
Get:2 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 autoconf all 2.69-11 [322 kB]
Get:3 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 autotools-dev all 20180224.1 [39.6 kB]
Get:4 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 automake all 1:1.16.1-4ubuntu3 [522 kB]
Get:5 http://vn.archive.ubuntu.com/ubuntu disco/main amd64 autopoint all 0.19.8.1-9 [412 kB]
...

👉 Ví dụ 19: Để có thể tự động dọn dẹp xóa tất cả các tệp .deb khỏi /var/cache/apt/archives giải phóng dung lượng không gian đĩa chúng ta sử dụng tùy chọn autoclean như sau:

blogd@ubuntuserver:~$ sudo apt-get autoclean
Reading package lists... Done
Building dependency tree
Reading state information... Done

👉 Ví dụ 20: Tuỳ chọn autoremove giúp chúng ta tự động loại bỏ các gói đã được cài đặt để đáp ứng các phụ thuộc cho các gói khác và giờ chúng không còn cần thiết nữa.

blogd@ubuntuserver:~$ sudo apt-get autoremove vsftpd
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package 'vsftpd' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

7. Lời kết

Qua bài trên, giúp cho chúng ta biết cách sử dụng các tính năng của lệnh apt apt-getapt-cache trên hệ điều hành Linux ở các bản phân phối như Debian, Ubuntu. Từ các ví dụ trên giúp cho chúng ta có thể cập nhật hệ thống, cài đặt các gói,... từ đây chúng ta có thể thao tác với các gói trên hệ thống của chúng ta cách dễ dàng hơn.