Penghapusan dependensi yang tidak digunakan menggunakan "autoremove"


25

Saya pikir menjalankan apt-get autoremovetanpa argumen berikut menghapus semua dependensi yang tidak digunakan yang tersisa di sistem, sementara menjalankan apt-get autoremove xxxmenghapus xxx dan dependensi yang tidak digunakan.

Namun saya menemukan sebaliknya. Berjalan apt-get autoremove xxxtidak hanya menghapus xxx dan dependensinya yang tidak digunakan, tetapi juga menghapus semua dependensi yang tidak digunakan lainnya.

Saya kemudian mencoba menjalankan apt-get remove --auto-remove xxx, berpikir bahwa ini hanya akan menghapus xxx dan dependensinya yang tidak digunakan. Yang mengejutkan saya, ini juga menghapus xxx, dependensinya yang tidak digunakan, dan semua dependensi yang tidak digunakan lainnya.

Ini membawa saya ke dua pertanyaan terkait.

(1) Apakah ini perilaku yang dimaksudkan dari perintah?

(2) Apakah ada cara mudah untuk menghapus xxx dan dependensinya yang tidak digunakan tanpa menghapus dependensi yang tidak digunakan lainnya?

(Tampaknya itu aptitude removejuga berperilaku serupa.)

Jawaban:


21

Melihat file cmdline/apt-get.ccdari source tarball di http://packages.ubuntu.com/source/maverick/apt , saya bisa melihat bahwa --auto-removeini adalah argumen yang memungkinkan APT::Get::AutomaticRemovepengaturan.

Perintah autoremovedan removekeduanya memanggil fungsi DoInstall.

Perintah "autoremove" APT::Get::AutomaticRemovejuga diatur dan karena itu ia melakukan hal yang sama --auto-remove.

Melihat DoAutomaticRemovefungsinya, terlihat jelas bahwa mengaktifkan APT::Get::AutomaticRemovepengaturan ( --auto-removedan autoremovemelakukan ini) menyebabkan Apt mengulangi semua paket yang diinstal dan menandai paket yang tidak digunakan untuk dihapus.

Dari 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);

Dari 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;
   }

Dari fungsi 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);
   }
   }

Saya tidak dapat berbicara apakah itu dimaksudkan atau tidak, Anda dapat mengisi bug / mengajukan pertanyaan di launchpad.net .


Saat ini, tidak mungkin untuk mengecualikan paket dari penghapusan oleh apt-get autoremove. Jika Anda ingin menyimpan paket, jalankan apt-get -s autoremove, salin paket dari daftar dan hapus paket dari daftar yang ingin Anda simpan. Terakhir, hapus paket-paket itu: sudo apt-get purge [packages-to-be-removed](hapus juga file konfigurasi, jika ada)


Apa yang Anda rekomendasikan untuk menghapus hanya xxx dan dependensinya yang tidak digunakan? Harap sertakan itu dalam jawaban untuk pembelajaran saya, terima kasih!

1
Anda tidak dapat mengecualikan paket dari autoremove, jika Anda ingin menjaga agar paket tidak dihapus secara otomatis, hapus dengan apt-get purgeatau apt-get remove.
Lekensteyn
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.