Shell Tips and Tricks for sysadmin

37
Shell Tips and Tricks 19/Maio/2008 Magno Alexandre Torres <[email protected]>

description

Dicas e truques para acelerar o dia a dia de quem trabalha com administração linux/unix

Transcript of Shell Tips and Tricks for sysadmin

Page 1: Shell Tips and Tricks for sysadmin

ShellTips and Tricks

19/Maio/2008

Magno Alexandre Torres <[email protected]>

Page 2: Shell Tips and Tricks for sysadmin

Aprenda os atalhos CLI

O básico já ajuda muito!

Final da linha: CTRL+eInício da linha: CTRL+aRemover palavras a esquerda: CTRL+wRemover palavras a direita: CTRL+u

Page 3: Shell Tips and Tricks for sysadmin

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>

Page 4: Shell Tips and Tricks for sysadmin

[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

Page 5: Shell Tips and Tricks for sysadmin

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?

Page 6: Shell Tips and Tricks for sysadmin

tricks

# cat /etc/shadowcat: /etc/shadow: Permissão negadamagno@magno ~ $ sudo !!sudo cat /etc/shadow[conteúdo]

Page 7: Shell Tips and Tricks for sysadmin

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

Page 8: Shell Tips and Tricks for sysadmin

Quantos números 9 existem entre 1 a 100?

noves=\

$(echo -n \

$( grep 9 <( for ((i=1;i<100;i++))

do

echo $i

done

)

) | sed 's/[^9]//g'

)

echo ${#noves}

Page 9: Shell Tips and Tricks for sysadmin

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]

Page 10: Shell Tips and Tricks for sysadmin

Vim|Diff [trick & tips]# < <(tail -10 nomes.txt) grep maria

# diff <(cd a; ls|sort ) <(cd b; ls|sort )

# diff dir1 dir2 => compara diretorios

#diff -r dir1 dir2 => recursivamente(-r)

Page 11: Shell Tips and Tricks for sysadmin

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

Page 12: Shell Tips and Tricks for sysadmin

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 .+

Page 13: Shell Tips and Tricks for sysadmin

[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

Page 14: Shell Tips and Tricks for sysadmin

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

Page 15: Shell Tips and Tricks for sysadmin

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

Page 16: Shell Tips and Tricks for sysadmin

Grep [tips]

Grep recursivo: # grep -r -l ^root /etc 2>/dev/null/etc/passwd ...Mostra as 4 linhasanteriores(before): grep -B4 Ma nomes.txtposteriores(after): grep -A4 Ma nomes.txtentre: grep -4 Ma nomes.txt

Page 17: Shell Tips and Tricks for sysadmin

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

Page 18: Shell Tips and Tricks for sysadmin

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

Page 19: Shell Tips and Tricks for sysadmin

Monitorando [tips]

O comando Watch é um dos mais esquecidos. É ideal para monitorar:

# watch uptime

# watch -n 3 uptime

# watch -d -n 3 uptime [trick]

Page 20: Shell Tips and Tricks for sysadmin

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

Page 21: Shell Tips and Tricks for sysadmin

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

Page 22: Shell Tips and Tricks for sysadmin

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

Page 23: Shell Tips and Tricks for sysadmin

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

Page 24: Shell Tips and Tricks for sysadmin

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|'

Page 25: Shell Tips and Tricks for sysadmin

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

Page 26: Shell Tips and Tricks for sysadmin

Shell script [tips]Portabilidade

#!/usr/bin/env bashSe o bash estiver definido no path(default

para qualquer shell), env o encontrará.“env” deixa o script mais portável

Page 27: Shell Tips and Tricks for sysadmin

Aspas e apóstrofos

# echo “$PWD”# echo '$PWD'# echo $PWD# echo ${PWD}# echo “$PWD”a# echo '$PWD'a# echo $PWDa# echo ${PWD}a

Page 28: Shell Tips and Tricks for sysadmin

Shell [tips]Alterando variáveis no shell:server=”riold45-10.5.9.8”

nome=$(echo $server|cut -d '-' -f 1)ip=$(echo $server|cut -d '-' -f 2)

nome=$(echo $server|sed 's/-.*$//')ip=$(echo $server|sed 's/^.*-//')

Page 29: Shell Tips and Tricks for sysadmin

Shell [tricks]Alterando variáveis no shell de forma

otimizada, esta vale a pena gravar!

server=”riold45-10.5.9.8”nome=${server/-*/}ip=${server/*-/}

Page 30: Shell Tips and Tricks for sysadmin

Shell functions [tips]Reutilize codigo, usando functions em shell# soma() { echo $(( $1 + $2 )); } # uma linha# soma 4 2# 6#Somar Identado, parametros $1 e $2function somar() { echo $(($1 + $2))}

Page 31: Shell Tips and Tricks for sysadmin

Shell arrays [tips]Shell bash suporta arrays, apenas

unidimensionais e com índice numéricos:

a[0]=1a[1]=aa[2]=4echo ${a[0]} ${a[1]} ${a[2]}

Page 32: Shell Tips and Tricks for sysadmin

std(in|out|err)Stdin (/dev/stdin): entrada padrão# tail /var/log/messages|vi -Stdout (/dev/stdout): saida padrão “1>”# ls >/dev/null (não tem erro, não printa nada)# ls arquivo_asdsd.fff > /dev/null (printa erro)Stderr (/dev/stderr): saida erro “2>”# cmd.exe > /dev/null (printa erro)# cmd.exe 2> /dev/null (não printa erro)

Page 33: Shell Tips and Tricks for sysadmin

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/nullif grep root /etc/passwd > /dev/null 2>&1then echo root user existfi

Page 34: Shell Tips and Tricks for sysadmin

[tricks]Bash 3: mandar tudo para um mesmo output:cmd &>/dev/null == cmd > /dev/null 2>&1Executar segundo comando se primeiro ok# ls -d /tmp && cd /tmpExecutar segundo comando se primeiro falha# ls -d /tmp/a || mkdir /tmp/a && cd /tmp/aDebugando script shellbash -x script.sh

Page 35: Shell Tips and Tricks for sysadmin

Expansão {}

# echo 1{2,3}# mkdir a{1,2,3,4,5,6,7,8,9} == a{1..9}# echo {a..z}{A..Z} != echo {a..z} {A..Z}# ls -d /etc/[a-z][a-z][0-9]*# ls -d /etc/[a-z][a-z][!0-9]*# ls -d /etc/[a-z][a-z][^0-9]*# touch works; mv work{s,}

Page 36: Shell Tips and Tricks for sysadmin

Vim <inicialização>Dentro do vim:help vimtutor

CLI# vimtutor

Page 37: Shell Tips and Tricks for sysadmin

Referências:

Man bash