در این مطلب قصد داریم به شما نحوه بررسی و لیست کردن پکیج‌های نصب شده در محیط سرور لینوکس CentOS (ورژن‌های 6.x/7.x/8.x) را آموزش بدهیم. اطلاع از لیست پکیج‌های نصب شده در CentOS در مواردی که می‌خواهید پکیج‌های مورد نظرتان را restore یا reinstall کنید، بسیار کاربردی و راهگشا است. همچنین اگر قصد دارید پکیج‌های مورد نظرتان را در چندین سرور مختلف mirror کنید، این مطلب می‌تواند برای شما مفید باشد.


مراحل بررسی پکیج‌های نصب شده در CentOS

مراحل انجام کار به شرح زیر است:

1) ترمینال را باز کنید.

2) با استفاده از فرمان ssh در ریموت سرور خود لاگین نمایید:

ssh user@centos-linux-server-IP-here

3) برای مشاهده اطلاعات مربوط به همه پکیج‌های نصب شده در CentOS، فرمان زیر را اجرا نمایید:

sudo yum list installed

4) برای شمارش تمامی پکیج‌های نصب شده، فرمان زیر را اجرا نمایید:

sudo yum list installed | wc -l

5) برای ذخیره نام تمامی پیکیج‌های نصب شده در یک فایل، فرمان زیر را اجرا نمایید:

sudo yum list installed > my_list.txt

6) برای رفرش کردن دیتابیس پیکج‌هاتون و نصب آپدیت‌های موجود برای پکیج‌ها، فرمان زیر را اجرا نمایید:

sudo yum update

در ادامه با جزئیات بیشتری مراحل فوق را مورد بررسی قرار می‌دهیم با ما همراه باشید.


بررسی و لیست کردن پکیج‌های نصب شده با استفاده فرمان yum

نقل قول از صفحه اصلی dnf/yum:

“فرمان list در واقع لیستی از پکیج‌ها را نمایش می‌دهد و قرار گیری هر پکیج در این لیست وابسته به ارتباطی است که آن پکیج با سیستم دارد. یک پکیج زمانی نصب‌شده یا به اصطلاح installed در نظر گرفته می‌شود که در RPMDB وجود داشته باشد. بعلاوه، زمانی یک پکیج در دسترس یا به اصطلاح available است که نصب نشده باشد، اما در یک ریپازیتوری که DNF از آن آگاه است وجود داشته باشد. فرمان list می‌تواند بر اساس شاخص‌های دیگری هم لیست پکیج‌ها را نمایش بدهد. به عنوان مثال، این فرمان می‌تواند لیستی از پکیج‌هایی که برای آپدیت پکیج‌های نصب شده بکار رفته‌اند را نیز نمایش بدهد. استفاده از exclude در فایل پیکر‌بندی (.conf) می‌تواند روی نتیجه تاثیر داشته باشد. اما با استفاده از disableexcludes در خط فرمان می‌توان از لیست شدن تمامی پکیج‌های نصب شده اطمینان حاصل کرد.”

از این رو ، برای لیست کردن پکیج‌های نصب شده روی CentOS، دستور yum زیر را تایپ کنید:

sudo yum list --installed
sudo yum list --installed | more

لیست پکیج‌های نصب شده در CentOS با استفاده از دستور yum

از فرمان grep می‌توانید برای فیلتر کردن نتایج استفاده کنید. به عنوان مثال می‌توانید با استفاده از دستور زیر بفهمید که nginx روی سرور شما نصب است یا خیر:

sudo yum list --installed | grep nginx

برای لیست کردن پکیج‌های اضافی نصب شده روی سیستم که در هیچ ریپازیتوری شناخته شده‌ای موجود نیستند، فرمان زیر را اجرا نمایید:

sudo yum list --extras

خروجی نمونه:

Last metadata expiration check: 0:21:58 ago on Friday 29 November 2019 05:19:57 PM UTC.
Extra Packages
qemu-guest-agent.x86_64            15:2.12.0-64.module_el8.0.0+44+94c1b039.2             @AppStream

لیست کردن تمامی پکیج‎‌های شناخته شده برای ما، با اجرای فرمان زیر:

