Mostrando postagens com marcador shell. Mostrar todas as postagens
Mostrando postagens com marcador shell. Mostrar todas as postagens

Resumo dos principais comandos do vi/vim


Opções da linha de comando:
-R abre arquivo como somente leitura
-r/-L lista os arquivos swap no diretório atual, bem como em diretórios chave e sai.
+ começa na última linha
+numero começa na linha determinada. Ex: vim +15 arq.txt começa na linha 15 de arq.txt, ao invés da primeira
-o abre os arquivos em "janelas" (a tela fica dividida horizontalmente). Útil para comparar arquivos.
-O abre os arquivos em "janelas verticais" (a tela fica dividida verticalmente).
-X não conecta em um servidor X
Modos de operação:
O vim possui dois modos de operação:

Modo de inserção de texto:
nesse modo, o vim comporta-se como um editor de texto normal, ou seja, cada tecla pressionada exibirá seu valor na tela normalmente. Para entrar no modo de inserção de texto, pressione a tecla INSERT ou a tecla i.

Modo de comandos:
É o modo inicial do Vim. Nesse modo, cada tecla (ou combinação de teclas) possui uma função especial. Para enttrar no modo de comandos, pressione a tecla ESC.

Arquivos SWAP
Quando você abre um arquivo no vim, ele cria um arquivo oculto de swap. As alterações são registradas inicialmente nesse arquivo de swap e efetivadas no arquivo editado a cada operação de salvamento. Caso haja algum problema durante a edição do arquivo (ex: falta de energia), quando o mesmo arquivo é editado novamente, o vim detecta a presença do arquivo swap e oferece algumas opções:

Operações com arquivos:
Observação: sempre que há a troca do arquivo atual (quando há mais de uma arquivo aberto), quando um arquivo é aberto para edição ou quando o programa for encerrado, é necessário salvar o arquivo, caso o mesmo tenha sofrido alterações. Caso não se deseje salvar as alterações, deve-se acrescentar uma exclamação "!" - para forçar o fechamento/troca do arquivo, desprezando as alterações no arquivo atual.

:e arquivo
abre um arquivo para edição.

:r arquivo
insere o conteúdo de um arquivo na posição atual do cursor

:w
grava o arquivo atual e continua o trabalho.

:w arquivoNovo
salva o arquivo atual com outro nome (arquivNovo) e continua trabalhando no mesmo arquivo (ao contrário de outros editores de texto que passariam a trabalhar com o arquivo recém criado - no caso do exemplo, arquivoNovo).

:q 
sai do programa.

:q!
sai do programa descartando as alterações.

:n 
passa para o proximo arquivo aberto.

:prev
passa para o arquivo anterior

:first 
vai para o primeiro arquivo

:last
vai para o ultimo arquivo

Observação: você pode "juntar" alguns comandos, de modo a realizar duas operações juntas. Por exemplo, para gravar o arquivo e sair do programa, ao invés de executar :w e :q em separado, você pode fazer :wq. Da mesma forma, :wn grava o arquivo atual e vai para o próximo, :wprev grava o arquivo atual e vai para o anterior e assim sucessivamente. Por último, :x é um apelido para :wq (salva e sai).

Comandos para navegação dentro do Texto:

h
um caracter para a esquerda

l
um caracter para a direita


j
uma linha abaixo


k
uma linha acima

método para memorizar: a tecla J lembra uma seta pra baixo, e tem exatamente esta função. A tecla ao seu lado (K) é a seta para cima. A tecla à esquerda das duas (H) faz a seta para a esquerda. E a tecla à direita do conjunto (L) é a seta para a direita. Simples, não?

gg
:1
primeira linha

:numero
vai para a linha desejada. Por exemplo, :50 vai para a 50ª linha.

numero+G
vai para a linha desejada. Por exemplo, 10G vai para a 10ª linha.

G
vai para a última linha. Obs: G maiúsculo.

^
inicio da linha (é preciso digitar um espaço depois do símbolo)

$
final da linha.

Comandos de busca:
f+caracter
avança para a direita até a primeira ocorrência do caracter

F+caracter
retrocede para a esquerda até a primeira ocorrência do caracter

/
pesquisa por string/regex.

?
pesquisa por string/regex. Pesquisa no sentido inverso (para cima).

*
pesquisa pela palavra sobre o cursor.

#
pesquisa pela palavra sobre o cursor. pesquisa no sentido inverso (para cima).

Em quaisquer uma das pesquisas, pressione n para localizar a proxima ocorrência. Pressione N para pesquisar no sentido inverso (ocorrencia anterior - para cima).

