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


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

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

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

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

[php]ssh user@centos-linux-server-IP-here[/php]

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

[php]sudo yum list installed[/php]

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

[php]sudo yum list installed | wc -l[/php]

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

[php]sudo yum list installed > my_list.txt[/php]

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

[php]sudo yum update[/php]

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


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

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

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

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

[php]sudo yum list –installed
sudo yum list –installed | more[/php]

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

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

[php]sudo yum list –installed | grep nginx[/php]

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

[php]sudo yum list –extras[/php]

خروجی نمونه:

[php]
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[/php]

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

[php]sudo yum list –all[/php]

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

[php]sudo yum list –available[/php]

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

[php]sudo yum list –installed | wc -l
sudo yum list –all | wc -l
sudo yum list –available | wc -l[/php]


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

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

[php]sudo yum list –upgrades
sudo yum list –upgrades | more
sudo yum list –upgrades | grep -i kernel[/php]

خروجی نمونه:

[php]
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[/php]


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

[php]sudo rpm -qa
sudo rpm -qa | more
sudo rpm -qa | wc -l
sudo rpm -qa | grep bash[/php]

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

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

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

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


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

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

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

خروجی نمونه:

[php]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![/php]

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

[php]sudo yum repoquery -a –installed[/php]

خروجی:

[php]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[/php]

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

[php]sudo yum repoquery –queryformat ‘%{name}.%{arch} : %{reponame}’ nginx[/php]

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

[php]sudo yum repoquery –whatprovides webserver[/php]

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

[php]sudo yum repoquery –whatprovides webserver –arch i686[/php]

اطلاعات بیشتر در مورد repoquery

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

[php]dnf repoquery –querytags[/php]

خروجی نمونه:

[php]
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[/php]

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

[php]repoquery -a –installed \
–queryformat "%{name}-%{arch}-%{version} installed at ‘%{installtime}’ from ‘%{reponame}’"[/php]

خروجی نمونه:

[php]
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'[/php]


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

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

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

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

[php]cat /nas/installed-software-mm-dd-yyyy.log[/php]

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

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


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

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

[php]sudo yum history[/php]

نمونه خروجی:

[php]
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[/php]

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

[php]sudo yum history info ID
sudo yum history info 2[/php]

خروجی نمونه:

[php]
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[/php]


جمع بندی:

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