Ich habe die Paketliste mit durchgesehen dselect
, aber Returnversehentlich zweimal gedrückt, wodurch die [S]elect
Option bestätigt und beendet wurde.
Wenn ich die Option aufrufe [I]nstall
, wird mir nun die Installation einer Reihe neuer Pakete vorgeschlagen, die ich nicht haben möchte (und die nichts mit dem zu tun haben, wonach ich ursprünglich gesucht habe).
Da ich die Installation selbst noch nicht durchgeführt habe, gibt es eine Möglichkeit, die Auswahl auf den Stand vor der Auswahl neuer Pakete zurückzusetzen, ohne die Liste einzeln durchzugehen und -
für jedes Paket auf zu klicken? (Ob dies über oder über einen anderen verwandten Befehl erfolgt, spielt keine Rolle dselect
.)
BEARBEITEN: (Ein Beispiel hinzufügen)
Ich habe es auf einem anderen Computer versucht, auf dem dselect
es installiert ist. Nehmen wir an, das Paket gnugo
ist nicht installiert (das ist nur ein Beispiel).
- Starten Sie es
delect
und wählen Sie,[S]elect
ob Sie die Liste abrufen möchten. - Suchen Sie
gnugo
in dieser Liste nach (verwenden Sie /, wenn Sie mit nicht vertraut sinddselect
). - Wählen Sie es mit aus +.
- Drücken Sie Return, um die Vorschläge zu bestätigen, und drücken Sie Returnerneut, um zum Hauptmenü zurückzukehren (das ist mein Fehler).
Gehen Sie zu
[I]nstall
. Es wird nun angezeigt: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]?
Wählen Sie hier, nicht fortzufahren (
n
).- Aufhören
dselect
. dpkg --get-selections | grep gnugo
bringt überhaupt nichts.- Starten Sie
dselect
erneut, gehen Sie direkt[I]nstall
erneut zu, die Pakete werden weiterhin zur Installation ausgewählt.
Natürlich kann ich zur [S]elect
Liste zurückkehren, nach suchen gnugo
und drücken, _um die Auswahl aufzuheben. In komplexeren Fällen müssen Sie die Liste mit den neuen Paketen jedoch möglicherweise einzeln durchgehen.
[I]nstall
in dselect
ist offensichtlich ein Frontend für apt-get install
, aber ich bin nicht sicher, woher es seine Auswahl bekommt. Es scheint, dpkg --get-selection
dass es nicht so ist. Was betrifft dselect
, würde ich es gerne in einen Zustand zurücksetzen, in dem alles, was mit erstellt wurde, ***
so bleibt, wie es war, aber was jetzt nur mit markiert ist **
(und noch nicht installiert ist), geht zurück zu __
, ohne dass ich die vorgeschlagene Liste im Menü manuell durchgehen muss [I]nstall
.
BEARBEITEN 2:
Dies hängt offensichtlich mit dem Inhalt von zusammen /var/lib/dpkg/status
, das folgenden Eintrag enthält:
Package: gnugo
Status: install ok not-installed
Priority: optional
Section: games
Wenn ich dies manuell auf ändere Status: deinstall ok not-installed
, verschwindet es aus der Auswahl in dselect
(was Sinn macht).
Was ich möchte, ist eine allgemeine Möglichkeit, alles, was gesagt wird, Status: install ok not-installed
in „umzuwandeln Status: deinstall ok not-installed
“ (wobei die Aussage der Pakete davon Status: install ok installed
unberührt bleibt).
Antwort1
Verwenden Sie das --set-selections
Argument * für Folgendes dpkg
:
echo "<package-name> purge" | dpkg --set-selections
Anschließend können Sie apt-get dselect-upgrade
mit Ihre Paketauswahl übernehmen.
Wenn Sie die Pakete suchen müssen, die zur Installation ausgewählt, aber noch nicht installiert wurden (damit Sie diese Auswahl rückgängig machen können), verwenden Sie Folgendes:
dpkg --get-selections | awk '{ if ($2=="install") print $1}' | grep -vF "$(dpkg -l | awk '/^ii/ {print $2}')"
Sie können es etwas raffinierter gestalten und es zurück in leiten --set-selections
, wodurch automatisch alles abgewählt wird, was noch nicht installiert ist:
dpkg --get-selections | awk '{ if ($2=="install") print $1,"deinstall"}' | grep -vF "$(dpkg -l | awk '/^ii/ {print $2}')" | dpkg --set-selections
*Sie können auch verwenden, dpkg --get-selections
um alle expliziten Auswahlen aufzulisten. Dadurch wird Ihnen auch das --set-selections
erforderliche Format angezeigt.
Antwort2
Es stellt sich heraus, dpkg --get-selections
dass nicht aufgelistet wird, was zur Installation markiert und noch nicht installiert ist, sondern dpkg -l '*'
dass diese Zeilen mit beginnen in
.
Daher werden diese Auswahlen durch die folgende Zeile zurückgesetzt:
dpkg -l '*' | grep '^in ' | awk '{ print $2 " deinstall" }' | dpkg --set-selections
Antwort3
VerwendenEignung'SSuchfunktionenum die Liste zu erhalten.
aptitude -F '%p' search '~ainstall !~i'
Übergeben Sie die Liste an, dpkg --set-selections
um sie als zu entfernend zu markieren.
aptitude -F '%p deinstall' search '~ainstall !~i' | dpkg --set-selections
Abgesehen davon: Willkommen im 21. Jahrhundert, ich schlage vor, von Dselect zu Aptitude zu wechseln.