it-swarm-vi.tech

Làm thế nào để bạn có thể làm việc với Ubuntu (Linux)?

(Câu hỏi này rất giống với 10458 . Có ý kiến ​​cho rằng Fedora và Ubuntu/Debian đủ khác nhau để đảm bảo các câu trả lời khác nhau.)

Khi tôi sử dụng bất kỳ thiết lập Ubuntu nào, tôi dần dần cài đặt một số gói trên và trên cài đặt cơ bản. Nếu tôi cài đặt lại hoặc nếu tôi cần cài đặt một máy mới, tôi thường muốn cài đặt lại các gói cụ thể và tôi muốn thực hiện nhanh để có được trở lại làm việc với tối thiểu rắc rối. Theo như tôi đã thấy tất cả các trình quản lý gói (apt-get, aptitudesynaptic) có thể cho tôi biết gói nào được cài đặt và tất cả chúng đều có nhật ký (mặc dù các gói khác nhau cho mỗi công cụ, đó là một rắc rối). Nhưng không ai trong số họ có thể cho tôi biết gói nào Tôi đã cài đặt, trái ngược với các phụ thuộc hoặc cập nhật hệ thống của họ. Ngay cả nhật ký cũng khó hiểu ở chỗ tôi không hoàn toàn chắc chắn những gì tôi nên trích xuất từ ​​chúng hoặc cách tích hợp chúng (trong trường hợp các công cụ gia đình apt khác nhau). Điều này có nghĩa là mỗi lần tôi cài đặt lại hoặc thậm chí chỉ sao lưu, tôi không chắc chắn cách tạo lại danh sách đó.

Tôi không nhất thiết mong đợi bất kỳ công cụ nào để làm điều này cho tôi, nhưng nếu họ không tìm cách giải quyết. Ngay cả các mẫu để grep cho, quy tắc tốt, hoặc một ý tưởng rõ ràng về chính xác những gì đang được ghi lại, sẽ hữu ích. Có thể không có một "câu trả lời tốt nhất" ở đây nhưng những câu trả lời tốt sẽ rất hữu ích.


Hầu hết các câu trả lời dưới đây cung cấp một số xấp xỉ về những gì tôi đang tìm kiếm, và hữu ích ở một mức độ nào đó. Công cụ được chọn là công cụ gần nhất với cách tự động cài đặt lại các công cụ của tôi trên một hệ thống mới, ngay cả với tất cả các cảnh báo của nó.

38
quark

Trên bất kỳ máy dựa trên Debian nào, đây là một cách phổ biến để sao chép bộ gói. Trên máy cũ:

dpkg --get-selections "*" > my_favorite_packages

Sao chép tệp my_favorite_packages sang máy mới (ổ ngón tay cái là một tùy chọn tốt, nhưng scp cũng hoạt động tốt). Sau đó chạy chuỗi này (với quyền root):

apt-get update
dpkg --set-selections < my_favorite_packages
apt-get -u dselect-upgrade

Điều này không giúp bạn chỉ các gói bạn đã cài đặt. Nó cũng nhận được sự phụ thuộc của họ, v.v. Ngoài ra, nếu kho lưu trữ giữa hai máy khác nhau, tất cả các cược đều bị tắt.

Theo như nhật ký, apt-get giữ nhật ký tại /var/log/apt/history.log (cảm ơn Tshepang vì đã cập nhật thông tin này trong một nhận xét); dpkg hiện (tại /var/log/dpkg.log), nhưng thật khó để phân tích cú pháp và chỉ có thể được đọc với quyền root; aptitude có một tại /var/log/aptitude và bạn có thể trang thông qua nó với các đặc quyền người dùng thông thường.

Theo như tôi có thể nói, bạn đúng rằng không có nhật ký nào theo dõi cụ thể những gì bạn đã cài đặt trái ngược với các phụ thuộc được cài đặt tự động. Tuy nhiên, bạn có thể lấy thông tin đó từ tìm kiếm aptitude. Tìm kiếm tất cả các gói đã cài đặt cũng được cài đặt tự động:

