Entfernen von nicht verwendeten Abhängigkeiten mit "Autoremove"


25

Ich dachte, das Ausführen apt-get autoremoveohne das folgende Argument entfernt alle nicht verwendeten Abhängigkeiten, die auf dem System apt-get autoremove xxxverbleiben , während das Ausführen xxx und seine nicht verwendeten Abhängigkeiten entfernt.

Jedoch habe ich etwas anderes entdeckt. Das Ausführen entfernt apt-get autoremove xxxnicht nur xxx und seine nicht verwendeten Abhängigkeiten, sondern auch alle anderen nicht verwendeten Abhängigkeiten.

Ich habe dann versucht zu laufen apt-get remove --auto-remove xxxund dachte, dass dies nur xxx und seine nicht verwendeten Abhängigkeiten entfernen würde. Zu meiner Überraschung wurden dadurch auch xxx, seine nicht verwendeten Abhängigkeiten und alle anderen nicht verwendeten Abhängigkeiten entfernt.

Dies führt mich zu zwei verwandten Fragen.

(1) Ist dies das beabsichtigte Verhalten der Befehle?

(2) Gibt es eine einfache Möglichkeit, xxx und seine nicht verwendeten Abhängigkeiten zu entfernen, ohne andere nicht verwendete Abhängigkeiten zu entfernen?

(Offenbar aptitude removeverhält es sich auch ähnlich.)

Antworten:


21

Wenn ich die Datei cmdline/apt-get.ccaus dem Quell-Tarball unter http://packages.ubuntu.com/source/maverick/apt betrachte , sehe ich, dass dies --auto-removeein Argument ist, das die APT::Get::AutomaticRemoveEinstellung ermöglicht .

Die Befehle autoremoveund removebeide rufen die Funktion auf DoInstall.

Der Befehl "autoremove" wird APT::Get::AutomaticRemoveebenfalls gesetzt und macht daher das Gleiche wie --auto-remove.

Wenn Sie sich die DoAutomaticRemoveFunktion ansehen, sehen Sie deutlich, dass das Aktivieren der APT::Get::AutomaticRemoveEinstellung ( --auto-removeund autoremovedies auch) dazu führt, dass Apt alle installierten Pakete durchläuft und nicht verwendete Pakete zum Löschen markiert.

Von main():

CommandLine::Args Args[] = {
   // ... stripped to save space
   {0,"auto-remove","APT::Get::AutomaticRemove",0},
   // ...
}
CommandLine::Dispatch Cmds[] = { // ...
                                {"remove",&DoInstall},
                                {"purge",&DoInstall},
                                {"autoremove",&DoInstall},
                                // ...
}
// ...
// Parse the command line and initialize the package library
CommandLine CmdL(Args,_config);

Von DoInstall():

 unsigned short fallback = MOD_INSTALL;
   if (strcasecmp(CmdL.FileList[0],"remove") == 0)
      fallback = MOD_REMOVE;
   else if (strcasecmp(CmdL.FileList[0], "purge") == 0)
   {
      _config->Set("APT::Get::Purge", true);
      fallback = MOD_REMOVE;
   }
   else if (strcasecmp(CmdL.FileList[0], "autoremove") == 0)
   {
      _config->Set("APT::Get::AutomaticRemove", "true");
      fallback = MOD_REMOVE;
   }

Ab Funktion DoAutomaticRemove:

   bool doAutoRemove = _config->FindB("APT::Get::AutomaticRemove", false);
   // ...
   // look over the cache to see what can be removed
   for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg) {
       if (doAutoRemove) {
       if(Pkg.CurrentVer() != 0 && 
          Pkg->CurrentState != pkgCache::State::ConfigFiles)
          Cache->MarkDelete(Pkg, purgePkgs);
       else
          Cache->MarkKeep(Pkg, false, false);
   }
   }

Ich kann nicht sagen, ob es beabsichtigt ist oder nicht. Sie können einen Fehler melden oder eine Frage bei launchpad.net stellen .


Derzeit ist es nicht möglich, Pakete vom Löschen durch auszuschließen apt-get autoremove. Wenn Sie Pakete behalten möchten, führen Sie sie aus apt-get -s autoremove, kopieren Sie die Pakete aus der Liste und entfernen Sie die Pakete aus der Liste, die Sie behalten möchten. Schließlich entfernen Sie diese Pakete: sudo apt-get purge [packages-to-be-removed](Bereinigen entfernt auch die Konfigurationsdateien, falls vorhanden)


Was empfehlen Sie, um nur xxx und seine nicht verwendeten Abhängigkeiten dann zu entfernen? Bitte füge das in die Antwort für mein Lernen ein, danke!

1
Sie können Pakete nicht von der automatischen Entfernung ausschließen. Wenn Sie verhindern möchten, dass Pakete automatisch entfernt werden, entfernen Sie sie mit apt-get purgeoder apt-get remove.
Lekensteyn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.