cURL을 사용하여 명령줄 데이터 전송 및 그 이상의 방법

Curl Command Guide Featured

터미널 중심의 설치 지침을 따르신다면, 아마도 curl 명령어를 어느 시점에 접해보셨을 것입니다. cURL은 URL을 통해 데이터를 전송하는 명령줄 도구입니다. 가장 간단한 사용법 중 하나는 명령줄을 통해 파일을 다운로드하는 것입니다. 그러나 이것은 오해의 소지가 있으며, cURL은 훨씬 더 강력한 기능을 가진 도구입니다.

목차

  • cURL이란?
  • 설치
  • cURL 사용하기
  • 리다이렉트 따르기
  • 다운로드 재개
  • 여러 파일 다운로드
  • 인증으로 다운로드
  • 파일 분할 및 병합
  • 기타 유용한 기능
  • cURL과 Wget
  • 자주 묻는 질문
  • 마무리

또한 읽어보기: 리눅스 터미널에서 텍스트, 파일 및 폴더 복사 및 붙여넣기 방법

cURL이란?

1996년 다니엘 스턴버그에 의해 웹 서버에서 금융 데이터를 가져오고 IRC 채널로 방송하기 위해 작성된 cURL은 브라우저를 사용하지 않고 데이터에 접근하기 위한 강력한 도구로 발전했습니다. 터미널을 항상 사용하는 경우, 이는 귀하의 도구 중 중요한 도구 중 하나가 될 것입니다.

대부분의 리눅스 배포판에서 cURL은 시스템에 사전 설치되어 있으며, 바로 사용할 수 있습니다. 설치되어 있지 않더라도 대부분의 저장소에서 찾을 수 있어 소프트웨어 센터를 사용해 쉽게 설치할 수 있습니다.

Windows에는 “curl과 유사한” 명령이 없고, macOS는 cURL이 사전 설치되어 있지만 리눅스 버전만큼 많은 플래그를 제공하지 않습니다.

또한 읽어보기: 리눅스에서 dd 명령을 사용하는 방법

설치

더 진행하기 전에, cURL이 시스템에 설치되어 있는지 확인해야 합니다.

리눅스

Debian/Ubuntu 기반 배포판에서는 다음 명령어를 사용하여 cURL을 설치합니다:

sudo apt install curl  

Arch 기반 배포판에서는:

sudo pacman -S curl  

Fedora/CentOS/RHEL에서는:

sudo dnf install curl  

macOS

macOS에서는 이미 사전 설치되어 있으므로 아무 것도 할 필요가 없습니다.

또한 읽어보기: Mac에서 현재 폴더 위치에서 터미널 열기 방법

Windows

  1. Windows 7/10/11의 경우, cURL 다운로드 페이지로 가서 사용하는 아키텍처에 따라 64비트 또는 32비트 패키지를 선택합니다. 아키텍처를 모를 경우, 2006년 이후에 제조된 하드웨어의 대부분은 64비트이므로 안전한 선택입니다.
  2. 시스템 드라이브나 “C:\Program Files\”에 “cURL”이라는 이름의 폴더를 생성합니다.

Linuxcurl Newfolder

  1. 다운로드한 zip 파일로 돌아가서 열고 “bin” 폴더 내의 “curl.exe”를 찾습니다. 이를 cURL 폴더로 복사합니다. 복사한 EXE는 완전히 독립적이며 리눅스에서 실행할 수 있는 모든 변형을 실행할 수 있습니다.
  2. 이 명령을 실제로 유용하게 만들기 위해, Windows에서 명령 프롬프트에서 언제든지 실행할 수 있도록 PATH 변수에 추가해야 합니다.
  • 시작 메뉴를 클릭하고 environment를 입력한 후 Enter를 누릅니다.
  • “환경 변수 …”를 클릭합니다. 이제 환경 변수 설정에 들어갔습니다.

Linuxcurl Environmentvariables

  • “Path” 환경 변수를 선택한 후 “편집 …”을 클릭합니다.

  • 경로 편집 대화 상자에서 “새로 만들기”를 클릭하고 “curl.exe”가 있는 디렉토리를 입력합니다. 예를 들어, “C:\Program Files\cURL”입니다.

  • 이 과정을 통해 연 대화 상자의 “확인”을 클릭하고 터미널에서 cURL을 즐겨보세요!

