Use o yes, para dar respostas automáticas no Linux

O aplicativo yes tem a função de repetir uma string, como resposta às requisições de outros programas.
Pode funcionar como um robô, pré-programado para dar uma mesma resposta a um outro programa.
Apesar do nome, a resposta, não precisa ser “yes”. Pode ser “no”, “não” ou qualquer outra coisa.
Veja um exemplo de execução:


yes "eu não quero ser repetitivo"

A instrução acima, irá fazer com que a cadeia “eu não quero ser repetitivo” seja repetida indefinidamente, até você a interromper, com as teclas Ctrl + c.
en não quero ser repetitivo
Pode usar o utilitário com o apt:


yes | apt full-upgrade

Se preferir que ele responda “no”, use-o assim:


yes no | apt full-upgrade

É um utilitário bem simples com uma função bem simplória.
Às vezes, ele pode ser bem útil.

Como fazer o Linux rodar um comando até ele dar certo

Às vezes pode ser necessário persistir na execução de um comando no Linux, até que ele retorne com sucesso.
Este código pode ser executado na linha de comando ou dentro de um script.
O comando ping é comumente usado dentro de um laço (ou loop) while, quando queremos ser avisados de que um certo nó na rede já se encontra online e conectado.
Há várias outras situações em que pode ser desejável manter o sistema operacional na tentativa de execução de um comando — até ele “dar certo”.
Veja um exemplo de uso com o ping:


while true; do ping -c 1 192.168.1.100 && break; done;

PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
From 192.168.1.4 icmp_seq=1 Destination Host Unreachable

--- 192.168.1.100 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
From 192.168.1.4 icmp_seq=1 Destination Host Unreachable

--- 192.168.1.100 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
From 192.168.1.4 icmp_seq=1 Destination Host Unreachable

...

Se tiver interesse em ler mais sobre o uso de loops no Bash, leia Exemplos de laços na Bash shell.

Script Bash para monitorar um ou vários sites e verificar se estão online

Este pequeno script em Bash, vai monitorar uma lista de sites, à sua escolha e vai avisar se algum deles não estiver online, em algum momento.
Como ele usa o comando ping, você também pode executá-lo dentro da sua rede local para monitorar diversos nós e ficar sabendo quando um for desligado.
Veja o código abaixo:


#!/bin/bash
# Um script feito para sistemas Linux e UNIX
# que faz monitoramento com o comando PING.

# adicione endereços IP ou hostnames, 
# separados por espaços em branco, para serem
# monitorados pelo script.
HOSTS="127.0.0.1 192.168.1.0 192.168.0.133 google.com"

# sem ping request
CONTADOR=1

# envia relatório de email quando...
ASSUNTO="Ping falhou"
EMAIL="elias@praciano.com"
for meuhost in $HOSTS
do
    contador=$(ping -v -c $CONTADOR $meuhost | grep 'received' | awk -F',' '{print $2}' | awk '{print $1}')
    if [ $contador -eq 0 ]; then
        echo "O Host: $meuhost está fora do ar (o ping falhou) em $(date) - $ASSUNTO - $EMAIL"
        # se você preferir receber um e-mail, descomente a linha abaixo
        echo "Host : $meuhost  ${NAME[$val]} está fora do ar (o ping falhou) em $(date)" | mail -s "$ASSUNTO" $EMAIL
    fi
done

O código pode funcionar melhor dentro de outro script ou sendo executado periodicamente, dentro do crontab do seu sistema.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Referências

https://bash.cyberciti.biz/monitoring/monitor-windows-linux-server-with-ping-script/.

Exemplos de loops no Bash

Mesmo não querendo se dedicar a aprender e entender melhor os meandros da linguagem de programação de scripts Bash, pode ser útil conhecer alguns de seus conceitos.
Saber criar loops é um destes conhecimentos básicos que vale a pena adquirir.
Um pequeno script pode ajudar a poupar uma enormidade de tempo, no dia a dia de qualquer usuário, de qualquer sistema operacional.
Se achar melhor, adicione esta página aos seus favoritos (Ctrl + D), para ter uma referência rápida no futuro. 😉

Os diferentes tipos de loops do Bash

Os loops (ou laços) são expressões presentes em todas (ou quase todas) as linguagens de programação. Além disso, podem se dividir em tipos diferentes.
No Bash, você pode usar for, while e until.
Veja em que casos cada um é mais indicado:

  • for — se você tem experiência com outras linguagens de programação, no Bash, o for é um pouco diferente da maioria.
    Basicamente é usado para te permitir iterar entre uma série de palavras dentro de uma string.
  • while — executa um pedaço de código, caso a expressão de controle seja verdadeira. Ele só irá parar quando ela for falsa — ou quando encontrar um break explícito no meio do código em execução.
  • until — muito semelhante ao while, exceto pelo fato de que o código é executado enquanto a expressão de controle é falsa.

Segue alguns exemplos simples, que você pode usar para compor ou construir um código mais sofisticado, para atender melhor às suas necessidades.

Exemplos de uso do for

Você pode experimentar este código diretamente na linha de comando do sistema, como no exemplo abaixo


