curl을 사용하여 Linux 명령줄에서 파일을 다운로드하는 방법

Linux curl 명령은 파일을 다운로드하는 것보다 훨씬 더 많은 작업을 수행할 수 있습니다. curl이 무엇을 할 수 있는지, 언제 wget 대신 사용해야 하는지 알아보십시오.

curl 대 wget : 차이점은 무엇입니까?

사람들은 종종 wget 및 curl 명령의 상대적인 강점을 식별하는 데 어려움을 겪습니다. 명령에는 기능이 겹치는 부분이 있습니다. 그들은 각각 원격 위치에서 파일을 검색할 수 있지만 그것이 유사성이 끝나는 곳입니다.

wget은 콘텐츠 및 파일 다운로드를 위한 환상적인 도구. 파일, 웹 페이지 및 디렉토리를 다운로드할 수 있습니다. 여기에는 웹 페이지의 링크를 탐색하고 전체 웹 사이트에서 콘텐츠를 재귀적으로 다운로드하는 지능형 루틴이 포함되어 있습니다. 명령줄 다운로드 관리자로서 타의 추종을 불허합니다.

컬 만족 전혀 다른 필요. 예, 파일을 검색할 수 있지만 검색할 콘텐츠를 찾는 웹사이트를 재귀적으로 탐색할 수는 없습니다. curl이 실제로 하는 일은 원격 시스템에 요청을 하고 응답을 검색하고 표시하여 원격 시스템과 상호 작용할 수 있도록 하는 것입니다. 이러한 응답은 웹 페이지 콘텐츠 및 파일일 수 있지만 curl 요청에서 묻는 “질문”의 결과로 웹 서비스 또는 API를 통해 제공되는 데이터를 포함할 수도 있습니다.

그리고 curl은 웹사이트에만 국한되지 않습니다. curl은 HTTP, HTTPS, SCP, SFTP 및 FTP를 포함한 20개 이상의 프로토콜을 지원합니다. 그리고 틀림없이, Linux 파이프의 뛰어난 처리로 인해 curl은 다른 명령 및 스크립트와 더 쉽게 통합될 수 있습니다.

curl의 저자는 다음과 같은 웹페이지를 가지고 있습니다. 그가 보는 차이점을 설명합니다 curl과 wget 사이.

컬 설치

이 기사를 연구하는 데 사용된 컴퓨터 중 Fedora 31과 Manjaro 18.1.0에는 이미 curl이 설치되어 있었습니다. curl은 Ubuntu 18.04 LTS에 설치해야 했습니다. Ubuntu에서 다음 명령을 실행하여 설치합니다.

sudo apt-get install curl

컬 버전

–version 옵션은 curl이 해당 버전을 보고하도록 합니다. 또한 지원하는 모든 프로토콜을 나열합니다.

curl --version

웹 페이지 검색

웹 페이지에서 curl을 가리키면 우리를 위해 검색합니다.

curl https://www.bbc.com

그러나 기본 동작은 터미널 창에 소스 코드로 덤프하는 것입니다.

  Teleconsole과 온라인으로 Linux 터미널을 공유하는 방법

주의: curl에 파일로 저장하고 싶다고 말하지 않으면 항상 터미널 창에 덤프합니다. 검색하는 파일이 이진 파일인 경우 결과를 예측할 수 없습니다. 셸은 이진 파일의 일부 바이트 값을 제어 문자 또는 이스케이프 시퀀스로 해석하려고 할 수 있습니다.

파일에 데이터 저장

출력을 파일로 리디렉션하도록 curl에 지시해 보겠습니다.

curl https://www.bbc.com  > bbc.html

curl https://www.bbc.com > bbc.html 터미널 창에서” width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>이번에는 검색된 정보가 표시되지 않고 파일로 바로 전송됩니다.  표시할 터미널 창 출력이 없기 때문에 curl은 일련의 진행 정보를 출력합니다.</p>
<p>진행 정보가 웹 페이지 소스 코드 전체에 흩어져 있기 때문에 이전 예제에서는 이 작업을 수행하지 않았습니다. so curl은 자동으로 이를 억제했습니다.</p>
<p>이 예에서 curl은 출력이 파일로 리디렉션되고 있으며 진행 정보를 생성하는 것이 안전하다는 것을 감지합니다.</p>
<p><img loading=

