Search
Archives

You are currently browsing the Só Linux blog archives for novembro, 2009.

Bookmarks

Archive for novembro, 2009

Deixando o prompt colorido

A distribuição Gentoo possui um prompt colorido ao acessar o shell, veja aqui como deixá-lo para a sua distribuição também.

Abra o arquivo .bashrc (faça um backup dele antes ok?) que está no seu diretório home de usuário (geralmente /home/seunome ou /root se você estiver como root).

Vá ao final do arquivo e, conforme a tabela que está no tópico [Usando cores e efeitos no shell] você pode escolher as cores para seu prompt definindo-as na variável PS1 e PS2.

A variável PS1 é a que mostra o texto no seu prompt, como:

jose@jose-desktop:~$ _

E a variável PS2 é aquele “>” que aparece quando você digita um comando com mais de uma linha, por exemplo:

jose@jose-desktop:~$ echo "
 > Ola"

Geralmente a variável PS1 tem o seguinte conteúdo:

PS1="\u@\h:\w\$ "

onde:
\u Exibe o nome do usuário (username)
\h Exibe o nome da máquina (hostname)
\w Exibe o caminho atual

E a PS2 é simplesmente:

PS2=" > "

Para apenas o nome do seu usuário aparecer em vermelho, conforme o exemplo da tabela de código de cores [aqui], definiremos por exemplo:

PS1="\033[31m\u\033[0m@\h:\w\$ "

Resultado final:
jose@jose-desktop:~$

Se quiser algo como:
jose@jose-desktop:~$

em uma linha só ficará grande, então você pode fazer dessa forma:

PS1="\033[35m\u"
PS1="$PS1\033[34m@"
PS1="$PS1\033[36m\h"
PS1="$PS1\033[32m:"
PS1="$PS1\033[33m\w"
PS1="$PS1\033[31m\$\033[0m "

Teste antes abrindo um terminal novo para ver se está tudo ok, do contrário, restaure o backup do .bashrc

Outra forma mais rápida de ele atualizar o seu prompt após essa edição é rodar o comando

source .bashrc

Detalhe importante para quem usa distribuições baseadas no Red Hat, como o próprio Red Hat, CentOS, Mandriva e Fedora, O arquivo “.bashrc” em alguns casos é o “.bash_profile”, então substitua todos os exemplos com .bashrc por .bash_profile

O que acha de editar a variável PS2 para deixá-la algo como o exemplo abaixo?

jose@jose-desktop:~$ for x in {1..7}
>>>>>> do
>>>>>> echo $x
>>>>>> done

Divirtam-se :-)

Usando cores e efeitos no shell

É possível lidarmos com cores no shell e com efeitos também.

As cores comuns já estão padronizadas e alguns dos efeitos também, porém as cores brilhantes e alguns dos efeitos ainda estão passando por esse processo.

Na tabela abaixo os resultados foram testadas nos seguinte softwares:

- Terminal do Mac OS X
- Terminal do Gnome (gnome-terminal);
- Terminal do KDE (konsole);
- Shell nativo do Unix (quando nenhuma interface gráfica está carregada);
- PuTTY (conectado por SSH a partir de um computador com Windows);

[m] mac terminal – [g] gnome-terminal – [k] konsole – [n] native unix shell – [x] native X shell – [p] putty

Efeitos Cor dos caracteres Cor de fundo
0 Voltar tudo ao normal
m [OK] – g [OK] – k [OK] – n [OK] – x[OK] – p [OK]
 30 Preto  40 Preto
1 Negrito (com cor brilhante)
m [OK] – g [OK] – k [OK] – n [OK] – x [OK] – p [--]
 31 Vermelho  41 Vermelho
2 Escuro
m [--] – g [OK] – k [--] – n [OK] – x [--] – p [--]
 32 Verde  42 Verde
3 (indefinido)
m [--] – g [--] – k [--] – n [--] – p [--]
 33 Amarelo  43 Amarelo
4 Sublinhado
m [--] – g [OK] – k [OK] – n [--] – p [OK]
 34 Azul  44 Azul
5 Pisca
m [OK] – g [--] – k [OK] – n [OK] – p [--]
 35 Magenta  45 Magenta
6 (indefinido)
m [--] – g [--] – k [--] – n [--] – p [--]
 36 Ciano  46 Ciano
7 Invertido
m [OK] – g [OK] – k [OK] – n [OK] – p [OK]
 37 Branco  47 Branco
8 Invisível
m [OK] – g [OK] – k [--] – n [--] – p [--]
 90 Preto Brilhante 100 Preto Brilhante
9 Tachado
m [--] – g [OK] – k [--] – n [--] – p [--]
 91 Vermelho Brilhante 101 Vermelho Brilhante
   
 
 92 Verde Brilhante 102 Verde Brilhante
   
 
 93 Amarelo Brilhante 103 Amarelo Brilhante
   
 
 94 Azul Brilhante 104 Azul Brilhante
   
 
 95 Magenta Brilhante 105 Magenta Brilhante
   
 
 96 Ciano Brilhante 106 Criano Brilhante
   
 
 97 Branco Brilhante 107 Branco Brilhante

Exemplos:

Para imprimirmos o nome “Alice” apenas em verde, ou seja,  Alice 

echo -e "\033[32m Alice \033[0m"

Dá para fazer combinações de um ou mais efeitos com cores, e de cores com cores também.

"Alice" com fundo vermelho brilhante e texto em negrito:  Alice 

echo -e "\033[101;1m Alice \033[0m"

"Alice" com fundo Ciano Brilhante e texto Azul:  Alice 

echo -e "\033[106;34m Alice \033[0m"

"Alice" com fundo Verde, texto Amarelo, sublinhado e negrito:  Alice 

echo -e "\033[33;42;4;1m Alice \033[0m"

Mas por que tenho sempre que finalizar com "\033[0m" ?
Porque ele reseta (retira) a configuração de cores. Se essa sequencia não for colocada, todo o seu shell terá a cor e/ou o efeito aplicados até então.

É possível também [deixar o prompt do seu shell colorido] com estas mesmas informações.

Os formatos de arquivos UNIX, DOS e MAC e como convertê-los

Os arquivos de tipo texto puro (geralmente txt) basicamente ficam disponíveis em três formatos que serão explicados a seguir: UNIX, DOS e MAC, mas antes você deve entender o que é o CR (\r) e o LF (\n).

CR ou \r significa Carriage Return
LF ou \n significa Line Feed

Na época das impressoras matriciais, quando você mandava imprimir algo, o caractere CR era entendido pela impressora como Retornar o carro (cabeça de impressão) para o começo da linha e o caractere LF era entendido como subir a folha de modo que a impressão fosse para a próxima linha.

Formato Característica Descrição
UNIX LF \n Um caractere apenas caracteriza a quebra de linha. Um LF (\n) faz o Unix entender que se deve mandar um CR para a impressora antes.
- Não é recomendado que um arquivo do formato UNIX seja aberto pelo Bloco de Notas do Windows porque os LF que não são precedidos por CR serão trocados por quadrados. Recomenda-se usar o Wordpad.
DOS CR+LF \r\n - Dois caracteres caracterizam a quebra de linha nesse formato. Tanto o DOS quanto o Windows precisam que os caracteres CR (\r) e LF (\n) estejam especificados no arquivo.
- Somente agora o Windows está inserindo automaticamente:
  – um caractere CR quando este não está precedendo o LF;
  – um caractere LF quando este não está sucedendo o CR;
  – O DOS não faz estes ajustes automáticos.
- Os editores de textos do Unix, geralmente em modo de depuração, exibem o caractere CR como ^M.
MAC CR \r Este formato foi usado somente nos antigos Macintoshes. A partir do Mac OSX o formato de arquivos padrão passou a ser UNIX também porque o Mac OSX é baseado em Unix, assim como o Linux. Os Macintoshes automaticamente inseriam um LF após um CR caso o arquivo fosse enviado para a impressora.
- Os editores de textos do Unix, geralmente em modo de depuração, exibem o caractere CR como ^M.
- Não é recomendado que um arquivo do formato MAC seja aberto pelo Bloco de Notas do Windows porque os CR que não são sucedidos por LF serão trocados por quadrados. Recomenda-se usar o Wordpad.

Vários editores de textos conseguem converter o arquivo de um formato em outro formato. Para o Windows existe alguns, como os gratuitos Win32Pad e o Notepad++. No Mac e no Linux usaremos o próprio Vim.

Se você ainda não conhece o básico do Vim [clique aqui].

Em modo de comando usaremos :set fileformat ou, simplesmente, :set ff.

:set ff=unix # Converte o arquivo para o formato UNIX.
:set ff=dos  # Converte o arquivo para o formato DOS.
:set ff=mac  # Converte o arquivo para o formato MAC.

# Lembre de salvar o arquivo depois.

Usando o vi / vim

O vim é um editor de texto para o Unix com muitos recursos avançados capazes de surpreender qualquer editor de texto gráfico, no entanto, não espere editar um documento do Word nele (a não ser que você já tenha feito a engenharia reversa dele :-D).

Com o vim você pode criar um arquivo ou abrir um arquivo com o comando:

vim meuarquivo.txt
# Se o arquivo existe, o vim o abrirá.
# Se não existe, o arquivo é criado ao ser salvo.

O vim possui dois modos, o de comando e o de edição. Quando você abre o vim, ele carrega o modo de comando.

