RSS

terça-feira, 27 de abril de 2010

VIM

VIM - Vi Improved

O Vim (Vi Improved) é uma versão mais poderosa e maior em termos de espaço em disco e requisitos de memória do editor de texto vi. Essa versão é mantida como software livre, com algumas cláusulas de Careware inclusas[1], e acompanha a maioria das distribuições Linux. Está disponível também para variantes *NIX, Windows, Amiga, OS/2 e Macintosh. O Vim foi criado por Bram Moolenaar.

Características

  • Seguindo o vi, o Vim é um editor modal no sentido de que as teclas do teclado têm diferentes funções em cada modo de operação. Por exemplo, boa parte dos comandos é digitada no modo Normal, e as operações de inserção de texto são feitas no modo de Inserção.
  • Suporte a expressões regulares em buscas, com várias extensões à sintaxe padrão de expressões regulares
  • Mapeamento de qualquer tecla do teclado
  • Destaque de sintaxe (com suporte a mais de 500 linguagens)
  • Comandos automáticos (a serem executados em certos eventos)
  • Corretor ortográfico ( versão 7.0+ )
  • Funciona tanto no console/terminal quanto em ambiente gráfico (gVim)
  • Absolutamente programável, via interfaces com interpretadores (Perl, Python, Ruby) ou via seu próprio interpretador
  • Vários temas de cores (colorschemes)
  • Totalmente configurável
  • Software livre, licensa GPL

Modo de Inserção e de comandos


Para identificar o modo (estado) do vim, basta visualizar o rodapé da tela. 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.
:x => 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 dos 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ções 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.

Invertendo Maiúsculas e Minuúculas


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 sequê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

