Có một lệnh apt để tải xuống một tệp deb từ kho lưu trữ vào thư mục hiện tại không?


46

Tôi thường quan tâm đến các kích hoạt cài đặt (postinst, postrm) hoặc các phần nhất định của gói (như /usr/share/etc). Hiện tại, tôi đang chạy lệnh tiếp theo để lấy mã nguồn:

apt-get source [package-name]

Nhược điểm là, tệp này thường lớn hơn nhiều so với gói nhị phân và không phản ánh cây cài đặt.

Ngay bây giờ, tôi đang tải xuống các gói thông qua http://packages.ubfox.com/ :

  1. Tìm kiếm [package-name]
  2. Chọn gói
  3. Nhấp vào amd64 / i386 để tải xuống
  4. Tải tập tin thực tế

Điều này mất quá nhiều thời gian cho tôi và là một người thực sự thích cái vỏ, tôi muốn làm một cái gì đó giống như lệnh ( tưởng tượng ) tiếp theo :

apt-get get-deb-file [package-name]

Tôi không thể tìm thấy cái gì đó như thế này trong trang hướng dẫn apt-get . Gần nhất tôi tìm thấy là --download-onlychuyển đổi, nhưng điều này đặt gói trong /var/cache/apt/archives(yêu cầu quyền root) và không trong thư mục hiện tại.


Sự khác biệt trên máy mà không lưu tệp: ssh debianmachine1 "dpkg --get-select" | diff - <(dpkg --get-select)
Scott Robert Schreckengaust

Bạn có thể sử dụng debgettừ gói debian-goodies.
Shaya

Câu trả lời:


59

Bạn có thể sử dụng lệnh downloadphụ của apt, apt-gethoặc aptitude. Ví dụ: nếu $ PKG là gói bạn muốn, bất kỳ thứ nào trong số này sẽ làm:

apt-get download $PKG
apt download $PKG
aptitude download $PKG

Điều này không yêu cầu quyền root. Điều tương tự cũng có thể được xấp xỉ bằng cách sử dụng apt-getwget:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2)

Tuy nhiên, điều này sẽ tìm nạp tất cả các gói cần thiết để cài đặt gói, vì vậy bạn có thể cố gắng giới hạn gói thay thế:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | grep "/${PKG}_")

Bạn cũng có thể đặt một dòng wget vào một hàm, để có thể sử dụng nó như một lệnh apt-download với tên gói làm tham số:

function apt-download { wget -c $(apt-get install --reinstall --print-uris -qq $1 | cut -d"'" -f2); }

Lưu ý các sửa đổi: $ PKG được thay thế bằng $ 1 và tham số -c cho phép tiếp tục tải xuống bị gián đoạn.


1
Tuyệt vời, đây là những gì tôi đang tìm kiếm. Một lý do khác để giữ năng khiếu trên hệ thống của tôi, lệnh hữu ích khác không được cung cấp aptaptitude changelog $PKG.
Lekensteyn

4
Cập nhật: từ Natty (phiên bản apt 0.8.11 chính xác), aptitude downloadtính năng này cũng có sẵn apt: apt-get download $PKG.
Lekensteyn

ngọt ngào, hoạt động bất chấp apt v0.8.10 cổ xưa của tôi
rogerdpack

có vẻ như họ đã bỏ đi với tùy chọn --print-urls
erjoalgo

Tùy chọn --print-urls vẫn còn đó
kumarharsh

8
sudo apt-get -o dir::cache::archives="/path/to/folder/" -d install package

Ghi chú:

Bạn cần tạo một thư mục có tên một phần trong thư mục đích.


Nghe không tệ lắm. Các tùy chọn dường như được mô tả bởi man apt.conf. Tôi muốn tránh việc tạo thư mục.
Lekensteyn

Tôi chỉ tò mò, tại sao bạn lại tránh tạo thư mục?
mount.cifs

Tôi không cần lưu trữ gói mãi mãi và tránh tạo thư mục cũng tiết kiệm thời gian.
Lekensteyn