Comandos de substituição:
:[range]s/texto\ a\ procurar/[texto a substituir]/[gc]

Onde:
[range] (opcional): range de linhas onde realizar a busca/substituição. Se não informado, faz apenas na linha atual. Caracteres especiais em range:
% - todas as linhas (arquivo todo)
$ - até o fim do arquivo

texto\ a\ procurar: texto que será buscado. Caracteres especiais (que têem significado devem ser protegidos (ou escapados) com "\" (sem aspas), como no exemplo. Para pesquisar por uma "\" utilize "\\".
[texto a substituir] (opcional): texto que será trocado pelo que for encontrado. Se não for informado, o texto encontrado é removido e nada é posto em seu lugar.
g: substitui todas as ocorrencias do texto encontrado. Se não estiver presente, apenas a primeira ocorrência de cada linha é substituida.
c: pede confirmação antes de fazer a substituição


Exemplos de ranges:
:%s/brasil/Brasil/        (arquivo todo)
:50,60s/brasil/Brasil/   (da linha 50 até a 60)
:20,$s/brasil/Brasil/      (da linha 20 até o fim do arquivo)



Mais exemplos:
:%s/brasil/Brasil/gc

Comandos para alteração de caracteres:
~
inverte a caixa do caracter (converte maiusculas em minusculas e vice-versa)

x
d+espaço
exclui o caracter sobre o cursor

r+caracter
troca o caracter sobre o cursor pelo digitado.

Comandos para operações com Buffer (área de transferência)
D
dd
recorta toda a linha e coloca no buffer

Y
yy
copia toda a linha para o buffer, sem removê-la do local atual.

p
cola o conteúdo do buffer na posição atual do cursor.

P
cola o conteúdo do buffer na linha acima da posição atual do cursor.

Repetição de comandos:
numero+comando
executa o comando um certo numero de vezes. Exemplos:

10x
exclui 10 caracteres (o que está sob o cursor mais nove à direita)

3yy
copia 3 linhas para o buffer (a linha atual mais duas abaixo)

5l
"anda" 3 caracteres para a direita

Mistureba (misturando comandos):
dG
recorta tudo entre a posição atual do cursor e o fim do arquivo. Mistura de d (recortar) com G (ir para o final do arquivo)

dgg
recorta tudo entre a posição atual do cursor e o começo do arquivo. Mistura de d (recortar) com gg (ir para o começo do arquivo)

:r !cmd
executa o comando cmd e insere sua saída no texto.

:wq
salva e sai

:wn
salva e avança para o próximo arquivo

:wlast
salva e avança para o último arquivo

Modos Visuais:
Permitem selecionar trechos do texto, para definir o local que será afetado pelo próximo comando (uma busca e substituição ou copiar/recortar, por exemplo).
Existem dois tipos:
Visual (ativado com a tecla v): permite selecionar trechos de linhas, linhas inteiras ou uma combinação disso (uma linha interira e um pedaço de outra abaixo ou acima, por exemplo). Após selecionar, é possível recortar (com d), copiar (com y) ou substituir por outro conteúdo (com p).
Visual Block (ativado com ctrl+v): similar ao modo visual, porém permite selecionar blocos de texto. Por exemplo, é possível selecionar apenas a primeira coluna de cada linha (útil para descomentar várias linhas de uma vez em arquivos de configuração).

Opções úteis
Obs: a maioria dessas opções pode ser colocada diretamente no arquivo de configuração do vim, /etc/vim/vimrc

:set ai
:set noai
Liga/desliga autoidentação. Normalmente é desejavel deixar a identação ligada, principalmente quando se está escrevendo programas/scripts (deixa o texto mais organizado). Porém, em algumas situações pode atrapalhar. Por exemplo, quando se cola texto no PuTTY (a partir do Windows) e essa opção está ativada, o texto fica com um aspecto de "escada" (veja imagem abaixo).

:set bg=dark
:set bg=light
Informa ao vim qual se a cor de fundo da tela é clara ou escura, para que ele possa utilizar um esquema de cores agradável. Normalmente conexões via console e SSH tem fundo escuro, enquanto que em emuladores de console dos ambientes gráficos (kterm no KDE, gterm no Gnome, etc) costumam ter o fundo claro.

:set showcmd
:set noshowcmd
Faz com que os comandos digitados, bem como os modificadores numéricos apareçam, à esquerda da informação de posição do cursor.

:set number
:set nonumber
Exibe/oculta o numero de cada linha

:help assunto
Mostra o help do vim sobre o assunto/comando informado. Será aberta uma nova "janela" (a tela ficará dividida horizontalmente em duas). Para alternar entre as janelas, pressione CTRL+W CTRL+W (duas vezes). Assim, você pode alternar entre a navegação no texto do help e no seu próprio texto. Para sair do help, pressione :q. Você voltará à edição do seu arquivo.

:! cmd
executa o comando cmd no shell dentro do vim, e mostra o resultado na tela (mas não altera o arquivo). Útil para compilar código/realizar testes durante a programação sem precisar sair do editor. Ou para trocar a permissão do arquivo sendo editado, para permitir salvar as alterações.
Ex:
:! gcc -o main main.c
:!php arquivo.php
:chmod u+w arquivo.txt

Livro: Curso de Shell Script - Julio C. Neves

Dica Rápida:

A Revista Linux Magazine liberou gratuitamente as onze partes do curso de shell script "Papo de Botequim", do Julio Cezar Neves, autor de um excelente livro sobre o assunto, "Programação Shell Linux". O material está em formato PDF e não é necessário cadastro para realiza o download. O endereço é esse:

http://www.linuxnewmedia.com.br/lm/noticia/baixe_o_curso_de_shell_script_do_julio_cezar_neves

Para ver outros artigos sobre programação na Linux Magazine, acesse o seguinte endereço (alguns artigos precisam ser comprados).

http://www.linuxmagazine.com.br/lm/categories/19

Para acessar o site do autor, http://wiki.softwarelivre.org/bin/view/TWikiBar/WebHome (e se você resolver comprar/alugar a casa dele à venda em Arraial do Cabo, não se esqueça de me convidar para um fim de semana !!!)

Como habilitar alta resolução no console (framebuffer)

Introdução:
Por razões históricas (herança dos antigos terminais burros), o console do Linux possui a resolução padrão de  80 colunas X 24 linhas. No entanto é possível aumentar a resolução do terminal para resoluções maiores, como 1024x768 (ou maoires ainda). Isso facilita na hora de utilizar algumas ferramentas de rede, como iftop, iptraf ou o próprio iptables, além de permitir o algumas tarefas que normalmente só seriam executadas em modo gráfico, como visualizar imagens com o cacaview (pacote Debian: caca-utils), navegar na intenet com o links2 (utilizar a opção "-g") ou ainda ver filmes com o mplayer, tudo isso em modo texto!



Itens necessários:
  • Uma placa de vídeo compatível (atualmente todas são, mesmo as on-board).
  • Um monitor que suporte a resolução desejada.
  • Suporte habilitado no kernel (normalmente já vem habilitado na maioria das distribuições)
Configurando:

1) Reinicie seu computador. Na tela de seleção de kernel para boot, selecione o kernel desejado e pressione a tecla "E"


