Status do sistema

Publicado por Pedro Fernandes (última atualização em 24/07/2019)

[ Hits: 1.826 ]

Download status

Download 1561441124.status (versão 2)




Script para mostrar o status do sistema:

Espaço em disco; df
Espaço ocupado pelos diretórios e ficheiros; du
Memória; free
Temperatura da cpu; sensors
Tempo e carga do sistema; uptime
Conexão ou banda atual de download e upload; speedtest-cli ou simples ping

Pode tanto ser usado como usuário normal, como pelo root.
Pode imprimir a informação na tela ou armazenar em arquivo de texto para análise posterior.

  



Versões atualizadas deste script

Versão 2 - Enviado por Pedro Fernandes em 25/06/2019

Changelog: Script status versão 1.1 (final)
Changelog:
Uma pequena e única mudança:

Função "conect"; linhas 116 e 117 (no meu editor)
Se o ping dá erro, não segue mais com o resto da função, pois se dá erro não vale
a pena testar velocidade de download/upload.
Sendo assim adicionei um "sleep 3" e logo de seguida um "return", para nem tentar
usar o speedtest, e ao invés disso saltar para a próxima função.

Download 1561441124.status


Esconder código-fonte

#!/bin/bash

######################################################################
#
# status : script para mostrar o status do sistema:
# 
# Espaço em disco; df
# Espaço ocupado pelos diretorios e ficheiros; du
# Memoria; free
# Temperatura da cpu; sensors
# Tempo e carga do sistema; uptime
# Conexão ou banda atual de download e upload; speedtest-cli ou simples ping
#
# Pode tanto ser usado como usuário normal, como pelo root
#
# Pedro Fernandes
#
#######################################################################

#######################################################################
#
# Constantes
PROGRAMA="$(basename "$0")"
DATA="$(date "+%d-%m-%Y %H:%M" )"
TITLE="Relatório do sistema para $HOSTNAME"
GERADO="Relatório gerado: $DATA, por $USER"
#
#######################################################################

#######################################################################
#
# Funções

# ajuda
usg () {
   echo -e "\n$PROGRAMA: uso: $PROGRAMA [ -f ] [ -h ].

Script que analisa o status do sistema:

Espaço ocupado em disco;
Espaço ocupado por arquivos no HOME;
Memória livre, ocupada em cache/buffer;
Temperatura do sistema;
Tempo de atividade e carga média do sistema;
Conexão com o ping, ou banda de download e upload (tem que ter programa speedtest-cli).

Se o script for chamado com o parâmetro [ -f ], o script enviará a saída
para um arquivo de texto no seu HOME chamado "/home/usuario/status.txt", ou,
"/root/status_root.txt", caso o script seja rodado como usuário root.
Se o script for chamado com o parâmetro [ -h ], então este mesmo texto
será mostrado.
Caso o script seja chamado sem parâmetro algum, então a saída simplesmente
será exibida na tela."
   exit
}   

# Tempo e carga
tempo_carga () {
   echo -e "\nTempo e carga média do sistema:"
   cat <<- _EOF_
      $(uptime)
   _EOF_
      return
}

#  Espaço em disco
disk_usage () {
   echo -e "\nEspaço ocupado em disco:"
   cat <<- _EOF_
      $(df -h)
   _EOF_
      return
}

