Dicas Unix e etc

De Cartola

Recuperação de discos

Gosto muito de dois programas, o testdisk, capaz de recuperar partições, setor de boot e outras coisas, mas para recuperação de arquivos gostei mais do foremost. Interessante registrar ela aqui, pois é impressionante como eu nunca lembro o nome dela e sempre tenho que pesquisar um tempão até achar.


Expressões Regulares

Uma ótima referência on-line sobre o assunto: http://guia-er.sf.net

Expressão regular para colocar ponto de milhar em números até trilhões

 $ (echo 1234567890123; echo 1234) | sed -e 's/\([0-9]\{1,3\}\)\([0-9]\{3\}\)$/\1.\2/' \
 -e 's/\([0-9]\{1,3\}\)\([0-9]\{3\}\.[0-9]\{3\}\)$/\1.\2/' \
 -e 's/\([0-9]\{1,3\}\)\([0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\)$/\1.\2/' \
 -e 's/\([0-9]\{1,3\}\)\([0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\)$/\1.\2/'
 
 1.234.567.890.123
 1.234

Notem que essa é a sintaxe para uso com o sed. Em várias outras ferramentas, como perl por exemplo, a sintaxe muda um pouco. No perl não seria necessário usar a barra de escape nos parêntesis e chaves. Notem ainda que não se trata de apenas uma expressão, é a aplicação seqüencial de 4 expressões regulares que dá o resultado esperado. Talvez dê para reduzir isso, mas não parei pra pensar por falta de tempo e por que essa já resolveu meu problema.

Scripts

Upload de arquivos

Este é na verdade um conjunto de scripts combinando shell e php para upload de arquivos em grande número e possivelmente grandes. A necessidade surgiu para enviar arquivos a partir de uma rede fechada por firewall, que não permitia upload de arquivos via FTP. Para usar HTTP temos dois problemas, o upload é via formulário e não suporta grandes volumes de dados em geral.

A solução final tem 2 scripts na origem, que podem receber uma lista grande de arquivos grandes para upload. O script principal verifica o tamanho do arquivo, parte se necessário, envia cada parte ou cada arquivo, providencia a junção das partes no destino e registra o sucesso ou fracasso de cada upload, verificando isso via checksum com hash md5. Se o arquivo final foi corretamente enviado ou juntado (no caso de ter sido partido) o arquivo é renomeado com um prefixo "foi-".

Inicialmente é necessário configurar o script principal da origem para indicar a url de upload, parâmetros do proxy, localização de comandos e limite de tamanho a partir do qual deve se partir os arquivos. Um pré-requisito básico, algumas vezes não encontrado no sistema de origem, é o comando wget.

Tanto o sistema origem como destino precisa ser unix-like, embora o php no destino possa ser refeito para evitar essa necessidade no destino. Na origem é um pouco mais complicado fugir do shell, mesmo por que, no meu caso pelo menos, o wget foi a única ferramenta que conseguiu passar com sucesso pelo proxy. Cheguei a tentar http_post_data do pacote pecl do php, sem sucesso.

Scripts na origem

post.sh - script principal. Deve ser configurado inicialmente. É quem deve ser executado, passando na própria linha de comando os arquivos que devem ser enviados ao destino.
post.php - script auxiliar que codifica o arquivo original em base64 para envio. É necessário interpretador php de linha de comandos para executá-lo.

Script no destino

recebe.php - recebe, decodifica e junta os arquivos enviados.

Melhorias interessantes

  • recuperação de falhas nos casos de erro de transmissão
  • interrupção limpa no meio do processo com limpeza local e remota de "resíduos"

Detectando Código de Tecla no Xorg

Já precisei reconfigurar arquivo de mapeamento de teclado por não encontrar um arquivo que mapeasse corretamente algum teclado. As vezes fica faltando só uma teclinha que não funciona e mesmo depois de testar vários arquivos de mapeamento a maldita tecla nunca funciona. Para estes casos há o comando "xev", que abre uma pequena janela no xorg e vai mostrando, na janela do shell de onde foi chamado, uma série de informações referentes a cada "Evento do X" (daí o nome X Ev - X Events). No meio das muitas informações aparece lá o "keycode" que precisa ser usado no arquivo a ser usado no xmodmap, por exemplo. Daí é só acertar o arquivo. Hoje, por exemplo, coloquei a linha:

 keycode 211 = slash question degree questiondown

Naturalmente fui prático e copiei o texto necessário de outra linha, apenas alterando o código da tecla para 211. Botei na ordem, pois não sei se isso faz diferença. Como os códigos no meu arquivo só iam até 134 esta ficou sendo a última linha dos códigos. Depois delas ainda haviam algumas outras, mas não de códigos e respectivas funções.

Depois do arquivo pronto bastou um comando tipo:

 $ xmodmap .Xmodmap.abnt2

e o mapeamento ficou correto, já que o único problema era essa tecla que continha a barra e o interrogação.

Outras alternativas ao xev:

  • showkey
  • evtest

Apresentações

Instalações de Aplicativos