2) Agora você está em modo de edição. Selecione a linha que inicia com a palavra "kernel" e pressione a tecla "E" novamente.

3) Você está editando a linha de comando do kernel. Acrescente ao final da linha a opção vga=xxx, onde xxx é o valor desejado obtido na tabela (e já convertido para decimal). Após acabar de inserir o texto, pressione Enter.


4) Retornamos à tela anterior, já com a alteração efetivada. Se precisar alterar alguma coisa, retorne ao passo 2. Para efetuar boot com essa configuração, pressione "B".


Caso a imagem "suma" e apareça uma mensagem semelhante a essa abaixo (a mensagem específica vai depender do modelo e fabricante do seu monitor), você selecionou um modo de vídeo não suportado pelo seu monitor. Reinicie o computador e tente novamente com uma resolução menor.



Após encontrar uma freqüência que efetivamente funcione no seu hardware, fixe a configuração no seu gerenciador de boot. No caso do grub, a configuração fica no arquivo /boot/grub/menu.lst

Referências
http://www.mjmwired.net/kernel/Documentation/fb/vesafb.txt (linha 55. Observe que esta tabela está em hexadecimal, e é necessário converter seus valores para decimal)
http://en.wikipedia.org/wiki/VESA_BIOS_Extensions#Linux_video_mode_numbers

Entendendo a saída do comando ifconfig

Vamos analisar a saída do comando ifconfig abaixo:


# ifconfig
eth0      Link encap 10Mbps Ethernet  HWaddr 00:00:C0:90:B3:42
          inet addr 172.16.1.2 Bcast 172.16.1.255 Mask 255.255.255.0
          UP BROADCAST RUNNING  MTU 1500  Metric 0
          RX packets 3136 errors 217 dropped 7 overrun 26
          TX packets 1752 errors 25 dropped 0 overrun 0

