Quais Shell Scripts vocês usam?

Fala galera do Dio+

Estou criando esse tópico para saber de vcs os tipos de shell scripts que vcs usam para melhorar o workflow, automatizar alguns processos etc…

Pessoalmente acho muito top fazer shell scripts para facilitar/automatizar tarefas.

Fiz alguns shell scripts e uma interface gráfica em python para “chamá-los” sem precisar ficar usando ./script.sh no terminal. Nada muito avançado, apenas atualizaçãos automáticas, correção dos repositórios, uma espécie de “neofetch” customizado e um script com menu para abrir ferramentas do terminal como cmus, ranger, links etc…

Enfim… gostaria de algumas ideias de Shell Scripts.

Desde já, agradeço.

1 curtida

os que eu mesmo faço. tudo rustico mas funciona.

Muito legal mano!
Vou aproveitar suas ideias.

vlw

1 curtida

Eu postei um número razoável de shell scripts que uso no dia a dia em um outro tópico. Automatizar cortes de vídeos do YouTube, lidar com mudanças de resolução do Wine, converter PDFs, minimizar PDFs, fritar um ovo com PDFs, etc.

Já pensou em adicioná-los ao PATH?

Muito bom o tópico dos scripts ! Estou lendo ele agora.

Tinha esquecido do PATH, vlw pela dica!!

Nunca tive o hábito de fazer scripts. – Na verdade, nunca usei mais do que 0,01% do poder do bash. – Quando preciso montar um comando mais diferente e não sei como, pesquiso no Google*, pego um comando aqui, outro ali, procuro entender como funcionam, combino pedaços de um com pedaços de outro, e vou testando até obter o que preciso.

(*) Em 99% das buscas, acabo caindo no stackexchange.

O resultado são comandos e scripts simples, bem toscos.

1) Backup de arquivos fstab

Por exemplo, para fazer uma cópia (backup) dos arquivos fstab de várias distros, fiz um script cp-etc-fstab.sh:

cp /etc/fstab 01-fstab.txt
cp /run/media/flavio/Linux2/etc/fstab  02-fstab.txt
cp /run/media/flavio/Linux3/etc/fstab  03-fstab.txt
cp /run/media/flavio/Linux4/etc/fstab  04-fstab.txt
cp /run/media/flavio/Linux5/etc/fstab  05-fstab.txt
cp /run/media/flavio/Linux6/etc/fstab  06-fstab.txt
cp /run/media/flavio/Linux7/etc/fstab  07-fstab.txt
cp /run/media/flavio/Linux8/etc/fstab  08-fstab.txt
cp /run/media/flavio/Linux9/etc/fstab  09-fstab.txt
cp /run/media/flavio/Linux10/etc/fstab 10-fstab.txt
cp /run/media/flavio/Linux11/etc/fstab 11-fstab.txt
cp /run/media/flavio/Linux12/etc/fstab 12-fstab.txt

Qualquer colega mais versado em TI usaria apenas 2 ou 3 linhas, aumentando a numeração automaticamente – mas para “sofisticar” desse jeito, eu teria de investir muito tempo de leitura, aprendizado etc. – então preferi usar 12 linhas meio repetitivas, feitas manualmente.

Isso funciona no meu openSUSE, instalado na partição “Linux1”, e no qual as demais partições são montadas em /run/media/$USER/Linux[2~12]. --Só na primeira linha, basta acessar a pasta /etc/ na partição-raiz do próprio openSUSE.

Um colega mais afeito ao TI, também também poderia automatizar a criação de uma nova pasta, com a data do dia, e mover para lá os arquivos. – Mas só faço esse backup uma vez ou outra, após instalar alguma nova distro – por isso, achei mais simples, eu mesmo criar a nova pasta e mover os arquivos manualmente para lá.

A última vez que fiz backup foi há quase um mês, depois de instalar o Redcore:

Também não me preocupei em criar uma pasta específica para reunir todos os scripts – e colocá-la no PATH do bash – pois sempre executo a partir do Dolphin, dentro da pasta onde guardo sucessivos backups dos arquivos fstab.

2) Backup de arquivos do Conky

