Pular para o conteúdo

Introdução

Inicialmente devemos ter em mente que a criptografia assimétrica nos coloca de frente a situação de operações que não podem ser desfeitas por uma simples operação inversa, como, por exemplo, a função quadrática no domínio dos números reais, que não pode ser desfeita com uma radiciação.

Base Teórica

A explicação de tais características nos remete à teoria dos conjuntos. Inicialmente devemos ter em mente que na criptografia assimétrica encontramos a situação matemática de função sobrejetora, que é aquela cujo conjunto imagem é coincidente com o conjunto contradomínio, ou seja, não há qualquer elemento do contradomínio que não seja elemento do conjunto imagem da tal função, e em contrapartida não encontramos a situação matemática de função injetora, que é aquela que a cada elemento do domínio corresponde diferente valor no contradomínio, não havendo, portanto, um mesmo elemento na imagem sendo obtido por dois (ou mais) elementos do domínio, tão pouco bijetoras, isto porque são utilizados algoritmos não reversíveis, ou seja uma vez aplicada a função aos dados sendo encriptados, não há uma operação contrária que os desencripte

Na criptografia assimétrica empregamos funções de transferência do tipo sobrejetoras que, absolutamente, não sejam dos tipos injetoras ou bijetoras.

Recordemos das seguintes definições:

  • Uma função injetora é aquela que leva todos os elementos de seu domínio a diferentes, porém não todos os elementos do seu contradomínio;
  • Uma função sobrejetora é aquela que leva todos os elementos de seu domínio a todos os elementos de sua imagem, ainda que ocorram coincidências no contradomínio;
  • Uma função é bijetora é aquela que leva todos os elementos de seu domínio a todos e diferentes elementos de seu contradomínio.
Representação das funções em diagrama de Venn

Em termos de teoria dos conjuntos diremos que dado um conjunto domínio da função de transferência, corresponde a esta função um conjunto imagem que é subconjunto do contradomínio.

Nas funções sobrejetoras encontramos a situação de conjunto imagem coincidente com o conjunto contradomínio. Característica emprestada às funções bijetoras, que emprestam das injetoras a característica de levar todos os elementos de seu conjunto domínio ao seu conjunto contradomínio. Temos então que as bijetoras são um caso especial das injetoras e das sobrejetoras simultaneamente.

Analogia com o mundo real

Suponhamos o cenário seguinte. Alguém, digamos eu, darei uma festa. É claro que não desejo a entrada de não convidados ao meu evento. Portanto, distribuo convites aos meus convidados e anoto seus nomes em uma lista, a qual entrego à recepção do salão. Os convidados por sua vez, ao chegarem apresentam seus convites, o recepcionista confere o nome do conviva na lista e permite sua entrada se tudo estiver de correto.

Podemos ver o convite como a chave pública que é distribuída aos autorizados e a lista destes como a chave privada usada para validar a aquela chave.

Processo Real efetivo

Quando vamos interagir com máquinas além da nossa, antes da entrada do canal de comunicação utilizamos a chave pública distribuída por nossa contraparte para criptografar a mensagem a ser enviada (esta pode ser uma senha, um arquivo, e etc.), então o envio efetivo acontece.

Ao receber o pacote de dados nossa contraparte aplica a sua chave privada para decriptar o tal pacote recebido. Ocorrendo sucesso nesta operação o pacote de dados que enviamos é aceito, ou se não lograr sucesso na decriptação, o mesmo será descartado e nossa comunicação falha.

Se a comunicação for sniffada (interceptada) o espião/intruso não tem a chave apropriada para decriptar o pacote, ficando assim sem acesso a seu conteúdo como desejado, garantindo a segurança dos dados e conexões.

Como gerar chaves no Linux

Para gerar o par de chaves (privada + pública) de cada usuário, deve-se estar logado como o usuário, e executar o comando ssh-keygen como mostrado a seguir:

ssh-keygen -t rsa

Ainda logado com cada usuário, implantar as chaves públicas nos servidores remotos devidos com o comando ssh-copy-id como mostrado a seguir:

ssh-copy-id -i ~/.ssh/id_rsa.pub login@servidor

Após a execução dos dois comandos anteriores o usuário para o qual se executou os comandos já pode efetuar login nos servidores remotos com segurança.

Referências

GONÇALVES, Amanda. O que é função. Escola Brasil – Rede Omnia. Disponível em: <https://brasilescola.uol.com.br/o-que-e/matematica/o-que-e-funcao.htm>, acesso em 13/jun./2018

Introdução

Atualmente temos ao nosso alcance e a preços medianos os discos em estado sólido, ou em inglês solid state disk (SSD). Este tipo de equipamento não tem partes móveis o que muda toda a expectativa de desempenho, no entanto como já citado seu custo ainda não é exatamente baixo, uma vez que para ter discos, no mínimo, 2,5 vezes mais rápidos, na pior condição de comparação, gasta-se em média 8 vezes mais, no mercado brasileiro do final de 2017.

Claro que os números acima foram tomados dos casos extremos, afinal podemos, em condições específicas, chegar a ter um ganho de 142 vezes no desempenho comparado entre os tipos de dispositivos de armazenamento. Assim para não incorrer em erros grosseiros adotemos 7 vezes como o ganho médio de desempenho, o que torna os SSD bem mais atraentes agora.

