Jak ponownie zainstalować pakiet za pomocą „apt-get”?

186

Wygląda na to, że mój aptitudejest jakoś zepsuty:

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]

Więc chciałbym zainstalować ponownie aptitudeza pomocą apt-get.

Niestety wydaje się, apt-getże nie ma opcji ponownej instalacji.

Jak mogę aptitudeznów wrócić do pracy?

Możliwe, że znalazłem główną przyczynę segfaulta umiejętności. Oto jak mogę go odtworzyć:

  1. Zdalne logowanie „ssh” do maszyny Debian za pośrednictwem terminala rxvt Cygwina (z 64-bitowej wersji niemieckiej Windows 7).
  2. Powiększ okno rxvt, tak aby obejmowało dwa monitory (tak, mam dwa monitory)
  3. Uruchom aptitude update. Uwaga: kiedy zmieniam rozmiar terminala rxvt na normalny, nie mam tych błędów segmentacji!
Vokuhila-Oliba
źródło

Odpowiedzi:

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.

Aby użyć go do ponownej instalacji, aptitudeużyj:

sudo apt-get install --reinstall aptitude
użytkownik23307
źródło
14
co -A5masz na myśli?
Vokuhila-Oliba
86
człowiek grep | grep - "-A"
grawity
34
Co --masz na myśli?
Desty
13
man getopt, patrz poniżejPARSING
Tino,
28
-A5pokazuje dopasowaną linię plus 5 kolejnych linii. --przestaje analizować opcje, interpretując w ten sposób wszystko, co następuje jako argumenty pozycyjne, unikając konieczności ucieczki przed myślnikiem w wyrażeniu, -Aktóre w innym przypadku byłoby interpretowane jako opcja samego grep.
jjmontes
114

Możesz ponownie zainstalować pakiet za pomocą sudo apt-get install --reinstall packagename. To całkowicie usuwa pakiet (ale nie pakiety, które od niego zależą), a następnie ponownie instaluje pakiet.

Może to być wygodne, gdy pakiet ma wiele odwrotnych zależności.

Milad Khajavi
źródło
10
Dziękujemy za to, że jesteś jedyną poprawną, kompletną, nieskromną odpowiedzią.
Cerin,
6
@Cerin: Nie nazwałbym pozostałych odpowiedzi zbyt przesadnymi: nawet ta „przeczytaj stronę podręcznika” faktycznie dała odpowiedź, a także sposób jej znalezienia.
David Spillett,
45
@DavidSpillett, zdecydowanie się nie zgadzam. Strony podręcznika są zwykle bardzo źle napisane i są bardzo nieprzyjazne dla początkujących. Na przykład akapit dotyczący opcji „--reinstall” nie wspomina, że ​​należy go użyć z argumentem „install”. Początkujący może słusznie zapytać „dlaczego muszę to powiedzieć, aby zainstalować ORAZ zainstalować ponownie?” Odpowiedź, która mówi komuś RTFM, jest najgorszą odpowiedzią i boli mnie, gdy widzę ją z największą liczbą głosów, szczególnie gdy kompletna i naprawdę pomocna odpowiedź jest na dole.
Cerin,
20

Czasami musisz także przywrócić pliki konfiguracyjne! nie tylko zainstaluj ponownie.

sudo apt-get install --reinstall xxxx

Ponownie zainstaluj aplikację, zachowuje pliki konfiguracyjne.

Może to być pomocne, ale czasami musisz zacząć od nowa, więc używam tego:

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

następnie

sudo apt-get install xxxx
andreskwan
źródło
6
A jeśli potrzebujesz przywrócić tylko pliki konfiguracyjne, w niektórych przypadkach (jeśli są zarządzane przez ucf) powinieneś użyć UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname].
Skippy le Grand Gourou
2
Ta odpowiedź zasługuje na DUŻĄ aprobatę. Właśnie tego potrzebujesz, aby „całkowicie ponownie zainstalować” pakiet. Np. Prosta - ponowna instalacja vsftpd nie odtwarza pliku konfiguracyjnego, nawet jeśli plik już nie istnieje. Zamiast tego wykonuje zadanie „Usuń + wyczyść + (ponownie) zainstaluj”.
Kar.ma
13

Powinieneś być bezpieczny, aby usunąć aptitude i zainstalować ponownie, ponieważ nie wpłynie to na inne narzędzia apt. Tak więc: apt-get remove aptitudea następnie apt-get install aptitude, lub jeśli to nadal nie działa, należy apt-get purge aptitudenastępnie apt-get install aptitude.

Przed wykonaniem którejkolwiek z powyższych czynności zalecam sprawdzenie pełnego systemu plików i sprawdzenie złego bloku w przypadku, gdy istnieje problem, który spowodował problem (w zależności od problemu, jeśli taki istnieje, dalsza aktywność może pogorszyć sytuację). Upewnij się również, że przejrzałeś to, co zostanie usunięte w kroku usuwania / czyszczenia przed kontynuowaniem (powinien zatrzymać się, aby poprosić o pozwolenie, jeśli cokolwiek dodatkowego zostanie zmienione w wyniku usunięcia tego jednego pakietu), aby dokładnie sprawdzić moją myśl, że to jest bezpieczny.

David Spillett
źródło
Wielkie dzięki! apt-get removenastępnie apt-get installzrobiono lewę!
Vokuhila-Oliba
Dawno temu robiłem takie a full filesystem checklub podobne rzeczy . Czy mógłbyś podać mi krótką wskazówkę, jak to zrobić?
Vokuhila-Oliba
1
fsck -f <block_device>takie jak fsck /dev/sda1. W tym czasie system plików będzie musiał być odmontowany lub zamontowany tylko do odczytu, ponieważ prawdopodobnie jest to główny system plików, powinieneś ponownie uruchomić komputer w trybie pojedynczego użytkownika lub uruchomić z czegoś innego, jak na żywo CD.
David Spillett
2
Możesz użyć, tune2fsaby oznaczyć system plików jako zamontowany więcej razy niż ustawiony limit, co powinno wymusić sprawdzenie następnego uruchomienia. Zakładając, że systemem plików jest ext2 / 3/4: tune2fs -C 99 <device>lub, jeśli masz wyłączone sprawdzanie oparte na liczbie montowań, włącz je jednocześnie z czymś podobnym tune2fs -c 17 -C 99 <device>.
David Spillett
2
touch / forcefsck; reboot
user23307 30.01.2010
1
sudo apt remove --purge package
sudo apt install package

To tak, jakbyś nigdy wcześniej nie instalował pakietu. Robię to często z ruchem i takimi rzeczami.

Niwla23
źródło