CentOS 7에는 wget이 기본적으로 설치가 안되어 있지만 cURL은 설치가 되어있다. yum install wget으로 설치를 해서 사용해도 되지만 급할때 cURL로 파일을 다운로드 할 수 있기 때문에 방법을 알아 두는 편이 좋다.

방법은 간단하다

-O 옵션은 서버에서 던저주는 파일명을 그대로 다운로드 한다.

반면 -o 옵션은 직접 다운로드될 파일명을 지정할 수 있다.

더 자세한 옵션은 curl홈페이지를 참조하자.

curl.se/docs/manpage.html

Curl 사용법

curl 명령의 구문은 다음과 같습니다.

curl [options] [URL...]

가장 간단한 형태로 옵션 없이 호출될 경우, Curl은 지정된 리소스를 표준 출력에 표시합니다.

예를 들어 example.com 홈페이지를 검색하려면 다음을 실행합니다.

curl example.com

이 명령은 터미널 창에 example.com 홈페이지의 소스 코드를 인쇄합니다.

프로토콜을 지정하지 않은 경우, curl은 사용할 프로토콜을 추측하려고 시도하며, 이 프로토콜은 HTTP로 기본 설정됩니다.

출력을 파일에 저장

curl 명령의 결과를 저장하려면 -o 또는 -O 옵션을 사용합니다.

 Lowercase -o는 미리 정의된 파일 이름을 사용하여 파일을 저장합니다. 아래 예에서는 vue-v2.6.10.js입니다.

curl -o vue-v2.6.10.js https://cdn.jsdelivr.net/npm/vue/dist/vue.js

대문자 -O는 파일을 원래 파일 이름으로 저장합니다.

curl -O https://cdn.jsdelivr.net/npm/vue/dist/vue.js

여러 파일을 다운로드

여러 파일을 한 번에 다운로드하려면 여러 -O 옵션과 다운로드하려는 파일의 URL을 차례로 사용합니다.

다음 예에서는 Arch Linux 및 Debian ISO 파일을 다운로드합니다.

curl -O http://mirrors.edge.kernel.org/archlinux/iso/2018.06.01/archlinux-2018.06.01-x86_64.iso  \
     -O https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.4.0-amd64-netinst.iso

다운로드를 다시 시작

-C – 옵션을 사용하여 다운로드를 재개할 수 있습니다. 이 기능은 대용량 파일을 다운로드하는 동안 연결이 끊긴 경우 유용하며 처음부터 다운로드를 시작하는 대신 이전 파일을 계속할 수 있습니다.

예를 들어 다음 명령을 사용하여 Ubuntu 18.04 ISO 파일을 다운로드하는 경우입니다.

curl -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso

그리고 갑자기 연결이 끊기면 다음을 사용하여 다운로드를 재개할 수 있습니다.

curl -C - -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso

URL의 HTTP 헤더를 가져오기

HTTP 헤더는 사용자 에이전트, 내용 유형 및 인코딩과 같은 정보를 포함하는 콜론 구분 키 값 쌍입니다. 헤더는 요청 또는 응답과 함께 클라이언트와 서버 간에 전달됩니다.

-I 옵션을 사용하여 지정된 리소스의 HTTP 헤더만 가져옵니다.

curl -I --http2 https://www.ubuntu.com/

웹 사이트가 HTTP/2를 지원하는지 테스트

특정 URL이 새 HTTP/2 프로토콜을 지원하는지 확인하려면 -I와 함께 HTTP 헤더를 –http2 옵션과 함께 가져옵니다.

curl -I --http2 -s https://linuxize.com/ | grep HTTP

-s 옵션은 curl을 무음(조용)으로 실행하고 진행률 미터와 오류 메시지를 숨깁니다.

원격 서버가 HTTP/2를 지원하는 경우, curl은 HTTP/2.0 200을 인쇄합니다.

HTTP/2 200

그렇지 않으면 응답은 HTTP/1.1 200입니다.

HTTP/1.1 200 OK

