web-dev-qa-db-ja.com

Linuxでプログラムをアンインストールする方法は?

手動 (Sudo apt-getなし)をインストールしたPCL 1.7.2をアンインストールしようとしましたが、apt-get removecommand を使用してそれらを削除しようとしましたそもそもインストールされていないため、これらのファイルをアンインストールできないことを示しました。

  1. cmakeを使用してファイルをインストールした場合、ファイルが正しくインストールされたかどうかを確認するにはどうすればよいですか

  2. cmakeを使用して手動でインストールしたファイルをアンインストールするにはどうすればよいですか?

  3. apt-getcmakeを使用してインストールされたファイルはどのように異なりますか?

注-同様の質問ですが、apt-get removeを使用します。 パッケージを完全に削除するにはどうすればよいですか?

3
PallavBakshi

エグゼクティブサマリー/ TL; DR

makeおよびmake uninstallを実行したビルドディレクトリからSudo make uninstall(またはSudo make installを実行する必要がある場合はmake install)を実行します。 CMakeで構成されたビルドでは、通常、ビルドディレクトリは最上位のソースディレクトリではありません。ただし、それ以外に、ビルドがCMakeで構成されたプログラムまたはライブラリのアンインストールは、ソースコードからビルドした他のプログラムまたはライブラリのアンインストールと同じです。

一部のソフトウェアはmake installをサポートしていますが、make uninstallはサポートしていません。この場合、make installの実行時に実行される手順を調査するか、ソフトウェアのドキュメントを参照してどのファイルをどこに置くかを確認する必要があります。ただし、 PCLdoesは、make uninstall によるアンインストールをサポートするようです。

cmakeおよびmakeを使用したインストールとアンインストール

CMakeはビルドを構成するためのシステムです。 構成が完了したら、通常、ビルドシステムを使用してビルドを実行する必要があります。 UbuntuなどのUnixライクなオペレーティングシステムでは、CMakeで構成されたビルドは、ほとんどの場合Makeビルドシステムを使用します。

CMakeを使用するほとんどのソフトウェアでは、通常buildと呼ばれる別のビルドディレクトリを作成し、そのディレクトリからcmakeコマンドを実行する必要があります。ビルドディレクトリには、ビルドの実行に必要なファイルが格納されます。次に、そのディレクトリでmakeを実行します。構築しているソフトウェアの指示に従って配置することを推奨する場合は、buildディレクトリを作成する必要があります。通常、ソースツリーの最上位ディレクトリのサブディレクトリになります(ソースtarballを展開したとき、またはコードをダウンロードするためにgitbzrなどのバージョン管理システムを起動したときに作成される最上位ディレクトリ)。

makeを実行すると、ターゲットのリスト、ターゲットの構築手順、ターゲットの相互依存関係が含まれるメイクファイル(通常はMakefileと呼ばれる)を見つけて読み取ります。通常、指定する必要がないデフォルトのターゲットがソフトウェアをビルドし、指定する必要があるinstallターゲットがインストールします。

多くのメイクファイルには追加のターゲットが含まれています。最も一般的なものは次のとおりです。

  • ビルドされたソフトウェアをテストするcheckまたはtestターゲット。 make checkまたはmake testは、make installの前に実行できますが、通常は実行することをお勧めします。
  • make installを実行して作成されたファイルを削除してソフトウェアをアンインストールするuninstallターゲット。 (ときどき、make uninstallには、ファイルをコピーする以外のmake installのアクションを取り消す他の動作がありますが、通常はファイルを削除するだけです。)すべてのソフトウェアがuninstallターゲットを持っているわけではありません。
  • ビルド中に作成されたソースまたはビルドディレクトリからファイルを削除するcleanターゲット。ほとんどすべてのmakefileにこれがあります。

distcleanrealcleanなど、CMakeとの関連性が比較的低い他の比較的一般的なターゲットがいくつかあります。ただし、CMakeではなく構成スクリプト(./configure)を実行してビルドを構成している場合は、通常、make distcleanを実行して構成を消去できます。

CMakeを使用する開発者は、uninstallターゲットを生成するコードを記述する必要があります- CMakeはこれを自動的に行いません 。ただし、多くの開発者と同様に、 PCLの開発者はこれを行った およびmake uninstallは動作するはずです。詳細については、次のセクション(「ステップバイステップの例」)を参照してください。

