Olá pessoal, conforme prometido, humildemente inicio aqui o primeiro capítulo de uma série de dicas chamada "Diário de um SysAdmin", onde irei postar os comandos e truques que uso no meu dia a dia.
Cada capitulo contém 5 dicas sendo que a última será sempre uma curiosidade.
Contexto:
Diariamente nos deparamos com diversas situações estranhas, complexas, trabalhosas, malucas etc. É um turbilhão de requisições e responsabilidades que se fossemos agir/encarar isso conforme está no livro ou como aprendemos no curso/faculdade, seríamos, no mínimo, menos eficientes. Para lidar com isso, usamos alguns truques, macetes e comandos (carinhosamente chamado de boas práticas) que talvez você não conheça. Então, chega de Blah blah blah e bóra pras primeiras 5 dicas.
Dica 1: Otimizações inteligentes de comandos
Antes de realizar qualquer tipo de alteração em arquivo de configuração, qualquer sysadmin que se preze, faz um backup do arquivo original (vai que... rs). Essa é uma dica simples mas que poupa-nos tempo.
Vamos supor que deseja alterar o arquivo
/etc/apache2/apache2.conf. Normalmente faríamos assim:
# cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bkp
E só então fazemos as alterações, certo?
E se fizermos assim?
# cp /etc/apache2/apache2.conf{,.bkp}
Talvez não pareça, mas só de pouparmos tempo, synapses, tabs e possíveis erros de digitação, já ajuda. Sem contar que otimização inteligente sempre é bom! :)
Dica 2: Sempre esquecemos o sudo
Segue mais uma, que apesar de simples, uso muito!!
Vamos supor que está logado como usuário comum e deseja executar um comando que só um superuser poderia.
Obviamente a resposta é simples: bastar usar sudo. Claro! Maassssss e quando você digita aquele comando gigantesco e esquece de digitar sudo?
A maioria esmagadora aperta a "seta para cima" no teclado depois aperta a tecla "home" digita sudo e dá um espaço para depois apertar enter certo?
OK, isso não é trabalhoso, mas temos uma forma mas fácil ainda de fazer isso, principalmente se estiver usando um smartphone (que aqui entre nós, eu já fiz algumas cácas usando o touch do smart, rsrs). Bom, vamos à dica:
Basta digitar: sudo !!
Isso vai dizer ao bash: execute o último comando, só que usando o sudo.
Exemplo:
sed -i '/sdb/ s/^/#/g' /etc/fstab
sed: Não foi possível abrir o arquivo temporário /etc/sedBLOh5T: Permissão negada
Oh droga cara! :(
Daí, em vez de fazer os procedimentos de praxe citados acima, basta aplicar a dica:
sudo !!
Isso diz para o shell: execute sudo + último comando. Onde: !! == último comando
O mais legal é que os "!!" parecem que estamos mandando um FAZ AGORA E NÃO ME ENCHE!! Tipo:
Dica 3: history e o santo Ctrl + R - Recursive Search
Todos sabemos que o bash armazena o histórico dos últimos 1000 comandos executados pelo seu usuário e para invocá-lo, rodamos o comando "history" ou "cat ~/.bash_history".
Então, quando precisamos reexecutar um determinado comando, primeiro olhamos history para pouparmos tempo ou para relembrar parte dele. Normalmente apertamos a seta para cima no teclado e ele logo mostra o último comando digitado e vamos apertando a "seta para cima" até chegar o comando que desejarmos. Mas e se ele foi digitado há muito tempo? Vai ficar apertando a tecla atééééé chegar?
R: Não, podemos realizar isso de outras formas, algumas comuns e outras mais legais. São elas:
Comuns:
history
history | grep "comando ou parte dele"
Daí copiamos, colamos no prompt e executamos. Masss e se estivermos num terminal, num server em modo texto sem mouse?? Cruuuuzes! :)
Para isso, temos as dicas legais (que nem são tãããão legais assim, mas...)
A: O SANTO, O Salvador Ctrl + R
Aperte
Ctrl + R, isso irá ativar a busca recursiva. Daí agora digite parte do comando que deseja "buscar" no seu history, imediatamente irá aparecer os comandos em que a palavra que digitou aparece. Caso tiver mais ocorrências com a mesma palavra, basta continuar apertando o
Crtl + R que ele vai buscar a próxima e a próxima e a próxima, até que você selecione com o Enter ou cancele com o ESC.
(Se não fosse o
Ctrl + R eu estaria [PF]er[rd][ai]do (dá-lhe ER)!)
B: O !
E caso você esteja num server modo texto, portanto sem mouse, não quer usar o
Ctrl + R, não quer criar calos nos dedos usando a seta pra cima e precisa usar um comando usado anteriormente sem redigitar, pode também usar o ! + número da posição na lista que obteve com history ou history | grep comando.
Por exemplo:
history
1507 vi /root/scripts/db_mail.sh
1508 cd /root/scripts/
1509 ll
1510 vi db_nota.sh
1511 crontab -e
1512 df -h
1513 mysqldump -u root -p moodle | gzip > /home/nginx/localhost/public/backup/moodle_bkp_23_06_15.sql.gzip
1514 cd /home/nginx/localhost/public/
1515 gzip backup/moodle_bkp_23_06_15.sql
1516 git add *
1517 git commit -m "BKP + BD + REL_ASS"
1518 git push origin master
1519 exit
1520 crontab -e
Vamos supor que eu deseje reexecutar o comando "mysqldump -u....". Como podemos ver, o número do comando é 1513.
Então, é só fazer assim:
!1513
Pronto!
Dica 4: atalhos diversos
Nesta dica vou mostrar alguns atalhos que uso no dia a dia, claro que existem muito mais que isso, mas estes são alguns dos que uso rotineiramente (nas próximas dicas, posto mais). São eles:
- Ctrl + A - move o cursor para o início da linha/comando.
- Ctrl + E - move o cursor para o fim da linha/comando.
- Ctrl + K - apaga da posição atual do cursor até o fim da linha (direita).
- Ctrl + U - apaga da posição atual do cursor até o começo da linha (esquerda).
Imagine a seguinte situação: Você acaba colar um comando gigante no prompt e percebe que não era o que desejava.
Exemplo:
for i in `find ~/ -type f -name *.tex`; do arq=`echo $i | awk -F"." '{print$1}'`; pandoc -t docx -f latex -o $arq.docx $i;echo -e "Arquivo $i foi convertido para $arq.docx..."; if [ `ls *.tex | wc -l` < 20 ]; then echo -e " o numero padrao de arquivos geralmente é 20, vc acaba de ultrapassar esse nr."; else echo -e "....convertendo....";fi ;done
Agora para apagar ele, tem algumas opções:
- Segurar a tecla Backspace
- Apertar Ctrl + C e correr o risco de abortar algum processo a mais.
Ou do jeito mais prático: Apertar
Ctrl + A + K.
E se por exemplo você quer usar apenas uma parte e não quer apagar todo ele? Simples, posicione o cursor até o ponto em que deseja manter e aperte
Ctrl + K, isso vai apagar tudo que estiver à direita do cursor. Ou se a parte que deseja está à direita, posicione o cursor até o ponto em que deseja manter e aperte
Ctrl + U, isso vai apagar tudo que estiver à esquerda do cursor.
Shift + PgUp ou
PgDown - essa é rápida, simples e útil. Use as teclas
Shift + PgUp para rolar a tela para cima e
Shift + PgDown para rolar a tela para baixo. Num terminal e sem mouse, isso ajuda muito.
Ctrl + Z - essa, apesar de simples, uso muuuito.
Imagine que você está conectado via SSH num server e mandou rodar um mysqldump num BD gigante ou mandou converter os .wav pra .mp3 do seu VoIP e esqueceu de colocar o & pra executar em background e precisa executar outro comando, mas a sessão está presa com dump. Você tem algumas alternativas, mas nenhuma delas é mais rápida que apertar
Ctrl + Z. Isso vai pausar o processo atual, daí basta digitar bg e apertar enter, isso irá mandar o processo atual para background. Daí pode executar seu comando urgenteee. :)
Faça um teste bem simples aí:
cat
^Z
[1]+ Parado cat
bg
[1]+ cat &
Se quiser voltar o comando que está em background, basta digitar fg e apertar enter:
fg
cat
ALT + . - esse atalho representa o último parâmetro informado. Como uso ele?
Imagine que acabou de criar ou copiar um arquivo para um diretório em que o caminho é muito longo e precisa na sequência entrar nesse local. Para isso, uso o
ALT + .. Por exemplo:
find . -type f -iname *.jpg -exec cp {} /um/caminho/de/diretorio/realmente/muito/longo \;
Daí se precisar entrar ou listar o conteúdo do diretório para verificar se tudo ocorreu bem, você precisa digitar esse caminho gigantesco? Nope! Basta digitar cd, ls ou qualquer outro comando que deseja executar usando o caminho e apertar a tecla Alt + a tecla ".".
Dica 5: Curiosidades - Cores no shell
Como prometido, a última dica sempre será uma curiosidade no shell.
Se você usa Shell Script, gosta de escrever mensagens coloridas, efeitos ou quer personalizar o terminal, aqui segue um comando que exibe todas as cores possíveis no seu terminal (juntamente com seu respectivo código):
e="\033[";for f in 0 7 `seq 6`; do no="" bo=""; for b in n 7 0 `seq 6`; do co="3$f"; p=" "; [ $b = n ] || { co="$co;4$b";p=""; }; no="${no}${e}${co}m ${p}${co} ${e}0m"; bo="${bo}${e}1;${co}m ${p}1;${co} ${e}0m"; done; echo -e "$no\n$bo"; done
Bom, é isso aí pessoal. Espero que tenham gostado das dicas. Logo, logo posto mais, dando continuidade à série Diário do SysAdmin.
Tenha um ótimo dia.
Grande Abraço.
@Tonyhts