A mesma coisa, para sucessivos backups do Conky – uma pasta com dois arquivos de configuração, e 2 scripts avulsos, de cada distro:

cp -R /home/flavio/.config/conky/ Conky-01
cp -R /run/media/flavio/Home2/flavio/.config/conky/ Conky-02
cp -R /run/media/flavio/Home3/flavio/.config/conky/ Conky-03
cp -R /run/media/flavio/Home4/flavio/.config/conky/ Conky-04
cp -R /run/media/flavio/Home5/flavio/.config/conky/ Conky-05
cp -R /run/media/flavio/Home6/flavio/.config/conky/ Conky-06
cp -R /run/media/flavio/Home7/flavio/.config/conky/ Conky-07
cp -R /run/media/flavio/Home8/flavio/.config/conky/ Conky-08
cp -R /run/media/flavio/Home9/flavio/.config/conky/ Conky-09
cp -R /run/media/flavio/Home10/flavio/.config/conky/ Conky-10
cp -R /run/media/flavio/Home11/flavio/.config/conky/ Conky-11
cp -R /run/media/flavio/Home12/flavio/.config/conky/ Conky-12
cp /home/flavio/MemInfo.sh 01-MemInfo.sh
cp /run/media/flavio/Home2/flavio/MemInfo.sh 02-MemInfo.sh
cp /run/media/flavio/Home3/flavio/MemInfo.sh 03-MemInfo.sh
cp /run/media/flavio/Home4/flavio/MemInfo.sh 04-MemInfo.sh
cp /run/media/flavio/Home5/flavio/MemInfo.sh 05-MemInfo.sh
cp /run/media/flavio/Home6/flavio/MemInfo.sh 06-MemInfo.sh
cp /run/media/flavio/Home7/flavio/MemInfo.sh 07-MemInfo.sh
cp /run/media/flavio/Home8/flavio/MemInfo.sh 08-MemInfo.sh
cp /run/media/flavio/Home9/flavio/MemInfo.sh 09-MemInfo.sh
cp /run/media/flavio/Home10/flavio/MemInfo.sh 10-MemInfo.sh
cp /run/media/flavio/Home11/flavio/MemInfo.sh 11-MemInfo.sh
cp /run/media/flavio/Home12/flavio/MemInfo.sh 12-MemInfo.sh
cp /home/flavio/RAM.sh 01-RAM.sh
cp /run/media/flavio/Home2/flavio/RAM.sh 02-RAM.sh
cp /run/media/flavio/Home3/flavio/RAM.sh 03-RAM.sh
cp /run/media/flavio/Home4/flavio/RAM.sh 04-RAM.sh
cp /run/media/flavio/Home5/flavio/RAM.sh 05-RAM.sh
cp /run/media/flavio/Home6/flavio/RAM.sh 06-RAM.sh
cp /run/media/flavio/Home7/flavio/RAM.sh 07-RAM.sh
cp /run/media/flavio/Home8/flavio/RAM.sh 08-RAM.sh
cp /run/media/flavio/Home9/flavio/RAM.sh 09-RAM.sh
cp /run/media/flavio/Home10/flavio/RAM.sh 10-RAM.sh
cp /run/media/flavio/Home11/flavio/RAM.sh 11-RAM.sh
cp /run/media/flavio/Home12/flavio/RAM.sh 12-RAM.sh

3) Cálculo do uso de Memória RAM

Já faz algum tempo que o Conky, o htop, o Neofetch e o Screenfetch deixaram de ser consistentes e confiáveis para comparar o uso de Memória RAM entre distros diferentes.

Acima - Em Julho 2020, o Conky alterou seu cálculo de uso de RAM – mas só nas distros que receberam sua nova versão – e em Abril 2021 introduziu um terceiro cálculo.

Em seguida, foi a vez do inxi mudar seu cálculo – exceto nas distros que ainda usavam versões anteriores:

Enfim, o htop também mudou seu cálculo – 2 vezes seguidas – o que também resultou em 3 cálculos diferentes, conforme a versão usada em cada distro.

(Nesse ponto, parei de perder tempo com gráficos para registrar essas mudanças :grimacing:)

