Ядро Ubuntu на ChromeBox

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

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

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

Ну, достаточно теории. Давайте посмотрим, как мы можем это сделать на терминале. Отличный инструмент для извлечения запросов с использованием HTTP, который также предоставляет нам возможность проверять код состояния, - cURL, который доступен в репозиториях Ubuntu. Вы можете установить его с помощью:

sudo apt-get install curl

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

curl [website]

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

header-name: header-value

Обратите внимание, конечно, что первая строка выглядит не так. Помните код состояния, о котором мы говорили ранее? Вы заметите это в первой строке как трехзначное число. Теперь нам нужно извлечь его из первой строки с помощью Perl, и мы можем сделать это в терминале с помощью флага Perl -e, который позволит нам передать Perl-код непосредственно интерпретатору Perl. Нам также нужно добавить дополнительный флаг в cURL (--silent), чтобы он не отображал индикатор выполнения и не испортил наш скрипт Perl.

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

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

Что это в основном делает, это выбор URL с помощью cURL и запуск его через регулярное выражение 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» в противном случае. Затем вы можете связать эту команду в оболочке так же, как и любую другую команду.

0
задан 2 April 2017 в 22:44

2 ответа

Я не уверен, что кто-то пытается сделать то же самое, но я не мог заставить его работать с SeaBIOS: Legacy Boot. Я закончил использовать UEFI, и это сработало. Просто следуйте инструкциям для Intel NUC, так как это аналогичная установка.

0
ответ дан 18 July 2018 в 15:38

Я не уверен, что кто-то пытается сделать то же самое, но я не мог заставить его работать с SeaBIOS: Legacy Boot. Я закончил использовать UEFI, и это сработало. Просто следуйте инструкциям для Intel NUC, так как это аналогичная установка.

0
ответ дан 24 July 2018 в 20:41

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

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