apt-get installコマンドを取り消すことは可能ですか?


67

Xubuntuのインストール(Live USB)にCarpadioをインストールし、リポジトリのUbuntu側から50以上のパッケージのようにプルしました。これを元に戻したいと思います。しかし、私のすべての狩猟のために、sudo apt get installコマンドを逆にする方法を提案してい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、自動)、indicator-printers: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-0ubuntu4.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- plugins-default: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関連パッケージ(python-keybinderなど)を1つだけ「不要」として取得しましたが、それだけでautoremoveを削除できました。

インストールとアンインストールの間、大きな変更のみがインストールされましたxubuntu-restricted-extras


4
この場合、助けになるのは少し遅れますが、次に何かをインストールしたいときは、最初にシミュレーションを行うことを検討してください。実行sudo apt-get install -s package場所-sシミュレーションを示し、package適切なソフトウェアの名前に置き換えられます。

@ vasa1はい、これについて自分を打ち負かしています。apt-getは私の出ているべきであるだけでなく、[Y / n]を求めて...
カルティクT

「不要」として他のPython関連パッケージ(python-keybinderまたはsummat)を1つだけ入手しました。実際にcardapio-gnomepanelパッケージを削除しましたか?
gertvdijk

@gertvdijkはい、apt-get remove carpadioそれも一緒に取りました。
カーティック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 1つだけを削除(パージ)ますが、これを実行してください!

    以下のすべてのインストールアクション(実行する場合)は、不要なパッケージを含む情報メッセージを生成します。

    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とそのすべての友人を引き込みました。カルダピオをパージすると、自動削除後でもUnityなどが削除されるとは思いません。

@ vasa1なぜですか?パッケージには「自動インストール」のマークが付けられ(質問で確認できます)、システムにインストールする理由が見つからない場合は、を使用して削除するよう提案されautoremoveます。
gertvdijk

はい、私は「自動」について疑問に思っていました。それが自動削除を示している場合、それは良いことです。その場合、OPには問題はありません。

@gertvdijkが@ vasa1の好評を博し、私の編集をご覧ください。autoremove助けにはならなかった。
カルティクT

@gertvdijk、「その後のインストールアクション」でsudo apt-get update十分でしょうか。

19

その時点でインストールされているパッケージとその依存関係を削除する場合は、次を使用する必要があります。

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

ただし、aptアクションを元に戻すには、apt-undoスクリプトを使用できます。aptUbuntuで実行されたアクションを元に戻すことができる単純なスクリプトです。このスクリプトは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
おかげで、私はこれに出くわした、そしてそれは私が、私は元に戻すことができるように、インストールするためにそれを使用するために必要な注意事項を見るまで医師は、注文した正確に何のように聞こえた...
カルティクT

1
ナイスキャッチ。ただし、非常にわかりにくい構文です。そして、十分にテストされたコアAPTアプリケーションの代替を使用することは本当に好きではありません。まだ+1!
gertvdijk

7

Unixの力を活用してください。持っているログファイルの行を取得し、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

おかげで、スクリプトを威圧、私はそれがこれに降りてくるだろう恐れていた
カルティクT

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にしそれらを削除します。


感謝しますが、この場合、自動削除は不十分であることが判明しました。私の編集をご覧ください。
カルティクT

1

フォローsudo apt-get purge packagenameとを

sudo apt-get autoremove. 

メタパッケージでない限り、これが面倒を見るはずです。

すべての Cardapioファイルを手動で削除するにどうすればよいですか?のよくある質問もご覧ください


感謝しますが、この場合、自動削除は不十分であることが判明しました。私の編集をご覧ください。よくある質問リンクをありがとうございます!
カルティクT

1
これらのパッケージの一部は、他のものによって必要とされる場合があり、自動削除できるとマークされていません。リンクの指示を見ましたか?それらはどうですか?
スケスケ

リンクの指示はコアの問題とはかなり直交しており、現状ではシステムの再インストールに傾いています。とにかくありがとう。
カルティク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が理解できる形式にフォーマットする必要があります。括弧、間にある単語、カンマは、perlがプレイする場所に行く必要があります。はい、より良い(より効率的な)方法があります-しかし、私はこれを実行しました。わかりやすく、動作します。


個人的な経験や説明のための+1が、私は先に述べたように、私はすでに私のライブUSBをリセットしている
カルティクT

1

最後のaptインストールを元に戻すには、次のようなものも使用できます。

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

これにより、履歴から最後のaptインストールがキャッチされ、ここでインストールされたすべてのパッケージが削除されます。

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を参照してください。
メレビウス

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 'install'

4)ステップ3からすべてのパッケージを削除します:sudo apt-get remove {ステップ3からのパッケージのリスト}

5)ステップ2のすべてのパッケージを再インストールします:sudo apt-get install --reinstall {ステップ2のパッケージのリスト}

6)問題が発生し、解決策が思いつかない場合は、PPAを戻し、2つのリストからすべてのパッケージを再インストールします。


0

かなり古い質問だと思いますが、助けを求めてここに来て、誰かを助けることができるかもしれません。をインストールしunity8-desktop-session-mirた後、@ Karthik-Tのような状況になりました。私はそれが大きなものであることを知っています。彼は233パケットを引きました。

使用するautoremoveと、そのうち34個のみが削除されます。ポイントは、unity8-desktop-session-mirインストール中に2つのパッケージ(python3-aptdaemon.pkcompatおよびevolution-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

これにより、以前にインストールしたすべてが完全に削除されるわけではありませんが、場合によっては十分です。

PS:autoremoveステップ4で再度発行したように、おそらくステップ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.