Fonte: Infowester

    terça-feira, 6 de abril de 2010

    Samba - Listando máquinas através de redes roteadas

    Samba em 3 redes roteadas (VPN)

    Servidor (smb.conf)
    [global]
      workgroup = INTERNET         // Nome do grupo de trabalho
      server string = kyo                  //  Nome da maquina na rede
      interfaces = 192.168.0.255/255.255.255.0 192.168.1.255/255.255.255.0   192.168.2.255/255.255.255.0       // Interligando 3 redes
      name resolve order = wins bcast
      os level = 64
      preferred master = Yes
      domain master = Yes
      wins support = Yes
      remote announce = 192.168.0.255/INTERNET 192.168.1.255/INTERNET 192.168.2.255/INTERNET
      remote browse sync = 192.168.0.255 192.168.1.255 192.168.2.255  // ips das 3 redes

    Filial 02 (smb.conf)
    [global]
      workgroup = INTERNET
      netbios name = slackware01   
      server string = Samba slackware01
      interfaces = 192.168.2.0/24, eth1, 127.0.0.0/8
      os level = 32
      preferred master = Yes
      domain master = No
      dns proxy = No
      wins server = 192.168.0.1        // IP do servidor Samba (Matriz)

    Filial 03 (smb.conf)
    [global]
      workgroup = INTERNET
      netbios name = slackware03   
      server string = Samba slackware03
      interfaces = 192.168.3.0/24, eth1, 127.0.0.0/8
      os level = 32
      preferred master = Yes
      domain master = No
      dns proxy = No
      wins server = 192.168.0.1        // IP do servidor Samba (Matriz)
      

    Squid - Libera range para acesso ao proxy.

    Libera uma range de IP's da rede interna para acesso ao proxy. (Acesso Total)

    acl faixa_adm src 192.168.0.10-192.168.0.50
    http_access allow faixa_adm all

    Liberado de: 192.168.0.10 à 192.168.0.50
     

    Squid - Libera Acesso Específico para um Usuário

    Proxy Transparente
    Libera Acesso Específico para um Usuário.

    acl sites_juliano url_regex -i "/usr/local/squid/etc/sites_juliano.txt"
    acl juliano src 192.168.1.13
    http_access allow sites_juliano juliano
    http_access deny juliano all


    Proxy Autenticado
    Libera Acesso Específico para um Usuário.

    acl sites_juliano url_regex -i "/usr/local/squid/etc/sites_juliano.txt"
    acl juliano proxy_auth juliano
    http_access allow sites_juliano juliano
    http_access deny juliano all


    sites_juliano.txt: Contem todos os sites que o usuario juliano pode acessar.

    Tanto para proxy transparente como para autenticado primeiro se libera os sites necessários e depois o restante é bloqueado.
     

    Squid - Restringindo o horário de acesso

    Aqui é onde nós citamos outro tipo interessante de controle que nós podemos implementar em um escritório ou em um meio acadêmico: o controle por horário.

    Para nós fazermos isto, nós fazemos o uso da ACL do tipo time.

    acl horariopermitido time MTWHF 08:00-18:00
    http_access deny !horariopermitido

    Interpretando a regra fica assim: Ele vai negar o uso do proxy em todos os horários, COM EXCESSÃO do horário especificado na ACL horariopermitido.

    O "MTWHF" na frente da ACL especifica os dias da semana conforme esta tabela:

      S - Sunday (Domingo)M - Monday (Segunda)T - Tuesday (Terça)W - Wednesday (Quarta)H - Thursday (Quinta)F - Friday (Sexta)A - Saturday (Sábado) 
       

    Squid - Bloqueando extensões e downloads

    Muitas pessoas se infectam com vírus contidos em arquivos de extensões conhecidas por conter programas maliciosos, como o .bat o .pif e o .scr.

    Mas por incrível que pareça, você pode bloquear extensões que os seus usuários baixam no computador por meio de HTTP ou de FTP e de quaisquer outros protocolos que o Squid suporte, fazendo os seguintes passos:

    touch /usr/local/squid/etc/extensoes.txt
    chmod 755 /usr/local/squid/etc/extensoes.txt

    Feito isto, você deve escrever as extensões que você quer bloquear da seguinte maneira no arquivo extensoes.txt.

    \.com$
    \.pif$
    \.bat$
    \.src$
    \.zip$
    \.exe$

    NOTA: O "\" é um eliminador de metacaracteres e serve para cancelar a função do ".". Já o "$" serve para que seja analizado até o final de string.

    Agora nós vamos adicionar a ACL no Squid que vai bloquear as extensões efetivamente, juntamente com o seu http_access:

    acl extensoes urlpath_regex -i "/usr/local/squid/etc/extensoes.txt"
    http_access deny extensoes all
     

    Squid - Liberando acessos (sites)

    Primeiro criamos o arquivo texto com a  lista de sites e damos à ele permissão de leitura:

    touch /usr/local/squid/etc/liberados.txt
    chmod 755 /usr/local/squid/etc/liberados.txt

    Nele insira todas as sites que serão liberados. Adicione um site por linha.

    Após, crie a ACL da seguinte maneira:
    acl liberados url_regex -i "/usr/local/squid/etc/liberados.txt"

    O parâmetro "-i" serve para que o Squid não distingua entre maiúsculas ou minúsculas.

    E libere o acesso com o http_access:
    http_access allow liberados all
      

    IPTables - Criando chains Personalizadas.

    Script que permite acesso total a rede.

    hostsliberados.sh 

    for x in `cat /root/hostsliberados.txt`
       do
            iptables -t nat -A preHostsLiberados -s $x -j ACCEPT
            iptables -t nat -A posHostsLiberados -s $x -j MASQUERADE
       done


    hostsliberados.txt (Ips que serão liberados)
    192.168.0.2
    192.168.0.4
    192.168.0.6

    Regras
    iptables -t nat -N preHostsLiberados
    iptables -t nat -N posHostsLiberados
    /root/hostsliberados.sh

    iptables -t nat -A PREROUTING -j preHostsLiberados
    iptables -t nat -A POSTROUTING -j posHostsLiberados
      

    IPTables - Redirecionar conexões

    Regra redireciona conexões que chegam na porta 8000 do servidor para a maquina 192.168.0.100 na porta 22.

    iptables -t nat -A PREROUTING -p tcp --dport 8000 -j DNAT --to 192.168.0.100:22
     

    IPTables - Criando regras com mac address

    O IPTABLES é uma ferramenta de edição da tabela de filtragem de pacotes, ou seja, com ele você é capaz de analisar o cabeçalho (header) e tomar decisões sobre os destinos destes pacotes.

    O módulo mac serve para conferir com o endereço Ethernet dos pacotes de origem. Somente faz sentido se usado nos chains de PREROUTING (da tabela nat) ou INPUT (da tabela filter). Aceita como argumento a opção --mac-source endereço. O símbolo "!" pode ser usado para especificar uma exceção.

    iptables -A FORWARD -s 192.168.0.2 -m mac --mac-source xx:xx:xx:xx -j DROP

    Bloqueia o acesso da maquina, 192.168.0.2.
      

    segunda-feira, 5 de abril de 2010

    Samba - Compartilhando Arquivos.

    SAMBA

    O SAMBA é um servidor e conjunto de ferramentas que permite que máquinas Linux e Windows se comuniquem entre si, compartilhando serviços (arquivos, diretório, impressão) através do protocolo SMB (Server Message Block)/CIFS (Common Internet File System), equivalentes a implementação NetBEUI no Windows. O SAMBA é uma das soluções em ambiente UNIX capaz de interligar redes heterogênea.

    Abaixo uma configuração do samba onde:

    \\servidor
    -programas (Acesso apenas a leitura)
    -musicas (Acesso Liberado)
    -documentos (Solicitado um usuário e senha)

    [global]
    workgroup = (seu_grupo_de_trabalho)
    netbios name = servidor
    security = user
    smb passwd file = /etc/samba/smbpasswd
    encrypt passwords = yes
    log level = 3
    syslog = 1
    log file = /var/log/samba/log.%m
    os level = 99

    [programas]
    comment = Troca de Arquivos
    path = /home/programas
    read only = yes
    writable = no

    [musicas]
    comment = Musicas
    path = /home/musicas
    read only = no
    writable = yes
    guest ok = yes
    browseable = yes
    create mask = 0777

    [documentos]
    comment = Documentos
    path = /home/documentos
    read only = no
    writable = yes
    guest ok = yes
    browseable = yes
    create mask = 0777
    valid users = user1,user2,user3 #usuários que podem gravar.

    E se preciso verifique as permissões de cada diretório:

    ls -ialh /home/convidados
    ls -ialh /home/documentos

    Se necessário:  chmod a+wrtx /home/documentos