Para alternar do modo de comando para o modo de edição pressione a tecla i (“I” de Igreja), você verá que no rodapé aparecerá a palavra INSERT. O vim dessa forma ficará igual ao Bloco de Notas, Edit e qualquer outro editor de texto tradicional.

Para voltar ao modo de comando pressione a tecla ESC, perceba que a palavra INSERT do rodapé desaparecerá.

É somente no modo de comando que poderemos salvar o arquivo e sair do vim.

Se quisermos salvar um arquivo (ou criá-lo se ele não existir), deveremos.
- Pressionar o ESC para ir ao modo de comando (se você não estiver nele);
- Digitar :w (comando de salvar o arquivo, abaixo está a tabela com mais comandos);
- Pressionar o ENTER para executar o comando de salvar.

Tabela com mais comandos:

:w  # Salva o arquivo (ou cria e salva se ele não existe).
:w! # Salva forçado o arquivo (ou cria e salva forçado se ele não existe).
:q  # Sai sem salvar, mas não sai se o arquivo ter sido editado antes.
:q! # Sai forçado do vim, mesmo não tendo salvo o arquivo.
:x  # Salva o arquivo e sai do vim.
:x! # Salva o arquivo forçado (ou cria e salva forçado) e sai do vim.
:w arquivo2.txt  # É o "Salvar como" dando o nome de "arquivo2.txt".
:w! arquivo2.txt # É o "Salvar como" forçado.
:r arquivo2.txt  # Insere (como um include) o conteúdo de "arquivo2.txt"
                 # no local em que o cursor estiver posicionado.

Neste blog você verá mais coisas sobre o vim.

Se quiser, também pode consultar a [documentação online do Vim].

Selecionando colunas com o cut

O cut tem a sintaxe mais simplificada que o awk mas nem sempre tem a mesma precisão.

Para mostrar somente a primeira coluna do comando “ls -l”, rode:

ls -l | cut -f 1 -d " "

Mas e esse “-d”? Esse é o parâmetro do delimitador. No exemplo acima informamos ao cut que o delimitador deve ser o caractere espaço. Se quisermos mostrar tudo o que o “ls -l” mostra após o caractere de dois-pontos :, ou seja, a segunda coluna, então o comando é:

ls -l | cut -f 2 -d ":"

E se quiser usar o cut para mostrar uma coluna a partir de um arquivo, então usamos, por exemplo:

cut -f 1 -d " " arquivo.txt

Para maiores dúvidas sobre o cut:

cut --help
# ou
man cut

Contador de linhas, palavras e bytes em Unix com o comando wc

O comando wc é muito útil para fazer esse tipo de contagem, tanto em arquivo quanto em retorno de comandos.

wc arquivo.txt

Ele retornará três resultados: total de linhas, total de palavras e o total de bytes.

Você também pode saber a quantidade de linhas, palavras e bytes que um comando retorna, por exemplo:

ls -l | wc

É possível ser mais específico também. Se quiser saber só o total de linhas, então use:

wc -l arquivo.txt
# ou
qualquer comando | wc -l

Para saber mais sobre o comando wc:

wc --help
# ou então
man wc

Selecionando colunas com o awk

A sintaxe do awk é mais complexa que a do cut, mas ele tem precisão maior na seleção das colunas e ainda pode mostrar mais de uma conforme você desejar.

Se em casos, como o do comando “ls -l”, você quiser ver somente as permissões dos arquivos, as permissões estão na primeira coluna, então o comando que rodaremos é:

ls -l | awk '{print $1}'

Mas e se quisermos também exibir o tamanho dos arquivos que estão na quinta coluna? Usaremos nesse caso:

ls -l | awk '{print $1 $5}'

Dessa forma não vai ficar estético ;-), então por quê não deixarmos mais organizado?

ls -l | awk '{print "permissao: "$1", tamanho: "$5}'

O awk também pode selecionar colunas em um arquivo usando a mesma regra:

awk '{print $2}' arquivo.txt

Como perceberam, os delimitadores são os espaços e os tabs. Mas e se eu quiser, por exemplo, delimitar um .csv, que são tudo separados por ponto-e-vírgula “;”?

awk -F";" '{print $1}' arquivo.csv
# altera o delimitador para ; e mostra somente a primeira coluna (a $1)

O delimitador também pode ser dois ou mais caracteres em sequencia, por exemplo, “!@”, então o comando será:

awk -F"!@" '{print $3}' arquivoesquisito.txt
# altera o delimitador para !@ e mostra somente a terceira coluna (a $3)

Para saber mais sobre o awk:

awk --help
# ou então
man awk

Classificação, ordenação e eliminação de palavras repetidas usando sort

Para conhecermos melhor o sort, vamos supor que o comando “ls -l” retorne os seguintes resultados:

