Команда curl — это мощный и универсальный инструмент, используемый для передачи данных на сервер или с сервера с помощью различных протоколов, таких как HTTP, HTTPS, FTP и других. Название аббревиатуры означает «Client URL» (URL-адрес клиента) и обычно используется для веб-запросов, позволяя пользователям загружать файлы, отправлять данные с помощью запросов POST и даже взаимодействовать с RESTful API непосредственно из командной строки. Команда curl может решать широкий спектр задач — от простой загрузки файлов до обработки сложных многочастных форм — и часто используется в скриптах для автоматизации благодаря своей гибкости и способности выводить подробную информацию, что делает его незаменимой утилитой в среде Linux.
В этом руководстве мы рассмотрим команду curl , которая, помимо прочего, позволяет загружать данные из Интернета. Обратите внимание, что примеры, рассматриваемые в этой статье, протестированы на Ubuntu 24.04.
Команда curl в Linux
Команда curl позволяет загружать и отправлять данные через командную строку Linux. Ниже приведён её синтаксис:
curl [options] [URL...]
А вот что говорится об этой команде на странице справочника man:
curl is a tool to transfer data from or to a server, using one of the supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP). The command is designed to work without user inter? action.
curl offers a busload of useful tricks like proxy support, user authen?
tication, FTP upload, HTTP post, SSL connections, cookies, file trans?
fer resume, Metalink, and more. As you will see below, the number of
features will make your head spin!
curl is powered by libcurl for all transfer-related features. See
libcurl(3) for details.
Ниже приведены несколько примеров в формате «вопрос-ответ», которые помогут вам лучше понять, как работает curl.
Вопрос 1. Как работает команда curl?
Основное использование довольно просто — просто передайте URL-адрес в качестве входных данных команде curl и перенаправьте вывод в файл.
Например:
curl http://releases.ubuntu.com/24.04/ubuntu-24.04-desktop-amd64.iso.torrent > test.torrent
Обратите внимание, что здесь также можно использовать опцию -o.
-o, --output Write output to instead of stdout.
Возвращаясь к нашему примеру, хотя данные были загружены в файл «test.torrent» в моей системе, в командной строке был выведен следующий результат:
![]()
Вот что говорится в справочной странице man об индикаторе прогресса, который отображается в выводе:
curl normally displays a progress meter during operations, indicating the amount of transferred data, transfer speeds and estimated time left, etc.
curl displays this data to the terminal by default, so if you invoke
curl to do an operation and it is about to write data to the terminal,
it disables the progress meter as otherwise it would mess up the output
mixing progress meter and response data.
If you want a progress meter for HTTP POST or PUT requests, you need to
redirect the response output to a file, using shell redirect (>), -o
[file] or similar.
It is not the same case for FTP upload as that operation does not spit
out any response data to the terminal.
If you prefer a progress «bar» instead of the regular meter, -# is your
friend.
Вопрос 2. Как заставить curl использовать то же имя для загружаемого файла?
Как видно из предыдущего примера, нам пришлось явно указать имя загружаемого файла. Однако можно заставить curl использовать имя загружаемого файла в качестве имени локального файла. Это можно сделать с помощью опции командной строки -O.
curl -O http://releases.ubuntu.com/18.04/ubuntu-18.04-desktop-amd64.iso.torrent
Таким образом, в данном случае в моей системе в выводе был создан файл с именем «ubuntu-18.04-desktop-amd64.iso.torrent».
Вопрос 3. Как загрузить несколько файлов с помощью curl?
Это тоже несложно — просто передайте URL-адреса следующим образом:
curl -O [URL1] -O [URL2] -O [URL3] ...
Например:
curl -O http://releases.ubuntu.com/18.04/ubuntu-18.04-desktop-amd64.iso.torrent -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso.torrent
Вот как работает приведённая выше команда:

Как видите, в выводе отобразился ход загрузки для обоих URL-адресов.
Вопрос 4. Как решить проблему с сообщением «moved»?
Иногда, когда вы передаёте URL-адрес в команду curl, появляются ошибки типа «Moved» или «Moved Permanently». Обычно это происходит, когда введенный URL-адрес перенаправляет на какой-то другой URL-адрес. Например, вы открываете веб-сайт, скажем, oneplus.com, и он перенаправляет вас на URL-адрес для вашей страны (например, oneplus.in), в результате чего вы получаете ошибку, подобную следующей:

Если вы хотите, чтобы curl следовал за перенаправлением, используйте вместо этого опцию командной строки -L.
curl -L http://www.oneplus.com
Вопрос 5. Как возобновить загрузку с момента прерывания?
Иногда загрузка прерывается на полпути. Поэтому, чтобы сэкономить время и трафик, при повторной попытке вы, возможно, захотите, чтобы она началась с того места, где произошло прерывание. Curl позволяет сделать это с помощью опции командной строки -C.
Например:
curl -C - -O http://releases.ubuntu.com/18.04/ubuntu-18.04-desktop-amd64.iso
На следующем снимке экрана показано, как команда curl возобновляет загрузку после ее прерывания.