제공된 정보는 다음과 같습니다.

% 총계: 검색할 총 금액입니다.
% 수신: 지금까지 검색된 데이터의 백분율 및 실제 값입니다.
% Xferd: 데이터가 업로드되는 경우 전송된 백분율 및 실제.
평균 다운로드 속도: 평균 다운로드 속도입니다.
평균 업로드 속도: 평균 업로드 속도입니다.
총 시간: 예상 총 전송 기간입니다.
소요 시간: 이 전송에 대해 지금까지 경과된 시간입니다.
남은 시간: 전송이 완료될 때까지 남은 예상 시간
현재 속도: 이 전송의 현재 전송 속도입니다.

curl에서 파일로 출력을 리디렉션했기 때문에 이제 “bbc.html”이라는 파일이 있습니다.

해당 파일을 두 번 클릭하면 검색된 웹 페이지가 표시되도록 기본 브라우저가 열립니다.

브라우저 주소 표시줄의 주소는 원격 웹사이트가 아니라 이 컴퓨터의 로컬 파일입니다.

파일을 생성하기 위해 출력을 리디렉션할 필요가 없습니다. -o(출력) 옵션을 사용하고 curl에 파일을 생성하도록 지시하여 파일을 생성할 수 있습니다. 여기에서 -o 옵션을 사용하고 “bbc.html”을 생성하려는 파일의 이름을 제공합니다.

curl -o bbc.html https://www.bbc.com

진행률 표시줄을 사용하여 다운로드 모니터링

텍스트 기반 다운로드 정보를 간단한 진행률 표시줄로 바꾸려면 -#(진행률 표시줄) 옵션을 사용합니다.

curl -x -o bbc.html https://www.bbc.com

중단된 다운로드 다시 시작

종료되거나 중단된 다운로드를 다시 시작하는 것은 쉽습니다. 크기가 큰 파일의 다운로드를 시작하겠습니다. Ubuntu 18.04의 최신 장기 지원 빌드를 사용합니다. –output 옵션을 사용하여 저장하려는 파일의 이름을 지정합니다: “ubuntu180403.iso”.

curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

다운로드가 시작되고 완료될 때까지 진행됩니다.

  데비안에 Kali Linux 앱을 설치하는 방법

Ctrl+C 를 사용하여 다운로드를 강제로 중단하면 명령 프롬프트로 돌아가서 다운로드가 중단됩니다.

다운로드를 다시 시작하려면 -C(계속) 옵션을 사용합니다. 이로 인해 대상 파일 내의 지정된 지점 또는 오프셋에서 curl이 다운로드를 다시 시작합니다. 하이픈을 사용하는 경우 – 오프셋으로 curl은 파일의 이미 다운로드된 부분을 보고 자체적으로 사용할 올바른 오프셋을 결정합니다.

curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

다운로드가 다시 시작됩니다. curl은 다시 시작되는 오프셋을 보고합니다.

HTTP 헤더 검색

-I(head) 옵션을 사용하면 HTTP 헤더만 검색할 수 있습니다. 보내는 것과 같다. HTTP HEAD 명령 웹 서버에.

curl -I www.twitter.com

이 명령은 정보만 검색합니다. 웹 페이지나 파일을 다운로드하지 않습니다.

여러 URL 다운로드

xargs를 사용하여 여러 개를 다운로드할 수 있습니다. URL 한 번에. 아마도 우리는 단일 기사나 튜토리얼을 구성하는 일련의 웹 페이지를 다운로드하고 싶을 것입니다.

이 URL을 편집기에 복사하고 “urls-to-download.txt”라는 파일에 저장합니다. xargs를 사용하여 각 줄의 내용을 처리 차례로 curl에 공급할 매개변수로 텍스트 파일을 지정합니다.

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#0
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#1
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#2
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#3
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#4
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#5

