LINUX.ORG.RU

Показать наименее нужные пакеты


3

2

Как найти наименее нужные, т.е. наиболее давно использованные пакеты?

Бывают программы или библиотеки, которые я установил когда-то, которые были нужны временно и больше не используются. И вот я хочу иногда их удалять чтобы освободить место в корне. Возможно, нужна какая-то утилита, использующая статистику, или какое-то расширение поверх файловой системы или поверх пакетного менеджера. А возможно это делается совсем по-другому, мне любые мысли по этому поводу будут интересны, конечную цель я обозначил. Интересует прежде всего для deb-based, но можно и для других дистрибутивов.

Интернет про это знает совсем немного:

https://unix.stackexchange.com/questions/483900/how-to-find-unused-packages-i...

https://askubuntu.com/questions/630787/how-do-i-eliminate-unused-packages-in-...

★★★

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

Ты не сэкономишь много места, удаляя всякую мелочь. Лучший способ на мой взгляд - при обновлениях удалять ненужные пакеты вместо того, чтобы и обновлять. Еще можно проанализировать расход диска, например, с помощью ncdu, выявить самые большие файли или каталоги, и посмотреть, к каким пакетам они относятся. Еще может быть, что у apt есть аналог emerge --oneshot, чтобы заранее предотвращать захламление

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

Я удаляю не отдельные пакеты, а пакеты связанные с функционалом, который мне не нужен. Например, нет у меня принтера, офисных пакетов и всего связанного с созданием pdf, я полностью удалил cups. Нет qt-софта, от qt5 ничего не осталось. А это порядка 200мб.

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

Ты не сэкономишь много места, удаляя всякую мелочь.

Именно поэтому я хочу удалять не мелочь, а сразу по 30% самого ненужного.

Самое ненужное != самое большое, хотя эту давность использования хорошо бы умножить на какой-то коэффициент, зависящий от размера пакета и его зависимостей.

Каталог я и так знаю - /usr, а файлы там одного порядка по размеру.

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

1.
Выведи atime в unixtime всех файлов в фс
Отсортируй, может быть отрежь по какому-нибудь порогу (типа, старше года-полугода) чтобы уменьшить мусор
Может быть, пофильтруй по какому-нибудь еще признаку (если мы говорим про «используемость», то наверное все файлы с признаком исполняемости?)

find / -type f -printf "\n%A@ %p" -... -...


2.
Для каждого найденного файла просматривай dpkg -S чтобы узнать к какому пакету он принадлежит.

3. Ты великолепен.

slowpony ★★★★★
()

я удалял через аптитуде, ручками.
для каждого пакета в нем можно посмотреть связи «вверх» и удалить те, которые стоят не в жестких требованиях.
кучи всяких индийских шрифтов, доп.улучшателей. удалял когда-то сейчас влом…
самый тяжелый на бессмысленные вкрапления пакет, это фирмваря :) там лишноты в виде драйверов кучами собрана. но дробить пакет никто не будет,

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

Многие не понимают. Цель не удалить лишнее из системы, не сделать говносборку, это другой юзкейс. Здесь надо сделать что-то типа кэша, вытеснить старые пакеты, когда задача, которую они решали, больше не возникает.

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

тогдась пиши желаемое конкретнее.
вытеснить откуда ?? из памяти - прекрасно кеш чистится от старых исполняемых кусков.
у меня вот все свободное место кешами забито (боинк крутится) и норм.

~$ free -h
             total        used        free      shared  buff/cache   available
Память:      3,8Gi       1,1Gi       124Mi       4,0Mi       2,6Gi       2,5Gi

с носителя ну я тебе по это и писал.

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

Ты какой-то совсем поехавший. У тебя в маздайке софт ставится по схеме «все компоненты в одно место» и нет никаких проблем ставить, например, на «диск x».

Не ставь на «диск c» и проблем не будет. Нахрена ты туда ставишь и далее пытаешься это «вытеснять»? Совсем овощной?

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

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

А теги действительно не нужны после того, как их убрали половину и не дали создавать свои. Я их создавал даже, типа www.linux.org.ru/tag/bcm20702, а что толку, теперь их даже найти в списке тегов нельзя.

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