ppp0      Link encap:Point-to-Point Protocol
          inet addr:187.15.72.157  P-t-P:200.200.200.200  Mask:255.255.255.255
          UP POINTOPOINT RUNNING MULTICAST  MTU:1400  Metric:1
          RX packets:1504239 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1155539 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:1905349557 (1.7 GiB)  TX bytes:81721536 (77.9 MiB)

imq0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          UP RUNNING NOARP  MTU:1500  Metric:1
          RX packets:2647959 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2647730 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:30
          RX bytes:1987468198 (1.8 GiB)  TX bytes:1987198741 (1.8 GiB)
Descrição dos campos:
Link encap: Tipo de conexão do link (ethernet, ponto-a-ponto, etc)
HWAddr: Endereço de hardware (MAC Address) da interface. Nem todas as interfaces possuem. Nesse caso, pode aparecer como 00-00-00- ... ou simplesmente não aparecer.
UP BROADCAST RUNNING  MTU 1500  Metric 0: Indica as características da interface de rede:
  • UP/RUNNING: indica que a inteface está ativa.
  • BROADCAST/MULTICAST: indica que a interface suporta esta modalidade de tráfego (broadcast / unicast)
  • MTU: Quantidade máxima de bytes que a interface pode transmitir/receber a cada operação.
  • Metric: Não é utilizado.
  • NOARP: Indica que a interface não suporta operações com endereços de hardware (MAC)
inet addr: endereço IPv4 da interface (não é orbigatório).
inet6 addr: endereço IPv6 da interface (não é orbigatório).
P-t-P: Indica o endereço da "outra ponta" da conexão (apenas para conexões ponto-a-ponto).
Bcast: Endereço de Broadcast da interface (apenas se houver um endereço IPv4 configurado).
Mask: Máscara de rede  da interface (apenas se houver um endereço IPv4 configurado).
RX e TX: Contabiliza os pacotes recebidos (RX) e enviados (TX), bem como os descartados por motivos diversos na transmissão e recepção.
errors: pacotes que não puderam ser transmitidos/recebidos devido a erros (nos próprios pacotes).
dropped: normalmente indica erros de configuração/comunicação. Ex: um equpamento está operando em half-duplex, enquanto o outro está em full-duplex.
overruns: a interface possui duas filas (ou buffers), uma de transmisão e outra de recepção, com um determinado tamanho. Quando essa fila "enche", os pacotes excedentes são descartados como overruns. Em suma: a interface de rede está tentando receber/transmitir mais pacotes/segundo do que o sistema como um todo (interfaces de rede, processador, etc) suporta.
frame: quadros (frames) mal formados.
carrier: erro no link físico. Má fiação, cabos de rede e energia juntos, etc.
collisions: Colisões de rede. Comuns em ambientes com HUBS. Não deveriam ocorrer em ambientes com switches. Se for o caso, cheque a configuração dos equipamentos no tocante ao modo DUPLEX (HALF/FULL) utilizado.
txqueuelen: tamanho da fila (buffer) de transmissão. Normalmente não é necessário alterar o valor padrão.
RX bytes / TX bytes: quantidade de bytes recebidos / transmitidos. (medido em Mebibytes/Gibibytes - http://en.wikipedia.org/wiki/Mebibyte)

Colorindo o modo texto: vim

Colorindo o modo texto: vim 
Uma das funcionalidades que eu mais gosto no editor de texto vim é o syntax highlighting: cada palavra ou trecho do arquivo fica colorido com um padrão de acordo com o significado dele no contexto do arquivo. Por exemplo, em um arquivo de configuração, o nome das opções (se estiver correto) fica em verde, o valor da opção fica amarelo. Comentários ficam em azul claro e palavras não reconhecidas ficam na cor "tradicional" (branco). O programa também destaca os parênteses/aspas/colchetes, diminuindo a chance de você abrir um bloco de texto e esquecer de fechar, ou se perder em quando há varios blocos aninhados (programadores sabem do que eu estou falando ;-) ). Isso facilita o trabalho e diminui a chance de erros de sintaxe nos arquivos. Uma verdadeira mão na roda para administradores e programadores.

