sexta-feira, 31 de julho de 2009

Como copiar um texto para a área de transferência do X pela linha de comando

O xclip é um utilitário de linha de comando que proporciona uma interface para a área de transferência do ambiente X Window. Pode ler dados de um arquivo ou da entrada padrão e copiar o conteúdo para a área de transferência do X, para então colar em outra aplicação do ambiente X. O xclip pode também imprimir o conteúdo da área de transferência para a saída padrão ou redirecionar para um arquivo ou outro programa.

Também tem o XSel, um utilitário de linha de comando, similar ao xclip, que pode copiar um conteúdo de e para um arquivo ou entrada e saída padrão, para a área de transferência do ambiente X. Pode inclusive adicionar ou apagar um conteúdo da área de transferência.

Para capturar o conteúdo de um arquivo texto use um dos comandos exemplificados abaixo:

$ xclip -selection clipboard arquivo.txt

$ xsel -b < arquivo.txt

Com estes comandos, o conteúdo do arquivo estará armazenado na área de transferência do ambiente X. Para o sentido inverso, copiar o conteúdo da área de transferência para um arquivo, use um dos comandos abaixo:

$ xclip -selection clipboard -o > arquivo.txt

$ xsel -b > arquivo.txt

Um detalhe, estes dois utilitários, obviamente por interagir com o X, são executados sobre o sistema operacional Linux.

quarta-feira, 29 de julho de 2009

Comparando o tamanho dos astros

Encontrei esta figura no Wikimedia Commons. É uma imagem comparando os tamanhos relativos dos planetas do sistema solar com algumas das estrelas mais conhecidas.

Interessante é perceber quanto o nosso planeta Terra é pequeno quando comparado com as maiores estrelas do universo. A Terra possui 6.378,14 quilômetros de raio equatorial e o raio solar é cerca de 110 vezes o raio da Terra, com aproximadamente 695.500 quilômetros.

Júpiter é o maior planeta do sistema solar, com 71.492 quilômetros de raio equatorial, 11,2 vezes o raio da Terra. E Mercúrio é o menor planeta do nosso sistema, com raio de aproximadamente 2.439,7 quilômetros, 0,38 vezes o raio da Terra.

Dentre as estrelas apresentadas na figura, VY Canis Majoris é a maior estrela conhecida no universo, seu raio é cerca de 1.800-2.100 vezes o raio solar e está a uma distância de 4.900 anos-luz de nós. E a estrela mais brilhante para nós é a Sirius com uma magnitude aparente de -1,46 e distante 8,57 anos-luz da Terra. Ambas estão localizadas na constelação do cão maior.


Coloquei aqui uma versão reduzida, a imagem original encontra-se em:
http://commons.wikimedia.org/wiki/File:Star-sizes.jpg

terça-feira, 28 de julho de 2009

Os maiores supercomputadores do planeta

O projeto TOP500 classifica e mostra detalhes dos 500 mais poderosos sistemas de computadores conhecidos no mundo. O projeto teve início em 1993 e publica duas vezes ao ano uma lista atualizada. A lista TOP500 é compilada por Hans Meuer da Universidade do Mannheim, Alemanha, Erich Strohmaier e Horst Simon do Laboratório Nacional de Lawrence Berkeley e Jack Dongarra da Universidade do Tennesse, E.U.A.

A classificação dos supercomputadores é realizada a partir dos resultados do software de benchmark HPL (High-Performance Linpack Benchmark for Distributed-Memory Computers), desenvolvido por um laboratório do Departamento de Ciência da Computação da Universidade do Tennesse.

Algums destaques sobre os resultados é que a Intel domina o mercado de processadores de alto nível com 79,8% de todos os sistemas e que 87,7% são sistemas baseados em processadores Quad-core. Em segundo e terceiro lugar vem os processadores da série Power da IBM com 11% e os processadores da família Opteron da AMD com 8,6%. Outro destaque é que a IBM e a Hewlett-Packard continuam a fornecer a maioria dos sistemas dentre todos os níveis de performance dos TOP500. E por fim, incrivelmente 91% dos 500 supercomputadores mais poderosos utilizam o Linux como sistema operacional.

Na tabela Top500 o índice Rmax é o máximo em performance de um computador pelo benchmark HPL, medido em gigaflop por segundo. Todos os computadores na lista estão ordenados primeiro pelos seus valores em Rmax. Segue a lista editada com somente os 10 melhores:

Rank: 1
Local: DOE/NNSA/LANL
Fabricante: IBM
Computador: BladeCenter QS22/LS21 Cluster, PowerXCell 8i 3.2 Ghz / Opteron DC 1.8 GHz, Voltaire Infiniband
Processador: PowerXCell 8i
Sistema Operacional: Linux
RMax: 1105000

Rank: 2
Local: Oak Ridge National Laboratory
Fabricante: Cray Inc.
Computador: Cray XT5 QC 2.3 GHz
Processador: AMD x86_64 Opteron Quad Core
Sistema Operacional: CNL
RMax: 1059000

Rank: 3
Local: Forschungszentrum Juelich (FZJ)
Fabricante: IBM
Computador: Blue Gene/P Solution
Processador: PowerPC 450
Sistema Operacional: CNK/SLES 9
RMax: 825500

Rank: 4
Local: NASA/Ames Research Center/NAS
Fabricante: SGI
Computador: SGI Altix ICE 8200EX, Xeon QC 3.0/2.66 GHz
Processador: Intel EM64T Xeon E54xx (Harpertown)
Sistema Operacional: SLES10 + SGI ProPack 5
RMax: 487005

Rank: 5
Local: DOE/NNSA/LLNL
Fabricante: IBM
Computador: eServer Blue Gene Solution
Processador: PowerPC 440
Sistema Operacional: CNK/SLES 9
RMax: 478200

