Làm cách nào để cài đặt lại gói bằng 'apt-get'?


186

Dường như của tôi aptitudebị phá vỡ bằng cách nào đó:

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]

Vì vậy, tôi muốn cài đặt lại aptitudebằng cách sử dụng apt-get.

Thật không may, nó dường như apt-getkhông có tùy chọn cài đặt lại.

Làm thế nào tôi có aptitudethể làm việc trở lại?

Có thể là tôi đã tìm ra nguyên nhân gốc rễ cho segfault của aptitude. Đây là cách tôi có thể tái tạo nó:

  1. 'ssh' đăng nhập từ xa vào máy Debian thông qua thiết bị đầu cuối rxvt của Cygwin (từ phiên bản tiếng Đức Windows 7 64 bit).
  2. Phóng to cửa sổ rxvt để nó trải dài trên hai màn hình (vâng, tôi có hai màn hình)
  3. Chạy đi aptitude update. Lưu ý: khi tôi thay đổi kích thước thiết bị đầu cuối rxvt thành bình thường thì tôi không gặp phải các lỗi phân đoạn này!

Câu trả lời:


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.

Vì vậy, để sử dụng nó để cài đặt lại aptitudesử dụng:

sudo apt-get install --reinstall aptitude

14
những gì -A5bạn đang grepping?
Vokuhila-Oliba

86
người đàn ông grep | grep - "-A"
grawity

34
Những gì --bạn đang grepping?
Desty

13
man getopt, nhìn bên dướiPARSING
Tino

28
-A5hiển thị dòng phù hợp cộng với 5 dòng sau. --dừng phân tích cú pháp các tùy chọn, do đó diễn giải bất cứ điều gì xuất hiện dưới dạng đối số vị trí, tránh phải thoát dấu gạch ngang trong biểu thức -Amà nếu không được hiểu là một tùy chọn để grep chính nó.
jjmontes

115

Bạn có thể cài đặt lại một gói với sudo apt-get install --reinstall packagename. Điều này loại bỏ hoàn toàn gói (nhưng không phải các gói phụ thuộc vào nó), sau đó cài đặt lại gói.

Điều này có thể thuận tiện khi gói có nhiều phụ thuộc ngược.


10
Cảm ơn bạn đã là câu trả lời đúng, đầy đủ, không ngớ ngẩn.
Cerin

6
@Cerin: Tôi sẽ không gọi những câu trả lời khác quá lén lút: ngay cả "đọc trang người đàn ông" cũng thực sự đưa ra câu trả lời cũng như cách tìm ra nó.
David Spillett

45
@DavidSpillett, tôi rất không đồng ý. Các trang người đàn ông thường được viết rất kém và rất không thân thiện với người mới. Ví dụ: đoạn trên tùy chọn "--reinstall" không đề cập đến việc bạn phải sử dụng nó với đối số "install". Một người mới có thể hỏi chính xác "tại sao tôi phải bảo nó cài đặt VÀ cài đặt lại?" Một câu trả lời nói với ai đó về RTFM là loại câu trả lời tồi tệ nhất và tôi cảm thấy đau đớn khi thấy nó có nhiều phiếu bầu nhất, đặc biệt là khi một câu trả lời đầy đủ và thực sự hữu ích ở gần cuối.
Cerin

20

Đôi khi bạn cũng cần khôi phục tập tin cấu hình! không chỉ cài đặt lại.

sudo apt-get install --reinstall xxxx

Cài đặt lại ứng dụng, giữ các tập tin cấu hình.

Điều này có thể hữu ích, nhưng đôi khi bạn cần bắt đầu mới, vì vậy những gì tôi sử dụng là:

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

sau đó

sudo apt-get install xxxx

6
Và nếu bạn chỉ cần khôi phục các tệp cấu hình, trong một số trường hợp (nếu chúng được quản lý bởi ucf), bạn nên sử dụng UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname].
Skippy le Grand Gourou

2
Câu trả lời này xứng đáng với một upvote LỚN. Đây là những gì bạn cần khi bạn muốn "cài đặt lại hoàn toàn" một gói. Ví dụ: cài đặt đơn giản của vsftpd không tạo lại tệp cấu hình, ngay cả khi tệp không còn tồn tại nữa. Thay vào đó, "Remove + Purge + (Re)" thực hiện công việc.
Kar.ma

13

Bạn nên an toàn để xóa apt apt và cài đặt lại, vì điều đó sẽ không ảnh hưởng đến các tiện ích apt khác. Vì vậy: apt-get remove aptitudetheo sau apt-get install aptitude, hoặc nếu vẫn thất bại hãy thử apt-get purge aptitudetheo sau apt-get install aptitude.

Trước khi thực hiện một trong những điều trên, tôi khuyên bạn nên kiểm tra toàn bộ hệ thống tệp và khối xấu trong trường hợp có sự cố ở đó gây ra sự cố (tùy thuộc vào sự cố, nếu có, hoạt động tiếp theo có thể khiến mọi việc tồi tệ hơn). Ngoài ra, hãy đảm bảo bạn xem lại những gì sẽ bị xóa trong bước xóa / thanh lọc trước khi cho phép tiến hành (cần tạm dừng để xin phép nếu có bất kỳ điều gì thêm được thay đổi do xóa gói đó), để kiểm tra lại suy nghĩ của tôi rằng điều này là an toàn.


Cảm ơn rất nhiều! apt-get removetiếp theo là apt-get installlừa
Vokuhila-Oliba

Lâu lắm rồi tôi mới làm những việc như thế a full filesystem checkhoặc tương tự. Bạn có thể vui lòng cho tôi một gợi ý ngắn làm thế nào để làm điều đó?
Vokuhila-Oliba

1
fsck -f <block_device>chẳng hạn như fsck /dev/sda1. Hệ thống tập tin sẽ cần được ngắt kết nối hoặc gắn kết chỉ đọc tại thời điểm đó vì đây có thể là hệ thống tập tin gốc của bạn, bạn nên khởi động lại vào chế độ một người dùng hoặc khởi động từ một thứ khác như cd trực tiếp.
David Spillett

2
Bạn có thể sử dụng tune2fsđể đánh dấu hệ thống tập tin là đã được gắn nhiều lần hơn giới hạn đã đặt của nó, điều đó sẽ buộc kiểm tra lần khởi động tiếp theo. Giả sử hệ thống tập tin là ext2 / 3/4: tune2fs -C 99 <device>hoặc trong trường hợp bạn đã tắt tính năng kiểm tra số lần gắn kết, hãy bật nó cùng lúc với một cái gì đó như tune2fs -c 17 -C 99 <device>.
David Spillett

2
chạm / forcefsck; khởi động lại
dùng23307

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

Điều đó giống như bạn chưa bao giờ cài đặt gói trước đó. Tôi đang làm điều này thường xuyên với chuyển động và những thứ như vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.