aptitude search '~i ~M'

Nếu bạn chỉ muốn những cái bạn đã cài đặt (không phải phụ thuộc tự động), hãy phủ nhận ~M:

aptitude search '~i !~M'

Nếu bạn muốn định dạng đó để bạn chỉ có tên của các gói và Word "cài đặt", aptitude cũng có thể làm điều đó. Điều này cung cấp cho bạn một danh sách sẵn sàng để cung cấp cho dpkg --get-selections:

aptitude search '~i !~M' -F "%p install"

(Tôi không có gì trên các hệ thống dựa trên RedHat hoặc RedHat. Xin lỗi. Thực sự không có câu trả lời nào cho Linux mỗi se vì quản lý gói là lớn một phần của những gì làm cho các bản phân phối khác nhau khác nhau .)

31
Telemachus

Sử dụng dpkg -l '*' > jaunty.original để ghi nhớ tất cả các gói đã cài đặt trên hệ thống mới cài đặt.

Sau khi bạn đã cài đặt tất cả các gói bổ sung của mình, hãy làm dpkg -l '*' > mysystem.2009017.

Các gói bổ sung chỉ là sự khác biệt: diff jaunty.original mysystem.2009017

7
Ludwig Weinzierl

Năng khiếu thực sự khá tốt trong việc này. Aptitude biết khi nào một cái gì đó được cài đặt bằng tay hoặc phụ thuộc và bạn có thể yêu cầu nó loại bỏ những thứ không còn cần thiết và chỉ được cài đặt vì một cái gì đó phụ thuộc vào nó luôn giữ cho hệ thống của bạn nhỏ nhất có thể.

Có một số gói tạo nên một bản cài đặt Ubuntu, tối thiểu Ubuntu, máy tính để bàn, máy chủ Ubuntu, v.v. Nếu bạn yêu cầu Aptitude đánh dấu những thứ đó là cài đặt thủ công và xóa mọi thứ khác, thì bạn sẽ kết thúc với số lượng tối thiểu có thể của các gói.

Tôi giải thích cách thực hiện tất cả những điều đó trong hai bài đăng trên blog của mình: Dọn dẹp Debian GNU/LinuxDọn sạch Debian GNU/Linux (hoặc Ubuntu), phát lại . Nói tóm lại, câu trả lời bạn đang tìm kiếm là:

aptitude search ~i | grep -v "i A"

Lần cuối cùng tôi làm việc với điều đó, nếu bạn sử dụng apt-get, thì nó không hoạt động. Đó là lý do tại sao tôi luôn đề xuất năng khiếu và theo như tôi biết, Debian không tán thành apt - hãy ủng hộ năng khiếu.

Tôi không biết làm thế nào để làm điều đó trên Fedora và có lẽ bạn nên tách ra thành một câu hỏi khác. Fedora và Ubuntu là các hệ điều hành khác nha và nên được xử lý như vậy (ngay cả khi chúng chia sẻ kernel và một số nội dung khác).

3
pupeno

Trên debian apt-show-Phiên bản hiển thị các phiên bản của gói đã cài đặt.

2
seb

Từ man aptitude-create-state-bundle:

gói aptitude-tạo-trạng thái tạo ra một kho lưu trữ nén lưu trữ các tệp được yêu cầu để sao chép trạng thái lưu trữ gói hiện tại.

Điều này sẽ giữ lại thông tin tương tự mà aptitude có trên các gói được cài đặt thủ công.

Nó có nghĩa là được sử dụng với aptitude-run-state-bundle:

gói aptitude-run-state-pack giải nén gói trạng thái aptitude đã cho được tạo bởi gói aptitude-created-state-bundle (1) vào thư mục tạm thời, gọi nó với thư mục được cung cấp và xóa thư mục tạm thời sau đó.

1
intuited

Khi chỉ sử dụng dpkg, bạn không biết liệu gói đó được người dùng cài đặt thủ công hay tự động (dưới dạng phụ thuộc hoặc trong quá trình cài đặt hệ điều hành ban đầu). Nếu bạn muốn giữ lại thông tin đó, bạn cần có một danh sách chỉ các gói được cài đặt thủ công.