sudo yum list --all

برای لیست کردن تمامی پکیج‌های موجود یا به اصطلاح available، فرمان زیر را اجرا نمایید:

sudo yum list --available

برای شمارش پکیج‌ها می‌توانید بر اساس نیازتان یکی از فرامین زیر را اجرا نمایید:

sudo yum list --installed | wc -l
sudo yum list --all | wc -l
sudo yum list --available | wc -l

لیست کردن تمامی پکیج‌هایی که نیاز به update/patching دارند

ایمن‌سازی سرور یک امر حیاتی و بسیار مهم است که یکی از ملزومات آن بروز بودن مجموعه سیستم شما است. بدین منظور و برای اطلاع از آپگریدهای موجود برای پکیج‌های نصب شده روی سیستم خود، از فرامین زیر استفاده نمایید:

sudo yum list --upgrades
sudo yum list --upgrades | more
sudo yum list --upgrades | grep -i kernel

خروجی نمونه:

Available Upgrades
bash.x86_64                             4.4.19-8.el8_0                                    BaseOS   
dracut.x86_64                           049-10.git20190115.el8_0.1                        BaseOS   
dracut-config-rescue.x86_64             049-10.git20190115.el8_0.1                        BaseOS   
dracut-network.x86_64                   049-10.git20190115.el8_0.1                        BaseOS   
dracut-squash.x86_64                    049-10.git20190115.el8_0.1                        BaseOS   
grub2-common.noarch                     1:2.02-66.el8_0.1                                 BaseOS   
grub2-pc.x86_64                         1:2.02-66.el8_0.1                                 BaseOS   
grub2-pc-modules.noarch                 1:2.02-66.el8_0.1                                 BaseOS   
grub2-tools.x86_64                      1:2.02-66.el8_0.1                                 BaseOS   
grub2-tools-extra.x86_64                1:2.02-66.el8_0.1                                 BaseOS   
grub2-tools-minimal.x86_64              1:2.02-66.el8_0.1                                 BaseOS   
initscripts.x86_64                      10.00.1-1.el8_0.1                                 BaseOS   
kernel.x86_64                           4.18.0-80.11.2.el8_0                              BaseOS   
kernel-core.x86_64                      4.18.0-80.11.2.el8_0                              BaseOS   
kernel-modules.x86_64                   4.18.0-80.11.2.el8_0                              BaseOS   
kernel-tools.x86_64                     4.18.0-80.11.2.el8_0                              BaseOS   
kernel-tools-libs.x86_64                4.18.0-80.11.2.el8_0                              BaseOS   
kpartx.x86_64                           0.7.8-7.el8_0.2                                   BaseOS   
libnfsidmap.x86_64                      1:2.3.3-14.el8_0.2                                BaseOS   
platform-python.x86_64                  3.6.8-4.el8_0                                     BaseOS   
python3-libs.x86_64                     3.6.8-4.el8_0                                     BaseOS   
python3-perf.x86_64                     4.18.0-80.11.2.el8_0                              BaseOS   
python3-rpm.x86_64                      4.14.2-11.el8_0

تهیه لیست پکیج‌های نصب شده در CentOS با استفاده از دستور rpm:
sudo rpm -qa
sudo rpm -qa | more
sudo rpm -qa | wc -l
sudo rpm -qa | grep bash

لیست پکیج‌های نصب شده روی CentOS با استفاده از دستور rpm

برای اینکه بفهمید پکیج nginx و bash روی سرور شما نصب است، به روش زیر اقدام کنید:

sudo rpm -q nginx
// output: package nginx is not installed

sudo rpm -q bash
// output: bash-4.4.19-7.el8.x86_64

بکارگیری فرمان repoquery از پکیج dnf-utils

ابتدا، yum-utils را در CentOS 6.x/7.x یا dnf-utils را در CentOS 8.x نصب نمایید:

sudo yum install yum-utils ## centos 6.x/7.x ##
sudo yum install dnf-utils ## centos 8.x ##

خروجی نمونه:

Last metadata expiration check: 0:40:40 ago on Friday 29 November 2019 05:19:57 PM UTC.
Dependencies resolved.
===================================================================================================
 Package                Arch                Version                      Repository           Size