Habilitando
Para habilitar o suporte a cores, edite o arquivo de configuração do vim (/etc/vim/vimrc). Procure pelas linhas
"syntax on
"set background=dark
e apague as aspas ( " ) no começo de cada linha (no arquivo de configuração do vim, aspas são o sinal de comentários). Salve o arquivo e agora os arquivos dos mais diversos formatos estarão coloridos, seguindo um padrão lógico de cores e facilitando a edição.

Veja aqui dois exemplos. O mesmo trecho de um arquivo, primeiramente sem o syntax highlight habilitado e depois o mesmo trecho com as cores habilitadas.




Expandindo:
O vim já vem com uma grande quantidade de arquivos de definição de sintaxe (você pode ver todos eles no diretório  /usr/share/vim/vim71/syntax/ ). Mesmo assim, caso você necessite de algum modelo que não esteja lá, existe no próprio site do vim um repositório de arquivos de sintaxe, no endereço http://www.vim.org/scripts/ . Obviamente, você também pode desenvolver seu próprio modelo. Nesse caso, envie-o para o site para que outros também possam se beneficiar.

Obs:
Ao tentar editar um arquivo você pode receber a seguinte mensagem:
Error detected while processing /usr/share/vim/vimrc:
line   20:
E319: Sorry, the command is not available in this version: syntax on
Press ENTER or type command to continue
Em seguida o vim abre, mas o arquivo não está colorido. A razão disso é que o Debian por padrão vem com o editor vim-tiny instalado. O editor vim-tiny é uma versão reduzida do vim (tiny significa muito pequeno, minúsculo), que vem com algumas características a menos, incluindo aí o suporte a cores. Para ter suporte a cores, instale o pacote vim (apt-get install vim), que fornece o vim completo.

Colorindo o modo texto: grep

Colorindo o modo texto: grep
Quando estamos utilizando o grep, as vezes fica dificil distinguir em uma listagem muito grande qual foi o trecho de determinada linha que "bateu" com a expressão utilizada do grep. Para resolver isso, utilize a opção --color do grep. Veja as seguintes imagens: ambas são o mesmo comando "squid -v | grep diskd" (que verifica se o squid foi compilado com suporte à diskd):

Sem a opção --color:

Com a opção --color:


Para habilitar de forma permanente o comando existem duas possibilidades, ambas são configuradas no arquivo ~/.bashrc (inclua apenas UMA das linhas abaixo no arquivo):

1) alias grep='grep --color'
2) export GREP_OPTIONS="--color"