Rank: 6
Local: National Institute for Computational Sciences/University of Tennessee
Fabricante: Cray Inc.
Computador: Cray XT5 QC 2.3 GHz
Processador: AMD x86_64 Opteron Quad Core
Sistema Operacional: CNL
RMax: 463300

Rank: 7
Local: Argonne National Laboratory
Fabricante: IBM
Computador: Blue Gene/P Solution
Processador: PowerPC 450
Sistema Operacional: CNK/SLES 9
RMax: 458611

Rank: 8
Local: Texas Advanced Computing Center/Univ. of Texas
Fabricante: Sun Microsystems
Computador: SunBlade x6420, Opteron QC 2.3 Ghz, Infiniband
Processador: AMD x86_64 Opteron Quad Core
Sistema Operacional: Linux
RMax: 433200

Rank: 9
Local: DOE/NNSA/LLNL
Fabricante: IBM
Computador: Blue Gene/P Solution
Processador: PowerPC 450
Sistema Operacional: CNK/SLES 9
RMax: 415700

Rank: 10
Local: Forschungszentrum Juelich (FZJ)
Fabricante: Bull SA
Computador: Sun Constellation, NovaScale R422-E2, Intel Xeon X5570, 2.93 GHz, Sun M9/Mellanox QDR Infiniband/Partec Parastation
Processador: Intel EM64T Xeon X55xx (Nehalem-EP)
Sistema Operacional: SUSE Linux
RMax: 274800

Mais informações em:

http://www.top500.org/
http://www.netlib.org/benchmark/hpl/

segunda-feira, 27 de julho de 2009

O quanto grande é o Sol?

O Sol possui 99,8% de toda a massa do sistema solar. Obviamente é enorme mas o quanto grande é o Sol?

A massa do Sol é 1,9891 x 10^30 quilogramas, isto é 333.000 vezes a massa da Terra. Só que a Terra é feita de rocha e o Sol é quase todo de hidrogênio e hélio, os dois elementos mais leves do universo.

Então qual é o diâmetro do Sol? O diâmetro do Sol é 1,4 milhões de quilômetros, sua circunferência é 4,4 milhões de quilômetros. Podem ser colocados 109 planetas Terra lado a lado para igualar ao diâmetro do Sol.

A área total da superfície do Sol é 6,1 x 10^18 metros quadrados. É o mesmo que 11.990 áreas do planeta Terra.

O volume total do Sol é 1,4 x 10^27 metros cúbicos. Cabem 1,3 milhões de planetas Terra dentro da esfera do Sol.

O quanto grande é o Sol? É muito grande.

domingo, 26 de julho de 2009

Enviando email pela linha de comando usando o sSMTP

O sSMTP é um programa para Linux capaz de enviar um e-mail via um agente de transporte de e-mail (MTA) externo, sendo uma opção para as mensagens de correio do sistema, como também para enviar mensagens pela linha de comando.

Primeiro instale, caso ainda não esteja, o pacote do sSMTP em seu sistema. Na distro Fedora pode ser com o comando "yum install ssmtp" digitado no prompt do console.

Edite o arquivo de configuração "/etc/ssmtp/ssmtp.conf" de acordo com o seu servidor SMTP. O exemplo abaixo serve para o Gmail.com:

root=seunome@gmail.com
mailhub=smtp.gmail.com:465
RewriteDomain=gmail.com
Hostname=localhost
FromLineOverride=YES
UseTLS=YES
AuthUser=seunome@gmail.com
AuthPass=suasenha

Uma recomendação é proteger o arquivo de configuração para que nenhum usuário em sua máquina consiga ler. Faça com o comando abaixo:

# chmod 600 /etc/ssmtp/ssmtp.conf

Para enviar um e-mail basta executar o comando "ssmtp" como super-usuário, ele apresentará um prompt para a entrada da mensagem. Digite como no modelo abaixo, sendo necessário pular uma linha entre o cabeçalho e o corpo da mensagem:

To: email-destino@dominio.com
From: seunome@gmail.com
Subject: Seu assunto

Pule uma linha e escreva aqui sua mensagem.
Pressionando Enter adiciona outra linha no corpo.

Para encerrar pressione as teclas "Ctrl+D". O sSMTP irá enviar então sua mensagem.

Outra opção para gerar o e-mail é criar um arquivo texto colocando em seu conteúdo a sua mensagem, respeitando a mesma estrutura. Desta forma direcione o arquivo texto para o comando do sSMTP em sua execução. Como abaixo:

# ssmtp email-destino@dominio.com < email.txt

Para que um usuário sem privilégios de administrador possa enviar e-mails com o sSMTP, é necessário que o usuário tenha o seu próprio arquivo de configuração do sSMTP e então acioná-lo na execução do comando. Veja exemplo:

$ ssmtp -C ssmtp.conf email-destino@dominio.com < email.txt

A utilidade deste uso do sSMTP pode estar, por exemplo, em fazer sua máquina enviar avisos automaticamente quando você estiver longe dela, simplesmente recebendo e-mails.

sexta-feira, 24 de julho de 2009

Protegendo arquivos importantes no Linux

Imunize os arquivos de configuração, ou outro qualquer, do seu sistema alterando um simples atributo dos arquivos. O bit imutável pode ser usado para prevenir um arquivo de ser apagado ou modificado acidentalmente. Este atributo também previne que alguém crie uma ligação simbólica para o arquivo.

Portanto, é uma boa idéia escolher algum arquivo importante e protegê-lo usando o comando "chattr". Siga o exemplo abaixo:

# chattr +i /etc/smb.conf

