apt-get install 명령을 실행 취소 할 수 있습니까?


67

Xubuntu 설치 (Live USB)에 Carpadio를 설치 한 후 저장소의 Ubuntu 쪽에서 50 개가 넘는 패키지를 가져 왔습니다. 이제 이것을 취소하고 싶습니다. 그러나 내 모든 사냥, 나는보다 유용 아무것도 찾을 수 없습니다 내가 sudo는 쉽다 설치 얻을 명령을 취소 할 수 있습니다 방법 만 제시한다을 apt-get purge. 2 개의 패키지 (carpadio 및 carpadio-gnomepanel)를 제거하기 만하면 유용하지 않습니다.

/var/log/apt/history.log해당 명령과 함께 설치된 모든 패키지 목록이 있습니다. 그래서 모든 것을 제거하는 쉬운 방법이 있는지 궁금합니다 . 그렇지 않으면 다시 설치할 수 있습니다. 이것은 어쨌든 새로 설치되었지만 궁금합니다.

히스토리 로그의 작은 샘플 (전체 목록의 1 / 5-1 / 10)

커맨드 라인 : apt-get install cardapio-gnomepanel
설치 : libdbusmenu-qt2 : amd64 (0.9.2-0ubuntu1, 자동), python-packagekit : amd64 (0.7.2-4ubuntu3, 자동), cups-pk-helper : amd64 (0.2.1.2-1ubuntu0.1, 자동) , geoclue : amd64 (0.12.0-1ubuntu12, 자동), unity : amd64 (5.18.0-0ubuntu1, 자동), 표시기 프린터 : amd64 (0.1.6-0ubuntu1, 자동), libevolution : amd64 (3.2.3- 0ubuntu6, 자동), libqt4-declarative : amd64 (4.8.1-0ubuntu4.3, 자동), libmtp9 : amd64 (1.1.3-1ubuntu0.1, 자동), tracker-miner-fs : amd64 (0.14.0-2ubuntu1 , 자동), gir1.2-rb-3.0 : amd64 (2.96-0 우분투 4.2, 자동), python-aptdaemon.pkcompat : amd64 (0.43 + bzr805-0ubuntu7, 자동), gnome-media : amd64 (3.4.0- 0ubuntu3.1, 자동), metacity : amd64 (2.34.1-1ubuntu11, 자동), nautilus : amd64 (3.4.2-0ubuntu6, 자동), libcompizconfig0 : amd64 (0.9.7.0 ~ bzr428-0ubuntu6, 자동), compiz- 플러그인 기본값 :amd64 (0.9.7.12-0ubuntu1, 자동), libunistring0 : amd64 (0.9.3-5, 자동), libebackend-1.2-1 : amd64 (3.2.3-0ubuntu7, 자동), ubuntu-docs : amd64 (12.04.6 , 자동), python-mako : amd64 (0.5.0-1, 자동),

제안 한 모든 사람들에게 autoremove: 나는 왜 그런지 확실하지 않지만, 단지 하나의 다른 파이썬 관련 패키지 (python-keybinder 또는 무언가)를 "불필요한"으로 얻었고 이것이 자동 제거가 제거 할 수있는 전부입니다.

설치와 제거 사이에는 주요 변경 사항 만 설치되었습니다 xubuntu-restricted-extras.


4
이 경우 도움이 되려면 약간 늦었지만 다음에 무언가를 설치하려면 먼저 시뮬레이션을 고려하십시오. 실행 sudo apt-get install -s package어디 -s시뮬레이션을 표시하고 package해당 소프트웨어의 이름으로 대체됩니다.

@ vasa1 네, 이것에 대해 제 자신을 때리고 있습니다. apt-get은 [Y / n]도 묻습니다. 저의 외출이었을 것입니다.
Karthik T

"필요하지 않은"다른 파이썬 관련 패키지 (python-keybinder 또는 summat)가 하나만 있습니다. 실제로 cardapio-gnomepanel패키지를 제거 했습니까 ?
gertvdijk

@gertvdijk 그렇습니다 apt-get remove carpadio.
Karthik T

1
@KarthikT 그렇다면 왜 autoremove당신을 위해 작동하지 않는지에 대해 완전히 길을 잃었습니다 . 모든 패키지를 지금 수동으로 설치 한 것으로 표시했거나 명백한 오해가 있습니다. 매우 간단합니다. apt-get autoremove이제 자동으로 표시된 모든 패키지를 제거 할 이유없이 제거합니다. 그것이 효과가 없다면, 당신은 당신의 질문에서 말하지 않은 시스템에서 무언가를 변경했다고 생각합니다.
gertvdijk

답변:


79

기본적으로, 당신은 모두해야합니다 apt-get remove(또는 퍼지 apt-get을) 패키지 실행 apt-get autoremove은 설치를 되돌아 가지고, 그 후 package-one.

전체 과정을 살펴 보자.

  • sudo apt-get install package-one 질문의 로그 발췌에서 볼 수 있듯이 "자동"으로 표시된 50 개의 종속성을 설치합니다.

  • sudo apt-get purge package-one 하지만 제거합니다 (숙청) 하나는, 이 실행!

    다음의 모든 설치 작업 (있는 경우)은 더 이상 필요없는 패키지와 함께 정보 메시지를 생성합니다.

    The following packages were automatically installed and are no longer required:
      package-two package-three [...]
    Use 'apt-get autoremove' to remove them.
    

    이 목록은 기본적으로 역 종속성없이 "자동"으로 표시된 모든 패키지 목록입니다. 즉, 패키지 관리와 관련하여 설치해야 할 이유가 없습니다.

    참고 : 설치가 필요하지 않습니다! APT가 불필요한 패키지에 대해 알려주는 것이 현명하다는 것을 보여주는 것입니다!

  • sudo apt-get autoremove --purge 이들을 제거 (퍼지)

추가 정보


2
이 OP에서 Unity와 모든 친구들을 끌어 들였습니다. 자동 제거 후에도 cardapio를 제거하면 Unity 등이 제거되지 않습니다.

@ vasa1 왜? 패키지는 '자동으로 설치됨'으로 표시되며 (질문에서 볼 수 있음) 시스템에 설치할 패키지를 찾을 이유가 없으면를 사용하여 제거 할 것을 제안합니다 autoremove.
gertvdijk

예, "자동"에 대해 궁금했습니다. 그것이 자동 제거를 나타내는 데 도움이된다면 좋습니다. OP는 문제가 없어야합니다.

@ vasa1에 의해 @gertvdijk 좋은 캐치, pls는 내 편집을 참조하십시오. autoremove도와주지 않았다.
Karthik T

"후속 설치 작업"에 대해 @gertvdijk sudo apt-get update로 충분합니까?

19

당시에 설치된 패키지 및 해당 종속성을 제거하려면 다음을 사용해야합니다.

sudo apt-get purge package
sudo apt-get --purge autoremove

그러나 apt작업 을 취소 하려면 apt-undo스크립트 를 사용할 수 있습니다 . apt우분투에서 수행 된 작업을 취소 할 수있는 간단한 스크립트입니다 . 이 스크립트는 apt-get패키지를 설치 / 업그레이드 / 제거 / 제거 / 퍼지 / 다운 그레이드 하는 대신 스크립트를 사용하는 경우에만 작동 합니다.

apt-undoUbuntu에 설치하려면 터미널에서 다음 명령을 실행하십시오.

sudo add-apt-repository ppa:lkjoel/apt-undo
sudo apt-get update
sudo apt-get install apt-undo

용법:

apt-undo install yourpackages
apt-undo remove yourpackages
apt-undo purge yourpackages
apt-undo upgrade
apt-undo dist-upgrade
apt-undo install yourpackages=old.version
apt-undo install yourpackages=new.version

실행 취소하기 위해 위의 aptitude조치는 터미널에서 다음 명령을 실행합니다.

apt-undo undo

1
고마워, 나는 이것을 발견하고, 그것을 설치하기 위해 그것을 사용하여 실행 취소 할 수있는 경고를 볼 때까지 의사가 주문한 것과 정확히 같았습니다.
Karthik T

1
잘 잡았다. 그러나 매우 혼란스러운 구문. 그리고 실제로 테스트를 거친 핵심 APT 응용 프로그램에 대한 대안을 사용하고 싶지 않습니다. 여전히 +1!
gertvdijk

