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.
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.
Índice
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.: <"$NOMBRE_SISTEMA"> / <"$VERSION_SISTEMA"> "
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 &> /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:
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
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)
Desde que vi este alias el año pasado en Reddit a sido mi favorito:
alias fuck=’sudo $(history -p !!)’
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]# «
porqué mejor no escribes tu propio artículo?
ESTOS SON LOS TUTORIALES QUE ME GUSTAN !!!!!!!!!
Bueno, me alegro mucho que les haya gustado y servido!
Mañana espero publicar otro articulo! Pendientes.
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.
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
Gran tutorial! Algún libro que recomiendes de linux para aprender bien shell scripting, configuraciones, seguridad de servers? Gracias