Lembre-se, um arquivo com o atributo "i" não pode ser modificado, apagado ou renomeado. Nenhuma ligação pode ser criada até este arquivo e nenhuma informação pode ser escrita no arquivo. Somente o super-usuário ou um processo possuindo a capacidade "CAP_LINUX_IMMUTABLE" pode definir ou remover este atributo.

Para remover o atributo use o comando com o sinal de "-":

# chattr -i /etc/smb.conf

E para listar os arquivos mostrando seus atributos use o comando "lsattr".

Problema de Lógica: Idade das filhas

Atenção, resposta logo abaixo. Cuidado com os olhos!

Um homem estava fazendo o censo de uma certa cidade do interior. Chegou então à mais uma casa e tocou a campainha. Uma mulher atendeu o homem e este já foi explicando:
- Sou do censo e gostaria de fazer umas perguntas.
- Certo, pode fazê-las.
- Gostaria de saber quantos filhos a Senhora têm?
- Tenho três filhas.
- E poderia saber qual a idade delas?
- Sem problemas. Posso dizer que o produto da idade delas é igual a 36.
- Certo. Mas estão me faltando dados para concluir o cálculo.
- Então a soma da idade delas é igual ao número da casa da frente.
O homem então virou-se para ver o número e já em seguida virou-se para a mulher:
- Continuam me faltando dados para a conclusão do cálculo.
- A filha mais velha possui olhos azuis.
- Ok. Agradeço o seu tempo. Até logo.
Qual é a idade das três filhas?







RESPOSTA





Temos uma informação que o produto das idades das três filhas é igual a 36. Consideremos que as filhas sejam a, b, c. Com isto temos que a*b*c = 36. Verifiquemos então as possibilidades existentes:

Filha  a    b    c   Produto
1 1 36 36
1 2 18 36
1 3 12 36
1 4 9 36
1 6 6 36
2 2 9 36
2 3 6 36
3 3 4 36

A segunda informação é que a soma das idades é igual ao número da casa da frente. Como não sabemos qual o número da casa da frente, vamos somar todas as possibilidades encontradas anteriormente:

Filha  a    b    c    Soma
1 1 36 38
1 2 18 21
1 3 12 16
1 4 9 14
1 6 6 13
2 2 9 13
2 3 6 11
3 3 4 10

Podemos então ver que somente duas possibilidades foram iguais. Conclui-mos então a partir desta que o número da casa da frente tem que ser treze, pois se fosse qualquer outro número, o homem do censo não teria falado que faltava informação, pois a equação já estaria satisfeita. Para descobrirmos agora qual a resposta certa precisamos pegar a última informação, que não é nada sobre a cor dos olhos da menina, e sim que existe uma filha mais velha. Portanto a resposta correta não pode ser com as gêmeas mais velhas, ficando então:

2 irmãs gêmeas com 2 anos e uma filha com 9 anos de idade.

quarta-feira, 22 de julho de 2009

O crescimento populacional e a água que bebemos

Apesar de ser um pouco fora do contexto deste blog, todos nós estamos envolvidos e eu como cientista e educador não posso deixar de expressar minha opinião em relação ao rumo que as campanhas de economia de água e salvação do planeta estão tomando.

Vemos muitas campanhas dizendo "economize água senão algum dia ela pode acabar", amplamente divulgadas nos meios de comunicação. Esta afirmação a meu ver não vai ajudar a evitar o fim das reservas de água do planeta e além do mais não mostra o real motivo que põe em risco a água que bebemos. Mesmo todos economizando a água vai acabar!

A água é uma fonte de energia renovável, pois usa-se, despeja o que usou no solo e ela evapora e retorna na forma de chuva. Salvo em situações de fortes reações químicas onde a molécula da água é quebrada por agentes químicos, ela após o processo de evaporação e condensação ou até pela simples filtragem natural no solo a água volta em seu estado potável.

O que temos que perceber é a terrível influência da poluição na degradação da natureza. É neste ponto que devemos prestar muita atenção. A natureza é capaz de nos fornecer quase que eternamente a água potável, mas se a natureza estiver degradada a sua capacidade torna-se reduzida.

A poluição ocorre por muitos motivos, desde matéria orgânica e inorgânica despejada de forma imprópria, passando por grandes desmatamentos e chegando até ao excesso populacional sobre o planeta. É deste último motivo que eu quero chamar a atenção.

O despejo de lixo altera a natureza do local e quando feito em uma quantidade excessiva, o resultado pode ser irreversível para a natureza. Por isso devemos evitar contaminar a água com agentes químicos muito fortes e também evitar contaminar as fontes naturais e todo o percurso no qual a água passa.

Um grande vilão também é o desmatamento e ele ocorre até simplesmente quando abrimos espaço na natureza para a construção de loteamentos de moradia. Todo o espaço que o homem utiliza no planeta acarreta em um desmatamento, por menor que seja. O desmatamento destrói a natureza que existia no local, praticamente elimina todos os seres vivos. A natureza tem um limite, em um espaço pequeno ela consegue recuperar-se, porém em uma área vasta a natureza pode não conseguir jamais.

Agora o meu ponto de vista, o excesso populacional sobre o planeta. Por mais que economize, que evite o desmatamento, que evite jogar lixo em local impróprio e até evitando produzir muito lixo, se a população mundial continuar crescendo estas medidas não serão suficientes para evitar a degradação da natureza e conseqüentemente o esgotamento da água no planeta.

Vamos minimizar nossa realidade para ajudar a entender a idéia. Imaginem o seguinte cenário, um planeta que possui uma reserva de água potável de 100 litros, com uma força da natureza capaz de recuperar a água usada pelo homem em uma velocidade de 15 litros por dia, desde que esteja com pelo menos 80% da natureza intacta. Neste miniplaneta vivem 5 pessoas que ocupam um espaço de 20% e que precisam consumir 3 litros de água por dia para sobreviver.

