「apt-get」を使用してパッケージを再インストールする方法は?


186

aptitudeが何らかの形で壊れているようです:

sudo aptitude update
0% [Working]Segmentation fault

dmesg
[223282.616599] aptitude[30972]: segfault at 67707f ip 7f954dcfae5d sp 7ffff5a5f950 error 4 in libapt-pkg-libc6.7-6.so.4.6.0[7f954dca5000+bd000]

だから私はaptitudeを使用して再インストールしたいと思いapt-getます。

残念ながらapt-get、再インストールオプションはないようです。

どうすればaptitude再び仕事を始められますか?

aptitudeのセグメンテーション違反の根本原因を見つけた可能性があります。ここに私がそれを再現する方法があります:

  1. Cygwinのrxvtターミナルを介したDebianマシンへの 'ssh'リモートログイン(Windows 7 64ビットドイツ語版から)。
  2. rxvtウィンドウを拡大して、2つのモニターにまたがるようにします(はい、2つのモニターがあります)
  3. を実行しますaptitude update。注:rxvt端末のサイズを通常に変更すると、これらのセグメンテーションエラーは発生しません!

回答:


320
$ man apt-get | grep reinsta -A2
       --reinstall
           Re-Install packages that are already installed and at the newest
           version. Configuration Item: APT::Get::ReInstall.

したがって、それを使用して再インストールaptitudeするには:

sudo apt-get install --reinstall aptitude

14
-A5あなたは何をgreppingしているのですか?
ヴォクヒラ

86
マングレップ| grep-「-A」
-grawity

34
何を--言っているの?
Desty

13
man getopt、下を見てPARSING
ティノ14年

28
-A5一致した行に加えて、次の5行が表示されます。--オプションの解析を停止し、その後に位置する引数として-A解釈されるものをすべて解釈します。そうしないとgrep自体のオプションとして解釈される式のダッシュをエスケープする必要がなくなります。
jjmontes 14年

115

を使用してパッケージを再インストールできますsudo apt-get install --reinstall packagename。これにより、パッケージが完全に削除され(ただし、それに依存するパッケージは削除されません)、パッケージが再インストールされます。

これは、パッケージに多くの逆依存関係がある場合に便利です。


10
唯一の正しい、完全な、非難のない答えであることを感謝します。
セリン

6
@Cerin:私は他の答えを過度にnarとは呼ばないでしょう:「manページを読む」ものでさえ、実際に答えを与えただけでなく、それを見つける方法も。
デビッドスピレット

45
@DavidSpillett、私は強く同意しません。マニュアルページは通常非常に貧弱に書かれており、初心者には非常に不親切です。たとえば、「-reinstall」オプションの段落では、「install」引数とともに使用する必要があることは言及されていません。初心者は「インストールして再インストールするように指示する必要があるのはなぜですか?」RTFMに誰かに伝える答えは最悪の種類の答えであり、特に完全で実際に役立つ答えが一番下にある場合、最も多くの票でそれを見るのは苦痛です。
セリン

20

時々、設定ファイルも復元する必要があります!再インストールするだけではありません。

sudo apt-get install --reinstall xxxx

アプリケーションを再インストールし、構成ファイルを保持します。

これは役立つかもしれませんが、時々あなたは新しく始める必要があるので、私が使用するのはこれです:

sudo dpkg -r xxxx //to remove that xxxx package
sudo dpkg -P xxxx //to purge all related files

それから

sudo apt-get install xxxx

6
また、構成ファイルのみを復元する必要がある場合、場合によっては(ucfで管理されている場合)を使用する必要がありますUCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname]
スキッピールグラングロウ

2
この答えは、大きな賛成に値します。これは、パッケージを「完全に再インストール」するときに必要なものです。たとえば、vsftpdの単純な--reinstallは、ファイルがもう存在しない場合でも、構成ファイルを再作成しません。代わりに「Remove + Purge +(Re)install」がジョブを実行します。
Kar.ma

13

他のaptユーティリティには影響しないので、aptitudeを削除して再インストールしても安全です。だから、:apt-get remove aptitudeに続いてapt-get install aptitude、またはそれはまだしようと失敗した場合apt-get purge aptitudeに続きますapt-get install aptitude

上記のいずれかを実行する前に、問題を引き起こした問題がある場合に、ファイルシステムと不良ブロックの完全なチェックをお勧めします(問題によっては、問題がある場合、それ以上のアクティビティが事態を悪化させる可能性があります)。また、削除/パージ手順で削除される内容を確認してから続行します(そのパッケージを削除した結果、余分なものが変更された場合は許可を求めるために一時停止する必要があります)安全です。


どうもありがとう!apt-get remove続いapt-get installてトリックを行いました!
ボクヒラオリバ

a full filesystem check似たようなことをしたのはかなり前のことです。簡単なヒントを教えてください。
ヴォクヒラ

1
fsck -f <block_device>などfsck /dev/sda1。ファイルシステムはアンマウントするか、読み取り専用でマウントする必要があります。これがルートファイルシステムである可能性が高いため、シングルユーザーモードでリブートするか、ライブcdなどからブートする必要があります。
デビッドスピレット

2
を使用tune2fsして、ファイルシステムが設定された制限よりも多くマウントされていることを示すマークを付けることができます。これにより、次回の起動時にチェックが強制されます。ファイルシステムがext2 / 3/4:tune2fs -C 99 <device>であると仮定するか、マウントカウントベースのチェックをオフにしている場合は、のようなもので同時にオンにしtune2fs -c 17 -C 99 <device>ます。
デビッドスピレット

2
touch / forcefsck; reboot
user23307

1
sudo apt remove --purge package
sudo apt install package

以前にパッケージをインストールしたことがないようなものです。私はこれを運動などでよくやっています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.