# Espaço do home
home_space () {
   local format="%8s%10s%10s\n"
   local i dir_list total_files total_dirs total_size user_name
   
   
   if [[ "$(id -u)" -eq 0 ]]; then
      dir_list=/home/*
      user_name="Todos os usuários"
   else
      dir_list="$HOME"
      user_name="$USER"
   fi
   
   
   echo -e "\nUtilização de espaço no HOME ($user_name):"
   
   for i in $dir_list; do
   
      total_files="$(find "$i" -type f 2>/dev/null | wc -l)"
      total_dirs="$(find "$i" -type d 2>/dev/null | wc -l)"
      total_size="$(du -sh "$i" 2>/dev/null | cut -f 1)"
      
      
      echo -e "\n$i"
      printf "$format" "Diretórios" "Arquivos" "Tamanho"
      printf "$format" "--------------" "------------" "-------------"
      printf "$format" "$total_dirs" "$total_files" "$total_size"
   done
   return
}

#conexão
conect () {
   echo -e "\nConexão......."
   if ! ping -c2 www.google.com &>/dev/null; then
      echo -e "\nParece estar desconectado[a].....
Não iremos proseguir com o teste."
   else
      echo -e "\nConexão encontrada........."
   fi
      
   if [[ -n "$(which speedtest-cli)" ]]; then
      echo -e "\nVelocidade de download e upload, (speedtest-cli)......"
      speedtest-cli
   else
      echo -e "\nQualidade da connexão usando o ping......."
      ping -c5 www.google.com
   fi
   return
}

# Memória livre e ocupada
mem () {
   echo -e "\nMemória total, ocupada e livre:"
   cat <<- _EOF_
      $(free -h)
   _EOF_
      sleep 3
      return
}

# Temperatura
temp () {
   echo -e "\nTemperatura atual:"
   cat <<- _EOF_
      $(sensors)
   _EOF_
      return
}

# Chamando as funções
prog () {
   echo -e "\n$TITLE"
   echo -e "\n$GERADO"
   tempo_carga
   disk_usage
   home_space
   conect
   mem
   temp
}
#
######################################################################

######################################################################
#
# Programa
if [[ -z "$1" ]]; then
   prog
   echo -e "\nFinalizamos por aqui......"
   sleep 3
   exit
fi

# Se tem parâmetro qual foi?
if [[ -n "$1" ]]; then
   case "$1" in
      -f)   arquivo=1
         ;;
      -h)   usg
         exit
         ;;
      *)   usg
         exit 1
         ;;
   esac
fi

# Tratando do parâmetro "-f (arquivo)"
if [[ -n "$arquivo" ]]; then
   if [[ "$(id -u)" -eq 0 ]]; then
      echo -e "\nAguarde enquanto criamos o arquivo com os dados......
      
Pode demorar um pouco......"
      prog &>/root/status_root.txt
      echo -e "\nArquivo salvo em /root/status_root.txt."
   else
      echo -e "\nAguarde enquanto criamos o arquivo com os dados......
      
Pode demorar um pouco......"
      prog &>/home/$USER/status.txt
      echo -e "\nArquivo salvo em /home/$USER/status.txt."
   fi
   sleep 2
   echo -e "\nSaíndo agora do programa......"
fi
#
######################################################################      
#      

exit

Scripts recomendados

Sistema de Gestão de Protocolos em YAD

Script de Inventário

Servidor de ISO via samba

Compartilhamento NAT

Brincando com recursividade


  

Comentários
[1] Comentário enviado por albfneto em 01/08/2019 - 19:51h

Acabo de testar seu interessante e ótimo Script, no meu Sabayon.
Eis a saída do comando:

http://pastebin.zone/v5ZjHvgs

Só minha rede não foi detectada, talvez porque seja da Faculdade, da USP, uma cabeada de IP estático.

¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].

[2] Comentário enviado por sabe nada em 01/08/2019 - 21:54h


[1] Comentário enviado por albfneto em 01/08/2019 - 19:51h

Acabo de testar seu interessante e ótimo Script, no meu Sabayon.
Eis a saída do comando:

http://pastebin.zone/v5ZjHvgs

Só minha rede não foi detectada, talvez porque seja da Faculdade, da USP, uma cabeada de IP estático.

¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].


Boa noite.
Na função que testa a conexão, pode experimentar substituir o código: "if ! ping -c2 www.google.com", por "if ! ping -c2 8.8.8.8".
Eu uma vez rodei o script no meu pc e não testou a minha conexão, e depois vi que era porque não estava conseguindo fazer a resolução do nome, então mudei para testar pelo ip e funcionou.
Não sei se será isso. Infelizmente rede não é o meu forte kkk. Mas pode tentar. Aliás eu queria enviar ele atualizado para incluir esta mudança, mas como já escrevi no changelog que era a versão final, tenho medo que não mo aceitem kkk.
Emfim, fico feliz que tenha gostado do script.
Obrigado.

[3] Comentário enviado por sabe nada em 01/08/2019 - 22:13h


[1] Comentário enviado por albfneto em 01/08/2019 - 19:51h

Acabo de testar seu interessante e ótimo Script, no meu Sabayon.
Eis a saída do comando:

http://pastebin.zone/v5ZjHvgs

Só minha rede não foi detectada, talvez porque seja da Faculdade, da USP, uma cabeada de IP estático.

¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].


Também não deve ser o caso.
Mas caso estejam bloqueando aí na rede o ping (echo-request) ou a resposta (echo-reply), vai falar que não tem conexão.

[4] Comentário enviado por albfneto em 06/08/2019 - 20:44h

deve ser proteção, pq um comando "ping www.google.com.br"; como usuário comum, me retorna: operation not permitted

mas o seu script roda muito bem como root:

http://pastebin.zone/SZSh4FtW

Tá favoritado. Muito bom!

¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].

[5] Comentário enviado por sabe nada em 07/08/2019 - 20:54h

Bom. Nesse caso, a única coisa que me vem á mente, (e não falo com propriedade, pois sou novinho no mundo Linux), é que o comando ping não esteja no PATH do usuário "comum".
De qualquer forma fico feliz que tenha gostado do script.

[6] Comentário enviado por albfneto em 09/08/2019 - 16:29h

é bem curioso, vou checar e ver se descubro, porque o problema não é o PATH. Observe que o ping está no /bin:

cd / && locate ping | more
/bin/arping
/bin/ping

e /bin está no PATH do root e do usuário:

$ echo $PATH albfneto | grep /bin
/usr/lib/llvm/8/bin:/usr/lib/llvm/7/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/home/albfneto/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin albfneto

$ echo $PATH root /grep /bin
echo $PATH root | grep /bin
/usr/lib/llvm/8/bin:/usr/lib/llvm/7/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/home/albfneto/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin root

AMIGO ACHEI O PROBLEMA:

No Sabayon, o Root tá no Grupo bin, mas o usuário normal, não... Observe:

$ groups root
root bin daemon sys adm disk wheel floppy tape video

$ groups albfneto
lp wheel audio cdrom video cdrw usb users portage messagebus lpadmin plugdev entropy scanner games vboxguest vboxsf network storage vboxusers polkituser bumblebee albfneto

Adicionei meu usuário ao grupo bin :

https://www.vivaolinux.com.br/dica/Adicionando-ou-excluindo-um-usuario-de-um-grupo

, e rodei o script como usuário comum... FUNCIONOU! Apenas, depois removi meu usuário do bin, deixei como estava. Vai saber se interfere com algum aplicativo meu, no futuro.

Parabéns pelo seu Script bacana. Ele funciona perfeitamente. O meu teste pode ser informativo para vc, pois assim vc sabe que seu script funciona em Linux não Debian. Porque o meu Linux, Sabayon é um Gentoo. Quanto eu estiver nele, vou testar no OpenSUSE.







¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].

[7] Comentário enviado por sabe nada em 10/08/2019 - 16:06h

Ainda bem que descobriu o problema.
Caramba, que eu já estava ficando encabulado com isso, procurei e procurei e não achava motivo. kkk.
E obrigado por compartilhar a resolução. No meu slackware roda perfeitamente, mas é bom saber como resolver se por um acaso algum dia der problema.

[8] Comentário enviado por sabe nada em 10/08/2019 - 16:25h

Só mais uma coisa amigo.
Agora que vi que o problema era o usuário "comum" não estar no grupo bin, fiquei estranhando, pois no meu slackware o meu usuário comum
também não está no grupo bin e rodo perfeitamente normal como usuário comum o script.
Então dei um "cat /etc/groups" e vi que apenas o root que pertence ao grupo bin. Depois dei um "ls -l /bin/ping" e verifiquei que no meu slacware o ping está com
o setuid marcado (acho que se chama assim...), sendo assim acho que é por isso que consigo rodar o ping normal.
Talvez o seu ping não tenha o setuid marcado. Sendo assim você pode marcar e assim não precisa colocar o seu usuário no grupo bin.
Mais uma vez, não falo com propriedade no assunto (só uso linux faz poucos meses), mas pode verificar, quem sabe não é isso que está acontecendo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts