segunda-feira, 26 de setembro de 2016

Treinamento Básico Construindo Scripts | Usando múltiplos comandos

Treinamento Básico Construindo Scripts

Parte: A1
 
Bom, caso já tenha conhecimento em utilizar a interface de comando (CLI) para introduzir comandos e visualizar os resultados.
A chave para shell script é a capacidade de inserir vários comandos e processar os resultados de um comando para outro, até possivelmente, passando os resultados de um comando para outro.

Usando múltiplos comandos

Se você precisar executar dois comandos juntos, você pode inseri-lo na mesma linha do prompt, separados com um ponto e vírgula (;):





 
Parabéns, acabamos de escrever um shell script. Este script simples usa apenas dois comandos do shell bash. O comando date e o comando who. O comando date é executado primeiro, exibindo a date e hora atual, seguido da saída do comando who que exibe quem está conectado ao sistema.

Usando esta técnica, podemos encadear tantos comandos como quiser, até o número máximo de 255 caracteres.

Esta técnica é recomendada para pequenos scripts. Mas ter uma grande desvantagem. Devemos digitar todo o comando no prompt cada vez que quiser executá-lo.

Em vez de ter de introduzir manualmente os comandos em uma linha de comando. Podemos combinar os comandos em um arquivo de texto simples. Quando precisamos executar os comandos, simplesmente execute o arquivo de texto.
 
Até a próxima.

Raymundo César Monteiro Nunes


sexta-feira, 23 de setembro de 2016

Parando Processos em GNU/Linux

Parte crucial de um administrador de sistemas é a gerência dos processos de sistema. Um processo parou e é necessário iniciá-lo novamente, outras vezes um processo consome muito tempo de CPU é preciso para. Em todos esses casos precisamos de um comando que permita o controle. GNU/Linux segue o método Unix de comunicação entre processos.

Em sistemas GNU/Linux, processos se comunicam uns com os outros usando sinais. Um sinal de processo é uma mensagem predefinida que reconhece e pode optar por ignorar ou agir.

Desenvolvedores programam como um processo trata os sinais. Aplicações bem escritas têm a capacidade de receber e agir aos sinais padrões dos processos UNIX.

Sinal
Nome
Descrição
1
HUP
Desliga.
2
INT
Interrupções.
3
QUIT
Para a execução.
9
KILL
Incondicionalmente Termina.
11
SEGV
Produz segmento de violação.
15
TERM
Termina se possível.
17
STOP
Para incondicionalmente, mas não termina.
18
TSTP
Para ou pausa, mas continua a ser executado em segundo plano.
19
CONT
Retomou a execução após STOP ou TSTP.

Existem dois comandos em GNU/Linux que permitem o envio de sinais de processo para processos em execução.

Comando kill


Com o kill permite enviar sinais a processos com base na sua ID do processo (PID).
Por padrão, o comando kill envia um sinal TERM para todos os PIDs listados na linha de comando.
Infelizmente, podemos só usar o PID do processo em vez de seu nome, fazendo o comando kill difícil de se usar às vezes.

Para enviar sinais a processos, precisamos ser o dono do processo ou estarmos com a conta do usuário root.







O sinal TERM diz ao processo para parar gentilmente a execução. Se temos um processo que não aceite este pedido, precisamos adicionar outros sinais com o parâmetro
-s no qual permite especificar outros sinais, usando seu nome ou o número do sinal.

Como você pode ver a partir do exemplo a seguir, nenhuma saída é associado com o comando kill.



 


Para ver se o comando foi eficaz, é preciso realizar
comando ps para ver se o processo parou.

Comando killall

O comando killall é um meio poderoso para parar os processos usando seus nomes, em vez dos números PID. O comando killall permite que você use caracteres curinga.




Este exemplo mata todos os processos que começam com http, tais como os serviços http para o servidor web Apache.

Até o próximo...

sexta-feira, 24 de junho de 2016

Usando o comando ip para exibir configurações

Na série de artigos anteriores, mencionei que o comando preferido para exibir e configurar as interfaces de rede é o ip por linha de comando a partir do RHEL 7.