7

유닉스의 힘을 사용하십시오. 가지고있는 로그 파일 행을 가져와 apt가 수행 한 작업을 취소하는 명령을 구성하십시오. 예를 들면 다음과 같습니다.

$ echo 'Install: libdbusmenu-qt2:amd64 (0.9.2-0ubuntu1, automatic), python-packagekit:amd64 (0.7.2-4ubuntu3, automatic), cups-pk-helper:amd64 (0.2.1.2-1ubuntu0.1, automatic),'|perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //'
libdbusmenu-qt2:amd64 python-packagekit:amd64 cups-pk-helper:amd64

따라서이 로그 파일을 사용하여 로그 파일의 해당 줄을 실수로 설치 한 모든 패키지를 제거 할 수 있습니다.

$ dpkg -P $(echo '(full log line here)' | perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //')

(나는 perl대신 욕심없는 일치를 지원하지 않는 정규 표현식 유형을 사용 sed하기 때문에 대신 sed사용했습니다. 이는 내가 필요한 것을 구성하는 가장 쉬운 방법이었습니다)


1
좋은 스크립트이지만, 사람들이 그것을 달성하기 위해 기억할 수있는 일련의 명령 일뿐입니다.
gertvdijk

감사합니다, 협박 대본, 그러나 이것으로 내려
올까봐

1
비슷한 코드를 사용하여 비슷한 문제를 해결했습니다 . 나는 무슨 일이 일어나고 있는지 더 확실하게하기 위해 여러 단계를 거쳤습니다. 먼저 apt로그 에서 관련 텍스트 블록을 새 파일로 복사 한 다음이 파일에 적용했습니다. perl -pe 's/\(.*?\)(, )?//g' /path/to/apt-history.log 그런 다음 해당 출력을 앞에 추가 한 sudo apt-get remove것만으로도 좋습니다!
Insperatus

1

하나의 패키지를 제거한 후 --purge를 추가하여 패키지를 완전히 제거 apt-get remove --purge <package>할 수 있습니다 apt-get autoremove. 그것들을 제거하십시오.


고맙지 만이 경우 자동 제거가 충분하지 않은 것으로 나타났습니다. 내 편집 내용을 참조하십시오.
Karthik T

1

추적 sudo apt-get purge packagename과를

sudo apt-get autoremove. 

메타 패키지가 아니라면이를 처리해야합니다.

또한의 자주 묻는 질문을 참조 내가 수동으로 제거하려면 어떻게 모든 Cardapio 파일을? .


고맙지 만이 경우 자동 제거가 충분하지 않은 것으로 나타났습니다. 내 편집 내용을 참조하십시오. 매우 유용한 FAQ 링크에 감사드립니다!
Karthik T

1
이러한 패키지 중 일부는 다른 것들에 의해 필요할 수 있으며 자동 제거 가능으로 표시되지 않았습니다. 링크의 지침을 보셨습니까? 어때요?
chaskes

링크의 지침은 핵심 문제와 직교하므로 시스템을 다시 설치하려고합니다. 어쨌든 고마워
Karthik T

1
  1. apt 로그에서 원치 않는 패키지의 긴 목록을 new_file.txt
  2. 실행 perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
  3. 마지막 명령의 출력을 클립 보드에 복사하거나 처음에 파이프하십시오 .
  4. 실행 sudo apt-get remove[여기 클립 보드의 내용을 붙여 넣기]

끝난.

기본적으로 apt 로그의 패키지 목록을 apt-get이 이해할 수있는 형식으로 형식화해야합니다. 괄호, 단어 사이, 쉼표는 펄이 재생되는 곳으로 이동해야합니다. 그렇습니다. 더 효율적인 방법이 있습니다.하지만 이해하기 쉽고 잘 작동합니다.


개인적인 경험과 설명은 +1이지만, 앞에서 언급했듯이 이미 Live USB를 재설정했습니다
Karthik T

1

마지막 apt 설치를 취소하려면 다음과 같이 사용할 수도 있습니다.

sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ")

이것은 기록에서 마지막 적절한 설치를 포착하고 여기에 설치된 모든 패키지를 제거합니다.

aptpurgelastinstall이라는 함수를 만들어 항상 사용할 수 있습니다 (~ / .bashrc에 코드 추가).

echo 'aptpurgelastinstall () { sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ") ; }' >> .bashrc

이제 마지막 설치를 다시하기 위해 쉘에 aptpurgelastinstall을 입력하기 만하면됩니다.


제안 된 수정 사항의 의견에 대한 반응 : “등록하기 전에 본인의 게시물을 개선했습니다.” 계정 병합 요청은 askubuntu.com/help/merging-accounts를 참조하십시오 .
Melebius

0

ppa를 추가하고 되돌리려면 아래 설명 된 단계를 수행해야합니다. 제거하지 않으려는 다른 패키지를 설치 한 경우 실패 할 수 있음을 이해하십시오. 스크립트 로이 작업을 수행 할 수 있다고 확신합니다. 개인적으로 이것은 이것이 apt의 일부 여야한다고 생각하며, 의존성으로 인해 어떤 패키지가 설치되고 사용자의 요청에 의해 설치되는 패키지를 더 잘 관리해야합니다.

1) /etc/apt/sources.list에서 ppa를 제거하십시오. ppa를 추가 한 시간을 기억하십시오. 운이 좋으면 정확하지 않아도됩니다.

2) PPA를 설치 한 순간부터 다시 설치할 항목을 나열하십시오. cat /var/log/dpkg.log | grep '업그레이드'

3) PPA를 설치 한 순간부터 제거 할 항목을 목록으로 작성하십시오. cat /var/log/dpkg.log | grep '설치'

4) 3 단계에서 모든 패키지를 제거하십시오. sudo apt-get remove {3 단계에서 패키지 목록}

5) 2 단계에서 모든 패키지를 다시 설치하십시오. sudo apt-get install --reinstall {2 단계에서 패키지 목록}

6) 문제가 발생하여 해결책을 생각할 수 없으면 PPA를 다시 넣고 두 목록에서 모든 패키지를 다시 설치하십시오.


0

나는 그것이 아주 오래된 질문이라는 것을 알고 있지만 여기에 도움을 요청하고 누군가를 도울 수 있습니다. 설치 후 @ Karthik-T와 비슷한 상황이 발생했습니다 unity8-desktop-session-mir. 나는 그것이 큰 것을 알고 있습니다. 그와 함께 233 개의 패킷을 가져 왔습니다.

사용하면 autoremove34 개만 제거됩니다. 요점은 unity8-desktop-session-mir설치 중에 두 개의 패키지 ( python3-aptdaemon.pkcompatevolution-data-server-online-accounts)를 제거 했다는 것 입니다. 섹션 /var/log/apt/history.log다음에에 설명되어 Install있습니다.

Unity 8 설치를 완전히 취소하려면 다음을 발행했습니다.

  1. sudo apt-get purge unity8-desktop-session-mir
  2. sudo apt-get --purge autoremove
  3. sudo apt-get install python3-aptdaemon.pkcompat evolution-data-server-online-accounts (Unity 8과 관련된 8 개의 패키지를 제거했습니다)
  4. sudo apt-get --purge autoremove

이전에 설치 한 모든 것을 완전히 제거 할 수는 없지만 어떤 경우에는 충분합니다.

추신 : 아마도 autoremove4 단계에서 다시 발행 한 것처럼 2 단계는 필요하지 않습니다.


0

기술적으로 "제거"또는 "자동 제거"작업은 대부분의 시간 동안 작업을 충분히 수행 할 수 있지만 "실행 취소"되지 않습니다.

기본적으로 apt-get은 지정하지 않으면 패키지를 남겨 둡니다. -o APT::Suggests-Important=0 -o APT::Recommends-Important=0

apt를 살펴보고 history.log설치된 모든 패키지를 제거 하는 것이 더 안정적 입니다. 프로세스를 쉽게하기 위해 작은 노드 기반 스크립트를 만들었습니다.

https://github.com/rolfen/apt-history

또한, "롤백"변경에 대한보다 수동적 인 또 다른 접근 방식은 다음과 같습니다.

https://unix.stackexchange.com/a/236711

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.