Bài viết này sẽ giới thiệu với các bạn về cách sử dụng lệnh RPM trên hệ điều hành Linux. Trong bài viết này chúng ta sẽ tìm hiểu về RPM cũng như các ví dụ về nó từ đây giúp cho chúng ta có thể tự học và tự tìm hiểu Linux cơ bản.
1. Giới thiệu về RPM
RPM(Red Hat Package Manager) là một công cụ dùng để quản lý gói mặc định và mã nguồn mở mặc định cho các hệ thống dựa trên Red Hat (RHEL, CentOS và Fedora). Công cụ này giúp cho phép chúng ta có thể cài đặt, cập nhật, gỡ cài đặt, truy vấn, xác minh và quản lý các gói phần mềm trên hệ thống. RPM trước đây được gọi là tệp .rpm
gồm các chương trình và thư viện phần mềm được biên dịch cần thiết cho các gói. Tiện ích này chỉ hoạt động với các gói được xây dựng trên định dạng .rpm
.
Chức năng cơ bản lệnh RPM:
Install
: Sử dụng để cài đặt bất kỳ góiRPM
.Remove
: Sử dụng để xóa hoặc hủy cài đặt bất kỳ góiRPM
.Upgrade
: Sử dụng để cập nhật góiRPM
hiện có.Verify
: Sử dụng để truy vấn bất kỳ góiRPM
.Query
: Sử dụng để xác minh các góiRPM
.
Với quyền root
chúng ta có thể sử dụng lệnh rpm
với các tùy chọn phù hợp để quản lý các gói phần mềm RPM.
RPM
là công cụ miễn phí và được phát hành theo GPL (General Public License). RPM
sẽ lưu giữ thông tin của tất cả các gói đã cài đặt trong /var/lib/rpm
. RPM
xử lý các tệp .rpm
chứa thông tin về các gói như: nó là gì, từ đâu đến, thông tin phụ thuộc, thông tin phiên bản…
Chúng ta có thể tìm gói RPM tại các trang web sau đây:
2. Sử dụng RPM
Các ví dụ cơ bản với lệnh RPM
Ví dụ 1: Cài đặt gói RPM
Tên của tệp RPM
gồm có các thành phần là: tên gói, phiên bản, phát hành và kiến trúc.
Khi chúng ta thực hiện cài đặt RPM
thì nó sẽ kiểm tra xem hệ thống có phù hợp với phần mềm mà gói RPM
chứa hay không, tìm ra nơi cài đặt các tệp và cài đặt chúng trên hệ thống và thêm phần mềm đó vào cơ sở dữ liệu gói RPM
đã được cài đặt.
Chúng ta chạy lệnh rpm
với tùy chọn -i
, -v
, -h
để cài đặt gói RPM wget
như bên dưới:
[root@localhost ~]# rpm -ivh wget-1.19.5-7.el8_0.1.x86_64.rpm
Preparing... ########################################### [100%]
1:wget ########################################### [100%]
Trong đó các tùy chọn có ý nghĩa như sau:
-i
: Cài đặt một gói.-v
: Hiển thị đầy đủ.-h
: Hiển thị dấu băm khi gói được giải nén.
Ví dụ 2: Truy vấn tất cả các gói RPM
Chúng ta có thể truy vấn tất cả các gói RPM đã dược cài đặt bằng cách sử dụng lệnh rpm
cùng với các tùy chọn -q
và -a
:
[root@localhost ~]# rpm -qa
libdrm-2.4.97-2.el7.x86_64
device-mapper-event-1.02.158-2.el7_7.2.x86_64
ebtables-2.0.10-16.el7.x86_64
teamd-1.27-9.el7.x86_64
plymouth-0.8.9-0.32.20140113.el7.centos.x86_64
elfutils-libelf-0.176-2.el7.i686
libstdc++-4.8.5-39.el7.i686
...
Trong đó ý nghĩa các tùy chọn như sau:
q
: Dùng để truy vấn.a
: Dùng để hiển thi tất cả các gói đã cài đặt.
Khi chúng ta muốm tìm kiếm xem một gối PRM có được cài đặt trên hệ thống hay không thì chúng ta có thể kết hợp lệnh rpm
và lệnh grep để tìm kiếm. Ví dụ sau đây chúng ta sẽ xem gói python
có được cài đặt trên hệ thống không.
[root@localhost ~]# rpm -qa | grep python
python-libs-2.7.5-86.el7.x86_64
libselinux-python-2.5-14.1.el7.x86_64
python-schedutils-0.4-6.el7.x86_64
newt-python-0.52.15-4.el7.x86_64
rpm-python-4.11.3-40.el7.x86_64
...
Ví dụ 3: Truy vấn 1 gói RPM cụ thể
Chúng ta có thể truy vấn một gói cụ thể và xác minh chúng đã được cài đặt chưa bằng việc kết hợp rpm
với tùy chọn -q
sau đó là tên của gói cần sác minh như bên dưới:
[root@localhost ~]# rpm -q wget
wget-1.19.5-7.el8_0.1.x86_64
Lưu ý: Để có thể truy vấn một gói, chúng ta cần sác định tên gói một cách chính xác. Nếu tên gói không chính xác, thì lệnh
rpm
sẽ báo cáo rằng gói không được cài đặt.
Ví dụ 4: Truy vấn các gói RPM theo một định dạng khác nhau
Lệnh rpm
cung cấp cho chúng ta tùy chọn –queryformat
, cho phép chúng ta có thể đặt tên thẻ tiêu đề, để liệt kê các gói. Đính kèm thẻ tiêu đề trong {}
.
[root@localhost ~]# rpm -qa --queryformat '%{name}-%{version}-%{release} %{size}n'
NetworkManager-1.14.0-14.el8 9797209
geolite2-city-20180605-1.el8 56549434
policycoreutils-2.8-16.1.el8 668198
pkgconf-m4-1.4.2-1.el8 14187
selinux-policy-targeted-3.14.1-61.el8_0.2 51822907
dnf-data-4.0.9.2-5.el8 34196
...
Ví dụ 5: Xác định vị trí của gói thuộc các tệp
Lệnh sau, cung cấp vị trí của tất cả các tệp liên quan đến gói python 2.7
.
[root@localhost ~]# rpm -qdf /usr/bin/python2.7
/usr/share/doc/python2/README
/usr/share/man/man1/python.1.gz
/usr/share/man/man1/python2.1.gz
/usr/share/man/man1/python2.7.1.gz
Trong đó tùy chọn d
giúp chúng ta đề cập tới tệp liên quan tới gói.
Ví dụ 6: Hiển thị thông tin về gói RPM
Lệnh rpm
giúp cho chúng ta có thể hiển thị rất nhiều thông tin về một pacakge bằng việc kết hợp lệnh rpm
với tùy chọn q
và tùy chọn i
được cài đặt trên hệ thống:
[root@localhost ~]# rpm -qi python
Name : python
Version : 2.7.5
Release : 86.el7
Architecture: x86_64
Install Date: Tue 01 Oct 2019 07:37:48 PM +07
Group : Development/Languages
Size : 80907
License : Python
Signature : RSA/SHA256, Fri 23 Aug 2019 04:40:03 AM +07, Key ID 24c6a8a7f4a80eb5
Source RPM : python-2.7.5-86.el7.src.rpm
Build Date : Wed 07 Aug 2019 08:15:38 AM +07
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.python.org/
Summary : An interpreted, interactive, object-oriented programming language
Description :
Python is an interpreted, interactive, object-oriented programming
language often compared to Tcl, Perl, Scheme or Java. Python includes
modules, classes, exceptions, very high level dynamic data types and
dynamic typing. Python supports interfaces to many system calls and
libraries, as well as to various windowing systems (X11, Motif, Tk,
Mac and MFC).
Programmers can write new built-in modules for Python in C or C++.
Python can be used as an extension language for applications that need
a programmable interface.
Note that documentation for Python is provided in the python-docs
package.
This package provides the "python" executable; most of the actual
implementation is within the "python-libs" package.
Trong đó ý nghĩa các tùy chọn như sau:
i
: Hiển thị thông tin của một package.p
: Chỉ định một package.
Ví dụ 7: Kiểm tra xem tệp RPM thuộc về gói nào.
Khi chúng ta có danh sách các tệp và chúng ta muốn biết gói nào sở hữu tất cả các tệp này thì lệnh rpm
có thể giúp chúng ta xác định điều này.
Ví dụ: Khi chúng ta có tệp /usr/bin/python2.7
để có thể biết gói sở hửu tệp chúng ta thực thi lệnh sau:
[root@localhost ~]# rpm -qf /usr/bin/python2.7
python2-2.7.15-24.module_el8.0.0+193+7850e68f.x86_64
Ví dụ 8: Để có thể liệt kê các gói RPM được cài đặt gần đây chúng ta sử dụng lệnh rpm
với tùy chọn -qa
dùng để truy vấn tất cả ), sẽ giúp chúng ta liệt kê tất cả các gói rpm
được cài đặt gần đây như bên dưới:
[root@localhost ~]# rpm -qa --last
microcode_ctl-2.1-53.3.el7_7.x86_64 Mon 02 Dec 2019 10:54:27 PM +07
python-perf-3.10.0-1062.4.3.el7.x86_64 Mon 02 Dec 2019 10:54:26 PM +07
epel-release-7-12.noarch Mon 02 Dec 2019 10:54:26 PM +07
kernel-3.10.0-1062.4.3.el7.x86_64 Mon 02 Dec 2019 10:54:23 PM +07
kernel-tools-3.10.0-1062.4.3.el7.x86_64 Mon 02 Dec 2019 10:54:16 PM +07
kernel-tools-libs-3.10.0-1062.4.3.el7.x86_64 Mon 02 Dec 2019 10:54:15 PM +07
wget-1.14-18.el7_6.1.x86_64 Mon 02 Dec 2019 10:50:47 PM +07
htop-2.2.0-3.el7.x86_64 Sat 09 Nov 2019 10:41:57 PM +07
gpg-pubkey-352c64e5-52ae6884 Sat 09 Nov 2019 10:41:56 PM +07
...
Ví dụ 9: Nếu chúng ta muốn nâng cấp bất kỳ gói RPM hãy sử dụng tùy chọn -U
. Nó giúp cho chúng ta nâng cấp phiên bản mới nhất của gói và duy trì sao lưu gói cũ hơn để trong trường hợp gói nâng cấp mới hơn không chạy gói đã cài đặt trước đó có thể được sử dụng lại.
[root@localhost ~]# rpm -Uvh wget-1.19.5-7.el8_0.1.x86_64.rpm
Preparing... ########################################### [100%]
1:wget ########################################### [100%]
Ví dụ 10: Để hủy cài đặt một gói RPM chúng ta sử dụng lệnh rpm
với tùy chọn -e
mèm theo đó là tên gói chúng ta cần hủy cài đặt. Giả sử chúng ta muốn hủy cài đặt gói có tên wget
thực hiện như sau:
[root@localhost ~]# rpm -evv wget
D: loading keyring from pubkeys in /var/lib/rpm/pubkeys/*.key
D: couldn't find any keys in /var/lib/rpm/pubkeys/*.key
D: loading keyring from rpmdb
D: opening db environment /var/lib/rpm cdb:0x401
D: opening db index /var/lib/rpm/Packages 0x400 mode=0x0
D: locked db index /var/lib/rpm/Packages
D: opening db index /var/lib/rpm/Name 0x400 mode=0x0
D: read h# 303 Header SHA1 digest: OK (489efff35e604042709daf46fb78611fe90a75aa)
...
Ví dụ 11: Cách xóa gói RPM
không phụ thuộc bằng cách sử dụng tùy chọn --nodeps
không kiểm tra phụ thuộc:
[root@localhost ~]# rpm -ev --nodeps python
Preparing packages...
python-2.7.5-86.el7.x86_64
Lưu ý: Chúng ta cần xác định loại bỏ gói cụ thể nào đó nếu loại bỏ sai có thể ảnh hưởng các ứng dụng làm việc khác.
Ví dụ 12: Khi chúng ta muốn nhập khóa PRM-GPG-KEY
để xác minh các gói RHEL/CentOS/Fedora
chúng ta cần thực hiện như bên dưới lệnh này sẽ nhập RPM-GPG-KEY-CentOS-7
:
[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Ví dụ 13: Sau khi thực hiện thêm PRM-GPG-KEY
chúng ta có thể hiển thị tất cả các PRM-GPG-KEY
đã được nhập trên hệ thống của chúng ta bằng cách thực thi lệnh sau:
[root@localhost ~]# rpm -qa gpg-pubkey*
gpg-pubkey-f4a80eb5-53a7ff4b
gpg-pubkey-352c64e5-52ae6884
Ví dụ 15: Cách liệt kê tất cả các tệp của gói RPM đã cài đặt sử dụng tùy chọn -ql
danh sách truy vấn với lệnh rpm
như bên dưới:
[root@localhost ~]# rpm -ql wget
/etc/wgetrc
/usr/bin/wget
/usr/share/doc/wget-1.14
/usr/share/doc/wget-1.14/AUTHORS
/usr/share/doc/wget-1.14/COPYING
/usr/share/doc/wget-1.14/MAILING-LIST
/usr/share/doc/wget-1.14/NEWS
/usr/share/doc/wget-1.14/README
/usr/share/doc/wget-1.14/sample.wgetrc
/usr/share/info/wget.info.gz
...
Ví dụ 16: Khi chúng ta muốn thực hiện cài dè lệnh gói cũ chúng ta thực hiện như sau. Giả sử chúng ta cần cài đè lên gói wget-1.14*
.
[root@localhost ~]# rpm -ivh --force --nodeps --replacepkgs --replacefiles wget-1.14*.rpm
Qua bài viết trên, giúp cho chúng ta hiểu hơn về cách sử dụng lệnh rpm
trên hệ điều hành Linux.
Chúc các bạn thành công!