-rw-r--r--  1 glauco glauco 4556164485 2009-08-13 20:50 brasero.iso.bz2
-rwxr-xr-x  1 glauco glauco        609 2009-06-13 20:15 coresgeratudo.php
-rw-r--r--  1 glauco glauco     443788 2009-04-18 21:47 rpcrt4.dll.tar.gz
-rw-r--r--  1 glauco glauco     473422 2009-06-28 17:22 SnowCoberta.jpg

Perceba que a quinta coluna é o tamanho do arquivo em Bytes. Se quisermos ordenar de forma crescente o resultado do comando por tamanho, então usaremos:

ls -l | sort -k5n

# O resultado será:

-rwxr-xr-x  1 glauco glauco        609 2009-06-13 20:15 coresgeratudo.php
-rw-r--r--  1 glauco glauco     443788 2009-04-18 21:47 rpcrt4.dll.tar.gz
-rw-r--r--  1 glauco glauco     473422 2009-06-28 17:22 SnowCoberta.jpg
-rw-r--r--  1 glauco glauco 4556164485 2009-08-13 20:50 brasero.iso.bz2

E se quisermos ordenar na ordem decrescente, usaremos:

ls -l | sort -k5nr

# O resultado será

-rw-r--r--  1 glauco glauco 4556164485 2009-08-13 20:50 brasero.iso.bz2
-rw-r--r--  1 glauco glauco     473422 2009-06-28 17:22 SnowCoberta.jpg
-rw-r--r--  1 glauco glauco     443788 2009-04-18 21:47 rpcrt4.dll.tar.gz
-rwxr-xr-x  1 glauco glauco        609 2009-06-13 20:15 coresgeratudo.php

O parâmetro -n informa ao sort que você está classificando números e o -r faz a classificação na ordem inversa. Nesse exemplo usamos o -n pois sabemos que o tamanho dos arquivos são números. Se não colocássemos o -n o sort pensaria que você estaria tentando classificar um texto, veja:

ls -l | sort -k5

# Retornará

-rw-r--r--  1 glauco glauco     443788 2009-04-18 21:47 rpcrt4.dll.tar.gz
-rw-r--r--  1 glauco glauco 4556164485 2009-08-13 20:50 brasero.iso.bz2
-rw-r--r--  1 glauco glauco     473422 2009-06-28 17:22 SnowCoberta.jpg
-rwxr-xr-x  1 glauco glauco        609 2009-06-13 20:15 coresgeratudo.php

Você também pode fazer a mesma coisa com arquivos

sort arquivo.txt

Para eliminar as repetições você pode usar:

sort -u arquivo.txt

Para saber mais sobre o sort é só rodar:

sort --help

Filtragem de dados com o comando grep

Supondo que um comando que você esteja rodando retorna muitas informações e você só queira ver as linhas que contenham Maria:

qualquer comando | grep 'Maria'

Mas se você quiser ver tudo, exceto Maria, o comando é:

qualquer comando | grep -v 'Maria'

E se quiser ver somente as linhas que contenham somente Maria ou somente Jose:

qualquer comando | grep -P 'Maria|Jose'

Se quiser ver tudo exceto Maria e Jose:

qualquer comando | grep -vP 'Maria|Jose'

O grep também pode ser usado para procurar textos nos aquivos usando a mesma lógica acima, por exemplo:

Procurar por Joao em um arquivo:

grep 'Joao' arquivo.txt

Procurar por Joao nos arquivos .txt do diretório atual:

grep 'Joao' *.txt

Procurar por Joao de forma recursiva em todos os arquivos e sub-diretórios:

grep -r 'Joao' .

* esse ponto no final do comando significa que é o diretório atual, se quiser procurar em outro diretório, então ficará:

grep -r 'Joao' /home/SeuNome/diretorio_a_procurar

Se quiser somente saber quais os arquivos possuem a palavra Joao, mas não te inteessar ver quais as linhas, então rode:

grep -rl 'Joao' .

* Lembre-se que o ponto no final do comando significa que a procura será feita a partir d diretório que você estiver posicionado.

Para saber mais sobre o grep é só rodar:

grep --help

Apagando linhas com o comando sed

Supondo que você queira apagar todas as linhas que contenham Joao, o comando é:

Modo preview (só mostra a mudança na tela, mas não salva o arquivo):

sed '/Joao/d' arquivo.txt

Modo edição (não mostra nada na tela, mas salva as alterações no arquivo):

sed -i '/Joao/d' arquivo.txt

Modo edição com backup (altera e deixa um backup do arquivo original):

sed -i.bak '/Joao/d' arquivo.txt

* Esse comando deixa o arquivo original salvo como arquivo.txt.bak e aplica a mudança no arquivo.txt

Modo captura de saída de outro comando:

comando qualquer | sed '/Joao/d'

Veja também como substituir dados com o comando sed e com o vim.