Para trocar a cor da letra (o padrão é vermelho em negrito) , utilize o comando export GREP_COLOR="NN;XX" (para que a alteração seja permanente, insira essa linha no arquivo .bashrc no diretório home do usuário. Os números seguem a mesma tabela de cores do comando dircolors, conforme abaixo:

Atributos:
00=nenhum 01=negrito 04=sublinhado 05=piscar 07=invertido (inverte a cor de fundo com a cor da letra) 08=oculto (?)

Cor do Texto:
30=preto 31=vermelho 32=verde 33=amarelo 34=azul 35=magenta 36=ciano 37=branco

Cor de Fundo:
40=preto 41=vermelho 42=verde 43=amarelo 44=azul 45=magenta 46=ciano 47=branco

Por exemplo, o comando export GREP_COLOR="32" configuraria a cor verde. Já o comando export GREP_COLOR="04;37;44" criaria uma letra branca sublinhada e com fundo azul.

Colorindo o modo Texto: ls

Habilitando as cores:
Para habilitar o comando ls com cores, basta adicionar a opção --color=auto. Para não ter de ficar digitando-se isso a toda hora, normalmente criamos um alias com esse comando no arquivo de configuração do bash, o .bashrc. Descomente (ou crie) as seguintes linhas no arquivo ~/.bashrc:
 export LS_OPTIONS='--color=auto'
 eval "`dircolors`"
Editando as cores
O comando ls já vem com um padrão de cores pré-definido, porém nada impede que você crie seu próprio padrão, alterando as cores ou acrescentando novas extensões. Para editar as cores, execute:
dircolors --print-database > cores.txt
Será gerado o arquivo cores.txt, que contém as definições padrão de cores do sistema. Edite esse arquivo em seu editor favorito.

Notas sobre o formato do arquivo:
  • Itens em maiúsculas representam tipos especiais de arquivos (FIFO, SOCK, DIR, LINK, etc).
  • Também podemos alterar as cores atribuídas às extensões, colocando as extensões no formato ".xxx"
  • Os números significam cor da letra, cor de fundo e efeitos visuais, conforme a tabela abaixo:
Atributos:
00=nenhum 01=negrito 04=sublinhado 05=piscar 07=invertido (inverte a cor de fundo com a cor da letra) 08=oculto

Cor do Texto:
30=preto 31=vermelho 32=verde 33=amarelo 34=azul 35=magenta 36=ciano 37=branco

Cor de Fundo:
40=preto 41=vermelho 42=verde 43=amarelo 44=azul 45=magenta 46=ciano 47=branco

Após deixar o arquivo conforme desejado, edite o arquivo ~/.bashrc e altere a linha
eval "`dircolors`"
para
eval "`dircolors cores.txt`"
Por fim, é necessário processar novamente o arquivo ~/.bashrc. Isso pode ser feito de duas formas: efetuando logout e login novamente ou com o comando
source ~/.bashrc .

Dica: comando service do Cent OS Red Hat no Debian

Dica rápida:

Se você é usuário de Red Hat, Cent OS, Fedora ou algum outro da família RH e precisa utilizar o Debian, talvez esteja sentindo falta do comando service, utilizado para iniciar/parar/reiniciar serviços. O Debian tem um programa com função semelhante, chamado invoke-rc.d. No entanto, se a saudade do comando service for demais, experimente instalar o pacote sysvconfig, que contém um editor de runlevel e um script de nome service, que faz exatamente o mesmo que seu homônimo no Red Hat.

Páginas de Manual Online

Acrescentando à listagem de documentação online, vale a pena citar o site http://linux.die.net/man/, que permite a visualização online de páginas de manual. O site contém, além das páginas de comandos como o ls e find, páginas de comandos menos comuns, como o mplayer e sar.

Login automático em FTP com netrc

Para efetuar login (autenticação) em servidores FTP de forma não-interativa (automática) utilizando-se o comando ftp podemos utiilizar arquivos de configuração .netrc. O formato desses arquivos é muito simples:

machine <Servidor FTP>
login <usuario>
password <senha>


Onde:
Servidor FTP: endereço (hostname ou o IP) do servidor a ser acessado.
login: nome de usuário no servidor FTP.
password: senha do usuário servidor FTP.

Esses dados deverão ser inseridos em um arquivo com o nome .netrc, dentro do diretório HOME do usuário que vai executar o comando ftp. Por exemplo, para o usuário root, o nome do arquivo seria /root/.netrc. É necessário ainda acertar as permissões do arquivo, que obrigatoriamente devem ser setadas para 600 (permissão de escrita e leitura apenas para o usuário dono do arquivo), caso contrário o comando ftp simplesmente irá ignorar o arquivo. Essa medida visa a segurança, já que a senha do usuário FTP fica exposta dentro do arquivo. Para alterar a permissão do arquivo, execute

chmod 600 .netrc

Exibindo a hora do log do Squid de forma legível

Introdução
Quando está utilizando o seu formato padrão, o log do squid armazena a data e hora do acesso no formato de timestamp chamado Unix Time, que é a quantidade de segundos passados após a data 01/01/1970. Esse formato é útil, pois facilita cálculos com datas. Por exemplo: para calcular a distancia entre duas datas, basta converter ambas para o timestamp, subtrair a menor da maior e reconverter o resultado para minutos/horas/dias/etc. O problema é que o formato não facilita a visualização de dados no dia-a-dia. Existem vários comandos possíveis para realizar a conversão para um formato de leitura mais agradável. Vou colocar aqui a minha preferida, que envolve o poderosíssimo AWK.

Criando o script
Crie um arquivo com um nome sugestivo (por exemplo timestamp.sh) com o conteúdo abaixo e o salve em algum diretório que conste na variável de ambiente PATH (/usr/local/bin, por exemplo):

#!/bin/bash
awk '{$1=strftime("%F %T",$1);print $0}' $1



As letras entre aspas dentro dos parênteses controlam o formato de saída. Consulte a página de manual do comando date para checar outras opções de formatos. Por exemplo, %F exibe a data no formatoYYYY-MM-DD, e %T exibe a hora no formato 24 horas hh:mm:ss.

Utilização
Existem duas formas de se utilizar o script: chamando o arquivo de log diretamente (timestamp.sh access.log) ou através de um pipe (cat access.log | timestamp.sh).

Observação
As alterações são realizadas apenas "na tela", ou seja, o conteúdo do arquivo continua inalterado, com a data armazenada no formato timestamp. na verdade, isso é desejável, pois caso não impede o processamento do log do squid por programas de relatórios (como o sarg e o sawmill). Caso você necessite de um arquivo com as datas em formato "legível", basta redirecionar a saída da tela com os redirecionadores > (sobrescrever) ou >> (concatenar), conforme a necessidade.

Gerando arquivos de log com shell script

Introdução:
Shell Scripts são uma verdadeira mão na roda na administração de servidores Linux. Porém um assunto que é um tanto negligenciado neste aspecto é quanto ao registro da informação sobre o que foi feito durante a execução do script, até porque na maioria das vezes o script é executado via cron, e como você não pode ver as informações dele na tela, um arquivo ou sistema de log torna-se essencial.

Modo 1: Log via arquivo próprio
O modo mais simples de realizar o log é através de um arquivo próprio, exclusivo para sua aplicação. Existem diversas formas de se fazer isso, a que mostro a seguir é a que costumo utilizar. Considere o pequeno shell script (em bash) abaixo:



#!/bin/bash
WORKDIR="/root/my_script"
SESSION_LOG=${WORKDIR}/$$.log
LOGFILE=${WORKDIR}/my_script.log
DEST_DIR=${WORKDIR}/backups
DATE=$(date +"%Y-%m-%d_%H:%M:%S")

function LOG(){
DATA=$(date +"%Y-%m-%d %H:%M:%S")
echo ${DATA} $1 | tee -a ${SESSION_LOG}
}

LOG "Iniciando ..."
LOG "Trocando de diretorio"
cd /etc
LOG "Criando o arquivo compactado etc-${DATE}.tar.bz2 em /tmp"
tar -cvjf /tmp/etc-${DATE}.tar.bz2
LOG "Movendo o arquivo etc-${DATE}.tar.bz2 para o diretorio de destino ${DEST_DIR}"
mv /tmp/etc-${DATE}.tar.bz2 ${DEST_DIR}
LOG "Finalizado"

#Salva o log da sessão no log geral
cat  ${SESSION_LOG} >>  ${LOGFILE}

#Descomente para enviar o log da sessão para o usuário root
#mail -s "Log do backup de `date +%F`" root < ${SESSION_LOG}

#remove o log da sessão
rm -f  ${SESSION_LOG}


Nesse simples script, foi criada uma função de nome LOG que deve ser utilizada no formato LOG "Mensagem". Quando chamada, a função LOG imprime a mensagem passada na tela e também em um arquivo de log, definido na variável ${SESSION_LOG}. A vantagem de se utilizar uma função (ao invés de repetir o mesmo código por todo o script) é que, se for necessário alterar algo no código, a alteração é realizada apenas uma vez. Por exemplo, conferindo a página de manual do comando date, verifiquei que a opção %F é equivalente à %Y-%m-%d utilizada e resolvi trocá-la, para otimizar o código. Se não utilizasse uma função, teria de editar cinco linhas. Utilizando a função, basta editar apenas uma linha, independente de quantas vezes a função foi chamada. O script faz um backup do diretório /etc em um arquivo cujo nome é etc-data_hora.tar.bz2 e move esse arquivo para o diretório configurado na variável ${DEST_DIR}, sempre informando (no log de sessão e na tela) o que está sendo realizado. Por fim o script envia o log da sessão para o usuário root via email, concatena o log da sessão no log geral e apaga o arquivo de log da sessão. Esse script contém algumas coisas legais para quem está estudando shell. Um dos pontos fracos dele é que não é feito tratamento de erros. Erros devem ser sempre checados (e logados)

Modo 2: Log via syslog
existe o comando logger, que permite o envio de mensagens de log diretamente pelo protocolo SYSLOG, que gerencia os logs do sistema. Nesse caso, suas mensagens cairiam em um dos arquivos de log do sistema, como o /var/log/messages ou o /var/log/syslog. Fazendo algumas configurações no arquivo de configuração do servidor syslog (normalmente em /etc/syslog.conf). 
Desejando alterar o script acima para fazer log via syslog, basta alterar a função LOG, deixando-a desse jeito:

function LOG(){
DATA=$(date +"%Y-%m-%d %H:%M:%S")
echo ${DATA} $1 | tee -a ${SESSION_LOG}
logger $1
}

Também é necessário comentar a linha "cat  ${SESSION_LOG} >>  ${LOGFILE}", pois o arquivo de log será um dos arquivos de sistema, gerenciados pelo daemon do syslog.

Tutorial: Como recuperar a senha de root Linux

Caso você tenha perdido a senha de root de seu equipamento Linux, siga esses passos para recuperá-la trocar a senha. Esses passos são válidos para todas as distribuições Linux (Debian, Ubuntu, Mandriva, Red Hat, etc)

Obs ¹: essa dica leva em consideração que você está utilizando o GRUB como gerenciador de boot. Os passos para o LILO são basicamente os mesmos, exceto pela parte referente à edição da linha de comando do Kernel.

Obs ²: Durante todo o processo, seu teclado estará levemente desconfigurado. Por isso, onde for necessário utilizar a tecla barra ( / ) tenha em mente que ela (provavelmente) estará no lugar da tecla dois-pontos ( ; ). Se preferir, utilize a barra do teclado numérico, junto da tecla NumLock.

1) Reinicie o computador. Quando aparecer o menu do GRUB interrompa o boot, pressionando uma das setas do teclado.