Зачем так реагировать на шутку над невнимательными людьми?

У тебя в маздайке софт ставится по схеме «все компоненты в одно место» и нет никаких проблем ставить, например, на «диск x».

Я с маздайки ушёл уже лет 10 как.

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

Здесь надо сделать что-то типа кэша, вытеснить старые пакеты, когда задача, которую они решали, больше не возникает.

Может тебе и правда нужен какой-нибудь bcache?

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

Нет, bcache это для другого.

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

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

Если чистить по atime, то надо вначале пройтись по списку загруженных сервисов, вполне возможно, что есть что-то по факту ненужное, но регулярное загружаемое с диска.

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

Ну так popularity-contest вроде этот atime и смотрит, но только для программ.

А более интеллектуального ничего не существует?

Ответ на Показать наименее нужные пакеты (комментарий) :

slowpony, наверное, тут надо ещё что-то типа GROUP BY из SQL по имени пакета и SELECT имя пакета, SUM(размер файла), MAX(atime).

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

Я себе в качестве эксперимента сделал весь рут в tmpfs, а то, что нужно сохраняю на отдельном persistent-разделе и монтирую. Т.е. получается что после перезагрузки система всегда в одном состоянии и его изменять нужно явно. Брат жив.

ddidwyll ★★★★
()
Последнее исправление: ddidwyll (всего исправлений: 1)
1 апреля 2023 г.

Собрал данные в файл:

find / -xdev -type f -exec stat --printf='%n|%s|%X|' '{}' \; -exec sh -c "dpkg -S '{}' 2>/dev/null | cut -d' ' -f1 | rev | cut -c 2- | rev; dpkg -S '{}' 1>/dev/null 2>/dev/null || echo" \; > ~/file_data.csv

Выполнялось несколько дней, собралось больше 40 Мб данных.

Затем воспользовался DB Browser for SQLite, в новой базе данных создал таблицу

CREATE TABLE `file_data` (
	`name`	TEXT NOT NULL,
	`size`	INTEGER NOT NULL,
	`access_time`	INTEGER NOT NULL,
	`package`	TEXT,
	PRIMARY KEY(`name`)
)
Файл -> Импорт -> Таблицы из файла CSV ...
Ну а дальше можно писать запросы к базе и получать любые требуемые отчеты.

Спасибо, Aceler, slowpony, annulen.

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

Я в подобной ситуации просто взял список установленных пакетов и просматривал его глазами последовательно. Справился за полчаса.

Вообще смысла в этом не много. Лишние пакеты есть-пить не просят, места в масштабах современных накопителей почти не занимают. Я систему на флешку копировал, только потому и решил почистить.

wandrien ★★
()
14 сентября 2023 г.
Ответ на: комментарий от damix9

Aceler, slowpony, annulen,

SELECT package p, SUM(size) / 1024 / 1024 AS p_size, DATETIME(MAX(access_time), 'unixepoch', 'localtime') AS atime
FROM file_data
GROUP BY package
HAVING atime < '2023-01-27 00:00:00'
ORDER BY p_size DESC
LIMIT 50;
почему-то первым выводит
linux-firmware	418	2022-12-08 05:26:10
хотя прошивки ведь точно подгружались и в этом году.

А выбросить удалось вот что.

# apt purge libclang-6.0-dev openjdk-11-jdk-headless:amd64 fpc-source-3.0.4 llvm-6.0-dev libboost1.65-dev:amd64 libgphobos-8-dev:amd64 libpython3.6-dev:amd64 linux-hwe-5.4-headers-5.4.0-81 linux-headers-4.20.12-042012 linux-headers-4.19.25-041925 texlive-plain-generic texlive-latex-extra libclang-common-6.0-dev libicu-dev libpython2.7-dev:amd64 gimp-help-ru texlive-latex-recommended freepats
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
  dh-python g++-8 gimp-help-common gir1.2-atspi-2.0 gir1.2-gtk-2.0 gir1.2-harfbuzz-0.0 icu-devtools libatk-bridge2.0-dev libatk1.0-dev libatspi2.0-dev libboost-atomic1.65.1 libboost-chrono1.65.1 libboost-serialization1.65.1 libclang1-6.0 libepoxy-dev libffi-dev
  libgphobos76 libgraphite2-dev libharfbuzz-gobject0 libicu-le-hb0 libiculx60 libobjc-7-dev libobjc4 libsgmls-perl libstdc++-8-dev libxcomposite-dev libxft-dev libxtst-dev llvm-6.0 llvm-6.0-runtime preview-latex-style python-all sgmlspl x11proto-composite-dev
  x11proto-record-dev