Mas para que toda essa ponderação sobre desempenho versus custo? Porque muitos poderão estar questionando, quanto custa fazer o computador iniciar em meio ao invés de em dois minutos? Aí vai uma resposta: Gasta-se 8 vezes o valor do disco tradicional, para ter um espaço em média 8,5 vezes menor, mas que está pronto para o trabalho em meio minuto ou menos, não em dois ou mais. A decisão agora é de cada um.

Claro que tudo que foi dito acima, se encaixa bem para os que tem computadores, desktop ou laptop, equipados com um disco tradicional para dar partida no sistema. Os proprietários de laptops devem ficar indignados com a ideia de trocarem seus discos por outros certamente menores do que o tem hoje. Já os proprietários de desktops podem se perguntar se há espaço para manter o disco antigo e mais um SSD novo em seu gabinete.

No caso dos laptops, se for um modelo recente e topo de linha é provável que exista uma 'baia' para um SSD formato M2 que na verdade se parece com um pequeno cartão de memória. Se não for tão recente ou nem topo de linha, a opção pode ser substituir o leitor de discos ópticos, caso exista algum no equipamento, por um disco rígido acondicionado num adaptador 'caddy-dvd'. Já para os desktops, a maioria deles comporta mais um disco, a menos que seja um SFF (small factory factor) cuja concepção é efetivamente enxuta, saindo de fábrica com o que realmente cabe em seu interior.

Como 'turbinar' o laptop

Olhando bem para as condições de existência de um laptop, constatamos ter em mãos um pequeno computador, com grande potencial de processamento, por vezes não tão grande quanto seu custo de aquisição, mas que na média decepciona em termos de desempenho geral, principalmente se tivermos em conta que em um desktop, há condições de termos um subsistema de vídeo mais poderoso, discos de melhor desempenho, melhor possibilidade de expansão de memória RAM, apenas para citar alguns itens. Mas o que o laptop nos dá e que mais nenhuma outra categoria de computador consegue é a mobilidade.

O desempenho, digamos, pobre dos discos de 2,5 polegadas usados em laptops se deve, principalmente, à velocidade de rotação de 5400 R.P.M. que significa um tempo de latência próximo de 11 ms. Nos discos de 3,5 polegadas empregados nos desktops, é mais comum encontrarmos discos de 7200 R.P.M., que conseguem entregar 8,3 ms. de tempo de latência, ou seja, os discos dos laptops é em geral 33% mais lento que os dos desktops e isso numa análise muito rasa.

Na contrapartida os discos de estado sólido não têm tempo de latência já que não havendo partes móveis, não é possível calcular o tempo de uma rotação da mídia. Isso, em absoluto, não significa que podemos considerar 0 a latência, mas podemos utilizar os tempos de atraso de propagação dos sinais dentro dos circuitos integrados constituintes do disco, resultando em algo como 0,3 ms. apenas para termos uma base de raciocínio, o que nos indica que, teoricamente, teremos 27 vezes melhor desempenho, o que de qualquer forma também é uma análise rasa do tema, mas claro que o ganho de desempenho é muito grande.

Como nada é tão bom, que não tenha problemas lutando para aparecer, o ponto fraco da tecnologia utilizada nos SSD é o número de ciclos de gravação que define sua vida útil. Pelos fabricantes, que são extremamente conservadores nesse aspecto, dispõe-se de dezenas de terabytes gravados até que o dispositivo apresente falhas.

Explorados estes aspectos de hardware que dizem respeito ao disco do laptop, devemos ponderar cerca a utilização deste recurso pelo software.

Os sistemas operacionais em geral fazem uso de áreas de troca (swap) para implementar a memória virtual, eles utilizam a memória principal (RAM) para esta função e complementam sua necessidade com arquivos de troca em disco. Além deste tipo de necessidade, existem diversas situações que geram arquivos temporários descartáveis ao termo das tarefas em curso. Isso significa um constante movimento de escrita em disco, como visto anteriormente, já que dispomos de um limite de ciclos de escrita nos discos SSD, é indicado a alocação de espaço para esta finalidade no disco rígido tradicional (HD) cuja determinação da vida útil não se dá pelos ciclos de escrita.

Outra consideração a ser feita, diz respeito aos dados dos usuários cuja utilização tem frequência bem menor do que os programas aplicativos e o próprio sistema operacional, assim é desejável favorecer o desempenho do acesso aos programas, mais que aos arquivos de dados. Logo percebe-se que ao disco SSD é mais apropriado a finalidade de instalação do S.O. e programas do que armazenamento de dados, salvo aplicações específicas em que o 'giro' dos dados seja intenso.

Assim traçamos um panorama geral no que tange a chamada memória secundária ou de massa, onde são aplicados dos o discos, sejam os tradicionais HDs, ou os SSDs.

E no final das contas o que devo fazer então?

Após instalar o SSD e o sistema operacional, que em laptops se constitui na maioria esmagadora dos casos em alguma versão do Microsoft Windows, alguns ajustes de configuração, permitirão tirar ainda mais proveito do recém instalado SSD, principalmente no seu desempenho, mas também no tocante a sua durabilidade.

Vamos nos basear no Windows 10 para descrever as configurações básicas a serem alteradas nesta afinação do sistema computacional, e vamos admitir que dispomos de um computador com um SSD de 120Gbytes e um HD de, digamos, 256Gbytes.

Instalando o Windows 10

Durante o processo de instalação do Windows 10, na verdade de qualquer versão, logo no princípio do processo é dada ao operador escolher onde instalar o sistema operacional. No caso desta máquina hipotética haverá dois discos disponíveis. Deve-se identificar e selecionar o disco SSD para a instalação do S.O. Com isso o segundo disco ficará, como dizer, sem uso do ponto de vista do Windows.

Ao ser concluída a instalação e o Windows estar 'em suas mãos' (o Windows 10 é bastante prolixo até concluir a instalação), lance o 'Gerenciador de Discos' (Disk Manager) que se parecerá com a Figura 1 a seguir.

Figura 1: Tela do Gerenciador de Discos


Como pode ser observado encontram-se dois discos no sistema, o Disco 0 (SSD 120GB) e o Disco 1 (HD 256GB). O Disco 1 pode ter sido reconhecido durante a instalação e não ser necessário inicializa-lo, mas partindo do pior caso, deve-se marca-lo para iniciação e selecionar um estilo de partição, por exemplo, MBR. Uma vez iniciado o disco deve ser particionado. Informe para utilizar todo o espaço disponível do disco e como em um laptop, não haverá um drive B, pode-se também aproveitar para designar que a unidade receba a letra B, com formatação NTFS, que é a nativa do Windows, rotulando o disco com um nome significativo, exemplificado como DATA, mas a escolha é individual.

Pode ser uma boa ideia, também mudar a letra da unidade de mídias ópticas, caso exista uma, e como não se utiliza mais unidade de disco flexível em laptops, pode-se designar a unidade de disco óptico com a letra A, como nas Figuras 2 e 3.

Figura 2: Alterando a letra da unidade óptica

Figura 3: Configuração final de discos

* No Anexo I é mostrada a sequência completa de operações envolvidas nas ações citadas acima.

Alterando a localização da área de troca (SWAP) do Windows 10

Por padrão ao ser instalado o Windows elege a unidade de boot, geralmente o disco C, como o local para criação do arquivo de troca e do diretório (ou pasta) TEMP. Com a utilização de uma unidade SSD para boot, é recomendável que estes importantes elementos não façam uso da unidade SSD para preservar sua vida útil já que está é determinada pela quantidade de ciclos de gravação como dito anteriormente.

Para alterar isto é necessário acessar as 'Configurações avançadas' do Windows, como mostrado na Figura 4 a seguir.

Figura 4: Configurações avançadas

Selecionando a guia 'Avançado' há no grupo 'Desempenho' o botão 'Configurações...' que dará acesso à janela de Opções de desempenho onde se pode alterar as configurações de 'Memória virtual'.

Ao pressionar o botão 'Alterar...' ganha-se acesso à janela 'Memória Virtual' com as configurações em uso no momento. O padrão do Windows 10 é: Gerenciar automaticamente o tamanho do arquivo de paginação de todas as unidades; utilizando apenas o disco de boot (em geral C:) mesmo que existam mais discos no sistema.

Figura 5: Reconfiguração do arquivo de troca

O objetivo é tomar o controle do gerenciamento, desmarcando esta caixa de seleção e colocar no HD o arquivo de troca e, opcionalmente, controlar o tamanho do arquivo, que deve ter como tamanho mínimo o mesmo valor da RAM presente no sistema e máximo de até 1,5 vezes o valor da RAM presente no sistema.

Eventualmente ao final desta reconfiguração o Windows 10 pede que o sistema seja reiniciado para a efetivação dos novos ajustes.

Nota:    Os procedimentos de mudança do arquivo de troca, mesmo seguindo recomendações da comunidade Microsoft, não funcionaram como devido em nenhum dos testes realizados tanto com máquinas virtuais quanto físicas, sempre criando arquivo de troca na unidade de boot.

Alterando a localização dos arquivos temporários

Para realocar a pasta de arquivos temporários do sistema, e do usuário logado, é necessário, inicialmente, criar alguns subsídios que são: uma pasta temp para os temporários do Windows; uma pasta para cada usuário que possa efetuar logon no sistema, contendo uma pasta temp para os arquivos temporários do usuário logado no momento. Então, novamente, deve-se acessar as 'Configurações avançadas' na guia 'Avançado', conforme visto na Figura 4. No fundo da janela deve-se pressionar o botão 'Variáveis de Ambiente' que leva à janela 'Variáveis de Ambiente', como mostrada na Figura 6.

Figura 6: Exemplo de variáveis de ambiente

Nesta janela é possível identificar duas áreas denominadas: Variáveis de usuário para xxxx e Variáveis do sistema, em ambas há as variáveis TEMP e TMP que devem ser editadas para refletir os novos locais dos arquivos temporários, como exemplificado na Figura 7.

Figura 7: Variáveis de Ambiente

* No Anexo II é mostrada a sequência completa de operações envolvidas nas ações citadas.

Alterando a localização das áreas de dados do usuário

A logarem pela primeira vez os usuários ganham em seus diretórios um conjunto de pastas, sendo a básicas as seguintes: documentos; downloads; imagens; e músicas, que devem, igualmente, ser redesignadas para o HD, de forma que o SSD seja utilizado apenas e tão somente para o sistema operacional e programas aplicativos. Esta redesignação para cada pasta de cada usuário é efetuada pela seguinte sequência de operações (Figuras 8 a 12):

Figura 8: Acessar o menu de contexto

Figura 9: Ativar a guia Local

Figura 10: Editar o local

Figura 11: Criar nova pasta


