Список пакетов в Конфетке, которые зависят от другого установленного пакета

Linux начинает подкачивать, прежде чем RAM заполнена. Это сделано для улучшения производительности и скорости отклика:

  • Производительность увеличена, потому что иногда RAM лучше используется для дискового кэша, чем сохранить память программ. Таким образом, лучше выгрузить программу, это было неактивно некоторое время и вместо этого сохраняет часто используемые файлы в кэше.

  • Скорость отклика улучшена путем выгрузки страниц, когда система неактивна, скорее чем, когда память полна, и некоторая программа выполняет и запрашивает больше RAM выполнить задачу.

Свопинг действительно замедляет систему, конечно —, но альтернатива свопингу не не подкачивает, это имеет больше RAM или использует меньше RAM.

50
08.06.2011, 12:52
6 ответов

Опция об/мин, которую Вы хотите:

rpm -q --whatrequires sqlite

Отредактированный: добавленный - установленный на обсуждение в других ответах/комментариях

Отредактированный: удаленный - установленный, поскольку это - недопустимая опция для об/мин

48
27.01.2020, 19:33
  • 1
    Далее, repoquery может использоваться для генерации хорошего дерева как структура всех пакетов, которые требуют конкретного пакета, например: repoquery --pkgnarrow=installed --tree-whatrequires sqlite –  pdp 23.10.2017, 20:17

Я думаю, что Вы действительно хотите знать, "что является пакетами, которые требуют sqlite-3.3.6, но не будут довольны sqlite-3.4.z"... и единственным хорошим способом узнать это, должен попробовать его. Как:

echo | yum upgrade sqlite
3
27.01.2020, 19:33
[1183592]Вы также могли бы попробовать эту команду.

Я получил эту команду из [1183908]ServerFault[1183909], а также из [1183910]The Fedora Forums.

7
27.01.2020, 19:33

Для dnf (новая версия yum) вы можете попробовать с помощью команды оболочки repoquery:

dnf repoquery --whatrequires sqlite

Если она недоступна, вы можете установить ее с помощью команды:

dnf -y install dnf-plugins-core
12
27.01.2020, 19:33

Ответ

repoquery -q --installed --whatrequires sqlite

Пояснения

rpm -q --whatrequires sqlite сообщает только о зависимостях от имен пакетов.

Напротив, репозиторий действует следующим образом (из справочных страниц):

   --alldeps
          When used with --whatrequires, look for non-explicit dependencies in addition to explicit ones (e.g. files and Provides  in  addition  to  package  names).
          This is the default.

Пример

Возьмем пакет libdb .

# rpm -q --whatrequires libdb
no package requires libdb

Ни один пакет не зависит от libdb , поэтому мы сможем удалить его плавно. Однако ...

# yum remove -y libdb
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package libdb.x86_64 0:5.3.21-19.el7 will be erased
--> Processing Dependency: libdb(x86-64) = 5.3.21-19.el7 for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: pam-1.1.8-12.el7_1.1.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: cyrus-sasl-lib-2.1.26-20.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-python-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: python-libs-2.7.5-39.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-devel-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: 2:postfix-2.10.1-6.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-build-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: iproute-3.10.0-54.el7_2.1.x86_64
--> Running transaction check
. . .
. . .
. . .
Error: Trying to remove "systemd", which is protected
Error: Trying to remove "yum", which is protected

Как вы можете видеть, некоторые другие пакеты зависели не напрямую от пакета, а от предоставленного им файла libdb-5.3.so () (64bit) .

Наконец, вот реальный список пакетов в зависимости от libdb :

# repoquery -q --installed --whatrequires libdb
cyrus-sasl-lib-0:2.1.26-20.el7_2.x86_64
iproute-0:3.10.0-54.el7_2.1.x86_64
libdb-utils-0:5.3.21-19.el7.x86_64
pam-0:1.1.8-12.el7_1.1.x86_64
postfix-2:2.10.1-6.el7.x86_64
python-libs-0:2.7.5-39.el7_2.x86_64
rpm-0:4.11.3-17.el7.x86_64
rpm-build-libs-0:4.11.3-17.el7.x86_64
rpm-devel-0:4.11.3-17.el7.x86_64
rpm-libs-0:4.11.3-17.el7.x86_64
rpm-python-0:4.11.3-17.el7.x86_64
39
27.01.2020, 19:33

Как сказал Уэс Хардакер , хорошим построенным -методом является использование rpm -q --whatrequires <package>. Дело в том, что rpmработает с возможностями для разрешения зависимостей, а не просто с пакетами, как например. dpkgработает в семействе дистрибутивов Linux Debian/Ubuntu. Как отмечали другие, простое выполнение rpm -q --whatrequires sqliteне говорит всей истории, поэтому некоторые предложили использовать repoquery. Однако repoqueryне устанавливается по умолчанию в минимальной версии RHEL/CentOS 7 (, может быть, и на рабочем столе тоже? ), поэтому он может быть доступен не всем.

Пользователь может выполнить rpm -q --provides <pkgname>, чтобы увидеть все возможности, предоставляемые пакетом, а затем использовать rpm -q --whatrequires <capability>, чтобы узнать, какие установленные пакеты требуют этой возможности. Эту информацию можно кратко запросить с помощью строки BASH one -(, разделенной здесь на две строки по длине ):

.
capabilities=($(rpm -q --provides sqlite | awk -F= '{print $1}'));
for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done

При этом используются только параметры, встроенные -в сам rpm, поэтому не требуется установка каких-либо дополнительных пакетов (, например. yum-utilsв CentOS 7, который представляет собой пакет, содержащийrepoquery).

1
27.01.2020, 19:33

Теги

Похожие вопросы