LINUX.ORG.RU

Debian. Аналог федоровского dnf userinstalled.

 , ,


0

2

Ночи доброй лор. Никак не могу найти комманду которая бы выводила пакеты, поставленные пользователем, при этом не показывала бы зависимости. Например в федорке был dnf history userinstalled, вывод которого был примерно такой

firefox
vlc
rhythmbox
etc.
Как можно посмотреть подобное в дебиане?

★★★★
Ответ на: комментарий от melkor217

У меня аптитуды в системе не стоит, других путей нету?

Jefail ★★★★
() автор топика

поставленные пользователем

поставленные пользователем - это как? если он входит в группу, которой развегена установка пакетов ?

grem ★★★★★
()
Ответ на: комментарий от grem

Ну, черт. Вот в федорке можно было написать dnf history userinstalled и она выдаст все пакеты, которые пользователь воткнул в систему. При этом НЕ покажет зависимости, которые были притянуты этими пакетами. Это удобно, чтобы время от времени выносить хлам, который уже не нужен.

Jefail ★★★★
() автор топика
Ответ на: комментарий от grem

Да, при этом не покажет системные пакеты.

Jefail ★★★★
() автор топика
Ответ на: комментарий от grem

Вот в том и проблема, я перепробовал все варианты, apt, dpkg, но они все выводят кашу, в которой невозможно разобрать, что системное, что пользователем поставленно, а что и вовсе зависимость.

Jefail ★★★★
() автор топика
Ответ на: комментарий от Jefail

вот apt-mark showmanual вроде бы должен выводить то, что нужно, но такое впечатление, что он туда автоматом запихивал что-то ещё, что ставилось, например, при установке самой системы, чтобы не поудалять эти пакеты невзначай.

есть /var/log/apt/history файлы (включая ротирование), можно из них вытащить попробовать всё, что содержит apt-get install

плюч на основе логов dpkg и /var/log/installer/status

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 2)
Ответ на: комментарий от grem

Почти то, еслибы он содержал только установленные пакеты - цены бы ему не было. Но вот где-то в начале есть apt install gvncviewer и потом он сносится почти в самом конце. Отследить таким боком установленное / удаленное и понять, что в итоге в системе осталось, очень сложно.

Jefail ★★★★
() автор топика
Ответ на: комментарий от grem

Вот это я понимаю, стабильность! Не было в 2010, нет и в 2015. Ладно, спасибо, возможно придется писать обертку-костыль, которая сама будет вести логи установленных / удаленных пакетов.

Jefail ★★★★
() автор топика
Ответ на: комментарий от Jefail

apt-mark hold/unhold только недавно как обёртка появился к dpkg hold и --set-selections

я недавно пытался выяснить как в opensuse удалить более ненужные зависимости, если не удалил их сразу. тоже свой костыль пришлось делать и то на основе того, что они в версии 13.1 добавили в zypper возможность показывать эти ненужные зависимости, а до этого даже их список было нельзя получить.

возможно придется писать обертку-костыль, которая сама будет вести логи установленных / удаленных пакетов.

лучше на виртуалке, имхо, такое тестировать, с небольшим количеством свежих пакетов. но надо бы подумать как-нибудь тоже, как эту инфу выудить.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)

аналога cat /var/lib/portage/world в дебиане нет. Странно конечно, хотя реализовать на уровне логики не особо сложно. Все видимо из-за того, что в dpkg брезгуют этот функционал добавлять, а все аптитуды и апт-геты являются обёрткой вокруг dpkg, т.е если в апт-гет добавить после инсталла пакета писать в /var/log/apt/installed, то если юзер поставит пакет dpkg -i, то он в инсталлед не попадет

bryak ★★★★
()
Ответ на: комментарий от Jefail

вопрос скорее заключается не в том, чтобы вести логи своих установленных пакетов, а в том, что если система чужая, то достаточно проблематично посмотреть, что именно там юзер понаставил.

bryak ★★★★
()
Ответ на: комментарий от Jefail

cat ./history.log | grep 'install '| grep install && zcat ./history.log.* | grep 'install '

уже лучше, вывод показывает 274 позиции, осталось из него выудить только названия пакетов и убрать дублирующиеся. После этого сравнить с выводом dpkg -l | grep 'ii ' и убрать те, которые не содержатся в нём о_О

grem ★★★★★
()

в /var/log/apt/history.log может по dpkg поискать

amorpher ★★★★★
()
Ответ на: комментарий от Jefail

И даже воткнув его - результат не тот, что мне нужен.

можно так попробовать:

aptitude search '~i!~M!~E!~pstandard!~pimportant!~prequired'

Это выведет все установленные вручную пакеты, но без essensial, без пакетов, у которых приоритет standard, important, required. Большинство системных должно отсеяться.

Zubok ★★★★★
()

Не думаю, что в dkpg есть способ слежения за тем, что установил именно пользователь. Однако, есть «причина» установки пакета: вручную или автоматически.

Попробуй

apt-mark showmanual

UPD http://askubuntu.com/questions/2389/generating-list-of-manually-installed-pac...

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от EXL

насчёт костылей. как вывод последовательности команд записать в один файл или передать одному конвейеру, то есть, например, чтобы результат команды ls ; ls | iniq был пустым

p.s. уже нашёл, нужно использовать скобки (ls ; ls) | iniq

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от KennyMinigun

уже советовали, там много пакетов поставленных при установке системы отмечены как «ручные»

grem ★★★★★
()
Ответ на: комментарий от grem

к вывод последовательности команд записать в один файл или передать одному конвейеру,