===================================================================================================
Installing:
 dnf-utils              noarch              4.0.2.2-3.el8                BaseOS               62 k
 
Transaction Summary
===================================================================================================
Install  1 Package
 
Total download size: 62 k
Installed size: 18 k
Is this ok [y/N]: y
Downloading Packages:
dnf-utils-4.0.2.2-3.el8.noarch.rpm                                  11 MB/s |  62 kB     00:00    
---------------------------------------------------------------------------------------------------
Total                                                              6.1 MB/s |  62 kB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                           1/1 
  Installing       : dnf-utils-4.0.2.2-3.el8.noarch                                            1/1 
  Running scriptlet: dnf-utils-4.0.2.2-3.el8.noarch                                            1/1 
  Verifying        : dnf-utils-4.0.2.2-3.el8.noarch                                            1/1 
 
Installed:
  dnf-utils-4.0.2.2-3.el8.noarch                                                                   
 
Complete!

برای بررسی پکیج‌های نصب شده در CentOS فرمان زیر را اجرا نمایید:

sudo yum repoquery -a --installed

خروجی:

NetworkManager-1:1.14.0-14.el8.x86_64
NetworkManager-libnm-1:1.14.0-14.el8.x86_64
NetworkManager-team-1:1.14.0-14.el8.x86_64
NetworkManager-tui-1:1.14.0-14.el8.x86_64
acl-0:2.2.53-1.el8.x86_64
audit-0:3.0-0.10.20180831git0047a6c.el8.x86_64
audit-libs-0:3.0-0.10.20180831git0047a6c.el8.x86_64
authselect-0:1.0-13.el8.x86_64
authselect-compat-0:1.0-13.el8.x86_64
authselect-libs-0:1.0-13.el8.x86_64
basesystem-0:11-5.el8.noarch
....
..
....
vim-minimal-2:8.0.1763-10.el8.x86_64
virt-what-0:1.18-6.el8.x86_64
which-0:2.21-10.el8.x86_64
xfsprogs-0:4.19.0-2.el8.x86_64
xkeyboard-config-0:2.24-3.el8.noarch
xz-0:5.2.4-3.el8.x86_64
xz-libs-0:5.2.4-3.el8.x86_64
yum-0:4.0.9.2-5.el8.noarch
zlib-0:1.2.11-10.el8.x86_64

نمایش نام ، معماری و ریپازیتوری کلیه پکیج‌های nginx:

sudo yum repoquery --queryformat '%{name}.%{arch} : %{reponame}' nginx

لیست تمامی پکیج‌های موجود ارائه کننده “وب‌سرور”:

sudo yum repoquery --whatprovides webserver

یا، لیست تمامی پکیج‌های موجود ارائه کننده “وب‌سرور” با معماری “i686”:

sudo yum repoquery --whatprovides webserver --arch i686
اطلاعات بیشتر در مورد repoquery

 برای ایجاد یک قالب نمایشی سفارشی می‌توان از سینتکسِ -qf %{format} یا –queryformat %{format} استفاده کرد. عملکرد {format}% اینگونه است که به هر کدام از پکیج‌هایی که در خروجی نمایش داده می‌شوند یک متن(string) الحاق می‌کند. عملکرد {<tag>}% اینگونه است که ویژگی مشخص شده در قسمت tag با مقدار متناظر با همان ویژگی در پکیج جایگزین می‌شود. لیست تگ‌های شناخته شده را می‌توانید با اجرای فرمان زیر بدست آورید:

dnf repoquery --querytags

خروجی نمونه:

Available query-tags: use --queryformat ".. %{tag} .."

name, arch, epoch, version, release, reponame (repoid), evr,
debug_name, source_name, source_debug_name,
installtime, buildtime, size, downloadsize, installsize,
provides, requires, obsoletes, conflicts, sourcerpm,
description, summary, license, url

به عنوان مثال، می‌توانیم لیستی با ساختار دلخواه به شکل زیر ایجاد کنیم:

repoquery -a --installed \
--queryformat "%{name}-%{arch}-%{version} installed at '%{installtime}' from '%{reponame}'"