O comando ip é parte do pacote RPM iproute no qual substitui o comando ifconfig no qual está obsoleto, no qual faz parte do pacote RPM net-tools.

Para visualizarmos os endereços IPs de todas as interfaces, usamos a opção show para o comando ip.

Note que podemos utilizar três métodos para conseguirmos o mesmo resultado.

$ ip address show
$ ip a s
$ ip a

Podemos visualizar o endereço para uma única interface como exemplo a seguir:

# ip a s enp0s8


# ip -4 a s enp0s8

Neste comando -4 tem a saída para visualizar o endereço IPv4 para o NIC configurado.
Observe que dentro da segunda linha temos: scope global dinamic, indicando que é um endereço atribuído via DHCP.
# ip -6 a s enp0s8


Podemos exibir as estatísticas de transmissão para um interface específica:

# ip -s link show enp0s8


Perceba a flexibilidade desde comando, mas não se limita a apenas opções de link e endereços.

Com os comandos abaixo podemos visualizar a tabela de rota, cache ARP (Address Resolution Protocol).

# ip route show


# ip r


# ip neighbor show

O cache ARP exibe os endereços MAC dos dispositivos que estiverem conectados e que existem na mesma rede.

Até a próxima.

Raymundo César Monteiro Nunes


Desabilitando os nomes dos dispositivos de rede consistentes

Cenário:
SO: CentOS Linux release 7.2.1511 (Core)
Kernel: 3.10.0-327.el7.x86_64


OBS: Teste em ambiente de desenvolvimento, faça cópias de segurança dos arquivos originais de configurações.


Com esse novo método de nomenclaturas dos nomes dos dispositivos de rede em distribuições RHEL 7 e derivadas, tendo toda a vantagem como mencionados em artigos anteriores.

Podemos simplificar, principalmente quando temos uma única inteface, podemos utilizar o nome tradicional (eth0).

Outra opção é utilizar o software legado que utiliza esse esquema de nomeação, onde esses nomes do legado pode ser usado.

No artigo (Compreendendo como distribuições RHEL gerência dispositivos de rede versão  RHEL 7) aprendemos que no esquema 4, adicionando o atributo HWADDR no arquivo de configuração de rede e mudar o nome do arquivo em /etc/sysconfig/network-scripts/ifcfg-eth0 ou configurar o atributo DEVICE name com o valor para eth0 pode ser utilizado para essa mudança.

Para que essa definição seja global para todos os dispositivos, temos que usar obrigatoriamente parâmetros adicionais no kernel no momento da inicialização.

Onde podemos configurar via GRUB2 no arquivo /etc/default/grub.

A linha GRUB_CMDLINE_LINUX deve ser adicionada os comandos biosdevname e net.ifname.

Arquivo original:

Arquivo com os parâmetros: biosdevname e net.ifname:

Após que o arquivo foi editado e salvo, vamos atualizar a configuração no GRUB2 com o seguinte comando:

Reinicie o servidor para validar as novas configurações.

# shutdown -r now

Até a próxima..


Até a próxima.

Raymundo César Monteiro Nunes

quarta-feira, 22 de junho de 2016

Exemplo de  Identificação de Interfaces de Rede - Em sistemas RHEL 7 e Distribuições Derivadas


Neste exemplo onde vamos compreender na prática a identificação dos dispositivos de rede.

Usando o comando ip address show, vamos verificar quais dispositivos temos configurado na máquina de laboratório.
















Neste exemplo da imagem acima, ignorando a interface lo (local ou loopback), temos 2 dispositivos identificados enp0s3, enp0s8.

Entendendo a nomenclatura:

Interface 2:

en : Ethernet
p0 : Endereço do barramento 0
s3 : Slot 3

Interface 3:

en : Ethernet
p0 : Endereço do barramento 0
s8 : Slot 8

Na pasta /etc/sysconfig/network-scripts/


Até a próxima.

Raymundo César Monteiro Nunes





Compreendendo como distribuições RHEL gerência dispositivos de rede versão  RHEL 7


Muitos administradores de GNU/Linux se acostumaram a utilizar o comando ifconfig para exibir e definir endereços IPs em hosts GNU/Linux.
Embora este comando ainda seja válido, ele é marcado como obsoleto em comparação ao comando ip.
Para usuários de sistemas Microsoft Windows que migram ou interagem com sistemas GNU/Linux, o uso do comando ifconfig é algo natural, já que o ipconfig se torna idênticos na  linha de comando.
Mas como recomendação por parte de novas práticas, vamos aprender a utilizar o comando ip.
Nos sistemas RHEL 7 também nos traz novidades nas nomenclaturas dos dispositivos.
No primeiro contato pode ser algo estranho para nós que estamos acostumados com o usados /dev/eth0.

E também vamos abordar algo novo em sistemas RHEL o comando hostnamectl. No qual pode ser usado para definir o nome do host para a sessão atual e persistentemente em uma configuração só, sem a necessidade de utilizar o comando hostname ou a edição do arquivo /etc/hostname.
Aprendendo a nomenclatura consistente para dispositivos de rede

Há algum tempo temos em servidores e desktops a utilização cada vez maior de muitas interfaces de placas de rede de várias portas e interfaces LON (LAN na placa-mãe).
Na utilização da nomenclatura tradicional, tudo isso pode ocorrer de termos dispositivos de rede inconsistentes.Na família RHEL 7 e suas distribuições provenientes, udev suporta um número de diferentes esquemas de nomeação para os dispositivos de rede.

Esse padrão para a distribuição de nomes fixos com base em firmware, topologia e informações de localização devolvidos a partir do próprio dispositivo.

Dentro desse modo, a nomenclatura é relacionada com o próprio dispositivo físico e mantém-se consistente e previsível, mesmo no advento de falha de hardware que é substituído.

Com essa nova metodologia é evitar que o dispositivo eth0 se torne o eth1 e vice-versa.

A desvantagem é que os nomes se tornam longos e difíceis de serem lembrados.

Neste exemplo no qual utilizo o VirtualBox onde é nomeada como eno16777737.

A nomenclatura é gerida por systemd, o novo daemon de inicialização no qual suporta os esquemas de nomeação ao detectar o hardware durante o processo de inicialização.

Esquema 1: Especifica nomes que podem incorporar firmware ou a informação da BIOS que foi retornada do dispositiv o onboard. Podem assumir a forma de enoxxx (letra o é de onboard). Caso esse esquema falhe vai para o esquema 2.

Esquema 2: Especifica nomes que podem incorporar firmware ou a informação da BIOS de retorno dos cartões do slot PCI Express. Podem assumir a forma de ensxxx. Caso esse esquema falhe vai para o esquema 2.

Esquema 3: Especifica nomes que podem incorporar a localização física do conector tal como o endereço do slot da placa-mãe. Podem assumir a forma de enpxxx. Caso esse esquema falhe volta ao esquema 5 (Esquema 4 é opcional).

Esquema 4: Identifica nomes baseados no MAC (Media Acess Control), endereço do NIC (Network Intaface Card) definidos no HWADDR (Endereço de Hardware) atribuídos no arquivo de configuração de rede. Esses nomes assumem a forma do nome fornecido de uma placa de interface LOM de eno16777737 para interna, como root, edita o /etc/sysconfig/network-scripts/icfg-eno16777737, neste caso é obrigatório adicionar o atributo HWADDR e editar o arquivo. Usando o atributo NICDEVICE="interno".

Esquema 5: Se tudo falhar na nomeação dos dispositivos voltamos para o esquema de nomenclatura tradicional, como eth0, eth1 assim por diante.

 Resumo:

Todo dispositivo de interface de rede terá um prefixo de dois caracteres. No qual faz denotação ao tipo do protocolo da NIC.

en : Ethernet
wl : Lan sem fio
ww : Wide Area Wireless

Identificação do 3 caractere:

o : Dispositivos onboard
s : Dispositivo de slot hot-plug
p : Dispositivo PCI ou USB

Até a próxima.

Raymundo César Monteiro Nunes