Makefileがuninstallターゲットをサポートしているソフトウェアをアンインストールするには:

  • make install(またはSudo make install)を実行したディレクトリは、make uninstall(またはSudo make uninstall)を実行するために戻る必要があるディレクトリです。 CMakeを使用しないソフトウェアの場合、これは通常ソースツリーの最上位ディレクトリです。しかし、doesCMakeを使用するソフトウェアの場合、通常はそうではありません-代わりに、通常は別個のビルドディレクトリです。
  • ソースからソフトウェアを手動でインストールする場合、ビルド中に作成されたソースコードとすべてのファイルを保持しておくと、ソフトウェアを簡単にアンインストールできます。したがって、make installを実行した後は、make cleanを実行しないこと(またはファイルを手動で削除すること)をお勧めします。
  • ただし、didを実行した場合、またはmake cleanを実行するか、ソフトウェアのソースコードまたはビルドディレクトリを削除した場合、通常は正常にアンインストールできますmake uninstall(またはSudo make uninstall)を実行できるようになるまで、まったく同じバージョンのソフトウェアで、同じオプションで構成およびビルドされた(またはカスタマイズしなかった場合はどれもなし)同じビルド手順を実行するだけです。一部のソフトウェアでは、実際に最初にmake installを再度実行する必要さえあります。これにより、通常は前のビルドのファイルが上書きされます。その後、通常どおりmake uninstall(またはSudo make uninstall)を実行します。

uninstallターゲットがなく、ソフトウェアをアンインストールする必要がある場合、作成するファイルを調べる必要があります。 make -n installを実行して、make installによって実行されるアクションを表示できます。あなたは、notSudomake -n installを実行する必要があります(最初のmakeSudoを必要としなかったと仮定します)。 make-nフラグが渡されると、通常は何も変更しないドライランが実行されるため、昇格した特権を必要とするものを実行する必要はありません。

ステップバイステップの例:PCL 1.7.2

例を挙げておくと便利です。実際にアンインストールしようとしているソフトウェアをその例として使用することもできます。 PCL 1.7.2doescmakeを使用してそのメイクファイルでuninstallターゲットを生成するようです 。したがって、make uninstallをサポートする必要があります。

uninstall_target.cmake.inを調べることに加えて、64ビットUbuntu 16.04テストシステムで生成されたMakefileuninstallターゲットが含まれていることを確認しました。ただし、PCLのビルドが完了していないため、PCLをインストールしてからSudo make uninstallをテストできます。 (私のテストマシンは非常に遅く、PCLは大きくなります。)ビルドが完了した後のいつか、機会があれば追加情報でこれを更新する予定です。

PCL 1.7.2をインストールしたとき、おそらく次のようなことをしたでしょう。

cd /usr/local/src
wget https://github.com/PointCloudLibrary/pcl/archive/pcl-1.7.2.tar.gz
tar xf pcl-1.7.2.tar.gz
cd pcl-pcl-1.7.2
mkdir build
cd build
cmake ..
make -j2
Sudo make -j2 install

それは(大まかに) 公式の指示 に基づいていますが、もちろんあなたがやったこととは違うかもしれません。特に、pcl-1.7.2.tar.gz/usr/local/srcにダウンロードして解凍しました。他の場所に配置する場合は、/usr/local/srcをどこに配置した場所でも置き換える必要があります。

必要に応じて/usr/local/srcを変更すると、次を実行してソフトウェアをアンインストールできるはずです。

cd /usr/local/src/pcl-pcl-1.7.2/build
Sudo make uninstall

make -j2 installを実行して複数の操作を同時に実行できる場合でも、-j2の実行時にmake uninstallフラグを渡す必要はありません。

1
Eliah Kagan

インストール手順を見る際に、cmakemakeを使用します。アンインストールするには、次のことができるはずです。

terminal...

  • cd folder_of_original_source_code#cmakeを実行したフォルダー
  • Sudo make uninstall#アンインストールする
2
heynnema

PCLをインストールしたとき、実際には2つのステップを実行しました。

  • ソフトウェアをコンパイルしました。これは、どのユーザーでも自分のホームディレクトリで実行できます。
  • システム全体にソフトウェアをインストールしました。これはrootのみが実行できます

インストール自体(Sudo make -j 2 installはあなたのケースで推奨)は、PCLの作者が作成したスクリプトです。 このスクリプトがシステムに対して行ったことを伝えることはありませんスクリプトのソースコードを読むことは別として。ここには標準化はありません。スクリプトは、重要なファイルの消去、標準のUbuntuソフトウェアが予期しない方法での構成の変更など、マシンに必要なことは何でもできます。

インストールスクリプトがシステムに何を行ったかわからないため、別のプログラム(APTなど)が実行後に変更を取り消すことはできません。最善策そのような場合は、インストールスクリプトの出力を保存する(後で読み取り、手動で変更を元に戻す)か、システムバックアップを復元します。

