나는 데비안에 다운로드하고 설치하고 싶은 debs의 URL(다운로드 링크)을 얻는 --print-uris
데 사용합니다 (apt-get
물방울)GNU/리눅스.
--print-uris
Instead of fetching the files to install their URIs are printed. Each URI will have the path, the
destination file name, the size and the expected MD5 hash. Note that the file name to write to will not
always match the file name on the remote site! This also works with the source and update commands. When
used with the update command the MD5 and size are not included, and it is up to the user to decompress any
compressed files. Configuration Item: APT::Get::Print-URIs.
예제 출력wesnoth
:-
$ apt_uris wesnoth
http://mirror.fsf.org/trisquel/pool/main/s/sdl-net1.2/libsdl-net1.2_1.2.8-4_i386.deb
http://mirror.fsf.org/trisquel/pool/main/s/sdl-ttf2.0/libsdl-ttf2.0-0_2.0.11-3_i386.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-data_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-core_1.10.7-1ubuntu0.14.04.1_i386.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-httt_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-tsg_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-trow_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-ttb_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-ei_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-utbs_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-did_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-nr_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-sof_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-sotbe_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-l_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-aoi_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-thot_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-low_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-dm_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-dw_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth-1.10-music_1.10.7-1ubuntu0.14.04.1_all.deb
http://mirror.fsf.org/trisquel/pool/main/w/wesnoth-1.10/wesnoth_1.10.7-1ubuntu0.14.04.1_all.deb
노트:
$ type apt_uris
apt_uris is a function
apt_uris ()
{
sudo apt-get install "$@" --print-uris -qq | grep http:// | cut -d "'" -f 2;
}
이제 요점을 살펴보겠습니다.URL에서 각 deb 파일의 크기를 가져오거나 인쇄하고 싶습니다.(다운로드가 필요하지 않습니다).
wget
또는 다른 수단을 사용하여 어떻게 이를 수행할 수 있습니까 ?
답변1
다운로드하지 않고 파일 크기를 얻는 일반적인 방법은 HTTP HEAD 요청을 만들고 서버가 크기를 Content-Length
헤더에 다시 보내도록 하는 것입니다. 일반적인 정적 파일(예: deb
파일)의 경우 서버가 해당 정보를 다시 보낼 수 있지만 보장할 수는 없습니다.
이러한 HTTP HEAD 요청을 보내기 위한 다양한 도구가 있습니다. 다음은 이 유틸리티를 사용하여 이 작업을 수행하는 함수의 예입니다 curl
.
get_size() { # arg: URI
curl -sI "$1" | sed -n 's/^Content-Length: \([0-9]\{1,\}\).*/\1/p'
}
Content-Length
쿼리가 성공하거나 오류(예: 오류 메시지의 404 Not found
크기 )를 반환하는지 여부가 반환됩니다.Content-Length
대안은 다음과 같습니다 curl
:
- 그누
wget
:.wget -qSO- --max-redirect=0 --method=HEAD "$1"
쿼리가 실패한 경우(예:set -o pipefail
인스턴스와 함께 사용되는 경우) 쿼리는 실패한 종료 상태를 반환합니다. - Perl LWP
HEAD
명령:HEAD "$1"
. 이 명령도 쿼리 실패를 보고하지만 HTTP 리디렉션을 따르므로 비활성화할 수 없는 것 같습니다.
인도적인 접근 방식을 원한다면 다음을 사용할 수도 있습니다 lftp
.
$ lftp -c 'du -h http://mirror.fsf.org/trisquel/pool/main/s/sdl-net1.2/libsdl-net1.2_1.2.8-4_i386.deb'
12K /trisquel/pool/main/s/sdl-net1.2/libsdl-net1.2_1.2.8-4_i386.deb
답변2
Debian 파생 제품에서는 각 파일의 크기가 .deb
패키지 목록에 저장되므로 검색하기 위해 아무것도 다운로드할 필요가 없습니다.
사실, apt-get --print-uris
나는 당신에게 직접 정보를 제공할 것입니다:
$ apt-get install nginx --print-uris -qq
Starting pkgProblemResolver with broken count: 0
Starting 2 pkgProblemResolver with broken count: 0
Done
'http://ftp.fr.debian.org/debian/pool/main/n/nginx/nginx-common_1.9.1-1_all.deb' nginx-common_1.9.1-1_all.deb 96110 MD5Sum:fc64530dcd5a4d50a36b9f2423fcf6c2
'http://ftp.fr.debian.org/debian/pool/main/n/nginx/nginx-full_1.9.1-1_amd64.deb' nginx-full_1.9.1-1_amd64.deb 471998 MD5Sum:6392f45e4e376ea3be2e60949dd80fe0
'http://ftp.fr.debian.org/debian/pool/main/n/nginx/nginx_1.9.1-1_all.deb' nginx_1.9.1-1_all.deb 75882 MD5Sum:ab5fa732657fba06544b353572967383
세 번째 필드는 .deb
파일의 크기입니다.
이렇게 하면 다운로드할 패키지 목록을 결정하기 위해 as를 apt-get
실행할 필요가 없습니다!root