как обнаружить файл по Интернету с помощью ping или подобной команды?

У меня есть сценарий оболочки для загрузки части моего материала по Интернету. Как я могу знать, существует ли файл по Интернету? Скажем, я хочу знать если http://192.168.1.1/backup/01012011.zip существует или нет? У меня есть использование попытки ping команда, но это показывает ошибку, я предполагаю это потому что / символ.

Может кто-либо может помочь мне? или есть ли иначе?

10
задан 8 July 2011 в 20:39

3 ответа

Конечно, существует иначе - но это требует понимания, что на самом деле происходит, когда запрос выполнен по Интернету. При посещении страницы в веб-браузере данные переданы с помощью протокола под названием HTTP (да, это - то, почему Вы будете часто видеть http:// в начале URL).

HTTP является основанным на тексте протоколом. Информацией обмениваются между клиентом и сервером путем отправки заголовков, сопровождаемых телом запроса. Заголовки содержат большую информацию о статусе о запросе и передаваемой информации. Заголовок, что Вы будете интересоваться помочь Вам с Вашей проблемой, не является действительно заголовком вообще - это - самая первая переданная строка и содержит число, названное кодом состояния. Это число является 3 цифрами и передает информацию о статусе. Если запрос был успешен, результат обычно 200 (не всегда - существуют исключения).

Одна вещь наверняка - если файл, который Вы запросили, не существует на веб-сервере, сервер должен ответить с кодом состояния 404. Это указывает, что ресурс не мог быть найден. (Для любопытного вот список кодов состояния HTTP и их значения.)

Ну, достаточно теории. Давайте посмотрим, как мы можем сделать это на терминале. Большой инструмент для выборки запросов с помощью HTTP, который также предоставляет нам способность исследовать код состояния, является ЗАВИХРЕНИЕМ, которое доступно в Ubuntu repos. Можно установить его с:

sudo apt-get install curl

После того как Вам установили его, можно вызвать его как так:

curl [website]

... и содержание данного URL будет распечатано к терминалу. Это - информация, которую видит Ваш веб-браузер, когда это посещает тот URL. Как это помогает нам? Ну, внимательно изучите флаги для curl команда. Если мы передаем параметр --head, cURL возвратит только заголовки из запроса. Попробуйте его URL. Вы получите список строк формы:

header-name: header-value

Заметьте, конечно, что самая первая строка не смотрит ничто как это. Помните код состояния, о котором мы говорили ранее? Вы заметите его в первой строке как трехзначное число. Что мы должны сделать, теперь извлечение это от первой строки с помощью Perl - и мы можем сделать это в терминальном Perl использования -e флаг, которые позволяют нам нас код Perl передачи непосредственно к интерпретатору Perl. Мы должны будем также добавить дополнительный флаг для ЗАВИХРЕНИЯ (--silent) чтобы помешать ему отображать индикатор выполнения и портить наш сценарий Perl.

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

perl -e "\$s=\`curl [URL] --head --silent\`; \$s=~m/(\\d{3})/;print \$1"

То, что это в основном делает, выбирает URL с ЗАВИХРЕНИЕМ и выполняет его через регулярное выражение Perl, которое извлекает код состояния и распечатывает его.

Теперь все, Вы должны, помещается в URL файла, на который Вы проверяете и сравниваете его с '404'. Если Вы добираетесь '404', можно предположить, что файл не существует.

Конечно, этим могло быть очень трудно управлять в терминале, таким образом, можно записать маленький сценарий, который делает это не только легче понять, но также и легче выполниться:

#!/usr/bin/perl

# Get the URL
$url = $ARGV[0];

# Fetch the header
$header = `curl $url --head --silent`;

# Try to find the status code
$header =~ m/(\d{3})/;

# Return the result
exit(0) if $1 == 404;
exit(1);

Просто копия и вставка это в файл. Для этого примера я назову файл url_check. Затем сделайте исполняемый файл файла с:

chmod 755 url_check

Затем можно проверить любой файл со следующей простой командой:

./url_check [URL]

Возвращаемое значение будет '0', если сервер возвратил 404 и '1' иначе. Можно затем объединить эту команду в цепочку в оболочке точно так же, как Вы были бы любая другая команда.

8
ответ дан 23 November 2019 в 04:21

Можно использовать --spider опция wget, который на самом деле не загружает файл, но просто проверяет, там ли это. В Вашем примере:

wget --spider http://192.168.1.1/backup/01012011.zip

Это или возвратит сообщение, содержащее 200 OK если файл там, или ошибка, например. 404 Not Found если это не там, или 403 Forbidden если у Вас нет разрешения получить его.

13
ответ дан 23 November 2019 в 04:21
wget http://192.168.1.1/backup/01012011.zip

Код результата 0 средств да, что-то еще - нет.

Можно проверить код результата в сценарии с $? переменная.

1
ответ дан 23 November 2019 в 04:21

Другие вопросы по тегам:

Похожие вопросы: