El Shell Scripting, Es refereix a la execució d'ordres complexes sobre el Terminal (Consola) de GNU / Linux, és molt útil per automatitzar activitats rutinàries i importants dins del nostre Sistema Operatiu GNU / Linux, el que permet optimitzar els nostres Recursos i Temps, és a dir, amb la qual aquí contingut explorarem com des del terminal podem executar ordres de comandament manuals que després ens permetin programar / automatitzar activitats sobre un equip estalviant Hores / Labor d'execució manual o presencial, implementant aquestes ordres en un Script de Bash Shell o compatible i explicat d'una manera, practica i senzilla.
Abastarem com a una sola ordre de comandament Podem extreure i mostrar valors / informació de el Sistema Operatiu / Maquinari, Que després puguem implementar dins d'un Script de Bash Shell per automatitzar una tasca específica. Concentrant-nos en les Millors Pràctiques (Best Practices) necessàries per obtenir un excel·lent disseny d'un Script de la manera més eficient i practica.
—————————————————————-
Obtenir el nom de el primer usuari en el sistema:
—————————————————————-
USER_1000=$(cat /etc/passwd | grep 1000 | cut -d: -f1) ; echo $USER_1000
USER_1001=$(cat /etc/passwd | grep 1001 | cut -d: -f1) ; echo $USER_1001
————————————————————————
Obtenir la ruta del / home de el primer usuari en el sistema:
————————————————————————
USER_1000=$(cat /etc/passwd | grep 1000 | cut -d: -f1) ; HOME_USER_1000=/home/$USER_1000 ; echo $HOME_USER_1000
USER_1001=$(cat /etc/passwd | grep 1001 | cut -d: -f1) ; HOME_USER_1001=/home/$USER_1001 ; echo $HOME_USER_1001
-------------
Comprovar la Data actual de l'Equip:
-------------
FECHA_ACTUAL=$(date +"%d %b %y") ; echo $FECHA_ACTUAL
------------
Comprovar l'Hora actual de l'Equip:
------------
HORA_ACTUAL=$(date +"%H:%M") ; echo $HORA_ACTUAL
——————————————————
Comprovar si el Host té connexió a Internet:
——————————————————
if ping -c 1 8.8.8.8 &> /dev/null; then CONEXION_INTERNET=Habilitado; else CONEXION_INTERNET=Deshabilitado; fi ; echo $CONEXION_INTERNET
TEST_PING=$(ping 192.168.3.249 -c 5 | grep packet | awk '{print $6}' | cut -f1 -d%) ; echo $TEST_PING % de Perdida de paquetes
TEST_LATENCIA=$(ping 8.8.8.8 -c 5 | grep packet | awk '{print $10}' | cut -f1 -d%) ; echo $TEST_LATENCIA de Latencia del Enlace
-------------
Comprovar el tipus de sistema operatiu:
-------------
SISTEMA_OPERATIVO=$(uname -o) ; echo $SISTEMA_OPERATIVO
----------------------
Comprovar el nom, versió i subversió de el Sistema Operatiu:
----------------------
NOMBRE_SISTEMA=$(cat /etc/os-release | grep NAME | grep -v "VERSION" | sed -n '2p' | cut -f2 -d\") ; echo $NOMBRE_SISTEMA
VERSION_SISTEMA=$(cat /etc/os-release | grep VERSION= | sed -n '1p' | sed 's/VERSION=//' | sed 's/"//g') ; echo $VERSION_SISTEMA
SUBVERSION_SISTEMA=$(lsb_release -d | awk '{print $4}') ; echo $SUBVERSION_SISTEMA
----------------
Comprovar l'arquitectura de el Sistema Operatiu:
----------------
ARQUITECTURA=$(uname -m) ; echo $ARQUITECTURA
ARQUITECTURA=$(uname -m) ; if [[ "$ARQUITECTURA" = "x86" ]]; then ARQ_SISTEMA=32; else ARQ_SISTEMA=64; fi ; echo $ARQ_SISTEMA
------------------
Comprovar la versió de el nucli de el Sistema Operatiu:
------------------
VERSION_KERNEL=$(uname -r) ; echo $VERSION_KERNEL
----------
Comprovar el nom de l'Host:
----------
NOMBRE_HOST=$(cat /etc/hostname) ; echo $NOMBRE_HOST
----------------------
Comprovar IP Interna i Externa (Principal de Sortida a Internet):
----------------------
IP_INTERNA=$(hostname -I) ; echo $IP_INTERNA
IP_EXTERNA=$(curl -s ipecho.net/plain;echo) ; echo $IP_EXTERNA
------------------
Comprovar Valors (IP / MAC) de les Interfícies de Xarxa:
------------------
IP_ETH0=$(ifconfig eth0 | grep inet | grep -v inet6 | cut -d ":" -f 2 | cut -d " " -f 1) ; echo $IP_ETH0
MAC_ETH0=$(ifconfig eth0 | sed -n '1p' | awk '{print $5}') ; echo $MAC_ETH0
IP_WLAN0=$(ifconfig wlan0 | grep inet | grep -v inet6 | cut -d ":" -f 2 | cut -d " " -f 1) ; echo $IP_WLAN0
MAC_WLAN0=$(ifconfig wlan0 | sed -n '1p' | awk '{print $5}') ; echo $MAC_WLAN0
——————————————————
Comprovar el Proxy / Gateway de el Sistema Operatiu:
——————————————————
PROXY_GATEWAY=$(route -n | sed -n '3p' | awk '{print $2}') ; echo $PROXY_GATEWAY
——————————————————
Comprovar el Nom de Domini de Xarxa de l'Host:
——————————————————
DOMINIO=$(cat /etc/resolv.conf | sed '2 d' | grep search | sed -n '1p' | awk '{print $2}') ; echo $DOMINIO
---------------------
Comprovar la localització de xarxa (IP) de el Servidor DNS de l'Host:
---------------------
IP_SERVIDOR_DNS=$(cat /etc/resolv.conf | sed '1 d' | awk '{print $2}') ; echo $IP_SERVIDOR_DNS
-------------
Comprovar usuaris connectats a l'Host:
-------------
who>/tmp/who ; echo -e "Usuarios conectados al Host :" && echo "" && echo "Usuarios Puertos Fecha Hora Pantalla" ; echo "*************************************************************************" && cat /tmp/who
USUARIOS_CONECTADOS=$(who | awk '{print $1}') ; echo $USUARIOS_CONECTADOS
USER_ONLINE1=$(who | awk '{print $1}') ; echo $USER_ONLINE1 | wc -w
USER_ONLINE2=$(top -n 1 -b | grep "load average:" | awk '{print $6}') ; echo $USER_ONLINE2
———————————————————————————————————
Comprovar Carpeta d'Usuari amb més data (# d'arxius / Espai ocupat al Bytes) en el Sistema Operatiu:
----------------------------------
CARPETA_USUARIO1=$(ls -l /home | sed '1 d' | sort -k2 | sed q | awk '{print $9}') ; echo $CARPETA_USUARIO1
DATA_USUARIO1=$(du -sh /home/* | sort -r | sed q | awk '{print $1}') ; echo $DATA_USUARIO1
------------------------------
Comprovar Grandària en Bytes de Carpeta d'superusuari o una altra Carpeta de el Sistema Operatiu:
------------------------------
DATA_ROOT=$(du -sh /root | awk '{print $1}') ; echo $DATA_ROOT
DATA_CARPETA1=$(du -sh /var | awk '{print $1}') ; echo $DATA_CARPETA1
--------------------
Comprovar Carpetes d'usuaris creats (Noms i Números):
--------------------
NOMBRES_CARPETAS=$(ls -l /home | sed '1 d' | awk '{print $9}') ; echo $NOMBRES_CARPETAS
NUMERO_CARPETAS=$(ls -l /home | sed '1 d' | awk '{print $9}') ; echo $NUMERO_CARPETAS | wc -w
---------------------
Comprovar Usuaris amb UID 0 I GID 0 (superusuaris) creats:
---------------------
SUPERUSUARIOS_UID=$(awk -F: '{if ($3==0) print $1}' /etc/passwd) ; echo $SUPERUSUARIOS_UID
SUPERUSUARIOS_GID=$(awk -F: '{if ($3==0) print $1}' /etc/passwd) ; echo $SUPERUSUARIOS_GID
——————————————
Comprovar estat de la Memòria RAM i swap:
——————————————
MEM_TOTAL=$(free -h | sed '1 d' | grep Mem: | awk '{print $2}') ; echo $MEM_TOTAL
MEM_USADA=$(free -h | sed '1 d' | grep Mem: | awk '{print $3}') ; echo $MEM_USADA
MEM_LIBRE=$(free -h | sed '1 d' | grep Mem: | awk '{print $4}') ; echo $MEM_LIBRE
MEM_COMPARTIDA=$(free -h | sed '1 d' | grep Mem: | awk '{print $5}') ; echo $MEM_COMPARTIDA
MEM_ALMACENADA=$(free -h | sed '1 d' | grep Mem: | awk '{print $6}') ; echo $MEM_ALMACENADA
MEM_CACHEADA=$(free -h | sed '1 d' | grep Mem: | awk '{print $7}') ; echo $MEM_CACHEADA
SWAP_TOTAL=$(free -h | sed '1 d' | grep Swap: | awk '{print $2}') ; echo $SWAP_TOTAL
SWAP_USADA=$(free -h | sed '1 d' | grep Swap: | awk '{print $3}') ; echo $SWAP_USADA
SWAP_LIBRE=$(free -h | sed '1 d' | grep Swap: | awk '{print $4}') ; echo $SWAP_LIBRE
------------------------
Comprovar Estat de les particions / punt de muntatge d'un Disc SATA:
------------------------
PART1_TOTAL=$(df -h | sed '1 d' | grep /dev/sda5 | awk '{print $2}') ; echo $PART1_TOTAL
PART1_USADO=$(df -h | sed '1 d' | grep /dev/sda5 | awk '{print $3}') ; echo $PART1_USADO
PART1_DISPONIBLE=$(df -h | sed '1 d' | grep /dev/sda5 | awk '{print $4}') ; echo $PART1_DISPONIBLE
PART1_PORCENTAJE=$(df -h | sed '1 d' | grep /dev/sda5 | awk '{print $5}') ; echo $PART1_PORCENTAJE
PART1_PUNTOMONTAJE=$(df -h | sed '1 d' | grep /dev/sda5 | awk '{print $6}') ; echo $PART1_PUNTOMONTAJE
---------------------
Comprovar la Càrrega mitjana de l'Sistema (Processos encolats):
---------------------
CARGA_1MIN=$(top -n 1 -b | grep "load average:" | awk '{print $10}' | sed 's/,//2') ; echo $CARGA_1MIN
CARGA_5MIN=$(top -n 1 -b | grep "load average:" | awk '{print $11}' | sed 's/,//2') ; echo $CARGA_5MIN
CARGA_15MIN=$(top -n 1 -b | grep "load average:" | awk '{print $12}' | sed 's/,//2') ; echo $CARGA_15MIN
CARGA_1MIN=$(uptime | awk '{print $8}' | sed 's/,//2') ; echo $CARGA_1MIN
CARGA_5MIN=$(uptime | awk '{print $9}' | sed 's/,//2') ; echo $CARGA_5MIN
CARGA_15MIN=$(uptime | awk '{print $10}' | sed 's/,//2') ; echo $CARGA_15MIN
——————————————————
Comprovar processos Zombies en el Sistema Operatiu:
——————————————————
PROC_ZOMBIE=$(top -n 1 -b | grep "zombie" | awk '{print $10}') ; echo $PROC_ZOMBIE
---------------------
Comprovar el Temps de Total de Treball (Arrencada / Encesa):
---------------------
TIEMPO_ENCENDIDO=$(uptime | awk '{print $3,$4}' | cut -f1 -d,) ; echo $TIEMPO_ENCENDIDO
---------------
Comprovar paràmetres de la targeta de Vídeo:
---------------
============
Fabricant:
FAB_TVIDEO=$(lspci -v | grep "VGA" | cut -d " " -f05) ; echo $FAB_TVIDEO
============
Memòria RAM:
MEM_TVIDEO=$(lspci -v -s `lspci | awk '/VGA/{print $1}'` | sed -n '/Memory.*, prefetchable/s/.*\[size=\([^]]\+\)M\]/\1/p') ; echo $MEM_TVIDEO
================
Mòdul (Driver):
DRV_TVIDEO=$(lspci -nnk | grep -i vga -A3 | grep 'in use' | cut -d " " -f05) ; echo $DRV_TVIDEO
===============
Acceleració 3D:
A3D_TVIDEO=$(glxinfo | grep "direct rendering: Yes" | awk '{print $3}') ; echo $A3D_TVIDEO
——————————————
Comprovar paràmetres de l'Processador (CPU):
——————————————
===========
Fabricant:
FABRICANTE_CPU=$(grep "vendor_id" /proc/cpuinfo | sed q | awk '{print $3}') ; echo $FABRICANTE_CPU
=======
Model:
MODELO_CPU=$(grep "model name" /proc/cpuinfo | sed q | cut -d ":" -f 2 | awk '{print $0}') ; echo $MODELO_CPU
=========
Quantitat:
NUM_CPU=$(grep "processor" /proc/cpuinfo | sort -r | sed q | awk '{print $3}') ; TOTAL_CPU=$((`expr $NUM_CPU + 1`)) ; echo $TOTAL_CPU
================
Nuclis per CPU:
NUCLEO_CPU=$(grep "cpu cores" /proc/cpuinfo | sed q | awk '{print $4}') ; echo $NUCLEO_CPU
==========================
Total d'Nuclis per CPU:
NUM_CPU=$(grep "processor" /proc/cpuinfo | sort -r | sed q | awk '{print $3}') ; TOTAL_CPU=$((`expr $NUM_CPU + 1`)) ; NUCLEO_CPU=$(grep "cpu cores" /proc/cpuinfo | sed q | awk '{print $4}') ; TOTAL_NUCLEO_CPU=$((`expr $TOTAL_CPU \* $NUCLEO_CPU`)) ; echo $TOTAL_NUCLEO_CPU
======================
Memòria cau de l'CPU:
CACHE_CPU=$(grep "cache size" /proc/cpuinfo | sed q | cut -d ":" -f 2 | awk '{print $0}') ; echo $CACHE_CPU
Espero que aquests petits "Tips" els facilitin realitzar optimitzacions bàsiques però útils, que en general només estan reservades per a persones expertes en Tecnologia, Informàtica, Programari Lliure i GNU / Linux.
Pantallazos de EXEMPLES
RECORDATORI: Si alguna línia de comanda no se li executa o mostra el valor correcte, assegureu-vos de provar manualment cada secció de l'ordre de comanda per intentar ajustar els valors o sintaxi d'algunes variables.
Moltes gràcies.
Molt útil.
Molt bo, gràcies.
Un plaer col·laborar! Aviat muntaré molts més sobre l'ús de l'Shell Scripting en casos molt pràctics.
Molt bo enginyer! Tant de bo hi hagi més articles de Shell Scripting.
Excel·lents les ordres allà mostrats i de gran utilitat.
Gràcies per la valuosa informació; però en el meu cas alguns comandaments no donen el resultat esperat, per exemple la comanda «who» i «w» no mostren res; això em va ocórrer des que vaig fer alguna actualització de sistema (ús ArchLinux amb gestor d 'accés «lxdm» i entorn gràfic «xfce 4.12»). Alguna idea del que passa (el resultat és el mateix i tot si ús user root).
Gràcies.
Els agradaria un Sistema expert fet amb Shell Scripting que a sol·licitud els generarà l'extracció de tots els paràmetres de sistema en forma d'un informe.
Un exemple del que es pot fer amb Shell Scripting:
Screencast de Test de l'LPI-SB8 (LINUX POST INSTALL - SCRIPT BICENTENARI 8.0.0)
(Lpi_sb8_adecuación-audiovisual_2016.sh / 43Kb)
Veure Screencast: https://www.youtube.com/watch?v=cWpVQcbgCyY