sexta-feira, 21 de agosto de 2015

Trabalhando com o histórico de comandos

O terminal texto, mais precisamento o Bash, possui duas propriedades muito úteis que facilitam a nossa vida: o histórico de comandos, e o complemento de comandos.

O complemento funciona como um encurtador de comandos e nomes de arquivos. Por exemplo, quando se quer executar o comando chkrootkit, ao se digitar chk e precionar TAB duas vezes, o Bash vai retornar todos os comandos que começam com chk. Se houver apenas um único comando que começa com a sequencia digitada, então no primeiro TAB o comando será completado. O mesmo para nomes de arquivos. Se você estiver no diretório raiz (/) e quiser entrar no /etc, basta digitar "cd e" e apetar TAB para que o comando seja preenchido com "cd etc".

O histórico lista os últimos comandos digitados. Usando as teclas "seta acima" e "seta abaixo" você pode navegar pelos últimos comandos digitados. Você também pode digitar "history" para ver a lista completa do histórico.

$ history
599 ping -c 1 8.8.8.8 | grep icmp | cut -d" " -f7 | cut -d"=" -f2 | sed 's/\./\,/g'
600 ssh -v 200.144.25.50
601 clear
602 ping -c 1 172.20.1.17
603 clear
604 env | grep HIST
605 env
606 vi .bashrc
607 vi .bash_history
608 wc -l .bash_history
609 ls -lh .bash_history
610 vi .bashrc
611 ssh ricardoolonca@172.20.1.146
612 ls -lh .bash
613 ls -lh .bash_history
614 wc -l .bash_history
615 vi .bashrc
616 cd /
617 history

Para executar o comando número 599, basta digitar:

$ !599
ping -c 1 8.8.8.8 | grep icmp | cut -d" " -f7 | cut -d"=" -f2 | sed 's/\./\,/g'
4,60

O histórico fica armazenado em .bash_history, no diretório raiz dos usuários. Por padrão, o histórico mantém os últimos 1000 comandos (em algumas distros é 500), e o tamanho do arquivo não pode passar de 2Mb. Para alterar essas opções, abra o arquivo .bashrc e altere os valores de HISTSIZE e HISTFILESIZE. Para limitar em 10.000 comandos e 10Mb, altere conforme abaixo.

HISTSIZE=10000
HISTFILESIZE=10000

Além disso, há alguns atalhos interessantes. Por exemplo, para repetir o último comandos digite:

$ "!!"

Para repetir o último comando que começa com "ssh" use:

$ "!ssh"

Para executar o último comandos mas substituindo o texto 146 por 147, digite:

$ ^146^147