Як перевстановити пакет за допомогою "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знову взятися на роботу?

Цілком можливо, що я знайшов першопричину segfault для параметра здатності. Ось як я можу це відтворити:

  1. 'ssh' віддаленого входу в машину Debian через rxvt термінал Cygwin (з 64-розрядного німецького видання Windows 7).
  2. Збільшити вікно rxvt так, щоб воно переходило на два монітори (так, у мене є два монітори)
  3. Біжи aptitude update. Примітка: коли я змінюю розмір терміналу rxvt до нормального, у мене немає цих помилок сегментації!

Відповіді:


319
$ 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ти жартуєш?
Вокухіла-Оліба

86
людина греп | grep - "-A"
grawity

34
Що це --ти жартуєш?
Desty

13
man getopt, дивіться PARSING
внизу

28
-A5показує відповідну лінію плюс наступні 5 рядків. --припиняє розбір варіантів, тим самим інтерпретуючи все, що виникає після цього, як позиційні аргументи, уникаючи необхідності уникнути тире в виразі, -Aякий інакше трактується як варіант, щоб виграти себе.
jjmontes

114

Ви можете перевстановити пакет за допомогою sudo apt-get install --reinstall packagename. Це повністю видаляє пакет (але не пакети, які від нього залежать), а потім знову встановлює пакет.

Це може бути зручно, коли пакет має багато зворотних залежностей.


10
Дякуємо за те, що ви отримали єдину правильну, повну, несмерзну відповідь.
Серін

6
@Cerin: Інші відповіді я б не назвав надто хитрими: навіть «прочитайте людину сторінку» насправді дали відповідь, а також як її знайти.
Девід Спіллетт

45
@DavidSpillett, я категорично не згоден. Сторінки чоловіків, як правило, дуже погано написані і дуже недоброзичливі до новачків. Наприклад, абзац в опції "--reinstall" не вказує на те, що ви повинні використовувати його з аргументом "встановити". Новачок може по праву запитати "чому я повинен сказати йому встановити І перевстановити?" Відповідь, яка комусь повідомляє 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].
Skippy le Grand Gourou

2
Ця відповідь заслуговує на велике оновлення. Це те, що вам потрібно, коли ви хочете "повністю перевстановити" пакет. Наприклад, проста - перевстановлення vsftpd не створює конфігураційний файл, навіть якщо файл більше не існує. Замість цього виконується "Видалити + очистити + (повторно)".
Kar.ma

13

Ви повинні безпечно видалити придатність та перевстановити, оскільки це не вплине на інші підхожі програми. Отже: 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. Файлову систему потрібно буде відключити або встановити лише для читання в той час, тому що це, швидше за все, ваша коренева файлова система, ви повинні перезавантажитись в режимі однокористування або завантажити з чогось іншого, як живий компакт-диск.
Девід Спіллетт

2
Ви можете використовувати tune2fsдля позначення файлової системи як встановленого більше разів, ніж встановлений ліміт, що повинен змусити перевірити наступне завантаження. Припустимо, що файлова система ext2 / 3/4: tune2fs -C 99 <device>або, якщо у вас вимкнено перевірку на основі монтажу, увімкніть її одночасно з чимось подібним tune2fs -c 17 -C 99 <device>.
Девід Спіллетт

2
touch / forcefsck; перезавантажитись
користувач23307

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

Це так, як ви ніколи раніше не встановлювали пакунок. Я роблю це часто з рухом і подібними речами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.