Como podem calcular, as 5 pessoas necessitam e consomem juntas 15 litros de água por dia. Consomem e devolvem à natureza estes 15 litros de água poluída, os quais são tranqüilamente recuperados pela natureza para reabastecer as reservas de água para o dia seguinte. Sempre terão 100 litros de água disponíveis para cada dia.

Suponha que esta população aumente em mais uma pessoa, ocupando agora um espaço total de 24% do miniplaneta. Neste momento a necessidade diária desta população é de 18 litros por dia. Não é difícil perceber que a natureza agora não vai mais ser capaz de recuperar os 15 litros por dia pois sua degradação avançou para os 24%, muito menos recuperar os 18 litros que agora são consumidos.

A natureza, na situação atual, está recuperando apenas 14 litros por dia. A população consome 18 então ficam 4 litros de água poluída sobre o miniplaneta. No dia seguinte eles terão uma reserva de 96 litros de água potável, quatro litros a menos. Se a cada dia eles perderem 4 litros, podemos ter a certeza de que em algum dia a água vai acabar neste miniplaneta.

Eu não sou biólogo nem outro profissional especialista desta área, os números que usei são somente ilustrativos e não representam as proporções reais do consumo da população nem a capacidade da natureza de se recuperar. O que eu quero que vocês percebam é que todo planeta tem uma tolerância limitada quanto a degradação que ele suporta. Um planeta vivendo em déficit com a natureza não tem vida eterna.

Minha conclusão é que se não houver um controle populacional o nosso planeta poderá sofrer conseqüências desastrosas. E na minha opinião pelo que estamos observando, por todas estas instabilidades que vem ocorrendo com freqüência na natureza, este limite já pode ter sido ultrapassado.

Por isso não polua, não exagere no lixo, não desmate e não desperdice água. Se a população mundial não puder ter um número controlado, pelo menos vamos tentar estender ao máximo a nossa sobrevivência neste belíssimo planeta. É uma pena.

A história do fim de linha

O ASCII (American Standard Code for Information Interchange), é uma codificação de caracteres de sete bits baseada no alfabeto inglês. Os códigos ASCII representam texto nos computadores, equipamentos de comunicação e outros dispositivos que trabalhem com texto.

A codificação define 128 caracteres, preenchendo completamente os sete bits disponíveis. Desses, 32 são caracteres de controle e não são imprimíveis, afetam somente o processamento do texto. Do restante, 94 são caracteres imprimíveis, com o espaço considerado um gráfico invisível, e há também um caractere sonoro, que apenas emite um bip ou faz piscar a tela.

Os caracteres de controle foram criados para algumas funções como o controle da impressora e da exibição na tela do monitor, estrutura de dados, controle de transmissão e outros.

Nossa história vai tratar de dois deles, o Line feed (LF) e o Carriage return (CR). O Line feed é um caractere de controle que alimenta uma nova linha no texto, ou seja, adiciona uma nova linha a partir do cursor. O Carriage return faz o retorno de carro, traz o cursor para o começo da linha. Estes caracteres são usados para marcar o fim-de-linha (EOL) em um texto.

A seqüência CR+LF era de uso comum em vários computadores que usavam máquinas teletipo como console, pois esta seqüência era necessária para posicionar a cabeça de impressão no começo de uma nova linha. O uso de dois caracteres devia-se ao fato de que os teletipos não eram rápidos o suficiente para retornar à margem esquerda em tempo hábil para apenas um caractere, assim o CR vinha em primeiro lugar. Mesmo os teletipos se tornando obsoletos, os programas criados para eles mantiveram esta seqüência de dois caracteres.

Deste modo o padrão ASCII para texto não define um único caractere para fim-de-linha. Em vez disso o padrão ASCII define dois movimentos independentes da cabeça de impressão: retorno de carro e incremento de linha.

No entanto os desenvolvedores dos sistemas operacionais modernos, por sua vez, adotaram convenções diferentes para o fim-de-linha, uns usaram LF, outros usaram CR e alguns outros usaram CR+LF:

Unix, Linux e Mac OS X: LF (Line feed, 0x0A, 10 em decimal)
Mac OS até versão 9: CR (Carriage return, 0x0D, 13 em decimal)
DOS/Windows: CR seguido de LF (CR+LF, 0x0D 0x0A)

Por exemplo, arquivos criados no Unix ou no Mac serão vistos como uma longa e única linha no Windows. Analogamente, um arquivo do Windows visto no Unix terá seus CR mostrados como um ^M ao final de cada linha ou como um segundo pula linha.

Este tipo de diferença pode ocasionar problemas quando um arquivo texto for lido em um outro sistema. Um compilador poderá falhar com erros de sintaxe obscuros, um script poderá falhar em sua execução ou um erro de leitura poderá acontecer quando um utilitário despreparado for abri-lo.

Os editores de textos mais recentes reconhecem todas as variações de fim-de-linha do tipo CR e LF, tratando adequadamente o texto, inclusive permitindo ao usuário converter entre os diferentes padrões. Infelizmente isto não vale para o editor padrão do Windows, o Bloco de notas, mas vale para o Wordpad e vale também para muitos editores do Linux.

Além dos editores de texto modernos existem os comandos dos2unix e unix2dos, no ambiente Linux, que podem ser usados para converter entre o CR+LF (DOS/Windows) e o LF (Unix).

Quem trabalha com arquivos de texto puro entre sistemas diferentes deve ficar atento quanto à estes caracteres de controle.

terça-feira, 21 de julho de 2009

Pintura "O mundo Linux"

