El Shell Scripting, Refere-se ao execução de ordens complexas em Terminal GNU / Linux (console), é muito útil para automatizar atividades rotineiras e importantes dentro de nosso Sistema operacional GNU / Linux, o que nos permite otimizar nosso Recursos e tempo, ou seja, com o que está contido aqui, vamos explorar como a partir do terminal podemos executar ordens de comando manuais que nos permitem agendar / automatizar atividades sobre economia de equipe Horas / Trabalho de execução manual ou presencial, implementando os referidos pedidos em Bash Shell Script ou compatível e explicado de forma prática e simples.
Vamos cobrir como em um único comando de comando nós extrair e exibir valores / informações do sistema operacional / hardware, que podemos implementar em um Script Bash Shell para automatizar uma tarefa específica. Focando no Melhores Práticas necessário para obter um excelente desenho de um Script no caminho mais eficiente e prático.
--------------------
Pegue o nome do primeiro usuário criado no 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
——————————————————————
Obtenha o caminho / home do primeiro usuário criado no 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
-------------
Verifique a data atual do equipamento:
-------------
FECHA_ACTUAL=$(date +"%d %b %y") ; echo $FECHA_ACTUAL
------------
Verifique o tempo atual do equipamento:
------------
HORA_ACTUAL=$(date +"%H:%M") ; echo $HORA_ACTUAL
———————————————–
Verifique se o Host tem uma conexão com 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
-------------
Verifique o tipo de sistema operacional:
-------------
SISTEMA_OPERATIVO=$(uname -o) ; echo $SISTEMA_OPERATIVO
----------------------
Verifique o nome, a versão e a subversão do sistema operacional:
----------------------
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
----------------
Verifique a arquitetura do Sistema Operacional:
----------------
ARQUITECTURA=$(uname -m) ; echo $ARQUITECTURA
ARQUITECTURA=$(uname -m) ; if [[ "$ARQUITECTURA" = "x86" ]]; then ARQ_SISTEMA=32; else ARQ_SISTEMA=64; fi ; echo $ARQ_SISTEMA
------------------
Verifique a versão do kernel do sistema operacional:
------------------
VERSION_KERNEL=$(uname -r) ; echo $VERSION_KERNEL
----------
Verifique o nome do host:
----------
NOMBRE_HOST=$(cat /etc/hostname) ; echo $NOMBRE_HOST
----------------------
Verifique o IP interno e externo (saída principal da Internet):
----------------------
IP_INTERNA=$(hostname -I) ; echo $IP_INTERNA
IP_EXTERNA=$(curl -s ipecho.net/plain;echo) ; echo $IP_EXTERNA
------------------
Verifique os valores (IP / MAC) das interfaces de rede:
------------------
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
—————————————————
Verifique o proxy / gateway do sistema operacional:
—————————————————
PROXY_GATEWAY=$(route -n | sed -n '3p' | awk '{print $2}') ; echo $PROXY_GATEWAY
———————————————–
Verifique o nome de domínio da rede do host:
———————————————–
DOMINIO=$(cat /etc/resolv.conf | sed '2 d' | grep search | sed -n '1p' | awk '{print $2}') ; echo $DOMINIO
—————————————————————
Verifique o endereço de rede (IP) do servidor DNS host:
—————————————————————
IP_SERVIDOR_DNS=$(cat /etc/resolv.conf | sed '1 d' | awk '{print $2}') ; echo $IP_SERVIDOR_DNS
-------------
Verifique os usuários conectados ao 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
---------------------------------
Verifique a pasta do usuário com mais dados (nº de arquivos / tamanho em bytes) no sistema operacional:
----------------------------------
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
————————————————————————
Verifique o tamanho em bytes da pasta do superusuário ou outra pasta do sistema operacional:
————————————————————————
DATA_ROOT=$(du -sh /root | awk '{print $1}') ; echo $DATA_ROOT
DATA_CARPETA1=$(du -sh /var | awk '{print $1}') ; echo $DATA_CARPETA1
--------------------
Verifique as pastas de usuário criadas (nomes e 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
—————————————————————
Verifique os usuários com UID 0 e GID 0 (SUPERUSERS) criados:
—————————————————————
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
--------------
Verifique o status da RAM e memória 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
------------------------
Verifique o status das partições / ponto de montagem de um disco 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
—————————————————————
Verifique a carga média do sistema (processos em fila):
—————————————————————
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
—————————————————
Verifique os processos de zumbis no sistema operacional:
—————————————————
PROC_ZOMBIE=$(top -n 1 -b | grep "zombie" | awk '{print $10}') ; echo $PROC_ZOMBIE
—————————————————————
Verifique o tempo total de trabalho (iniciar / ligar):
—————————————————————
TIEMPO_ENCENDIDO=$(uptime | awk '{print $3,$4}' | cut -f1 -d,) ; echo $TIEMPO_ENCENDIDO
---------------
Verifique os parâmetros da placa de vídeo:
---------------
============
Fabricante:
FAB_TVIDEO=$(lspci -v | grep "VGA" | cut -d " " -f05) ; echo $FAB_TVIDEO
============
RAM:
MEM_TVIDEO=$(lspci -v -s `lspci | awk '/VGA/{print $1}'` | sed -n '/Memory.*, prefetchable/s/.*\[size=\([^]]\+\)M\]/\1/p') ; echo $MEM_TVIDEO
================
Módulo (Driver):
DRV_TVIDEO=$(lspci -nnk | grep -i vga -A3 | grep 'in use' | cut -d " " -f05) ; echo $DRV_TVIDEO
===============
Aceleração 3D:
A3D_TVIDEO=$(glxinfo | grep "direct rendering: Yes" | awk '{print $3}') ; echo $A3D_TVIDEO
--------------
Verifique os parâmetros do processador (CPU):
--------------
===========
Fabricante:
FABRICANTE_CPU=$(grep "vendor_id" /proc/cpuinfo | sed q | awk '{print $3}') ; echo $FABRICANTE_CPU
=======
Modelo:
MODELO_CPU=$(grep "model name" /proc/cpuinfo | sed q | cut -d ":" -f 2 | awk '{print $0}') ; echo $MODELO_CPU
=========
Quantidade:
NUM_CPU=$(grep "processor" /proc/cpuinfo | sort -r | sed q | awk '{print $3}') ; TOTAL_CPU=$((`expr $NUM_CPU + 1`)) ; echo $TOTAL_CPU
================
Núcleos por CPU:
NUCLEO_CPU=$(grep "cpu cores" /proc/cpuinfo | sed q | awk '{print $4}') ; echo $NUCLEO_CPU
==========================
Total de núcleos por CPUs:
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 cache da CPU:
CACHE_CPU=$(grep "cache size" /proc/cpuinfo | sed q | cut -d ":" -f 2 | awk '{print $0}') ; echo $CACHE_CPU
Espero que esses pequeninos "Dicas" torna mais fácil para eles realizar otimizações básicas, mas úteis, que geralmente são reservadas apenas para especialistas em Tecnologia, Computação, Software Livre e GNU / Linux.
EXEMPLO DE TELAS
LEMBRETE: Se alguma linha de comando falhar na execução ou exibir o valor correto, teste manualmente cada seção do prompt de comando para tentar ajustar os valores ou a sintaxe de algumas variáveis.
Muito obrigado.
Muito útil.
Muito bem, obrigado.
É um prazer colaborar! Em breve irei montar muitos mais sobre o uso de Shell Scripting em casos muito práticos.
Muito bom engenheiro! Esperançosamente, existem mais artigos sobre scripts de Shell.
Os comandos mostrados aqui são excelentes e muito úteis.
Obrigado pelas informações valiosas; mas no meu caso alguns comandos não dão o resultado esperado, por exemplo o comando "who" e "w" não mostram nada; Isso tem acontecido comigo desde que fiz algumas atualizações de sistema (eu uso o archlinux com gerenciador de tela "lxdm" e ambiente gráfico "xfce 4.12"). Alguma ideia do que acontece (o resultado é o mesmo mesmo que eu use o usuário root).
Obrigado.
Desejam um Sistema especialista feito com Shell Scripting que mediante solicitação gere a extração de todos os parâmetros do sistema em forma de Relatório.
Um exemplo do que pode ser feito com Shell Scripting:
LPI-SB8 Test ScreenCast (LINUX POST INSTALL - SCRIPT BICENTENARIO 8.0.0)
(lpi_sb8_adaptation-audiovisual_2016.sh / 43Kb)
Veja o Screencast: https://www.youtube.com/watch?v=cWpVQcbgCyY