Как через bash скачать файл
Перейти к содержимому

Как через bash скачать файл

  • автор:

Загрузка файла в Linux с помощью командной строки

Командная строка Linux обеспечивает большую гибкость и контроль, чем графический интерфейс. Многие люди предпочитают использовать командную строку вместо графического интерфейса, потому что она проще и быстрее в использовании, чем графический интерфейс. Используя командную строку, легче автоматизировать задачи с помощью одной строки. Кроме того, она использует меньше ресурсов, чем графический интерфейс.

Загрузка файлов — это рутинная задача, которая обычно выполняется каждый день и может включать такие типы файлов, как ZIP, TAR, ISO, PNG и т.д. Вы можете просто и быстро выполнить эту задачу с помощью терминала командной строки. Для этого нужно использовать только клавиатуру. Поэтому сегодня я покажу вам, как можно загрузить файл с помощью командной строки в Linux. Обычно существует два известных способа сделать это — использование утилиты wget и curl. В этой статье я использую Ubuntu для описания процедуры. Но эти же команды будут работать и в других дистрибутивах Linux, таких как Debian, Gentoo и CentOS.

linux

Загрузка файлов с помощью Curl

Curl можно использовать для передачи данных по ряду протоколов. Он поддерживает множество протоколов, включая HTTP, HTTPS, FTP, TFTP, TELNET, SCP и т.д. Используя Curl, вы можете загружать любые удаленные файлы. Он также поддерживает функции паузы и возобновления.

Чтобы приступить к работе, сначала необходимо установить curl.

Установите curl

Запустите приложение командной строки в Ubuntu — Terminal, нажав комбинацию клавиш Ctrl+Alt+T. Затем введите следующую команду для установки curl.

Для CentOS

После завершения установки введите приведенную ниже команду для загрузки файла.

Загрузка и сохранение файла с использованием имени исходного файла

Чтобы сохранить файл с тем же именем, что и исходный файл на удаленном сервере, используйте -O (верхний регистр O), а затем команду curl, как показано ниже:

Вместо -O можно также указать «—remote-name». Оба варианта работают одинаково.

Загрузка и сохранение файла с другим именем

Если вы хотите загрузить файл и сохранить его под именем, отличным от имени файла на удаленном сервере, используйте -o (строчная буква o), как показано ниже. Это полезно, когда удаленный URL не содержит имени файла в URL, как показано в примере ниже.Advertisement

[filename] — это новое имя выходного файла.

Загрузка нескольких файлов

Чтобы загрузить несколько файлов, введите команду в следующем синтаксисе:

Загрузка файлов с FTP-сервера

Чтобы загрузить файл с FTP-сервера, введите команду в следующем синтаксисе:

Чтобы загрузить файлы с FTP-серверов, аутентифицированных пользователями, используйте следующий синтаксис:

Приостановка и возобновление загрузки

Во время загрузки файла вы можете вручную приостановить ее с помощью Ctrl+C, а иногда она автоматически прерывается и останавливается по какой-либо причине, тогда вы можете возобновить ее. Перейдите в тот же каталог, где вы ранее загружали файл, затем введите команду в следующем синтаксисе:

Скачивание файлов с помощью Wget

Используя wget, вы можете скачивать файлы и содержимое с Web- и FTP-серверов. Wget — это комбинация www и get. Он поддерживает такие протоколы, как FTP, SFTP, HTTP и HTTPS. Также он поддерживает функцию рекурсивной загрузки. Эта функция очень полезна, если вы хотите загрузить весь сайт для просмотра в автономном режиме или для создания резервной копии статического сайта. Кроме того, вы можете использовать ее для получения содержимого и файлов с различных веб-серверов.

Установите wget

Запустите приложение командной строки в Ubuntu — терминал, нажав комбинацию клавиш Ctrl+Alt+T. Затем введите следующую команду для установки wget.

для CentOS

Загрузка файла или веб-страницы с помощью wget

Чтобы загрузить файл или веб-страницу, откройте Терминал и введите команду в следующем синтаксисе:

Чтобы сохранить одну веб-страницу или файл, введите команду в следующем синтаксисе:

Загрузка файлов с другим именем

Если вы хотите загрузить и сохранить файл с именем, отличным от имени исходного удаленного файла, используйте -O (верхний регистр O), как показано ниже. Это полезно, особенно когда вы загружаете веб-страницу, которая автоматически сохраняется с именем «index.html».

