Como lograr un Terminal de SysAdmin aplicando Shell Scripting

El Shell Scripting, se refiere a la ejecución de ordenes complejas sobre el Terminal (Consola) de GNU/Linux, es muy útil para automatizar actividades rutinarias e importantes dentro de nuestro Sistema Operativo GNU/Linux, lo que permite optimizar nuestros Recursos y Tiempo.

Selección_007

Por ende, su uso desde el terminal nos permite ejecutar ordenes de comando complejas manualmente o automáticamente mediante scripts o como rutinas programadas dentro de archivos de carga automática o tareas programadas dentro del Sistema Operativo GNU/Linux. Y para un Usuario Medio, Avanzado o SysAdmin el programar (automatizar) tareas, alertas y / o avisos sobre un Host (PC / Servidor) para ahorrar Horas/Labor de ejecución manual o presencial, es algo básico y esencial para el buen desempeño de su labor como profesional de alto nivel.

A continuación, mostraremos como un dato (valor / parámetro) previamente almacenado en una variable mediante una orden Bash Shell o compatible, puede ser mostrado en el terminal de su Sistema Operativo GNU/linux, de una manera practica y sencilla. Además de tunear el prompt del Terminal.

Primero Paso: Edite el .bashrc de su usuario

Con el editor de su preferencia (vi, nano, etc.) edite el archivo .bashrc de su usuario que debe estar localizado dentro del home del mismo, es decir, en por ejemplo: «/home/mi_usuario».

Inserte el contenido de cada una de las lineas siguiente y todas aquellos otras adicionales que usted crea conveniente mostrar al usuario cuando ejecute un terminal de usuario:

sleep 3

clear

########################### PARÁMETROS DE MONITOREO ###########################