이것은 xargs가 이러한 URL을 전달하여 한 번에 하나씩 말리도록 하는 데 사용해야 하는 명령입니다.

xargs -n 1 curl -O 

Note that this command uses the -O (remote file) output command, which uses an uppercase “O.” This option causes curl to save the retrieved  file with the same name that the file has on the remote server.

The -n 1 option tells xargs to treat each line of the text file as a single parameter.

When you run the command, you’ll see multiple downloads start and finish, one after the other.

Checking in the file browser shows the multiple files have been downloaded. Each one bears the name it had on the remote server.

Downloading Files From an FTP Server

Using curl with a File Transfer Protocol (FTP) server is easy, even if you have to authenticate with a username and password. To pass a username and password with curl use the -u (user) option, and type the username, a colon “:”, and the password. Don’t put a space before or after the colon.

This is a free-for-testing FTP server hosted by Rebex. The test FTP site has a pre-set username of “demo”, and the password is “password.” Don’t use this type of weak username and password on a production or “real” FTP server.

curl -u demo:password ftp://test.rebex.net

curl은 FTP 서버를 가리키고 있음을 파악하고 서버에 있는 파일 목록을 반환합니다.

이 서버의 유일한 파일은 길이가 403바이트인 "readme.txt" 파일입니다. 회수합시다. 파일 이름이 추가된 상태에서 잠시 전과 동일한 명령을 사용합니다.

curl -u demo:password ftp://test.rebex.net/readme.txt

파일이 검색되고 curl이 터미널 창에 해당 내용을 표시합니다.

거의 모든 경우에 검색된 파일을 터미널 창에 표시하는 것보다 디스크에 저장하는 것이 더 편리할 것입니다. 다시 한 번 -O(원격 파일) 출력 명령을 사용하여 원격 서버에 있는 것과 동일한 파일 이름으로 파일을 디스크에 저장할 수 있습니다.

curl -O -u demo:password ftp://test.rebex.net/readme.txt

파일이 검색되어 디스크에 저장됩니다. ls를 사용하여 파일 세부 정보를 확인할 수 있습니다. FTP 서버에 있는 파일과 이름이 같으며 길이는 403바이트입니다.

ls -hl readme.txt

원격 서버에 매개변수 보내기

일부 원격 서버는 전송된 요청의 매개변수를 수락합니다. 예를 들어 매개변수는 반환된 데이터의 형식을 지정하는 데 사용되거나 사용자가 검색하려는 정확한 데이터를 선택하는 데 사용할 수 있습니다. 종종 웹과 상호 작용하는 것이 가능합니다. 애플리케이션 프로그래밍 인터페이스 (API) 컬을 사용합니다.

간단한 예로, 아이피파이 웹 사이트에는 외부 IP 주소를 확인하기 위해 쿼리할 수 있는 API가 있습니다.

curl https://api.ipify.org

"json" 값을 사용하여 명령에 형식 매개변수를 추가하면 외부 IP 주소를 다시 요청할 수 있지만 이번에는 반환된 데이터가 다음 형식으로 인코딩됩니다. JSON 형식.

curl https://api.ipify.org?format=json

다음은 Google API를 사용하는 또 다른 예입니다. 책을 설명하는 JSON 객체를 반환합니다. 제공해야 하는 매개변수는 국제 표준 도서 번호 (ISBN) 책의 번호입니다. 대부분의 책 뒤표지, 일반적으로 바코드 아래에서 찾을 수 있습니다. 여기서 사용할 매개변수는 "0131103628"입니다.

curl https://www.googleapis.com/books/v1/volumes?q=isbn:0131103628

반환된 데이터는 포괄적입니다.

때로는 컬, 때로는 wget

웹 사이트에서 콘텐츠를 다운로드하고 웹 사이트의 트리 구조에서 해당 콘텐츠를 재귀적으로 검색하도록 하려면 wget을 사용합니다.

원격 서버 또는 API와 상호 작용하고 일부 파일이나 웹 페이지를 다운로드하려면 curl을 사용합니다. 특히 프로토콜이 wget에서 지원하지 않는 많은 프로토콜 중 하나인 경우.