Esta pintura é divulgada no site do Linuxhotel, foi criada pelo artista Bamberger Lore Götz e Peter Gerwinski (um dos autores do GNU Pascal) em colaboração com o Linuxhotel. Seu nome original é "Die Linux-Welt".


Trata-se de uma perspectiva mitológica e religiosa com uma boa dose de humor do sistema GNU/Linux. A versão original pode ser baixada por este endereço:

http://www.linuxhotel.de/bilder/linuxwelt.jpg

A balança de Roberval

A balança de Roberval é um projeto apresentado para a Academia Francesa de Ciências pelo matemático francês Gilles Personne de Roberval em 1669.


O mecanismo proposto por Roberval permite que o equilíbrio de uma balança não seja afetado pela posição das cargas em relação aos eixos fixos que sustentam a balança. Desta forma as cargas só exercem a força na direção vertical sem a força horizontal, satisfazendo a segunda condição de equilíbrio de um corpo extenso.


Este mecanismo é utilizado até hoje e é uma solução genial para a pesagem de cargas pois os objetos não precisam ficar centralizados nos pratos da balança.

Agendar tarefas com o Cron

Cron é um agendador de tarefas para computadores com sistemas operacionais tipo Unix. O nome Cron é uma abreviação para cronógrafo.

O Cron possibilita aos usuários agendar tarefas, que podem ser comandos ou scripts, para serem executadas em um determinado horário ou dia. É bastante usado para automatizar a manutenção do sistema, como realização de backups, limpeza de arquivos, checagem preventiva, atualizações etc.

Trata-se de um monitor (daemon) que fica em execução permanente em segundo plano e verifica minuto a minuto se existe alguma tarefa agendada para ser executada. Se existir, o Cron executa a tarefa. Uma tarefa é executada quando a hora e data especificados no crontab coincidem-se com a hora e data local.

O Cron é guiado por uma tabela existente em /etc/crontab. Um crontab é um simples arquivo texto que contém uma lista de comandos que serão executados no tempo especificado. Possui também um programa usado para instalar, desinstalar ou listar as tabelas usadas pelo Cron.

Cada linha em um arquivo crontab representa uma tarefa e segue um formato particular com uma série de seis campos separados por espaços e ou tabulações. Cada campo pode ter um único valor ou uma série de valores. E somente o sexto campo pode conter espaços em seu interior.

Este formato é simples de entender. Cada linha é uma coleção de seis campos que são:

1) Minuto (0-59)
2) Hora (0-23)
3) Dia do mês (1-31)
4) Mês (1-12)
5) Dia da semana (0-7) Obs: 0 e 7 determina o Domingo
6) Comando à ser executado

Exemplo:

35 14 3 11 * tar czvf backup.tgz /home

Cada um dos cinco primeiros campos contém números. Os campos mês e dia da semana também podem conter as iniciais das palavras em inglês, como sun, Mon, jul, Feb.

Além dos números, cada um dos cinco primeiros campos podem conter caracteres para satisfazer outras situações:

a       Somente para a
a,b,c Para a, b e c
a-b De a até b
* Em todos os valores possíveis do campo
a-d/x De a até d em espaços de x. Ex.: 1-9/2 é o mesmo que 1,3,5,7,9
*/15 * * * * determina a cada 15 minutos
0 */23 * * * determina a cada 23 horas

Também é possível no lugar dos cinco primeiros campos colocar uma das oito strings abaixo, todas seguidas por @, cada uma especificando uma situação especial. Os cinco campos serão substituídos pelas strings abaixo:

@reboot      Executa uma vez na inicialização da máquina
@yearly Executa uma vez a cada ano, equivalente a 0 0 1 1 *
@annually O mesmo que @yearly
@monthly Executa uma vez a cada mês, equivalente a 0 0 1 * *
@weekly Executa uma vez a cada semana, equivalente a 0 0 * * 0
@daily Executa uma vez a cada dia, equivalente a 0 0 * * *
@midnight O mesmo que @daily
@hourly Executa uma vez a cada hora, equivalente a 0 * * * *

Para manipular o arquivo crontab usa-se seu executável, de mesmo nome, seguido do parâmetro de acordo com a ação. Basicamente temos estes três parâmetros:

-l    Lista os agendamentos existentes no crontab
-e Edita o crontab com o editor padrão, normalmente o vi
-r Remove todos os agendamentos existentes no crontab

Estando a linha corretamente inserida no crontab, o Cron irá executar o comando quando a hora e data especificada chegar. Para cada usuário que cria um agendamento o crontab cria um arquivo no diretório /var/spool/cron/ contendo a linha do crontab deste usuário. O administrador do sistema pode controlar qual usuário tem ou não permissão para criar um agendamento adicionando o username em um destes arquivos, /etc/cron.allow e /etc/cron.deny.

É uma boa prática redirecionar a saída padrão e o erro padrão de cada tarefa agendada para um arquivo, para isto adicione ao final de cada linha, após o comando, algo como exemplificado na linha abaixo:

15 6 * * * comando > /home/usuario/log.txt 2>&1

O crontab possui também quatro agendamentos pré-definidos, invocados pelo /etc/crontab. São subdiretórios dentro do diretório /etc que podem conter arquivos de script, assim, ocorrendo o determinado período todos os scripts serão executados. Dentro do /etc temos:

cron.hourly:    Será executado de hora em hora
cron.daily: Será executado de dia em dia
cron.weekly: Será executado de semana em semana
cron.montly: Será executado de mês em mês

Basta editar um script, lembrando de tornar seu arquivo executável, e movê-lo para dentro de um destes subdiretórios. Os arquivos serão executados em ordem alfabética.

