Shell Tips and Tricks for sysadmin - Presentation Transcript
Shell
Tips and Tricks
19/Maio/2008
Magno Alexandre Torres <magno@corp.globo.com>
Aprenda os atalhos CLI
O básico já ajuda muito!
Final da linha: CTRL+e
Início da linha: CTRL+a
Remover palavras a esquerda: CTRL+w
Remover palavras a direita: CTRL+u
Só isso?! [tips]
Nem tudo é o que parece
Ao remover uma palavra(ou conjunto
de), na verdade você a salvou num
buffer, que poderá ser resgatado com
CTRL+y, Ex:
# cp arquivo.txt /path/gigante/novo.txt
# <UP><CTRL+w><DOWN>
# vi <CTRL+y>
[tips]
Pesquisar o histórico com <CTRL+r>
Para continuar a pesquisar continuar
pressionando r sem soltar o <CTRL>
CTRL+t: corrigir erros corriqueiros de
digitação, como: iv<ctrl+t> => vi
Continuando...
Você costuma esquecer sempre que
precisava ter usado o sudo e agora vai
ter que digitar tudo novamente com o
sudo, ou subir o cursor, CTRL+a e
digitar o sudo novamente. Da pra ser
mais prático?
Mais um [trick] CLI de bônus
É muito comum precisar usar o último
parâmetro usado anteriormente.
Segue a bruxaria, ex:
# grep ^tecktalk: /etc/passwd
# cat [ESC] . => cat /etc/passwd
Quantos números 9 existem
noves=
entre 1 a 100?
$(echo -n
$( grep 9 <( for ((i=1;i<100;i++))
do
echo $i
done
)
) | sed 's/[^9]//g'
)
echo ${#noves}
Stream file [trick]
Muitos comandos exigem arquivos,
como o diff. Seria bom o diff diferir entre
outputs de 2 comandos, certo?!
Seus problemas acabaram! Chegou o
file(stream) tabajara! ;-)
# cat <(ls|head -1)
01.jpg
# ls -la <(ls|head -1)
lr-x------ 1 ... /dev/fd/63 -> pipe:[11525029]
GREP
Um dos primeiros comandos que a
gente aprende a usar... e sempre
esquecemos o poder que o mesmo tem.
Forma pouco otimizada para pesquisar
por uma linha com “Maria qquer coisa
Jose”, dando falsos positivos como
“Jose qqer coisa Maria”:
# grep Maria nomes.txt | grep Jose
Forma inteligente
# grep “Maria.*Jose” nomes.txt
Nunca esqueça! GREP trabalha com
REGEXP! Shell NÃO!!!
No shell * = qualquer caracter, 0 ou mais
Em REGEXP é: .* ou .+
[trick]
Não sou fã de ficar turbinando, criando
alias exóticos que não vai usar em outro
linux... Sou da filosofia KISS
Mas no caso do grep... tem um tip que
sempre gosto de aplicar e alguns linux já
aplicam isso como Gentoo ;-)
# grep –color
# egrep –color
Este trick é ótimo para testar uma RE
OR no grep e fgrep
O operador Rexp OR pede um grep com
esteróides:
egrep “Maria|Jose” nomes.txt
grep -E Maria|Jose nomes.txt
egrep -i 'MaRIa|Jose' nomes.txt
fgrep -i “Maria Jose” nomes.txt
Grep [tips]
Se alguém aqui parar de usar o wc
junto com o grep este tecktalk já terá
valido a pena!!! :-)
# grep fulano nomes.txt|wc -l
# grep -c fulano nomes.txt
Grep [tips]
Grep recursivo:
# grep -r -l ^root /etc 2>/dev/null
/etc/passwd
...
Mostra as 4 linhas
anteriores(before): grep -B4 Ma nomes.txt
posteriores(after): grep -A4 Ma nomes.txt
entre: grep -4 Ma nomes.txt
Grep [trick]
Sempre é um transtorno ficar testando
strings de pesquisa com o grep, por que
precisamos mover o cursor pro meio,
certo?! Pense novamente!
# < nomes.txt grep maria
# < nomes.txt grep jose
Monitorando
# for i in 1 2 3; do uptime;sleep 1;done
# for ((i=0;i<99;i++));do uptime;sleep 1;done
# while true; do uptime;sleep 1;done
# while [ 1 ]; do uptime;sleep 1;done
# while :; do uptime;sleep 1;done
Monitorando [tips]
O comando Watch é um dos mais
esquecidos. É ideal para monitorar:
# watch uptime
# watch -n 3 uptime
# watch -d -n 3 uptime [trick]
find [tips]
Para pesquisar recursivamente não
existe nada melhor que o find
# find . -name '*.txt' -atime +5
# find . -name '*.txt' -atime -5
# find . -name '*.txt' -atime 5
# find /home/user -mtime -5 -type f|
xargs grep -i sexo
find [tricks]
Resolvendo o problema dos arquivos
com espaço:
# find /home/user -mtime -5 -type f
-name '*.txt' -print0|xargs -0 grep -i sexo
SED = REGEXP
Pra usar o sed, alias, para ser um
verdadeiro profissional em TI um mínimo
de conhecimento em REGEXP é
essencial!
O básico já é muito, lembre-se KISS!
^ = inicio da linha . = qualquer caracter
$ = final da linha [0-9] = qqer número
[^char] = qualquer caracter exceto estes
Continuando...
+ => Repetição de 1 ou + vezes o
caracter anterior
. => Repetição de 0 ou + vezes o
caracter anterior
Ex:
# sed 's/^ubuntu://' /etc/passwd
# sed 's/^ubuntu:(.*)$/test:1/' /etc/passwd
Sed [tips]
SED aceita qualquer tipo de separador,
ex:
separador 'a'
echo 12345678 | sed 'sa123a666a'
separador '|' boa escolha
echo /tmp/passwd | sed 's|/tmp/|/etc|'
Sed [trick]
Ao trabalhar com sed, podemos ficar
frustrados por ele não alterar o arquivo,
sempre jogar a saída para stdout.
ERRADO! Usar opção -i (muito cuidado)
Não deixar ninguem fumando perto
quando usar este parâmetro!
sed -i 's/Maria/& Sapatao/gi' nomes.txt
Shell script [tips]
Portabilidade
#!/usr/bin/env bash
Se o bash estiver definido no path(default
para qualquer shell), env o encontrará.
“env” deixa o script mais portável
std(in|out|err) [tips]
Jogar toda a saída para como se fosse saida
padrão, para manipular com grep
# cmd 2>&1 (saida de erro se soma a stdout)
#Jogar tudo para /dev/null
if grep root /etc/passwd > /dev/null 2>&1
then
echo root user exist
fi
[tricks]
Bash 3: mandar tudo para um mesmo output:
cmd &>/dev/null == cmd > /dev/null 2>&1
Executar segundo comando se primeiro ok
# ls -d /tmp && cd /tmp
Executar segundo comando se primeiro falha
# ls -d /tmp/a || mkdir /tmp/a && cd /tmp/a
Debugando script shell
bash -x script.sh
0 comments
Post a comment