Для их удаления используйте «apt autoremove».
Будут установлены следующие дополнительные пакеты:
  libpython3.6 libpython3.6-minimal libpython3.6-stdlib python3.6 python3.6-minimal python3.6-venv
Предлагаемые пакеты:
  python3.6-doc
Следующие пакеты будут УДАЛЕНЫ:
  default-jdk-headless* docbook-utils* fp-utils-3.0.4* fpc-source-3.0.4* freepats* gdc* gdc-8* gimp-help-ru* goodvibes* libass-dev* libbluray-dev* libboost-atomic1.65-dev* libboost-chrono1.65-dev* libboost-date-time1.65-dev* libboost-dev*
  libboost-serialization1.65-dev* libboost-system1.65-dev* libboost-thread-dev* libboost-thread1.65-dev* libboost1.65-dev* libclang-6.0-dev* libclang-common-6.0-dev* libgphobos-8-dev* libgphobos-dev* libgtk-3-dev* libgtk2.0-dev* libharfbuzz-dev* libicu-dev*
  libicu-le-hb-dev* libpango1.0-dev* libplist-dev* libpython-all-dev* libpython-dev* libpython2.7-dev* libpython3-dev* libpython3.6-dev* libsoup2.4-dev* libxml2-dev* libxslt1-dev* linux-headers-4.19.25-041925* linux-headers-4.19.25-041925-generic*
  linux-headers-4.20.12-042012* linux-headers-4.20.12-042012-generic* linux-hwe-5.4-headers-5.4.0-81* llvm-6.0-dev* openjdk-11-jdk-headless* python-all-dev* python-dev* python2.7-dev* python3-dev* python3.6-dev* texlive-formats-extra* texlive-latex-extra*
  texlive-latex-recommended* texlive-pictures* texlive-plain-generic* texlive-xetex*
Следующие пакеты будут обновлены:
  libpython3.6 libpython3.6-minimal libpython3.6-stdlib python3.6 python3.6-minimal python3.6-venv
Обновлено 6 пакетов, установлено 0 новых пакетов, для удаления отмечено 57 пакетов, и 852 пакетов не обновлено.
Необходимо скачать 0 B/5 478 kB архивов.
После данной операции объём занятого дискового пространства уменьшится на 1 902 MB.
Хотите продолжить? [Д/н]
И еще
Следующие пакеты будут УДАЛЕНЫ:
  dh-python g++-8 gimp-help-common gir1.2-atspi-2.0 gir1.2-gtk-2.0 gir1.2-harfbuzz-0.0 icu-devtools libatk-bridge2.0-dev libatk1.0-dev libatspi2.0-dev libboost-atomic1.65.1 libboost-chrono1.65.1 libboost-serialization1.65.1 libclang1-6.0 libepoxy-dev libffi-dev
  libgphobos76 libgraphite2-dev libharfbuzz-gobject0 libicu-le-hb0 libiculx60 libobjc-7-dev libobjc4 libsgmls-perl libstdc++-8-dev libxcomposite-dev libxft-dev libxtst-dev llvm-6.0 llvm-6.0-runtime preview-latex-style python-all sgmlspl x11proto-composite-dev
  x11proto-record-dev
Обновлено 0 пакетов, установлено 0 новых пакетов, для удаления отмечено 35 пакетов, и 852 пакетов не обновлено.
После данной операции объём занятого дискового пространства уменьшится на 105 MB.

Но большая часть ненужных файлов оказалась вне всех пакетов - логи и снап.

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