2) Selecione a entrada normalmente utilizada e pressione a tecla "e". Entraremos no modo de edição desta entrada.

3) Selecione a linha que começa com a palavra kernel e pressione a tecla "e" novamente. Vamos agora entrar no modo de edição desta linha específica.



4) Insira o seguinte texto no final da linha: init=/bin/bash (lembre-se do que foi dito sobre o teclado). Ao terminar, deverá estar semelhante a imagem abaixo. Pressione Enter para voltar à tela anterior.


5) Pressione "b" para iniciar o boot. O processo será bem rápido, e o sistema estará com todos os serviços
 parados (inclusive a rede) e com os sistemas de arquivos montados como comente leitura.


6) Aqui cabe uma curiosidade: o comando mount exibe o sistema de arquivos raiz montado com permissão de escrita, porém ao tentar trocar a senha do root (ou efetuar qualquer outra operação de escrita) a operação irá falhar (note as mensagens de erro passwd: Authentication token lock busy e passwd: password unchanged).



Consultando o arquivo /proc/mounts, vemos que o sistema de arquivos raiz (o / ) na verdade está montado como somente leitura.

A razão disso é que o arquivo que contém o status das partições montadas fica em /etc/mtab. Quando a partição é montada como somente leitura esse arquivo fica impossibilitado de ser alterado, ficando com uma informação incorreta. De qualquer forma, para remontar a partição em modo de escrita, basta executar o seguinte comando: mount / -o remount,rw (novamente, não se esqueça da barra ...).