debパッケージは異なります。パッケージの作成者は、自分のマシンでコンパイル段階を実行し、作成されたファイルを調べて、適切なUbuntuシステム上にある必要があるため、それらをすべて整頓しました。その後、それらをdebパッケージである種類のZipファイルに入れました。また、作成者は、インストール時にアンインストールスクリプトを実行する必要がある場合に備えて、インストールおよびアンインストールスクリプトを作成しました。作成者は、必要なすべてのメタデータ、特に、実行するためにこのパッケージが依存する他のパッケージ(共有ライブラリなど)も書きました。

APTは、パッケージをインストールするときに、どのファイルが抽出されたかを追跡するため、後で削除できます。

今、あなたの質問に答えるために:

Q1。 PCLインストールスクリプトの出力を保存しなかった場合(この出力に行われたすべての完全かつ真実の詳細が含まれていると仮定)、またはPCLをインストールする前に実行したバックアップとハードドライブの内容を比較しない限り、ファイルが正しくインストールされたかどうかを知る方法。あなたができる最善のことは、ソフトウェアを実行し、それが正常に実行されるかどうかを確認することです。

Q2。 PCLの作成者がアンインストールスクリプトを作成している可能性があります。おそらくSudo make uninstallを実行すると何か役に立つことがあります。そのためには、PCLのドキュメントを参照する必要があります。それ以外の場合は、手動でファイルを個別に削除する必要があります。

Q3。インストールされたファイル自体に違いはありません。異なるのは、システムディレクトリにそれらをコピーするために使用されるプログラムです。 apt-getは、debファイルからインストールされたものを追跡し、削除できます。 cmakeは独自の方法で、APTには知られていません。

1
Adrien Beau

Apt-getの概要

apt-getは、特別にパッケージ化されたプログラムをインストールします。 apt構成には、パッケージのすべてのコンポーネントがインストールされる場所に関する詳細情報が含まれていました。また、どのファイルがシステムに追加されたかを正確にシステムに保存します。情報には、ファイルの削除手順が含まれます。

Apt-getを使用してファイルを削除する場合、この情報を使用して、コンピューターに追加されたファイルを安全に削除します。

CMake

Cmakeは、プログラムをコンパイルおよびインストールするユーティリティです。あなたを含む個人は、「Hello World」と同じくらい簡単なアプリケーションを作成し、Cmakeを使用してプログラムをコンパイルし、配置する場所に配置できます。

apt-getユーティリティーは、コンピューターのどこにでも配置することにしたすべてのプログラムを認識しません。作成者がプログラムをapt-getを介してインストールすることを望んだ場合、プログラムはそのプログラム用に構成し、インストーラーに.debパッケージを提供します。

apt-getを使用してインストールされていないプログラムを削除する

手動でインストールされたプログラムを削除するには、作成者による削除の規定に従う必要があります。 cmakeコマンドとmakeコマンドには、buildinstallinstall with special conditionsuninstallなどを指定できる設定ファイルがあります。これらの機能は、プログラムの開発者次第です。

多くのプログラムには、インストールおよびアンインストールの手順(readme.txtファイル)が付属しています。作成者が提供した内容を確認するには、パッケージの内容を確認する必要があります。アンインストール手順が提供されていない場合は、プログラムによってコンピューターに追加された実際のファイルを探して、手動で削除する必要があります。

開発者がuninstallターゲットに以下を指定しているかどうかを確認してください

$ cmake uninstall

プログラムからファイルを見つける:

インストールの実行後に作成される可能性のあるinstall_manifest.txtファイルを探します。これにより、ファイルの場所が表示されます。

プログラムからファイルを見つける別の方法は、CMakeList.txtファイルを調べることです。 outputを参照するディレクトリを探します。通常、バイナリとライブラリが配置される場所を指定します。

findを使用して、システムに追加されたファイルを確認することもできます。インストールを実行したときにウィンドウを指定すると、ファイルのリストが表示されます。このコマンドにはいくつかのバリエーションがあります。

これらの手順を使用して、1月18日の午前0時1月19日の午前0時の間のウィンドウで作成していたファイルを見つけることができます。ゼロを使​​用する代わりに、特定の時間と分を指定できます。

時間枠の開始のタイムスタンプファイルを作成します。

 $ touch -t 201701180000 starttime

時間枠の終わりのタイムスタンプファイルを作成します。

 $ touch -t 201701190000 starttime

それは次の形式です:YYYYMMDDHHMM

次に実行します:

$ find ~/ -mount -newer starttime ! -newer endtime > find.out

ここでfind.outテキストファイルを調べると、その時間枠で作成されたすべてのファイルが表示されます。ホームディレクトリにあるような多くのファイルを自動的に削除できます。これにより、主にバイナリファイルを見ることができます。

1
L. D. James