Chỉ muốn lưu ý rằng giải pháp này cũng sẽ nhấn mạnh vào việc xóa gói (ví dụ: nếu bạn thay đổi phiên bản sang phiên bản /etc/apt/sources.listmới hơn, với mục đích tải xuống các gói sau) - trong trường hợp như vậy, wgetphương pháp trên có thể hữu ích hơn, nếu bạn không 'không muốn xóa bất cứ điều gì ...
sdaau

5

Trong Ubuntu 14.04 ( aptphiên bản gói 1.0.1ubuntu2, tôi tin), apt-getbao gồm downloadlệnh tải xuống gói đã cho dưới dạng .debtrong thư mục hiện tại.

Ví dụ: giả sử chúng tôi muốn tải xuống trình quản lý tệp Ranger:

$ apt-get download ranger

Kết quả trong:

$ ls . | grep ranger
ranger_1.6.0-1_all.deb

Đây là hoàn hảo. Tất cả các giải pháp khác tôi đã thử không hoạt động nếu apt installkhông thể đáp ứng tất cả các yêu cầu phụ thuộc. Tôi chỉ muốn tập tin .deb để mày mò!
Raziel

3

Nếu bạn muốn tải xuống tất cả các gói deb từ danh sách, bạn có thể làm điều này:

cat path/to/text/file.txt | xargs apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | xargs wget

Chỉ cần đặt một tên gói trên mỗi dòng. Giống như trong một tệp tests.txt. Ví dụ: với nội dung như thế này:

apache2-mpm-event
curl
dmidecode
ethtool
libapache2-mod-wsgi
libapache2-mod-python

Hi vọng điêu nay co ich. ;)


2

sudo apt-get install devscripts

dget [package-name]


Điều này không cung cấp một câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ một tác giả, hãy để lại nhận xét bên dưới bài đăng của họ.
s3lph

Làm thế nào nó không cung cấp một câu trả lời? Điều này tải một cuộc tranh luận từ kho lưu trữ vào thư mục hiện tại. Có phải đó không chính xác là những gì câu hỏi?
Michael Terry

Một chút chi tiết có thể hữu ích. Mặc dù điều này về mặt kỹ thuật đủ điều kiện là một câu trả lời, bạn vẫn có thể muốn cung cấp nhiều hơn hai lệnh.
s3lph

:: shrug :: Không giống như các câu trả lời khác ở đây, câu trả lời này không có provisos hoặc hãy cẩn thận. Đó là một câu trả lời đơn giản cho một câu hỏi đơn giản.
Michael Terry

0

/var/cache/apt/archiveslà thế giới có thể đọc được. Sau đó apt-get -d, chỉ cần giải nén nó từ đó vào thư mục nhà của bạn. Chạy dpkg -e /var/cache/apt/archives/foo_version.deb footrong khi trong thư mục nhà của bạn và các tập tin điều khiển sẽ được đổ vào foo/.


Tôi nghĩ vấn đề với phương pháp này là việc tải xuống vẫn đòi hỏi đặc quyền quản trị. Có vẻ ngớ ngẩn khi đi đến những thái cực như vậy chỉ để có được một tập tin vào thư mục nhà của bạn.
ændrük

Mở .debs không phải là vấn đề, tải xuống. Nó có thể là một lỗi hoặc không, nhưng các gói trong / var / cache / apt / archives` cũng bị ảnh hưởng bởi umask. Tôi đã đặt một ô 027 và do đó, các gói trong /var/cache/apt/archiveskhông thể được đọc bởi tôi. Vì tôi chỉ cần kiểm tra nội dung gói, tôi chỉ cần tải xuống một lần: đến /tmp.
Lekensteyn

0

Bạn có thể sử dụng lệnh debgetđược bao gồm trong gói debian-goodies.

Cài đặt nó với:

sudo apt install debian-goodies

Tải xuống các gói bằng cách sử dụng:

debget <package_name>

Ví dụ:

debget debian-goodies

Mà sẽ tải xuống debian-goodies_0.79_all.debtrong thư mục hiện tại của bạn (làm pwdđể in thư mục làm việc hiện tại của bạn).


debian-goodiesđi kèm với rất nhiều lệnh hữu ích, xem thêm: askubuntu.com/a/1170001/777279
Shayan
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.