sábado, 25 de abril de 2015

Visão básica do pop corn time

https://www.youtube.com/watch?v=U5__6cIN8gU

 

Usando Keep AssX para salvar suas senhas com segurança

https://www.youtube.com/watch?v=9jGQblZWls0

 

domingo, 19 de abril de 2015

Pergunta LPI - SPLIT com exemplo

José tem um arquivo grande que excede a capacidade de armazenamento de um disquete. Ele quer colocar o arquivo em dois disquestes, para que possa ter com ele quando se juntar a uma competição. Qual comando ele pode executarr para que o arquivo caiba em dois disquetes?

Escolha uma das seguintes respostas:
Pergunta obrigatória.

1    fmt
2   split
3    cut
4    nl

resposta split

exemplo:

1) compactando uma revista em pdf com gzip:  gzip 11_edicao_dezembro_20_12_2013.pdf

2) Checando o tamanho do arquivo com:  ls -lha
-rw-rw-r--  1 gustavofranco gustavofranco  15M Jun  4  2014 11_edicao_dezembro_20_12_2013.pdf.gz

3) Usando o comando split para dividir o arquivo em três parte de 5 megas.

root@TuX:/home/gustavofranco/Segurança Digital# split --bytes=5M 11_edicao_dezembro_20_12_2013.pdf.gz

4) Checando o que foi criado no diretório

root@TuX:/home/gustavofranco/Segurança Digital# ls
11_edicao_dezembro_20_12_2013.pdf     2_edicao_setembro_27_09_2011.pdf  5_edicao_marco_31_03_2012.pdf  8_edicao_setembro_30_09_2012.pdf  xaa
11_edicao_dezembro_20_12_2013.pdf.gz  3_edicao_novembro_27_11_2011.pdf  6_edicao_maio_31_05_2012.pdf   9_edicao_novembro_30_11_2012.pdf  xab
1_edicao_julho_01_07_2011.pdf         4_edicao_janeiro_29_01_2012.pdf   7_edicao_julho_31_07_2012.pdf  teste.gz                          xac

Como podemos analisar foi criado no seguinte formato, XAA, XAB, XAC,

5)Gustavo como faço para montar agora que eu sei splitar( segregar) o arquivo

Fazemos isso com nosso velho amigo cat unido ao ( > )

Exemplo:  root@TuX:/home/gustavofranco/Segurança Digital# cat x* > teste.gz

Usei expressões básicas com o X* (X QUALQUER COISA) e criamos o arquivo teste.gz

Desta maneira você tem seu arquivo de 15 megas novamente.

-rw-r--r--  1 root          root           15M Abr 19 19:06 teste.gz

sexta-feira, 17 de abril de 2015

Mysql parte 1

Criando banco de dados.
CREATE DATABASE testes;

Visualizando a base de dados criada.

Os nomes das tabelas são sensíveis à caixa (case sensitive). Ou seja, teste e TESTE são dois nomes totalmente diferentes pro MySQL.
SHOW DATABASES;

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| GUSTAVOFRANCO |
| banco |
| my_wiki |
| mysql |
| performance_schema |
| testes |
+--------------------+
7 rows in set (0.07 sec)

 

 

quinta-feira, 16 de abril de 2015

Descobrindo a arquitetura do processador no Linux

Maneira 1

root@TuX:/home/gustavofranco# file /bin/bash | awk {'print $3'}
64-bit

Maneira 2

cat /proc/cpuinfo

ou cat /proc/cpuinfo | grep 64

Modo 3

cat /proc/cpuinfo | awk '/ 64/'
clflush size    : 64
cache_alignment    : 64
clflush size    : 64
cache_alignment    : 64
clflush size    : 64
cache_alignment    : 64
clflush size    : 64
cache_alignment    : 64

 

É isso abraços!

 

 

 

 

segunda-feira, 13 de abril de 2015

Roteamento Dinâmico no Linux Usando o Quagga

Blog que sempre acompanho: http://labcisco.blogspot.com.br/2015/04/roteamento-dinamico-no-linux-usando-o.html

Bom meu blog tem por finalidade passar informações ultimamente tenho adicionado novamente as coisas cisco pois perdi meu antigo domínio que tinha bastante coisa, e como hoje em dia estou mais engajado em softwares opensouce linux, freeswitch, opensips, asterisk, elastix o blog tem mais cara de Linuxzero e realmente é, porém eu fiz algumas especializações cisco também no passado gosto também desta área de rede então segue uma união desses dois ambientes roteamento e Linux.
Quagga é um software open source para ambientes Unix (Linux, FreeBSD, Solaris, etc) que provê suporte aos principais protocolos de roteamento dinâmico abertos: RIPv2 (IPv4), RIPng (IPv6), OSPFv2 (IPv4), OSPFv3 (IPv6) e BGP-4 (famílias IPv4 e IPv6). O software especializado em roteamento foi desenvolvido por Kunishiro Ishiguro e atulmente está na versão 0.99.24. O Quagga é na verdade uma suíte composta por um daemon principal denominado zebra, além de outro daemons adicionais responsáveis por cada um dos protocolos de roteamento dinâmico, a destacar: ripdripngdospfdospf6d e bgpd, além de outros. Um detalhe é que o suporte a OSPFv3 para IPv6 ainda não é considerado estável porque possui problemas.




Embora haja outras soluções open source de roteamento no Linux, a exemplo do BIRD e do XORP, o Quagga é uma das soluções mais populares porque sua interface de linha de comando é bastante similar ao sistema IOS da Cisco, o que torna sua operação natural para aqueles que já trabalham com caixas da Cisco. O objetivo deste artigo é listar os passos necessários para instalar o Quagga e manipular seus principais arquivos de configuração para reproduzir aquelas configurações de roteamento dinâmico tradicionalmente realizadas nos roteadores Cisco. Por isso nosso foco está na ferramenta em si, não nas configurações de roteamento propriamente ditas.


A primeira etapa consiste na instalação do Quagga, tarefa bastante simples e rápida através do APT em distribuições Linux baseadas no Debian:


root@Router:/# apt-get install quagga


Observação: Antes de fazer qualquer configuração de roteamento, é importante lembrar que o Linux não se comporta como roteador por padrão, negando todo o encaminhamento de pacotes entre redes distintas. Para instruir o kernel do Linux a permitir roteamento entre redes, tanto em ambientes IPv4 como IPv6, podemos utilizar os comandos abaixo:


root@Router:/# echo "1" > /proc/sys/net/ipv4/ip_forward

root@Router:/# echo "1" > /proc/sys/net/ipv6/conf/all/forwarding


Depois de instalado, os arquivos de configuração ficam armazenados em /etc/quagga. Uma boa prática para facilitar as configurações futuras é criar um diretório dentro do próprio diretório de configurações (/etc/quagga) com exemplos dos arquivos de configuração (disponíveis na documentação) para cada um dos daemons, procedimento que pode ser realizado através dos comandos abaixo:


root@Router:/# mkdir /etc/quagga/examples

root@Router:/# cp /usr/share/doc/quagga/examples/* /etc/quagga/examples


O primeiro arquivo de configuração importante que fica em /etc/quagga é denomindo daemons. Esse arquivo é bastante simples e deve ser editado para permitir aqueles daemons associados com os protocolos de roteamento dinâmico que o administrador pretende configurar na rede. Por exemplo, se queremos configurar o OSPF na rede, temos que ativar os daemons zebra (a base do Quagga) e o ospfd (responsável pelo OSPF).


#--- em /etc/quagga/daemons

# This file tells the quagga package which daemons to start
zebra=yes

bgpd=no

ospfd=yes

ospf6d=no

ripd=no

ripngd=no


Sempre que houver alguma alteração nesse arquivo ou nos demais arquivos de configuração do Quagga, o serviço deve ser reinicializado para que as alterações sejam aplicadas, procedimento que pode ser realizado através do comando abaixo:


root@Router:/# /etc/init.d/quagga restart


Os demais arquivos de configuração existentes no diretório /etc/quagga vão depender dos protocolos de roteamento dinâmico que serão utilizados na rede. Continuando com o exemplo do OSPF, precisamos criar dois arquivos de configuração que podem ser copiados a partir daquele diretório de exemplos. Além disso, é interessante dedicar um usuário/grupo para a ferramenta e é importante dar os devidos privilégios de acesso para que as configurações possam ser devidamente interpretadas pelo SO:


root@Router:/# cp /etc/quagga/examples/zebra.conf /etc/quagga

root@Router:/# cp /etc/quagga/examples/ospfd.conf /etc/quagga

root@Router:/# chown quagga.quagga /etc/quagga/*.conf

root@Router:/# chmod 640 /etc/quagga/*.conf


Se estivéssemos trabalhando com outros protocolos de roteamento seria necessário criar o respectivo arquivo de configuração associado ao daemon, por ex.: ripd.conf (RIP), ripngd.conf (RIPNG), bpgd.conf (BGP-4) e ospf6d.conf (OSPFv3). As configurações de roteamento dinâmico são realizadas através de edição nos arquivos de configuração (.conf). Outra opção é deixar o arquivo de configuração em branco para que as configurações sejam posteriormente realizadas via interface de linha de comando (acesso telnet), similar o que ocorre nas caixas Cisco. Cada daemon do Quagga, quando executado, passa a responder acessos telnet do localhost em suas respectivas portas padrões, que são:




  • 2601 - zebra

  • 2602 - ripd

  • 2603 - ripng

  • 2604 - ospfd

  • 2605 - bgpd

  • 2606 - ospf6d


 
Ou seja, para configurar o OSPF na máquina Linux executando o Quagga basta editar manualmente o arquivo ospfd.conf ou mesmo realizar um acesso telnet ao localhost na porta 2604, lógica que vale para o daemon zebra na configuração de roteamento estático (e configurações gerais) e para os demais daemons associados aos outros protocolos de roteamento dinâmico:


root@Router:/# telnet localhost 2604


Por padrão, o acesso telnet aos daemons do Quagga somente são permitidos através do próprio localhost. Para permitir esse acesso através de outras máquinas da rede, o arquivo de configuração /etc/quagga/debian.conf tem que ser editado para permitir outros endereços. Por exemplo, no arquivo de configuração abaixo estamos permitindo acesso telnet aos daemons zebra e ospfd também a partir do host 192.168.100.11, além do localhost (127.0.0.1).



#--- em /etc/quagga/debian.conf

vtysh_enable=yes
zebra_options=" --daemon -A 127.0.0.1 192.168.100.11"
bgpd_options=" --daemon -A 127.0.0.1 "
ospfd_options=" --daemon -A 127.0.0.1 192.168.100.11"
ospf6d_options="--daemon -A 127.0.0.1"
ripd_options=" --daemon -A 127.0.0.1"
ripngd_options="--daemon -A 127.0.0.1"
isisd_options=" --daemon -A 127.0.0.1"



Outro detalhe importante é que essa configuração via telnet através da linha de comando acaba sendo ruim na prática porque fica fragmentada por daemon, ou seja, para configurações relacionadas a rotas estáticas temos que realizar um acesso telnet na porta 2601 (zebra), enquanto que para realizar as configurações do OSPF temos que fazer outro acesso telnet na porta 2604 (ospfd). Para contornar essa dificuldade, existe uma ferramenta integrada de linha de comando denominada vtysh que permitimos na primeira linha de configuração do exemplo anterior (vtysh_enable=yes).


A ferramenta vtysh salva todas as configurações realizadas via linha de comando em um arquivo único denominado Quagga.conf. Para organizar melhor as configurações dos daemons individuais, podemos definir nas configurações do vtysh que as configurações dos daemons sejam salvas nos respectivos arquivos de configuração, ou seja, uma configuração de OSPF ficará salva apenas no arquivo ospfd.conf e assim por diante. Para fazê-lo é necessário editar o arquivo vtysh.conf e comentar sua primeira linha que permite a integração da configuração:


#--- em /etc/quagga/vtysh.conf

!service integrated-vtysh-config

hostname Quagga-Router

username root

password SENHA


Observação.: Uma dica útil em relação à ferramenta vtysh é que, por padrão, a cada vez que o administrador executa um comando aparece a palavra "END" na tela, o que requer que seja pressionada a tecla "q" para continuar. Para evitar que isso aconteça, basta incluir a seguinte linha no arquivo /etc/environment:  VTYSH_PAGER=more

Apesar das configurações poderem ser realizadas via linha de comando através de acesso remoto (telnet ou vtysh) aos daemons do Quagga, de maneira similar ao que ocorre nas caixas Cisco, particularmente acho que é ainda mais prático fazer essas configurações diretamente nos arquivos de configuração (.conf), afinal a sintaxe é a mesma. Por exemplo, com base no cenário apresentado na figura abaixo, para realizar uma configuração simples do OSPF podemos editar o arquivo /etc/quagga/ospfd.conf da seguinte maneira:


#--- em /etc/quagga/ospfd.conf

!
hostname Quagga-Router
password SENHA
!

interface eth0

  description "Link to Router B"

  ip address 192.168.200.1/30

  link-detect

!

interface eth1

  description "Link to Network 192.168.100.0/24"

  ip address 192.168.100.1/24

  link detect

!

router ospf

  network 192.168.200.0/30 area 0

  network 192.168.100.0/24 area 0

!


Por fim, vale reforçar que qualquer alteração nos arquivos de configuração requer a reinicialização do serviço Quagga e seus daemons: /etc/init.d/quagga restart. Agora é com vocês...


Samuel.

BGP - Básico

O BGP é um protocolo de roteamento advanced distance vector chamado de Path Vector desenvolvido para ISP's trocarem rotas isentas de loops. Ele  antém uma tabela separada da tabela de roteamento “IP BGP Table” e “Route Table”, se não for bem configurado pode fazer com que o meio externo influencie nas decisões de roteamento. Sua conexão com vizinho é configurada manualmente e possui atualizações confiáveis via TCP na porta 179 com envio de keepalive periódico. Não exige topologia hierárquica.

Possui uma lista do caminho completo até a rede de destino incluindo os AS's. O mecanismo para evitar loop é o Split Horizon, onde rotas aprendidas por um IBGP não são propagadas para os IBGPS vizinhos, sendo assim é necessário Full-Mesh ou o uso de roteadores refletores ou confederações.

Assim como os endereços IPs privados, os AS privados são 64512 to 65535. Seu roteamento não é aplicado nas interfaces e sim no router inteiro. Passive-interface não funciona.

O roteamento é baseado em políticas, porém, as políticas não podem influenciar como o AS vizinho irá rotear o seu tráfego, mas pode influenciar a forma como o seu trafego chega até o AS vizinho.

Quando não usar BGP? - Use rota estática

  • Tiver uma conexão simples com Internet (ISP) ou outro AS;

  • Não há preocupação com políticas e seleção de rotas;

  • Mesma política de roteamento utilizada pelo ISP (Bloco CIDR pertencente ao ISP);

  • Roteador com pouca memória;

  • Compreensão limitada de filtro de rotas e seleção de caminhos;

  • Baixa largura de banda entre AS's.


Tipos de BGP

  • IBGP - Internal BGP opera entre vizinhos no mesma AS. Não necessariamente precisam estar conectados físicamente;

  • EBGP - External BGP opera entre dois vizinhos conectados em diferentes ASs, não precisam estar diretamente conectados;

  • Quando o EBGP anuncia uma rota do seu vizinho ele anuncia o vizinho como um next-hop;

  • Somente rotas originadas no router IBGP são passadas para um vizinho IBGP, rotas aprendidas não são;

  • Rotas IBGP aprendidas por outro IBGP são passadas apenas para o EBGP (solução: route-reflector).



Atributos

São informações sobre as métricas BGP incluídas nas mensagens de atualização do BGP
Well-Known mandatory - atributos bem conhecidos mandatórios - devem aparecer na descrição da rota. É aquele que todas as implementações do BGP devem reconhecer, se propaga para os vizinhos.

  • Origin - Tipo 1 - Indica a origem da rota. Na tabela BGP aparece como: I= quando aprendida por IGP, E= Quando aprendida por EGP e ?= Quando a origem da rota é desconhecida (para rotas estáticas e de redistribuição);

  • AS-path - Tipo 2 - Sempre que uma atualização de rota passa através de uma AS o N.º da AS é pré-anexado aquela atualização (colocado no inicio da lista de AS's que foram atravessadas até chegar o destino. Os routers que divulgam para IBGP não mudam o atributo AS-Path. Garante o ambiente Isento os loops. Para manipular o tráfego com As-path usa-se o prepend.

  • Next-Hop - Tipo 3 - Anuncia o próximo salto para alcançar a rede de destino. Geralmente o Next-Hop é o endereço da rede /30. O router EBGP anuncia para o IBGP (routers internos) o Next-Hop como o endereço da rede /30 (endereço da rede entre os AS's), os routers do IBGP tem que conhecer a rede /30 entre os As's (EBGP) por um IGP ou rota estática. Em NBMA o router se anuncia.



Well-Known discretionary - atributos bem conhecidos arbitrário - Não precisa aparecer nas descrições de rotas.

  • Local Preference - Tipo 5 - Roda internamente na AS, não é passado para os peers EBGP e Informa no AS qual o melhor caminho para sair do AS. Um caminho com Local preference maior é preferido. Default Cisco = 100;

  • Atomic aggregate - Tipo 6 - Informa o AS vizinho que o router de origem agregou as rotas;



Optional Transitive - Opcional Transitivo - Opcional, caso o router não possua, deve ser passado inalterado. Propaga-se entre os AS's. Apenas os Opcionais Transitivos podem ser marcados como parciais;

  • Community - Tipo 8 - Serve para filtrar rotas de entrada e saída baseado na comunidade, 32bits (community Filters);

  • Aggregator - Tipo 7 - Informa o ID do router e o AS que executou a agregação da rota.


Optional nontransitive - Opcional não-transitivo - Roda dentro da AS e deve ser excluído se não implementado

  • MED - Tipo 4 - Chamado de métrica. É a divulgação de um caminho preferido dentro de um AS para AS’s externos. É uma forma de influenciar outro AS onde ele deve optar para atingir determinada rota.  Utilizado quando tem 2 entradas para o mesmo AS, quanto mais baixo melhor. Se não estiver habilitado a opção de verificar o MED, em routers CISCO é colocado por default o 0 que indica a melhor rota, mas no padrão IETF é colocado como infinito, a pior rota. Pode-se configurar para manter o padrão: bgp bestpath missing-as-worst;

  • Originator-ID – Tipo 9 - Atributo que carrega o router ID e o AS de quem originou a rota;


Weight - Particular CISCO, uso local somente no router para definir o peso da rota (preferencia) 0 - 65535, default=32768 e 0 para rotas aprendidas por outro BGP speaker, mais alto melhor. Não é propagado para nenhum vizinho, é apenas para uso local. Esse atributo tem prioridade sobre o Local Preference.

Synchronization

  • Um router não deve anunciar uma rota fora da AS antes que todos os outros tenham aprendido;

  • Gera consistência das informações dentro da AS;

  • Evita buracos negros dentro da AS;

  • Ligado por Default;

  • Não é necessário se o AS não é um AS de transito (AS que liga ASs);

  • Desabilitado a convergência é mais rápida;

  • Pode ser desabilitado se todos os routers de trânsito estiverem em full-mesh;

  • Quando estiver implementado o multihome, deve-se usar a sincronização.


Tipos de Mensagens
Open – Primeira mensagem enviada após a conexão TCP ser estabelecida, e confirmada com um keepalive.

  • Holdtime - tempo máximo entre mensagens sucessivas de keepalive e update do remetente. 180s de default. Se o holdtime fo zero os routers não enviaram Keepalive;

  • BGP router ID - Identifica o remetente, é o maior ip da interface ou da loopback. Igual ao OSPF;

  • My AS - O numero da AS do remetente;

  • Version - Versão do BGP, a utilizada é a 4;

  • BGP identifier (Router ID) – É o identificador do remetente. O ID do router é definido igual no OSPF, pelo maior IP ativo de todas as interfaces a menos que exista um IP no loopback

  • Authentication – Se usado;


Keepalive - Mensagens trocadas de 60 em 60s para verificar se o router está OK, com tempo mais rápido que o holdtime;

Update - Contem informações sobre um caminho, diversos caminhos exige diversas mensagens   ;


Withdrawn routes – Lista dos prefixos de endereço IP que estão sendo retiradas de serviço, se houver uma;


Path attributes – Atributos de caminhos, são: As-Path, Origin, Local Preference,... todos os atributos;


Network layer reachability Information – Esse campo contém uma lista dos prefixos de endereço IP que podem ser atingidos por esse caminho;

Notification - Enviada quando ocorre um erro, a conexão é fechada imediatamente

Estado do vizinho BGP

O protocolo BGP é uma máquina de estados, que leva um router através dos seguintes estados:

  • Idle – Estado inicial;

  • Connect – Conexão TCP e aguardo;

  • Active – Realiza tentativas de conexão TCP;

  • OpenSent – Estado e espera da resposta de conexão do vizinho;

  • OpenConfirm – Conexão estabelecida;

  • Estabilished – Troca de mensagem de atualização, keepalive e notificação.


Processo de Seleção de Rotas
Depois do BGP receber todas as informações de todos os AS’s e destinos as começam a ser decididas. Apenas 1 rota para cada destino. A decisão das melhores rotas baseia-se nos atributos.

  1. Se o caminho for interno não deve preferir se a rota não estiver sincronizada, ou seja, não esta na tabela de roteamento IGP;

  2. Não deve preferir se o endereço de Next-Hop não puder ser acessado;

  3. Preferir rota de maior Peso (weight), Preferencia local para roteadores Cisco System;

  4. Preferir rota com Local Preference mais alto dentro da AS (melhor caminho pra sair da AS);

  5. Se o Local Preference for igual, preferir rota originada pelo router local;

  6. Se nenhuma rota foi originada localmente, preferir rota com o AS-Path mais curto para o destino;

  7. Se os caminhos de AS’s forem iguais, preferir o código de origem mais baixo sendo as rotas aprendidas por IGP o melhor (IGP (I) < EGP (E) < incompleto (?));

  8. Se todos os códigos de origem forem iguais, preferir o caminho com o MED mais baixo (MED é enviado por outro AS);

  9. Se as rotas têm o mesmo MED, preferir caminhos Externos (EBGP) em vez dos internos (IBGP);

  10. Se a sincronização estiver desativada apenas existirá caminhos internos, nesse caso escolher o caminho até o vizinho IGP mais próximo, caminho interno mais curto;

  11. Para caminhos externos EBGP escolher a rota mais antiga para minimizar o efeito flapping  (up down);

  12. Preferir o caminho com o ID do router vizinho mais baixo;

  13. Preferir a rota com o endereço IP do vizinho mais baixo.


Peer Groups
Muitos vizinhos são configurados com as mesmas políticas de atualização (por exemplo, mesmo filtro). Em routers CISCO os vizinhos com a mesma política de atualização podem ser agrupados em peer groups. É definida uma política para o peer Group e todos os vizinhos vinculados a esse peer group adotam as políticas.

O nome de um Peer Group é local do router onde ele é configurado e não é passado para nenhum outro router.

  • Simplifica a configuração dos vizinhos;

  • Utilizado nas conexões iBGP e eBGP;

  • Todos os vizinhos recebem o mesmo update;

  • Updates são gerados uma vez para cada  grupo.

  • Politicas podem ser modificadas individualmente somente para informações de rotas entrante e não para sainte.


Route Reflectors
Os refletores de rota modificam a regra do split-horizon que existe por default onde nenhum router replica as rotas aprendidas por um vizinho para outro vizinho, IBGP não replica para IBGP. No entanto uma rota BGP aprendida por um vizinho EBGP é replicada para vizinhos EBGP e IBGP.

Benefícios

  • Habilita um router para propagar as rotas aprendidas por um IBGP para seus vizinhos;

  • Resolve o problema do split horizon;

  • Retira a necessidade do Full-Mesh;

  • Diminui o n.º de relacionamentos entre vizinhos, minimizando assim o n.º de conexões TCP;

  • Muito usado por ISP's quando o n.º de declarações internas de vizinhos se torna excessivo;

  • Não afeta os caminhos que os pacotes seguem, somente a atualização de rotas;

  • Dentro de um AS podem ter vários refletores de rotas;

  • Migração fácil, pois é protocolo aberto;

  • Pode-se ter mais de um route-reflector server em um Cluster. Todos devem ter o mesmo Cluster-ID.


Terminologias

  • Router reflector - O router refletor de rotas que tem a permissão de repassar as rotas aprendidas;

  • Clients - quem recebe os anúncios de rotas sempre;

  •  Cluster - A relação entre os clientes e o router refletor;

  • Nonclients - Não são cliente definidos pelo router refletor, mas recebe algumas atualizações de rotas;

  • Originator-ID - Atributo que carrega o router ID e o AS de quem originou a rota;

  • Cluster ID - Usado quando se tem mais de um router refletor, para reconhecer de quem veio a atualização. Default =Router ID.


Operação

  • Refletores recebem atualizações de peer clients e nonclients

  • Se a atualização for de um peer client ele reflete para os peer clients e nonclients (exceto para o router que originou);

  • Se a atualização for de um nonclient ele reflete para todos os peer clients do cluster;

  • Se a atualização for de um parceiro EBGP (outro AS) ele reflete para todos os peer clients e todos nonclients


Dicas de migração do Refletor de Rota

  • A primeira consideração é decidir quais routers devem ser os refletores e quais devem ser clientes observando a topologia, pois os refletores precisam de full mesh com os clientes.


Restrições

  • Os refletores de rota clientes não são compatíveis com os grupos de parceiros (peer-groups), isso acontece porque um router configurado com um peer-group deve enviar todas as atualizações para todos do peer-group.



Confederation

É a forma de dividir uma AS em várias ASs. Em determinado router configura-se o AS privado (confederation) e dentro do config-router se indica o AS Publico que esse AS privado pertence. Depois adiciona-se os vizinhos de acordo com os ASs privados ou publicos (no caso de uma conexão eBGP).

  • Cria-se Sub-AS privados dentro do AS principal;

  • Todos os vizinhos internos do AS pertencem ao mesmo Sub-Grupos ao qual estão relacionados.


Multihoming
É o termo usado quando um AS está conectado a mais de um ISP. Os ISP’s aos quais você conecta devem anunciar os seus prefixos na Internet:

  • Aumenta a confiabilidade da conexão com a Internet com redundância;

  • Aumenta o desempenho com distribuição.

  • Tipos de configuração Multihoming mais comuns:

  • Multihoming sem BGP usa um router conectado a 2 ISPs com configuração de rota statica e NAT;

  • Multihoming com BGP usa-se um AS privado para conectar aos ISPs;

  • Todos os ISPs passam somente as rotas default para o AS

  • O ISP que o AS usa para atingir a Internet será determinado pela métrica IGP, ou seja, do protocolo de roteamento interno;

  • Todos os ISPs passam as rotas default e as rotas específicas selecionadas (Clientes que o AS troca muito tráfego);


Anunciando Redes no BGP

 

  • Usando o comando Network ele permite anunciar uma rede que está na tabela IP. A lista de comandos Network deve incluir todas as redes do AS que você deseja anunciar;

  • Redistribuindo as rotas estáticas para null 0, usado para anunciar as rotas agregadas. O problema do uso do null 0 é a possível criação de black hole;

  • Redistribuição das rotas estáticas do IGP para o BGP. Não recomendado, pois causa instabilidade e propaga para a Internet as oscilações em rotas internas;

  • Redistribuição de rotas do BGP para o IGP, deve se tomar cuidado pois a tabela BGP é muito grande. Nos AS’s de ISP a redistribuição do BGP normalmente não é requerida.


Manipulação de Tráfego
Filtros de AS-Path - Muitas das coisas feitas em BGP é baseado na construção desses filtros. Ele cria um filtro para selecionar um caminho específico (rotas) através da rede. Funciona como Access-Lists onde o caractere “^” funciona como o início do path e o “$” como o final do path.

  • .*  -  Todas as rotas BGP

  • ^$ -  Rotas que se originam no meu AS

  • ^(100|200|300)$ - Rotas originadas no 100, 200 ou 300

  • ^1002$ - Rotas que se originam no AS 1002 , adjacente ao meu AS

  • _1002$ - Rotas que terminam no AS 1002

  • ^1002_ - Rotas originadas no AS 1002

  • _1002_ - Rotas que passaram no AS 1002

  • (...)+(...) – Uma ou várias ocorrências do caracter especificado antes ( + = ou )


Community Filters - O atributo Community habilita políticas de roteamento a serem aplicadas para o destino.

Pode-se criar communities de acordo com o tráfego que deseja-se anunciar para os peers ou usar algumas communities pré definidas:

  • No-export – Não anuncia para eBGP peers;

  • No-advertise – Não anuncia para todos os peers;

  • Internet – Anuncia para a comunidade Internet.

  • Método de se agrupar rotas com políticas comuns de roteamento;

  • Uma rota pode fazer parte de várias communities;

  • RFC 1997 – Descreve ações pré definidas;

  • 32 bits, sendo 16 bits para a AS e outros 16 específicos.


Route-map

  • Conjunto de instâncias numeradas;

  • Maior facilidade para criação e edição de conjuntos de comandos;

  • Normalmente cada instância é composta de comandos “match” e/ou “set”;

  • Pode se editar cada instância sem influenciar as demais da Route-map;

  • O número seqüencial padrão é 10, esses números são automáticos de 10 em 10 para cada regra;

  • Possui um Deny-all no final de cada lista;

  • Se uma entrada for criada sem permit ou Deny, o permit é colocado por padrão.


Prefix List - É uma política de controle que restringe as informações de roteamento que o IOS aprende ou anuncia.

Características:

  • Performance significante;

  • Suporta modificações incrementais;

  • Linha de comando mais amigável;

  • Maior flexibilidade;

  • Uma lista de prefixo vazia permite tudo;

  • Se um prefixo for permitido a rota é usada, caso contrario a rota não é usada;

  • O router inicia a pesquisa por uma coincidência na parte superior da lista, a qual é o numero de seqüência mais baixo;

  • Se ocorrer uma coincidência o router não procura o resto da lista;

  • Negativa implícita ocorre quando o prefixo não coincide com nada;

  • Deve ser numerada manualmente sendo o primeiro numero é automaticamente o 5


Cenário

Objetivo
Seis roteadores (R1, R2, R3, R4, R5 e R6) são conectados fisicamente R1-R2-R3-R4-R5-R6-R1 e devem ser configurados com roteamento BGP seguindo os criterios abaixo:

  • Os roteadores R1, R2 e R3 possuem como IGP o OSPF na área 0 divulgando suas interfaces físicas;

  • Os roteadores R4, R5 e R6 possuem como IGP o ISIS, Level-2 somente, na área 49.0456 divulgando suas interfaces físicas;

  • O R1 (AS 123) faz conexão EBGP com o R4 (AS 456);

  • O R3 (AS 123) faz conexão EBGP com o R6 (AS 456);

  • Os roteadores R2 e R4 deverão ser Router-reflectors dos seus respectivos AS;

  • O router-ID de todos os roteadores é o endereço IP das loopbacks;

  • Somente as interfaces loopbacks deverão ser divulgadas no BGP em todos os roteadores;

  • Os roteadores de borda do AS 123 deverão ser o next-hop para as rotas externas.


Topologia

BGP-basico

 

IOS utilizados

  • R1, R2, R3, R4, R5 e R6 – c7200-js-mz.123-7.T.bin


Configuração dos Roteadores
Em todos os roteadores, antes de configurar o roteamento BGP, deve-se configurar o IGP, ou seja, o roteamento interno para que os roteadores possam conhecer o endereço IP para fechar a conexão BGP e também para que a rota seja divulgada na tabela de roteamento BGP. Esse IGP pode ser OSPF, ISIS, estático, etc.

Configurações do OSPF
Para o OSPF a configuração é feita pelo comando “router ospf ” onde o “processo” é um numero do processo OSPF. Para adicionar interfaces usa-se o comando “network
area ”. Para o roteador fazer vizinhança OSPF é necessário que a rede da interface esteja no comando “network” e a interface não esteja configurada como “passive-interface”.

As interfaces de borda dos roteadores de borda são configuradas como “passive-interface” dentro das configurações de roteamento.

Configurações do ISIS
Para o ISIS, independente da área e level, é configurado pelo comando “router Isis” e não possui o número de área no comando principal como o OSPF. Na configuração de roteamento é adicionado o endereço NSAP, que é o endereço único do roteador no ISIS configurado pelo comando “net” com o formato “49.XXXX.0000.0000.000Y.00. O “49” indica ser uma área privada e o “Y” um valor diferente dos demais roteadores.

Por padrão, todos os roteadores são Level-1-2. Deve-se alterar o level do roteador dentro do “router Isis” ou nas interfaces.

As interfaces de borda dos roteadores de borda são configuradas como “passive-interface” dentro das configurações de roteamento.

Configurações do BGP
Voltando ao BGP, agora que os roteadores conhecem os endreços IPs de seus vizinhos pelo IGP, configura-se o BGP em todos os roteadores pelo comando “router bgp ” onde o “AS” é o Autonomous System do provedor. Dentro da configuração de BGP adicionam-se os vizinhos estaticamente com o comando “neighbor remote-as ”, onde se o “as_vizinho” for igual ao AS do roteador a conexão é IBGP, se for diferente será EBGP.

Adiciona-se o IP da interface loopback como Router-ID pelo comando “router-id ”. Para divulgar rede no BGP é necessário que a rede exista na tabela de roteamento interna adicionando o comando “network mask ” ou redistribuindo rotas para o BGP com o comando “redistribute”.

Os roteadores dentro do mesmo AS não divulgarão as rotas IBGP entre eles, pois o BGP só divulga para o vizinho rotas aprendidas por EBGP, ou seja, rotas externas. Para isso configura-se os roteadores centrais como Router-reflectors adicionando os demais roteadores como clientes pelo comando “neighbor router-reflector-client”.

Para que os roteadores de borda sejam o next-hop das rotas externas, usa-se o comando “neightbor next-hop-self”, assim as rotas são divulgadas com endereço de destino interno ao AS.

As configurações de BGP atualmente podem ser feitas dentro da família de endereçamento IPv4, ou seja, dentro da configuração de roteamento entra-se no “address-family ipv4” e configuram-se as vizinhanças, router-reflector, community, route-map, etc.

Observações e Bugs
Observe as tabelas de roteamento e o caminho das rotas.

Documentação: http://www.cisco.com/en/US/tech/tk365/technologies_tech_note09186a00800c95bb.shtml
Comandos Importantes de Verificação
R5#show ip bgp

BGP table version is 7, local router ID is 5.5.5.5

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,

r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network          Next Hop            Metric LocPrf Weight Path

* i1.1.1.1/32       36.36.36.3               0    100      0 123 i

*>i                 14.14.14.1               0    100      0 123 i

* i2.2.2.2/32       36.36.36.3               0    100      0 123 i

*>i                 14.14.14.1               0    100      0 123 i

* i3.3.3.3/32       36.36.36.3               0    100      0 123 i

*>i                 14.14.14.1               0    100      0 123 i

*>i4.4.4.4/32       45.45.45.4               0    100      0 i

*> 5.5.5.5/32       0.0.0.0                  0         32768 i

*>i6.6.6.6/32       56.56.56.6               0    100      0 i

R2#show ip bgp summary

BGP router identifier 2.2.2.2, local AS number 123

BGP table version is 14, main routing table version 14

6 network entries using 678 bytes of memory

9 path entries using 432 bytes of memory

4/3 BGP path/bestpath attribute entries using 464 bytes of memory

1 BGP AS-PATH entries using 24 bytes of memory

0 BGP route-map cache entries using 0 bytes of memory

0 BGP filter-list cache entries using 0 bytes of memory

BGP using 1598 total bytes of memory

BGP activity 9/3 prefixes, 12/3 paths, scan interval 60 secs

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd

12.12.12.1      4   123      21      28       14    0    0 00:12:06        4

23.23.23.3      4   123      24      32       14    0    0 00:08:53        4

R2#show ip bgp neighbors 12.12.12.1 advertised-routes

BGP table version is 14, local router ID is 2.2.2.2

Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,

r RIB-failure, S Stale

Origin codes: i - IGP, e - EGP, ? - incomplete

Network          Next Hop            Metric LocPrf Weight Path

*>i1.1.1.1/32       12.12.12.1               0    100      0 i

*> 2.2.2.2/32       0.0.0.0                  0         32768 i

*>i3.3.3.3/32       23.23.23.3               0    100      0 i

*>i4.4.4.4/32       14.14.14.4               0    100      0 456 i

*>i5.5.5.5/32       14.14.14.4               0    100      0 456 i

*>i6.6.6.6/32       14.14.14.4               0    100      0 456 i

R2#sh ip route

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

E1 - OSPF external type 1, E2 - OSPF external type 2

i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

ia - IS-IS inter area, * - candidate default, U - per-user static route

o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

1.0.0.0/32 is subnetted, 1 subnets

B       1.1.1.1 [200/0] via 12.12.12.1, 00:12:20

2.0.0.0/32 is subnetted, 1 subnets

C       2.2.2.2 is directly connected, Loopback0

3.0.0.0/32 is subnetted, 1 subnets

B       3.3.3.3 [200/0] via 23.23.23.3, 00:12:24

4.0.0.0/32 is subnetted, 1 subnets

B       4.4.4.4 [200/0] via 12.12.12.1, 00:01:27

5.0.0.0/32 is subnetted, 1 subnets

B       5.5.5.5 [200/0] via 12.12.12.1, 00:01:27

36.0.0.0/24 is subnetted, 1 subnets

O       36.36.36.0 [110/2] via 23.23.23.3, 00:21:44, FastEthernet1/0

6.0.0.0/32 is subnetted, 1 subnets

B       6.6.6.6 [200/0] via 12.12.12.1, 00:01:27

23.0.0.0/24 is subnetted, 1 subnets

C       23.23.23.0 is directly connected, FastEthernet1/0

12.0.0.0/24 is subnetted, 1 subnets

C       12.12.12.0 is directly connected, FastEthernet0/0

14.0.0.0/24 is subnetted, 1 subnets
Configuração

R1






!router ospf 1

passive-interface FastEthernet1/0

network 12.12.12.0 0.0.0.255 area 0

network 14.14.14.0 0.0.0.255 area 0

!

router bgp 123

bgp router-id 1.1.1.1

network 1.1.1.1 mask 255.255.255.255

neighbor 12.12.12.2 remote-as 123

neighbor 12.12.12.2 next-hop-self

neighbor 14.14.14.4 remote-as 456

!

R2






!router ospf 1

network 12.12.12.0 0.0.0.255 area 0

network 23.23.23.0 0.0.0.255 area 0

!

router bgp 123

bgp router-id 2.2.2.2

network 2.2.2.2 mask 255.255.255.255

neighbor 12.12.12.1 remote-as 123

neighbor 12.12.12.1 route-reflector-client

neighbor 23.23.23.3 remote-as 123

neighbor 23.23.23.3 route-reflector-client

!


R3








!router ospf 1

passive-interface FastEthernet0/0

network 23.23.23.0 0.0.0.255 area 0

network 36.36.36.0 0.0.0.255 area 0

!

router bgp 123

bgp router-id 3.3.3.3

network 3.3.3.3 mask 255.255.255.255

neighbor 23.23.23.2 remote-as 123

neighbor 23.23.23.2 next-hop-self

neighbor 36.36.36.6 remote-as 456

!


R4








!clns filter-set AS-456 permit 49.0456.****.****.****.**

!

interface FastEthernet0/0

ip router isis

isis adjacency-filter AS-456

!

interface FastEthernet1/0

ip router isis

isis adjacency-filter AS-456

!

router isis

net 49.0456.0000.0000.0004.00

is-type level-2-only

passive-interface FastEthernet1/0

!

router bgp 456

bgp router-id 4.4.4.4

network 4.4.4.4 mask 255.255.255.255

neighbor 14.14.14.1 remote-as 123

neighbor 45.45.45.5 remote-as 456

!


R5








!clns filter-set AS-456 permit 49.0456.****.****.****.**

!

!

interface FastEthernet0/0

ip router isis

isis adjacency-filter AS-456

!

interface FastEthernet1/0

ip router isis

isis adjacency-filter AS-456

!

router isis

net 49.0456.0000.0000.0005.00

is-type level-2-only

!

router bgp 456

bgp router-id 5.5.5.5

network 5.5.5.5 mask 255.255.255.255

neighbor 45.45.45.4 remote-as 456

neighbor 45.45.45.4 route-reflector-client

neighbor 56.56.56.6 remote-as 456

neighbor 56.56.56.6 route-reflector-client

!


R6








!clns filter-set AS-456 permit 49.0456.****.****.****.**

!

!

interface FastEthernet0/0

ip router isis

isis adjacency-filter AS-456

!

interface FastEthernet1/0

ip router isis

isis adjacency-filter AS-456

!

router isis

net 49.0456.0000.0000.0006.00

is-type level-2-only

!

router bgp 456

bgp router-id 6.6.6.6

network 6.6.6.6 mask 255.255.255.255

neighbor 36.36.36.3 remote-as 123

neighbor 56.56.56.5 remote-as 456

!

 

Fonte: http://babarata.blogspot.com.br/2010/05/bgp-basico_28.html

quinta-feira, 9 de abril de 2015

Comandos Básicos de Roteadores Cisco.

Configurando um nome.

Router>enable

Router#configure terminal

Router(config)#hostname flexpabx                    

flexpabx#

 

Configurando senha enable.

Router>enable

Router#configure terminal

Router(config)#enable password flexpabx

 o comando acima faz com que quando se tente ir para o nomo enable solicite a senha flexpabx


Configurando senha enable secret.

Router>enable

Router#configure terminal

Router(config)#enable secret flexpabx

 

Configurando senha da console.

Router>enable

Router#configure terminal

Router(config)#line console 0

Router(config-line)#password flexpabx


 

Configurando acesso telnet para 05 usuários.

Router>enable

Router#configure terminal

Router(config)#line vty 0 4

Router(config-line)#login

Router(config-line)#password flexpabx

tem como configurar para muitos mais usuários

 

Configurando IP na interface ethernet.

Router>enable

Router#configure terminal

Router(config)#interface ethernet 0/1

Router(config-if)#ip address 192.168.1.1 255.255.255.0

Router(config-if)#no shutdown

 a interface do seu roteador pode ser ether / fast / giga então utilize o tab para verificar as que você possuí.


Configurando IP na interface fastethernet.

Router>enable

Router#configure terminal

Router(config)#interface fastEthernet 0/1

Router(config-if)#ip address 192.168.1.1 255.255.255.0

Router(config-if)#no shutdown

 

Configurando IP na interface serial.

Router>enable

Router#configure terminal

Router(config)#interface serial 0/1/0

Router(config-if)#ip address 192.168.1.1 255.255.255.0

Router(config-if)#clock rate 128000 (somente se a serial for DCE)

Router(config-if)#no shutdown

 

Configurando roteamento RIP v1.

Router#

configure terminal

Router(config)#router rip

Router(config-router)#network 192.168.1.0

Router(config-router)#network 10.0.0.0

rip v1 não é mais usado use a versão 2, inclusive o rip não é mais usado por ter um máx hop, pesquise sobre ospf  que é usado em 95% do mercado


Configurando uma rota default por ip do próximo salto.

Router#configure terminal

Router(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.1

 O comando acima informa para enviar tudo para o ip 192.168.1.1


Configurando rota default por interface.

Router#configure terminal

Router(config)#ip route 0.0.0.0 0.0.0.0 serial 0/1/0

o comando acima informa ao router para enviar tudo pela interface serial 0/1/0

Configurando rota estática por ip do próximo salto.

Router#configure terminal

Router(config)#ip route 192.168.0.0 255.255.255.0 192.168.1.1

 

Configurando rota estática por interface.

Router#configure terminal

Router(config)#ip route 192.168.0.0 255.255.255.0 serial 0/0

 

Configurando interfaces para uso de vlan dot1q que tem função de criar redes virtuais ou seja VLANS desta maneira quebrando o dominio de broadcast e isolando as redes em interfaces virtuais.


Router>enable

Router#configure terminal

Router(config)#interface fastEthernet 0/1

Router(config-if)#no shutdown

Router(config-if)#exit

Router(config)#interface fastEthernet 0/0.1     (ID da sub-interface)

Router(config-subif)#encapsulation dot1Q 10 (ID da vlan)

Router(config-subif)#ip address 192.168.1.1 255.255.255.0

Router(config-subif)#exit

Router(config)#interface fastEthernet 0/0.2     (ID da sub-interface)

Router(config-subif)#encapsulation dot1Q 20 (ID da vlan)

Router(config-subif)#ip address 192.168.2.1 255.255.255.0

 

Comandos de verificação e diagnóstico.

Router#show ?

(O comando show ? fornece uma lista dos comandos show disponíveis)

 

Router#show arp

(Exibe a tabela ARP do roteador)

 

Router#sh interfaces

(Verifica detalhadamente as configurações das interfaces)

 

Router#sh ip interface brief

(Verifica resumidamente as configurações das interfaces)

 

Router#sh ip route

(Verifica a tabela de roteamento)

 

Router#sh running-config

(Verifica as configurações que estão sendo utilizadas no momento quando você usa o comando wr você salva a show running na startup que faz com que quando rebootado o roteador utilize a configuração da startup como runing.

 

Router#sh startup-config

(Verifica as configurações da NVRAM)

 

Router#sh flash:

(Verifica os arquivos de sistema operacional da Flash)

 

Router#copy running-config startup-config

(Salva as configurações ativas na RAM para a NVRAM)

Todos comandos acima tem no site da cisco e no google e em outros sites, só adicionei descrições com as minhas palavras e modo de ver.

domingo, 29 de março de 2015

Variáveis da palavra-chave shell

Se divertindo com seu bash e deixando ele mais interativo!

Quando você usa um ''shell'' na linha de comando, provavelmente trata-se de um bash shell. Em um shell, você pode definir uma variável e atribuir-lhe um valor a ser recuperado posteriormente. Veja um
exemplo de uma variável chamada
ORACLE_HOME:
# export ORACLE_HOME=/opt/oracle/product/11gR2/db1

Depois, você recorrer à variável colocando um ''$'' como prefixo antes do nome da variável, por exemplo:
# cd $ORACLE_HOME

Essa é uma variável definida pelo usuário. Do mesmo modo, há diversas variáveis definidas no shell propriamente dito, com o nome predefinido no shell e que controlam o modo como você interage nele.
É interessante conhecer essas variáveis (pelo menos as mais importantes) para aprimorar a qualidade e a eficiência de seu trabalho.

PS1

Essa variável define o prompt de comando do Linux. No exemplo apresentado a seguir, tentaremos alterar o prompt de comando do padrão ''# '' para ''$ '':

# export PS1="$ "
$
Você viu como o prompt mudou para $? Você pode colocar qualquer caractere aqui para alterar o prompt padrão. As aspas duplas não são necessárias, mas como queremos colocar um espaço depois de ''$'',
tivemos de inserir esse caractere entre aspas.

É só isso – é só mostrar o prompt num sofisticado caractere ou string de caracteres predefinidos? De jeito nenhum. Você também pode colocar símbolos especiais na variável para mostrar valores especiais. Por exemplo, o símbolo \u mostra o nome de usuário que efetuou login e \h, o nome do host. Se usarmos esses dois símbolos, o prompt poderá ser personalizado para mostrar o usuário e o local onde foi efetuado login:
$export PS1="\u@\h# "
oracle@oradba1#

Aqui vemos o prompt quando o usuário Oracle efetuou login no servidor chamado oradba1 – o suficiente para que você se lembre quem é o usuário e em qual máquina ele efetuou login.
É possível personalizar ainda mais o prompt usando outro símbolo, \W, que mostra o nome base do diretório atual. Veja como ficou o prompt:
# export PS1="\u@\h \W# "
oracle@oradba1 ~#

Como o diretório atual é HOME, aparece o símbolo ''~''. Quando você muda para outro diretório, o símbolo é alterado.

Adicionar o diretório atual é uma excelente maneira de lembrar-se onde você está e quais serão as implicações de suas ações. A execução de rm * causa um impacto no diretório /tmp diferente do que ocorreria em /home/oracle, certo?

Existe outro símbolo, o - \w. Há uma diferença muito importante entre \w e \W. Este produz o nome base do diretório atual, enquanto aquele mostra o diretório completo:
oracle@oradba1 11:59 AM db1# export PS1="\u@\h \@ \w# " 
oracle@oradba1 12:01 PM /opt/oracle/product/11gR2/db1#

Notou a diferença? No prompt anterior, no qual a opção \W foi usada, foi apresentado somente o diretório db1, que é o nome base. No prompt seguinte, no qual a opção \w foi usada, foi exibido o diretório completo:

/opt/oracle/product/11gR2/db1.

Em muitos casos, um nome de diretório completo no prompt pode ser de grande ajuda. Imagine que existem três Oracle Homes, cada qual com um subdiretório chamado db1. Como você poderá saber ao certo em que diretório está se for exibida apenas a indicação ''db1''? Um diretório completo não deixa dúvidas.No entanto, a exibição por extenso torna o prompt muito longo, o que pode ser um pouco inconveniente.

O símbolo ''\@'' mostra o horário atual no formato horas:minutos AM/PM:
# export PS1="\u@\h \@ \W# " 
oracle@oradba1 11:59 AM db1#

Eis alguns outros símbolos que você pode usar na variável shell do PS1:



























\!O número do comando no histórico (mais detalhes a seguir)
\dA data no formato Dia da semana Mês e Data
\HO nome do host com o nome do domínio. \h é o nome do host sem o domínio
\TIgual à opção \@, porém sem exibir os segundos.
\AO horário no formato horas:minutos, como ocorre com a opção \@, mas com o formato de 24 horas.
\tIgual à opção \A, porém inclui os segundos.

sábado, 28 de março de 2015

Comando SET salvando vidas

Quem não sobescreveu um arquivo erroneamente? Se você tivesse lido isso aqui antes não teria feito ;)

 

set

Este comando controla o comportamento do shell, conta com várias opções e argumentos, mas explicarei apenas os mais importantes.

Um erro muito comum que as pessoas cometem ao usar comandos de sobreposição, como o cp e o mv, é substituir arquivos corretos inadvertidamente. Para evitar o risco, use um ''alias'' (explicado na Parte 1 desta série), por exemplo, usando a opção mv –i em vez de simplesmente mv. Entretanto, como você pode impedir que alguém ou algum script substitua os arquivos pelo operador de redirecionamento (''>'')?

Vejam,os um exemplo. Imagine que você tem um arquivo chamado very_important.txt e alguém (ou algum script) acidentalmente usou uma linha de comando como:
# ls -l > very_important.txt

O arquivo é substituído imediatamente e seu conteúdo original é perdido. Para evitar esse risco, você pode usar o comando set com a opção -o noclobber, conforme segue:
# set -o noclobber

Depois da emissão desse comando, se alguém tentar sobrescrever o arquivo:
# ls -l > very_important.txt
-bash: very_important.txt: cannot overwrite existing file

O shell agora impede a substituição do arquivo. Mas e se você quiser sobrescrevê-lo? Use o operador >|.
# ls -l >| very_important.txt

Para desativá-lo:
# set +o noclobber

Outro comando muito funcional para usar o editor vi a fim de editar comandos. Mais adiante nesta parte da série, você aprenderá a verificar os comandos emitidos e como reexecutá-los. Uma maneira rápida de reexecutar o comando é recuperá-lo usando o editor vi. Para ativá-lo, execute o seguinte comando:
# set -o vi

Agora, imagine que você está procurando um comando que contém a letra ''v'' (como vi, vim etc.). Para procurar o comando, digite esta sequência de caracteres. As teclas a serem pressionadas aparecem entre colchetes:
# [Escape Key][/ key][v key][ENTER Key]

Essa sequência recuperará o último comando executado contendo a letra ''v''. Nesse caso, como o último comando foi –o vi, essa opção aparece no prompt de comando.
# set -o vi

Se esse não for o comando procurado, pressione a tecla ''n'' para recuperar o comando seguinte. Desse modo, você poderá recuperar todos os comandos executados contendo a letra ''v''. Quando encontrar o comando desejado, pressione [a tecla ENTER] para executá-lo. A pesquisa poderá ser tão explícita quanto você quiser. Imagine que você está procurando um comando mpstat executado anteriormente. Para encontrá-lo, basta digitar esta string de pesquisa ''mpstat'':
# [Escape Key][/ key]mpstat[ENTER Key]

Suponha que o comando acima mostra mpstat 5 5 e, na verdade, você quer executar o comando mpstat 10 10. Em vez de digitar a string novamente, você pode editar o comando em vi. Para tanto, pressione [a tela Esc] e a tecla [v], e o comando aparecerá no editor vi. Agora você poderá editar o comando como quiser. Quando salvá-lo no vi digitando :wq, o comando modificado será executado.

Recuperando senha MySQL

Testado no Debian.

O primeiro passo, é pararmos o MySQL com o comando abaixo:

# /etc/init.d/mysql stop

Depois devemos iniciar o MySQL em modo de segurança, para que possamos ter acesso para alterar a senha:

# mysqld_safe --skip-grant-tables --skip-networking &

Explicando:

  • O parâmetro --skip-grant-tables, serve para o MySQL iniciar sem o responsável pela verificação das permissões dos usuários, dando permissão total a todos os usuários.

  • O segundo parâmetro --skip-networking, serve para que nenhuma conexão TCP/IP seja aceita, evitando que alguém se aproveite deste tempo para "destruir" seu banco de dados.


Uma vez o banco desprotegido, vamos conectar e alterar a senha do usuário que queremos recuperar. Neste exemplo, vou usar o próprio root:

# mysql -u root

mysql> update mysql.user set password=PASSWORD('nova_senha') where user='root';
mysql> flush privileges;

A senha do root já está alterada. Agora devemos parar o MySQL e iniciá-lo novamente, para que o MySQL inicie sem os skips:

# /etc/init.d/mysql stop
# /etc/init.d/mysql start


Agora, para testarmos, vamos conectar ao banco usando a senha que colocamos:

# mysql -u root -p'nova_senha'

Identificando o processo ID do asterisk de formas diferentes e matando o mesmo se necessário

Identificando o processo ID do asterisk de formas diferentes e matando o mesmo se necessário.

Motivos: Saber o ID do processo asterisk que ajuda na identificação de problemas como processamento etc... matar processo.

A maiora das pessoas usam o ps aux, fazendo um grep ou seja um filtro exemplo:
ps aux | grep asterisk



Saida do comando no meu ubuntu pessoal:

root@TuX:/var/run/asterisk# ps aux | grep asterisk
asterisk 14391 0.5 0.8 2766512 33144 ? Ssl 20:38 0:00 /usr/sbin/asterisk -p -U asterisk
asterisk 14392 0.0 0.0 4192 356 ? S 20:38 0:00 astcanary /var/run/asterisk/alt.asterisk.canary.tweet.tweet.tweet 14391

Outra maneira para que gosta de conhecer mais o software é o arquivo que é gerado para processos no linux, ele é encontrado em /var/run/asterisk

Faça o seguinte teste.

root@TuX:/var/run# cat /var/run/asterisk/asterisk.pid
14391

O que me retornou foi o processo 14391, vamos ver o que é esse 14391?

root@TuX:/var/run# ps aux | grep 14391
asterisk 14391 0.4 0.8 2766512 33144 ? Ssl 20:38 0:01 /usr/sbin/asterisk -p -U asterisk

Nota-se que era o asterisk, outro coisa interessante é que se você matar o processo asterisk o asterisk.pid some da pasta /var/run/asterisk

Exemplo: Com asterisk Up dei um ls dentro da pasta /var/run/asterisk

Saída do comando: root@TuX:/var/run/asterisk# ls
alt.asterisk.canary.tweet.tweet.tweet asterisk.ctl asterisk.pid

Agora vamos matar o asterisk

root@TuX:/var/run/asterisk# killall asterisk
root@TuX:/var/run/asterisk# ls
alt.asterisk.canary.tweet.tweet.tweet

Bom pessoal era isso que queria mostrar hoje, duas formas de ver o processo do asterisk fisicamente e com comando de procura e como ele se comporta e como você pode identificar esse processo e matar o mesmo abraços.

Adendo: comandos básicos para iniciar/reiniciar/parar o asterisk

service asterisk stop
service asterisk restart
service asterisk start

usando o kill - killall asterisk ou ID do processo.

sexta-feira, 27 de março de 2015

Comando CMP

cmp. O comando cmp é semelhante a diff:
# cmp file1 file2   
file1 file2 differ: byte 10, line 1

 

O resultado é retornado como o primeiro sinal de diferença. Você pode usar isso para identificar os possíveis pontos diferentes dos arquivos. Como diff, cmp tem muitas opções, sendo a mais importante delas a opção -s, que meramente retorna um código:

  • 0, se os arquivos forem idênticos

  • 1, se forem diferentes

  • Algum outro número diferente de zero, se não for possível fazer a comparação


A seguir está um exemplo:
# cmp -s file3 file4
# echo $?
0

 

A variável especial $? indica o código de retorno do último comando executado. Nesse caso, é 0, o que significa que os arquivos file1 e file2 são idênticos.
# cmp -s file1 file2
# echo $?
1

 

significa que file1 e file2 não são os mesmos.

Essa propriedade de cmp pode se provar útil em script de shell, em que você meramente quer verificar se dois arquivos são diferentes de alguma maneira, mas não necessariamente verificam qual é a diferença. Outro uso importante desse comando é comparar arquivos binários, em que diff pode não ser confiável.

Guia para dominar comandos avançados do Linux, Parte 5: Administrando o ambiente

Guia para dominar comandos avançados do Linux, Parte 5: Administrando o ambiente


Linux(continuação)


Arup Nanda Oracle ACE Director

Nesta quinta e última parte da série, daremos destaque a mais comandos e técnicas para administrar um ambiente Linux, inclusive os virtualizados.

Publicado em julho de 2009

Variáveis da palavra-chave shell

Quando você usa um ''shell'' na linha de comando, provavelmente trata-se de um bash shell. Em um shell, você pode definir uma variável e atribuir-lhe um valor a ser recuperado posteriormente. Veja um
exemplo de uma variável chamada
ORACLE_HOME:
# export ORACLE_HOME=/opt/oracle/product/11gR2/db1

Depois, você recorrer à variável colocando um ''$'' como prefixo antes do nome da variável, por exemplo:
# cd $ORACLE_HOME

Essa é uma variável definida pelo usuário. Do mesmo modo, há diversas variáveis definidas no shell propriamente dito, com o nome predefinido no shell e que controlam o modo como você interage nele.
É interessante conhecer essas variáveis (pelo menos as mais importantes) para aprimorar a qualidade e a eficiência de seu trabalho.

PS1

Essa variável define o prompt de comando do Linux. No exemplo apresentado a seguir, tentaremos alterar o prompt de comando do padrão ''# '' para ''$ '':

# export PS1="$ "
$
Você viu como o prompt mudou para $? Você pode colocar qualquer caractere aqui para alterar o prompt padrão. As aspas duplas não são necessárias, mas como queremos colocar um espaço depois de ''$'',
tivemos de inserir esse caractere entre aspas.

É só isso – é só mostrar o prompt num sofisticado caractere ou string de caracteres predefinidos? De jeito nenhum. Você também pode colocar símbolos especiais na variável para mostrar valores especiais. Por exemplo, o símbolo \u mostra o nome de usuário que efetuou login e \h, o nome do host. Se usarmos esses dois símbolos, o prompt poderá ser personalizado para mostrar o usuário e o local onde foi efetuado login:
$export PS1="\u@\h# "
oracle@oradba1#

Aqui vemos o prompt quando o usuário Oracle efetuou login no servidor chamado oradba1 – o suficiente para que você se lembre quem é o usuário e em qual máquina ele efetuou login.
É possível personalizar ainda mais o prompt usando outro símbolo, \W, que mostra o nome base do diretório atual. Veja como ficou o prompt:
# export PS1="\u@\h \W# "
oracle@oradba1 ~#

Como o diretório atual é HOME, aparece o símbolo ''~''. Quando você muda para outro diretório, o símbolo é alterado.

Adicionar o diretório atual é uma excelente maneira de lembrar-se onde você está e quais serão as implicações de suas ações. A execução de rm * causa um impacto no diretório /tmp diferente do que ocorreria em /home/oracle, certo?

Existe outro símbolo, o - \w. Há uma diferença muito importante entre \w e \W. Este produz o nome base do diretório atual, enquanto aquele mostra o diretório completo:
oracle@oradba1 11:59 AM db1# export PS1="\u@\h \@ \w# " 
oracle@oradba1 12:01 PM /opt/oracle/product/11gR2/db1#

Notou a diferença? No prompt anterior, no qual a opção \W foi usada, foi apresentado somente o diretório db1, que é o nome base. No prompt seguinte, no qual a opção \w foi usada, foi exibido o diretório completo:

/opt/oracle/product/11gR2/db1.

Em muitos casos, um nome de diretório completo no prompt pode ser de grande ajuda. Imagine que existem três Oracle Homes, cada qual com um subdiretório chamado db1. Como você poderá saber ao certo em que diretório está se for exibida apenas a indicação ''db1''? Um diretório completo não deixa dúvidas.No entanto, a exibição por extenso torna o prompt muito longo, o que pode ser um pouco inconveniente.

O símbolo ''\@'' mostra o horário atual no formato horas:minutos AM/PM:
# export PS1="\u@\h \@ \W# " 
oracle@oradba1 11:59 AM db1#

Eis alguns outros símbolos que você pode usar na variável shell do PS1:



























\!O número do comando no histórico (mais detalhes a seguir)
\dA data no formato Dia da semana Mês e Data
\HO nome do host com o nome do domínio. \h é o nome do host sem o domínio
\TIgual à opção \@, porém sem exibir os segundos.
\AO horário no formato horas:minutos, como ocorre com a opção \@, mas com o formato de 24 horas.
\tIgual à opção \A, porém inclui os segundos.


IFS

Essa variável pede para o shell tratar as respectivas variáveis como um todo ou separadas. Se você quiser separá-las, o valor definido para a variável IFS será usado como separador. IFS é justamente a sigla para Input Field Separator (separador de campo). Para demonstrar, vamos definir uma variável conforme segue.
# pfiles=initODBA112.ora:init.ora

Na verdade, há dois arquivos: initODBA112.ora e init.ora, e você deseja exibir a primeira linha de cada um deles. Para tanto, use o comando head -1.
# head -1 $pfiles
head: cannot open `initODBA112.ora:init.ora'
for reading: No such file or directory

O resultado fala por si; o shell interpretou a variável como um todo:
`initODBA112.ora:init.ora', que não é o nome de arquivo algum. É por isso que o comando head não dá certo. Se o shell tivesse interpretado o sinal de '':'' como algum tipo de separador, o comando teria funcionado corretamente. Sendo assim, veja o que podemos fazer definindo a variável IFS:
# export IFS=":"
# head -1 $pfiles
==> initODBA112.ora <==
# first line of file initODBA112.ora

==> init.ora <==
# first line of file init.ora

Muito bem – o shell expandiu o comando head -1 $pfiles para head -1 initODBA112.ora e head -1 init.ora. Portanto, o comando foi executado corretamente.

PATH

Quando você usa um comando no Linux, ele está em um shell, como vimos com o comando kill na parte 4 desta série, ou em um arquivo executável. Se for um executável, como você pode saber onde está o dito-cujo?

Vejamos, por exemplo, o comando rm, que remove algum arquivo e pode ser usado em qualquer diretório. Se, obviamente, o arquivo executável rm não existe em todos os diretórios, como o Linux sabe onde procurá-lo?

A variável PATH contém os locais onde o shell deve procurar por esse executável. Veja um exemplo de definição de PATH:
# echo $PATH

/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:

Quando você emite um comando como o rm, o shell procura pelo arquivo rm nestes locais, na seguinte ordem:
/usr/kerberos/bin
/usr/local/bin
/bin
/usr/bin
/usr/X11R6/bin
. (the current directory

Se o arquivo não for encontrado nesses locais, o shell retornará uma mensagem de erro -bash: comando não encontrado. Se você quiser adicionar mais locais à variável PATH, use o símbolo '':''  como separador.

Você observou um fato muito interessante acima? O local do ''diretório atual'' é definido no fim, não no início. O senso comum pode sugerir que se coloque o local no início para que o shell procure
pelo executável primeiro no diretório atual antes de buscá-lo em outro lugar. Se você colocá-lo no fim, instruirá o shell a procurar no diretório atual no fim do processo. Existe um método melhor?

Os especialistas recomendam colocar o diretório atual (.) no fim do comando PATH, não no início. Por quê? Por motivos de segurança. Imagine que você está experimentando algumas ideias para aprimorar os comandos shell e, inadvertidamente, deixa esse arquivo no seu diretório home. Ao efetuar login, você estará no diretório home e quando executar esse comando, não estará executando o comando comum, mas sim o arquivo executável no seu diretório home.

Isso pode ser desastroso em alguns casos. Suponha que está fazendo testes com uma nova versão do comando ''cp'' e que existe um arquivo chamado cp em seu diretório home. Esse arquivo pode fazer um estrago. Se você digitar ''cp somefile anotherfile'', sua versão do arquivo cp será executada e causará danos. Se você colocar o diretório atual no fim, executará o comando ''cp'' normalmente e evitará riscos.

Esta prática também afasta o risco de que algum hacker coloque um arquivo de comando nocivo na forma de comandos comuns. Alguns especialistas chegam a sugerir a remoção completa do ''.'' da variável PATH para evitar qualquer execução indesejada. Se tiver de executar alguma coisa no diretório atual, use apenas a opção ./ notation como a seguir:
# ./mycommand

Essa linha de comando executa um arquivo chamado mycommand no diretório atual.

CDPATH

Muito semelhante à variável PATH, CDPATH expande o escopo do comando cd além do diretório atual.
Por exemplo, quando você digita o comando cd command, conforme segue:
# cd dbs
-bash: cd: dbs: No such file or directory

Isso faz sentido, pois o subdiretório dbs não existe no diretório atual. Ela está em /opt/oracle/product/11gR2/db1. É por isso que o comando cd não dá certo. Naturalmente, você pode navegar até o diretório /opt/oracle/product/11gR2 e executar o comando cd com sucesso. Se quiser aumentar o escopo para incluir o diretório /opt/oracle/product/11gR2/db1, poderá emitir o comando:
# export CDPATH=/opt/oracle/product/11gR2/db1

No entanto, se você emitir o comando cd de qualquer diretório:
# cd dbs 
/opt/oracle/product/11gR2/db1/dbs
# pwd
/opt/oracle/product/11gR2/db1/dbs

Agora o comando cd procura outros diretórios referentes a esse subdiretório.

Há inúmeras outras variáveis, mas como são amplamente utilizadas, você deve conhecê-las e dominá-las.

set

Este comando controla o comportamento do shell, conta com várias opções e argumentos, mas explicarei apenas os mais importantes.

Um erro muito comum que as pessoas cometem ao usar comandos de sobreposição, como o cp e o mv, é substituir arquivos corretos inadvertidamente. Para evitar o risco, use um ''alias'' (explicado na Parte 1 desta série), por exemplo, usando a opção mv –i em vez de simplesmente mv. Entretanto, como você pode impedir que alguém ou algum script substitua os arquivos pelo operador de redirecionamento (''>'')?

Vejam,os um exemplo. Imagine que você tem um arquivo chamado very_important.txt e alguém (ou algum script) acidentalmente usou uma linha de comando como:
# ls -l > very_important.txt

O arquivo é substituído imediatamente e seu conteúdo original é perdido. Para evitar esse risco, você pode usar o comando set com a opção -o noclobber, conforme segue:
# set -o noclobber

Depois da emissão desse comando, se alguém tentar sobrescrever o arquivo:
# ls -l > very_important.txt
-bash: very_important.txt: cannot overwrite existing file

O shell agora impede a substituição do arquivo. Mas e se você quiser sobrescrevê-lo? Use o operador >|.
# ls -l >| very_important.txt

Para desativá-lo:
# set +o noclobber

Outro comando muito funcional para usar o editor vi a fim de editar comandos. Mais adiante nesta parte da série, você aprenderá a verificar os comandos emitidos e como reexecutá-los. Uma maneira rápida de reexecutar o comando é recuperá-lo usando o editor vi. Para ativá-lo, execute o seguinte comando:
# set -o vi

Agora, imagine que você está procurando um comando que contém a letra ''v'' (como vi, vim etc.). Para procurar o comando, digite esta sequência de caracteres. As teclas a serem pressionadas aparecem entre colchetes:
# [Escape Key][/ key][v key][ENTER Key]

Essa sequência recuperará o último comando executado contendo a letra ''v''. Nesse caso, como o último comando foi –o vi, essa opção aparece no prompt de comando.
# set -o vi

Se esse não for o comando procurado, pressione a tecla ''n'' para recuperar o comando seguinte. Desse modo, você poderá recuperar todos os comandos executados contendo a letra ''v''. Quando encontrar o comando desejado, pressione [a tecla ENTER] para executá-lo. A pesquisa poderá ser tão explícita quanto você quiser. Imagine que você está procurando um comando mpstat executado anteriormente. Para encontrá-lo, basta digitar esta string de pesquisa ''mpstat'':
# [Escape Key][/ key]mpstat[ENTER Key]

Suponha que o comando acima mostra mpstat 5 5 e, na verdade, você quer executar o comando mpstat 10 10. Em vez de digitar a string novamente, você pode editar o comando em vi. Para tanto, pressione [a tela Esc] e a tecla [v], e o comando aparecerá no editor vi. Agora você poderá editar o comando como quiser. Quando salvá-lo no vi digitando :wq, o comando modificado será executado.

type

Na Parte 4 você aprendeu sobre o kill, um comando especial, que é tanto um utilitário (um executável em algum diretório) quanto um shell built-in. Em outras partes desta série, você também aprendeu sobre outros aliases. Às vezes, existem alguns comandos usados em scripts shell – ''do'', ''done'', ''while'', por exemplo que não são comandos propriamente ditos. Tratam-se de palavras-chave shell.

Como você saberá que tipo de comando é esse? O próprio tipo de comando indicará isso. Veja como usamos esse recurso para mostrar os tipos de comandos mv, do, fc e oh.
# type mv do fc oh
mv is /bin/mv
do is a shell keyword
fc is a shell builtin
oh is aliased to `cd $ORACLE_HOME'

Estas opções mostram muito claramente que mv é um utilitário (junto com o respectivo local). A opção do é uma palavra-chave usada em scripts, fc é integrada e oh é um alias (e indica o objeto que recebeu o alias).

history

Quando você entra no sistema Linux, normalmente executa vários comandos no prompt. Como saber quais comandos foram executados? Esse tipo de informação pode ser útil por vários motivos: se você quiser reexecutar  um comando sem precisar digitá-lo de novo, para certificar-se de que executou o comando correto (por exemplo, se removeu o arquivo certo), se precisar verificar quais comandos foram emitidos, e assim por diante. O comando history fornece um histórico dos comandos executados.
# history 
1064 cd dbs
1065 export CDPATH=/opt/oracle/product/11gR2/db1
1066 cd dbs
1067 pwd
1068 env
1069 env | grep HIST
… and so on …

Observe os números antes de cada comando. Eles representam o evento ou número do comando. Você aprenderá como usar esse recurso a seguir nesta seção. Se quiser exibir somente algumas linhas do histórico – digamos, apenas os últimos cinco comandos – em vez de todas as informações disponíveis:
# history 5

Na verdade, a maior utilidade do comando history é a capacidade de reexecutar um comando sem digitá-lo novamente. Para tanto, insira um ! seguido pelo evento ou número do comando que precede o respectivo nome no histórico. Para executar novamente o comando cd dbs mostrado no número 1066, digite o seguinte:
# !1066
cd dbs
/opt/oracle/product/11gR2/db1/dbs

O comando !! (dois pontos de exclamação) executa novamente o último comando aplicado. Você também podeinserir uma string após o comando ! para executar mais uma vez o último comando com o padrão da string inserida na posição inicial. O comando a seguir executa novamente o comando mais recente que comece com cd:
# !cd
cd dbs
/opt/oracle/product/11gR2/db1/dbs

E se você quiser reexecutar um comando contendo uma string – não necessariamente no início? O modificador ? estabelece uma correspondência de padrões nos comandos. Para procurar um comando contendo a palavra, emita o seguinte código:
# !?network?
cd network
/opt/oracle/product/11gR2/db1/network

Também é possível modificar o comando a ser reexecutado. Por exemplo, imagine que você emitiu um comando cd /opt/oracle/product/11gR2/db1/network e deseja reexecutá-lo, adicionando /admin ao fim da string. Basta digitar:
# !1091/admin
cd network/admin
/opt/oracle/product/11gR2/db1/network/admin


fc


Este comando é um shell built-in usado para mostrar o histórico de comandos, como acontece com a opção history. A opção mais comum é -l (a letra ''L'', não o número ''1'') que mostra os 16 comandos mais recentes:
# fc -l
1055 echo $pfiles
1056 export IFS=
... and so on ...
1064 cd dbs
1065 export CDPATH=/opt/oracle/product/11gR2/db1
1066 cd dbs

Você também pode usar fc para mostrar apenas alguns comandos numa determinada faixa de números de eventos, por exemplo, 1060 e 1064:
# fc -l 1060 1064
1060 pwd
1061 echo CDPATH
1062 echo $CDPATH
1063 cd
1064 cd dbs

A opção -l também abrange outros dois parâmetros – a string a executar uma correspondência de padrões. Segue um exemplo em que você deseja exibir o histórico de todos os comandos iniciados com a palavra echo, do registro até o comando mais recente que comece com pwd.
# fc -l echo pwd
1062 echo $CDPATH
1063 cd
1064 cd dbs
1065 export CDPATH=/opt/oracle/product/11gR2/db1
1066 cd dbs
1067 pwd

Se quiser reexecutar o comando cd dbs (comando número 1066), basta inserir esse número depois de fc com a opção -s:
# fc -s 1066
cd dbs
/opt/oracle/product/11gR2/db1/db

Outro uso muito interessante do comando fc -l é a substituição de comandos. Imagine que você quer executar um comando semelhante ao 1066 (cd dbs), mas pretende emitir um cd network, não o cd dbs.
Use o seguinte argumento de substituição:
# fc -s dbs=network 1066
cd network
/opt/oracle/product/11gR2/db1/network

Se você omitir a opção -s option, conforme segue:
# fc 1066

Abrirá um arquivo vi contendo o comando cd dbs, que pode ser editado e executado.

cpio

Imagine esta situação: você pretende enviar um conjunto de arquivos para alguém ou algum lugar e não quer correr o risco de perdê-los para não fragmentar o conjunto. O que pode ser feito para garantir a integridade da transmissão? É simples. Se você conseguir colocar todos os arquivos em um único arquivo e enviá-lo ao destinado, poderá ficar tranquilo que todos os arquivos serão enviados com segurança.

O comando cpio tem três opções:

  • -o (create) cria um arquivo

  • -i (extract) extrai arquivos de um arquivo compactado

  • -p (pass through) copia arquivos em outro diretório


Cada opção tem seu próprio conjunto de subopções. Por exemplo, a opção -c é aplicável no caso de -i e –o, mas não no caso de -p. Então, vejamos os principais grupos de opções e como utilizá-las.

A opção -v é usada para exibir um resultado detalhado, o que poderá ser útil quando você quiser um feedback preciso do que está acontecendo.

Primeiro, vejamos como colocar vários arquivos em um arquivo compactado. Neste exemplo, colocaremos todos os arquivos com a extensão ''trc'' em um diretório específico, num arquivo compactado chamado myfiles.cpio:
$ ls *.trc | cpio -ocv > myfiles.cpio
+asm_ora_14651.trc
odba112_ora_13591.trc
odba112_ora_14111.trc
odba112_ora_14729.trc
odba112_ora_15422.trc
9 blocks

Como a opção -v foi usada para obtenção de um resultado detalhado, o comando cpio mostrou cada item adicionado ao arquivo compactado. A opção -o foi usada para criar um arquivo compactado. A opção -c foi usada para instruir o comando cpio a escrever as informações de cabeçalho em ASCII, a fim de facilitar a movimentação entre diferentes plataformas.

Outra opção é is –O, que aceita o arquivo compactado resultante como um parâmetro.
# ls *.trc | cpio -ocv -O mynewfiles.cpio

Para extrair os arquivos:
$ cpio -icv < myfiles.cpio
+asm_ora_14651.trc
cpio:odba112_ora_13591.trc not created:newer or same age version exists
odba112_ora_13591.trc

Aqui, as opções -v e –i são usadas para resultado detalhado e para extração do conteúdo de arquivos compactados. A opção –c foi usada para instruir o comando cpio a ler as informações do cabeçalho como ASCII. Quando extrai um arquivo já existente (como no caso de odba112_ora_13591.trc), o comando cpio não o substitui; simplesmente o ignora com a mensagem. Para forçar a substituição, use a opção -u.
# cpio -icvu < myfiles.cpio

Para exibir somente o conteúdo sem extrai-lo efetivamente, use a opção –t com –i (extração):
# cpio -it < myfiles.cpio
+asm_ora_14651.trc
odba112_ora_13591.trc
odba112_ora_14111.trc

E se você estiver extraindo um arquivo já existente? Poderá extrai-lo, mas talvez com um nome diferente. Por exemplo, caso você tente restaurar um arquivo chamado alert.log (arquivo de log de uma instância Oracle) e não queira substituir o atual alert.log.

Uma opção muito útil é –r, que permite renomear os arquivos a serem extraídos de modo interativo.
# cpio -ir < myfiles.cpio
rename +asm_ora_14651.trc -> a.trc
rename odba112_ora_13591.trc -> b.trc
rename odba112_ora_14111.trc ->[ENTER] which leaves the name alone

Se você criou compactou um diretório usando o comando cpio e desejar extrair o conteúdo na mesma estrutura de pastas, use a opção –d durante a extração.

Ao criar um arquivo compactado, você pode adicionar arquivos existentes (anexar) usando a opção –A, conforme segue:
# ls *.trc | cpio -ocvA -O mynewfiles.cpio

O comando tem várias outras opções, mas você precisa conhecer apenas as que lhe serão úteis.

tar

Outro mecanismo para criar um arquivo compactado é o comando tar. Originalmente criado para arquivamento em unidades de fita (portanto o nome Tape Archiver), o comando tar é muito difundido por sua simplicidade e tem três opções principais:

  • -c.para criar um arquivo compactado

  • -x para extrair o conteúdo de um arquivo compactado

  • -t para exibir o conteúdo de um arquivo compactado


Veja como se cria um arquivo tar. A opção –f permite nomear o arquivo compactado resultante da aplicação do comando tar. Neste exemplo, criamos um arquivo compactado chamado myfiles.tar contendo todos os arquivos com a extensão ''trc''.
# tar -cf myfiles.tar *.trc

Depois de criar o arquivo compactado, você pode listar o conteúdo com a opção –t.
# tar tf myfiles.tar
+asm_ora_14651.trc
odba112_ora_13591.trc
odba112_ora_14111.trc
odba112_ora_14729.trc
odba112_ora_15422.trc

Para exibir os detalhes dos arquivos, use a opção –v (verbose):
# tar tvf myfiles.tar
-rw-r----- oracle/dba 1150 2008-12-30 22:06:39 +asm_ora_14651.trc
-rw-r----- oracle/dba 654 2008-12-26 15:17:22 odba112_ora_13591.trc
-rw-r----- oracle/dba 654 2008-12-26 15:19:29 odba112_ora_14111.trc
-rw-r----- oracle/dba 654 2008-12-26 15:21:36 odba112_ora_14729.trc
-rw-r----- oracle/dba 654 2008-12-26 15:24:32 odba112_ora_15422.trc

Para extrair o conteúdo de um arquivo compactado, use a opção –x. Veja um exemplo (a opção –v foi usada para mostrar o resultado detalhado):
# tar xvf myfiles.tar


zip


A compactação é uma parte muito importante na administração de um ambiente Linux. Talvez você precise compactar vários arquivos a fim de liberar espaço para novos dados ou para enviá-los por via email, etc.

O Linux oferece diversos comandos de compactação. Vejamos os mais comuns: zip e gzip.

O comando zip produz um único arquivo consolidando outros arquivos e compactando-os em um arquivo zip (compactado). Veja um exemplo do uso do comando:
# zip myzip *.aud

Aqui produzimos um arquivo chamado myzip.zip com todos os arquivos do diretório com a extensão .aud.

O comando zip aceita várias opções. A mais comum é a -9, que instrui o zip a compactar o máximo possível, mas sacrifica os ciclos da CPU (e, portanto, demora mais). A outra opção, a -1, instrui justament e o oposto: compactação mais rápida, porém reduzida.

Você também pode proteger o arquivo zip criptografando-o com uma senha. Sem a senha correra, o arquivo zip não poderá ser descompactado. Essa característica é atribuída em tempo de execução com a opção –e (encrypt):
# zip -e ze *.aud
Enter password:
Verify password:
adding: odba112_ora_10025_1.aud (deflated 32%)
adding: odba112_ora_10093_1.aud (deflated 31%)
... and so on ...

A opção -P permite fornecer a senha na linha de comando. Como permite que outros usuários vejam a senha em texto sem formatação, verificando processos ou procurando no histórico de comandos, essa opção não é tão recomendada quanto a -e.
# zip -P oracle zp *.aud 
updating: odba112_ora_10025_1.aud (deflated 32%)
updating: odba112_ora_10093_1.aud (deflated 31%)
updating: odba112_ora_10187_1.aud (deflated 31%)
… and so on ..

Você pode verificar a integridade dos arquivos zip com a opção -T. Se o arquivo zip estiver criptografado por senha, será necessário fornecê-la.
# zip -T ze
[ze.zip] odba112_ora_10025_1.aud password:
test of ze.zip OK

Naturalmente, para usar o conteúdo de um arquivo compactado, é preciso descompactá-lo. Para tanto, o comando necessário nada mais é que o famoso unzip. Vejamos o uso simples desse comando para descompactar o arquivo ze.zip.

# unzip myfiles.zip

Se o arquivo zip estiver criptografado por senha, você receberá uma solicitação para digitar a senha. Ao inseri-la, ela não será reproduzida na tela.
# unzip ze.zip
Archive: ze.zip
[ze.zip] odba112_ora_10025_1.aud password:
password incorrect--reenter:
password incorrect--reenter:
replace odba112_ora_10025_1.aud? [y]es, [n]o, [A]ll, [N]one, [r]ename: N

Neste exemplo, como você digitou a senha incorreta inicialmente, terá de digitá-la novamente. Quando recebeu a senha correta, o comando unzip descobriu que já existe um arquivo chamado odba112_ora_10025_1.aud e solicitou sua interferência. Observe as alternativas – também existe a opção de renomear o arquivo descompactado.

Lembra-se do zip protegido por senha inserida na linha de comando zip com a opção –P? Você pode descompactar esse arquivo inserindo o comando na respectiva linha com a mesma opção –P.
# unzip -P mypass zp.zip

A opção -P é diferente de –p, que instrui a descompactação de arquivos na saída padrão que, posteriormente, pode ser redirecionada para outro arquivo ou programa.

O principal atrativo do comando zip é sua maior compatibilidade. Você pode compactar um arquivo com o comando zip no Linux e descompactá-lo no sistema operacional X ou no Windows. O utilitário unzip está disponível em várias plataformas.

Imagine que você compactou vários arquivos armazenados em diferentes subdiretórios de um diretório. Quando o arquivo for descompactado, serão criados os subdiretórios conforme necessário. Se quiser que todos os arquivos sejam descompactados no diretório atual, use a opção -j.
# unzip -j myfiles.zip

Uma das combinações mais úteis é usar o comando tar para consolidar os arquivos e compactar o arquivo resultante com o comando zip. Em vez de um processo de duas etapas (tar e zip), você passa o resultado do comando tar para o zip conforme segue:
# tar cf - . | zip myfiles -
adding: - (deflated 90%


O caractere especial ''-'' no zip significa o nome do arquivo. O comando acima submete todos os itens ao comando tar e cria um arquivo zip chamado myfiles.zip. Do mesmo modo, ao descompactar o arquivo e extrair o respectivo conteúdo, você pode eliminar o processo de duas etapas e executá-las de uma só vez:
# unzip -p myfiles | tar xf -



gzip


O gzip (abreviação de GNU zip) é outro comando usado para compactar arquivos, destinado a substituir o antigo utilitário de compactação da UNIX.

A principal diferença entre o zip e o gzip é que o primeiro cria um arquivo zip contendo vários itens e o segundo compacta cada arquivo separadamente. Veja este exemplo de utilização:
# gzip odba112_ora_10025_1.aud

Observe que você não recebeu uma solicitação para dar um nome ao arquivo zip. O comando gzip pega cada arquivo (por exemplo, odba112_ora_10025_1.aud) e simplesmente cria um arquivo zip com o nome de odba112_ora_10025_1.aud.gz. Além disso, é importante observar que ele remove o arquivo original odba112_ora_10025_1.aud. Se você passar um conjunto de arquivos como parâmetro para o comando:
# gzip *

Ele criará um arquivo zip com a extensão .gz para cada item presente no diretório. Inicialmente, o diretório continha os seguintes arquivos:
a.txt
b.pdf
c.trc

Após a aplicação do comando gzip *, o conteúdo do diretório será:
a.txt.gz
b.pdf.gz
c.trc.gz

O mesmo comando também é usado para descompactar arquivos. A opção -d ¾ aliás, bastante intuitiva ¾ e usada para descompactar arquivos agrupados com o gzip.

Para verificar o arquivo compactado pelo comando gzip e o grau de compactação, você pode usar a opção -l. Na verdade, essa opção não realiza nenhuma ação; ela apenas mostra o conteúdo do arquivo compactado.
# gzip -l *
compressed uncompressed ratio uncompressed_name
698 1150 42.5% +asm_ora_14651.trc
464 654 35.2% odba112_ora_13591.trc
466 654 34.9% odba112_ora_14111.trc
466 654 34.9% odba112_ora_14729.trc
463 654 35.3% odba112_ora_15422.trc
2557 3766 33.2% (totals)


Você também pode compactar os arquivos em um diretório usando a opção recursiva (-r). Para aplicar o comando gzip a todos os arquivos no diretório de log, use:
# gzip -r log

Para verificar a integridade de um arquivo compactado pelo gzip, use a opção -t:
# gzip -t myfile.gz

Quando você quiser criar um nome diferente do padrão .gz para o arquivo compactado pelo gzip, use a opção –c. Assim, o comando gzip gravará o arquivo na saída padrão que poderá ser direcionada para um arquivo. Você pode usar a mesma técnica para colocar mais de um item no mesmo arquivo gzip. Vamos compactar dois itens – odba112_ora_14111.trc, odba112_ora_15422.trc – no mesmo arquivo 1.gz.
# gzip -c  odba112_ora_14111.trc odba112_ora_15422.trc > 1.gz

Observe o que acontece quando o conteúdo do arquivo compactado é exibido:
# gzip -l 1.gz
compressed uncompressed ratio uncompressed_name
654 -35.9% 1


A taxa de compactação exibida refere-se somente ao último arquivo na lista (é por isso que o original aparece com um tamanho inferior ao do arquivo compactado). Na descompactação, os dois originais são exibidos um após o outro e ambos são descompactados corretamente.

A opção -f força a sobreposição dos arquivos, se estiverem presentes. A opção –v mostra o resultado com mais detalhes. Veja este exemplo:
# gzip -v *.trc
+asm_ora_14651.trc: 42.5% -- replaced with +asm_ora_14651.trc.gz
odba112_ora_13591.trc: 35.2% -- replaced with odba112_ora_13591.trc.gz
odba112_ora_14111.trc: 34.9% -- replaced with odba112_ora_14111.trc.gz
odba112_ora_14729.trc: 34.9% -- replaced with odba112_ora_14729.trc.gz
odba112_ora_15422.trc: 35.3% -- replaced with odba112_ora_15422.trc.gz

Um comando relacionado é o zcat. Se quiser exibir o conteúdo do arquivo compactado com o comando gzip sem descompactá-lo, use o comando zcat:
# zcat 1.gz

O comando zcat é semelhante ao gzip -d | cat no arquivo, mas não o descompacta efetivamente.

A exemplo do comando zip command, o gzip também aceita opções de grau de compactação
# gzip -1 myfile.txt … Least compression consuming least CPU and fastest
# gzip -9 myfile.txt … Most compression consuming most CPU and slowest

Também existe o comando gunzip, que é equivalente ao gzip -d (para descompactar um arquivo gzip).

Administrando o Linux em um ambiente virtual

O Linux tem sido executado em data centers no mundo todo há um bom tempo. Tradicionalmente, o conceito de servidor implica uma máquina física diferente das outras. Pelo menos era o que acontecia antes da virtualização em que um único servidor pode ser subdividido em vários servidores virtuais  como se cada parte um fosse um servidor independente na rede. Inversamente, um ''pool'' de servidores formado por várias máquinas físicas pode ser dividido de acordo com a necessidade.

Como não existe mais a obrigatoriedade de uma relação um-a-um entre um servidor físico e um lógico ou virtual, alguns conceitos podem parecer complicados. Por exemplo, qual é a memória disponível? É a disponibilidade do servidor virtual (1), do servidor físico individual (2) onde reside o servidor virtual ou do total do pool de servidores ao qual pertence o servidor virtual (3)? Sendo assim, os comandos Linux podem se comportar de maneira um pouco diferente quando operados em um ambiente virtual.

Além disso, como o ambiente virtual também precisa de administração, existem alguns comandos especializados para o gerenciamento da infraestrutura virtualizada. Nesta seção, você aprenderá sobre os comandos especializados e as atividades relacionadas ao ambiente virtual. Usaremos o Oracle VM como exemplo.

Um dos componentes principais da virtualização em um ambiente Oracle VM é o Oracle VM Agent, que deve estar operante para que o Oracle VM funcione plenamente. Para verificar o funcionamento do agente, é preciso acessar o servidor de administração (provm1, neste caso) e usar o comando service:
[root@provm1 vnc-4.1.2]# service ovs-agent status
ok! process OVSMonitorServer exists.
ok! process OVSLogServer exists.
ok! process OVSAgentServer exists.
ok! process OVSPolicyServer exists.
ok! OVSAgentServer is alive.

O resultado mostra claramente que todos os processos-chave estão operantes. Se não estiverem, pode haver uma configuração errada e convém reconfigurá-los (ou talvez eles nunca tenham sido configurados):
# service ovs-agent configure

O mesmo comando service também é usado para iniciar, reiniciar ou interromper processos do agente:
service ovs-agent start
service ovs-agent restart
service ovs-agent stop

No entanto, a melhor maneira de administrar o ambiente é pelo console da GUI baseado na Web. Por padrão, a página do administrador (Manager Webpage) está disponível no servidor Admin, porta 8888. Para ativá-la, você pode digitar o seguinte no navegador (presumindo que o nome do servidor admin seja oradba2).
http://oradba2:8888/OVS

Efetue login como admin, use a senha criada durante a instalação e será exibida a seguinte tela:

 

Image 1
A parte inferior da tela mostra os servidores físicos do pool. Neste caso, o pool de servidores é chamado provmpool1 e o IP do servidor físico é 10.14.106.0. Nessa tela, você pode reiniciar, desligar ou retirar o servidor do pool, bem como editar os detalhes desse servidor. Também é possível adicionar um novo servidor físico ao pool clicando no botão Add Server.

Se você clicar no endereço IP do servidor, os detalhes desse servidor físico serão exibidos conforme segue:

 

Image 2
Talvez o item mais útil seja a guia Monitor. Se você clicar nessa guia, serão exibidas as informações de utilização dos recursos do servidor – CPU, disco e memória, como demonstrado a seguir. Nessa página, você pode verificar visualmente se os recursos estão sub ou sobreutilizados, se precisa adicionar mais servidores físicos e assim por diante.

 

Image 3
Voltando à página principal, a guia Server Pools mostra os diferentes pools de servidores definidos. Aqui você pode definir outro pool, interromper e restaurar o funcionamento do pool, entre outras ações:

 

Image 4
Se quiser adicionar um usuário ou outro administrador, clique na guia Administration. Existe um administrador padrão chamado ''admin''. É possível verificar todos os administradores aqui, definir suas propriedades, como endereços de email, nomes etc.:

 

Image 5
Talvez a atividade mais frequente que você vai executar é administrar cada máquina virtual (VM, na sigla em inglês). Quase todas as funções estão localizadas na guia Virtual Machines na homepage principal, que mostra as VMs criadas até o momento. Segue uma captura de tela parcial mostrando duas máquinas chamadas provmlin1 e provmlin2:

 

Image 6
A VM chamada provmlin2 é exibida como ''powered off'', ou seja, aparece como desligada para os usuários finais. A outra, provmlin1, apresenta algum tipo de erro. Vamos começar com a VM provmlin2.
Selecione o botão de opção ao lado dela e clique no botão Power On. Depois de algum tempo, essa VM aparecerá como ''Running'' (em execução), conforme segue:

 

Image 7
Se você clicar no nome da VM, conseguirá ver os respectivos detalhes, entre os quais:

 

Image 8
A tela acima mostra que à VM foram alocados 512MB de RAM, que ela executa um Oracle Enterprise Linux 5, tem apenas um core, e assim por diante. Um das informações principais disponíveis na página é a porta VNC: 5900. Com esse dado, você pode ativar o terminal VNC dessa VM. Aqui, usei um VNV viewer com o nome de host provm1 e porta 5900:

 

Image 9
Desse modo, a sessão VNC é ativada no servidor. Agora você pode iniciar uma sessão do terminal:

 

Image 10
Como a porta 5900 do VNC apontou para a máquina virtual chamada provmlin4, o terminal nessa VM foi ativado. Agora, você pode emitir seus comandos Linux normalmente nesse terminal.

xm

No servidor que executa máquinas virtuais, os comandos de medição de desempenho, como o uptime (descrito na Parte 3 desta série) e o top (descrito na Parte 2) têm diferentes significados comparados aos seus equivalentes no servidor físico. Num servidor físico, o comando uptime refere-se ao período de atividade do servidor, enquanto no mundo virtual, ele pode ser ambíguo, referindo-se a cada servidor virtual no servidor em questão. Para avaliar o desempenho do pool de servidores físicos, use um comando diferente, o xm. Os comandos são emitidos com base nesse comando principal. Por exemplo, para relacionar os servidores virtuais, você pode usar o comando xm list:
[root@provm1 ~]# xm list
Name ID Mem VCPUs State Time(s)
22_provmlin4 1 512 1 -b---- 27.8
Domain-0 0 532 2 r----- 4631.9

Para medir o tempo de atividade, use o xm uptime:
[root@provm1 ~]# xm uptime
Name ID Uptime
22_provmlin4 1 0:02:05
Domain-0 0 8:34:07

Seguem os demais comandos disponíveis no xm. Muitos deles podem ser executados também por meio da GUI.
console      Anexa ao console do <domínio>.                     
create Cria um domínio com base no <ConfigFile>.
new Adiciona um domínio à gestão de domínios Xend
delete Remove um domínio da gestão de domínios Xend.
destroy Encerra um domínio imediatamente.
dump-core Dump core (estado registrado) de um domínio específico.
help Exibe esta mensagem.
list Relaciona as informações sobre todos ou alguns domínios.
mem-set Define o uso de memória atual para um domínio.
migrate Migra um domínio para outra máquina.
pause Faz uma pausa na execução de um domínio.
reboot Reinicia um domínio.
restore Restaura um domínio de um estado salvo.
resume Retoma um domínio gerenciado por Xend.
save Salva o estado de um domínio a ser restaurado posteriormente.
shell Inicia um shell interativo.
shutdown Desativa um domínio.
start Inicia um domínio gerenciado por Xend.
suspend Suspende um domínio gerenciado por Xend.
top Monitora um host e os domínios em tempo real.
unpause Reativa um domínio em pausa.
uptime Exibe o tempo de atividade de um domínio.
vcpu-set Define o número de VCPUs ativas permitidas para o domínio.

Vejamos os comandos usados com maior frequência. Além de saber o tempo de atividade, talvez você queira verificar o desempenho do sistema usando o comando top. O comando xm top atua de modo bem parecido com o do top no shell regular de servidor – ele é atualizado automaticamente, tem algumas chaves que exibem diferentes tipos de medições como CPU, I/O, rede etc. Segue o resultado do comando xm top básico:
xentop - 02:16:58   Xen 3.1.4
2 domains: 1 running, 1 blocked, 0 paused, 0 crashed, 0 dying, 0 shutdown
Mem: 1562776k total, 1107616k used, 455160k free CPUs: 2 @ 2992MHz

NAME  STATE   CPU(sec) CPU(%)     MEM(k) MEM(%)  MAXMEM(k) MAXMEM(%) VCPUS NETS
NETTX(k) NETRX(k) VBDS   VBD_OO   VBD_RD   VBD_WR SSID
22_provmlin4 --b  27    0.1  524288  33.5  1048576   67.1   1    1         9      154        1    06598   1207   0
Domain-0 -----r  4647  23.4  544768  34.9   no limit    n/a    2    8   68656  2902548    0       0         0      0

 

Ele mostra estatísticas na forma de porcentagens de uso da CPU, memória etc. referentes a cada VM. Se você pressionar N, verá as atividades de rede mostradas a seguir:
xentop - 02:17:18   Xen 3.1.4
2 domains: 1 running, 1 blocked, 0 paused, 0 crashed, 0 dying, 0 shutdown
Mem: 1562776k total, 1107616k used, 455160k free CPUs: 2 @ 2992MHz
Net0 RX:180692bytes 2380pkts 0err 587drop TX:9414bytes 63pkts 0err 0drop
Domain-0 --r 4650 22.5 544768 34.9 no limit n/a 2 8 68665 2902570 0 0
0 0 0
Net0 RX:2972232400bytes 2449735pkts 0err 0drop TX:70313906bytes
Net1 RX: 0bytes 0pkts 0err 0drop TX: 0bytes ...
Net2 RX: 0bytes 0pkts 0err 0drop TX: 0bytes ...
Net3 RX: 0bytes 0pkts 0err 0drop TX: 0bytes ...
Net4 RX: 0bytes 0pkts 0err 0drop TX: 0bytes ...
Net5 RX: 0bytes 0pkts 0err 0drop TX: 0bytes ...
Net6 RX: 0bytes 0pkts 0err 0drop TX: 0bytes ...
Net7 RX: 0bytes 0pkts 0err 0drop TX: 0bytes ...

 
Net0 RX:  1017641pkts   0err       0drop

Net1 RX:        0pkts   0err       0drop
Net2 RX: 0pkts 0err 0drop
Net3 RX: 0pkts 0err 0drop
Net4 RX: 0pkts 0err 0drop
Net5 RX: 0pkts 0err 0drop
Net6 RX: 0pkts 0err 0drop
Net7 RX: 0pkts 0err 0drop

Se pressionar a letra V, serão exibidas as estatísticas da VCPU (Virtual CPU).
xentop - 02:19:02   Xen 3.1.4
2 domains: 1 running, 1 blocked, 0 paused, 0 crashed, 0 dying, 0 shutdown
Mem: 1562776k total, 1107616k used, 455160k free < CPUs: 2 @ 2992MHz

NAME  STATE  CPU(sec) CPU(%)  MEM(k) MEM(%)  MAXMEM(k) MAXMEM(%) VCPUS NETS
NETTX(k) NETRX(k) VBDS   VBD_OO   VBD_RD   VBD_WR SSID

22_provmlin4 --b---   28     0.1   524288  33.5  1048576   67.1   1    1     9     282        1   06598   1220   0
VCPUs(sec):   0:    28s
Domain-0 -----r  4667    1.6   544768  34.9   no limit    n/a     2    8   68791  2902688   0       00      0      0
VCPUs(sec):   0: 2753s   1:     1913s

Vejamos algumas atividades bastante comuns. Uma delas é distribuir a memória disponível entre as VMs. Se você quiser definir 256 MB de RAM para cada VM, use o comando xm mem-set conforme segue. Depois, use o comando xm list para confirmar a distribuição de RAM.
[root@provm1 ~]# xm mem-set 1 256
[root@provm1 ~]# xm mem-set 0 256
[root@provm1 ~]# xm list
Name ID Mem VCPUs State Time(s)
22_provmlin4 1 256 1 -b---- 33.0
Domain-0 0 256 2 r----- 4984.4



Conclusão


Aqui termina a extensa série de cinco partes sobre comandos avançados do Linux. Como mencionei no início da série, o Linux tem milhares de comandos úteis em muitas ocasiões e novos comandos são desenvolvidos e adicionados regularmente. Não é importante conhecer todos os comandos disponíveis, mas sim saber quais são mais úteis para você

Nesta série, apresentei e expliquei alguns dos comandos necessários para realizar a maior parte de suas tarefas diárias. Se você colocar em prática alguns deles, junto com as respectivas opções e argumentos, conseguirá lidar com qualquer infraestrutura Linux sem problemas.

Obrigado pela leitura e tudo de bom!

 

FONTE: http://www.oracle.com/technetwork/pt/articles/linux/part5-087549-ptb.html