Estoy ejecutando un servidor Apache (Versión 2.4.29) en Ubuntu 18.04. Estoy tratando de escanear una carpeta con una gran cantidad de datos (archivos txt almacenados) en busca de una palabra clave que el usuario ingresa en el sitio web. Intenté ejecutar Grep en un archivo .sh (he habilitado el uso de archivos de shell y todo eso en mi archivo .htaccess) pero da un error de código 500: error interno.
Por favor, ¿alguien puede darme algunas ideas de cómo puedo lograr esto? ¡Muchas gracias!
Editar:
Aquí está mi código .htaccess
Options -Indexes Options +ExecCGI order deny,allow deny from all allow from 192.168.0. AddHandler cgi-script .sh (la parte CGI permite que se ejecuten los archivos .sh y sé que pueden ejecutarse porque ejecuté un script simple que devolvió la fecha y la hora y funcionó)
Aquí está el script que estoy tratando de ejecutar
ack "userinputdata" --files-with-matcheso
grep "userinputdata" /path/to/file(ack es algo que descargué pero creo que grep es parte de ubuntu) Además, para obtener la entrada del usuario planeé usar PHP para escribir un nuevo archivo reemplazando "userinputdata" con lo que quisieran y luego ejecutarlo y eliminarlo después.
Aquí hay un fragmento del error en el archivo 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.shTienes múltiples problemas.
Su secuencia de comandos debe comenzar con una línea que le dice al servidor web qué programa invocar para ejecutar la secuencia de comandos. En tu caso sería #!/bin/bash .
Debe enviar un encabezado de "Tipo de contenido" antes del contenido: una cadena seguida de dos caracteres de nueva línea. Entonces eso sería
echo "Content-type: text/html" echo ""A continuación, debe acceder a la entrada del usuario como datos variables para su programa. En su fragmento, la cadena "userinputdata" significa exactamente eso: la cadena literal "userinputdata", sin relación con los datos del formulario (o cadena de consulta) enviados por el usuario.
Suponiendo que el método de su formulario es GET (que es lo que debería ser en este caso, a diferencia de POST), su secuencia de comandos tiene la cadena de consulta disponible en la variable $QUERY_STRING , pero está codificada en URL y debe analizarse de alguna manera , por ejemplo, usando awk .
También puede tener otros problemas de configuración y/o permisos a pesar de los pasos que ha tomado. Es posible que desee colocar el script en el directorio cgi-bin de su servidor.
Sugeriría un par de cosas: (1) eche un buen vistazo a https://blog.eduonix.com/shell-scripting/learn-cgi-scripting-using-bash-in-linux-shell-scripting/ ; (2) considere usar un lenguaje diferente, como PHP . Analizar los parámetros de entrada manualmente es un gran ejercicio de aprendizaje, pero también es una rueda que ya se ha inventado para usted en una multitud de idiomas.
Finalmente, abrir y cerrar una gran cantidad de archivos: los sistemas operativos modernos son realmente buenos en eso, pero no es la forma más eficiente de buscar una gran cantidad de datos para una cadena de texto. Así que grep puede no ser la herramienta ideal. Hay bases de datos para cosas así. Pero eso es un poco por delante de nosotros mismos.
Espero que esto ayude, ¡y diviértete!