"autoremove"를 사용하여 사용하지 않는 종속성 제거


25

나는 실행 생각한 apt-get autoremove어떤 다음 인수가 실행하는 동안, 시스템에 남아있는 사용되지 않는 모든 종속성을 제거하지 않고 apt-get autoremove xxx제거합니다 XXX가하고 사용되지 않는 종속.

그러나 나는 다른 것을 발견했다. 실행 apt-get autoremove xxx하면 xxx 및 사용되지 않는 종속성이 제거 될뿐만 아니라 사용되지 않은 다른 모든 종속성도 제거됩니다.

그런 다음 apt-get remove --auto-remove xxxxxx와 사용하지 않는 종속성 만 제거 할 것이라고 생각하면서 running을 시도 했습니다. 놀랍게도 이것은 xxx, 사용되지 않는 종속성 및 다른 모든 사용되지 않는 종속성을 제거했습니다.

이것은 두 가지 관련 질문으로 이어집니다.

(1) 이것이 명령의 의도 된 동작입니까?

(2) 사용하지 않는 다른 종속성을 제거하지 않고 xxx 및 사용하지 않는 종속성을 쉽게 제거 할 수있는 방법이 있습니까?

( aptitude remove유사한 방식으로도 작동합니다.)

답변:


21

파일에 상대 cmdline/apt-get.cc의 소스 타르볼에서 http://packages.ubuntu.com/source/maverick/apt , 나는 볼 수 --auto-remove수 있도록하는 인수입니다 APT::Get::AutomaticRemove설정.

명령 autoremoveremove둘 다 함수를 호출합니다 DoInstall.

"autoremove"명령 APT::Get::AutomaticRemove도 설정 되므로 --auto-remove.

DoAutomaticRemove기능을 살펴보면 APT::Get::AutomaticRemove설정 을 활성화하면 (이 작업 --auto-removeautoremove수행하면) 설치된 모든 패키지를 통해 Apt가 반복되고 사용되지 않는 패키지가 삭제 된 것으로 표시됩니다.

보낸 사람 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);

보낸 사람 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;
   }

기능에서 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);
   }
   }

난 당신이 채울 수가 의도 여부를 말할 수없는 버그 / 요청 질문launchpad.net을 .


현재에 의해 패키지를 삭제에서 제외 할 수는 없습니다 apt-get autoremove. 패키지를 유지하려면을 실행 apt-get -s autoremove하고 목록에서 패키지를 복사하고 유지하려는 해당 목록에서 패키지를 제거하십시오. 마지막으로, 해당 패키지를 제거하십시오. sudo apt-get purge [packages-to-be-removed](퍼지하면 구성 파일도 제거됩니다)


그렇다면 xxx와 사용하지 않는 종속성 만 제거하는 것이 무엇입니까? 내 학습에 대한 답변에 포함시켜 주셔서 감사합니다!

1
당신이 자동으로 제거되는 패키지를 계속 그들을 제거 할 경우, autoremove에서 패키지를 제외 할 수 없습니다 apt-get purgeapt-get remove.
Lekensteyn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.