Предположим, я захотел скомпилировать какой-то софт и понаставил себе всяких libfoo-dev, libbar-dev, libbaz-dev и сотню других. Спустя N времени я решаю сделать apt-get autoremove и вижу, что он не удаляет libfoo-dev. Почему он этого не делает? А фиг знает, я уже давным давно забыл что ставил ее, а сейчас об этом узнать уже негде.
У apt-get нет педали «а теперь дай мне список всех пакетов, которые сейчас установлены потому что я/установщик системы так когда-то сказал, а не потому, что они чьи-то зависимости».
Ну и соответственно обратные проблемы, когда apt-get autoremove неожиданно хочет удалить что-то важное. Он это хочет сделать потому, что это что-то перестало быть зависимостью заказанного юзером пакета. Ситуация еще более усугублена тем, что нет *отдельного* списка пакетов, которые установлены потому, что являются необходимыми для базовой системы, что порождает ситуации «в системе уже был пакет X (о чем я не знал), я заказал установку X, спустя полгода заказал удаление X, autoremove, упс».
И самое неочевидное состоит в том, что когда apt-get install говорит что пакет уже установлен, он на самом деле кое-что делает еще. Он помечает этот пакет как «пакет, который установлен потому что его попросил пользователь». Но нет легкого способа убрать эту пометку, не удалив пакет, как и нет простого способа увидеть список таких пакетов.
Вот. Если все-равно непонятно, могу наделать примеров.
apt-get