Так вот, например:

{ cmd1; cmd2; } | less

чтобы результат команды ls ; ls | iniq был пустым

Не понял

{ ls; ls; } | sort | uniq --unique

Оно?

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 2)

у меня получилось так :)

(((cat ./history.log | grep 'install '&& zcat ./history.log.* | grep 'install ') | sed s/.*'install '/''/ | tr ' ' '\n' | sed /^-/d | sort | sed /^'stretch'/d | sed /^'unstable'/d | sed /^'experimental'/d | sed /^'Dpkg::Options::='/d |uniq) && (dpkg -l | grep 'ii' | sed s/'ii  '// | sed -e s/' '.*//g)) | sort | uniq -d

то есть это объединённые скобками последовательности:

(cat ./history.log | grep 'install '&& zcat ./history.log.* | grep 'install ')
 | sed s/.*'install '/''/ | tr ' ' '\n' | sed /^-/d | sort | sed /^'stretch'/d | sed /^'unstable'/d | sed /^'experimental'/d | sed /^'Dpkg::Options::='/d |uniq
dpkg -l | grep 'ii' | sed s/'ii  '// | sed -e s/' '.*//g
 | sort | uniq -d 

Получилось 96 пакетов

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 3)
Ответ на: комментарий от grem

хотя всякие | sed /^-/d | sort | sed /^'stretch'/d | sed /^'unstable'/d | sed /^'experimental'/d | sed /^'Dpkg::Options::='/d можно не делать, всё равно этот список потом сравнивается со списком из вывода dpkg -l и выводятся только совпадающие.

grem ★★★★★
()
Ответ на: комментарий от grem

а dpkg -l | grep 'ii' | sed s/'ii '// | sed -e s/' '.*//g можно заменить на dpkg-query -f '${binary:Package}\n' -W

grem ★★★★★
()
Ответ на: комментарий от grem

не совсем то :( не показывает пакеты, установленные через dpkg -i

grem ★★★★★
()
Ответ на: комментарий от grem

Получилось 96 пакетов

comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

А так сколько получилось?

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

уже написал, что не всё выводит у меня, да и длинновато.

как у тебя вариант тоже нашёл уже, но там тоже странно выглядит список, слишком много lib* содержит

comm -23 <(apt-mark showmanual | sort) <(cat /var/log/installer/status | sed -n 's/^Package: //p' | sort) | wc -l выдаёт 601 пакет, тоже уже проверял так

grem ★★★★★
()
Ответ на: комментарий от EXL

Вообще странно, мой длинный способ должен выводить всё, что устанавливалось через «apt-get install», то есть то, что явно указывали ставить, так как «парсит» логи apt-get. При этом он не содержит то, что устанавливалось через «dpgk -i» и, скорее всего, «aptitude», может даже «synaptic».

Что при этом на самом деле выводит сравнение «apt-mark showmanual» и /var/log/installer/status" я уже не понимаю. Неужели я руками поставил 158 lib* файлов ? о_О

grem ★★★★★
()
Ответ на: комментарий от grem

Увы, судя по содержимомму /var/lib/apt/extended_states и выводу apt-mark showmanual, apt-mark включает в «установленные вручную» те пакеты, для которых есть пометка Auto-Installed: 0, а также те пакеты, которых в этом файле нет (вот тех самых 158 библиотек в файле, вероятно, нет, так как они устанавливались без помощи apt-get во время установки).

Для просмотра установленных приложений я обычно пользуюсь, как это ни странно звучит, deborphan -a. Она показывает все пакеты, от которых ничего не зависит, это обычно и есть нужные пакеты (или уже ненужные, которые можно и удалить).

TeopeTuK ★★★★★
()
Ответ на: комментарий от mul4

Ну, как бы вам объяснить. На примере федоры. Ставим чистую систему, делаем dnf history userinstalled - пусто. Если потом в систему ставится какой-то софт (да, ставится он от рута, но ставится как-бы пользователем), то этот софт попадает в этот список, причем в виде основного пакета, зависимостей, который он за собой притянул там нет. Это очень удобно в том плане, что можно время от времени вычищать то, что уже не нужно, а лишние зависимости сносить через autoremove.

Jefail ★★★★
() автор топика
Ответ на: комментарий от Jefail

Блин, долго допирало, что тебе нужен аналог мира из генты.

DeadEye ★★★★★
()
Последнее исправление: DeadEye (всего исправлений: 1)
Ответ на: комментарий от Jefail

Зависимостей в выводе apt-mark showmanual нет, ибо они получают флаг автоматической установки. Есть установленные явно пакеты, а также пакеты из базовой системы. Точного аналога запрашиваемой вами функциональности нет. Однако, для вашей задачи «удалить ранее установленные и не нужные более пакеты» это не проблема. Просто просматриваете список и:

* если пакет вам не известен => вы его не ставили;

* если пакет вам известен => вы знаете, нужен он вам или нет.

Если хочется полный аналог, можно сразу после установки сохранить список пакетов: apt-mark showmanual > /root/syspkgs - и затем получить список установленных лично вами можно так: apt-mark showmanual | cat - /root/syspkgs | sort | uniq -u.

anonymous
()
Ответ на: комментарий от anonymous

Все равно вывод огромный + куча системных пакетов. Но похоже это единственный вариант, лучше чем ничего.

Jefail ★★★★
() автор топика
Ответ на: комментарий от Jefail

Ты deborphan -a попробуй все-таки. Для поиска уже не нужных приложений весьма подходит.

TeopeTuK ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.