Uma outra possibilidade é o diretório /etc/cron.d/. O Cron trata os arquivos em /etc/cron.d da mesma forma que o arquivo crontab, seguindo o formato particular com campos. Por exemplo, basta criar um arquivo texto contendo uma única linha com a mesma sintaxe do crontab. O propósito deste diretório é permitir um tratamento mais fino aos agendamentos do que os diretórios /etc/cron.{hourly,daily,weekly,monthly}. Do mesmo modo que qualquer outro arquivo crontab, os arquivos dentro do diretório /etc/cron.d são monitorados por mudanças.

Trabalhando em conjunto com o Cron existe outro daemon chamado Anacron que funciona de forma semelhante ao Cron. Sua diferença é que o Anacron executa uma tarefa que era para ter sido executada em um horário em que a máquina se encontrava desligada. Então quando a máquina voltar a estar ligada ele checa o anacrontab e executa as tarefas pendentes. Este programa é útil em um máquina que não fica o tempo todo ligada.

Para cada tarefa o Anacron checa se já foi executada nos últimos n dias, sendo n o período especificado para esta tarefa. Se não, o Anacron executa o comando após esperar o número de minutos também especificado como parâmetro. Somente a data é checada para a verificação do agendamento pendente, hora e minuto não são usados.

A distribuição Fedora utiliza o Cronie. Ele é uma ramificação do original Vixie-Cron, possuindo um aprimoramento para a segurança e configuração, como a habilidade de usar PAM e o SELinux.

segunda-feira, 20 de julho de 2009

Posicionamento global pela observação dos astros

Com o auxílio da astronomia é possível determinar com uma relativa precisão a nossa posição no globo terrestre. Com apenas algumas medidas dos astros e com a consulta de um Almanaque Náutico, ou de um software que nos mostre a posição dos astros, e de um relógio com a hora precisa, podemos calcular a latitude e a longitude da nossa posição.

Para ajudar a compreender a navegação astronômica, imagine que a Terra seja o centro do universo e que todos os astros giram em torno dela. Imagine também que em torno da Terra está uma outra esfera maior, alinhada no mesmo ponto central da Terra e que nesta esfera estão fixados os astros. Esta esfera maior é chamada de esfera celeste.

O sistema de posicionamento global usa um conjunto de coordenadas que consiste de dois ângulos. A latitude é a distância em graus medida a partir do Equador terrestre na direção Norte-Sul, variando de 0 à 90 graus, e a longitude é o ângulo no polo entre os meridianos de Greenwich e o ponto considerado, variando de 0 à 180 graus.

Semelhante ao sistema de coordenadas terrestres, a posição de um astro na esfera celeste pode ser descrita por dois ângulos, formando o sistema de coordenadas celestes. Como os equadores terrestre e celeste estão no mesmo plano, a medida equivalente à latitude do astro na esfera celeste chama-se declinação e a medida correspondente à longitude do astro na esfera celeste é denominada ascensão reta (AR). A longitude da PG é também chamada de Ângulo Horário em Greenwich (AHG).

Para determinar a nossa posição na Terra precisamos saber a posição de pelo menos três astros e suas respectivas distâncias até a nossa posição. Antes vamos conhecer alguns conceitos usados na navegação astronômica.

Uma reta saindo do centro da Terra e que passa pela nossa posição, chega na esfera celeste marcando um ponto chamado zênite. Então zênite é o ponto na esfera celeste exatamente acima do observador.

Uma reta ligando o centro de um astro ao centro da Terra, passa por um ponto na superfície da Terra chamado de posição geográfica do astro (PG). Já que o astro gira junto com a esfera celeste, a sua PG se move na superfície da Terra. A PG do Sol, por exemplo, se move a uma velocidade de aproximadamente 900 nós, aproximadamente 1 milha náutica a cada 4 segundos.

Podemos determinar, com a ajuda do Almanaque Náutico, a PG de um astro em qualquer instante. Para isso é de fundamental importância que saibamos a hora exata nas medições.

A distância entre a PG do astro e a nossa posição é chamada de distância zenital. Esta distância pode ser expressa em tanto em milhas como em graus, já que representa um arco sobre a superfície esférica da Terra. Pela extrema distância dos astros até a Terra, fazendo com que os raios luminosos cheguem praticamente paralelos em qualquer ponto na Terra, a distância zenital, medida em graus, é igual ao ângulo entre a reta partindo de nós até o astro e a nossa vertical.

Porém é difícil medir este ângulo entre o astro e o zênite pois é complicado de se determinar com precisão a direção vertical. É mais prático medir o ângulo formado entre a horizontal e o astro. Esta medida é denominada altura (H) do astro e é feita com o uso de um sextante. Assim, a distância zenital é igual a 90 graus menos a altura do astro.

Com esta primeira medida sabemos somente que nossa posição real está sobre o círculo cujo o centro é a PG do astro e o raio é a distância zenital. Para determinar a distância zenital em milhas, multiplicamos por 60, pois cada grau equivale a 60 milhas.

O ângulo horizontal entre a reta da distância zenital e o norte verdadeiro, em um sentido horário, é chamado de azimute (Az) do astro, é a direção em que se encontra a PG do astro. Se fosse possível determinar com a bússola a direção exata da PG do astro, poderíamos dizer em que ponto do círculo estamos. Mas a margem de erro desta medida impossibilita a precisão necessária para determinar a nossa posição.

Repetindo o procedimento para mais dois astros obtemos no total três círculos que cruzam-se em um mesmo ponto, provavelmente a nossa posição real. Mas pela imprecisão inevitável das medidas com o sextante, possivelmente os três círculos não se cruzem no mesmo ponto, formando um triângulo, então a nossa posição estará em algum ponto deste triângulo. Na prática adota-se que a nossa posição está no centro deste triângulo.

De uma forma simples e eficiente, realizando medidas das distâncias zenitais de três astros e sabendo a posição geográfica de cada um deles, é possível descobrir a nossa posição na superfície terrestre.

sábado, 18 de julho de 2009

Conhecendo a organização do sistema de arquivos do Linux

Para quem está acostumado com os sistemas operacionais da Microsoft, um usuário de DOS e Windows, pode sentir-se um pouco perdido quando começa a navegar pelo sistema de arquivos no Linux. A ausência das letras que identificam as unidades de disco, como A:\ e C:\, e também do "Meu Computador".

O sistema de arquivos do Linux é organizado de uma forma hierárquica unificada. Diferente do DOS/Windows onde cada dispositivo de armazenamento, ou partição de disco, assume uma unidade separada, no Linux os dispositivos de armazenamento, como CDs, disquetes, pendrives etc., e as partições existentes nos discos rígidos farão parte de uma única hierarquia.

No topo desta hierarquia está o diretório raiz, identificado por / (barra), e que contém todos os outros diretórios. É uma prática comum o diretório raiz conter apenas diretórios mas algumas distribuições colocam alguns arquivos neste local. O administrador do sistema não deve depositar arquivos aqui.

Dentre os diretórios existentes na raiz cada um possui uma finalidade única, com o objetivo de manter um sistema operacional organizado para o administrador e usuário. Muitos softwares são compostos por mais de um arquivo, costumam conter arquivos executáveis, bibliotecas, arquivos de configuração, alguns softwares são de uso do administrador do sistema, outros para uso dos usuários e por aí vai. Sendo assim o Linux organiza todos estes arquivos, referentes aos softwares instalados no sistema operacional, em diretórios separados.

Veja abaixo uma pequena explicação sobre a função de cada diretório no sistema de arquivos do Linux. As distribuições poderão conter outros além destes mais comuns:

/home

O diretório /home armazena os arquivos pessoais dos usuários, é a casa do usuário. Cada usuário do sistema possui o seu local particular dentro deste diretório, geralmente em um subdiretório com nome igual ao username do respectivo usuário. É o único diretório em que o usuário tem total permissão de leitura e escrita dos arquivos, os outros diretórios somente o administrador do sistema tem permissão de operar. É no diretório /home de cada usuário que ficam salvos os arquivos de configuração personalizados para o usuário.

/root

O administrador do sistema por sua vez utiliza o diretório /root como diretório pessoal. O /root é o equivalente ao /home dos usuários.

/bin

Os comandos mais fundamentais do sistema operacional possuem seus arquivos executáveis armazenados neste diretório /bin. Seu nome é uma abreviação para binário.

/sbin

O diretório /sbin contém os arquivos executáveis para a manutenção do sistema, utilizado principalmente pelo seu administrador.

/usr

A grande maioria dos aplicativos instalados, que geralmente não fazem parte do sistema operacional e que são para uso dos usuários, ficam com seus arquivos localizados nos subdiretórios do /usr. Possui uma estrutura completa para a organização dos arquivos que compõem um aplicativo, contendo subdiretórios para os executáveis, para a configuração, para as bibliotecas etc. Um aplicativo completamente integrado ao sistema operacional vai, durante sua instalação, colocar os arquivos aqui. O diretório /usr contém um subdiretório, o /usr/local, que serve como uma estrutura local para a instalação e execução de aplicativos, isolando os arquivos do aplicativo em questão do resto do sistema operacional. Outros subdiretórios são encontrados como o /usr/share que contém arquivos compartilháveis (ícones, manuais, documentação etc.), também existe o /usr/src contendo os arquivos fontes dos programas, incluindo o código fonte do kernel.

/opt

Este diretório /opt é reservado para a instalação de aplicativos de terceiros que normalmente possuem a sua própria organização na hierarquia dos arquivos, não sendo possível a integração no sistema operacional.

/etc

O diretório /etc contém todos os arquivos de configuração do sistema operacional. Quando trata-se de um aplicativo que pode ser personalizado pelo usuário, aqui poderá conter uma versão generalizada da configuração do aplicativo para uso caso o usuário não especifique algo. Também existe o subdiretório /etc/skel que contém os arquivos que irão popular inicialmente o /home de um usuário quando seu username for criado. O diretório /etc é um diretório importante pois contém todas as configurações realizadas pelo administrador do sistema e seu backup torna-se mais que necessário.

/dev

Este diretório /dev contém arquivos especiais de acesso aos dispositivos de hardware. Por exemplo o disco rígido pode ser localizado pelo arquivo /dev/hda, /dev/sdb etc., o drive de disquete é localizado pelo arquivo /dev/fd0, a porta paralela pelo /dev/lp0.

/proc

O /proc é um sistema de arquivos virtual, nenhum espaço em disco real é associado à ele. Os arquivos deste diretório são apenas acessos para informações e estatísticas fornecidas pelo kernel e também para a passagem de parâmetros para o kernel.

/var

O diretório /var contém os arquivos com dados variáveis como log, cache, filas de impressão e correio eletrônico, chaves de bloqueio de acesso à dispositivos. Tudo que é do sistema ou de algum serviço do sistema que tem seu conteúdo passivo de alteração é armazenado no /var.

/lib

As bibliotecas compartilhadas utilizadas pelos aplicativos instalados no sistema operacional, os módulos do kernel ou também bibliotecas para compilação costumam ficar neste diretório.

/boot

Este diretório /boot contém tudo o que é necessário para o processo de inicialização da máquina. Aqui ficam as imagens do kernel, mapas e configurações do sistema e o gerenciador de inicialização.

/tmp

No /tmp ficam os arquivos que são requeridos temporariamente. Muitos programas em execução mantém arquivos neste diretório e na maioria das vezes são excluídos quando a execução está encerrada.