Чтобы загрузить файл с другим именем, введите команду в следующем синтаксисе:

Загрузка файлов с FTP

Чтобы загрузить файл с FTP-сервера, введите команду в следующем синтаксисе:

Чтобы загрузить файлы с FTP-серверов, аутентифицированных пользователями, используйте следующий синтаксис:

Рекурсивная загрузка файлов

Вы можете использовать функцию рекурсивной загрузки, чтобы загрузить все файлы из указанного каталога, будь то веб-сайт или FTP-сайт. Чтобы воспользоваться функцией рекурсивной загрузки, введите команду в следующем синтаксисе:

Загрузка нескольких файлов

Вы можете использовать команду wget для загрузки нескольких файлов. Создайте текстовый файл со списком URL-адресов файлов, а затем используйте команду wget в следующем синтаксисе для загрузки этого списка.

Например, у меня есть текстовый файл с именем «downloads.txt», в котором находится список из двух URL, которые я хочу загрузить с помощью wget. Вы можете увидеть содержимое моего текстового файла на рисунке ниже:

Приостановка и возобновление загрузки

Вы можете нажать Ctrl + C, чтобы приостановить загрузку. Чтобы возобновить приостановленную загрузку, перейдите в тот же каталог, откуда вы ранее скачивали файл, и используйте опцию -c после wget, как показано ниже:

Используя приведенную выше команду, вы заметите, что ваша загрузка возобновилась с того места, где она была приостановлена.

Итак, в этой статье мы рассмотрели основные способы использования двух командных строк, с помощью которых можно загрузить файл. Обратите внимание, что если вы не укажете каталог при загрузке файла, файлы будут загружены в текущий каталог, в котором вы работаете.

Sorry, you have been blocked

This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.

What can I do to resolve this?

You can email the site owner to let them know you were blocked. Please include what you were doing when this page came up and the Cloudflare Ray ID found at the bottom of this page.

Cloudflare Ray ID: 7a2793096a8d22fb • Your IP: Click to reveal 88.135.219.175 • Performance & security by Cloudflare

Как скачать файл Linux

Загрузка файлов — это довольно простая операция, которую мы можем выполнять множество раз в день, даже не задумываясь в графическом интерфейсе с помощью браузера. Это очень просто и быстро, достаточно кликнуть мышкой. Но дело в том, что у вас может не всегда быть доступ к графическому интерфейсу, а на серверах графического интерфейса нету вовсе.

Что же делать, когда нужно скачать файл Linux через терминал? Для этого существует несколько утилит и даже консольных браузеров. В этой статье мы рассмотрим самые популярные способы загрузки файла в Linux, которые применяются наиболее часто. Рассмотрим примеры применения таких утилит и их возможности.

Как скачать файл в Linux с помощью wget

Утилита wget — это одна из самых популярных консольных утилит для загрузки файлов. Мы уже рассматривали как пользоваться этой утилитой в отдельной статье. С помощью wget можно сделать намного больше чем просто загрузить файл linux. Вы можете скачать все файлы со страницы или же полностью загрузить весь веб-сайт. Но сейчас нас будет интересовать только самая простая ситуация.

Чтобы скачать файл Linux консоль выполните такую команду:

$ wget адрес_файла

Например, если нам нужно скачать исходники какой-либо программы для сборки и установки с GitHub. Если нет браузера, но есть ссылка на архив с исходниками, то скачать их очень просто:

Во время загрузки утилита отображает простенький статус бар, в котором вы можете наблюдать за процессом загрузки. Загруженный файл будет находиться в текущей папке, по умолчанию, это ваша домашняя папка, если вы ее не изменяли. Дальше можно выполнять все нужные операции с файлом.

Иногда нужно скачать скрипт и сразу его выполнить. Это тоже делается достаточно просто. Нам нужно перенаправить содержимое файла на стандартный вывод, а затем передать его нужной утилите:

wget -O — http://www.tecmint.com/wp-content/scripts/Colorfull.sh | bash

Скрипт будет выполнен сразу после загрузки. Также вы можете указать имя для нового файла с помощью той же опции:

wget -O script.sh http://www.tecmint.com/wp-content/scripts/Colorfull.sh

Только обратите внимание, что со скриптами, загруженными из интернета нужно быть аккуратными. Сначала проверяйте не совершают ли они каких-либо деструктивных действий в системе. Из особенностей wget можно отметить, что утилита поддерживает протоколы HTTP, HTTPS и FTP, а для шифрования может использоваться только GnuTLS или OpenSSL.

