Com extreure paràmetres des del Terminal aplicant Shell Scripting

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.

Selección_007

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

jalbert: bash - Konsole_008

jalbert: bash - Konsole_009

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.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Eduardo va dir

    Moltes gràcies.

    Molt útil.

  2.   HO2Gi va dir

    Molt bo, gràcies.

  3.   Eng. Jose Albert va dir

    Un plaer col·laborar! Aviat muntaré molts més sobre l'ús de l'Shell Scripting en casos molt pràctics.

  4.   cr0t0 va dir

    Molt bo enginyer! Tant de bo hi hagi més articles de Shell Scripting.

  5.   Francisco Tovar va dir

    Excel·lents les ordres allà mostrats i de gran utilitat.

  6.   userarch va dir

    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.

  7.   Eng. Jose Albert va dir

    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