Curl버전 7.47.0 이상이 있는 경우 HTTP/2는 기본적으로 모든 HTTPS 연결에 대해 사용 가능하므로 –http2 옵션을 사용할 필요가 없습니다.

리디렉션을 따르기

기본적으로 컬은 HTTP 위치 머리글을 따르지 않습니다.

google.com의 non-ww 버전을 검색하려고 하면 페이지의 원본을 가져오는 대신 www 버전으로 리디렉션됩니다.

curl google.com

-L 옵션은 컬이 최종 대상에 도달할 때까지 모든 리디렉션을 따르도록 지시합니다.

curl -L google.com

User-에이전트를 변경

경우에 따라 파일을 다운로드할 때 방문자 장치 및 브라우저에 따라 사용자 에이전트 컬을 차단하거나 다른 내용을 반환하도록 원격 서버를 설정할 수 있습니다.

이런 경우 다른 브라우저를 에뮬레이트하려면 -A 옵션을 사용합니다.

예를 들어 Firefox 60을 에뮬레이트하는 경우 다음을 사용합니다.

curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" https://getfedora.org/

최대 전송 속도를 지정

–limit-rate 옵션을 사용하면 데이터 전송 속도를 제한할 수 있습니다.

값은 바이트, k 접미사로 킬로바이트, m 접미사로 메가바이트, g 접미사로 기가바이트로 표현할 수 있습니다.

다음 예제에서는 이동 바이너리를 다운로드하고 다운로드 속도를 1MB로 제한합니다.

curl --limit-rate 1m -O https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz

이 옵션은 컬이 사용 가능한 모든 대역폭을 소비하는 것을 방지하는 데 유용합니다.

FTP를 통해 파일을 전송

curl로 보호된 FTP 서버에 액세스하려면 -u 옵션을 사용하고 아래 그림과 같이 사용자 이름과 암호를 지정합니다.

curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/

로그인하면 사용자의 홈 디렉토리에 있는 모든 파일과 디렉터리가 나열됩니다.

다음 구문을 사용하여 FTP 서버에서 단일 파일을 다운로드할 수 있습니다.

curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/file.tar.gz

파일을 FTP 서버에 업로드하려면 업로드할 파일 이름 뒤에 -T를 사용합니다.

curl -T newfile.tar.gz -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/

쿠키를 보내기

원격 리소스에 액세스하거나 문제를 디버깅하기 위해 특정 쿠키를 사용하여 HTTP 요청을 해야 하는 경우도 있습니다.

기본적으로 Curl이 있는 리소스를 요청할 때 쿠키는 전송되거나 저장되지 않습니다.

서버로 쿠키를 보내려면 -b 스위치 다음에 쿠키 또는 문자열이 들어 있는 파일 이름을 사용합니다.

예를 들어 Oracle Java JDK rpm 파일 jdk-10.0.2_192-x64_bin.rpm을 다운로드합니다. 값을 가진 oraclelicense라는 쿠키를 전달해야 합니다.

curl -L -b "oraclelicense=a" -O http://download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.rpm

프록시를 사용

curl은 HTTP, HTTPS 및 SOCKS를 비롯한 다양한 유형의 프록시를 지원합니다. 프록시 서버를 통해 데이터를 전송하려면 -x(–proxy) 옵션을 선택한 다음 프록시 URL을 사용합니다.

다음 명령은 192.168.44.1 포트 8888에서 프록시를 사용하여 지정된 리소스를 다운로드합니다.

curl -x 192.168.44.1:8888 http://linux.com/

프록시 서버에 인증이 필요한 경우 -U(–proxy-user) 옵션을 사용하고 사용자 이름과 암호를 콜론(user:password)으로 구분합니다.

curl -U username:password -x 192.168.44.1:8888 http://linux.com/

결론

curl은 원격 호스트에서 또는 원격 호스트로 데이터를 전송할 수 있는 명령줄 도구입니다. 이 기능은 문제 해결, 파일 다운로드 등에 유용합니다.

이 튜토리얼에 표시된 예는 간단하지만 가장 많이 사용되는 컬 옵션을 보여 주며 컬 명령의 작동 방식을 이해하는 데 도움이 됩니다.