www.linux.org | www.redhat.com | www.knoppix.org Roda direto do CD |
www.mandrakelinux.com/pt-PT | www.suse.com Versão que roda direto do CD http://www.suse.de | www.slackware-brasil.com.br |
http://www.debian.org.br | www.guiadohardware.net/gdhpress/kurumin | www.kalangolinux.org |
www.cipsga.org.br | br-linux.org | www.vivaolinux.com.br |
www.guiafoca.org Guias on-line: Iniciante, Intermediário, Inic e Interm., Avançado | ||
aurelio.net Tudo sobre shell, sed e vi; canivete |
cat -n arquivo.txt
# Numera todas as linhas cat -b arquivo.txt
# Numera todas as linhas, exceto as vaziascp ~/.emacs{,.bak}
#e equivalente a escrever:cp ~/.emacs ~/.emacs.bak
cat arq{1,2,3} > arq.final
#Ou seja, o equivalente a cat arq1 arq2 arq3 > arq.final
less /usr/doc/{emacs-20.7/{NEWS,README},ed-0.2/NEWS,gnupg-1.0.1/{README,COPYING}}
less /usr/doc/emacs-20.7/NEWS /usr/doc/emacs-20.7/README (quebra de linha aqui)
/usr/doc/ed-0.2/NEWS /usr/doc/gnupg-1.0.1/README /usr/doc/gnupg-1.0.1/COPYING
find . -exec chgrp literatura {} \;
find . -ok chgrp literatura {} \;
(pede confirmação antes de executar)find . -print | cpio -pdvucB /oracle/prg/objora
find / -name '*.bak' -exec gzip {} \;
find . -print -exec touch -t 0808250000 {} \;
- troca a data de modificação para 25/08/2008 00:00 de todos os arquivosfind . -name "*.htm" -print -exec touch -t 0808250000 {} \;
idem ao anterior, só que para arquivos *.htmfind . -name "file*"
procura por arquivos iniciados por file minúsculofind . -iname "file*"
procura por arquivos iniciados por file ou FILEfind . -name "resumo*" -type f
procura por arquivos normais (type f) as opções de -type são:gzip 'find / -name '*.bak' -exec -print'
gzip $(find / -name '*.bak' -exec -print)
Suponha o arquivo carta.txt a seguir:
CIDADE, DATA
Caro QUEM
O numero do protocolo do arquivo enviado foi COD.
Valor a ser pago : VLR
Formato do arquivo: TIPO
Cordialmente,
bira
Se executarmos o comando:
m4 -DCIDADE=Salvador -DDATA=11/11/08 -DQUEM=IVAN -DCOD=7675 -DVLR=324,55 -DTIPO=ISAM carta.txt
Resultará em:
Salvador, 11/11/08
Caro IVAN
O numero do protocolo do arquivo enviado foi 7675.
Valor a ser pago : 324,55
Formato do arquivo: ISAM
Cordialmente,
bira
split 100 bira.txt
#separa o arquivo bira.txt em arquivos com 100 linhas cada.split -b 1440Kb arquivo_grande.xyz
#divide o arquivo em arquivos de 1.440byte (um disquete)split -b 20m videoclip.avi
#divide o arquivo em pedaços de 20 Megabytescsplit -f capit livro.txt "/CAPITULO/" {2}
csplit -k -f capit livro.txt "/CAPITULO/" {9}
Coluna | Descrição |
PID | O ID do processo |
USER | O usuário que executa o processo |
PRI | A prioridade do processo |
NI | O valor bom: quanto maior o valor, menor a prioridade da tarefa |
SIZE | Memória usada por esse processo (código+dados+pilha) |
RSS | A memória física usada por esse processo |
SHARE | A memória compartilhada usada por esse processo |
STAT | O status desse processo, mostrado em código. Alguns códigos de status principais são: R = Em execução S = Em hibernação Z = Zumbi T = Interrompido Também é possível ver o segundo e terceiro caracteres, que indicam: W – Processo permutado N – Valor bom positivo |
%CPU | A porcentagem da CPU usada por esse processo |
%MEM | A porcentagem de memória usada por esse processo |
TIME | O tempo total de CPU usado por esse processo |
CPU | Se este é um sistema de múltiplos processadores, esta coluna indica o ID da CPU em que esse processo está sendo executado. |
COMMAND | O comando emitido por esse processo |
top -d 1
Define o tempo de atualização em 1 segundotop -p1738 -p1739
Mostra apenas os processos 1738 e 1739cat manual.txt | tr aeiou 12345
# substitui a letra a por 1, e por 2, i por 3, o por 4 e u por 5des -e arquivo arquivo_criptografado
des -d arquivocriptografado arquivo_descriptografado
.cat nomedoarquivo | gawk '/vento/ {print}'
#Para mostra as linhas que contenham o string "vento".awk '{print $NF}' arquivo.exemplo
# $NF imprime o último campo.awk '{print NF}' arquivo.exemplo
# imprimi a contagem do numero de campos.awk -F: 'NF > 10 {print}' arquivo.exemplo
# imprimi apenas as linhas que contenham mais de dez campos.awk -F: 'NF == 10 {print}' arquivo.exemplo
# imprimi apenas as linhas que possuam exatamente 10 campos.awk 'END {print NR}' arquivo.txt
# Contar quantas linhas um determinado arquivo tem.
awk 'NR == 30' arquivo.txt
# Para ler apenas 30a. linhacat nomedoarquivo | gawk '/1024/ {print "Nome: " $3 "ID: " $2}' > novoarquivo
awk -F":" '{ print "username: " $1 "\t\tuid:" $3 }' /etc/passwd
cat /etc/passwd | awk -F":" '{print $1"\t->\t",$5}' | sort +2 >relatorio.txt
ls -l | awk '{print "cp",$9,$9 ".bck"}' > backup.sh
# usando a saída do ls pega o campo 9 que é o nome do arquivo e joga para o arquivo backup.sh linhas contendo: cp arquivo.etx arquivo.ext.bak
cat nomedoarquivo | gawk '$3 == "peter" || $3 ~ /marie/ '
cal | awk '/We/ || /17/ {print $0}'
# filtra a saída do calendário do mês corrente, mostrando apenas a abreviação dos nomes dos dias da semana e abaixo a linha que contém o dia de número 17awk '{ if (length($0) > max) max = length($0) } END { print max }' arq.txt
#Mostra o tamanho da maior linha do arquivoawk 'NF > 0' arq.txt
# mostra as linhas do arquivo, exceto as vazias ou as somente com espaços em branco.awk 'BEGIN { for (i = 1; i <= 7; i++) print int(101 * rand()) }'
# mostra 7 números aleatóriamente entre 0 e 100ls -l FILES | awk '{ x += $5 } ; END { print "total bytes: " x }'
# mostra o total de bytes dos arquivos listados por ls -l somando o quinto campoawk -F: '{ print $1 }' /etc/passwd | sort
# mostra em ordem alfabetica o nomes do usuários do /etc/passwdawk 'END { print NR }' arq.txt
#mostra a quantidade de linhas de arq.txtawk 'NR % 2 == 0' arq.txt
#mostra as linhas alternadamente, não mostra a linha 1, mostra a 2 , não mostra a 3, ...awk 'NR % 2 == 1' arq.txt
#mostra as linhas alternadamente, mostra a linha 1 , não mostra a 2, mostra a 3 , ...awk '{ print $3 }' < lista.txt
# mostra a coluna 3awk '($1=="Ivan") { print }' < lista.txt
# Se o valor da coluna 1 for Ivan mostra as linha todasawk '($2=="Diana") { print $3,$4 }' < lista.txt
# Se o valor da coluna 2 for Diana mostra a coluna 3 e 4ls -l
:
Executando o comando:-rwxrwxrwx 1 bira literatura 11537 Jan 9 11:41 GRGR0405 -rwxr-xr-x 1 bira literatura 1086 Jan 15 11:42 RECIBO.REL -rw-r--r-- 1 bira literatura 2279 Jan 13 11:56 content.xml -rwxr-xr-x 1 bira literatura 3301 Jan 15 10:24 manual.txt -rw-r--r-- 1 bira literatura 922 Jan 9 14:32 meta.xml -rw-r--r-- 1 bira literatura 119 Jan 16 11:31 texto.txt
ls -l | awk '{print "Dono: " $3 "\tTamanho: "$5 "\tNome: " $9}'
gera a seguinte saída:Dono: Tamanho: Nome: Dono: bira Tamanho: 11537 Nome: GRGR0405 Dono: bira Tamanho: 1086 Nome: RECIBO.REL Dono: bira Tamanho: 2279 Nome: content.xml Dono: bira Tamanho: 3301 Nome: manual.txt Dono: bira Tamanho: 922 Nome: meta.xml Dono: bira Tamanho: 119 Nome: texto.txt
cut -c 10-10 arq.txt
# mostra da 10 a trigésima coluna do arquivocut -c 5,7,10-15 arq.txt
# mostra a quinta, a sétima e décima a décima-quinta coluna#Funcao : Exemplo de utilizacao do comando tr, cut e sed
# tr deixa apenas um espaco em branco, eliminando os
# demais que normalmente sao gerados pelo ls
# cut utiliza o espaco em branco como delimitador de
# campo e seleciona os campos de 3 a 9
# sed substitui os espacos em branco por tab
#-----------------------------------------------------------
tput clear
echo " `date` Em: `pwd`"
echo "Dono Grupo Bytes Mes Dia Ano/H Nome do arquivo"
echo "---------------------------------------------------------------"
ls -lSr | tr -s " " | cut -d " " -f3-9 | sed -e 's/ /\t/g'
echo "---------------------------------------------------------------"
# Fim do script
fgrep -l animal *.txt | vi -
- Abre no vi um novo arquivo contendo os nomes dos arquivos que contenham a palavra animal em seu conteúdo.vi `fgrep -l animal *.txt`
- Diferentemente do anterior, este comando abre os arquivos que contém a palavra animal em seu conteúdo.grep -v int
(se não tiver)grep -w casa
(expressão exata)grep usuario /etc/passwd || echo "usuário inexistente"
rgrep -r my_word . | more
# este é a opção recursiva de grepperl -i -p -e 's/caixas/malas/g;' grave.txt
# substitui todas as ocorrências de caixas por malas.perl -i.bak -p -e 's/caixas/malas/g;' grave.txt
# Igual ao anterior só que a opção -i.bak cria um backup de grave.txt como grave.txt.bakawk '($2=="1957") { print $3 }' | arquivo.txt
perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' | arquivo.txt
perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' | arquivo.txt
perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' | arquivo.txt
perl -lane 'print $F[2] if $F[1] eq "1957"' | arquivo.txt
perl -lane 'print$F[2]if$F[1]eq"1957"' | arquivo.txt
# Esta linha é igual à de cima, como no perl pode-se remover todos os espaços dos argumentoscat texto.txt | sed p
sed -n p texto.txt
sed -n 5p texto.txt
sed '5d' texto.txt
= passando o endereço como sendo o número da linha, apagará a linha 5 com a opção d.sed '/modelo/d' texto.txt
= passando o endereço com um conteúdo da linha, apagará todas as linhas que tenham a palavra modelo.grep -v modelo texto.txt
sed '5,10d' texto.txt
= aparará das linhas 5 até a 10sed '5,/modelo/d' texto.txt
= apagrá da linha 5 até a linha que tiver a palavra modelo.sed '/modelo/,+3d' texto.txt
= apaga a linha que contá a palavra modelo e as 3 seguintes.sed 'd' texto.txt
= se não informar nenhum endereço aplica o comando no arquivo todos, neste caso apagará todas as linhas do arquivo.cat nomedoarquivo | sed '/.*o$/d' > novoarquivo
Filesystem | Size | Used | Avail | Use% | Mounted on |
/dev/sda1 | 2.9G | 2.4G | 351M | 88% | / |
none | 499M | 0 | 498M | 0% | /dev/shm |
/dev/sda2 | 63G | 48G | 12G | 80% | /literatura |
df -h | tail + 2 | tr -s " " | cut -d " " -f5 | grep literatura | sed -e 's/%//'
sed '10q' texto.txt
= mostra o arquivo até a linha 10 depois para.sed '/^$/q' texto.txt
= mostra o arquivo parando na primeira linha em branco que achar.sed -n '1,10p'
= imprima apenas da linha 1 até a 10sed '11,$d'
= apague da linha 11 até o finalsed '1,10!d'
= NãO apague da linha 1 até a 10 (ou seja, apague as outras)sed -n '11,$!p'
= NãO imprima da linha 11 até o final (ou seja, imprima as outras)sed '5d;10d;/modelo/d' texto.txt
= apaga da linha 5 a 10 e as que contém a palavra modelosed -e '1i começo de tudo' -e '5d' texto.txt
= insere a frase começo de tudo antes da primeira linha e apaga a quinta linha do arquivo texto.txt, sendo separados por -e. sed 'p' texto.txt
sed 's/isso/aquilo/' texto.txt
sed "s/$HOME/aquilo/" texto.txt
sed 's/\/usr\/local\/bin/\/usr\/bin/' texto.txt
sed '/\/usr\/local\/bin/d' texto.txt
sed 's,/usr/local/bin,/usr/bin,' texto.txt
sed '\,/usr/local/bin,d' texto.txt
sed '/root/Id' texto.txt
#a opção I ignorar maiúsculas e minúscualassed 's/root/administrador/Ig' texto.txt
#substitui a palavra root por administrador ignorando maiúsculas e minúscualassed -e '1r cabecalho.txt' -e '$r rodape.txt' texto.txt
# a opção r inclui cabecalho.txt depois da linha 1 e rodape.txt após a última linha.grep 'modelo' texto.txt > modelo.txt
# este comando pode ser substituido pelo sed se utilizarmos a opção w:sed '/modelo/w modelo.txt' texto.txt
# grava no arquivo modelo.txt as linhas que contém a palavra modelo.sed 's/<table bgcolor="#EEFFFF">/<table>/g' z.htm
sed '/<pre>/,/<\/pre>/c aqui tinha texto pré-formatado' texto.html
aqui tinha texto pré-formatado
.sed -e '/<\/pre>/r novo.txt' -e '/<pre>/,/<\/pre>/d' texto.html
sed 's/ /\n/g' texto.txt
#substitui todo espaço em branco por uma quebra de linha representada por \n.sed 's/^/# /' lista.txt
#torna cada linha um comentáriosed 's/ /\n/g' recibo.txt | sort -f | uniq -i > recibo1.txt
<table align="right" bgcolor="#EEFFFF">
sed '/<table align="right" bgcolor="#EEFFFF">/r novalinha.txt' z.htm
sed -e '/<table bgcolor="#EEFFFF">/r novalinha.txt' -e '/<table bgcolor="#EEFFFF">/d' z.htm
sed -f programa.sed texto.txt
<html>
<body>
<center>
Texto no centro
</center>
<pre>
Texto fica na
tela do jeito
que
foi digitado.
</pre>
</body>
</html>
E deseja-se substituir o conteúdo entre <pre> e </pre> pela frase aqui tinha texto pré-formatado/<pre>/,/<\/pre>/c \
aqui tinha texto pré-formatado
sed -f comandos.sed texto.html
<html>
<body>
<center>
Texto no centro
</center>
aqui tinha texto pré-formatado
</body>
</html>
#!/bin/sed -f
, isso fará com que o arquivo seja automaticamente processado com este comando. Claro que deve-se dar permissão com o chmod +x programa.sed antes../programa.sed texto.txt
cat texto.txt | ./programa.sed
sed '/root/H;$g' /etc/passwd
comando | emulação -------------+---------------------------------------- cat | sed : head | sed 10q grep | sed /padrão/!d grep -v | sed /padrão/d tac | sed 1!G;h;$!d tail -1 | sed $!d tr A-Z a-z | sed y/ABCDEF...UVWXYZ/abcdef...uvwxyz/ wc -l | sed -n $= Fonte: aurelio.net
informações = marcadores : comentários # comandos de edição s i c a y comandos de registradores g G h H x comandos de impressão p P l comandos de arquivo r w modificadores g i ! separadores ; -e \n controle de fluxo b t d D n N q endereço // , limitadores {} \(\) registradores dinâmicos \1 \2 ... \9 Fonte: aurelio.net
ls -l | wc -l
#conta a quantidade de arquivos listados por lspaste -s arquivo1 arquivo2
a saída serápaste -s -d";" arquivo1 arquivo2
a saída será:relat="arquivo.txt" ; numero=132 ; impres="contab"
pr -t +$número $relat | lp -oc -d$impres -opr
Comandos definidos em bc:
Adição, subtração, multiplicação, divisão.
% (resto da divisão)
^ (potenciação)
sqrt(x) (raiz quadrada de x)
Se entrar com bc -l há também os comandos:
s(x): o seno de x (x em radianos)
c(x): o cosseno de x (x em radianos)
a(x): o inverso da tangente de x (retorna radianos). (Veja um exemplo com o valor de pi)
Se y = tangente de x (tg x), a(y) = x
l(x): o logaritmo natural de x. (ln x)
e(x): a função exponencial ( e^x ) (exp x)
last (último resultado) pode-se usar o caracter "." (ponto) também
se você entrar com bc e digitar 2/3 aparecerá o resultado como 0
se você entrar com bc -l e digitar 2/3 aparecerá o resultado como .66666666666666666666
se você entrar com bc ou bc -l e digitar scale=3 e em seguida 2/3 aparecera .666
Pode-se usar obase e ibase para mudar a base numérica:
echo "obase=2 ; 11" | bc
# resultará em 1011 pois convertemos o numero 11 em base decimal para binário
echo "ibase=2 ; 11" | bc
# resultará em 3 pois convertemos o número 11 em binário para decimal
podemos usar todas as bases: 2 (binário) 8(octal) 10(decimal) 16(hexadecimal)... etc
Podemos usar: z=$(echo "100 * 2" | bc ) ; echo $z
# para atribuirmos um valor a z
Poderia ser : z=`echo "100 * 2" | bc` ; echo $z
# para atribuirmos um valor a z
Podemos usar: echo "100 * 2" | bc
# para ver o valor diretamente
Um exemplo bem interessante que consta no manul e bc (man bc) é esse de calcular pi
pi=$(echo "scale=10; 4*a(1)" | bc -l)
Um exemplo meu é o de calcular a proporção áurea, razão áurea ou número de ouro
numero_de_ouro=$(echo "scale=10 ; (1 + sqrt(5)) / 2" | bc -l)
Em ambos os casos basta variar o valor de scale para conseguir os números com mais casas decimais
Veja mais sobre bc...
Para mais calculos veja a linguagem de programação lua
echo "scale=1; (25 / 3) + 20" | bc
ssh root@200.223.79.179
telnet 192.168.0.10
(servidor de dados)telnet 192.168.0.1
(servidor de e-mail)scp resofc.zip root@192.168.5.1:/literatura/dat0/temp
atributos do cron (crontab) | ||||
minuto (0-59) | hora (0-23) | dia do mes (0-31) | mes (1-12) | dia da semana (0-6) |
1 | 2 | 3 | 4 | 5 |
-l usuário -- lista as tarefas agendadas para o usuário | ||||
-e usuário -- edita o agendador | ||||
-d usuário -- apaga o arquivo do usuário | ||||
-c diretório -- especifica um diretório para o Crontab | ||||
Exemplo: 30 14 * * Fri /bin/mail -s "TGIF" bira@teste.ok%RECEBIDO%%ok. | ||||
Exemplos de Wikipedia | ||||
00 * * * * /bin/script Todo dia de hora em hora (hora cheia) | ||||
00-59/5 * * * * /bin/script De cinco em cinco minutos todos os dias (note a divisão por 5 do intervalo 00-59) | ||||
15 10,12,16,18,22 * * * /bin/script Nas seguintes horas: 10, 12, 16, 18, 22 aos 15 minutos da hora | ||||
25 19 01-05 * * /bin/script Nos primeiros cinco dias do mês às 19:25 | ||||
00 00,12 * * 1-5 /bin/script De segunda a sexta ao meio-dia e a meia-noite | ||||
00 2 * * mon,wed,fri /bin/script Script rodar Segunda,Quarta,Sexta às 2 horas | ||||
00 3 * * tue,thu /bin/script Script para rodar Terça,Quinta às 3 horas |
Find . -print | cpio -ovcB > /dev/rmt/qbkpt
Levantacpio -itv < /dev/rmt/qbkpt
Lercpio -icvumdB < /dev/rmt/qbkpt
Baixarcpio -icvumdB < "*TRS*"/dev/rmt/qbkpt
Baixarcpio -itvB < /dev/rmt/0b
Ler fita Datcpio -icvB < /dev/rmt/0b
Baixar fita Dattar -zcvf arqdestino.tar.gz arqorigem
# Comando para empacotar compactando com gziptar -zxvf arquivo.tar.gz -C /tmp
# Comando para desempacotar o -C /tmp informa o destino dos arquivos extraídos, se for omitido salva a partir do diretório corrente
-a exibe toda a configuracao atual
stty -a | grep intr
Veja um exemplo de script que simula um login Linux:
#!/bin/bash
# Simula um login inclusive ocultando a digitacao da senha
# Autor urs.Bira (urs.bira@uol.com.br)
# Este script deve ser utilizado de forma etica
tput clear
old=`stty -g` # Salva a configuracao atual do terminal
# Frases para simular texto de entrada do login Linux Red Hat
printf "Red Hat Linux release 9 (Shrike)\n"
printf "Kernel 2.4.20-8 on an i686\n"
# Funcao login que solicitara usuario e senha
login ()
{
printf "login: " ; read v_usu
stty -echo intr '^a' # Inibi a exibicao de caracteres no monitor
printf "Password: " ; read v_sen
stty $old # Retorna as configuracoes do terminal que foram salvas
}
login # Chama a funcao login
printf "\nLogin incorrect\n\n" # Simula que errou a senha
login # Chama a funcao login
# Pega o ip de who am i , no sexto campo e eliminando os parenteses e brancos
ip=`who am i | tr -s " " | cut -d " " -f6 | tr "(" " " | tr ")" " "`
# Mostra a mensagem de ultimo login pegando o dia e mes atuais
printf "\nLast login: `date "+%a"` `date "+%b"` `date "+%e"` 10:16:23 from ${ip}\n"
bel
gera o caracter "bel" do terminal
blink
mostra piscante
bold
mostra negrito
clear
apaga a tela
cols
ecoa numeor de colunas na tela
cup l c
move cursor para linha l coluna c
dim
escurece a tela
ed
apaga ate o fim da tela
el
apaga ate o final da linha
lines
ecoa numero de linhas na tela
smso
inicia modo de destaque
rmso
termina modo de destaque
smul
inicia modo sublinhado
rmul
termina modo sublinhado
rev
reverte o video (preto sobre branco)
tput smacs
tput bold
tput blink ou rev
tput sgr0
(normal)
tput smso
(negrito)
tput rmso
(normal)
tput 10 8
(posiciona o cursor na linha 10 coluna 8
Podemos utilizar :
fonte_negrito=`tput smso`
Pode-se usar também o comando setterm para mudar atributos de cor:
fonte_normal=`tput rmso`
echo "${fonte_negrito}texto em negrito${fonte_normal}"
setterm -foreground white -background blue -store
No manual do tput há o seguinte exemplo que pode ser digitado na linha de comando do shell:
bira> tput -S <<!
bira> clear
bira> cup 10 10
bira> bold
bira> !
Veja um exemplo de scripr utilizando os recursos do tput:
#!/bin/bash
# Cria o efeito de que esta limpando a tela de baixo para cima
# Autor: urs.bira (urs.bira@uol.com.br)
lintel=`tput lines` #Pega o valor da ultima linha do terminal
# Um loop que vai da ultima linha da tela ate a linha 0
for((linhas=${lintel}; linhas >= 0; linhas--));
do # Inicio do loop
# Cria um efeito de uma linha colorida diferente a cada vez que executa
segundo=`date "+%S"` # Pega o valor dos segundos
cor=${segundo:1:2} # Pega o segundo digito do segundo
tput cup ${linhas} 0 ; printf "\033[4${cor};3${cor};1m
urs.biraurs.biraurs.biraurs.biraurs.biraurs.biraurs.biraurs.biraurs.biraurs.bira
\033[0m"
tput cup ${linhas} 0 # posiciona na ultima linha e coluna 0
tput ed # limpa ate o final da linha
done # Fim do loop
tput cup 0 0 # posiciona o cursor na linha 0 coluna 0
tput rev # Mostra em video reverso
printf "\t\t`date "+%D %R"`\t`pwd`\n" # Mostra data, hora e pasta atual
tput rmso # Mostra normal
tput el # Limpa ate o fim da linha caso a linha acima ultrapasse.
Veja abaixo exemplos práticos da utilização do poderoso xargs:
file -Lz * | grep ASCII | cut -d":" -f1 | xargs ls -ltr
Explicando: o comando file verifica o tipo de cada arquivo o grep
seleciona apenas aqueles que sejam "ASCII", o cut pega o primeiro campo que são delimitados por ":" o xargs passa para o ls -ltr
estes nomes como se escrevessemos ls -ltr nome1.txt nome2.txt nome3.txt..
file * | grep ASCII | cut -d":" -f1 | xargs wc -l
ou dessa outra forma
wc -l ‘file * | grep ASCII | cut -d":" -f1‘
Conta quantas linhas tem cada arquivo ASCII que estiver na pasta, gera uma lista assim:
111 capa_manual_linux.txt
757 capitulo_III_manual.txt
390 capitulo_II_manual.txt
214 capitulo_I_manual.txt
1472 total
ls | xargs -t -i mv {} {}.bak
Renomeia todos os arquivos da pasta acrescentando a extensão .bak ao final do nome. [ Retorna para lista de comandos ]
Mostrará e executrá as linhas abaixo:
mv capa_manual_linux.txt capa_manual_linux.txt.bak
mv capitulo_III_manual.txt capitulo_III_manual.txt.bak
mv capitulo_II_manual.txt capitulo_II_manual.txt.bak
mv capitulo_I_manual.txt capitulo_I_manual.txt.bak
-i
determina a substituição de {}
pelo nome de cada arquivo.
-t
mostra o comando antes de executá-lo.
file * | grep ASCII | cut -d":" -f1 | xargs vi
Edita os arquivos um a um com o vi
file * | grep ASCII | cut -d":" -f1 | xargs -p vi
É como o anterior só que acrescetando a opção -p
ele pergunta antes de executar o vi (responde y ou n)
Um caso particular é quando o resultado passado para xargs não gera nenhum valor, nestes casos podemos tratar usando
-r
que encerra o comando sem executar nada. Exemplo:
file * | grep XGVGXGVG | cut -d":" -f1 | xargs -t -r wc -l
Este comando não executará nada. mas se colocar como abaixo sem o -r
:
file * | grep XGVGXGVG | cut -d":" -f1 | xargs -t wc -l
mesmo não havendo arquivos tipo XGVGXGVG ele mostrará como resultado as linhas:
wc -l
0
file * | grep ASCII | cut -d":" -f1 | xargs -t -n2 ls -ltr
-n
limita a quantidade de argumentos por linha, neste exemplo serão passados de 2 em 2 como mostrado abaixo:
ls -ltr c_manual_linux.txt cap_III_manual.txt
-rw-r--r-- 1 bira literatura 25738 Jan 2 08:53 cap_III_manual.txt
-rw-r--r-- 1 bira literatura 999 Jan 2 09:44 c_manual_linux.txt
ls -ltr cap_II_manual.txt cap_I_manual.txt
-rw-r--r-- 1 bira literatura 7276 Jan 2 08:52 cap_I_manual.txt
-rw-r--r-- 1 bira literatura 13260 Jan 2 08:53 cap_II_manual.txt
Comandos embutidos do Shell | ||
Shell Bourne/Korn | Shel C | Descrição |
: | : | - comando nulo |
alias | - cria um apelido de nome de comando | |
(alias dir `ls -l`) | ||
bg | - roda o comando corrente no segundo plano | |
break | break | - sai do laço for ou while |
breaksw | - sai de um switch | |
cd | - muda de diretório | |
continue | - continua interação do laço for ou while | |
default | - caso default em switch | |
dirs | - imprime pilha de diretório | |
echo | - escreve argumentos em stdout | |
-n não gera avanço de linha | ||
E podemos utilizar as seguintes sequências | ||
de escape | ||
\\b retrocesso ( equivale a CTRL H ) | ||
\\f alimentação de pagina ( equivale a CTRL L ) | ||
\\n avanco de linha ( equivale a CTRL J ) | ||
\\r carriae return ( equivale a CTRL R ) | ||
\\t tab ( equivale a CTRL I ) | ||
\\\ barra invertida ( equivale a \ ) | ||
\\xxx valor octal -> ascii | ||
\\c não termina com o alimentador de linha | ||
\\N Null Character + | ||
\\d Delay 2 seconds |Estes não são do Shell C | ||
\\s space Character + | ||
eval | - avalia e executa argumentos | |
#Para forçar a execução de uma variável utiliza-se | ||
eval | ||
set v_ler = "cat bira.txt" | ||
eval v_ler (O shell retornara o resultado de cat bira.txt) | ||
Se o conteúdo de bira.txt for:#-----------------------------------------
eval "cat bira.txt" mostrará o conteúdo do arquivov_ler="cat bira.txt" ; eval $v_ler mostrará o conteúdo do arquivov_ler="cat bira.txt" ; $v_ler também mostrará o conteúdo do arquivoeval `cat bira.txt` executará os comandos contidos no arquivo (no final de cada linha deve haver um ;)v_ler=`cat bira.txt` ; eval $v_ler também executará os comandos (mesma observação do anterior)v_ler=`cat bira.txt` ; $v_ler Ocorrerá mensagem de erro | ||
exec | - executa os argumentos | |
exit | exit | - sai do programa de shell |
export | - cria uma variável global | |
fg | - traz um comando para o primeiro plano | |
for | foreach | - executa laço foreach |
glob | - realiza expansão de nome de arquivo | |
goto | - vai ate um rótulo dentro do programa do shell | |
history | - mostra lista de comandos executados gravados no historico | |
if | if | - decisão if-then-else |
jobs | - lista tarefas ativas | |
kill | - elimina uma tarefa - Exemplo de script matar_processo | |
Skill | - Congela sem encerrar a tarefa skill -STOP 19573 = Congela o processo skill -CONT 19573 = Descongela o processo | |
- Para ver o número do processo corrente é , echo $$. | ||
- Se o processo for o último colocado em segundo plano(background), echo $! mostra o número dele. | ||
limit | - limita o uso de recurso de uma tarefa | |
login | - termina o shel e ativa login | |
logout | - termina a conexão de um shell | |
newgrp | - passa para um novo grupo de usuário | |
nice | - muda a prioridade de um comando | |
nohup | - ignora hung ups | |
notify | - notifica ao usuário quando o status de uma tarefa mudar | |
onintr | - controla o processamento do shell na interrupção | |
popd | - retira da pilha de diretório | |
pushd | - coloca um diretório na pilha | |
read | - le um linha de stdin | |
readonly | - muda uma variável para somente leitura | |
repeat | - repete um comando n vezes | |
select | - Cria um menu Veja exemplo de script Exemplo 2 | |
set | - define variáveis de ambiente do shell | |
- Clique aqui para entender o set | ||
set | - define uma variável local no shell C | |
setenv | - define uma variável global no shell C | |
shift | shift | - desloca os parametros do Shell $* ou $argv |
source | - le e executa um arquivo | |
stop | - para um processo em segundo plano | |
suspend | - para o Shell | |
switch | - decisa case | |
test | - avalia expressões condições Veja exemplificação e comentário | |
times | time | - mostra tempos de execução |
trap | - gerencia signals de execução | |
# Se digitar Ctrl C apresenta mensagem. So sai com Ctrl \
|
Tabela de sinais do trap | ||
0 Termino normal | 7 Instrução EMT | 14 Alarme do relogio |
2 Interrupção (break) | 9 Corte não apanhado | 16 Definido pelo usuário |
3 Termino (quit) | 10 Erro de barramento | 17 Definido pelo usuário |
4 Instrução ilegal | 11 Violação de segmentação | 18 Morte processo-filho |
5 Armadilha de trace | 12 Erro de chamada do sistema | 19 Falta de energia |
6 Instrução IOT | 13 Conduto não terminado | |
Ex.: trap (rm *.tmp;exit 1) 1 2 3 14 15 |
Shell Bourne/Korn | Shel C | Descrição |
ulimit | - limita tamanhos de arquivo gravados por processo-filho | |
umask | - define segurança default para arquivos e diretórios | |
unalias | - descarta apelidos | |
unlimit | - remove limitações sobre os recursos | |
unset | - desativa uma variável local | |
unsetenv | - desativa uma variável global | |
until | - laço UNTIL | |
wait | - espera um processo em segundo plano ser completado | |
while | while | - laço WHILE |
%job | - traz uma tarefa em segundo plano para o primeiro | |
expr | @ | - mostra ou define variáveis do Shell |
if expr $a = $b | ||
if expr "${nome}" = "Bira" | ||
a=`expr $a + 1` | ||
a=`expr "$a" + 1` | ||
count=`expr "$count" + 1` | ||
expr index abcdef c #posição de c na lista | ||
Para executar operações matematicas utilize expr | ||
foo=`expr $foo + 1` #soma um à variável foo | ||
expr 2 + 5 \* 1 ( O shell retornara 7) | ||
expr length "Casa" | ||
Saída: 4 | ||
Os operadores sao: + adição - subtração / divisão \* multiplicação % resto Para mais calculos veja a calculadora binária bc |
Variáveis do Shell | ||
Shell Bourne/Korn | Shel C | Descrição |
CDPATH | cdpath | - procura caminho para cd |
cwd | - nome do caminho completo do diretório corrente | |
HOME | home | - nome do caminho do diretório de conexão do usuário |
PATH | path | - o caminho de pesquisa do Shell para os comandos |
PS1 | prompt | - a cadeia de prompt primaria "$" para sistemas Shell |
Bourne/Korn "hostname%" para sistemas Shell C | ||
"#" para superusuário | ||
\w current working directory | ||
\W last element of current working directory | ||
\u user name | ||
\h host name | ||
\d current date | ||
\t current time | ||
Exemplo: export PS1="\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]" | ||
PS2 | - a cadeia de prompt secundaria | |
IFS | - separadores de campo internos | |
(espacos, tab, nova linha) | ||
history | - número de comandos guardados pela historia | |
ignoreeof | - ignora fim de arquivo | |
noclobber | - não grava sobre arquivos existentes | |
noglob | - inibe a expansão do nome de arquivo | |
$# | $#argv | - número de argumentos posicionais |
$0 | $0 | - nome do comando |
$1,$2... | $1,$2... | - argumentos posicionais |
$argv[n] | - argumentos posicionais | |
$* | $*,$argv[*] | - $1,$2... |
$@ | - $1,$2... | |
$- | - opções de Shell do comando set | |
$? | $status | - codigo de retorno do último comando |
$$ | $$ | - número de processo do comando corrente Ver comando kill |
> temp$$ cria um arquivo com o nome temp+número do | ||
processo | ||
$! | $! | - número de processo do último comando em segundo plano Ver comando kill |
RANDOM | - Gera números randômicos: echo $RANDOM mostrará um número gerado aleatóriamente |
Manipulando variáveis |
NOME="VALOR"
# Aqui podemos usar valores de outras variáveisNOME='VALOR'
# NOME terá o valor igual a VALORNOME=`COMANDO`
# NOME terá o valor da saída de comando mes_atual=`date '+%m'`
grava o mes (%m) atual (01-12) na variávelagora=`date +"%H:%M:%S"` ; echo $agora
resulta em 15:48:55echo ${mes_atual}
as chaves sao para evitar errosPS1="logname>"
o prompt fica o nome do login do usuárioPS1=`(#$PWD)-->`
funciona como prompt $p$gAção | Comando | Saída |
1. Retirar a parte final da string | VAR="minha_foto.jpeg" echo ${VAR%.jpeg} |
minha_foto |
Como podemos ver, ".jpeg" será excluído. Indicamos o que será excluído depois do caracter '%'. | ||
2. Retirar a parte inicial da string | VAR="http://www.linux.com.br" echo ${VAR#http://} |
www.linux.com.br |
Indicamos o que será excluído depois do caracter '#' | ||
3. Mostrar tudo após uma posição | VAR="http://www.g00gle.com "echo ${VAR:7} |
www.g00gle.com |
Depois do ':' indicamos o índice. Como é em C, o primeiro índice é 0, o segundo é 1 ..., o oitavo é 7 ... etc. |
||
4. Mostrar entre alguns caracteres | VAR="123456789" echo ${VAR:2:5} |
34567 |
Primeiro, faz-se o índice 2, que começa no caracter '3'. No índice 5, a contagem já começa no índice 2 (5 caracteres a partir do índice 2), aí morre no caracter '7'. |
||
5. Elimina o caracter e tudo a ESQ. | VAR="dominio@linux" echo ${VAR#*@} |
linux |
Bom, aqui indicamos o caracter a ser deletado e tudo a sua esquerda, depois da string "#*". | ||
6. Elimina o caracter e a DIR. | VAR="dominio@linux" echo ${VAR%@*} |
dominio |
Já aqui, indicamos o caracter a ser deletado e tudo a sua direita, entre a string "%*". | ||
7. Excluir até um valor | EXC=":senha" VAR="root:senha:/bin/bash" echo ${VAR%%$EXC*} |
root |
Como o exemplo 6 , só que podemos indicar strings ao invés de somente um caracter. O que será excluído tem que ficar entre "%%" e '*'. |
||
8. Excluir de um valor até o fim | EXC="senha:" VAR="root:senha:/bin/bash" echo ${VAR##*$EXC} |
/bin/bash |
Como o exemplo 5, só que podemos indicar strings ao invés de somente um caracter. O que será excluído deve ficar depois do "##*". |
||
9. Troca de strings | VAR="c1:c2:c3" echo ${VAR/:/x} |
c1xc2:c3 |
Funciona como o comando sed. Troca a primeira ocorrência de ':' por 'x', para trocar tudo: echo ${VAR//:/x} Usa-se duas barras. Nada impede de trocar por strings: echo ${VAR//:/-CC-} Saída: c1-CC-c2-CC-c3 |
||
10. Comprimento da variável | VAR="tenho 19 caracteres" echo ${#VAR} |
19 |
Funciona como o comando expr lenght | ||
11. Listar nomes de variáveis | echo ${!va*} |
listar todas as variáveis que começam com "va" |
12. Listar nomes de variáveis | echo ${VAR:-"eu não existo"} |
eu não existo |
Se VAR for nula, mostra "eu não existo", se não for nula, mostra o conteúdo dela. | ||
Fonte: http://www.vivaolinux.com.br/dicas/verDica.php?codigo=7336 |
Operadores de Teste Comuns | ||
Shell Bourne/Korn | Shel C | E verdadeira se... |
-r arquivo | -r arquivo | existir arquivo legivel |
-w arquivo | -w arquivo | existir arquivo gravavel |
-x arquivo | -x arquivo | existir arquivo executavel |
-b | -b | existir arquivo especial de bloco |
-c | -c | existir arquivo especial de caracter |
-d dir | -d dir | existir o diretório |
-e | verdadeiro se o arquivo existir | |
-f | verdadeiro se o arquivo contem texto | |
-o | verdadeiro se o usuário for o dono | |
-s arquivo | ! -z arquivo | arquivo existir e tiver dados |
-z | arquivo existir e não tiver dados | |
-z cadeia | tamanho da cadeia = 0 arquivo vazio | |
-n cadeia | tamanho da cadeia > 0 | |
cad1 = cad2 | == | cadeia 1 igual a cadeia 2 |
cad1 != cad2 | != | cadeia 1 diferente a cadeia 2 |
"cadeia" | cadeia não nula |
Comparações Numericas | ||
Shell Bourne/Korn | Shel C | Significa |
-eq | == | igual (equal) |
-ne | != | diferente (not equal) |
-gt | > | maior que (greather than) |
-ge | >= | maior ou igual a (greater or equal) |
-lt | < | menor que (less than) |
-le | <= | menor ou igual a (less or equal) |
! | ! | não |
-a | && | e |
-o | || | ou |
(...) | (...) | agrupamento para precedencia |
Com variáveis internas | ||
% | modulo | |
++ | soma 1 | |
-- | decrementa 1 |
Redirecionamento de Entrada e Saida | ||
Shell Bourne/Korn | Shel C | Ação |
< arquivo | < arquivo | toma stdin de um arquivo |
> arquivo | > arquivo | coloca stdout em um novo arquivo |
>> arquivo | >> arquivo | anexa a um arquivo existente (ou o cria) |
<< delimitador | << delimitador | toma stdin do Shell ate o delimitador |
4< arquivo | abre arquivo como descritor de arquivo 4 | |
<&4 | le do descritor de arquivo 4 | |
2> arquivo | coloca o stderr em um novo arquivo | |
>&3 | escreve no descritor de arquivo 3 | |
0<&4 | usa descritor de arquivo como stdin | |
2>&1 | >& | reune stdout com stderr |
2>>&1 | >>& | anexa stdout a stderr |
>!arquivo | grava sobre noclobber e cria novo arquivo | |
>>!arquivo | grava sobre noclobber e anexa a um novo arquivo | |
<&- | <&- | fecha descritor de arquivo 0 (stdin) |
2>&- | fecha descritor de arquivo 2 (stderr) | |
2| | canaliza stderr para o próximo comando | |
2>&1| | |& | reune stderr e stdin e canaliza os resultados |
Alguns comandos do editor vi do unix / linux | ||
Comando | Ação | |
a | -incluir apos a posição do cursor | |
A | -incluir apos o último caracter da linha atual | |
:ln append | adicionar texto em ln+1, ln é o número da linha, escrever o texto após o comando (ponto solitário na última linha indica fim de comando) Fonte: (vimcard.txt) | |
:ln insert | adicionar texto em ln, ln é o número da linha, escrever o texto após o comando (ponto solitário na última linha indica fim de comando) Fonte: (vimcard.txt) | |
b | -move o cursor para o início da próxima palavra a esquerda | |
B | -idem ( b ) | |
C | -substitui os caracteres da posição do cursor ao fim da linha atual, entra no modo de inserção | |
cc | -apaga todos os caracteres da linha atual e entra no modo de inserção | |
cw | -apagar até o fim da palavra e entrar no modo de inserção | |
c$ | -apagar até o fim da linha e entrar no modo de inserção | |
c^ | -apagar até o começo da linha e entrar no modo de inserção | |
d$ | -apaga da posição do cursor ao fim da linha | |
d^ | -apaga da posição do cursor ao início da linha | |
(n)dl | deleta um caracter sobre o cursor | |
diB | deleta interior de {} | |
daB | deleta interior de {} e {} | |
dib | deleta interior de () | |
dab | deleta interior de () e () | |
(n)d) | -deleta a próxima frase adjacente | |
(n)d} | -deleta o próximo parágrafo adjacente | |
(n)d( | -deleta a frase anterior adjacente | |
(n)d{ | -deleta o parágrafo anterior adjacente | |
dfc ou d(n)fc | -deleta o texto até encontrar o primeiro caracter c após a posição inicial do cursor, incluindo o caracter | |
dFc ou d(n)Fc | -deleta o texto até encontrar o primeiro caracter c anterior a posição inicial do cursor, incluindo o caracter | |
dtc ou d(n)tc | -deleta o texto até encontrar o primeiro caracter c após a posição inicial do cursor, excluindo o caracter | |
dTc ou d(n)Tc | -deleta o texto até encontrar o primeiro caracter c anterior a posição inicial do cursor, excluindo o caracter | |
(n)dd | -deleta linha atual | |
D | -deleta os caracteres da posição do cursor ate o final da linha | |
e | -avanca o cursor para o final da próxima palavra | |
ge | -avanca o cursor para o final da palavra anterior | |
E | -avanca o cursor para o final da próxima palavra | |
(n)f | -procura pelo primeiro caracter digitado após (ver uso com d) | |
ex.: ft -> procura pela próxima letra t | ||
3ft -> procura pela terceira ocorrência da letra t | ||
(n)F | -procura pelo primeiro caracter digitado antes (ver uso com d) | |
g | -move o cursor para o primeiro caracter da primeira linha do arquivo | |
(n)G | -move o cursor para o primeiro caracter da última linha do arquivo ou até o número da linha informado. | |
ga | -mostra valor ASCII do caracter sob cursor | |
gf | -abre arquivo cujo nome está sob cursor | |
guu | -Estando sobre qualquer parte da palavra converte-a para minúsculo | |
gUU | -Converte-a para maiúsculo | |
CTRL g | -exibir informações sobre o arquivo atual | |
gCTRL g | -Exibe linha, coluna, palavras em relação 'a posição autal do cursor. Col 1 of 216; Line 1 of 317; Word 1 of 8531; Byte 1 of 52612 | |
(n)h | -move o cursor para o caracter a esquerda do cursor | |
(n)H | -move o cursor para a linha n do topo da janela, omitido n vai para o primeiro caracter da primeira linha da tela | |
i | -entra no modo de inserção a partir da posição do cursor | |
I | -entra no modo de inserção no início da linha atual | |
(n)j | -move o cursor uma linha para baixo | |
J | -move a linha abaixo do cursor para o final da linha atual | |
gJ | -move a linha abaixo do cursor para o final da linha atual sem espaços entre elas | |
(n)K | -move o cursor uma linha para cima | |
(n)l | -move o cursor para o caracter a direita do cursor | |
(n)L | -move o cursor para a linha n da base da janela, omitido n vai para o primeiro caracter da última linha da tela | |
gm | -move o cursor para o meio da linha atual | |
M | -move o cursor para a linha do meio da janela | |
n | -repete a última pesquisa da posição do cursor ao fim do arquivo | |
N | -repete a última pesquisa da posição do cursor ao início do arquivo | |
vai para o próximo arquivo editado (edição multipla) | ||
(n)o | -inseri linha abaixo da linha atual | |
(n)O | -inseri linha acima da linha atual | |
p | -recupera do buffer a linha salva com o comando yy depois da posição do cursor | |
]p | -recupera do buffer a linha salva com o comando yy depois da posição do cursor com o recuo ajustado | |
gp | -recupera do buffer a linha salva com o comando yy depois da posição do cursor, deixando o cursor depois do texto novo | |
P | -recupera do buffer a linha salva com o comando yy antes da posição do cursor | |
[p | -recupera do buffer a linha salva com o comando yy antes da posição do cursor com recuo ajustado | |
gP | -recupera do buffer a linha salva com o comando yy antes da posição do cursor, deixando cursor depois texto novo | |
q: | -edita o histórico da linha de comandos | |
q? | -edita o histórico de pesquisa | |
q/ | -edita o histórico de pesquisa | |
Q | -sai do modo visual entra no modo linha a linha para retornar digite vi | |
(n)r | -substitui o caracter atual pelo próximo digitado | |
(n)R | -substitui todos os caracteres da posição do cursor ao final da linha | |
s | -substitui o caracter atual pelo próximo digito e entra modo inserção | |
S | -idem cc | |
(n)t | -procura pelo primeiro caracter digitado após, posicionando-se antes dele (ver uso com d) | |
ex.: tx -> procura pela próxima letra x | ||
3tx -> procura pela terceira ocorrência da letra t | ||
(n)T | -procura pelo primeiro caracter digitado antes, posicionando-se antes dele (ver uso com d) | |
u | -desfaz a última alteração efetuada na linha atual ( ver em modo visual tem outra função) | |
U | -desfaz todas as aterações efetuadas na linha atual ( ver em modo visual tem outra função) | |
Ctrl R | -refazaz uma ação desfeita | |
w | -move o cursor para o início da próxima palavra a direita do cursor | |
W | -idem w | |
(n)x | -deleta o caracter a direita do cursor (delete) | |
(n)xp | -iverte posicionamento de caracteres | |
(n)X | -deleta o caracter a esquerda do cursor (backspace) | |
(n)yy | -salva no buffer a linha atual | |
ex.: 3yy salva no buffer a linhaa do cursor e duas abaixo | ||
para copia-las em outro local, va ate o loval e digite p | ||
O | -move o cursor para o primeiro caracter da linha atual | |
$ | -move o cursor para o último caracter da linha atual | |
/xxx | -efetua pesquisa da posição do cursor ao fim do arquivo (xxx =texto) | |
?xxx | -efetua pesquisa da posição do cursor ao início do arquivo (xxx =texto) | |
. | -repete o último comando executado | |
:$ | -idem G | |
(n)| | -Vai para a coluna n da linha | |
{ | -começo parágrafo anterior (ver uso com d) | |
} | -começo parágrafo posterior (ver uso com d) | |
( | -começo sentença anterior (ver uso com d) | |
) | -começo sentença posterior (ver uso com d) | |
(n)<< | -Desloca n linhas a esquerda | |
(n)>> | -Desloca n linhas a direita | |
v | -Entra no modo visual | |
o | -Estando em modo visual, alterna posição do cursor com início e fim do destaque | |
gv | -Estando em modo visual, inicia destaque na area visual anterior | |
aw | -Estando em modo visual, seleciona uma palavra | |
as | -Estando em modo visual, seleciona uma sentença | |
ap | -Estando em modo visual, seleciona um parágrafo | |
ab | -Estando em modo visual, seleciona um bloco ( ) | |
aB | -Estando em modo visual, seleciona um bloco { } | |
u | -Estando em modo visual, alterna texto selecionado para minúsculo. | |
U | -Estando em modo visual, alterna texto selecionado para miúsculo. | |
V | -Seleciona linha a linha, é só movimentar o cursor | |
CTRL D CTRL U | -rola meia página acima, abaixo | |
CTRL F CTRL B | -rola página acima, abaixo | |
zt ou z[Enter] | -põe linha atual topo da janela | |
zz ou z | -põe linha atual centro da janela | |
zb ou z- | -põe linha atual base da janela | |
zh zl | -rola um caracter a direita, esquerda | |
zH zL | -rola meia tela a direita, esquerda | |
CTRL Ws ou :split[Enter] | -divide janela em duas | |
CTRL Wv ou :vsplit[Enter] | -divide janela em duas | |
CTRL Wn ou :new[Enter] | -cria nova janela vazia | |
CTRL Wo ou :on[Enter] | -coloca janela atua em uma tela | |
CTRL Wj CTRL Wk | -move para janela abaixo, acima | |
CTRL Ww CTRL W CTRL W | -move para janela abaixo, acima (troca) | |
CTRL A | -Estando no modo de Inserção insere o texto inserido anteriormente. | |
CTRL e | -Estando no modo de Inserção copia a linha abaixo na linha atual caracter a caracter. | |
CTRL E | -Rola todo o texto para cima. | |
CTRL Y | -Rola todo o texto para baixo. | |
CTRL XE | -Estando no modo de Inserção rola todo o texto para cima. | |
CTRL XY | -Estando no modo de Inserção rola todo o texto para baixo. | |
CTRL N | -Estando no modo de Inserção completa o texto com palavra (pesquisa anterior). | |
CTRL P | -Estando no modo de Inserção completa o texto com palavra (pesquisa posterior). | |
CTRL U | -Estando no modo de Inserção apaga todos caracteres inseridos linha atual. | |
CTRL W | -Estando no modo de Inserção apaga palavra antes do cursor. | |
CTRL T | -Estando no modo de Inserção desloca à direita a largura 1 desloc. | |
CTRL L | -redesenha tela | |
CTRL v | -Seleciona bloco é só movimentar o cursor | |
ggVG | -Seleciona todo o arquivo | |
:w | -grava o arquivo atual | |
ex.: :w -> grava o arquivo atual | ||
:w teste -> grava o arquivo atual com o nome teste | ||
:e arq.txt | -abre o arquivo arq.txt | |
:sp | -abre o mesmo arquivo já aberto em outra janela | |
:sp outroarq.txt | -abre o arquivo outroarq.txt em outra janela | |
:enew | -abre o um novo arquivo | |
:sp novoarq.txt | -abre novoarq.txt em outra janela | |
:w! | -força a gravação do arquivo atual | |
:q | -sai do vi sem gravar | |
:q! | -força a saída da edição atual | |
:wq | -grava e sai da edição atual | |
:wq! | -força a gravação e a saída da edição atual | |
ZZ | -Salva e sai sem precisar digitar os : | |
/palavra | -Procura palavra da posição do cursor para frente | |
?palavra | -Procura palavra da posição do cursor para trás | |
/primeira\|segunda | -Procura simultâneamente a palavra primeira e segunda | |
% | -Digitado sobre um parentese, colchete ou cheve procura o seu correspondente. | |
:%!xxd | -Converte o arquivo para hexadecimal. | |
:%!xxd -r | -Converte o arquivo para decimal. | |
:center | -Centraliza texto | |
:left | -Alinha a esquerda | |
:right | -Alinha a direita | |
:1,4 c 13 | -copia as linhas de 1 a 4 abaixo da linha 13 | |
:1,4 m 13 | -move as linhas de 1 a 4 para a linha 13 | |
:1,4 w teste | -move as linhas de 1 a 4 no arquivo de nome teste | |
1,10m$|g/Essas/ p | -move as linhas de 1 a 10 para o final do arquivo e localiza as palavras Essas | |
:1,10s/Essas/Aquelas/|1,10m$ | -Substitui da linha 1 a 10 as palavras Essas por Aquelas e depois move as mesmas linhas para o fim do arquivo. | |
:let i=0|%g/animal/let i=i+1 :echo i | -Conta as ocorrências da palavra animal e grava na variável i echo i mostra o valor acumulado | |
:g/azul/s//verde/g | -substitui todas as ocorrências da palavra azul por verde | |
:g/azul/s//verde/ | -substitui a primeira ocorrência em cada linha da palavra | |
azul por verde | ||
:1,$s,^,rm | Acrescenta rm no início de cada linha | |
:1,$s,$,rm | Acrescenta rm no final de cada linha | |
:v/./.,/./-1join | Para remover linhas em branco consecutivas de um arquivo | |
:v/./d | E para remover todas as linhas em branco de um arquivo | |
:g/^$/d | Idem ao anterior | |
:g/^[ ^I]*$/d | Para remover linhas em branco que nao sejam vazias, mas que contenham espaços ou tabulacoes, emitir o comando | |
:s/velho/novo | substitua a 1a ocorrência de velho por novo na linha corrente | |
:% s/velho/novo/ | substitua em todo o arquivo (%) a 1a ocorrência de velho por novo em cada linha | |
:% s/velho/novo/g | substitua em todo o arquivo (%), todas (g) as ocorrências de velho por novo | |
:% s/velho/novo/gc | igual ao anterior, mas pedindo confirmação para cada substituição | |
:5,7s/velho/novo | substitui a palavra velho por novo que esteja entre a linha 5 e 7 inclusive | |
:% s/^String[0-9]//gc | expressões regulares também funcionam, igual ao sed | |
:% s/./\u&/gc | converta para maiúsculas (\u) o 1o caracter (.) de cada linha (exclusiva vi/perl, no sed não funciona) | |
~ | inverte minúscula para maiúscula e vice versa | |
5~ | inverte 5 próximos | |
g~$ | inverte até o fim da linha |
Configuração do VI | ||
Comando | Ação | |
:set | - mostra a configuração atual do vi | |
:set all | - mostra todas as opções de configuração do vi | |
:set number | - mostra os números das linhas | |
:set nonumber | - não mostra os números das linhas | |
:set magic | - Liga e desliga a interpretacao de caracteres magicos como [a-z] vai | |
procurar pelo intervalo de a ate z com nomagic vai procurar pela string "[a-z]" | ||
E o meso que escapar com contrabarra \[a-z\] | ||
:ab xxx texto | Toda vez que digitar xxx substitui por texto, veja exemplos: | |
ab hr <HR> | ||
ab pp <P> | ||
ab ht <HTML> | ||
ab=abreviaçoes e coloca no .exrc | ||
:unab xxx | Retira a abreviação | |
:map ,d :r!date<cr> | Ao digitar ,d insere a data ao final do arquivo | |
:map <c-a> iOla Mundo <esc> | Mapeia o CTRL A para incluir o texto Ola Mundo, saindo do modo de inserção com ESC | |
:map <F12> ggVGg | Seleciona todo o arquivo | |
:imap <c-l> <esc><right>a | pular fora dos parênteses, colchetes e chaves | |
:imap <c-h> <esc><left>a | pular fora dos parênteses, colchetes e chaves | |
:nmap <c-b> A<CR><Esc>j | Cria uma linha em branco abaixo da linha atual e vai para a próxima linha | |
:nmap <c-b> o<Esc>j | Equivale ao anterior | |
:map <c-b> <esc>mz:%s/\s\+$//g<cr>`z | Elimina os espaços em branco no final da linha | |
.vimrc | .vimrc do voyeg3r | |
.vimrc | .vimrc do Ivan Carlos da Silva Lopes | |
http://aurelio.net/doc/vim | Aurelio sobre o vim |
Configuração do VI (continuação) |
Explicações sobre .exrc e editar direto em uma linha |
o redirecionamento em linha de comando o vim tem a opção de abrir o que for redirecionado como se fosse um arquivo, basta acrescentar -, veja o exemplo:ps aux | vim - |
A variável exinit="set number redraw" é utilizada para configuração do vi |
Pode-se também configurar o vi pelo arquivo .exrc, por exemplo que programa em C |
no linux poderia ter um .exrc com as seguintes linhas: |
set autoindent |
set shiftwidth=4 |
set backspace=2 (do linux) |
set ruler (do linux) |
Pode-se ir direto para uma linha quando se edita um arquivo ex.: |
vi +10 relat.rel (vai direto para a linha 10) |
Situações com o VIM do Linux | |
Comando | Ação |
Como o editor vi tem o .exrc o VIM tem o .vimrc para configurações | |
chamado .vimrc localizado no diretório home do usuário. | |
:set nocp | - Modo "No compatible" . Valores padrão para algumas opções são adequados ao Vim, não Vi. |
:set nowrap | - Desliga quebra de linhas. As linhas vao ficar longas, ultrapassando a margem direita. |
:set ruler | - Mostra no rodape da tela a posição horizontal e vertical do cursor. |
:set ve=all | - Permite mover com as setas para areas onde não tem texto. |
:set vb | - Desliga o som de beep (no gvim a tela pisca quando houver erros). |
:set ignorecase (ic) | - Busca não diferencia maiusculas e minusculas. |
:set ai | - Ao criar nova linha, usa indentação da linha anterior. |
:set visualbell | - pisca a tela ao inves de bipar |
:set sw=1 | - ShiftWidth: número de colunas para o comando > |
:set autowrite (aw) | - salva a cada alteração |
:set hlsearch (hls) | - ilumina a última procura |
:set ignorecase (ic) | - case insensitive na busca |
:set incsearch (is) | - ilumina procura enquanto digita |
:set showmatch (sm) | - mostra o casamento de {},[],() |
:set tabstop=4 | - Tabs são do tamanho de 4 espaços |
:set expandtab (et) | - Tabs são convertidos para espaços |
:retab | - converter os TABs ja existentes para espaços |
:set shiftwidth=4 | - Quando o "autoindent" faz um tab, ele é do tamanho de 4 espaços. |
:set softtabstop=4 | - Tecla Backspace volta 4 espaços quando estiver numa identação. |
:set backspace=indent,eol,start | - Tecla Backspace funciona sobre autoindents, quebra de linha, e inicio de inserção. |
:set title | - Mostra nome do arquivo no rodape da tela. |
:set ttyfast | - Envia mais caracteres ao terminal, melhorando o redraw de janelas. |
:set background=dark | - Usa cores que ficam melhor com fundo preto, quando usando cores em edição de codigo fonte. |
:syntax on | - Ativa as cores para edição de codigo fonte (syntax highlighting) |
Fonte: http://www.onlinux.com.br/dicas/dicasinformatica/maisdicasvi.txt | |
Leia mais em http://www.zago.eti.br/script/vi.txt |
Edição múltiplas de arquivos o VI/VIM do Linux | |
Comando | Ação |
vim -o arq1.txt arq2.txt | - Editar os arquivos na mesma janela dividida na horizontal |
vim -O arq1.txt arq2.txt | - Editar os arquivos na mesma janela dividida na vertical |
vi -d arq1.txt arq2.txt | - Ver diferenças entre arquivos |
CTRL Wn | Nova Janela |
CTRL Wn | Dividir a Janela |
CTRL Wv | Dividir verticalmente |
CTRL Wc | Fechar |
CTRL Wo | Fechar outra(s) |
CTRL WR | Girar para cima |
CTRL Wr | Girar para baixo |
CTRL W= | Mesmo Tamanho |
CTRL W_ | Altura Maxima |
CTRL W1_ | Altura Minima |
CTRL W| | Largura Maxima |
CTRL W1| | Largura Minima |
CTRL WK | Mover para cima |
CTRL WJ | Mover para Baixo |
CTRL WH | Mover para esquerda |
CTRL WL | Mover para Direita |
CTRL WW | Mover para próxima janela |
Usando o vi para examinar diferenças entre arquivos | |
vimdiff arq1.txt arq2.txt | - abri os dois arquivos, lado a lado, com as diferenças em texto destacado. |
vi -d arq1.txt arq2.txt | - Ver diferenças entre arquivos |
vimtutor | - Guia básico do iniciante no vi |
Fonte: http://www.onlinux.com.br/dicas/dicasinformatica/vi.htm | |
Substituição com arquivo externo | |
Conteúdo de troca.vi::%s/reação/REAÇÃO/g :%s/fusão/FUSÃO/g :wq Execute vi -s troca.vi arq.txt | Será executado no arquivo arq.txt os comandos contidos em troca.vi e o arquivo arq.txt será salvo e fechado com as alterações efetuadas |
Encriptado arquivo | |
vi -x arq.txt | - Será solicitada uma senha e o arquivo ficará encriptado. |
Fonte: http://geraldo-ribeiro.sites.uol.com.br/vim.htm | |
Recursos diversos do vi | |
fgrep -l animal *.txt | vi - | - Abre no vi um novo arquivo contendo os nomes dos arquivos que contenham a palavra animal em seu conteúdo. |
vi `fgrep -l animal *.txt` | - Diferentemente do anterior, este comando abre os arquivos que contém a palavra animal em seu conteúdo. |
man sed | col -b | vim - | - Edita no vi um novo arquivo contendo o texto do man sobre o comando sed |
read !man dc|col -b ou read !dc --help | - Equivale ao anterior, só que neste você já esta com o vi aberto |
3,10!cat -n|tr '^I' '-' | Numera dentro do texto da linha 3 até a 10 usando o cat -n |
1,$!cat -n|tr '^I' '-' | Numera dentro do texto todas as linhas do arquivo usando o cat -n |
let i=0|2,20g/^/let i=i+1|s//\=i/g | Numera dentro do texto da linha 2 até a 20, usando variáveis |
let @s=0|2,20g/^/let @s=@s+1|s//\=@s/g | Numera dentro do texto da linha 2 até a 20, usando registro |
:let @a=".!seq 5" @a | Executa o comando seq, que conta de 1 até 5 e guarda o valor no registro @a, depois executa o comando contido no registro :@a inclui estes valores no arquivo |
:let @s=":%!sort -u" @s | Executa o comando sort nas linhas do arquivo e guarda o resultado no registro @s, depois executa o comando contido no registro :@s para ordenar as linhas do arquivo |
call setline(5,strftime("%d.%m.%Y %X")) | Insere string na linha especificada, neste caso insere data e hora na linha 5, mas apaga o que estava nela. |
Dois exemplos para demonstrar que a ordem em que os filtros são passados o efeito pode ser diferente: | |
ls -l | tail +2 | awk '{print $9}' | sed 's/^/)/' | cat -n | sed 's/^/(/' | tr "\t" " " | tr -s " " | vi - | Explicando: ls -l lista dos arquivos do diretório tail +2 tira linha de cabeçalho awk pega o campo 9 que é o nome do arquivo O primeiro sed coloca o parentese fechando antes do nome do arquivo cat -n coloca os números O segundo sed coloca o parentese abrindo, antes dos números O primeiro tr troca um tab por um espaço em branco O segundo tr elimina espaços em brancos repetidos e o vi - abre o resultado no edit vi |
ls -l | tail +2 | awk '{print $9}' | cat -n | tr "\t" ") " | tr -s " " | tr "^ " "(" | vi - | O mesmo comando assima pouco modificado, execute e veja a diferença nos arquivos gerados |
Fonte: http://aurelio.net/doc/vim/vim-dicas-ivan.html | |
Autocompletar palavras / buscar no dicionário | |
set dictionary=~/.meudic.txt | Dicionario para procurar o auto-complemento de palavras, define um dicionário padrão, pode ser colocado no .exrc |
imap <F7> <c-n> | A tecla F7 Completa uma palavra |
imap <F8> <c-x><c-n> | a tecla F8 Da a sequencia a essa palavra |
imap <c-d> <c-x><c-k> | Ctrl + D Procura no dicionario |
Fechamento automático de (, { e [ | |
imap ( () | Fecha automaticamente o parentesi quando abre um |
inoremap ( () | Fecha automaticamente o parentesi quando abre um |
inoremap [ [] | Fecha automaticamente o colchete quando abre um |
inoremap { { | Fecha automaticamente uma chave na linha abaixo à que foi aberta |
map! 'a á map! 'A Á map! ~a ã map! ~A Ã map! `a à map! `A À map! 'e é map! 'E É map! ^e ê map! ^E Ê map! 'i í map! 'I Í map! 'o ó map! 'O Ó map! ~o õ map! ~O Õ map! "u ü map! "U Ü map! ,c ç map! ,C Ç | Exemplo do uso de map! para substituir palavras acentuadas pelo seu correspondente em code html |
vi /etc/printcap
l8) echo "\033\060\c"
configura a impressora para 1/8
;;
o arquivo das impressoras fica /usr/spool/lp/admis/lp/interfaces
Instalação/Configuração via linha de comando:
1 - cria diretório lp2 dentro de /var/spool/lpd
2 - doa ao grupo lp
3 - copia o .config de outra impressora
4 - /etc/rc.d/init.d/lpd
restart (pode tmb executar stop depois start)
vi /etc/smb.conf
[teste]
path= /oracle/dat0/teste
read only = No
Guest = Yes
[dataflex]
comment = diretório dataflex
available = yes
browseable = yes
public = yes
guest only = no
writable = yes
only user = no
path = /users/dataflex
force create mode = 0777
force directory mode = 0777
force group = dataflex
force user = dataflex
allow hosts = 192.168.212.1, 192.168.212.2, 192.168.212.13
Para montar a unidade c: de uma maquina como partição do Linux
smbmount //ubiratan/c /mnt/rede
Restarta da seguinte forma:
/etc/rc.d/init.d/smb reload
/etc/rc.d/init.d/smb restart
Para completar este assunto ver depois dicas sobre o Samba em:
http://www.onlinux.com.br/dicas/dicasinformatica/samba30.txt
Para definir sites proibidos e usuários librados edita os arquivos:
/etc/squid/data/sites-proibidos.txt
/etc/squid/data/users-liberados.txt
depois executa /etc/init.d/squid reload (stop start restart)