Entendendo e aprendizado

Entendendo e aprendizado

A Fundação Linux lançou o LFCs certificação (Linux Foundation Certified Sysadmin), uma nova iniciativa cujo objetivo é permitir que indivíduos em todos os lugares (e em qualquer lugar) sejam certificados no suporte operacional básico a intermediário para sistemas Linux, que inclui suportar sistemas e serviços em execução, além de monitoramento e análise gerais, além de tomada de decisão inteligente Quando se trata de levantar problemas para as equipes de apoio superior.

Linux Foundation Certified Sysadmin - Parte 10

Confira o vídeo a seguir que o guia uma introdução ao programa de certificação Linux Foundation.

Este é o último artigo (Parte 10) da atual série Long 10-Tutorial. Neste artigo, focaremos em scripts básicos de shell e solução de problemas de arquivos Linux Systems. Ambos os tópicos são necessários para o exame de certificação LFCS.

Entendendo terminais e conchas

Vamos esclarecer alguns conceitos primeiro.

  1. Um shell é um programa que recebe comandos e os dá ao sistema operacional a ser executado.
  2. Um terminal é um programa que nos permite que os usuários finais interajam com o shell. Um exemplo de um terminal é o terminal Gnome, como mostrado na imagem abaixo.
Terminal Gnome

Quando iniciamos um shell pela primeira vez, ele apresenta um prompt de comando (também conhecido como linha de comando), que nos diz que o shell está pronto para começar a aceitar comandos de seu dispositivo de entrada padrão, que geralmente é o teclado.

Você pode consultar outro artigo desta série (Use Command para criar, editar e manipular arquivos - Parte 1) para revisar alguns comandos úteis.

O Linux fornece uma gama de opções para conchas, sendo o seguinte o mais comum:

Bash Shell

Bash apoia Bourne novamente Shell e é o shell padrão do projeto GNU. Ele incorpora recursos úteis da Shell Korn (KSH) e C Shell (CSH), oferecendo várias melhorias ao mesmo tempo. Este é o shell padrão usado pelas distribuições cobertas na certificação LFCS, e é o shell que usaremos neste tutorial.

sh shell

O Bourne Shell é a concha mais antiga e, portanto, tem sido a concha padrão de muitos sistemas operacionais do tipo Unix por muitos anos.

shell ksh

O Korn Shell é uma concha unix que foi desenvolvida por David Korn no Bell Labs no início dos anos 80. É compatível com o bourne shell e inclui muitos recursos do shell C.

Um script de shell nada mais é e nada menos que um arquivo de texto transformado em um programa executável que combina comandos que são executados pelo shell um após o outro.

Script de shell básico

Como mencionado anteriormente, um script de shell nasceu como um arquivo de texto sem formatação. Assim, pode ser criado e editado usando nosso editor de texto preferido. Você pode considerar o uso do VI/M (consulte o uso do VI Editor - Parte 2 desta série), que apresenta destaque da sintaxe para sua conveniência.

Digite o seguinte comando para criar um arquivo chamado MyScript.sh e pressione Enter.

# vim myscript.sh 

A primeira linha de um script de shell deve ser a seguinte (também conhecida como um Shebang).

#!/BIN/BASH 

Isto "diz”O sistema operacional o nome do intérprete que deve ser usado para executar o texto que segue.

Agora é hora de adicionar nossos comandos. Podemos esclarecer o objetivo de cada comando, ou de todo o script, adicionando comentários também. Observe que o shell ignora essas linhas começando com um sinal de libra # (Comentários explicativos).

#!/Bin/Bash Echo Esta é a Parte 10 da série de 10 articulações sobre a certificação LFCS Echo Today é $ (data +%y-%m-%d) 

Depois que o script for escrito e salvo, precisamos torná -lo executável.

# chmod 755 myscript.sh 

Antes de executar nosso script, precisamos dizer algumas palavras sobre o $ Caminho variável de ambiente. Se corrermos,

eco $ caminho 

Da linha de comando, veremos o conteúdo de $ Caminho: Uma lista separada por cólon de diretórios que são pesquisados ​​quando inserimos o nome de um programa executável. É chamado de variável de ambiente porque faz parte do ambiente do shell - um conjunto de informações que ficam disponíveis para o shell e seus processos filhos quando o shell é iniciado pela primeira vez.

Quando digitamos um comando e pressionamos Enter, o shell pesquisa em todos os diretórios listados no $ Caminho variável e executa a primeira instância que é encontrada. Vamos ver um exemplo,

variáveis ​​ambientais

Se houver dois arquivos executáveis ​​com o mesmo nome, um em /usr/local/bin e outro em /usr/bin, um do primeiro diretório será executado primeiro, enquanto o outro será desconsiderado.