Figura 12: Transferir conteúdos

Considerações finais

Tudo quanto foi reconfigurado, visa dois objetivos, o primeiro na verdade é poupar o espaço da unidade SSD para usos de suporte ao sistema, ou seja, instalação do sistema operacional e programas. O segundo objetivo, já declarado, é preservar a vida útil da unidade, diminuindo ao máximo a exposição a ciclos de gravação.

Da mesma forma que foi feito com as quatro pastas de dados básicas do usuário, poderia ser redesignado também o local das pastas: Área de trabalho; Contatos; Favoritos; Jogos Salvos; Links; Objetos 3D; e Vídeos, em função do tipo de uso dado ao sistema.

Sempre e a qualquer momento, fazendo uso do botão 'Restaurar padrão', mostrado na Figura 10 acima, pode-se reverter a realocação da pasta desejada.

Referências

BERNARDI, Ricardo. Comparativo entre um SSD e um HD convencional. RBTech.info 2013. Disponível em <http://hardware.rbtech.info/comparativo-entre-um-ssd-e-um-hd-convencional/>. Acessado em 20/12/2017

Wikipedia. Small form factor. Disponível em <https://en.wikipedia.org/wiki/Small_form_factor>. Acessado em 25/12/2017.

Groupe Figaro CCM Benchmark. Controlar o sistema do arquivo de troca swap no Windows 10. Disponível em <http://br.ccm.net/faq/24988-controlar-o-sistema-do-arquivo-de-troca-swap-no-windows-10>. Acessado em 27/12/2017.

Microsoft Community. Bug Windows 10 Memória Virtual Não Habilita Para Atualização. Disponível em <https://answers.microsoft.com/pt-br/windows/forum/windows_10-other_settings/erro-no-windows-10-em-propriedades-do-sistema/23ea9272-6ab9-45f9-bb9f-205f70506c23>. Acessado em 29/12/2017.

Microsoft Community. Memória Virtual no w10. Disponível em <https://answers.microsoft.com/pt-br/windows/forum/windows_10-performance/memã³ria-virtual-no-w10/dd0417d3-dac7-40e4-8df7-c7c750cff439>. Acessado em 29/12/2017.

Microsoft Community. Windows 10 Erro No Acesso a Memória Virtual. Disponível em <https://answers.microsoft.com/pt-br/windows/forum/windows_10-other_settings/windows-10-erro-no-acesso-a-memória-virtual/62ae1e14-c103-45ef-8368-60c0254e5061>. Acessado em 29/12/2017.

Suporte do Windows. Como determinar o tamanho do arquivo de paginação apropriado para versões de 64 bits do Windows. Disponível em <https://support.microsoft.com/pt-br/help/2860880/how-to-determine-the-appropriate-page-file-size-for-64-bit-versions-of>. Acessado em 27/12/2017

Anexo I – Inicializando, formatando e alterando letras de unidades de disco

Como citado no artigo caso o disco não seja reconhecido durante a instalação do Windows, ou mesmo caso seja adicionado posteriormente a ela, pode ser necessário inicializa-lo, caso em que teremos a opção de empregar MBR (Master Boot Record ou em português, Registro Mestre de Inicialização) ou GPT (GUID Partition Table ou em português, Tabela de Partição GUID. GUID Global Unique IDentifier ou em português Identificador Único Global). Importa saber que o MBR por trabalhar com 32 bits só consegue gerenciar partições de até 2Tbytes e o GPT por sua vez operando om 64 bits é capaz de gerenciar partições de até 1Zbyte (hospedando NTFS apenas 256 Tbytes por limitações deste).

Após inicializado o Disco 1 surge como um espaço não alocado assim como sem uma letra de drive atribuída para si. Ativando o assistente de novas partições do Windows 10 (com o ponteiro do mouse sobre a área hachurada e pressionando o botão direito do mouse surge a janela do assistente) pode-se inicialmente determinar o tamanho do volume de partição, normalmente o máximo disponível da unidade de disco. Avançando no processo a próxima janela tem por função definir a letra da unidade, ou o ponto de montagem da partição como uma pasta. Por padrão esta janela nos é apresentada sugerindo a próxima letra livre do alfabeto para a nova partição, pode-se alterar para qualquer outra letra disponível. Após a seleção da devida letra de unidade ao avançar para a próxima etapa do particionamento que é a definição do tipo de sistema de arquivos e também a definição de um rótulo para o volume.

      

Ao avançar no processo é exibida uma janela com o resumo das características selecionadas e aguarda-se a permissão de continuação dos procedimentos de formatação, atribuição de letra da unidade, formatação do sistema de arquivos e nomeação da unidade criada.

      

Opcionalmente, é possível alterar a letra da unidade de mídia óptica, caso esta esteja disponível, para tanto efetua-se a rolagem da porção inferior da janela do Gerenciamento de disco, até que a unidade seja exibida e ativa-se o menu de contexto para a unidade (mais uma vez com o ponteiro do mouse sobre a unidade e pressionando o botão direito do mouse), como visto a seguir, e seleciona-se a opção 'Alterar letra de unidade e caminho'. A seguir é exibida a janela 'Alterar a letra e os caminhos da unidade para ?:'. Pressionando o botão 'Alterar...' é exibida então a janela "Alterar a letra de unidade ou caminho', contendo uma lista drop-down (lista de derrubar) que ao ser ativada mostra todas as letras disponíveis para atribuição à unidade. Uma vez escolhida a letra desejada, ao pressionar o botão 'OK', o sistema anunciará numa caixa de alerta que talvez alguns programas não operem bem com a alteração solicitada e pede que se confirme a realização final da operação.

      

