Baixe o app para aproveitar ainda mais
Prévia do material em texto
22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/13 Programação para Servidores Aula 10 - Programação avançada 4: Trabalhando com arquivos, Subshell e Shell Restrito INTRODUÇÃO Nesta última aula, veremos diversas situações em que podemos empregar scripts na manipulação de arquivos, desde operações simples, como listá-los, até a alteração de características, como direitos de acesso e data. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/13 Veremos ainda um recurso muito interessante que permite criar arquivos temporários com diversas �nalidades dentro do sistema. Finalizaremos com o estudo dos processos no shell. OBJETIVOS Identi�car arquivos no sistema; Manipular horários de acessos a arquivos; Praticar com arquivos temporários; Explicar o conceito e o funcionamento de subshells; Construir rotinas paralelas com subshell; Desenvolver scripts usando shell restrito. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/13 AGENDAMENTO DE TAREFAS O cron é um daemon que permite o agendamento da execução de um programa para um determinado dia/mês/ano/hora. É muito usado em tarefas de arquivamento de logs, teste da integridade do sistema e execução de programas em horários pré-determinados. Os arquivos responsáveis pela manutenção automática do sistema encontram-se em arquivos individuais localizados nos diretórios: Crontab (glossário) é o programa que edita o arquivo onde são especi�cados os comandos a serem executados e a hora e dia de execução pelo cron. Ao solicitar a abertura de um arquivo para edição, o mesmo será aberto em um editor de textos que segue o padrão do editor “vi”. O arquivo de controle segue uma formatação baseada em campos: O campo pode conter um asterisco, o que signi�ca que todos os períodos serão marcados, sejam eles horários, dias ou meses. Pode-se utilizar intervalos de números (glossário), que são indicados por dois números separados por um hífen. É possível utilizar listas (glossário), que são representadas por números (ou intervalos) separados por vírgulas. Um “/número” (glossário) imediatamente após um intervalo especi�ca um passo no valor do número através do intervalo. Esses intervalos também são permitidos depois de um asterisco. Logo, se for simplesmente desejável que uma ação ocorra a cada duas horas, pode-se utilizar "*/2". O último campo serve para especi�car o comando a ser executado. Veremos agora um arquivo do crontab: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/13 O arquivo /etc/cron.deny lista os usuários que não podem utilizar o crontab. Caso haja a necessidade de executar um comando uma única vez no futuro, pode ser utilizado o comando at. As sintaxes para o comando at (glossário) são: LISTANDO ARQUIVOS Uma forma simples de listar arquivos é por intermédio do comando echo. O shell expande os curingas e o echo os exibe em uma lista separada por espaço, sem interpretar argumentos. O comando ls, por sua vez, sabe que seus argumentos devem ser arquivos. Outra diferença é que o ls ajusta sua exibição de acordo com a largura da janela, arrumando a saída em colunas. Se precisar que a saída seja um arquivo por linha, pode-se utilizar uma das formas abaixo para o comando: As principais opções do comando ls são: Arquivos cujo nome começam por ponto (“.”) não são listados por ls, a menos que seja utilizada a opção “-a”. MODIFICANDO HORÁRIO DE ATUALIZAÇÃO O comando touch (glossário) sem opções pode ser utilizado para criar arquivos. É bastante comum a criação de arquivos vazios por scripts para indicar que está sendo realizada determinada tarefa. Quando utilizado em arquivos já existentes, o touch serve para modi�car o último horário de acesso (opção "-a") ou de modi�cação (opção "-m" ou sem opção) do arquivo. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/13 Se o horário não for informado, será utilizado o horário corrente. Porém, o horário pode ser especi�cado pela opção "-t", que utiliza o formato [[CC]YY]MMDDhhmm[.SS]. Pode também ser utilizada a opção "-r" para copiar a marca de tempo de um arquivo de referência, como no exemplo: ARQUIVOS TEMPORÁRIOS PROCURANDO ARQUIVOS Para buscar por arquivos recursivamente a partir de um determinado diretório, é utilizado o comando �nd (glossário). Além de encontrar arquivos, o �nd é capaz de executar uma série de operações sobre os arquivos encontrados. As principais opções do comando �nd são: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 6/13 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 7/13 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 8/13 SUBSHELL Para exempli�car, criaremos o script de nome "teste_subshell.sh" com o seguinte conteúdo: Vamos executar com o comando: Se em outro terminal entrarmos com o comando: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 9/13 Será apresentado: Nesse exemplo, observamos que o script que possui PID 25357 deu origem ao subshell 25358. Um comando externo executado em um script gera um subprocesso, enquanto um comando interno não gera qualquer subprocesso. Por isso, um comando interno executa mais rápido e consome menos recursos do que comandos externos equivalentes. Variáveis em um subshell não são visíveis fora do bloco do subshell. Não sendo, assim, acessíveis pelo processo pai. Dessa forma, um subshell pode ser utilizado para criar um ambiente especí�co para determinado bloco de comandos. EXECUÇÃO PARALELA DENTRO DE UM SUBSHELL Veja o exemplo a seguir. Observe que o primeiro e o segundo blocos executam paralelamente em segundo plano, enquanto o terceiro bloco executa em paralelo aos dois primeiros. No próximo exemplo, o script termina sua execução, mas os dois blocos anteriores continuam executando em segundo plano até terminarem seus respectivos loops. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 10/13 Para fazer com que o script continue sua execução somente após o término dos blocos que estão em segundo plano, pode ser utilizado o comando interno wait: SHELL RESTRITO Executar um script ou parte de um script em modo restrito desativa alguns comandos (glossário), tornando-os indisponíveis. É uma medida de segurança destinada a limitar os privilégios do usuário do script e minimizar possíveis danos causados pela execução do script. Veja o exemplo: ATIVIDADE Vamos praticar com uma atividade: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 11/13 Cite o trecho de texto que deve ser inserido no crontab para agendar a execução de: • /home/scripts/agenda1.sh às segundas-feiras às 06:00 da manhã; e • /home/scripts/backup.sh todos os dias às 11:00 horas da noite. Resposta Correta Glossário CRONTAB Ele possui os seguintes parâmetros: • -l usuário: lista as tarefas agendadas para o usuário; • -e usuário: edita o agendador; • -d usuário: apaga o arquivo do usuário. INTERVALOS DE NÚMEROS Por exemplo, 8-10 em uma entrada horas especi�ca execução às 8, às 9 e às 10 horas. LISTAS Por exemplo: 1,2,5,6,12-17,21,23. 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 12/13 “/NÚMERO” Por exemplo, 0-23/2 pode ser usado no campo das horas para especi�car que o comandodeve ser executado a cada duas horas (0,2,4,6,8,10,12,14,16,18,20,22). COMANDO AT Os parâmetros são: • hh: hora da execução; • mm: minuto da execução; • DD: dia da execução; • MM: mês da execução; • AAAA: ano da execução; • Comando: comando/programa a ser executado. Para o gerenciamento dos agendamentos feitos com o at, existem os comandos atq (mostra os agendamentos na �la) e atrm (remove agendamentos da �la). COMANDO TOUCH Por exemplo, o comando: Esse comando irá criar um arquivo vazio de nome “teste.txt” dentro do diretório de trabalho do script. MKTEMP Quando utilizado sem parâmetros, o mktemp cria um arquivo temporário no diretório apropriado ("/tmp") e retorna o nome deste arquivo. Somente o dono do processo que fez a chamada à mktemp terá permissão para ler e/ou escrever no arquivo. Caso deseje escolher parte do nome do arquivo, deve especi�car o nome com caracteres "X" no �nal do arquivo. Dessa forma, todos os "X" serão substituídos por caracteres aleatórios e o arquivo será criado no diretório de trabalho do script. Para criar no diretório temporário, deve ser utilizada a opção "-t". A opção -d pode ser utilizada para criar um diretório no lugar de um arquivo. Veja um exemplo: COMANDO FIND Sua sintaxe é: 22/06/2018 Disciplina Portal http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 13/13 COMANDOS DESATIVADOS Os seguintes comandos e ações são desabilitados: • Utilizar o comando cd para alterar o diretório; • Alterar os valores das variáveis de ambiente $PATH, $SHELL, $BASH_ENV ou $ENV; • Ler ou alterar opções do shell ($SHELLOPTS); • Redirecionar a saída; • Executar comando contendo uma ou mais barras (/); • Chamar exec para substituir o shell por um processo diferente.
Compartilhar