Загрузка файла с помощью curl

Утилита curl предназначена для решения задач другого типа задач. Она больше подходит для отладки приложений и просмотра заголовков. Но иногда применяется и для загрузки файлов. По умолчанию, curl будет отправлять полученные данные сразу в стандартный вывод, поэтому она более удобна для загрузки скриптов:

curl http://www.tecmint.com/wp-content/scripts/Colorfull.sh | bash

Если же вы хотите записать загруженные данные в файл, то нужно использовать опцию -O и обязательно в верхнем регистре:

curl -O https://github.com/torvalds/linux/archive/v4.11-rc6.tar.gz

Когда загрузка файла в linux будет завершена, он будет находится в текущей папке. Вывод утилиты состоит из нескольких колонок, по которым можно детально отследить как происходит процесс загрузки:

  • % — показывает на сколько процентов загрузка завершена на данный момент;
  • Total — полный размер файла;
  • Reсeived — количество полученных данных;
  • Xferd — количество отправленных на сервер данных, работает только при выгрузке файла;
  • Average Speed Dload — средняя скорость загрузки;
  • AVerage Speed Upload — скорость отдачи для выгрузки файлов;
  • Time Total — отображает время, которое уйдет на загрузку всего файла;
  • Time Spend — сколько времени потрачено на загрузку файла;
  • Time Left — время, которое осталось до конца загрузки файла;
  • Current Speed — отображает текущую скорость загрузки или отдачи.

Если вы хотите скачать файл из командной строки linux и сохранить его с произвольным именем, используйте опцию -o в нижнем регистре:

curl -o taglist.zip http://www.vim.org/scripts/download_script.php?src_id=7701

Например, если для этого файла не задать имя, то он запишется с именем скрипта, а это не всегда удобно. Если остановиться на отличиях curl от wget, то здесь поддерживается больше протоколов: FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, POP3, IMAP, SMTP, RTMP и RTSP, а также различные виды шифрования SSL.

Скачивание файла с помощью aria2

Консольная утилита aria2 — это еще более сложный загрузчик файлов, чем даже curl. Здесь поддерживаются такие протоколы, как HTTP, HTTPS, FTP, SFTP, BitTorrent и Metalink. Поддержка BitTorrent позволяет загружать файлы и раздавать их даже по сети Torrent. Также утилита примечательна тем, что может использовать несколько каналов для загрузки файлов чтобы максимально использовать пропускную способность сети.

Например, чтобы скачать файл используйте такую команду:

Здесь тоже будет отображаться небольшой статус-бар с подробной информацией про состояние загрузки. Чтобы начать загрузку торрента. достаточно передать торрент файл или magnet ссылку:

aria2c http://example.org/mylinux.torrent $ aria2c ‘magnet:?xt=urn:btih:248D0A1CD08284299DE78D5C1ED359BB46717D8C’

Скачать файл с помощью elinks

Еще одна ситуация, когда вам нужно скачать файл из командной строки linux, вы знаете где его найти, но у вас нет прямой ссылки. Тогда все ранее описанные утилиты не помогут. Но вы можете использовать один из консольных браузеров, например, elinks. Если эта программа еще не установлена, то вы можете найти ее в официальных репозиториях своих дистрибутивов.

Запустите браузер, например, с помощью команды:

В первом окне нажмите Enter:

Затем введите URL страницы, например, не будем далеко ходить и снова скачаем ядро с kernel.org:

Когда вы откроете сайт, останется только выбрать URL для загрузки:

Далее выберите что нужно сделать с файлом, например, сохранить (save), а также выберите имя для нового файла:

В следующем окне вы увидите информацию о состоянии загрузки:

Выводы

В этой статье мы рассмотрели как скачать файл Linux через терминал с помощью специальных утилит и консольного браузера. В обычной домашней системе нет большой необходимости для таких действий, но на сервере это может очень сильно помочь. Надеюсь, эта информация была полезной для вас. Если у вас остались вопросы, спрашивайте в комментариях!

how to download a file using just bash and nothing else (no curl, wget, perl, etc.)

I have a minimal headless *nix which does not have any command line utilities for downloading files (e.g. no curl, wget, etc). I only have bash.

How can I download a file?

Ideally, I would like a solution that would work across a wide range of *nix.

Chris Snow's user avatar

7 Answers 7

If you have bash 2.04 or above with the /dev/tcp pseudo-device enabled, you can download a file from bash itself.