Após toda esta sequência de ações e operações, o explorer exibirá, por exemplo, desta forma as unidades do sistema reconfigurado.

Anexo II – Redesignando o local dos arquivos temporários de sistema e de usuário

Com poucos cliques é possível determinar locais específicos para os arquivos temporários do Windows, começando por criar um diretório (ou pasta) denominado temp para receber os arquivos temporários do sistema, a seguir confirmar por meio do sinal de prontidão da janela de linha de comando, qual o efetivo nome de usuário logado para usá-lo na criação do diretório deste mesmo usuário no HD. Depois de criado o diretório do usuário deve-se criar dentro dele o diretório temp para os arquivos temporários do usuário. Em seguida a isso efetua-se acesso a 'Configurações avançadas' onde encontra-se o botão 'Variáveis de Ambiente...', que leva à janela 'Variáveis de Ambiente' na qual há dois campos, 'Variáveis de usuário para xxxx' e 'Variáveis do sistema.

            

              

Em ambos os campos pode-se localizar as variáveis TEMP e TMP. Todas as quatro variáveis devem ser editadas e alteradas para apontar as pastas temp criadas no início deste texto.

Uma vez editadas as quatro variáveis, (para o segundo usuário em diante só será necessário editar as duas variáveis de usuário) premendo o botão OK a redesignação das áreas de temporários estará concluída.


CRON

Cron é um daemon[1] que executa comandos agendados. O cron é iniciado automaticamente de /etc/init.d ao entrar em níveis de execução de vários usuários. O cron procura sua área de spool (/var/spool/cron/crontabs) para arquivos crontab (que são nomeados conforme as contas em /etc/passwd); crontabs encontrados são carregados na memória. Observe que os crontabs neste diretório não devem ser acessados ​​diretamente - o comando crontab deve ser usado para acessá-los e atualizá-los.

O cron também lê /etc/crontab, que tem um formato ligeiramente diferente. Além disso, o cron lê os arquivos contidos em /etc/cron.d.

O cron em seguida acorda a cada minuto, examinando todos os arquivos crontab armazenados, verificando cada comando para ver se deve ser executado no horário atual. Ao executar comandos, a saída destes (stdout) é enviada para o proprietário do crontab (ou para o usuário nomeado na variável de ambiente MAILTO do crontab, caso exista). As cópias dos filhos do cron que executam esses processos recebem nome em letras maiúsculas, como será visto nas saídas de syslog e de ps.

Além disso, o cron verifica a cada minuto se o modtime (modification-time) do diretório spool (ou o modtime do arquivo /etc/crontab) foi alterado e, se houver acontecido isso, o cron examinará o modtime de todos os arquivos crontab e recarregará aqueles que foram alterados. Por isso, o cron não precisa ser reiniciado a cada vez que um arquivo crontab for modificado. Observe que o comando crontab (1) atualiza o modtime do diretório spool sempre que ele muda algum crontab.

São feitas considerações especiais quando o relógio do sistema é alterado em menos de 3 horas, por exemplo, no início e no final do horário de verão. Se o tempo se deslocou para frente, os trabalhos que deveriam ter funcionado no horário saltado serão executados logo após a mudança. Por outro lado, se o relógio muda para trás, em menos de 3 horas, os trabalhos que caem no horário repetido não serão executados mais uma vez.

Somente os trabalhos que são executados em determinado momento (não especificado como @hourly, nem com '*' nos campos de hora ou minuto) são afetados. Os trabalhos com agendamento especificado com coringas (wild cards) são executados com base no novo horário, imediatamente.

As mudanças de relógio em mais de 3 horas são consideradas como correções de horário e o novo horário é assumido de imediato.

No Debian e no Red Hat cron trata os arquivos em /etc/cron.d como extensões ao arquivo /etc/crontab (eles seguem o formato especial deste arquivo, ou seja, eles incluem o campo de usuário). O propósito desse recurso é permitir que os pacotes que exigem um controle mais fino de seu agendamento do que dos diretórios /etc/cron.{daily, weekly, monthly} adicione um arquivo crontab a /etc/cron.d. Esses arquivos devem ser nomeados com a identificação do pacote que os inclui. Os arquivos devem estar em conformidade com a mesma convenção de nomenclatura usada pelas partes executadas: elas devem consistir apenas de letras maiúsculas e minúsculas, dígitos, sublinhados e hifens. Como /etc/crontab, os arquivos no diretório /etc/cron.d são monitorados por alterações.

Você deve usar nomes de caminho absolutos para comandos como /bin/ls. Isso para garantir que você chame o comando correto.

CRONTAB

crontab é o programa usado para instalar, desinstalar ou listar as tabelas de agendamento usadas para guiar o daemon do cron no Vixie[2] Cron. Cada usuário pode ter seu próprio crontab e, embora estes arquivos estejam em /var/spool/cron/crontabs, eles não devem ser editados diretamente.

Cada usuário tem seu próprio crontab, e os comandos em qualquer crontab dado serão executados como o usuário que possui (proprietário) o crontab. Os usuários uucp e news geralmente terão seus crontabs próprios, eliminando a necessidade de executar, explicitamente, su como parte de um comando cron.