Đối với điều đó, bạn có thể sử dụng một trong hai lớp lót này. Cả hai đều mang lại cùng một đầu ra trên máy của tôi và chính xác hơn tất cả các giải pháp được đề xuất cho đến bây giờ trong câu hỏi này. Chúng là sự kết hợp của hai câu trả lời (1)(2) . Lưu ý rằng ban đầu tôi đã đăng câu trả lời này tại đây .

Sử dụng apt-mark:

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Sử dụng aptitude:

comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Rất ít gói vẫn rơi vào vết nứt, mặc dù tôi nghi ngờ những cái này thực sự được người dùng cài đặt, ngay sau khi cài đặt thông qua cài đặt bản địa hóa ngôn ngữ hoặc ví dụ: thông qua trình cài đặt Totem codec. Ngoài ra, các phiên bản tiêu đề linux dường như cũng tích lũy, mặc dù tôi chỉ cài đặt siêu dữ liệu không dành riêng cho phiên bản. Ví dụ:

libreoffice-help-en-gb
openoffice.org-hyphenation
gstreamer0.10-fluendo-mp3
linux-headers-3.13.0-29    

Cách thức hoạt động

  1. Lấy danh sách các gói cài đặt thủ công. Đối với năng khiếu, sed bổ sung loại bỏ khoảng trắng còn lại ở cuối dòng.
  2. Lấy danh sách các gói được cài đặt ngay sau khi cài đặt mới.
  3. So sánh các tệp, chỉ xuất các dòng trong tệp 1 không có trong tệp 2.

Các khả năng khác cũng không hoạt động:

  • Sử dụng tệp ubuntu-14.04-desktop-AMD64.manifest ( tại đây cho Ubuntu 14.04) thay vì /var/log/installer/initial-status.gz. Nhiều gói được hiển thị là cài đặt thủ công mặc dù chúng không phải là.
  • Sử dụng apt-mark showauto thay vì /var/log/installer/initial-status.gz. Ví dụ: apt-mark không bao gồm gói xserver-xorg, trong khi tệp khác thì có.

Cả hai liệt kê nhiều gói hơn giải pháp trên.

1
jmiserez

Trên các hệ thống dựa trên apt, hãy xem /var/log/apt/term.log. Đối với tôi, có một dòng khá rõ ràng để vẽ nơi cài đặt kết thúc và nơi cài đặt của tôi bắt đầu.

1
Wade

Tôi thiên vị, và giải pháp tôi trình bày không phải lúc nào cũng có thể, nhưng tôi cảm thấy mệt mỏi với tình huống này. Kết quả là tôi không cài đặt bất cứ thứ gì nữa với các công cụ quản lý cập nhật/gói.

Tôi đã đi một con đường khá khó khăn (tôi có yêu cầu nghiêm ngặt cho các phiên bản). Tôi đã tạo ra một tệp thực hiện lớn để tải xuống, biên dịch và cài đặt trong thư mục chính của tôi mỗi gói (chương trình, thư viện, bất cứ thứ gì) tôi cần. Tôi đã phát triển nó từng bước, từng mảnh một. Makefile tải xuống và biên dịch mọi thứ, ngay cả các trình biên dịch.

Khi tôi chuyển sang một hệ thống mới hoặc cài đặt lại, tôi chỉ cần sao chép tệp tạo tệp (cộng với một số nội dung hỗ trợ), chạy make world và quay lại vào ngày hôm sau.

Đối với một số chương trình tôi phát triển (vì vậy tôi có quyền kiểm soát), tôi sử dụng một công cụ tôi đã lập trình, trình quản lý gói hạt dẻ . Sắp xếp các thư mục .app trên MacOSX. Mọi thứ đều nằm trong gói, vì vậy tôi biết những gì được cài đặt bất cứ lúc nào và tôi biết nó tự chứa và tự cung cấp (ngoại trừ lib hệ thống)

0
Stefano Borini