NOMBRE_SISTEMA=$(cat /etc/os-release | grep NAME | grep -v "VERSION" | sed -n '2p' | cut -f2 -d\")
VERSION_SISTEMA=$(cat /etc/os-release | grep VERSION= | sed -n '1p' | sed 's/VERSION=//' | sed 's/"//g')

FABRICANTE_CPU=$(grep "vendor_id" /proc/cpuinfo | sed q | awk '{print $3}')
MODELO_CPU=$(grep "model name" /proc/cpuinfo | sed q | cut -d ":" -f 2 | awk '{print $0}')
NUM_CPU=$(grep "processor" /proc/cpuinfo | sort -r | sed q | awk '{print $3}' | echo `expr $NUM_CPU + 1`)
NUCLEO_CPU=$(grep "cpu cores" /proc/cpuinfo | sed q | awk '{print $4}')
CACHE_CPU=$(grep "cache size" /proc/cpuinfo | sed q | cut -d ":" -f 2 | awk '{print $0}')

clear

printf %80s |tr " " "="
echo ""
echo "      ADVERTENCIA - USTED HA INICIADO SESIÓN EN EL EQUIPO SERVIDOR DE LA      "
echo "                             EMPRESA INSTITUCIÓN XYZ                                "
echo "       RECUERDE TENER EXTREMO CUIDADO CON CUALQUIER CAMBIO A REALIZAR        "
printf %80s |tr " " "="
echo ""
printf %80s |tr " " "="
echo ""
echo "                         ESTE EQUIPO TIENE INSTALADO                         "
echo "                                                                             "
echo "TIPO DE S.O.: <"`uname -o`">                                                 "
echo "NOMBRE / VERSIÓN DEL S.O.: &lt;"$NOMBRE_SISTEMA"&gt; / &lt;"$VERSION_SISTEMA"&gt;        "
echo "KERNEL / ARQUITECTURA: <"`uname -r`"> / <"`uname -m`">                       "
echo "INFO DEL CPU: ("$FABRICANTE_CPU") / ("$MODELO_CPU") / ("$NUM_CPU") / ("$NUCLEO_CPU") / ("$CACHE_CPU")"
printf %80s |tr " " "="
echo ""
echo ""

PS1="\[\e[33;1m\]┌─( \[\e[34;1m\]\u@\h\[\e[37;1m\] ) * * * * \d - \t * * * * { \[\e[31;1m\]\w\[\e[33;1m\] }\n└──┤ \[\e[32m\]# "

`

Segundo Paso: Edite el .bashrc del root

Nuevamente con el editor ya usado edite el archivo .bashrc del superusuario root que debe estar localizado dentro de la ruta /root del mismo.

Inserte el contenido de cada una de las lineas siguiente y todas aquellos otras adicionales que usted crea conveniente mostrar al usuario cuando ejecute un terminal de usuario:

########################### PARÁMETROS DE MONITOREO ###########################

alias cc='clear'

PROXY=$(route -n | sed -n '3p' | awk '{print $2}')

IP_SERVIDOR_DNS=$(cat /etc/resolv.conf | sed '1 d' | grep nameserver | sed -n '1p' | awk '{print $2}')
DOMINIO=$(cat /etc/resolv.conf | sed '1 d' | grep search | sed -n '1p' | awk '{print $2}')

DATA_USUARIO1=$(du -sh /home/ | sort -r | awk '{print $1}')
DATA_ROOT=$(du -sh /root | awk '{print $1}')
DATA_VAR=$(du -sh /var | awk '{print $1}')

MEM_TOTAL=$(free -h | sed '1 d' | grep Mem: | awk '{print $2}')
MEM_USADA=$(free -h | sed '1 d' | grep Mem: | awk '{print $3}')
MEM_LIBRE=$(free -h | sed '1 d' | grep Mem: | awk '{print $4}')
MEM_COMPARTIDA=$(free -h | sed '1 d' | grep Mem: | awk '{print $5}')
MEM_ALMACENADA=$(free -h | sed '1 d' | grep Mem: | awk '{print $6}')
MEM_CACHEADA=$(free -h | sed '1 d' | grep Mem: | awk '{print $7}')

PART1_TOTAL=$(df -h | sed '1 d' | grep disk | awk '{print $2}')
PART1_USADO=$(df -h | sed '1 d' | grep disk | awk '{print $3}')
PART1_DISPONIBLE=$(df -h | sed '1 d' | grep disk | awk '{print $4}')
PART1_PORCENTAJE=$(df -h | sed '1 d' | grep disk | awk '{print $5}')
PART1_PUNTOMONTAJE=$(df -h | sed '1 d' | grep disk | awk '{print $6}')

CARGA_1MIN=$(top -n 1 -b | grep "load average:" | awk '{print $12}' | sed 's/,//2')

CARGA_5MIN=$(top -n 1 -b | grep "load average:" | awk '{print $13}' | sed 's/,//2')
CARGA_15MIN=$(top -n 1 -b | grep "load average:" | awk '{print $14}' | sed 's/,//2')

USER_ONLINE=$(top -n 1 -b | grep "load average:" | awk '{print $8}')
PROC_ZOMBIE=$(top -n 1 -b | grep "zombie" | awk '{print $10}')

TIEMPO_ENCENDIDO=$(uptime | awk '{print $3,$4}' | cut -f1 -d,)

FABRICANTE_CPU=$(grep "vendor_id" /proc/cpuinfo | sed q | awk '{print $3}')
MODELO_CPU=$(grep "model name" /proc/cpuinfo | sed q | cut -d ":" -f 2 | awk '{print $0}')
NUM_CPU=$(grep "processor" /proc/cpuinfo | sort -r | sed q | awk '{print $3}' | echo `expr $NUM_CPU + 1`)
NUCLEO_CPU=$(grep "cpu cores" /proc/cpuinfo | sed q | awk '{print $4}')
CACHE_CPU=$(grep "cache size" /proc/cpuinfo | sed q | cut -d ":" -f 2 | awk '{print $0}')

IP_ETH0=$(ifconfig eth0 | grep inet | grep -v inet6 | cut -d ":" -f 2 | cut -d " " -f 1)
MAC_ETH0=$(ifconfig eth0 | sed -n '1p' | awk '{print $5}')

###############################################################################

if ping -c 1 8.8.8.8 &amp;&gt; /dev/null; then CONEXION_INTERNET=Habilitado; else CONEXION_INTERNET=Deshabilitado; fi

set -o vi

printf %80s |tr " " "="
echo ""
echo "      ADVERTENCIA - USTED HA INICIADO SESIÓN EN EL EQUIPO SERVIDOR DE LA      "
echo "                             EMPRESA INSTITUCIÓN XYZ                                "
echo "       RECUERDE TENER EXTREMO CUIDADO CON CUALQUIER CAMBIO A REALIZAR        "
printf %80s |tr " " "="
echo ""
printf %80s |tr " " "="
echo ""
echo "                    PARÁMETROS ACTUALES DE FUNCIONAMIENTO                    "
echo "                                                                             "
echo "MEMORIA TOTAL: ("$MEM_TOTAL") - MEMORIA USADA: ("$MEM_USADA") - MEMORIA LIBRE: ("$MEM_LIBRE")"
echo "DISCO PRINCIPAL: ("$PART1_TOTAL") - ESPACIO USADO: ("$PART1_USADO") - ESPACIO LIBRE: ("$PART1_DISPONIBLE") - %: ("$PART1_PORCENTAJE") - PARTICION: ("$PART1_PUNTOMONTAJE")"
echo "CARGA PROMEDIO DEL SISTEMA: 1 MIN ("$CARGA_1MIN") -  5 MIN ("$CARGA_5MIN") - 15 MIN ("$CARGA_15MIN")"
echo "USUARIOS CONECTADOS: ("$USER_ONLINE") -  PROCESOS ZOMBIES: ("$PROC_ZOMBIE")"
echo "TIEMPO ARRANQUE/ENCENDIDO: ("$TIEMPO_ENCENDIDO")                             "
echo "ESPACIO USADO: /home = ("$DATA_USUARIO1") /root = ("$DATA_ROOT") /var = ("$DATA_VAR")"
printf %80s |tr " " "="
echo ""
echo ""
PS1="\[\e[33;1m\]┌─( \[\e[34;1m\]\u@\h\[\e[37;1m\] ) * * * * \d - \t * * * * { \[\e[31;1m\]\w\[\e[33;1m\] }\n└──┤ \[\e[32m\]$ "

Tercer Paso: Edite el .bashrc del root

Cierre sesión y el terminal. Vuelva ha iniciarlo y experimente los cambios. Le debería quedar similar a como se muestra a continuación, en las imágenes siguientes:

Paso 1: Inicio de Terminal

Paso 2: Edición de .bashrc de usuario

Paso 3: Contenido insertado en .bashrc de usuario

Paso 4: Inicio de sesión de root

Paso 5: Inicio de sesión de root

Paso 6: Edición de archivo .bashrc de root

Paso 7: Edición de archivo .bashrc de root

Paso 8: Edición de archivo .bashrc de root

Paso 9: Ejemplo demostrativo de nuevo Terminal de Usuario

Paso 10: Ejemplo demostrativo de nuevo Terminal de Usuario

Paso 11: Ejemplo demostrativo de nuevo Terminal de Usuario

Cuarto Paso (opcional): Tunear Alias

Recuerde que el uso de alias dentro del .bashrc puede ahorrarle también mucho tiempo de escritura. Descomente las que vienen por defecto dentro del .bashrc, tales como:

alias ls='ls $LS_OPTIONS'
<strong>alias ll='ls $LS_OPTIONS -l'
<strong>alias l='ls $LS_OPTIONS -lA'

alias rm='rm -i'

Y agregue las que considere necesario, por ser comandos de uso frecuente, tales como:

alias cc='clear'

Es importante, conocer más de forma autodidacta sobre variables, alias, el .bashrc y el lenguaje bash shell para un nivel más avanzado del terminal. Esto mismo puede lograrse cuando se inicia sesiones remotas vía ssh, lo cual podemos ver más adelante en otras publicaciones futuras.

Espero que estos pequeños “Tips” les faciliten realizar optimizaciones básicas pero útiles, que por lo general solo están reservadas para personas expertas en Tecnología, Informática, Software Libre y GNU/Linux.

RECORDATORIO: Si alguna línea de comando no se le ejecuta o muestra el valor correcto, asegúrese de probar manualmente cada sección de la orden de comando para intentar ajustar los valores o sintaxis de algunas variables.


9 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   yippekay dijo

    Los alias es de lo mejor. No me parece mal algunos que incluyen por defecto en bashrc: la (ls -a) y ll (ls -l). Al ultimo le añado el parametro -h.

    Otros alias prácticos:
    s = ‘sudo’
    cd1 = ‘cd ..’
    cd2 = ‘cd ../..’
    rmd = ‘rm -r’ (lo utilizo para remover directorios con archivos)
    apagar = ‘sudo shutdown -h now’
    del = ‘trash-put’ (mueve archivos a la papelera, comando del paquete trash-cli)

  2.   toño dijo

    Desde que vi este alias el año pasado en Reddit a sido mi favorito:
    alias fuck=’sudo $(history -p !!)’

  3.   Martin dijo

    Esta muy bueno el articulo y la apariencia que le da a la consola. Algunos aportes:
    – En ubuntu los alias se puede colocar en un archivo aparte (.bash_aliases) en el resto de las distribuciones no se pero lo hace agregando las siguientes lineas en .bashrc:
    if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
    fi
    Esto permite tener los alias mas ordenados y para los desmemoriados como yo pueden agregar este alias que muestra el archivo listando los alias:
    alias lsalias=’more ~/.bash_aliases’
    – También tengo un archivo de texto de comandos de uso no frecuente (que no suelo recordar) llamado comandos_utiles.txt y que listo con el siguiente alias: alias cutil=’more ~/comandos_utiles.txt’
    – Mas alias que uso:
    alias cdu=’cd ~’
    alias lof=’ls -lSr |more’ # Muestra los archivos en detalle ordenados por tamaño
    alias lod=’du -sk * | sort -rn’ # Muestra los directorios ordenados por tamaño
    alias deo=’du -sh’ # Estima el espacio ocupado por el dir indicado
    alias psa=’ps -eafw | more’ # Muestra todos los procesos con more
    alias psg=’ps -eafw | grep’ # Muestra el proceso indicado
    – Por ultimo paso una alternativa para usuarios que hice:
    NOMBRE_SISTEMA=$(cat /etc/os-release | grep NAME | grep -v «VERSION» | sed -n ‘1p’ | cut -f2 -d\»)
    VERSION_SISTEMA=$(cat /etc/os-release | grep VERSION= | sed -n ‘1p’ | sed ‘s/VERSION=//’ | sed ‘s/»//g’)
    FABRICANTE_CPU=$(grep «vendor_id» /proc/cpuinfo | sed q | awk ‘{print $3}’)
    MODELO_CPU=$(grep «model name» /proc/cpuinfo | sed q | cut -d «:» -f 2 | awk ‘{print $0}’)
    NUM_CPU=$(grep «processor» /proc/cpuinfo | sort -r | sed q | awk ‘{print $3}’ | echo expr $NUM_CPU + 1)
    NUCLEO_CPU=$(grep «cpu cores» /proc/cpuinfo | sed q | awk ‘{print $4}’)
    CACHE_CPU=$(grep «cache size» /proc/cpuinfo | sed q | cut -d «:» -f 2 | awk ‘{print $0}’)
    DATA_USUARIO=$(du -sh ~ | sort -r | awk ‘{print $1}’)

    clear
    printf %130s |tr » » «=»
    echo «»
    echo «FECHA: «date +%c --date='+1 year'
    echo «KERNEL: «uname -o» <«uname -r«> <«uname -m«> »
    echo «DISTRIBUCIÓN: «$NOMBRE_SISTEMA» «$VERSION_SISTEMA» »
    echo «CPU: «$MODELO_CPU», «$NUCLEO_CPU» Nucleos, «$CACHE_CPU» Cache»
    echo «ESPACIO USADO: «$DATA_USUARIO
    printf %130s |tr » » «=»
    echo «»
    ############################
    echo «COMANDOS UTILES: »
    echo » – Instalar RPM en sistema de paquetes DEB: alien -c -i paquete.rpm»
    echo » – Cambiar el usuario y grupo de archivos en forma recursiva: chown -hR usuario:grupo [archivo o dir]»
    echo » – Copiar manteniendo los permisos: cp -ax origen destino»
    echo » – Mostrar repositorios activos: grep -i ppa.launchpad.net /etc/apt/sources.list.d/*.list»
    echo » – Agregar un repositorio: apt-add-repository ppa:repositorio»
    echo » – PARA VER MAS COMANDOS cutil»
    echo » – PARA MOSTRAR LOS ALIAS lsalias»
    printf %130s |tr » » «=»
    echo «»
    echo «»
    #PS1=»[\e[33;1m]┌─( [\e[34;1m]\u@\h[\e[37;1m] ) * * * * \d – \t * * * * { [\e[31;1m]\w[\e[33;1m] }\n└──┤ [\e[32m]# »
    PS1=»[\e[33;1m]┌─([\e[34;1m]\u@\h[\e[37;1m])>{ [\e[31;1m]\w[\e[33;1m] }\n└──┤ [\e[32m]# «

    1.    abaddon s dijo

      porqué mejor no escribes tu propio artículo?

  4.   abaddon s dijo

    ESTOS SON LOS TUTORIALES QUE ME GUSTAN !!!!!!!!!

  5.   Ing. Jose Albert dijo

    Bueno, me alegro mucho que les haya gustado y servido!

    Mañana espero publicar otro articulo! Pendientes.

  6.   user-arch dijo

    Saludos y gratitud infinita por compartir esa información.
    No tengo mucho de conocimeinto acerca de la administración del GNU/Linux(solo soy un empirico y curioso usuario sin formación academica), pero recuerdo haber leido en alguna web sobre problemas de seguridad con escalada de privilegios; algunos comandos y tuberias en el scrip .bashrc, me parece podrian facilitar el trabajo de un hacker o cracker.
    Respetuosamente y muy agradecido.

  7.   Ing. Jose Albert dijo

    Con Shell Scripting optimizar el terminal es sencillo, mira hasta donde se puede llegar haciendo un buen Shell Scripting.

    ScreenCast de Testeo del LPI-SB8 (LINUX POST INSTALL – SCRIPT BICENTENARIO 8.0.0)
    (lpi_sb8_adecuación-audiovisual_2016.sh / 43Kb)

    Ver Screencast: https://www.youtube.com/watch?v=cWpVQcbgCyY

  8.   Lea dijo

    Gran tutorial! Algún libro que recomiendes de linux para aprender bien shell scripting, configuraciones, seguridad de servers? Gracias