리눅스에서 사용 가능한 모든 cURL 플래그는 Windows 버전에서도 작동해야 합니다.

조언: 명령 프롬프트를 Windows 터미널과 혼동해서는 안 됩니다. Windows 터미널은 PowerShell에 포함된 cURL의 자체 버전을 제공하여 유사한 기능을 수행하지만, 완전히 다르게 작동합니다.

또한 읽어보기: 리눅스에서 Rm 명령 사용하기

cURL 사용하기

시작하려면 터미널에 curl maketecheasier.com을 입력하고 Enter를 누르세요.

출력을 얻지 못했다면, 이는 이 사이트의 서버가 비-www 도메인에 대한 무작위 연결 요청에 응답하도록 구성되어 있지 않기 때문입니다. 존재하지 않거나 온라인 상태가 아닌 서버에 요청을 보낸 경우, cURL이 호스트를 해결할 수 없다는 오류 메시지를 받을 수 있습니다.

cURL이 실제로 유용한 작업을 수행하도록 하려면 프로토콜을 지정해야 합니다. 예제에서는 HTTPS 프로토콜을 사용하여 이 사이트의 홈페이지를 쿼리합니다. 다음을 입력하세요: curl https://www.maketecheasier.com

Linuxcurl Files

모든 것이 잘된다면, 방대한 데이터의 벽을 바라보고 있어야 합니다. 이 데이터를 조금 더 유용하게 만들기 위해, cURL이 HTML 파일에 저장하도록 지시할 수 있습니다:

curl https://www.maketecheasier.com > ~/Downloads/mte.html  

이 명령은 사이트의 출력을 다운로드 폴더에 HTML 파일로 저장합니다. 좋아하는 파일 관리자를 사용해 폴더로 이동하고 방금 만든 파일을 두 번 클릭합니다. 이 파일은 이 사이트의 홈페이지 출력의 스냅샷을 열 수 있어야 합니다.

비슷하게, -o 플래그를 사용하여 같은 결과를 얻을 수 있습니다:

curl -o ~/Downloads/mte.html https://www.maketecheasier.com  

리다이렉트 따르기

대부분의 사이트는 트래픽을 “http”에서 “https” 프로토콜로 자동으로 리다이렉트합니다. cURL에서 -L 플래그를 사용하여 동일한 작업을 수행할 수 있습니다. 이는 301 리다이렉트를 읽을 수 있는 페이지나 파일에 도달할 때까지 자동으로 따릅니다.

 curl -L http://google.com.  

Linuxcurl Redirect

다운로드 재개

대용량 파일을 다운로드할 때, 인터넷 속도에 따라 중단되는 경우 매우 성가실 수 있습니다. 다행히도 cURL에는 재개 기능이 있습니다. -C 플래그를 전달하면 이러한 문제를 신속하게 해결할 수 있습니다.

실제 예를 들어, 저는 중간에 Ctrl과 C를 눌러 데비안의 테스트 버전 ISO 다운로드를 일부러 중단했습니다.

Linuxcurl Interrupted

다음 명령에서는 -C 플래그를 추가합니다. 예를 들어,

curl -C - -o ~/Downloads/debiantesting.iso -L https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-dvd/debian-testing-amd64-DVD-1.iso  

Linuxcurl Resume

다운로드가 중단된 지점에서 성공적으로 시작되었습니다.

여러 파일 다운로드

cURL은 여러 파일을 다운로드하는 가장 직관적인 방법이 없기 때문에, 각 방법은 서로의 타협이 있습니다.

다운로드하려는 파일이 열거된 경우(예: file1, file2 등), 대괄호를 사용하여 모든 파일 범위를 가져오고 -o 플래그 내에서 지정한 출력으로 “#”를 사용할 수 있습니다. 혼란을 줄이기 위해 예를 들어 보겠습니다:

curl "http://example.com/file[1-5].zip"-o"#1_#2"  

이것은 -O ( --remote-name)를 사용하여 보다 간단하게 수행할 수 있습니다. 이 플래그는 cURL이 원격 파일을 같은 이름의 로컬 파일로 다운로드하도록 만듭니다. 출력 파일을 지정할 필요가 없기 때문에, 파일을 다운로드할 디렉토리에서 터미널을 열 때 이 명령을 사용해야 합니다.

curl -O"https://example.com/file1.zip"-O"https://example.com/file2.zip"  

다운로드해야 할 열거된 파일의 양이 많은 경우, --remote-name-all 플래그가 더 나은 선택입니다:

curl --remote-name-all"https://example.com/file[1-5].zip"  

심지어 대괄호를 사용하여 URL을 다시 입력하지 않고 동일한 사이트에서 비열거된 파일을 지정할 수도 있습니다:

curl --remote-name-all"https://example.com/{file1.zip,anotherfile.zip,thisisfun.zip}"  

인증으로 다운로드

인증이 필요한 파일(예: 비공식 FTP 서버에서 가져오는 경우)을 다운로드하려면 -u 플래그를 사용합니다. 모든 인증 요청은 사용자 이름을 먼저, 비밀번호를 두 번째로 입력하고 두 가지 사이에 콜론을 넣어야 합니다. 간단한 예를 들어 보겠습니다:

curl -u username:password -o ~/Downloads/file.zip ftp://example.com/file.zip  

이렇게 하면 사용자 bonobo_bob이 FTP 서버에 인증되고 파일이 다운로드 폴더로 다운로드됩니다.

파일 분할 및 병합

어떤 이유로 대용량 파일을 다운로드하고 이를 청크로 분할하고 싶다면, cURL의 --range 플래그를 사용하면 됩니다. --range를 사용하면 시작할 바이트와 끝낼 바이트를 지정해야 합니다. 범위의 끝을 지정하지 않으면 파일의 나머지를 다운로드합니다.

아래 명령에서 cURL은 Arch Linux의 설치 이미지 첫 100MB를 다운로드합니다:

curl --range0-99999999-o arch.part1 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso  

다음 100MB를 위해서는 --range 100000000-199999999 등을 사용하세요. 이러한 명령을 && 연산자를 사용하여 연결할 수 있습니다:

curl --range0-99999999-o arch.part1 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \  
curl --range100000000-199999999-o arch.part2 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \  
curl --range200000000-299999999-o arch.part3 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \  
curl --range300000000-399999999-o arch.part4 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \  
curl --range400000000-499999999-o arch.part5 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \  
curl --range500000000-599999999-o arch.part6 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \  
curl --range600000000-699999999-o arch.part7 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \  
curl --range700000000- -o arch.part8 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso  

위의 명령 구조를 정확하게 따랐다면, 여덟 개의 파일이 cURL이 다운로드할 것을 요청한 곳에 나타날 것입니다.

이 파일들을 다시 결합하려면, 리눅스나 macOS에서는 cat 명령을 사용해야 합니다:

cat arch.part? > arch.iso  

Windows에서는 다음과 같이 copy 명령을 사용해야 합니다:

copy/b arch.part* arch.iso  

기타 유용한 기능

cURL에는 많은 플래그와 사용법이 있습니다:

  • -# – 진행률 표시줄을 사용하여 가져오고 있는 진행 상황을 나타냅니다. 예: curl -# https://asite.com/somefile.zip > ~/somefile.zip.
  • -a – 파일을 덮어쓰지 않고 추가하도록 cURL에 요청합니다. 예: curl -ao ~/collab-full.x https://example-url.com/collab-part26.x.
  • --head – 출력 데이터 없이 서버의 응답 헤더만 가져옵니다. 이는 웹사이트를 디버깅 중이거나 서버의 응답을 확인할 때 유용합니다. 예: curl --head https://example-url.com.
  • --limit-rate – 제한된 대역폭으로 다운로드를 주문합니다. 이는 cURL이 시스템에서 사용 가능한 모든 대역폭을 차지하지 않도록 하고자 할 때 유용합니다. 간단한 숫자는 초당 바이트로 해석됩니다. K는 초당 킬로바이트, M은 초당 메가바이트를 의미합니다. 예: curl --limit-rate 8M https://example-url.com/file.zip > ~/file.zip.
  • -o – 앞서 언급한 대로 cURL이 사용할 출력 파일을 결정합니다. 예: curl -o ~/Downloads/file.zip https://thefileplace.com/file.zip -o file2.zip https://thefileplace.com/file2.zip.
  • --proxy – 프록시로 작업하려면 이렇게 사용합니다. 예: curl --proxy proxyurl:port https://example-url.com/file.zip > ~file.zip.

cURL과 Wget

1996년에 같은 해에 출시된 cURL과 Wget은 일반 관찰자에게는 사실상 자매 프로그램입니다. 그러나 조금 더 깊이 들어가면 이 두 자매는 서로 다른 목적을 가지고 있다는 것을 알 수 있습니다.

Wget

  • 인터넷에서 데이터를 가져오도록 완전히 설계되었습니다.
  • cURL과 같은 -L 또는 -o 플래그가 필요하지 않습니다; 단순히 wget [url]를 입력하면 됩니다!
  • -r 플래그를 사용하여 디렉토리의 모든 것을 다운로드할 수 있습니다.
  • 일상적인 사용에 필요한 모든 기능을 갖추고 있으며, 매일의 시스템 관리 업무를 지원합니다.
  • (리눅스에서) 많은 종속성 없이, 모든 것이 상자에서 바로 사용 가능합니다.

또한 읽어보기: Mac에서 wget 설치 및 사용하는 법

cURL

  • 원격 검색을 위한 플래그 및 유용한 기능의 방대한 레퍼토리.
  • 로컬 네트워킹 (LDAP) 및 네트워크 프린터 (Samba)를 지원합니다.
  • gzip 압축 라이브러리와 잘 작동합니다.
  • 개발자가 cURL의 기능을 포함하는 소프트웨어나 배시 스크립트를 작성할 수 있도록 하는 libcurl에 의존합니다.

간단히 말해, Wget은 인터넷에서 자료를 가져오기 위한 “모두를 위한 도구함”이라면, cURL은 파워 유저와 시스템 관리자를 위해 더 세분화된 제어를 확장합니다.

자주 묻는 질문

1. 리눅스에서 인증서 오류가 발생했습니다. 어떻게 고치나요?

“피어의 인증서 발급자가 신뢰할 수 없는 것으로 표시되었습니다”와 같은 오류가 발생하면, 가장 쉬운 해결책은 배포판의 일반 인증서 패키지를 재설치하는 것입니다.

Debian/Ubuntu 기반 시스템의 경우:

sudo apt reinstall ca-certificates  

Fedora/CentOS/RHEL의 경우:

dnf reinstall ca-certificates  

Arch 기반 시스템의 경우:

pacman -S ca-certificates  

Arch에서는 재설치 전에 pacman -Scc를 사용하여 패키지 캐시를 지우는 것이 좋습니다.

여전히 오류가 발생하는 경우, 서버 쪽에 문제가 있을 수 있습니다.

2. cURL과 bash 명령을 함께 사용하는 것이 안전한가요?

리눅스 애플리케이션을 설치하는 가장 일반적인 방법은 아니지만, (NodeJS 뒤에 있는 사람들처럼) curl을 사용하도록 하는 개발자들이 상당수 있으며, 루트 권한 명령을 통해 실행됩니다 (예: curl [argument] | sudo -E bash -) 소프트웨어를 설치합니다.

조금 위험해 보일 수 있지만, 애플리케이션 뒤에 있는 사람들이 신뢰할 수 있다면, 뭔가가 깨질 가능성은 매우 낮습니다. 악의적인 행위자들은 어디에나 있으며 Arch의 AUR과 같은 리포지토리에 침투할 수 있으니, 루트 접근 명령과 함께 curl을 사용하여 설치하는 것이 일반적으로 패키지 관리자를 통해 하는 것보다 더 위험하지는 않습니다.

3. Tor와 함께 cURL을 사용할 수 있나요?

네! Tor 브라우저(또는 독립형 Tor 서비스)를 시작하고 --proxy 플래그를 사용하세요. Tor는 다른 애플리케이션에서 IP를 숨길 수 있는 로컬 프록시를 제공합니다. cURL을 Tor와 함께 사용하는 예는 다음과 같습니다:

curl --proxy localhost:9050 http://example.com  

독립형 Tor 서비스는 9050을 수신 포트로 사용하고, Tor 브라우저는 9150 포트를 사용합니다.

마무리

cURL은 리눅스 세계의 변화 속에서도 회복력을 입증하며, 터미널 사용자의 도구에서 중요한 도구로 자리 잡고 있습니다.

명령줄에 익숙하지 않다면, 가장 유용한 리눅스 명령을 살펴보세요. 데이터를 다운로드하는 대신 웹을 검색하고 싶다면, 터미널에서도 탐색할 수 있습니다.