Сканирование текстовых файлов на данные на сервере Apache - PullRequest
0 голосов
/ 31 марта 2020

Я использую сервер Apache (Версия 2.4.29) в Ubuntu 18.04. Я пытаюсь отсканировать папку с большим объемом данных (сохраненные текстовые файлы) по ключевому слову, которое пользователь вводит на веб-сайте. Я попытался запустить Grep для файла. sh (я включил использование файлов оболочки и всего этого в моем файле .htaccess), но выдает ошибку кода 500 - внутренняя ошибка.

Пожалуйста, кто-нибудь может дайте мне несколько идей о том, как я могу это сделать? Большое спасибо!

Редактировать:
Вот мой код .htaccess

Options -Indexes
Options +ExecCGI
order deny,allow
deny from all
allow from 192.168.0.
AddHandler cgi-script .sh

(часть CGI позволяет запускать файлы. sh, и я знаю, что они могу запустить, потому что я запустил простой скрипт, который вернул дату и время и сработал)
Вот скрипт, который я пытаюсь запустить

ack "userinputdata" --files-with-matches

или

grep "userinputdata" /path/to/file

( ack - это то, что я скачал, но я считаю, что grep является частью ubuntu. Кроме того, чтобы получить ввод от пользователя, я планировал использовать PHP, чтобы написать новый файл, заменяя «userinputdata» тем, что они хотели, а затем запустив его и удалив его после .

Вот фрагмент ошибки в файле error.log

[Tue Mar 31 12:32:39.614059 2020] [cgi:error] [pid 26249] [client 
192.168.0.56:58830] AH01215:  : /var/www/html/test.sh
[Tue Mar 31 12:32:39.614075 2020] [cgi:error] [pid 26249] [client 
192.168.0.56:58830] AH01215:  : /var/www/html/test.sh
[Tue Mar 31 12:32:39.614091 2020] [cgi:error] [pid 26249] [client 
192.168.0.56:58830] AH01215:  : /var/www/html/test.sh
[Tue Mar 31 12:32:39.614107 2020] [cgi:error] [pid 26249] [client 
192.168.0.56:58830] AH01215:  : /var/www/html/test.sh
[Tue Mar 31 12:32:39.614123 2020] [cgi:error] [pid 26249] [client 
192.168.0.56:58830] AH01215:  : /var/www/html/test.sh

1 Ответ

0 голосов
/ 01 апреля 2020

У вас несколько проблем.

Ваш сценарий должен начинаться со строки, которая сообщает веб-серверу, какую программу вызывать для выполнения сценария. В вашем случае это будет #!/bin/bash.

. Вы должны отправить заголовок «Content-type» перед содержимым - строку, за которой следуют два символа новой строки. Так что это будет

echo "Content-type: text/html"
echo ""

Далее, вам нужно получить доступ к пользовательскому вводу как к переменным данным вашей программы. В вашем фрагменте строка «userinputdata» означает только это: буквенную строку «userinputdata», не имеющую отношения к данным формы (или строке запроса), представленным пользователем.

Предполагая, что метод вашей формы - GET ( что и должно быть в данном случае (в отличие от POST), ваш сценарий имеет строку запроса, доступную для него в переменной $QUERY_STRING, но она кодирована в URL и должна быть как-то проанализирована Например, используя awk.

У вас также могут быть другие проблемы с конфигурацией и / или разрешениями, несмотря на предпринятые вами шаги. Возможно, вы захотите поместить скрипт в директорию cgi-bin вашего сервера.

Я бы предложил несколько вещей: (1) внимательно посмотрите на https://blog.eduonix.com/shell-scripting/learn-cgi-scripting-using-bash-in-linux-shell-scripting/; (2) рассмотрите возможность использования другого языка, например PHP. Разбор входных параметров вручную - отличное упражнение для обучения, но это колесо, которое было изобретено для вас уже на множестве языков.

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

Надеюсь, это поможет - и получайте удовольствие!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...