Làm thế nào để cài đặt lại nhiều gói bị loại bỏ cùng một lúc?


8

Tôi đã sử dụng sudo apt-get remove pythonlệnh và vô tình loại bỏ một loạt các gói được yêu cầu. Tôi đã đăng nhập thông qua dòng lệnh và cài đặt lại ubfox-desktop nhưng có những gói khác bị thiếu và tôi đang tìm cách để dễ dàng cài đặt lại các gói đã gỡ bỏ. Vì có nhật ký tại trung tâm phần mềm, tôi muốn hỏi cách dễ nhất có thể là khôi phục các thay đổi hoặc trích xuất danh sách các gói đã xóa khỏi trung tâm phần mềm ...

lưu ý: Tôi đã nhập sudo apt-get install .... .... ... ...khoảng hai chục chương trình đã bị xóa trong danh sách đó, nhưng khi tôi nhấn enter, nó không cài đặt bất kỳ chương trình nào vì không thể tìm thấy một số tên gói.

Các chương trình đã được gỡ bỏ cùng một ngày.


1
Nhìn vào/var/log/apt/history.log
Lekensteyn

Câu trả lời:


16

Trước hết, hãy để tôi nói rằng việc loại bỏ pythoncó thể dẫn đến nhiều lệnh cơ bản không hoạt động nữa. Vì vậy, tôi không biết nếu những gì tiếp theo sẽ làm việc.

Thứ hai, tôi giả sử rằng package names couldn't be foundlỗi bạn mắc phải, xuất phát từ một tên sai chính tả trên dòng lệnh hoặc từ một gói được cài đặt cục bộ và không có sẵn trong kho.

Sau đó, để có được nhật ký của các gói đã xóa, tương đối với dpkgnhật ký cuối cùng có sẵn (tôi không nghĩ bạn cần tính đến các nhật ký cũ hơn):

awk '$3 == "remove" { print $1, $2, $4 }' /var/log/dpkg.log | tee list

Sau đó chỉnh sửa listtệp được tạo trong thư mục hiện tại và chỉ để lại các dòng liên quan đến các gói bạn muốn cài đặt lại, dựa trên dấu thời gian của dòng. Giả sử bạn lưu tệp đã sửa đổi vào list-mod.

Để cài đặt lại các gói đó, sử dụng lệnh sau:

sudo apt-get --simulate install $(awk '{ print $3 }' list-mod)

Tôi đã chèn --simulatetùy chọn để xem lệnh sẽ làm gì. Nếu tất cả đều ổn, hãy thực hiện lại lệnh với tùy chọn đó.

Nếu lệnh cho biết một số gói không thể được tìm thấy, chỉ cần xóa chúng khỏi list-modvà thử lại.


cảm ơn bạn, tôi đã có thể cài đặt lại các gói tôi cần! Một câu hỏi mặc dù, có hơn 200 gói bị xóa trong nhật ký trung tâm phần mềm, nhưng tệp danh sách có khoảng 150, điều này có nghĩa là dpkg.log không chứa các gói cài đặt / phụ thuộc tự động? một lần nữa cảm ơn vì giải pháp này :)
Logan

1
Đó log file chứa tất cả các cài đặt, nâng cấp, gỡ bỏ hoặc thanh lọc gói, và với tất cả các ứng dụng từ dpkgđể apt-get, aptitude, Synaptic, Trung tâm phần mềm, gdebivv Bạn có thể cung cấp một cái nhìn tại cũ dpkg.logfile, xem ls -lrt /var/log/dpkg.log*.
enzotib

1
@enzotib Tôi đã chạy một kịch bản để xóa các tiêu đề linux cũ và tôi nghĩ rằng biểu thức chính quy khớp với nhiều gói mà tôi không muốn xóa (những gói rất quan trọng !!). Câu trả lời của bạn đã cứu tôi khỏi một thảm họa nhất định.
shivisuper

1
@enzotib Bạn vừa cứu tôi khỏi cài đặt lại hệ điều hành của mình sau khi chạy một tập lệnh xấu. Cảm ơn!
brndn2k

nó cho biết 0 đã nâng cấp, 0 cài đặt, 0 để xóa và 50 không được nâng cấp
James Casia

2

Vì vậy, tôi tình cờ làm một sai lầm tương tự: sudo apt-get purge python3.6*thay vì sudo apt-get purge python3.6.*.

Tôi đã có thể sửa nó khá nhanh, với các bước sau:

  1. Đã mở nhật ký vim /var/log/history.log.
  2. Tìm kiếm lệnh xấu của tôi bằng cách sử dụng lệnh vim /python3.6\*.
  3. Có một dòng Purge: unity-control-center-signon:amd64 (0.1.7~+14.04.20140211.2-0ubuntu4), ...với một danh sách dài các gói bị xóa (trong trường hợp loại bỏ nó sẽ bắt đầu bằng Remove:), mà tôi đã sao chép sang một tệp khác mà không có Purge:phần để làm việc với nó.
  4. Trong tập tin đó, tôi đã chạy lệnh vim : %s/:[^,]*,//g, đã loại bỏ phần phiên bản và để lại cho tôi một danh sách các gói unity-control-center-signon lxc ....
  5. Cuối cùng tôi đã sao chép một dòng từ bước trước đó và chạy: sudo apt-get install unity-control-center-signon lxc ...và đó là cách nó đã được sửa.

đối với tôi đó là/var/log/apt/history.log
Taylor
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.