Linhas em branco, espaços iniciais e tabulações são ignorados. Linhas cujo primeiro caractere não especial é um sinal de jogo da velha (# - hash) são comentários e serão ignoradas. Observe que os comentários não são permitidos na mesma linha que os comandos do cron, uma vez que eles serão levados a fazer parte do comando. Da mesma forma, os comentários não são permitidos na mesma linha que as configurações das variáveis de ambiente.

Uma linha ativa em um crontab será uma configuração de ambiente ou um comando cron. Uma configuração de ambiente tem a forma nome = valor, onde os espaços ao redor do sinal de igual (=) são opcionais, e quaisquer espaços subsequentes não iniciais (leading space) no valor serão parte do valor atribuído ao nome. A cadeia de caracteres dos valores pode ser colocada entre aspas (ou apóstrofos) para preservar os espaços em branco iniciais (leading space) ou finais (trailing space). A cadeia de caracteres do valor não é analisada para substituições, portanto linhas como PATH=$HOME/bin:$PATH não funcionarão da forma esperada.

Algumas variáveis ​​de ambiente são configuradas automaticamente pelo daemon do cron. SHELL é configurada para /bin/sh, LOGNAME e HOME são definidas a partir da linha correspondente ao usuário em /etc/passwd do crontab. PATH está definida para valer "/usr/bin:/bin". HOME, SHELL e PATH podem ser substituídos por configurações específicas no crontab; LOGNAME é o usuário do qual o trabalho está sendo executado e não pode ser alterado. E mais, a variável LOGNAME às vezes é chamada de USER em sistemas BSD, nesses sistemas, o USER também será configurado.

Além de LOGNAME, HOME e SHELL, o cron verificará MAILTO caso tenha algum motivo para enviar mensagens como resultado da execução de comandos "neste" crontab. Se MAILTO estiver definida (e não vazia), um correio será enviado ao usuário assim chamado. Se MAILTO for definida, mas vazia (MAILTO = ""), nenhuma mensagem será enviada. Caso contrário, o correio é enviado ao proprietário do crontab.

Se o arquivo /etc/cron.allow existir, então o usuário deve estar listado no mesmo para poder usar esse recurso. Se o arquivo /etc/cron.allow não existir, mas o arquivo /etc/cron.deny existir, então o usuário não deve estar listado no arquivo (/etc/cron.deny) para usar este recurso. Se nenhum desses arquivos existir, em função dos parâmetros de configuração locais, somente o super usuário (root) poderá usar esse comando ou, por outro lado, todos os usuários poderão usar o recurso de crontab. Em sistemas Debian padrão, todos os usuários podem usar esse comando.

Se a opção -u for usada, especifica o nome de usuário cujo crontab deve ser ajustado. Se esta opção não for fornecida, o crontab examina o "seu" crontab, ou seja, o crontab da pessoa que executa o comando (usuário corrente). Note que su pode confundir o crontab, se você estiver executando sob su, você sempre deve usar a opção -u por garantia de segurança.

A primeira forma deste comando é usada para instalar um novo crontab a partir de algum arquivo especificado ou da entrada padrão se o pseudo-nome de arquivo "-" for indicado.

A opção -l faz com que o crontab atual seja exibido na saída padrão.

A opção -r faz com que o crontab atual seja eliminado (removido).

A opção -e é usada para editar o crontab atual usando o programa editor de texto especificado pelas variáveis ​​de ambiente VISUAL ou EDITOR. O editor especificado deve editar o arquivo no local; qualquer editor que desvincule o arquivo e o recrie não pode ser usado. Depois de sair do editor, o crontab modificado será instalado (ativado) automaticamente.

No sistema Debian GNU / Linux, o cron suporta o módulo pam_env e carrega o ambiente especificado por /etc/security/pam_env.conf. No entanto, a configuração PAM NÃO substitui as configurações descritas acima nem qualquer configuração no próprio arquivo crontab. Observe, em particular, que se você quiser um PATH diferente de "/usr/bin:/bin", você precisará configurá-lo no arquivo crontab.

Por padrão, o cron enviará o correio usando o cabeçalho "Content-Type:" como "text/plain" com o parâmetro "charset =" definido no charmap / codeset da localização em que o crond é iniciado, ou seja, ou a localização padrão do sistema, se nenhuma variável de ambiente LC_* estiver configurada, ou a localização especificada pelas variáveis ​​de ambiente LC_* (ver man 7 locale). Pode-se usar diferentes codificações de caracteres para a saída do trabalho do cron enviado, configurando as variáveis ​​CONTENT_TYPE e CONTENT_TRANSFER_ENCODING em crontabs, para os valores corretos dos cabeçalhos de e-mail desses nomes.

FORMATO DA CRONTAB

Os comandos são executados pelo cron quando os minutos, horas e meses de ano correspondem à hora atual e quando pelo menos um dos dois campos do dia (dia do mês ou dia da semana) corresponde à hora atual.

Um campo pode ter um asterisco (*), que significa "qualquer".

Intervalos de números são permitidos. Os intervalos são dois números separados por um hífen. O intervalo especificado é inclusivo. Por exemplo, 8-11 para uma entrada de "horas" especifica a execução nas horas 8, 9, 10 e 11.

Listas são permitidas. Uma lista é um conjunto de números (ou intervalos) separados por vírgulas. Exemplos: "1,2,5,9", "0-4,8-12".

Os valores de salto podem ser usados ​​em conjunto com intervalos. Seguir um intervalo com "/" especifica saltos do valor do número dentro do intervalo. Por exemplo, "0-23/2" pode ser usado no campo de horas para especificar a execução do comando a cada duas horas (a alternativa no padrão V7[3] é "0,2,4,6,8,10,12,14,16,18,20,22 "). Os passos também são permitidos após um asterisco, então, se você quer dizer "a cada duas horas", use apenas "*/2".

Os nomes também podem ser usados ​​para os campos "mês" e "dia da semana". Use as primeiras três letras do dia ou mês em particular (em inglês e a caixa não importa). Não são permitidas faixas ou listas de nomes nestes campos.

O "sexto" campo (ou seja, o resto da linha) especifica o comando a ser executado. A parte do comando da linha toda, até uma nova linha ou o caractere porcento (%), será executada por /bin/sh ou pelo shell especificado na variável SHELL do arquivo crontab. Os sinais de porcentagem (%) no comando, a menos que 'escapado' com barra invertida (\), serão alterados para caracteres de nova linha e todos os dados após o primeiro % serão enviados ao comando como entrada padrão. Não há como dividir uma única linha de comando em múltiplas linhas, como com o "\" de final de linha do shell.

Nota: O dia da execução de um comando pode ser especificado por dois campos – 'dia do mês' e 'dia da semana'. Se ambos os campos estiverem especificados restritivamente (ou seja, não forem *), o comando será executado quando qualquer dos dois campos corresponder ao momento atual. Por exemplo, "30 4 1,15 * 5" faria com que um comando fosse executado às 4:30 da manhã no dia 1 e 15 de cada mês, mais todas as sextas-feiras.

Em vez dos cinco primeiros campos, uma das oito sequências de caractere especiais pode aparecer:

Tabela 1: Sequências especiais de momentos

Cadeia Significado
@reboot Executar uma vez, na inicialização.
@yearly Executar uma vez por ano, "0 0 1 1 *".
@annually (O mesmo que @yearly)
@monthly Executar uma vez por mês, "0 0 1 * *".
@weekly Executar uma vez por semana, "0 0 * * 0".
@daily Executar uma vez por dia, "0 0 * * *".
@midnight (Idêntico a @daily)
@hourly Executar uma vez por hora, "0 * * * *".

Fonte: Página do comando man 5 crontab do Ubuntu Linux 16.04 LTS, 2017

Um exemplo de formato crontab com campos comentados é o seguinte:

# Minute Hour Dia do Mês Mês Dia da Semana Comando
# (0-59) (0-23) (1-31) (1-12 ou jan-dez) (0-6 ou Sun-Sat)
  0 2 12 * * /usr/bin/find

Esta linha executa o comando "find" às 2h do dia 12 de cada mês.

EXEMPLOS

Aqui estão alguns exemplos de linhas de crontab. Use o comando "crontab -e" para editar seu arquivo crontab.

Esta linha executa o comando "ping" a cada minuto de cada hora de cada dia de cada mês. A saída padrão é redirecionada para /dev/null, então não receberemos e-mail, mas permitiremos que o erro padrão seja enviado como um e-mail. Se você não quer e-mail algum, altere a linha de comando para "/sbin/ping -c 1 192.168.0.1 > /dev/null 2> & 1".

* * * * * /sbin/ping -c 1 192.168.0.1 > /dev/null

Esta linha executa o comando "ping" e "ls" às 0 e às 12 horas no 1º dia de cada bimestre. Ele também coloca a saída dos comandos no arquivo de log /var/log/cronrun.

0 0,12 1 */2 * /sbin/ping -c 192.168.0.1;  ls -la >> /var/log/cronrun

Esta linha executa o comando de relatório de uso do disco (du) para obter o tamanho do diretório a cada 2 horas do dia 1 ao 10 de cada mês. O e-mail é enviado para os endereços de e-mail especificados com a linha MAILTO. O PATH também está definido para algo diferente do padrão.

PATH = /usr/local/sbin:/usr/local/bin:/home/user1/bin
MAILTO = user1@nowhere.org, user2@somewhere.org
0 2 1-10 * * du -h --max-depth = 1 /

Esta linha exemplifica como executar um trabalho em cron todos os meses às 4h das segundas-feiras além de nos dias entre 15 e 21 (15, 16, 17, 18, 19, 20, e 21). Isso ocorre porque usar os campos do 'dia do mês' e 'dia da semana' com restrição (diferente de *) torna esta, uma condição "or", não uma condição "and". Assim, ambas as restrições serão executadas.

0 4 15-21 * 1 /comando

Executar em cada segundo domingo de cada mês. O comando de verificação (test) deve ser usado devido à característica (ou 'problema') mencionada no exemplo anterior.

0 4 8-14 * * test $(data +\%u) -eq 7 && echo "Segundo Domingo"

PEGADINHAS OU COISAS PARA VERIFICAR

  1. Quando o cronjob é executado a partir do crontab de usuários, ele é executado como esse usuário. No entanto, ele não agrega, considera nenhum arquivo no diretório inicial dos usuários, como .cshrc ou .bashrc ou qualquer outro arquivo. Se precisar do cron carregar (ler), qualquer arquivo de configuração de ambiente adicional para seu script, você deve fazê-lo a partir do próprio script que está sendo chamado. Portanto, para definir caminhos, processar arquivos, configurar variáveis ​​de ambiente, e etc. deve-se tomar as providências devidas.
  2. Se a conta de usuários tiver um crontab, mas nenhum shell padrão utilizável em /etc/passwd, o cronjob não será executado. Você terá que designar à conta um shell para que o crontab seja executado.
  3. Se o cronjob não estiver executando, verifique se o daemon cron está sendo executado. Então lembre-se de verificar os arquivos /etc/cron.allow e /etc/cron.deny. Se existirem, o usuário que deseja executar trabalhos deve estar em /etc/cron.allow. Você também pode querer verificar se o arquivo /etc/security/access.conf existe. Pode ser necessário adicionar o usuário lá.
  4. O crontab não é analisado para substituições ambientais. Você não pode usar coisas como $PATH, $HOME ou ~/sbin. Você pode definir coisas como MAILTO = ou PATH = e outras variáveis ​​de ambiente que o shell /bin/sh utilize.
  5. Cron não lida com segundos, logo você não pode ter tarefas agendadas em qualquer período de tempo lidando com segundos. Como um cronjob disparando a cada 30 segundos.
  6. Você não pode usar % na área de comando (declaração de comando). Ele precisará ser escapado e, se usado ​​com substituição de comando, como o comando date, você pode colocá-lo entre crases. Ex: `date +\%Y-\%m-\%d`. Ou utilize a substituição do comando bash $() (desde que declare SHELL=/bin/bash).
  7. Cuidado com 'dia do mês' e 'dia da semana' juntos. Os campos do 'dia do mês e 'dia da semana' com restrições (não *) tornam esta, uma condição "or" não uma condição "and". Quando qualquer um dos campos for verdadeiro, o cronjob será executado.

SITES CRON ÚTEIS

REFERÊNCIAS

Pantz.org Technical Reference Site. Cron and Crontab use and exeamples. [S.l.]: pantz.org, 2015. Disponível em: <https://www.pantz.org/software/cron/croninfo.html>. Acesso em 23-junho-2017.

NOTAS

[1] Em sistemas operacionais multitarefa, um daemon é um programa de computador que executa como um processo em segundo plano, em vez de estar sob o controle direto de um usuário interativo. Tradicionalmente, o nome de processo de um daemon termina com a letra d, para deixar claro que o processo é, de fato, um daemon. No universo Microsoft é conhecido pela denominação serviço.

[2] Paul Vixie responsável pela implementação do cron na 4ª versão do BSD, adicionou um campo para a conta de usuário.

[3] V7, Versão7 ou UNIX Versão 7. Referência a versão do UNIX lançada em 1979, que é a última versão do UNIX sob responsabilidade do Bell Laboratories. Em 1980 o UNIX foi vendido para a AT&T.

Recentemente, uma questão estranha vem atrapalhando as distribuições do Linux que usam o apt para se atualizar (em geral as derivadas do Debian).

Ao executar o comando sudo apt-get update (ou sudo apt update), o processo fica parado ao se conectar a qualquer dos repositórios padrão ou lento ao rastrear e baixar cabeçalhos durante o processo de atualização.

Depois de muitas tentativas de solução e de perseguir pistas falsas (como problemas de DNS, cache e gateway), finalmente, as buscas pela Internet apontaram para uma solução surpreendente.

Anteriormente a solução era mudar o servidor para baixar as atualizações, alterando sources.list (/etc/apt/source.list). Em circunstâncias normais, isso corrigia os problemas, mas não agora.

O problema

Demorou bastante tempo para descobrir isso, mas o problema está no IPv6.

Com o IPv6 ativado, a nova pilha de rede parece tropeçar, especialmente quando tenta atualizar com o apt.

O contorno

Para bloquear uso de IPv6 para operações de atualização (update) com o apt, podemos fazer uma adequação na configuração do apt, criando um arquivo (usamos chama-lo de 99force-ipv4) com a diretiva que define uso exclusivo do protocolo IP desejado, como mostrado a seguir:

sudoedit /etc/apt/apt.conf.d/99force-ipv4

O arquivo deve conter a linha

Acquire::ForceIPv4 "true";

Se for o caso de inibir o uso de IPv4, altere o nome para 99force-ipv6 e use a linha:

Acquire::ForceIPv6 "true";


Caso queira fazê-lo por apenas uma execução existe a possibilidade de uso da opção no comando apt

-o Acquire::ForceIPv4=true

ou

-o Acquire::ForceIPv6=true

conforme o protocolo a ser forçado, como exemplificado para uso de IPv4 a seguir:

apt-get -o Acquire::ForceIPv4=true update
apt-ger -o Acquire::ForceIPv4=true upgrade

Até a próxima

1

Hoje se inicia o partilhamento de conhecimentos que vêem sendo aquilatados ao longo dos anos de estudo e prática profissional. É também uma ação de divulgação de conhecimento científico.

No início serão diversas as publicações de temas não diretamente correlatos, que em dado momento passarão a fazer sentido como conjunto, e ainda assim, vez por outra, alguma publicação poderá parecer desconexa. Paciência, mais à frente as coisas mostrarão sua liga.

As postagens farão uso de marcações de categoria e etiquetas, as categorias serão divididas organicamente ao longo do tempo e conforme subdivisões tornem-se relevantes e necessárias. Já as etiquetas serão como palavras chave, quem sabe um dia tornem-se parte de um vocabulário controlado.