خروجی نمونه:

newt-x86_64-0.52.20 installed at '2019-09-25 14:48' from '@System'
nftables-x86_64-0.9.0 installed at '2019-09-25 14:48' from '@System'
npth-x86_64-1.5 installed at '2019-09-25 14:48' from '@System'
numactl-libs-x86_64-2.0.12 installed at '2019-09-25 14:48' from '@System'
openldap-x86_64-2.4.46 installed at '2019-09-25 14:48' from '@System'
openssh-clients-x86_64-7.8p1 installed at '2019-09-25 14:49' from '@System'
openssh-server-x86_64-7.8p1 installed at '2019-09-25 14:49' from '@System'
openssh-x86_64-7.8p1 installed at '2019-09-25 14:49' from '@System'
openssl-libs-x86_64-1.1.1 installed at '2019-09-25 14:48' from '@System'
openssl-pkcs11-x86_64-0.4.8 installed at '2019-09-25 14:48' from '@System'
openssl-x86_64-1.1.1 installed at '2019-09-25 14:48' from '@System'
os-prober-x86_64-1.74 installed at '2019-09-25 14:48' from '@System'
p11-kit-trust-x86_64-0.23.14 installed at '2019-09-25 14:48' from '@System'
p11-kit-x86_64-0.23.14 installed at '2019-09-25 14:48' from '@System'
pam-x86_64-1.3.1 installed at '2019-09-25 14:48' from '@System'
parted-x86_64-3.2 installed at '2019-09-25 14:49' from '@System'
passwd-x86_64-0.80 installed at '2019-09-25 14:49' from '@System'

نحوه بررسی پکیج‌های نصب شده در CentOS و پشتیبان‌گیری از آن‌ها

می توان کلیه پکیج‌های نصب شده را با استفاده از سینتکس زیر فهرست و پشتیبان‌گیری کرد:

rpm -qa --qf "%{NAME}\n" |\
sort > /nas/installed-software-mm-dd-yyyy.log

برای مرور کردن لیست از فرمان cat به روش زیر استفاده کنید:

cat /nas/installed-software-mm-dd-yyyy.log

در صورت نیاز، برای بازیابی (restore) تمامی پکیج‌های بدست آمده از اجرای دستور فوق، بصورت زیر عمل کنید:

yum -y install $(cat /nas/installed-software-mm-dd-yyyy.log)

نکته‌ای درباره تاریخچه نصب پکیج‌ها در +CentOS / RHEL v6.x

فرمان yum در آخرین نسخه CentOS / RHEL v6.x آپشنی با عنوان history دارد که به وسیله آن می‌توانید تاریخچه‌ای از پکیج‌های نصب شده در سرور ابری خودتان را مشاهده کنید:

sudo yum history

نمونه خروجی:

ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     4 | install dnf-utils        | 2019-11-29 18:00 | Install        |    1   
     3 | remove dnf-utils         | 2019-11-29 18:00 | Removed        |    1   
     2 | install yum-utils        | 2019-11-29 17:21 | Install        |    1   
     1 |                          | 2019-09-25 14:48 | Install        |  396 EE

ما می‌توانیم با استفاده از ID هر یک از خروجی‌های فوق را با جزئیات بیشتری مورد بررسی قرار دهیم:

sudo yum history info ID
sudo yum history info 2

خروجی نمونه:

Transaction ID : 2
Begin time     : Friday 29 November 2019 05:21:50 PM UTC
Begin rpmdb    : 393:911fb7e090842db316c671dc9e4b3bba7ffc7f2d
End time       : Friday 29 November 2019 05:21:50 PM UTC (0 seconds)
End rpmdb      : 394:e2078e6f2b3657ae7b67053902eae91a492a54a5
User           : root <root>
Return-Code    : Success
Releasever     : 8
Command Line   : install yum-utils
Packages Altered:
    Install dnf-utils-4.0.2.2-3.el8.noarch @BaseOS

جمع بندی:

در این مطلب شما یاد گرفتید که چگونه پکیج‌های نصب شده را با استفاده از دستورات yum و rpm بررسی کنید و لیستی از آن‌ها تهیه نمایید.