Se não salvarmos nosso script dentro de um dos diretórios listados no $ Caminho variável, precisamos anexar ./ para o nome do arquivo para executá -lo. Caso contrário, podemos executá -lo exatamente como faríamos com um comando regular.

# pwd # ./myscript.sh # cp myscript.sh… /bin # cd… /bin # pwd # myscript.sh 
Execute o script

Condicionais

Sempre que você precisar especificar diferentes cursos de ação para serem tomados em um script de shell, como resultado do sucesso ou fracasso de um comando, você usará o se Construa para definir essas condições. Sua sintaxe básica é:

se condição; então comandos; caso contrário, outros comando fi 

Onde DOENÇA pode ser um dos seguintes (apenas as condições mais frequentes são citadas aqui) e avalia como verdadeiro quando:

  1. [ -um arquivo ] → Existe arquivo.
  2. [-D Arquivo] → O arquivo existe e é um diretório.
  3. [-f arquivo] → O arquivo existe e é um arquivo regular.
  4. [-u arquivo] → O arquivo existe e seu bit suid (definido ID do usuário) está definido.
  5. [-g arquivo] → Existe arquivo e seu bit SGID está definido.
  6. [-k arquivo] → Existe arquivo e sua parte pegajosa está definida.
  7. [-R Arquivo] → Arquivo existe e é legível.
  8. [-s Arquivo]→ Arquivo existe e não está vazio.
  9. [-w Arquivo]→ Arquivo existe e é gravável.
  10. [-x arquivo] é verdadeiro se houver arquivo e for executável.
  11. [String1 = String2] → As cordas são iguais.
  12. [String1 != string2] → As cordas não são iguais.

[int1 op int2] deve fazer parte da lista anterior, enquanto os itens a seguir (por exemplo, -Eq -> é verdade se Int1 é igual a int2.) devia ser um "crianças" lista de [ Int1 op int2 ] onde o OP é um dos seguintes operadores de comparação.

  1. -Eq -> é verdadeiro se o int1 for igual a int2.
  2. -NE -> verdadeiro se int1 não for igual a int2.
  3. -LT -> verdadeiro se int1 for menor que int2.
  4. -LE -> verdadeiro se int1 for menor ou igual a int2.
  5. -GT -> verdadeiro se int1 for maior que o int2.
  6. -ge -> verdadeiro se int1 for maior ou igual a int2.

Para loops

Este loop permite executar um ou mais comandos para cada valor em uma lista de valores. Sua sintaxe básica é:

para item em sequência; dos comandos; feito 

Onde item é uma variável genérica que representa cada valor em SEQÜÊNCIA durante cada iteração.

Enquanto loops

Este loop permite executar uma série de comandos repetitivos, desde que o comando de controle seja executado com um status de saída igual a zero (com sucesso). Sua sintaxe básica é:

enquanto avaliação_Command; Execute_Commands; feito 

Onde Avaliação_Command pode ser qualquer comando (s) que possa sair com um sucesso (0) ou falha (exceto 0) Status e Execute_Commands podem ser qualquer programa, script ou construção de shell, incluindo outros loops aninhados.

Juntando tudo

Demonstraremos o uso do construto if e o loop for o seguinte exemplo.

Determinando se um serviço está sendo executado em uma distro baseada em Systemd

Vamos criar um arquivo com uma lista de serviços que queremos monitorar rapidamente.

# Cat MyServices.txt sshd mariadb httpd crond firewalld 
Script para monitorar os serviços Linux

Nosso script de shell deve parecer.

#!/BIN/BASH # Este script itera uma lista de serviços e # é usado para determinar se eles estão executando ou não. Para serviço em $ (Cat MyServices.TXT); Faça o status do SystemCTL $ service | Grep -Quiet "Running" se [$? -eq 0]; Então eco $ service "é [ativo]" else eco $ service "está [inativo ou não instalado]" fi feito 
Script de monitoramento de serviço Linux
Vamos explicar como o script funciona.

1). O loop for lê o Meus serviços.TXT Arquive um elemento da lista por vez. Esse único elemento é denotado pela variável genérica nomeada serviço. A lista é preenchida com a saída de,

# Cat MyServices.TXT 

2). O comando acima é fechado entre parênteses e precedido por um sinal de dólar para indicar que deve ser avaliado para preencher a lista que iremos iterar.

3). Para cada elemento da lista (o que significa cada instância da variável de serviço), o seguinte comando será executado.

# status Systemctl $ service | grep -quieto "correndo" 

Desta vez, precisamos preceder nossa variável genérica (que representa cada elemento em LISTA) com um sinal de dólar para indicar que é uma variável e, portanto, seu valor em cada iteração deve ser usado. A saída é então canalizada para o grep.

