Този кратък мини урок се появява като отговор на загрижеността на един от нашите читатели, Фелипе, който ни писа с молба: «Как мога да разбера кои приложения използват Java?«. Е, не мисля, че има начин да се знае това, но има прост начин да се знае кои пакети (т.е. кои приложения), изброени в хранилищата, зависят от JAVA пакетите. Същият метод може да се използва за всеки друг пакет, например за да се установи от кои приложения зависи MONO. |
Най-често срещаното е желанието да разберете какви други пакети трябва да бъдат инсталирани, за да може пакет X да работи добре. Тези необходими пакети се наричат зависимости и могат да бъдат открити по следния начин:
apt-cache зависи от mypackage
Можете също да отидете в Synaptic, да намерите пакета, да го направите щракнете с десния бутон върху него> Свойства> Зависимости.
Целта на този пост обаче е да установи точно обратното: кои пакети имат X пакет като зависимост. С други думи, в този случай ние познаваме пакета "майка" и искаме да знаем какви други пакети изискват този пакет "майка" да бъде инсталиран, за да работи.
Нека да преминем към примера, за да разберем по-добре въпроса. Нека да видим как да открием пакети, които зависят от пакета openjdk-6-jre. Тоест, как да открия тези приложения, изброени в хранилищата, които зависят от JAVA.
Отворих терминал и написах:
apt-cache зависи от openjdk-6-jre
Ще се появи дълъг списък с пакети, включително OpenOffice, FreeMind, OpenCol и др.
Как да открия правилния пакет "майка"?
Добре, засега толкова лесно, но как да разбера какъв е пакетът "майка", въз основа на който трябва да търся? Е, това изисква известна експертиза и предварителен анализ.
Да предположим, че искам да знам всички приложения, базирани на MONO. В този случай това, което направих, беше да потърся зависимостите на приложение (GBrainy), за което знам, че използва MONO, и въз основа на това да открия пакета "майка" и да потърся обратните зависимости. Уф, изглежда трудно, но е глупост.
Отворих терминал и написах:
apt-cache зависи gbrainy
Резултатите са следните:
Зависи: моно изпълнение
| Зависи: libc6
| Зависи: libc6.1
Зависи: libc0.1
Зависи: libglib2.0-cil
Зависи: libgtk2.0-0
Зависи: libgtk2.0-cil
Зависи: liblaunchpad-интеграция1.0-cil
Зависи: libmono-addins-gui0.2-cil
Зависи: libmono-addins0.2-cil
Зависи: libmono-cairo2.0-cil
Зависи: libmono-corlib2.0-cil
Зависи: libmono-posix2.0-cil
Зависи: libmono-system2.0-cil
Зависи: librsvg2-2
Зависи: моно-csharp-shell
Струваше ми се, че моно-изпълнението може да бъде добър кандидат, затова реших да потърся всички пакети, които зависят от моно-изпълнението:
apt-cache rdepends моно-време на изпълнение
Voila! Появяват се всички пакети, които използват MONO.
За да видим пълен списък на всички пакети, които зависят от някой MONO пакет, бихме могли да напишем:
apt-cache rdepends mono *
Благодаря за отговора на Пабло и благодаря за публикацията 🙂
Пабло ти си моят идол!
Отличен пост.
Страхотен! Благодаря за данните!
За тези от нас, които използваме брутни разпределения ………… шега
за тези, които използват RPM базирани мениджъри на пакети, се използва тази команда
rpm -qR пакети
Пример:
linux @ dhcppc3: ~> rpm -qR xmms
/ BIN / ш
/ BIN / ш
rpmlib (PayloadFilesHavePrefix) <= 4.0-1
rpmlib (CompressedFileNames) <= 3.0.4-1
libICE.so.6
libSM.so.6
libX11.so.6
libXxf86vm.so.1
libc.so.6
libc.so.6 (GLIBC_2.0)
libc.so.6 (GLIBC_2.1)
libc.so.6 (GLIBC_2.3)
libc.so.6 (GLIBC_2.3.4)
libc.so.6 (GLIBC_2.4)
libc.so.6 (GLIBC_2.7)
libdl.so.2
libdl.so.2 (GLIBC_2.0)
libdl.so.2 (GLIBC_2.1)
libgdk-1.2.so.0
libglib-1.2.so.0
libgthread-1.2.so.0
libgtk-1.2.so.0
libpthread.so.0
libpthread.so.0 (GLIBC_2.0)
libpthread.so.0 (GLIBC_2.1)
libpthread.so.0 (GLIBC_2.3.2)
libxmms.so.1
rpmlib (полезен товарIsLzma) <= 4.4.6-1