for i in $( ls ); do
> echo item: $i
> done

… ou pode abrir um editor e escrever o código dentro dele e gravar com algum nome. O meu, vou gravar como exemplo-for.sh:


#!/bin/bash
for i in $( ls ); do
   echo item: $i
done

Explicando o código…

  • A primeira linha informa ao sistema que o arquivo deve ser executado com o programa /bin/bash.
  • Na segunda linha declaramos a variável i como repositório dos diferentes valores contidos em $( ls ).
  • A terceira linha expõe o valor atual de i.
  • Por fim, done informa que chegamos ao final do laço for e, se não houver mais nada a ser feito, o programa para por aqui — ou segue sendo executado.

Depois de gravado, execute-o com o bash


bash exemplo-for.sh

Experimente também este script, para colorir texto:


#!/bin/bash
for fg in {30..39}
do
    echo -e "\e["$fg"m apenas um texto colorido pelos caracteres de escape do BASH."
done

vim syntax color

Como criar um loop while no Bash

Veja um exemplo simples de laço while (enquanto), no Bash:


#!/bin/bash
contador=0
while [ $contador -lt 10 ];
do
    echo O valor atual do contador é: $contador
    let contador=contador+1
done

O argumento -lt pode ser abreviatura de less than ou lower than, que significame “menos que” ou “menor que”, em uma tradução livre.
Da mesma forma, usa-se -gt, como abreviatura de greater than, para “maior que”.

Exemplo de uso do until no Bash

Se eu fosse traduzir livremente a linha until [ $contador -lt 10 ]; no exemplo abaixo, eu diria “até que (until) a variável contador seja menor que 10…”
Experimente o código e veja o resultado:


#!/bin/bash
contador=30
until [ $contador -lt 10 ];
do
    echo O valor do meu contador é igual a $contador
    let contador-=1
done

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Como realizar backup incremental no Linux, usando o comando tar

O comando tar está ligado às tarefas de gestão de backups desde sua origem.
Seu é uma referência ao dispositivo de gravação/leitura em fitas (tape drives), muito usado, ainda hoje, por sua confiabilidade e capacidade de armazenamento.
backup tape drive
Tar é abreviatura para tape archiver.

Apesar do nome, o utilitário não é restrito a qualquer tipo de mídia de gravação.
Backups feitos com o tar podem ser armazenados aonde você achar melhor.

Neste post, vamos abordar alguns usos do programa para, no final, montar um pequeno script, que você pode alterar para criar seu próprio backup automatizado ou integrar a outro script mais complexo.
Se tiver alguma dúvida, por favor, clique nos links presentes no texto para obter mais informações.
Não esqueça de dar uma olhada também na tag backup deste site e nos links da sessão de referências.

Os desafios de fazer backups eficientes

Fazer cópias de segurança de um grande volume de dados, pode tomar muito tempo.
Consome tanto tempo, que muita gente deixa de ter este cuidado — e pode se arrepender amargamente por isso.
O ideal é automatizar o processo de backup.
O processo de cópia e compressão de uma grande quantidade de arquivos também consome tempo de processamento — todo o sistema pode ficar significativamente mais lento durante a realização da tarefa.

Para não ser uma “coisa chata” na sua vida, contudo, o backup eficiente precisa ser automático e rodar em background, ou seja, ser executado nos bastidores — de preferência, em um horário em que você não esteja usando (muito) o computador.

fita cartuchos dell ultrium
O backup incremental é demorado na primeira vez em que é executado, mas é rápido nas outras execuções.
Isto ocorre por que consiste em apenas adicionar arquivos novos ou que foram alterados, desde a última vez em que foi feito. O resto é ignorado.

Como fazer o backup incremental com o comando tar

Se tiver algum dúvida extra, leia o post “9 exemplos de uso do comando tar“.
Para realizar um backup simples de um diretório no sistema rode o tar, seguido do nome desejado para o arquivo de backup e do nome do diretório a ser copiado:


tar cvf justincase-backup-2afeira.tar /home/justincase

No comando acima:

  • a opção ‘c’ indica que você deseja comprimir/copiar os arquivos do diretório para dentro de um só arquivo de backup.
  • a opção ‘v’ indica que você deseja ter feedback sobre a execução da tarefa. Você pode usar ‘vv’ ou ‘vvv’ e tornar o comando ainda mais verboso.
  • a opção ‘f’ deve preceder o nome do arquivo que vai abrigar o backup.

Há outras formas de usar este mesmo comando. As opções, por exemplo, podem ser dadas separadamente:


tar -c -v -f justincase-backup-2afeira.tar /home/justincase

O backup padrão, realizado desta forma, não é um processo incremental, contudo.
Para realizar a cópia incremental de arquivos, é necessário acrescentar a opção ‘–incremental’ ou sua abreviatura ‘-G’.
Veja um exemplo de uso:


time tar --incremental -cjf temp/backup-config.tar.bz .config/

real    1m44,454s
user    1m43,921s
sys 0m1,049s

Note que usei o comando time, no começo da linha.
Seu uso é opcional.
Como utilitário do sistema, o time, mede o tempo de execução da sequência de instruções que o seguem.
O mesmo procedimento, na segunda execução, já mostra uma redução de aproximadamente 10 segundos.