O -quieto A bandeira é usada para prevenir grep De exibir até a tela, as linhas onde a palavra em execução aparece. Quando isso acontece, o comando acima retorna um status de saída de 0 (representado por $? no construto if), verificando assim que o serviço está em execução.

Um status de saída diferente de 0 (Significando o palavra A corrida não foi encontrada na saída de status do Systemctl $ service) indica que o serviço não está funcionando.

Script de monitoramento de serviços

Poderíamos dar um passo adiante e verificar a existência de Meus serviços.TXT antes mesmo de tentar entrar no loop for.

#!/BIN/BASH # Este script itera uma lista de serviços e # é usado para determinar se eles estão executando ou não. Se [-f MyServices.TXT ]; Então, para o serviço em $ (Cat MyServices.TXT); Faça o status do SystemCTL $ service | Grep -Quiet "Running" se [$? -eq 0]; Então eco $ service "é [ativo]" else eco $ service "está [inativo ou não instalado]" Fi feito else Echo "MyServices.txt está faltando "fi 
Pinging uma série de hosts de rede ou internet para estatísticas de resposta

Você pode manter uma lista de hosts em um arquivo de texto e usar um script para determinar de vez em quando, se eles são pingáveis ​​ou não (fique à vontade para substituir o conteúdo de MyHosts e tente por si mesmo).

O comando lEAD shell embutido informa o loop while para ler MyHosts linha por linha e atribui o conteúdo de cada linha ao host variável, que é então passado para o ping comando.

#!/BIN/BASH # Este script é usado para demonstrar o uso de um loop de um tempo durante o host de leitura; Faça ping -c 2 $ host feito < myhosts 
Script para servidores de ping

Leia também:

  1. Aprenda script de shell: um guia de iniciantes para administrador do sistema
  2. 5 scripts de shell para aprender a programação da concha

Solução de problemas do sistema de arquivos

Embora o Linux seja um sistema operacional muito estável, se travar por algum motivo (por exemplo, devido a uma interrupção de energia), um (ou mais) de seus sistemas de arquivos não será desmontado corretamente e, portanto, será verificado automaticamente para erros quando o Linux é reiniciado.

Além disso, cada vez que o sistema inicializa durante uma inicialização normal, ele sempre verifica a integridade dos sistemas de arquivos antes de montá -los. Nos dois casos, isso é realizado usando uma ferramenta nomeada fsck (“Verificação do sistema de arquivos”).

fsck Não apenas verificará a integridade dos sistemas de arquivos, mas também tentará reparar sistemas de arquivos corruptos se instruídos para fazê -lo. Dependendo da gravidade dos danos, o FSCK pode ter sucesso ou não; Quando isso acontece, partes recuperadas dos arquivos são colocadas no perdido+encontrado diretório, localizado na raiz de cada sistema de arquivos.

Por último, mas não menos importante, devemos observar que as inconsistências também podem acontecer se tentarmos remover uma unidade USB quando o sistema operacional ainda estiver escrevendo para ele e pode até resultar em danos de hardware.

A sintaxe básica do FSCK é a seguinte:

# fsck [options] FileSystem 
Verificando um sistema de arquivos quanto a erros e tentando reparar automaticamente

Para verificar um sistema de arquivos com o FSCK, devemos primeiro desmontá -lo.

# montagem | grep sdg1 # umount /mnt # fsck -y /dev /sdg1 
Verifique os erros do sistema de arquivos

além da -y bandeira, podemos usar o -a opção para reparar automaticamente os sistemas de arquivos sem fazer perguntas e forçar a verificação mesmo quando o sistema de arquivos parece limpo.

# fsck -af /dev /sdg1 

Se estivermos interessados ​​apenas em descobrir o que está errado (sem tentar consertar nada por enquanto), podemos executar o FSCK com o -n opção, que produzirá os problemas do sistema de arquivos para a saída padrão.

# fsck -n /dev /sdg1 

Dependendo das mensagens de erro na saída do FSCK, saberemos se podemos tentar resolver o problema ou escalá -lo para as equipes de engenharia para realizar mais cheques no hardware.

Resumo

Chegamos ao final disso 10-article séries onde tentaram cobrir as competências básicas de domínio necessárias para passar o LFCs exame.

Por razões óbvias, não é possível cobrir todos os aspectos desses tópicos em um único tutorial, e é por isso que esperamos que esses artigos o coloquem no caminho certo para experimentar coisas novas e continuar aprendendo.

Se você tiver alguma dúvida ou comentário, eles são sempre bem -vindos - então não hesite em nos deixar uma linha através do formulário abaixo!

Torne -se um administrador de sistema certificado Linux