Após isso o sistema de arquivos raiz estará montado com permissão de escrita, e podemos trocar a senha de root normalmente,  com o comando "passwd root". Digite e confirme a nova senha. Veja que o comando passwd agora exibe uma mensagem de sucesso na operação (password updated sucesssfully)


07) Por fim, antes de reiniciar o computador, é necessário sincronizar os dados no HD com o comando sync. A razão disso é que o Kernel (por razões de performance) não grava os dados no HD imediatamente. Ao invés disso, ele "atrasa" um pouco a gravação, colocando os dados em um buffer de memória,  na esperança de que apareçam mais dados e tudo possa ser armazenado em uma única operação de escrita. O comando sync força a escrita imediata dos dados do buffer no HD (normalmente antes de um restart ou desligamento isso é feito automaticamente pelo processo init, mas como o boot foi executado com o bash no lugar do init, é necessário fazer isso manualmente). Após o comando sync, basta reiniciar o computador com Ctrl + Alt + Del ou com o comando shutdown -nh now.

Dica: como descobrir via shell com que IP a máquina está saindo para a internet?

Algumas vezes uma máquina está conectada a internet indiretamente, através de um firewall ou de um proxy com múltiplos links de internet. Os comandos abaixo permitem descobrir qual IP a máquina está utilizando na internet. Os três meios abaixo utilizam programas simples, que estão disponíveis na maioria das distribuições (e até mesmo em algumas instalações Unix) e que normalmente são instalados por padrão.

Utilizando o wget (todo o comando deve ficar em uma única linha):
echo $(wget -qO- http://www.whatismyip.com/automation/n09230945.asp)
Utilizando o lynx:
lynx -dump http://www.whatismyip.com/automation/n09230945.asp|grep -v ^$
Utilizando o links2:
links2 -dump http://www.whatismyip.com/automation/n09230945.asp
Bônus: Pegando o IP de uma interface de rede específica:
(LANG=C;ifconfig eth0|grep "inet addr"|cut -f2 -d:|cut -f1 -d" ")
Obviamente, para pegar o endereço de uma interface diferente basta colocar o nome dessa interface no lugar de eth0
É interessante que o comando seja colocado entre parênteses, para não modificar o valor da variável de ambiente LANG da sua sessão de shell atual (que controla o idioma em que os aplicativos são exibidos).