time tar --incremental -cjf temp/backup-config.tar.bz .config/

real    1m33,590s
user    1m33,276s
sys 0m0,991s

Experimente realizar o backup em diretórios com uma quantidade maior de arquivos grandes, para obter uma diferença de tempo bem maior.

Opções de compressão para o tar

É uma boa prática acrescentar a opção de compressão ao seu comando de backup com o tar:

  • você pode usar a opção ‘a’ para determinar automaticamente qual o programa/sistema de compressão será usado sobre o arquivo — baseado na sua extensão. Portanto se o arquivo tiver a extensão .tar.bz, o tar irá entender que deve usar o bzip para comprimí-lo.
  • você pode indicar manualmente o nome do programa de compressão com a opção ‘I’.
  • as opções de compressão mais comuns são ‘j’ (bzip2), ‘z’ (gzip), ‘Z’ (compress) e ‘J’ (xz). A primeira tem uma taxa de compressão melhor.
  • outras opções possíveis, são ‘–lzip’, ‘–lzop’ e ‘–lzma’.

Lembre-se que arquivos MP3, MPEG, JPEG – entre outros tipos de arquivos de mídia – já estão compactados e, nestes casos, não será possível obter uma taxa de compressão significativa.

Arquivos comprimidos são transferidos mais rápido pela rede ou para dentro da mídia de backup.
Por outro lado, o processo de compressão/descompressão pode sobrecarregar temporariamente o sistema.

Como recuperar arquivos tar

ibm flash backup drive
Para ver o conteúdo do arquivo, use a opção ‘t’:


tar tvf meubackup.tar.bz

Para recuperar o backup use a opção ‘x’ (extract). Neste caso, é importante informar ao tar sobre o método/programa usado para realizar a compressão:


tar xvjf meubackup.tar.bz

No exemplo acima, sei que preciso usar a opção ‘j’, por que a extensão do arquivo indica que ele foi comprimido com o bzip.
Ler a extensão de um arquivo, não é um meio muito confiável para determinar os padrões de compressão utilizados — por que a pessoa que realizou o backup é livre para escolher a extensão que ela quiser.
Você pode usar a opção ‘a’ ou nada, para permitir que o próprio tar descubra o método de compressão utilizado:


tar xvaf meubackup.tar.bz

ou


tar xvf meubackup.tar.bz

Como testar e obter informações de arquivos comprimidos com o tar

Você pode usar o comando file para tentar determinar o método de compressão utilizado em um arquivo:


file --brief ../backup-scripts.tar.bz 

bzip2 compressed data, block size = 900k

Ou, ainda,


file --uncompress --brief --mime backup-scripts.tar.bz 

application/x-tar; charset=binary compressed-encoding=application/x-bzip2; charset=binary

Pode também testar o arquivo com as opções já dadas:


tar -tvf meubackup.tbz

A extensão tbz, usada no exemplo acima, também é muito comum em arquivos tareados, comprimidos com o bzip2.
Testar os seus backups é tão importante quanto fazê-los.
Seria muito ruim descobrir que o backup não funcionou ou teve problemas, justo na hora em que você vai precisar dele.
hdd storage backup

A melhor hora para testar seus backups é quando você não precisa deles.
Assim, é possível analisar a situação com calma e determinar exatamente o que é que não está funcionando neste processo — e corrigir os problemas.

Como criar um script de backup

O script, que segue, reúne basicamente o que foi visto até aqui, neste artigo.
Entendo que você possa necessitar de algo mais complexo, para atender às suas necessidades particulares ou profissionais. Neste caso, ele pode servir como um ponto de partida para chegar aonde quer.
Não esqueça de alterar as variáveis de ambiente e os nomes de diretórios e arquivos, para refletir a sua realidade.

Script de backup


#!/bin/bash
# Descrição = Realiza cópia de segurança de arquivos importantes
# Criado em 20 de Abril de 2017
# Autor: Elias Praciano
# Version 1.0

## cria as variáveis para compor o nome arquivo de backup
# atribui à variável DATA os valores de
# data e hora atuais, para usar
# na composição do nome do arquivo
DATA=$(date +'%d-%m-%Y')

#  Define o nome do arquivo de backup
ARQUIVO=backup-$DATA.tar.gz

# cria a variável contendo o local de origem dos arquivos
ORGDIR=scripts

# cria a variável contendo o local de destino
DESDIR=backup

# comando de criação do backup
tar -cvvjf $DESDIR/$ARQUIVO $ORGDIR

Leia sobre como adicionar uma data ao nome do seu arquivo, se quiser ter mais flexibilidade nesta escolha, dentro do script
Antes de poder ser executado, o script precisa obter permissão de execução. Veja como fazer isto:


chmod +x ./nome-do-script-de-backup.sh

Agora, que ele já está pronto para rodar, teste-o:


./nome-do-script-de-backup.sh

Leia também por que usamos ./ na frente de alguns arquivos executáveis no Linux.

Referências

http://broexperts.com/how-to-perform-incremental-backup-in-linux-using-tar-utility/.