La idea de este script es que funcione en la mayor cantidad de distros Linux y en especial las orientadas al usuario final, es decir, que sea lo más independiente posible... pero dado que no tengo todo el tiempo del mundo para andar virtualizando distros y testeando el script pues lo libero para que lo pruebe quien quiera...
De momento lo he probado en Ubuntu 9.04 y 9.10 (GNOME y KDE) y en Fedora 12 (GNOME) y parece que no da problemas salvo por algunas cosas como que:
-En Fedora hay ciertos archivos que no son accesibles (ni si quiera en modo lectura) desde un usuario no-root...
-El script aun no reconoce la posible existencia de GRUB2 y presupone que si se utiliza GRUB siempre se utilizará la versión antigua...
ah! Otra cosa.. ya sé que hay comandos que requieren de root y que proporcionarían más información pero en un principio no tengo intención de "obligar" al usuario a recurrir a root para usar este script....
Por último decir que no soy un experto en bash así que es más que probable que existan mejores formas (menos código o más ordenado) de hacer lo que hace este script por ello estoy abierto a cualquier idea, corrección, sugerencia y/o aportación...
En principio estas son algunas de las cosas que me gustaría implementar...
- idear alguna forma para añadir las etiquetas [ code ] a la salida de los comandos de forma que al recibir la información esta ya venga en un formato adecuado para su visualización en el foro.
- ¿algún sistema para subir la información a pastebins?
- ...
Dentro de poco espero subirlo a un servidor para que se pueda descargar e instalar de una forma más cómoda.
Aquí tenéis un captura de como se ver en una terminal:
Código
#!/bin/bash # Script recopilador de informacion by Festor para la comunidad de elhacker.net # # Una forma rapida y sencilla de acceder a los principales comandos y archivos que proporcionan # informacion sobre el sistema con el fin de que un usuario, sin tener apenas conocimiento del sistema, # pueda proporcionar mas datos en el caso de que tenga algun problema con su sistema linux. # # La idea es que al elegir una opcion el contenido del fichero o la salida del comando se vuelque en un fichero # de texto plano para simplificar su manejo y posible edicion. De esta forma uno puede copiar y pegar # la informacion de una manera un poco mas "facil"... :-/ # # Este script es de libre distribucion, edicion y uso, es decir, podeis hacer lo que os de la gana con el... xD # # Gestores de paquetes de software y directorios de ficheros de configuracion de repositorios yum=/usr/bin/yum yum_conf=/etc/yum.conf yum_repos=/etc/yum.repos.d dpkg=/usr/bin/dpkg dpkg_sources=/etc/apt/sources.list dpkg_repos=/etc/apt/sources.list.d # Gestores de arranque lilo=/etc/lilo.conf grub=/boot/grub/menu.lst # Otros ficheros importantes xorg=/etc/X11/xorg.conf fstab=/etc/fstab # La idea es que su uso fuera intuitivo... pero por si acaso avisamos de como funciona... function visualizar_ayuda { tput cup 5 4; echo -e " En la pantalla principal elige la opcion deseada pulsando la tecla" tput cup 6 4; echo -e "que corresponde a la letra resaltada, acto seguido aparecera un menu" tput cup 7 4; echo -e "desplegable en el que debes seleccionar la accion a realizar en base" tput cup 8 4; echo -e "al numero resaltado de su izquierda. Espero que te sea de utilidad!!" tput cup 10 4; echo -e "by Festor... ^_^" tput cup 11 4; echo -e "para la comunidad de elhacker.net" } # Meto el menu en una funcion porque lo vamos a llamar repetidas veces function menu { clear tput cup 0 4; echo -e "---------------------------------------------------------" tput cup 1 4; echo -e "..:: Bienvenido al script recopilador de informacion ::.." tput cup 2 4; echo -e "---------------------------------------------------------" tput cup 3 1; echo -e "Info del sistema" tput cup 3 1; echo -e "\033[1;32mI\033[0m" tput cup 3 20; echo -e "Redes" tput cup 3 20; echo -e "\033[1;32mR\033[0m" tput cup 3 28; echo -e "Hardware" tput cup 3 28; echo -e "\033[1;32mH\033[0m" tput cup 3 39; echo -e "Programas" tput cup 3 39; echo -e "\033[1;32mP\033[0m" tput cup 3 51; echo -e "Ayuda" tput cup 3 51; echo -e "\033[1;32mA\033[0m" tput cup 3 59; echo -e "Salir" tput cup 3 59; echo -e "\033[1;32mS\033[0m" } # Dado que no queremos ensuciar el directorio actual con decenas de ficheros nos pasamos a /tmp cd /tmp # Llamamos al menu menu # Esto sirve para que la ayuda se muestre en la primera ejecucion del script. # En sucesivas ejecuciones no deberia aparecer mas la ayuda al menos que se borre el # fichero "ayuda_leida" de /tmp (lo cual ocurre cuando reinicias la computadora). if ! [[ -e ayuda_leida ]]; then visualizar_ayuda && echo "Ya deberias saber como funciona el script" > ayuda_leida ; fi # El funcionamiento es sencillo, despues de cada "case" se llama de nuevo al menu # para crear una ilusion de un menu desplegable. # No hay que olvidarse de que uno puede estar usando letras minusculas o mayusculas (= Bloq Mayus activado) while [[ "$opcion" != 's' ]] && [[ "$opcion" != 'S' ]]; do read -s -n1 opcion case $opcion in I|i) menu tput cup 4 1; echo -e "(1) Distribucion Linux" tput cup 4 2; echo -e "\033[1;32m1\033[0m" tput cup 5 1; echo -e "(2) Lista de particiones" tput cup 5 2; echo -e "\033[1;32m2\033[0m" tput cup 6 1; echo -e "(3) Gestor de arranque" tput cup 6 2; echo -e "\033[1;32m3\033[0m" tput cup 7 1; echo -e "(4) Usuarios logueados" tput cup 7 2; echo -e "\033[1;32m4\033[0m" tput cup 8 1; echo -e "(5) Registro del nucleo (dmesg)" tput cup 8 2; echo -e "\033[1;32m5\033[0m" read -s -n1 subopcion case $subopcion in 1|2|3|4|5) case $subopcion in # Nombre y version de la distribucion que usas mas la version del kernel Linux que tienes instalado. 1)cat /etc/issue > LinuxDistro.txt && uname -r >> LinuxDistro.txt && xdg-open LinuxDistro.txt;; # Se que la info del fstab puede no ser la más actual ya que es estatica pero para acceder al 'fdisk -l' necesitas de root. 2)cat $fstab > fstab.txt && xdg-open fstab.txt;; # Dado que no hay un gestor de arranque universal comprobamos cual es el que esta instalado. 3)if [[ -e "$grub" ]] ; then cat $grub > MenuGrub.txt && xdg-open MenuGrub.txt ; fi ; if [[ -e "$lilo" ]] ; then cat $lilo > MenuLilo.txt && xdg-open MenuLilo.txt ; fi ;; 4)who > UsersLogged.txt && xdg-open UsersLogged.txt;; 5)dmesg > KernelLog.txt && xdg-open KernelLog.txt;; esac; menu;; *)menu;; esac;; R|r) menu tput cup 4 20; echo -e "(1) ifconfig" tput cup 4 21; echo -e "\033[1;32m1\033[0m" tput cup 5 20; echo -e "(2) Wifi & Wireless" tput cup 5 21; echo -e "\033[1;32m2\033[0m" read -s -n1 subopcion case $subopcion in 1|2) case $subopcion in 1)ifconfig > ifconfig.txt && xdg-open ifconfig.txt;; 2)iwconfig > iwconfig.txt && if ! [[ -s iwconfig.txt ]]; then echo -e "Posibles causas por las que ifconfig no ha devuelto informacion:\n->Tu equipo carece de un dispositivo wireless.\n->Tu equipo dispone de hardware wireless pero no hay un controlador/modulo accesible." > iwconfig.txt; fi && xdg-open iwconfig.txt;; esac; menu;; *)menu;; esac;; H|h) menu tput cup 4 28; echo -e "(1) Perifericos internos (lspci)" tput cup 4 29; echo -e "\033[1;32m1\033[0m" tput cup 5 28; echo -e "(2) Perifericos externos (lsusb)" tput cup 5 29; echo -e "\033[1;32m2\033[0m" tput cup 6 28; echo -e "(3) Servidor grafico (Xorg)" tput cup 6 29; echo -e "\033[1;32m3\033[0m" tput cup 7 28; echo -e "(4) Aceleracion grafica 3D" tput cup 7 29; echo -e "\033[1;32m4\033[0m" if [[ -e /usr/bin/lshw ]]; then tput cup 8 28; echo -e "(5) Informacion mas detallada" tput cup 8 29; echo -e "\033[1;32m5\033[0m" fi read -s -n1 subopcion case $subopcion in 1|2|3|4|5) case $subopcion in 1)lspci -k > HardwarePCI.txt && xdg-open HardwarePCI.txt;; 2)lsusb > HardwareUSB.txt && xdg-open HardwareUSB.txt;; 3)if [[ -e "$xorg" ]] ; then cat $xorg > Xorg.txt && xdg-open Xorg.txt ; fi;; 4)glxinfo | grep direct > DirectRendering.txt && xdg-open DirectRendering.txt;; 5)lshw -short -sanitize > GeneralInfo.txt && xdg-open GeneralInfo.txt;; esac; menu;; *)menu;; esac;; P|p) menu tput cup 4 39; echo -e "(1) Repositorios en uso" tput cup 4 40; echo -e "\033[1;32m1\033[0m" tput cup 5 39; echo -e "(2) Paquetes de software instalados" tput cup 5 40; echo -e "\033[1;32m2\033[0m" read -s -n1 subopcion case $subopcion in # La idea es simple: primero comprobamos si hay algun gestor instalado que este soportado # y luego averiguamos cual comprobandolos uno a uno. 1|2) if [[ -e "$dpkg" || -e "$yum" ]] ; then case $subopcion in 1)if [[ -e "$dpkg_sources" ]] ; then cat $dpkg_sources $dpkg_repos/*.list > AptSources.txt && xdg-open AptSources.txt ; fi ; if [[ -e "$yum_conf" ]] ; then cat $yum_conf $yum_repos/*.repo > YumSources.txt && xdg-open YumSources.txt ; fi ;; 2)if [[ -e "$dpkg" ]] ; then dpkg -l > DebPkgList.txt && xdg-open DebPkgList.txt ; fi ; if [[ -e "$yum" ]] ; then yum list installed > RpmPkgList.txt && xdg-open RpmPkgList.txt ; fi ;; esac; else echo -e "Lo siento, tu gestor de paquetes (si es que tienes alguno) aun no esta soportado..\nPor favor, contacta con el creador de este script para ver si se puede arreglar" > ErrorProgramas.txt && xdg-open ErrorProgramas.txt fi menu;; *)menu;; esac;; A|a) menu visualizar_ayuda read -s -n1 subopcion case $subopcion in *)menu;; esac;; # Cualquiera opcion no valida implica volver al menu. *) menu;; esac done # Aunque estemos trabajando en /tmp es recomendable borrar los (posibles) ficheros creados ya que si # volvemos a ejecutar el script sin reiniciar el sistema es posible que causen "problemas". rm -f LinuxDistro.txt LinuxKernel.txt fstab.txt MenuGrub.txt MenuLilo.txt UsersLogged.txt KernelLog.txt \ ifconfig.txt iwconfig.txt HardwarePCI.txt HardwareUSB.txt Xorg.txt DirectRendering.txt GeneralInfo.txt \ AptSources.txt YumSources.txt ErrorProgramas.txt DebPkgList.txt RpmPkgList.txt clear exit