Para ter um cálculo consistente (comparável), em todas as distros, criei um script MemInfo.sh que pega as informações em /proc/meminfo – e faz a conta proposta por Linus Torvalds… em 2014 (desde o Kernel 3.14!):

MemTotal - MemAvailable

MEM_TOTAL=$(awk '/MemTotal/ { printf $2 }' /proc/meminfo); \
MEM_AVAIL=$(awk '/MemAvailable/ { printf $2 }' /proc/meminfo); \
MEM_USED_KILO="$(($MEM_TOTAL-$MEM_AVAIL))"; \
echo "$(($MEM_USED_KILO/1024))" MiB > MemInfo.txt

… e salva o resultado em um arquivo MemInfo.txt.

O Conky executa esse script a cada 10 segundos – e exibe o resultado salvo no arquivo MemInfo.txt:

Total - Available  ${exec bash MemInfo.sh; cat MemInfo.txt}

Acima - Também incluí no Conky os números do próprio Conky (Mem), free, top, Neofetch, htop, inxi, Screenfetch – de modo que basta fazer uma captura de tela após o boot, para ter um registro de eventuais mudanças em cada uma dessas ferramentas.

O que a imagem (acima) indica é que – no Arch, atualizado no último Domingo (10) – o Conky, o inxi e o Screenfetch estão usando o “novo” cálculo proposto por Linus Torvalds… desde 2014 (Kernel 3.14! ).

A última vez que registrei esses dados de todas as distros (atualizadas) foi há um mês, em 13 Junho – após instalar o Redcore.

openSUSE Tumbleweed:

MX Linux:

Manjaro:

Void:

Slackware (não-atualizado):

Mageia:

PCLinuxOS (exceto htop):

KDE Neon:

Fedora:

Debian testing:

Arch:

Redcore:

4) Registro em TXT

Em algumas distros, ainda não instalei o aha, para o Conky extrair os dados do htop – por isso, criei um script RAM.sh para salvar esses dados em arquivos TXT – com as versões das várias ferramentas, e mais alguns detalhes:

echo "------------------------------------------------------------------"                              >> RAM_02-Arch.txt
date                                                                                                   >> RAM_02-Arch.txt
echo "------------------------------------------------------------------"                              >> RAM_02-Arch.txt
uptime                                                                                                 >> RAM_02-Arch.txt
uptime -s                                                                                              >> RAM_02-Arch.txt
echo "------------------------------------------------------------------"                              >> RAM_02-Arch.txt
echo "           ----------   free   ----------"                                                       >> RAM_02-Arch.txt
free -m                                                                                                >> RAM_02-Arch.txt
echo "------------------------------------------------------------------"                              >> RAM_02-Arch.txt
echo "           ----------   top    ----------"                                                       >> RAM_02-Arch.txt
top -E m -b -n 1 | grep buff                                                                           >> RAM_02-Arch.txt
echo "------------------------------------------------------------------"                              >> RAM_02-Arch.txt
echo "           ---------- neofetch ----------"                                                       >> RAM_02-Arch.txt
neofetch  --stdout | grep "Memory"                                                                     >> RAM_02-Arch.txt
echo "------------------------------------------------------------------"                              >> RAM_02-Arch.txt
echo "           ----------   htop   ----------"                                                       >> RAM_02-Arch.txt
export TERM=xterm; echo q | htop | aha --line-fix | html2text | grep "/15"                             >> RAM_02-Arch.txt
# export TERM=xterm; echo q | htop
# echo "------------------------------------------------------------------"                              >> RAM_02-Arch.txt
# echo "           ----------   inxi   ----------"                                                       >> RAM_02-Arch.txt
# inxi -m                                                                                                >> RAM_02-Arch.txt
echo "------------------------------------------------------------------"                              >> RAM_02-Arch.txt
echo "           -------- screenfetch ---------"                                                       >> RAM_02-Arch.txt
screenfetch -n -N -E | grep "RAM"                                                                      >> RAM_02-Arch.txt
echo "------------------------------------------------------------------"                              >> RAM_02-Arch.txt
echo "           -------   proc/meminfo  ------"                                                       >> RAM_02-Arch.txt
MEM_TOTAL=$(awk '/MemTotal/ { printf $2 }' /proc/meminfo);\
MEM_AVAIL=$(awk '/MemAvailable/ { printf $2 }' /proc/meminfo);\
MEM_USED_KILO="$(($MEM_TOTAL-$MEM_AVAIL))";\
MEM_USED_BYTES_X_1000="$(($MEM_USED_KILO*1000))";\
echo "$(($MEM_USED_BYTES_X_1000/1048576))" MiB                                                         >> RAM_02-Arch.txt
echo "$(($MEM_USED_KILO/1024))" MiB                                                                    >> RAM_02-Arch.txt
echo "------------------------------------------------------------------"                              >> RAM_02-Arch.txt
echo "           -------   proc/meminfo  ------"                                                       >> RAM_02-Arch.txt
cat /proc/meminfo | grep "MemTotal\|MemFree\|Active(file)\|Inactive(file)\|SReclaimable\|MemAvailable" >> RAM_02-Arch.txt
echo "------------------------------------------------------------------"                              >> RAM_02-Arch.txt
conky -v | grep compiled                                                                               >> RAM_02-Arch.txt
free -V                                                                                                >> RAM_02-Arch.txt
top -v | grep procps                                                                                   >> RAM_02-Arch.txt
neofetch --version                                                                                     >> RAM_02-Arch.txt
htop --version                                                                                         >> RAM_02-Arch.txt
# inxi -V | grep inxi                                                                                    >> RAM_02-Arch.txt
screenfetch -V | grep Version                                                                          >> RAM_02-Arch.txt
echo "------------------------------------------------------------------"                              >> RAM_02-Arch.txt
date                                                                                                   >> RAM_02-Arch.txt
echo "------------------------------------------------------------------"                              >> RAM_02-Arch.txt
mv RAM_02-Arch.txt /run/media/flavio/Warehouse/Byteria/Conky/Conky-RAM-New/

Usei o cron para executar esse RAM.sh 10 minutos após o boot.

Para obter os dados da distro “pura” (sem abrir nenhum aplicativo, nem sequer um emulador de Terminal), deixo “em repouso” (idle) nesses 10 minutos após o boot:

@reboot sleep 600; bash RAM.sh

5) Backup geral

Utilizo um HDD de 1 TB (Depot1) e um SSD externo de 1 TB (Depot2) para guardar arquivos pouco usados – e também para guardar backups das partições de dados de uso corrente (Sites, Works, Warehouse).

Para esses backups, criei 3 scripts simples e toscos – usando o rsync:

  • backup-1-2.sh – de Depot1 para Depot2
  • backup-0-1.sh – das partições de dados para Depot1
  • backup-0-2.sh – das partições de dados para Depot2

O primeiro copia para Depot2 alguma novidade que eu tenha salvado em Depot1:

time rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after  /run/media/flavio/Depot1/AutoCAD_Corel-Draw /run/media/flavio/Depot2/; date
time rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after  /run/media/flavio/Depot1/Backup             /run/media/flavio/Depot2/; date
time rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after  /run/media/flavio/Depot1/Biblioteca         /run/media/flavio/Depot2/; date
time rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after  /run/media/flavio/Depot1/Colab              /run/media/flavio/Depot2/; date
time rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after  /run/media/flavio/Depot1/Distros-Linux      /run/media/flavio/Depot2/; date
time rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after  /run/media/flavio/Depot1/Downloads          /run/media/flavio/Depot2/; date
time rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after  /run/media/flavio/Depot1/Fotos-digitais     /run/media/flavio/Depot2/; date
time rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after  /run/media/flavio/Depot1/sites_backups      /run/media/flavio/Depot2/; date
time rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after  /run/media/flavio/Depot1/Videos             /run/media/flavio/Depot2/; date
time rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after  /run/media/flavio/Depot1/XTudo              /run/media/flavio/Depot2/; date

Os outros dois scripts são quase iguais – mudando apenas o destino – Depot1 ou Depot2:

time rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Warehouse /run/media/flavio/Depot1/Backup/; date
time rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Works     /run/media/flavio/Depot1/Backup/; date
time rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Sites     /run/media/flavio/Depot1/Backup/; date

Faço isso no Mageia, aos Domingos – após atualizar todas as distros.

2 curtidas

Muito top irmão!

1 curtida

Eu imagino…
Sei nem por onde começa… me perco com o nome dos dispositivos na saída do fstab.

Esses últimos dias estava fazendo script para a minha polybar:

Cada ícone sublinhado tem um script.

Com certeza aproveitarei os seus scripts @Biology_Blogger. Obrigado pelo conhecimento compartilhado.

Tmj

1 curtida

Na verdade, comecei usando o Luckybackup. – Fui clicando nos botões e criando as tarefas. – No final, basta clicar em “Validar”, para ele verificar se faz sentido e exibir o comando rsync que ele gerou. – Quando resolvi abandonar o Luckybackup, copiei os comandos ‘rsync’ que ele tinha gerado, examinei o que eles faziam, e adaptei um pouco:

Os comandos gerados pelo Luckybackup em Janeiro 2021:

Commands:

1) Depot1 --> Depot2

rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Depot1/Backup /run/media/flavio/Depot2/
rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Depot1/AutoCAD_Corel-Draw /run/media/flavio/Depot2/
rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Depot1/Biblioteca /run/media/flavio/Depot2/
rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Depot1/Colab /run/media/flavio/Depot2/
rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Depot1/Distros-Linux /run/media/flavio/Depot2/
rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Depot1/Downloads /run/media/flavio/Depot2/
rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Depot1/Fotos-digitais /run/media/flavio/Depot2/
rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Depot1/sites_backups /run/media/flavio/Depot2/

2) Partitions --> Depot1

rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Warehouse /run/media/flavio/Depot1/Backup/
rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/XTudo /run/media/flavio/Depot1/Backup/
rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Works /run/media/flavio/Depot1/Backup/
rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /run/media/flavio/Sites /run/media/flavio/Depot1/Backup/

No final, só examinei e adaptei.

1 curtida

Top o programa. Se tu consegue visualizar os comandos e as saídas deles realmente ajuda bastante. Já perdi horas pesquisando na internet soluções para algumas funcionalidades.

Hoje mesmo fiquei um tempão para conseguir pegar só os valores das temperaturas da placa de vídeo e da cpu da saída do comando $sensors. A saída do comando é tipo um texto e eu queria só os números

2 curtidas

Uso muito o recurso de copiar a saída de comandos – $ watch sensors (e outros) – e colar no Kate / KWrite, para “contar” as colunas do que eu quero:

         1         2         3         4         5         6
1234567890123456789012345678901234567890123456789012345678901
                   |      |
Vcore Voltage:      +1.19 V  (min =  +0.85 V, max =  +1.60 V)
 +3.3 Voltage:      +3.33 V  (min =  +2.97 V, max =  +3.63 V)
 +5 Voltage:        +5.02 V  (min =  +4.50 V, max =  +5.50 V)
 +12 Voltage:      +12.30 V  (min = +10.20 V, max = +13.80 V)

${alignr}Vcore     ${alignr}${execi 10 sensors | grep -A 0 'Vcore' | cut -c 20-27}
 ${alignr}+3.3     ${alignr}${execi 10 sensors | grep -A 0 '+3.3 Voltage' | cut -c 20-27}
 ${alignr}+5       ${alignr}${execi 10 sensors | grep -A 0 '+5 Voltage' | cut -c 20-27}
${alignr}+12       ${alignr}${execi 10 sensors | grep -A 0 '+12 Voltage' | cut -c 20-27}

$ rc-service -V
rc-service (OpenRC) 0.42.1 (Redcore Linux Hardened)
         1         2         3         4         5
123456789012345678901234567890123456789012345678901234567890

$ rc-service -V | cut -c 12-26
(OpenRC) 0.42.1

$ rc-service -V | cut -c 21-26
0.42.1

Exatamente isso. Mandar a saída de um comando para o cut. No meu caso eu fui experimentando até dar certo hahaaha. Agora com teu post eu entendi a lógica.
O zero então seria o fim de cada coluna?

vlw

Uso um script básico pra atualizar meus programas, ao invés de usar o Pop!_Shop que é bem bugada e costuma quebrar alguns pacotes quando as atualizações são muito grandes.

1 curtida

O número de cima inicia as dezenas.

1 curtida