Paste the following code directly into a bash shell (you don’t need to save the code into a file for executing):

Then you can execute it as from the shell as follows:

Update: as mentioned in the comment, the approach outlined above is simplistic:

  • the read will trashes backslashes and leading whitespace.
  • Bash can’t deal with NUL bytes very nicely so binary files are out.
  • unquoted $line will glob.

Chris Snow's user avatar

It is pretty common for most of Unix/Linux.

-dump: dump the first file to stdout and exit

woodstack's user avatar

Adapted from Chris Snow answer This can also handle binary transfer files

  • i break && cat to get out of read
  • i use http 1.0 so there’s no need to wait for/send a connection:close

You can test binary files like this

Taking the «just Bash and nothing else» strictly, here’s one adaptation of earlier answers (@Chris’s, @131’s) that does not call any external utilities (not even standard ones) but also works with binary files:

Use with download http://path/to/file > file .

We deal with NUL bytes with read -d » . It reads until a NUL byte, and returns true if it found one, false if it didn’t. Bash can’t handle NUL bytes in strings, so when read returns with true, we add the NUL byte manually when printing, and when it returns false, we know there are no NUL bytes any more, and this should be the last piece of data.

Tested with Bash 4.4 on files with NULs in the middle, and ending in zero, one or two NULs, and also with the wget and curl binaries from Debian. The 373 kB wget binary took about 5.7 seconds to download. A speed of about 65 kB/s or a bit more than 512 kb/s.

In comparison, @131’s cat-solution finishes in less than 0.1 s, or almost a hundred times faster. Not very surprising, really.

This is obviously silly, since without using external utilities, there’s not much we can do with the downloaded file, not even make it executable.

ilkkachu's user avatar

Use uploading instead, via SSH from your local machine

A «minimal headless *nix» box means you probably SSH into it. So you can also use SSH to upload to it. Which is functionally equivalent to downloading (of software packages etc.) except when you want a download command to include in a script on your headless server of course.

As shown in this answer, you would execute the following on your local machine to place a file on your remote headless server:

Faster uploading via SSH from a third machine

The disadvantage of the above solution compared to downloading is lower transfer speed, since the connection with your local machine usually has much less bandwidth than the connection between your headless server and other servers.

To solve that, you can of course execute the above command on another server with decent bandwidth. To make that more comfortable (avoiding a manual login on the third machine), here is a command to execute on your local machine.

To be secure, copy & paste that command including the leading space character ‘ ‘ . See the explanations below for the reason.

The command will ssh to your third machine intermediate-host , start downloading a file to there via wget , and start uploading it to target-host via SSH. Downloading and uploading use the bandwidth of your intermediate-host and happen at the same time (due to Bash pipe equivalents), so progress will be fast.

When using this, you have to replace the two server logins ( user@*-host ), the target host password ( yourpassword ), the download URL ( http://example.com/… ) and the output path on your target host ( /path/to/output-file.zip ) with appropriate own values.

For the -T -e none SSH options when using it to transfer files, see these detailed explanations.

This command is meant for cases where you can’t use SSH’s public key authentication mechanism – it still happens with some shared hosting providers, notably Host Europe. To still automate the process, we rely on sshpass to be able to supply the password in the command. It requires sshpass to be installed on your intermediate host ( sudo apt-get install sshpass under Ubuntu).

We try to use sshpass in a secure way, but it will still not be as secure as the SSH pubkey mechanism (says man sshpass ). In particular, we supply the SSH password not as a command line argument but via a file, which is replaced by bash process substitution to make sure it never exists on disk. The printf is a bash built-in, making sure this part of the code does not pop up as a separate command in ps output as that would expose the password [source]. I think that this use of sshpass is just as secure as the sshpass -d<file-descriptor> variant recommended in man sshpass , because bash maps it internally to such a /dev/fd/* file descriptor anyway. And that without using a temp file [source]. But no guarantees, maybe I overlooked something.

Again to make the sshpass usage safe, we need to prevent the command from being recorded to the bash history on your local machine. For that, the whole command is prepended with one space character, which has this effect.

The -o StrictHostKeyChecking=no part prevents the command from failing in case it never connected to the target host. (Normally, SSH would then wait for user input to confirm the connection attempt. We make it proceed anyway.)

sshpass expects a ssh or scp command as its last argument. So we have to rewrite the typical wget -O — … | ssh … command into a form without a bash pipe, as explained here.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *