Ligando a máquina remotamente e desativando o botão power

Configurando o gerenciamento de energia usando ACPI O ACPI (Advanced Configuration and Power Interface – Interface de Configuração e Gerenciamento de Energia Avançado) é uma camada de gerenciamento de energia que opera a nível de sistema operacional. Apresenta os mesmos recursos que o APM, e outros como o desligamento da máquina por teclas especiais de teclado, controle de brilho e contraste de notebooks, suspend para RAM, suspend para disco, redução de velocidade de CPU manualmente, monitoramento de periféricos, temperatura, hardwares, etc. Desta forma, o ACPI varia de sistema para sistema em questões relacionadas com suporte a recursos especiais, estes dados são armazenados em tabelas chamadas DSDT. O Linux inclui suporte a recursos ACPI genéricos entre placas mãe, recursos específicos devem ser extraídos diretamente da BIOS e disassemblados manualmente para a construção de um kernel com suporte específico a tabela DSDT do hardware (não falarei das formas de se fazer disso aqui, somente do suporte genérico). Quanto mais nova a versão do kernel, maiores as chances do seu hardware ser suportado plenamente pelo ACPI, principalmente no caso de notebooks. Para compilar estaticamente, marque com Y a opção ACPI, depois marque os módulos que você quer que ele monitore: button (botão power), fan (ventoinhas), etc. Se compilou como módulo, adicione o nome do módulo acpi no arquivo /etc/modules. Não há problema em compilar também o suporte a APM, pois não causará problemas com um kernel com ACPI também compilado. Caso não saiba quais módulos ACPI seu sistema aceita, marque o suporte a todos e carregue-os. Após isto, entre no diretório /proc/acpi e de um ls entrando nos diretórios e vendo se existem arquivos dentro deles. Remova o módulo correspondente daqueles que não tiver conteúdo. Após isto, instale o daemon acpid e configure-o para monitorar algumas características do seu sistema. Por padrão o acpid monitora o botão POWER, assim se você pressionar o power, seu sistema entrará automaticamente em run-level 0, fechando todos os processos e desligando sua máquina. O suporte a ACPI pode ser desativado de 3 formas: Removendo seu suporte do kernel, passando o argumento acpi=off ao kernel (caso esteja compilado estaticamente) ou removendo o módulo de /etc/modules (caso tenha compilado como módulo. Após isto, remova o daemon acpid do seu sistema.

Ativando WakeUP on Lan Algumas placas mãe ATX possuem suporte a este interessante recurso, que permite sua máquina ser ligada através de uma rede. Isto é feito enviando-se uma seqüência especial de pacotes diretamente para o MAC (endereço físico) da placa de rede usando um programa especial. Para usar este recurso, seu sistema deverá ter as seguintes características: Placa mãe ATX Fonte de alimentação ATX compatível com o padrão 2.0, com fornecimento de pelo menos 720ma de corrente na saída +3v. Placa de rede com suporte a WakeUP-on-Lan (WOL), você poderá confirmar isto vendo um conector branco de 3 terminais instalado na placa que é o local onde o cabo wake-up é conectado. Suporte na BIOS também deverá ter a opção para WakeUP-on-Lan. Com todos esses ítens existentes, instale em uma máquina da rede o pacote etherwake. Depois disso, pegue o MAC address a placa de rede da máquina que tem o wakeup on lan e na máquina da rede onde instalou o pacote execute o seguinte comando:

ether-wake AA:BB:CC:DD:EE:FF

Onde AA:BB:CC:DD:EE:FF é o endereço MAC da placa de rede. A máquina deverá ligar e realizar o procedimento padrão de POST normalmente. Algumas das situações onde o WOL não funciona é quando sua rede é controlada por Switches (devido a natureza de funcionamento deste equipamentos) ou caso esteja atrás de um roteador que não faz proxy arp.

Rede Máscaras / Netmasks para modelos

As máscaras de rede é uma notação para o grupo de endereços IP. Let’s take a familiar analogy. Vamos fazer uma analogia familiar. My phone in US was 510-595-3830. Meu telefone na E.U. foi 510-595-3830. 510 was the area code which included a large group of phone numbers in San Francisco-Oakland-Emeryville area. 510 foi o código de área, que incluiu um grande grupo de números de telefone em San Francisco-Oakland-Emeryville área. Similarly IP addresses are also grouped by their network prefix. Do mesmo modo os endereços IP também estão agrupados pela sua rede de prefixo.

Netmasks are important for allocating sub-networks to individuals or organizations. Netmasks são importantes para a atribuição de sub-redes de indivíduos ou organizações. They are also used to identify networks for routing purposes. Eles também são utilizados para identificar redes de roteamento fins.

Each (IPv4) IP address contains a 4 8-bit integers in the form abcd So an IPv4 IP address contains 32 bits. Cada (IPv4) contém um endereço IP 4 8-bit inteiros, sob a forma ABCD Portanto, um endereço IP IPv4 contém 32 bits. A netmask indicates the number of bits which are fixed for all IP addresses within the network. Uma máscara indica o número de bits que são fixas para todos os endereços IP dentro da rede.

Let’s take a network which contains IP addresses between 72.31.32.0 – 72.31.32.255. Vamos ter uma rede que contém os endereços IP entre 72.31.32.0 – 72.31.32.255. In this network the first 24 bits (first 3 8-bit integers) are constant for all IP addresses. Nesta rede os primeiros 24 bits (3 primeiras 8-bit inteiros) são constantes para todos os endereços IP. So the network mask for this network will be denoted as /24 . Portanto, a máscara de rede para esta rede será denominado / 24.

There is a longer notation to describe network masks which is used in Windows and also Linux to specify the netmask of your own computer. Existe já uma notação para descrever a rede de máscaras que é usado no Windows e Linux também especificar a máscara de seu próprio computador. Here instead of writing the number of constant bits in the IP address in decimal format you need to specify it in the IP address format. Aqui, em vez de escrever o número de bits constante no endereço IP no formato decimal é necessário especificar que o endereço IP no formato. So /24 becomes 255.255.255.0. Então / 24 passa a 255.255.255.0. The first three 255 represents the 24 bits of the address. Os três primeiros 255 representa os 24 bits do endereço.

Each network specified by the netmask can contain a maximum number of computers or IP address bearing devices (like routers) as limited by the netmask. Cada rede especificado pela máscara pode conter um número máximo de computadores ou dispositivos que ostentem o endereço IP (como roteadores) como limitada pela máscara. For example a /24 network can contain a maximum of 2 8 -1 (255) computers. Por exemplo, um / 24 de rede pode conter um máximo de 2 8 -1 (255) computadores. One of the address (highest one) is reserved for broadcast address of the network. Um dos endereços (uma mais alta) é reservado para broadcast da rede. The number 8 is derived by subtracting 24 from 32. O número 8 é derivado, subtraindo 24 de 32.

Refer to the table below for network masks in both forms and maximum number of machines for quick reference: Consulte a tabela abaixo para ver as máscaras de rede em ambas as formas eo número máximo de máquinas para referência rápida:
Short Form Short Form Full Form Formulário Completo Maximum number of machines O número máximo de máquinas Comment Comentário
/8 / 8 /255.0.0.0 / 255.0.0.0 16, 777, 215 16, 777, 215 Class A address Classe A morada
/16 / 16 /255.255.0.0 / 255.255.0.0 65, 535 65, 535 Class B address Classe B endereço
/17 / 17 /255.255.128.0 / 255.255.128.0 32, 767 32, 767
/18 / 18 /255.255.192.0 / 255.255.192.0 16, 383 16, 383
/19 / 19 /255.255.224.0 / 255.255.224.0 8, 191 8, 191
/20 / 20 /255.255.240.0 / 255.255.240.0 4, 095 4, 095
/21 / 21 /255.255.248.0 / 255.255.248.0 2, 047 2, 047
/22 / 22 /255.255.252.0 / 255.255.252.0 1, 023 1, 023
/23 / 23 /255.255.254.0 / 255.255.254.0 511
/24 / 24 /255.255.255.0 / 255.255.255.0 255 Class C address Classe C endereço
/25 / 25 /255.255.255.128 / 255.255.255.128 127
/26 / 26 /255.255.255.192 / 255.255.255.192 63
/27 / 27 /255.255.255.224 / 255.255.255.224 31
/28 / 28 /255.255.255.240 / 255.255.255.240 15
/29 / 29 /255.255.255.248 / 255.255.255.248 7
/30 / 30 /255.255.255.252 / 255.255.255.252 3
Fonte: http://blog.taragana.com/index.php/archive/network-masks-netmasks-for-dummies/pt/

Formatação de números em PHP

Atendendo a vários pedidos mostrarei algumas maneiras de formatar
números

Vamos começar pelo básico
Verificando se o número é PAR
ou IMPAR

<?php
function verNumero($numero)

{ // Verificando o resto da divisão por 2

if($numero % 2 == 0)

{ // Se o resto for igual a zero é par

return "PAR";

}

else

{ // Caso não seja zero é impar

return "IMPAR";

}

}

$n = 654646570;

// Chamando a função e passando o parametro

echo verNumero($n);

?>

Trabalhando com potênciação

<?php

function calcula_potencia($base,$expoente){

$nuns = $base;

// For de 1 até o valor do expoente

for($c = 1;$c < $expoente;$c++){

$nuns = $nuns * $base;

}

$verifica = explode("E",$nuns);

if(count($verifica) > 1) {

$nuns = "Expoente muito elevado.";

}

return $nuns ;

}

// Chamando a função passando base 7 e
expoente 2

$potenciacao = calcula_potencia(7,2);

// Imprimindo na tela o resultado

echo $potenciacao;

?>

Verificando se um número é primo

<?php

$num = 1234567891;
if(nPrimo($num))
{
echo "$num é primo.";
}
else
{
echo "$num não é primo.";
}
function nPrimo($numero)
{ //com $numero > 2

$p = 2 ;
while($numero % $p != 0 && $p < sqrt($numero) ) $p+=1 ;

// 1 = Primo / 0 = ñ Primo

return ($numero%$p==0) ? 0 : 1 ;

}

?>

Trabalhando com Fatoração

< ?php

$num = 123456789;

$resposta = fatorarando($num);

echo "Seus fatores: ";

foreach($resposta as $aux) echo "$aux ";

function fatorarando($numero)

{

// $numero > 2

$x=2 ;

while($numero != 1)

{

if($numero % $x == 0)

{ // Vetor recebendo a variavel $x

$vet[] = $x;

$numero = $numero/$x;

}

else

{

$x++;

}

}

return $vet;

}

?>

Formatando moeda

< ?php

// Recebe o parametro $numero

// Existe outra maneira muito mais fácil

// Mas o objetivo e trabalhar seus conhecimentos

function formata($numero)

{

if(strpos($numero,’.’)!=”)

{

$var=explode(‘.’,$numero);

if(strlen($var[0])==4)

{

$parte1=substr($var[0],0,1);

$parte2=substr($var[0],1,3);

if(strlen($var[1])<2)

{

$formatado=$parte1.’.’.$parte2.’,’.$var[1].’0′;

}else

{

$formatado=$parte1.’.’.$parte2.’,’.$var[1];

}

}

elseif(strlen($var[0])==5)

{

$parte1=substr($var[0],0,2);

$parte2=substr($var[0],2,3);

if(strlen($var[1])<2)

{

$formatado=$parte1.’.’.$parte2.’,’.$var[1].’0′;

}

else

{

$formatado=$parte1.’.’.$parte2.’,’.$var[1];

}

}

elseif(strlen($var[0])==6)

{

$parte1=substr($var[0],0,3);

$parte2=substr($var[0],3,3);

if(strlen($var[1])<2)

{

$formatado=$parte1.’.’.$parte2.’,’.$var[1].’0′;

}

else

{

$formatado=$parte1.’.’.$parte2.’,’.$var[1];

}

}

elseif(strlen($var[0])==7)

{

$parte1=substr($var[0],0,1);

$parte2=substr($var[0],1,3);

$parte3=substr($var[0],4,3);

if(strlen($var[1])<2)

{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.$var[1].’0′;

}

else

{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.$var[1];

}

}

elseif(strlen($var[0])==8)

{

$parte1=substr($var[0],0,2);

$parte2=substr($var[0],2,3);

$parte3=substr($var[0],5,3);

if(strlen($var[1])<2){

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.$var[1].’0′;

}else{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.$var[1];

}

}

elseif(strlen($var[0])==9)

{

$parte1=substr($var[0],0,3);

$parte2=substr($var[0],3,3);

$parte3=substr($var[0],6,3);

if(strlen($var[1])<2)

{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.$var[1].’0′;

}

else

{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.$var[1];

}

}

elseif(strlen($var[0])==10)

{

$parte1=substr($var[0],0,1);

$parte2=substr($var[0],1,3);

$parte3=substr($var[0],4,3);

$parte4=substr($var[0],7,3);

if(strlen($var[1])<2)

{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’.’.$parte4.’,’.$var[1].’0′;

}

else

{

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’.’.$parte4.’,’.$var[1];

}

}

else

{

if(strlen($var[1])<2)

{

$formatado=$var[0].’,’.$var[1].’0′;

}

else

{

$formatado=$var[0].’,’.$var[1];

}

}

}

else

{

$var=$numero;

if(strlen($var)==4)

{

$parte1=substr($var,0,1);

$parte2=substr($var,1,3);

$formatado=$parte1.’.’.$parte2.’,’.’00’;

}

elseif(strlen($var)==5)

{

$parte1=substr($var,0,2);

$parte2=substr($var,2,3);

$formatado=$parte1.’.’.$parte2.’,’.’00’;

}

elseif(strlen($var)==6)

{

$parte1=substr($var,0,3);

$parte2=substr($var,3,3);

$formatado=$parte1.’.’.$parte2.’,’.’00’;

}

elseif(strlen($var)==7)

{

$parte1=substr($var,0,1);

$parte2=substr($var,1,3);

$parte3=substr($var,4,3);

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.’00’;

}

elseif(strlen($var)==8)

{

$parte1=substr($var,0,2);

$parte2=substr($var,2,3);

$parte3=substr($var,5,3);

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.’00’;

}

elseif(strlen($var)==9)

{

$parte1=substr($var,0,3);

$parte2=substr($var,3,3);

$parte3=substr($var,6,3);

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’,’.’00’;

}

elseif(strlen($var)==10)

{

$parte1=substr($var,0,1);

$parte2=substr($var,1,3);

$parte3=substr($var,4,3);

$parte4=substr($var,7,3);

$formatado=$parte1.’.’.$parte2.’.’.$parte3.’.’.$parte4.’,’.’00’;

}

else

{

$formatado=$var.’,’.’00’;

}

}

return $formatado." Reais";

}

$num = 1234567890;

echo formata($num);

?>

Formatação para número inteiro

< ?php

// Formatação para numero inteiro

$number = "1234567890000000";

$number=number_format($number,0,’.’,’.’);

echo $number;

// resultado 1.234.567.890.000.000

?>

Formatação para número monetário

< ?php

// Formatação para numero monetário

$number = "1234567890000000";

$number=number_format($number,2,’,’,’.’);

echo $number;

// resultado 1.234.567.890.000.000,00

?>

Formatação para número inteiro com espaçamento
a cada 3 casas

< ?php

// Formatação para numero inteiro com espaçamento
a cada 3 casas

$number = "1234567890000000";

$number=number_format($number,0,’.’,chr(0xA0));

echo $number;

// resultado 1 234 567 890 000 000

?>

Formatação para número em reais com
decimal 99

< ?php

// Formatação para numero em reais com
decimal 99

$number = "2229346.99";

echo "R$" .number_format($number, 2, ‘,’, ‘.’);

// resultado R$2.229.346,99

?>

Formatação para número
em reais com decimal 00

< ?php

// Formatação para número em reais
com decimal 00

$number = "222934699";

echo "R$" .number_format($number, 2, ‘,’, ‘.’);

// resultado R$222.934.699,00

?>

Formatação para número
em reais sem decimal

< ?php

// Formatação para número em reais
sem decimal

$number = "222934699";

echo "R$" .number_format($number, 0, ‘,’, ‘.’);

// resultado R$222.934.699

?>

Formatação para número
colocando virgula a cada 3 casas

<?php

// Colocando virgula a cada 3 casas

// Recebendo o valor por parametro

function formatar($input)

{

if(strlen($input)<=3)

{ return $input; }

$length=substr($input,0,strlen($input)-3);

$formatted_input = formatar($length).",".substr($input,-3);

return $formatted_input;

}

// numero a ser passado por parametro

$num = 1234567;

// imprimindo o valor

echo formatar($num);

// resultado 1,234,567

?>

Formatação para número
colocando ponto a cada 3 casas

< ?php

// Colocando ponto a cada 3 casas

// Recebendo o valor por parametro

function formatando($input)

{

if(strlen($input)<=3)

{ return $input; }

$length=substr($input,0,strlen($input)-3);

$formatted_input = formatando($length).".".substr($input,-3);

return $formatted_input;

}

// numero a ser passado por parametro

$num = 1234567;

// imprimindo o valor

echo formatando($num);

// resultado 1.234.567

?>

Calculo para mascara de rede

Para saber uma rede pega o número 256 e subtrai da rede qual queira saber
feito isso pegue a diferença entre os dois e procure saber qual número que
elevando a dois irá dar essa diferença, e então pegue esse número e subtraia
de 32 e a diferença vai ser a rede.

Exemplo:
Para saber a rede com final 192

192 – 256 = 64

2 elevado a 6 = 64

então 32 – 6 = 26

a rede vai ser 0.0.0.0/26

Para fazer o inverso use a cabeça e se vire, o calculo está ai rsrs…

Recuperando Senha do Mysql

Eu Trabalho com vários servidores MySQL, e há uns dias atrás me deparei com um problema um tanto quanto chato: perda de senha do MySQL. =P

Bom, vamos ao que interessa né? 🙂

Primeiro mate o processo do mysql (não utilize a opção -9):

# killall mysqld

Agora inicie o MySQL em modo seguro (safe mode):

# safe_mysqld –skip-grant-tables &

Ou

# /usr/bin/safe_mysqld –skip-grant-tables &

Agora conecte-se ao servidor MySQL usando o cliente do mysql:

# mysql

Ou

# /usr/bin/mysql

Após conectar-se ao servidor MySQL, acesse o banco MySQL, digitando:

> use mysql;

Agora vamos definir a nova senha para o usuário root do MySQL:

> update user set password = password(‘digite sua nova senha aqui’) where user=’root’ and host=’localhost’;

Ah, e não esqueça de recarregar os privilégios, digitando:

> flush privileges;

Agora você poder sair do cliente do MySQL, digite:

> quit

Agora vamos desligar o modo de segurança do MySQL, execute:

# /etc/init.d/mysqld stop

E enfim, vamos iniciar o MySQL com a nova senha de root:

# /etc/init.d/mysqld start

Bom, é isso, espero que minha dica seja de grande valor para todos.

Abraço e boa sorte =)

Utilizando editor Vi

“vi” é a sigla para “Visual Interface”. A origem desse nome se deve ao seguinte fato: quando o vi foi criado (começo da década de 80), não era comum existirem editores de textos como nos dias de hoje. Naquela época, você digitava um texto mas não podia vê-lo! Isso mesmo! Em 1992, foi criado o vim (Vi IMitator), um clone fiel ao vi, porém com muitas outras funcionaliades, que só foram sendo adicionadas. Algum tempo depois, o vim passou a ser chamado de `Vi IMproved’ (vi melhorado).
O vim é um dos editores de textos mais utilizados no mundo Unix. Em alguns sistemas, existe um link simbólico (/bin/vi) apontando para o /usr/vim. Em outros, o /bin/vi é o executável, só que executa diretamente o vim. Muita gente acha que usa vi, mas na verdade utiliza o vim, e eles têm algumas diferenças. O que você verá abaixo fala sobre o vim.
O vim é um editor de textos muito poderoso, ele pode: abrir vários arquivos ao mesmo tempo, possui sistema de autocorreção, auto-identação, seleção visual, macros, seleção vertical de texto, uso de expressões regulares, sintaxe colorida, e muito mais. Ele não é exclusivo do Unix, ou seja, pode ser executado em outras plataformas, como Amiga, MacOS, Sun, Windows entre outras.
Existe também o gvim, que é o vim em modo gráfico, com todas as funcionalidades do vim em pleno funcionamento, o que muda é apenas o modo gráfico mesmo.
O vim possui vários modos, ou seja, estados em que ele se encontra. São eles: modo de inserção, comandos, linha de comando, visual, busca e reposição. Abordarei os dois principais:
Modo de inserção e de comandos
Para identificar o modo (estado) do vim, basta visualizar o rodapé da tela.
Agora, vamos à prática. Para executar o vim, utilize:
$ vi => Abre o vim vazio, sem nenhum arquivo e exibe a tela de apresentação.
$ vi arquivo => Abre o arquivo de nome “arquivo”.
$ vi arquivo + => Abre o arquivo de nome “arquivo”, com o cursor no final do mesmo.
$ vi arquivo +10 => Abre o arquivo de nome “arquivo”, com o cursor na linha 10.
$ vi arquivo +/Copag => Abre o arquivo de nome “arquivo”, na primeira ocorrência da palavra “Copag”.
Ao executar o vim, ele inicia diretamente em modo de comando. Para comprovar, é só olhar na última linha (rodapé) e não vai haver nada lá. Isso quer dizer que você não conseguirá escrever nada, pode digitar a vontade que só vai ouvir beeps. Para começar a escrever, pressione “i” em seu teclado. O vim entra em modo de inserção, que você comprova (como falado anteriormente) pelo rodapé da tela, onde fica a seguinte marcação:
– – — INSERT —
Suponha que você já digitou o bastante, e quer salvar, por segurança. Pressione a tecla ESC para voltar em modo de comandos. E veja os comandos para salvar/sair:
:w => Salva o arquivo que está sendo editado no momento.
:q => Sai.
:wq => Salva e sai.
😡 => Idem.
ZZ => Idem.
:w! => Salva forçado.
:q! => Sai forçado.
:wq! => Salva e sai forçado.
Então, você editou uma boa quantidade de textos e quer salvar:
:w
Agora, quer voltar a editar o texto:
i
Lembre que utilizando o “i” para inserção, a mesma se inicia inserindo texto antes do cursor. Veja agora outros subcomandos de inserção de texto:
A => Insere o texto no fim da linha onde se encontra o cursor
o => Adiciona uma linha vazia abaixo da linha corrente
O => Adiciona uma linha vazia acima da linha corrente
Ctrl + h => Apaga último caracter à esquerda
Voltando ao modo de comando:
Veja agora subcomandos para movimentação pelo texto:
Ctrl + f => Passa para a tela seguinte.
Ctrl + b => Passa para a tela anterior.
H => Move o cursor para a primeira linha da tela.
M => Move o cursor para o meio da tela.
L => Move o cursor para a última linha da tela.
h => Move o cursor para caracter a esquerda.
j => Move o cursor para linha abaixo.
k => Move o cursor para linha acima.
l => Move o cursor para caracter a direita.
w => Move o cursor para o início da próxima palavra (não ignorando a pontuação).
W => Move o cursor para o início da próxima palavra (ignorando a pontuação).
b => Move o cursor para o início da palavra anterior (não ignorando a pontuação).
B => Move o cursor para o início da palavra anterior (ignorando a pontuação).
0 (zero) => Move o cursor para o início da linha corrente.
^ => Move o cursor para o primeiro caracter não branco da linha.
$ => Move o cursor para o fim da linha corrente.
nG => Move o cursor para a linha de número “n”
(susbstitua n pelo número da linha)..
G => Move o cursor para a última linha do arquivo.
Copiando e colando textos no vim (utilizando o mouse)
Selecione o texto necessário com o botão esquerdo do mouse. Quando você for colar, saiba que o texto será colado a partir de onde se encontra o cursor (esse que aparece, às vezes piscando e às vezes não, quando você está digitando). Para colar, depois de ter selecionado o texto, você pode utilizar uma dessas opções:
1) Pressionando o botão direito do mouse;
2) Pressionando o botão direito + botão esquerdo juntos;
3) Pressionando o botão do meio do mouse (mouse de 3 botões);
Observação: Lembre-se que o vim deve estar no modo de inserção.
Usando o modo visual do vim
Entre no modo visual: v
Agora, utilize as teclas direcionais (setas) do teclado, para selecionar o texto desejado.
Pressione e cole, utilizando a tecla “p” (paste).
Veja agora como apagar um determinado texto:
Utilizando normalmente as teclas Backspace/Delete, ou entrando em modo visual (v) e pressionando a tecla Delete.
Você pode remover até o final de uma palavra, utilizando: dw
Pode também remover até o final de uma frase: d$
Desfazendo uma ação
É claro que você pode desfazer uma ação que você considera errado, ou que errou ao digitar o texto. É só utilizar: u
Se você precisar voltar o texto na tela, utilize as teclas Ctrl + r.
Subcomandos para localização de texto
/palavra => Procura pela palavra ou caracter acima ou abaixo do texto.
?palavra => Move para a ocorrência anterior da palavra (para repetir a busca use “n”).
n => Repete o último comando utilizando / ou ?.
N => Repete o último comando / ou ? ao contrário (baixo para cima).
Ctrl+g => Mostra o nome do arquivo, o número da linha corrente e o total de linhas.
Mais opções para remoção de caracteres
x => Apaga o caracter onde o cursor estiver.
dd => Apaga a linha inteira onde o cursor estive
D => Apaga a linha a partir da posição do cursor até o fim.
J => Une a linha corrente à próxima.
:5dd => Removeas próximas 7 linhas a partir da posição do atual do cursor (qualquer número).
Mais para copiar e colar
:yy => Copia a linha onde o cursor se encontra.
:5yy => Copia as próximas 5 linhas a partir da posição atual do cursor.
:p => Cola o que foi copiado na linha abaixo do cursor atual.
Opções para substituição de textos
rCARACTER => Substitui o caracter onde o cursor se encontra pelo caracter especificado em CARACTER.
RTEXTO => Substitui o texto corrente pelo texto digitado (sobrepõe).
cw => Remove a palavra corrente para substituição.
cc => Remove a linha corrente para substituição.
C => Substitui o restante da linha corrente, esperando o texto logo após o comando.
J => Une a linha corrente à próxima.
:s/velho/novo => Substitui a primeira ocorrência de “velho” por “novo” na linha corrente.
:% s/velho/novo => Substitui em todo o arquivo (%) a primeira ocorrência de “velho” por “novo” em cada linha.
:% s/velho/novo/g => Substitui em todo o arquivo (%), todas (g) as ocorrências de “velho” por “novo”.
:% s/velho/novo/gc => Igual ao anterior, mas pedindo confirmação para cada substituição.
:% s/^String[0-9]//gc => Expressões regulares também funcionam, como no sed.
:% s/./\u&/gc => Converte para maiúsculas (\u) o primeiro caracter (.) de cada linha.
Abreviações
:ab => Mostra todas as abbr.
:abc[lear] => Remove todos.
:iab => Apenas para modo de inserção.
:iabc[lear] => Tira todos de inserção.
:cab => Apenas p/modo de comando ( : ).
:cabc[lear] => Tira todos os modos de comando.
:una vc => Tira ab para vc.
Observação: Pontuação, espaço ou o ENTER, disparam a expansão de uma abreviação. Porém, Ctrl+] também pode ser usado, para expandir sem adicionar caracteres.
Opções para o comando SET
:set
autowrite aw => Salva a cada alteração.
backspace bs => Comportamento backspace (1 ou 2).
errorbell eb => Campainha de erro.
expandtab et => Troca tab por espacos.
fileformat=dos ff => Converte o arquivo para DOS.
hidden hid => Preserva o buffer.
hlsearch hls => Elumina a última procura.
ignorecase ic => Case insensitive na busca.
incsearch is => Ilumina procura enquanto digita.
laststatus=2 => Mostra linha de estado.
lazyredraw lz => Não redesenha em macros.
lines=N => Múmero de linhas na tela.
magic => Usar mágicas na procura de padrões.
number nu => Mostra núm da linha.
report=N => Mostra aviso quando N linhas mudaram (0=sempre).
showcmd => Mostra o comando que se está fazendo.
showmatch sm => Mostra o casamento de {},[],().
smartcase scs => Assume “noic” quando tiver maiúsculas.
textwidth=N => Quebra de linha do texto.
undolevels ul=N => Guarde os N últimos comandos para desfazer (padrão=1000).
vb t_vb= => Retira o “beep” de erro.
Agora invertendo maiúsculas/minúsculas
5~ => Inverte os 5 próximos caracteres.
g~$ => Inverte todos os caracteres até o fim da linha.
seleciona, u => Converte para minúsculas.
seleciona, U => Converte para maiúsculas.
seleciona, ~ => Inverte.
Observação: Onde está escrito “seleciona”, é para fazer utilizando o modo visual (v).
Agora veja como definir coluna de quebra de linha (problema que eu tive quando iniciei no aprendizado do vim):
:set textwidth=N
Se você já estiver num arquivo pronto:
:set wm=5 => O número 5 aqui são as colunas que serão “cortadas”.
gqG => Até o final do arquivo.
Vamos ver agora o que podemos fazer pressionando a tecla “Ctrl”:
É claro que é segurando Ctrl + .
No modo de COMANDO:
A => Incrementa um número (Add)
X => Decrementa um número
S => ScrollLock
L => Redesenha tela
V => Modo visual (Visual Vertical)
G => Status do arquivo
M => Início da próxima linha
E => Linha abaixo sem mover cursor
Y => Linha acima sem mover cursor
N => Próxima linha (Next)
P => Linha anterior (Previous)
F => PageDown (Forward)
B => PageUp (Backyard)
U => PageUp / 2 (Up)
D => PageDown / 2 (Down)
Agora, no modo de INSERÇÃO:
A => Insere o último texto inserido
I => TAB
S => ScrollLock
H => BackSpace
T => 2 tab’s no início da linha (Two Tabs)
V => Anula expansão do próximo caractere
J => Enter – quebra de linha
M => Enter – quebra de linha
L => Redesenha tela
R => Insere conteúdo do registrador [a-z] (Veja abaixo)
K => Insere um dígrafo (Veja abaixo)
N => Procura palavra no texto atual (Next)
P => Procura palavra no texto atual (Previous)
Y => Copia caractere que está acima (Yank)
Veja os caracteres especiais:
ga => Mostra o código da letra sobre o cursor.
:dig => Mostra todos os dígrafos disponíveis (tabela).
Exemplos: Para fazer um º, use Ctrl+K,-,o (“Ctrl”+”K”+”-“+”o”).
Para fazer um ½, use Ctrl+K,1,2 (“Ctrl”+”K”+”1″+”2”).
Trabalhando com arquivos e janelas múltiplas
Você pode abrir múltiplos arquivos, por exemplo:
$ vim arquivo1 arquivo2
E pode alternar entre as janelas. Veja:
:wn => Grava o atual e vai ao próximo.
:wN => Grava o atual e vai ao anterior.
:args => Mostra todos os arquivos atuais.
:qa => Sai de todas as janelas de uma vez.
:all => Abre todos os arquivos em janelas individuais.
Tecla chave das janelas = Crtl+W
j, seta abaixo => Move para janela abaixo.
k, seta acima => Move para janela acima.
o => Apenas esta janela, fecha todas as outras (Only).
+, – => Muda o tamanho da janela.
= => Deixa todas as janelas com tamanhos iguais.
Os registradores
“[a-z] => Use o registrador [a-z] para o próximo delete, cópia ou cola.
:reg => Mostra o conteúdo de todos os registradores.
:reg [a-z] => Mostra o conteúdo do registradores [a-z].
Observação: O [a-z] pode ser: 0-9a-z%#:.-=”
Marcas:
m[a-z] => Marca em [a-z] a posição corrente do cursor.
`[a-z] => Vai até a marca [a-z].
“ => Vai até a posição anterior ao último pulo (alterna).
:marks => Mostra as marcas ativas.
Fazendo gravação de seqüência de comandos
q[a-z] => Inicia a gravação de uma seqüência no registrador [a-z].
q[A-Z] => Inicia a gravação, adicionando no registrador [a-z].
q => Pára a gravação.
@[a-z] => Executa a seqüência do registrador [a-z] (5 vezes? 5@a)
Dica: Pode-se colocar o @[a-z] dentro da própria gravação do q[a-z]! Assim ele é executado recursivamente. Muito útil quando há uma procura de padrões na gravação. faz para todas as ocorrências.
Mapeamentos
:map :r!date => Mapeamento em modo de comando.
:imap :r!date => Mapeamento em modo de inserção.
:cmap r!date => Mapeamento em modo linha de comando.
:vmap :r!date => Mapeamento em modo visual.
Exemplos:
“html: negrito no trecho selecionado
:vmap d`pa # html: negrito no trecho selecionado
“liga/desliga autoIndent
:map ,si :set ai!:echo “autoIndent=”&ai
“mostrar os espaços em branco no fim das linhas
:map / *$^M
Através dos mapeamentos é possível “encurtar” comandos, ou seja, abreviá-los. Conheça as sintaxes:
Comment => Ciano
Constant => Roxo
Identifier => Ciano
PreProc => Azul escuro
Special => Vermelho
Statement => Amarelo
String => Roxo
Type => Verde
Todo => Preto, fundo marrom
Error => Branco, fundo vermelho
Ignore => Preto, fundo preto! – esconde
Utilizando o recurso de expandtab
Mas, o que isso faz? Transforma todos os TABs em espaços. Podemos ativar dentro do próprio vim, utilizando o comando:
:set expandtab
Para desabilitar:
:set noexpandtab
Podemos colocar também no arquivo ~/.vimrc a seguinte linha:
set expandtab
O arquivo ~/.vimrc pode ser usado para muitas configurações, e essa é uma delas. Existe ainda o arquivo ~/.exrc, mas não entraremos em detalhes.
Podemos incluir a saída de um comando no vim, utilizando:
:r!comando
Por exemplo:
:r!rpm -q kernel
Incluiria o seguinte resultado, dentro do seu texto (isso na minha máquina):
kernel-2.4.18-3
Dicas diversas do vim:
:xit => Igual :wq, mas só grava se tiver sido alterado algo no arquivo.
:map N_ARQ ^R=expand(“%:t:r”)^M
Imprime no arquivo o próprio nome do arquivo editado quando N_ARQ é digitado.
Agora, veja como alinhar o texto:
:left
:right
:center
E para fazer uma busca de 2 palavras ao mesmo tempo:
/palavra1\|palavra2
O vim é um editor de textos com centenas de opções, comandos, strings… Enão dá para abordar tudo aqui. Por isso, a melhor maneira de conhecê-lo a fundo é usando-o.
Agora, veja quem colaborou com a criação das dicas, e de onde eu tirei tanta informação:
Revista do Linux (Ed. 04 – Vi, vim e venci – Aurélio);
Página do Aurélio (www.verde666.org);
Dicas-L (expandtab) (www.Dicas-L.unicamp.br);
Dicas enviadas pelo amigo Uziel (uhfn@ig.com.br)
Vários tutoriais recolhidos pela internet.
Agradeço a todos aqueles que contribuiram direta e/ou indiretamente com os tutoriais.

Fazendo backup no OpenLDAP

Só uma pequena dica, principalmente para mim que provavelmente irei esquecer disso daqui a alguns dias! 🙂

Para fazer o backup do OpenLDAP (estou usando o Debian Sarge), uso a ferramenta slapcat, onde usando o backend bdb é possível fazer o backup com o serviço rodando (atenção, em alguns backends pode dar problema rodar o slapcat com o serviço rodando).

O slapcat gera um arquivo no formato LDIF, usado pelo OpenLDAP. Para isso uso a seguinte linha:

# /usr/sbin/slapcat -f /etc/ldap/slapd.conf -b “dc=domínio,dc=com” | bzip2 -9 > slapdb.ldif.bz2

Com isso no cron você pode ter backups diários, semanais ou como você escolher.

Para restaurá-lo uso a ferramenta slapadd, para isso é necessário ter o arquivo /etc/ldap/slapd.conf semelhante ao do servidor original (mesmo domínio, schemas e ACL), os arquivos de schema todos no lugar. Não sei garantir se é necessário o diretório /var/lib/ldap vazio, mas eu limpo antes de importar o backup de qualquer maneira.

Com o serviço desligado (é importante), uso o comando:

# bunzip2 slapdb.ldif.bz2 slapadd -l slapdb.ldif

Como superusuário, inicie o serviço e pronto, o backup está restaurado.