Я просматривал список пакетов с помощью dselect
, но Returnпо ошибке нажал дважды, тем самым подтвердив и выйдя из [S]elect
опции.
Когда я перехожу к этой [I]nstall
опции, она теперь предлагает установить ряд новых пакетов, которые мне не нужны (и которые не имеют ничего общего с тем, что я искал изначально).
Поскольку я еще не приступил к установке, есть ли способ сбросить выбор до того состояния, в котором он был до выбора новых пакетов, не проходя по списку по одному и не нажимая -
для каждого пакета? (Неважно, делается ли это с помощью команды dselect
или с помощью другой связанной команды.)
EDIT: (добавляю пример)
Я пробовал на другой машине, где dselect
установлен. Предположим, что пакет gnugo
не установлен (это просто пример).
- Запустите
delect
и выберите[S]elect
получение списка. - Найдите
gnugo
в этом списке (используйте /, если вы не знакомы сdselect
). - Выберите его с помощью +.
- Нажмите Return, чтобы подтвердить предложения, и Returnеще раз, чтобы подтвердить возврат в главное меню (ошибка, которую я совершил).
Перейти к
[I]nstall
. Теперь там будет написано:Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed gnugo:i386 libgpm2:i386 libncurses5:i386 libreadline6:i386 libtinfo5:i386 0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded. Need to get 1,926 kB of archives. After this operation, 9,634 kB of additional disk space will be used. Do you want to continue [Y/n]?
Здесь выберите вариант «Не продолжать» (
n
).- Покидать
dselect
. dpkg --get-selections | grep gnugo
вообще ничего не дает.- Начните
dselect
снова, перейдите[I]nstall
снова, пакеты по-прежнему будут выбраны для установки.
Конечно, я могу вернуться в [S]elect
список, выполнить поиск gnugo
и нажать , _чтобы снять выделение, но в более сложном случае вам, возможно, придется просмотреть список новых пакетов один за другим.
[I]nstall
in dselect
— это, по-видимому, интерфейс к apt-get install
, но я не уверен, откуда он берет свой выбор. Похоже, dpkg --get-selection
это не он. Что касается dselect
меня, я бы хотел сбросить его в состояние, когда все, что сделано с , ***
остается в том же состоянии, что и было, но то, что теперь отмечено как только **
(и еще не установлено), возвращается к __
, без необходимости вручную проходить через предлагаемый список из [I]nstall
меню.
ПРАВКА 2:
Это явно связано с содержанием /var/lib/dpkg/status
, в котором содержится следующая запись:
Package: gnugo
Status: install ok not-installed
Priority: optional
Section: games
Если я изменю это значение вручную на Status: deinstall ok not-installed
, оно исчезнет из выделения dselect
(что имеет смысл).
Мне бы хотелось иметь общий способ превращения всего, что говорится, Status: install ok not-installed
в Status: deinstall ok not-installed
(оставляя пакеты, говорящие об этом, Status: install ok installed
неизменными).
решение1
Используйте --set-selections
аргумент * для dpkg
:
echo "<package-name> purge" | dpkg --set-selections
Затем вы можете использовать apt-get dselect-upgrade
для применения выбранного вами пакета.
Если вам нужно найти пакеты, которые были выбраны для установки, но еще не установлены (чтобы можно было отменить этот выбор), используйте это:
dpkg --get-selections | awk '{ if ($2=="install") print $1}' | grep -vF "$(dpkg -l | awk '/^ii/ {print $2}')"
Вы можете пойти немного дальше и перенаправить это обратно в --set-selections
, тем самым автоматически отменив выбор всего, что еще не установлено:
dpkg --get-selections | awk '{ if ($2=="install") print $1,"deinstall"}' | grep -vF "$(dpkg -l | awk '/^ii/ {print $2}')" | dpkg --set-selections
*Вы также можете использовать dpkg --get-selections
для перечисления всех явных выборов. Это также покажет вам требуемый формат --set-selections
.
решение2
Оказывается, в нем dpkg --get-selections
не перечислено то, что отмечено для установки и еще не установлено, но dpkg -l '*'
есть, и эти строки начинаются с in
.
В результате следующая строка сбрасывает эти выборки:
dpkg -l '*' | grep '^in ' | awk '{ print $2 " deinstall" }' | dpkg --set-selections
решение3
ИспользоватьСпособность'sвозможности поискадля получения списка.
aptitude -F '%p' search '~ainstall !~i'
Передайте список, чтобы dpkg --set-selections
отметить их как подлежащие удалению.
aptitude -F '%p deinstall' search '~ainstall !~i' | dpkg --set-selections
Кстати: добро пожаловать в 21 век, предлагаю перейти на Aptitude вместо Dselect.