/lost+found

Quando o sistema sofre algum travamento ou a máquina sofre alguma interrupção abrupta, na próxima inicialização o sistema faz uma checagem automática do sistema de arquivos e tenta recuperar arquivos corrompidos se for encontrado algum, o resultado desta operação é armazenado neste diretório.

/mnt

Este é um local genérico para ponto de montagem de sistemas de arquivos ou dispositivos de armazenamento. Após a montagem os arquivos são acessíveis a partir do ponto de montagem. Este diretório /mnt usualmente contém subdiretórios que servirão de ponto de montagem para sistemas compartilhados pela rede ou dispositivos, específicos, por exemplo /mnt/cdrom servirá para a montagem do sistema de arquivos de um disco inserido na unidade de CD.

/media

Semelhante ao diretório /mnt, o diretório /media serve como ponto de montagem para mídias removíveis. As distribuições modernas com seus recursos de automontagem costumam adicionar aqui os diretórios que recebem o ponto de montagem para as mídias inseridas.


Um aspecto importante no sistema de arquivos do Linux é que tudo é um arquivo ou um diretório. Todos os dispositivos de armazenamento, partições em disco, arquivos de bloco montados, compartilhamentos acessados pela rede, tudo é incorporado na estrutura hierárquica da árvore de diretórios, tudo a partir do diretório raiz. Inclusive o acesso aos outros dispositivos de hardware e aos recursos do kernel se dá através dos arquivos em diretórios.

quarta-feira, 8 de julho de 2009

Criando um sistema de arquivo criptografado com o EncFS

O EncFS proporciona um sistema de arquivos criptografado no espaço de usuário de forma transparente. Oferecendo uma segurança contra ataques offline, como por exemplo um roubo do notebook. O EncFS é habilitado pelo FUSE, "Filesystem in Userspace", que é um módulo do kernel que permite criar sistemas de arquivos virtuais. A maioria das distribuições Linux possuem este recurso disponível.

O EncFS opera sobre os arquivos e diretórios, e não sobre um dispositivo de bloco. Os dados são guardados em um sistema de arquivos subjacente e os metadados são protegidos. O EncFS age como um tradutor entre o usuário e o sistema de arquivos, criptografando e descriptografando instantaneamente.

Dentre os benefícios estão facilidade de uso, facilidade de backup, não necessita de um tamanho de volume pré-fixado no disco e somente o usuário que montou o sistema de arquivos tem permissão de acesso, nem mesmo o administrador do sistema tem acesso.

Dois diretórios são envolvidos na criação de um sistema de arquivos criptografado: o diretório principal e o ponto de montagem. Cada arquivo no ponto de montagem corresponde a um arquivo específico no diretório principal, proporcionando um acesso não criptografado a somente este arquivo. Os nomes dos arquivos são criptografados neste diretório principal, mas os atributos, permissões, tamanho e número de arquivos podem ser vistos por todos.

Os arquivos são criptografados usando uma chave de volume que é armazenada de forma criptografada dentro do diretório principal. Uma senha é usada para descriptografar esta chave, que pode ter tamanho de até 256 bits.

Para que isto funcione é necessário que em seu sistema Linux estejam instalados os pacotes do FUSE e do EncFS, na distro Fedora são os pacotes "fuse", "fuse-encfs" e provavelmente algumas dependências.

Vou partir supondo que os usuários já estão com permissão de acesso aos recursos do FUSE, então primeiramente cria-se os diretórios que serão o principal e o ponto de montagem. Fica mais interessante deixar o diretório principal oculto pois ele não será utilizado diretamente pelo usuário:

mkdir ~/.dircripto ~/pontom

Agora vamos utilizar o programa EncFS para criar o novo volume criptografado. É necessário usar caminhos absolutos para os diretórios:

encfs ~/.dircripto ~/pontom

Na primeira vez que for executado este comando o EncFS vai mostrar o menu de configuração que contém três opções para escolher o modo e o nível da criptografia. No modo avançado o EncFS faz uma série de perguntas ao usuário para a escolha item a item, e nas outras opções uma configuração pré-estabelecida é utilizada. Nos três casos a última pergunta é para a escolha da senha de acesso.

Para começar a utilizar o sistema de arquivos criptografado basta executar novamente o comando anterior. Será realizada então a montagem do seu volume criptografado. A senha será pedida sempre nesta ação de montagem:

encfs ~/.dircripto ~/pontom

Copie ou crie os arquivos que desejar para dentro do ponto de montagem, é este diretório que será acessível ao usuário. Analisando o diretório principal percebe-se os nomes dos arquivos protegidos por caracteres aleatórios e seus conteúdos estão ilegíveis. Junto é acrescentado um arquivo semelhante a ".encfs6.xml", este arquivo contém as configurações do volume criptografado.

Para desmontar o volume usa-se o comando abaixo:

fusermount -u ~/pontom

Esta criptografia também pode ser útil para proteger os arquivos do diretório do leitor de e-mail, do navegador, do cliente de mensagens instantâneas etc. Para isto mova o diretório de configuração de cada aplicativo para dentro do volume criptografado e crie uma ligação simbólica para lá com o mesmo nome. Veja exemplo:

mv .thunderbird ~/pontom
ln -s ~/pontom/.thunderbird .

Os backups também são fáceis de realizar, bastando gerar uma cópia do diretório principal e sempre desmonte o volume antes de executar o backup para não correr riscos. O backup é feito a partir do conteúdo criptografado portanto também está protegido. Veja exemplo:

tar czvf ArquivosProtegidos.tgz ~/.dircripto

Observação: Os nomes dos diretórios são apenas exemplos, escolha o que melhor servir.