#!/bin/bash
mv {dimitrihashnov,xnxlabs}.wordpress.com
all your base are …
fevereiro 28, 2008 às 23:46 (Uncategorized)
mv foo.wordpress.com bar.wordpress.com
janeiro 30, 2008 às 19:41 (nerd, xnx)
Tags: wordpress
Pesquisando como mudar a URL do blog no wordpress.com…
Opções -> domínios …
Links úteis Fedora 8
janeiro 9, 2008 às 19:45 (linux, xnx)
Tags: fedora, linux
Dicas de pós instalação, pacotes extras, repositórios, codecs, e afins:
http://www.gagme.com/greg/linux/f8-tips.php
http://www.fedora.org.br/post31229.html
Sobre os problemas com som e pulseaudio:
http://forums.fedoraforum.org/showthread.php?t=171083
http://home.nyc.rr.com/computertaijutsu/rhsound.html
Editando UTF8 no vim
dezembro 19, 2007 às 20:26 (linux, xnx)
Tags: iso-8859-1, linux, utf8, vi, vim
Para editar arquivos em UTF8 no vim
vim -c "set encoding=utf8" -c "set termencoding=iso-8859-1"
ou…
[beckmann@duo ~]$ cat bin/vim-utf8 #!/bin/bash vim -c "set encoding=utf8" -c "set termencoding=iso-8859-1" "$@"
Gravando DVDs com growisofs
dezembro 19, 2007 às 20:16 (linux)
Tags: cdrecord, dvd, growisofs, iso, linux
Para gravar dvd a partir de imagens iso:
growisofs -dvd-compat -Z /dev/dvd=F-7-i386-DVD.iso
Para gravar arquivos de dados em um dvd:
growisofs -dvd-compat -Z /dev/dvd -R -J /diretorio
iptables e ipcop
dezembro 17, 2007 às 18:36 (linux, security)
Tags: iptables, linux, netfilter, network, redes, security, segurança
Manage your documents with Knowledge Tree
dezembro 7, 2007 às 20:52 (linux, TI)
http://www.linux.com/feature/122345
Knowledge Tree is an open source document management system (DMS) that
helps enterprise users categorize, store, index, and share documents.
It offers features like metadata editing, versioning, and WebDAV
access, which make it a better choice than a simple file server for
sharing documents.
bkp.sh
dezembro 2, 2007 às 17:08 (faculdade, linux, shell)
Especificação do trabalho:
TRABALHO DE SHELL SCRIPTS
GRUPO DE TRABALHO
Trabalho grupo de três alunos.
DESCRIÇÃO
=========
Implementar um sistema de gerenciamento de backup.
O sistema consiste em um arquivo de configuraço (/etc/bkp.conf) e um
arquivo de shell script (/usr/local/bin/bkp.sh).
O arquivo de shell script deverá ser dividido em funções que executam
atividades especificas, esta divisão ficará sob a responsabilidade da
equipe.
Não será aceito scripts que sejam escritos em um único módulo (lingüiça).
O script deverá ler o arquivo de configuração configuração e iniciar a
execução do backup.
O script deverá ser agendado via crontab (o horário de execução será
agendado no momento da defesa).
Somente arquivos que foram modificados a menos de 24 horas ser
selecionados pela operação de backup (além de obedecerem a extensão
definido pelo usuário).
O shell deverá executar as seguintes funções:
* ler arquivo de configuração
* validar cada usuario
* realizar o backup
* limpar arquivos de backup que estão além do período de retenção
Cada sessão de backup deverá gerar um arquivo no formato:
usuario.DDMMAA.HHMM.tar.gz
ARQUIVO DE CONFIGURAÇÃO
=======================
usuário:frequencia:retenço:extenses:caminho
* usuário - usuário cadastrado no arquivo /etc/passwd
* frequencia - frequencia com que o backup é realizado.Os valores estão
padronizados em
1 (domingo), 2 (segunda), 3(terça), 4(quarta), 5(quinta), 6(sexta),
7(sábado), *(todos os dias).
Se o usuário quiser backup todos os dias ento será informado (*).
Um intervalo pode ser defindo através de um traço, 24, corresponde aos
dias segunda,terça e quarta. * retenço define quantos dias o backup será
retido, ultrapassado o número de dias o backup deverá ser excluído.
O valor padronizado é de 1-15.
* extensão - Indica o padrão dos arquivos que devem ser copiados.
* caminho indica o caminho onde o backup deve ser armazenado.
Exemplo: /var/bkp.
EXEMPLOS
========
Exemplo 1 - O usuário airton que fazer backup com a seguinte frequencia
segunda, quarta e sexta. Todos arquivos que pertencem a ele deverão ser
copiados na operaço de backup. É necessitar que os backups fiquem
armazenados na pasta /var/backup/airton com 4 dias de retenção.
airton:2,4,6:4:*:/var/backup/airton
Exemplo 2 -Idem acima, porém a frequencia do backup deve ser todos os dias.
Airton:*:4:*:/var/backup/airton
Exemplo 3 - O usuário airton que fazer backup com a seguinte frequencia
segunda,terça,quarta,quinta. Somente os arquivos que possuam o padro *.c,
*.doc e *.txt deverão ser copiados na operação de backup. É necessitar que os
backups fiquem armazenados na pasta /var/backup/airton com 4 dias de
retenção.
Airton:2-5:4:*.c,*.doc,*.txt:/var/backup/airton
Se o usuário quiser backup segunda, quarta e sexta então será informado
2,4,6. Se o usuário quiser backup segunda,terça,quarta e quinta então
podemos utilizar 2-5.
PREMISSAS DO TRABALHO
=====================
* O arquivo de configuração deve ser editado através de um editor de texto
* O arquivo de configuração deve estar permanentemente ordenado pela
primeira coluna, isto é, o nome do usuário.
* O caracter separador de campo é (:)
* Utilizar as aplicações tar e find para realizar o backup
* Utilizar o para cron disparar o backup
Script implementado:
#!/bin/bash
# vim:ts=8
#=====================================================================
# ARQUIVO: bkp.sh
# USO: bkp.sh
# DESCRIÇÃO: Script para gerenciamento de backup
# OPÇÕES: ---
# REQUISITOS: /etc/bkp.conf
# bash >= 2.04
# tar
# gzip
# mktemp
# BUGS: ---
# NOTAS:
# AUTORIA: Marcelo Beckmann, marcelobeckmann@yahoo.com
# Rubens Hilcko, rubenshilcko@gmail.com
# Fabrício Carrico, fgcarrico@gmail.com
# VERSÃO: 1.0
# REVISÃO: 6
#=====================================================================
#=====================================================================
# Variáveis globais
#=====================================================================
# Arquivo de configuração
BKPCONF="/etc/bkp.conf"
# Arquivo de log do backup
LOGFILE="/tmp/logbkp.log"
# Variável para controlar log de mensagens de debug
# Setar para 1 para gerar mensagens de debug
DEBUG=0
#=====================================================================
# Declaração de funções
#=====================================================================
# Função para logar mensagens no arquivo de log
# Mensagem a ser logada é passada como parâmetro para a função
loga() {
# Variável local para gerar padrão de data-hora no log
local DATALOGPATTERN=`date +"%Y%m%d-%H:%M:%S"`
echo "${DATALOGPATTERN} ${@}" >>${LOGFILE}
}
# Função para manter ordenado o arquivo de configuração (BKPCONF)
# Além de ordenar, também limpa linhas em branco e com comentários
ordena_conf() {
# Testa se o arquivo de configuração BKPCONF existe e se é
# possível abri-lo. Se não conseguir, aborta e loga o erro
if [ ! -w ${BKPCONF} ]
then
loga " ==> ERRO: Arquivo de configuração não pode ser lido"
return 1
fi
# Cria arquivo temporário para reordenação
local TMPFILE=`mktemp /tmp/bkp.sh-XXXXXX`
# Remove linhas em branco ou com comentários (egrep -v)
# Ordena arquivo pelo primeiro campo (sort -k1)
# Remove espaços em branco (sed)
cat ${BKPCONF} | egrep -v "(^$|^#)" | sort -k 1 -t : | sed -e 's, ,,g' >${TMPFILE}
# Reescreve arquivo de configuração
cat ${TMPFILE} >${BKPCONF}
# Apaga arquivo temporário
rm ${TMPFILE}
return 0
}
# Função para logar mensagens em modo debug
# Mensagem a ser logada é passada como parâmetro
ifdebug() {
# Testa se variável DEBUG está definida
if [ ! -z "${DEBUG}" ]
then
# Testa se debug está ativo (DEBUG=1)
if [ ${DEBUG} -eq 1 ]
then
loga " DEBUG: ${@}"
fi
fi
}
# Obtem código numérico do dia de hoje pelo função date
# Código deve ser:
# 1 (domingo), 2 (segunda), 3(terça), 4(quarta), 5(quinta), 6(sexta),
# 7 (sábado)
dia_sem_hoje() {
# Utilizada opção %w do date:
# %w day of week (0..6); 0 is Sunday
local DIASEM=`date +"%w"`
# O date considera Domingo = 0
# Precisamos somar 1 para ajustar isso a nossa codificação
BKPDIAHOJE=$[${DIASEM}+1]
}
#=====================================================================
# Funções de validação do arquivo de configuração
#
# * Validam cada campo do arquivo de configuração
# * Obtém os valores para as variáveis necessárias para o backup
# * Variável line corresponde a linha atual lida do arquvio de config
# * Valores de retorno:
# 0 ==> OK
# 1 ==> ERRO
#=====================================================================
# Conta quantos separadores de campo (:) há na linha
# Usa o sed para trocar o ":" por quebras de linha, e usa o wc -l para
# contar quantas linhas resultam. Assim, obtém-se o número de ":"
# Se não tiver exatamente 4 ":", rejeita a linha (linha inválida)
valida_ncampos() {
if [ `echo -n "${line}" | sed -e 's,:,\n,g' | wc -l` -eq 4 ]
then
# total de campos ok
return 0
else
loga " ==> ERRO: Quantidade de campos (:) inválida"
return 1
fi
}
# Testa se o usuário existe no sistema
# Obtém as variáveis:
# BKPHOME: o diretório HOME do usuário
# BKPUSUARIO: nome do usuário
valida_usuario() {
# Obtém nome do usuário da linha do arquivo de configuração bkp.conf
BKPUSUARIO=`echo "${line}" | cut -d: -f1`
# Testa se o usuário existe no /etc/passwd
if cat /etc/passwd | cut -d: -f1 | grep -w -q ${BKPUSUARIO}
then
# Ok, usuário existe no sistema
# Obtém diretório home do usuário
BKPHOME="`cut -d: -f1,6 /etc/passwd | egrep -w "^${BKPUSUARIO}" | cut -d: -f2`"
return 0
else
# Erro, usuário não existe no /etc/passwd
loga " ==> ERRO: Usuário ${BKPUSUARIO} não existe no sistema"
return 1
fi
}
# Valida se o campo de frequencia está bem formatado
# Obtém a variável string BKPFREQ com os dias de backup
# Exemplo: se tivermos a programação 2-5, então BKPFREQ="2345"
valida_frequencia() {
# Obtém o campo de frequencia (campo 2 da linha de config)
local TMPFREQ="`echo "${line}" | cut -d: -f2`"
# Por segurança, apaga valores anteriores de BKPFREQ
unset BKPFREQ
# Utiliza expressões regulares para validar o campo
# usa echo e egrep para verificar casamento com a expressão
# O campo pode ser:
# Apenas um *
if echo "${TMPFREQ}" | egrep -q "^\*$"
then
# Seta string de frequencia para todos os dias
BKPFREQ="1234567"
ifdebug "valida_frequencia - casou asterisco"
ifdebug "BKPFREQ=${BKPFREQ}"
return 0
fi
# O campo pode ser:
# Apenas um número, no intervalo de 1 a 7
if echo "${TMPFREQ}" | egrep -q "^[1-7]$"
then
# Seta string de frequencia apenas para o dia
BKPFREQ="${TMPFREQ}"
ifdebug "valida_frequencia - casou um único número"
ifdebug "BKPFREQ=${BKPFREQ}"
return 0
fi
# O campo pode ser:
# Um número [1-7], seguido de um - e um número [1-7]
# ex.: 2-5
if echo "${TMPFREQ}" | egrep -q "^[1-7]-[1-7]$"
then
# Campo é no formato DIAINICIAL-DIAFINAL
# Variáveis temporárias para obter dia inicio e dia fim
local TMPFREQ1=`echo "${TMPFREQ}" | cut -d- -f1`
local TMPFREQ2=`echo "${TMPFREQ}" | cut -d- -f2`
# condição inválida, dia inicial maior ou igual ao dia final
if [ ${TMPFREQ1} -ge ${TMPFREQ2} ]
then
loga " ==> ERRO: Dia inicial ${TMPFREQ1} maior ou igual a dia final ${TMPFREQ2}"
return 1
fi
# Preenche string de frequencia com os dias do intervalo
for local1 in `seq ${TMPFREQ1} ${TMPFREQ2}`
do
BKPFREQ="${BKPFREQ}${local1}"
done
ifdebug "valida_frequencia - casou inicio-fim"
ifdebug "BKPFREQ=${BKPFREQ}"
return 0
fi
# O campo pode ser:
# Um número [1-7], seguido uma ou mais vezes de
# uma , e um número [1-7]
# ex.: 2,4,5
if echo "${TMPFREQ}" | egrep -q "^[1-7](,[1-7])+$"
then
BKPFREQ="`echo "${TMPFREQ}" | sed -e 's/,//g'`"
ifdebug "valida_frequencia - casou numero[,numero]+"
ifdebug "BKPFREQ=${BKPFREQ}"
return 0
fi
# Se chegou até aqui e não casou com nenhum dos casos possíveis
# Então há alguma inconsistência na configuração desta opção
# retorna erro
loga " ==> ERRO: campo frequencia mal especificado"
return 1
}
# Valida se o campo retenção está entre 1 e 15
# Obtém a variável BKPRET: número de dias para retenção
valida_retencao() {
# Obtém o campo de retenção (campo 3 da linha de config)
local TMPRET="`echo "${line}" | cut -d: -f3`"
# Utiliza expressão regular para validar se é
# um número [1-9] seguido 0 ou 1 vez de
# um número [0-5]
if echo "${TMPRET}" | egrep -q "^[1-9][0-5]?$"
then
# Ok, casou com a expressão regular, portanto é um número
# Teste para ver se está entre 1 e 15
if [ ${TMPRET} -ge 1 -a ${TMPRET} -le 15 ]
then
# Valor de retenção válido!
BKPRET=${TMPRET}
ifdebug "BKPRET=${BKPRET}"
return 0
else
loga " ==> ERRO: Valor de retenção (${BKPRET}) fora da faixa permitida (1-15)"
return 1
fi
else
# Se não casou com a regex, então campo retenção
# está mal especificado
loga " ==> ERRO: campo retenção mal especificado"
return 1
fi
}
# Função para processar a lista de extensões
# Obtem a string BKPEXT com a lista de extensões separadas por espaços
valida_extensoes() {
# este campo pode ter apenas uma única extensão (ou *)
# ou pode ter mais de uma extensão separadas por ,
# podemos simplesmente aplicar um sed para substituir as
# possíveis virgulas por espaços e jogar numa variável
# a qual será usada depois em um loop com tar + find
# Obtém campo 4 da linha de config, e troca "," por " "
BKPEXT="`echo "${line}" | cut -d: -f4 | sed -e 's/,/ /g'`"
ifdebug "BKPEXT=${BKPEXT}"
return 0
}
# Valida o caminho no qual será salvo o backup
valida_caminho() {
# Obtém o campo do caminho (campo 5 da linha de config)
BKPPATH="`echo "${line}" | cut -d: -f5`"
ifdebug "BKPPATH=${BKPPATH}"
# Testa se o caminho já existe e se é um diretório
if [ -d ${BKPPATH} ]
then
return 0
else
# Tenta criar o diretório
mkdir -p ${BKPPATH}
if [ $? -eq 0 ]
then
# OK, conseguiu criar
return 0
else
# ERRO, não conseguiu criar
loga " ==> ERRO: Impossível criar caminho ${BKPPATH}"
return 1
fi
fi
}
# Função para validar a linha lida do arquivo de configuração
# Usa várias outras funções para fazer testes específicos
# Formato padrão da linha do arquivo de configuração:
# usuário:frequencia:retenção:extensões:caminho
# Valores de retorno:
# 0 ==> Ok, arquivo validado e campos necessários obtidos
# 1 ==> Alguma verficação de validade falhou
valida_linha() {
# Valida quantidade de separadores de campo (:) da linha
valida_ncampos || return 1
# Valida se o usuário existe no sistema
valida_usuario || return 1
# Valida campo de frequencia
valida_frequencia || return 1
# Valida campo de retenção
valida_retencao || return 1
# Valida campo de extensões
valida_extensoes || return 1
# Valida campo do caminho
valida_caminho || return 1
# Se chegou até aqui, então a linha de configuração é válida
# gera log com os parâmetros encontrados
ifdebug "Linha de configuração validada!"
loga " Parâmetros encontrados para o backup:"
loga " Usuário (BKPUSUARIO): ${BKPUSUARIO}"
loga " Dir Home do usuário: ${BKPHOME}"
loga " Frequencia (BKPFREQ): ${BKPFREQ}"
loga " Retenção (BKPRET): ${BKPRET}"
loga " Extensões (BKPEXT): ${BKPEXT}"
loga " Caminho (BKPPATH): ${BKPPATH}"
return 0
}
# Testa se no dia de hoje deve ser feito backup
# Verifica se o código do dia atual consta na string com os dias agendados
# Valores de retorno:
# 0 ==> OK, deve fazer backup hoje
# 1 ==> não deve fazer backup hoje
valida_bkp_hoje() {
if echo "${BKPFREQ}" | grep -q ${BKPDIAHOJE}
then
return 0
else
return 1
fi
}
# Gera nome de arquivo no formato padronizado para o backup:
# usuario.DDMMAA.HHMM.tar.gz
gera_nomes() {
# Gera um padrão de data e hora com o comando date
local DATATARPATTERN="`date +"%d%m%y.%H%M"`"
# Nomeia arquivo para o tar.gz
BKPTARGZ="${BKPPATH}/${BKPUSUARIO}.${DATATARPATTERN}.tar.gz"
# Nomeia arquivo que conterá a lista de arquivos para backup
BKPLIST="${BKPPATH}/${BKPUSUARIO}.${DATATARPATTERN}.lst"
# Se já existir os arquivos, apaga
[ -f ${BKPTARGZ} ] && rm ${BKPTARGZ}
[ -f ${BKPLIST} ] && rm ${BKPLIST}
}
#=====================================================================
# Início do processamento
#=====================================================================
loga "=========================="
loga "Iniciando sessão de backup"
# Obtém codigo numérico do dia da semana
dia_sem_hoje
loga "Dia da semana atual: ${BKPDIAHOJE}"
# Cria diretório temporário de trabalho
# Para prevenir expansão de *.ext caso haja algum *.ext no diretório atual
WORKDIR=`mktemp -d /tmp/bkp.sh-dir-XXXXXX`
cd ${WORKDIR}
# Ordena arquivo de configuração
loga "Ordenando arquivo de configuração"
if ! ordena_conf
then
# Arquivo de configuração não pode ser lido ou gravado, aborta
loga "Abortando backup"
loga "--------------------------------"
exit 1
fi
# Loop para processar linha a linha do arquivo de configuração
loga "Iniciando processamento do arquivo de configuração"
# Inicializa contador de linhas processadas
NLINHA="0"
for line in `cat ${BKPCONF}`
do
# Leu uma linha, então incrementa contador de linhas
NLINHA=$[${NLINHA}+1]
loga "Iniciando processamento linha ${NLINHA}:"
loga "${line}"
# Valida linha lida do arquivo de configuração
# Se a linha for inválida por algum motivo, pula o processamento
# para a próxima linha
if ! valida_linha
then
loga "--------------------------------"
continue
fi
# Ok, arquivo validado
#
# Processa retenções
# Apaga arquivos mais antigos que BKPRET dias
loga " ==> Removendo retenções mais antigas que ${BKPRET} dias"
find ${BKPPATH} -type f -mtime +${BKPRET} -name ${BKPUSUARIO}.* -exec rm -v {} \; >> ${LOGFILE} 2>/dev/null
if [ $? -ne 0 ]
then
loga " ==> ERRO"
fi
# Testa se deve executar backup hoje
if ! valida_bkp_hoje
then
loga " ==> Dia de hoje (${BKPDIAHOJE}) não coincide com agendamento (${BKPFREQ})"
loga "--------------------------------"
continue
fi
# Ok, fará backup hoje
# Gera nomes de arquivos para efetuar o backup
gera_nomes
loga " ====> gerando ${BKPLIST}"
# Processa extensões para montar arquivo de listagem
for exten in ${BKPEXT}
do
loga " ======> ${exten}"
# Somente arquivos que foram modificados a menos de 24 horas
# ser selecionados pela operação de backup (além de obedecerem
# a extensão definido pelo usuário).
# Para pegar apenas os modificados a menos de 24h, usamos
# a opção "-mtime -1" do find
find ${BKPHOME} -type f -mtime -1 -name ${exten} >> ${BKPLIST}
# Gera log com quantidade de arquivos encontrados
loga " ======> [`wc -l ${BKPLIST} | cut -d" " -f1`] arquivos selecionados"
done
# Verifica se foi selecionado algum arquivo para backup
# checando o número de linhas de BKPLIST
if [ `wc -l ${BKPLIST} | cut -d" " -f1` -eq 0 ]
then
rm ${BKPLIST}
loga " ====> Nenhum arquivo selecionado para backup"
loga "--------------------------------"
continue
fi
# Se passou pela verificação anterior, então existem arquivos
# selecionados para backup
# Executa o backup em tar.gz
loga " ====> gerando ${BKPTARGZ}"
# Faz o tar lendo a lista de arquivos gerada previamente
tar -T ${BKPLIST} -czf ${BKPTARGZ} >/dev/null 2>&1
if [ $? -eq 0 ]
then
# Sucesso na execução do tar
# Apaga lista
rm ${BKPLIST}
loga " ==> Backup executado com sucesso!"
else
# Houve algum problema
loga " ==> ERRO na geração de ${BKPTARGZ}"
fi
# Gera linha no log para sinalizar fim do processamento da linha
loga "--------------------------------"
done
# Apaga diretório temporário
cd /tmp
rm -Rf ${WORKDIR}
loga "Terminando processamento do arquivo de configuração"
loga "Terminando sessão de backup"
loga "==========================="