sexta-feira, 21 de agosto de 2015

Trabalhando com o histórico de comandos

O terminal texto, mais precisamento o Bash, possui duas propriedades muito úteis que facilitam a nossa vida: o histórico de comandos, e o complemento de comandos.

O complemento funciona como um encurtador de comandos e nomes de arquivos. Por exemplo, quando se quer executar o comando chkrootkit, ao se digitar chk e precionar TAB duas vezes, o Bash vai retornar todos os comandos que começam com chk. Se houver apenas um único comando que começa com a sequencia digitada, então no primeiro TAB o comando será completado. O mesmo para nomes de arquivos. Se você estiver no diretório raiz (/) e quiser entrar no /etc, basta digitar "cd e" e apetar TAB para que o comando seja preenchido com "cd etc".

O histórico lista os últimos comandos digitados. Usando as teclas "seta acima" e "seta abaixo" você pode navegar pelos últimos comandos digitados. Você também pode digitar "history" para ver a lista completa do histórico.

$ history
599 ping -c 1 8.8.8.8 | grep icmp | cut -d" " -f7 | cut -d"=" -f2 | sed 's/\./\,/g'
600 ssh -v 200.144.25.50
601 clear
602 ping -c 1 172.20.1.17
603 clear
604 env | grep HIST
605 env
606 vi .bashrc
607 vi .bash_history
608 wc -l .bash_history
609 ls -lh .bash_history
610 vi .bashrc
611 ssh ricardoolonca@172.20.1.146
612 ls -lh .bash
613 ls -lh .bash_history
614 wc -l .bash_history
615 vi .bashrc
616 cd /
617 history

Para executar o comando número 599, basta digitar:

$ !599
ping -c 1 8.8.8.8 | grep icmp | cut -d" " -f7 | cut -d"=" -f2 | sed 's/\./\,/g'
4,60

O histórico fica armazenado em .bash_history, no diretório raiz dos usuários. Por padrão, o histórico mantém os últimos 1000 comandos (em algumas distros é 500), e o tamanho do arquivo não pode passar de 2Mb. Para alterar essas opções, abra o arquivo .bashrc e altere os valores de HISTSIZE e HISTFILESIZE. Para limitar em 10.000 comandos e 10Mb, altere conforme abaixo.

HISTSIZE=10000
HISTFILESIZE=10000

Além disso, há alguns atalhos interessantes. Por exemplo, para repetir o último comandos digite:

$ "!!"

Para repetir o último comando que começa com "ssh" use:

$ "!ssh"

Para executar o último comandos mas substituindo o texto 146 por 147, digite:

$ ^146^147

quarta-feira, 19 de agosto de 2015

Listando as primeiras linhas de um arquivo textto

O comando head é usado para listar as primeiras linhas de um arquivo. Se executado sem parâmetros, head mostra as primiras 10 linhas.

$ head arquivo.txt

Você pode especificar o número de linhas que quer mostrar. Por exemplo, para mostrar as 4 primeiras linhas use:

$ head -4 arquivo.txt

Para exibir os primeiros bytes, use o parâmetros "-c". Por exemplo, para mostrar os primeiros 10 bytes, digite:

$ head -c 10 arquivo.txt

Você pode usar as letras K, M e G para especificar Kilo, Mega e Gigabyte.

$ head -c 10K arquivo.txt

O comando tail faz basicamente o mesmo, mas mostra as últimas linhas do arquivo. Você pode combiná-los para mostrar, por exemplo, somente a terceira linha.

$ head -3 arquivo.txt | tail -1


terça-feira, 18 de agosto de 2015

Sistema lento? Pode ser o disco.

Quando o computador está lento a primeira coisa que vem na mente do usuário é o processador. Mas o processador não é o único ítem que afeta o desempenho. Uso de memória, uso do link de internet e qualidade gráfica da aplicação são outros fatores que podem estar degradando o desempenho do equipamento. Outro ponto a verificar é o uso do disco. Neste artigo vamos mostrar como verificar se o disco é o causador do problema.

Para verificar o desempenho dos discos em sistemas Linux, use o hdparm, que você pode instalar com o tradicional apt-get.

# apt-get install hdparm

Para descobrir o endereço fisico do disco digite:

# fdisk -l 

Disco /dev/sda: 465,8 GiB, 500107862016 bytes, 976773168 setores
Unidades: setor de 1 * 512 = 512 bytes
Tamanho de setor (lógico/físico): 512 bytes / 4096 bytes
Tamanho E/S (mínimo/ótimo): 4096 bytes / 4096 bytes
Tipo de rótulo do disco: dos
Identificador do disco: 0x000102eb


Device     Boot     Start       End   Sectors   Size Id Type

/dev/sda1  *         2048 195311615 195309568  93,1G 83 Linux
/dev/sda2       195313664 585936895 390623232 186,3G 83 Linux
/dev/sda3       585936957 976768064 390831108 186,4G  f W95 Ext'd (LBA)
/dev/sda5       585936959 976768064 390831106 186,4G 83 Linux

Repare na linha que começa com "Disco". No meu caso, o endereço físico do disco é /dev/sda. Agora teste o desempenho sem cache...

# hdparm -t /dev/sda

/dev/sda:

 Timing buffered disk reads:  178 MB in  3.02 seconds =  58.85 MB/sec

e com cache...

# hdparm -T /dev/sda

/dev/sda:


 Timing cached reads:   14418 MB in  2.00 seconds = 7217.59 MB/sec

Agora que você já sabe a velocidade do disco, veja o quanto ele está sendo requisitado neste momento com iostat, que faz parte do pacote sysstat, que também pode ser instalado vai apt-get.

# apt-get install sysstat

Agora execute o iostat

# iostat -m /dev/sda
Linux 3.16.0-4-686-pae (fpawks0703) 18-08-2015 _i686_ (4 CPU)


avg-cpu:  %user   %nice %system %iowait  %steal   %idle

          14,24    0,39    1,99    2,72    0,00   80,67


Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn

sda              36,12         0,40         0,40      11524      11660

Veja que no meu caso o acesso ao disco está bem tranquilo com cerca de 0,4 MB de leitura e 0,4 MB de escrita, enquanto que o limite, sem cache, é de 59 MB. Então o problema da lentidão está em outro lugar, mas isso é assunto para outro artigo.

Você pode melhorar o desempenho do disco alterando alguns parâmetros. Consulte:

# hdparm --help

Mas cuidado! Faça isso em um ambiente de testes antes!

sexta-feira, 14 de agosto de 2015

Vários comandos para desligar e reiniciar o Linux

É comum no ambiente Linux ter várias formas de fazer a mesma coisa. Um exemplo é o desligamento do sistema. Há pelo menos quatro comandos para fazer isso, shutdown, reboot, halt e init.

O comando shutdown pode ser usado tanto para desligar quanto para reiniciar o equipamento. Por exemplo:

# shutdown -r now

Esse comando reinicia (-r) o servidor imediatamente (now)

# shutdown -h 10

Esse último desliga (-h) o sistema em 10 minutos. Ideal quando se está baixando da internet um arquivo muito grande na madrugada. Se o tempo estimado for de 60 minutos você pode mandar desligar o equipamento em 100 minutos.

Se você desconfia de um problema de disco você pode forçar o checagem no boot com a opção -F

# shutdown -F -r now

O Linux faz a checagem do disco se ele foi montado pela última vez há muitos dias ou se você já o montou um certo número de vezes. Se você quer evitar isso no próximo boot (se sua empresa vai passar por uma parada elétrica, por exemplo), você pode usar o parâmetro -f.

# shutdown -f -h now

O reboot também pode ser usado para reiniciar o equipamento.

# reboot

Para desligar, o halt é outra opção.

# halt

Também pode-se usar o comando init. O init é usado para se mudar o runlevel do sistema. Há vários runlevels definidos, sendo "0" o halt e "6" o reboot.

# init 6

# init 0


quarta-feira, 12 de agosto de 2015

Olonca Live CD 2015 - Amerigo

Atualizei o Linux Olonca Live CD. O sistema é uma mistura de Debian 8 com Debian CDD. A versão 2015 está homenageando o Amerigo, um macaquinho que estimação do Marcos, um desenho sobre um menino que saia pelo mundo afora procurando pela mãe.


Nesta versão eu utilizo o Window Maker como gerenciador de janelas, só para fugir dos tradicionais sistemas Gnome, KDE, Cinnamon e Mate.


O sistema roda com 512 Mb Ram e um processador de 2.3 Ghz. Se quiser instalar é necessário um disco com 20Gb de espaço livre.

Você pode baixá-lo no link abaixo. 



terça-feira, 11 de agosto de 2015

Qual o melhor comando para compactar um arquivo?

No Linux há várias ferramentas usadas para compactar arquivos. Umas compactam melhor, mas demoram mais. Outras são mais rápidas, mas usam mais o processador. Enfim, cada uma tem suas vantagens e desvantagens. Neste artigo eu analiso algumas delas.

Na análise eu compactei a pasta /etc dez vezes com cada aplicativo medindo o tempo gasto no processo. Também analisei o tamanho final do arquivo compactado. O resultado está na tabela e no gráfico abaixo.


Tecnologia Comando Tempo (s) Tamanho (mb)
Zip zip -r arquivo.zip pasta 5,62 37,00
Gzip tar zcvf arquivo.tar.gz pasta 0,75 3,30
Bzip tar jcvf arquivo.tar.bz2 pasta 2,35 3,00
Compress tar cvf arquivo.tar pasta; compress arquivo.tar 1,23 4,72
Arj arj a arquivo.arj pasta -r 9,02 36,25
Rar rar a arquivo.rar pasta 6,71 29,95


Conclusão

Para minha surpresa o formato ZIP foi o que menos compactou. Até o antigo ARJ, que usei muito na época do MS-DOS, compactou melhor. Já o ARJ foi o que mais tempo levou. Se quiser transferir arquivos para o ambiente Windows a melhor opção será usar o formato RAR. Já os formatos mais usados no Linux tiveram um desempenho nem melhor. Aqui, o BZIP foi o que melhor compactou. Em seguida foi o GZIP. O COMPRESS levou menos tempo que o BZIP, mesmo sendo necessário compactar em dois passos usando primeiro o TAR.

quarta-feira, 1 de abril de 2015

Como recuperar o boot do Linux?

O computador tem o Windows 7 e o cara instala o Ubuntu (ou qualquer outra distribuição Linux) em dual-boot. Aparece aquele menuzinho básico na hora de iniciar o computador perguntando qual sistema você quer iniciar. Tudo funciona até que usuário resolve instalar o Windows 8. Aí o menu de inicialização (o Grub) some. Não dá mais prá carregar o Linux. O que fazer?

Já vi várias pessoas com esse tipo de problema. O que ocorre é que na instalação do Linux o sistema de boot (geralmente o Grub) detecta os sistemas operacionais instalados no computador e cria o menu de opções. Quando você instala uma nova versão do Windows este acha que você só vai usar Windows e simplesmente ignora o Linux.

Para resolver isso é simples. Primeiro dê o boot no computador com um live-cd da mesma forma que você faria se fosse instalar o Linux. Em um terminal texto digite o comando abaixo como root.

# fdisk -l
Disk /dev/sda: 21 GB, 21467980800 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391    7  HPFS/NTFS
Warning: Partition 1 does not end on cylinder boundary.
/dev/sda2              17        1337    10602900    7  HPFS/NTFS
Warning: Partition 2 does not end on cylinder boundary.
/dev/sda3            1337        2611    10233405    5  Extended
Warning: Partition 3 does not end on cylinder boundary.
/dev/sda5            1337        2548     9727357   83  LinuxWarning: Partition 5 does not end on cylinder boundary.
/dev/sda6            2548        2611      506047   82  Linux swap
Warning: Partition 6 does not end on cylinder boundary.
Warning: Unable to open /dev/sr0 read-write (Sistema de arquivos somente para leitura).  /dev/sr0 has been opened read-only.
Error: /dev/sr0: unrecognised disk label
Error: /dev/zram0: unrecognised disk label

Reparem na linha em negrito. A partição /dev/sda5 contém o drive raiz do Linux. Crie uma pasta para podermos montar o disco.

# mkdir /mnt/disco

Monte a partição do Linux na pasta criada.

# mount /dev/sda5 /mnt/disco

É necessário montar o drive virtual /dev dentro do /mnt/disco

# mount -o bind /dev/ /mnt/disco/dev/

Agora devemos usar o drive /mnt/disco como nosso drive raiz

# chroot /mnt/disco

Agora basta reinstalar o grub.

# grub-install /dev/sda 
Installation finished. No error reported.

Pront! Agora basta reiniciar o equipamento e testar.

segunda-feira, 23 de fevereiro de 2015

Linux no Desktop - aula 01 - Introducao

Após um período ausente estou voltando a postar.

Estive envolvido em alguns projetos no final de 2014, saí de férias de janeiro e agora estou colocando as coisas em dia.

Esse é o primeiro video que pretendo fazer sobre o Linux no Desktop. Aos poucos vou colocar mais aqui no blog. O áudio está um pouco baixo, mas os próximos serão melhores.


terça-feira, 23 de dezembro de 2014

Futurologia

Como em todos os finais de ano, várias pessoas fazem as suas previssões para o ano seguinte. E eu também vou fazer as minhas baseadas em matérias e artigos de revistas, jornais e blogs da internet. Só lembrando algumas que previsões que fiz há alguns anos:

Em 2011 smartphones e tablets eram coisas raras, e o acesso móvel era sofrível. Não se viam pessoas andando pela rua postando coisas no Facebook. O máximo que o pessoal tinha era um celular com alguns mp3, ou um iPod. A tendência mostrava que a partir de 2012 as coisas iriam mudar, e que a computação móvel via smartphone e tablet seria comum em um ou dois anos. Documentos na nuvem, como no Dropbox, seriam mais usados, mas a rede 3g ainda não permite a adição on-line. Pagamentos via smartphone ainda não é muito utilizado, como imaginei que seria, mas acessar banco via dispositivo móvel é bem comum.

Para 2013 eu previa o aumento da virtualização em nuvem, como muitos servidores sendo migrados para a Amazon e Google. Hoje isso é comum, mas achei que em 2014 isso seria bem mais utilizado. A rede 4g chegou, mas só em alguns lugares, e a velocidade não é assim tão alta como previsto. Achei que a copa do mundo traria mais benefícios tecnológicos para as sedes da copa, mas isso não aconteceu, pelo menos não na medida que eu imaginei. Pelo menos a fibra da Tim chegou em casa com 35Mb! O uso dos desktop diminuiu enquanto o de dispositivos móveis, como tablet, aumentou. A utilização do IPv6 não mudou muito, embora alguns sites já respondem a ele. E o FirefoxOS ficou só na previsão. Já na área espacial, empresas privadas começaram e investir nessa área, mas os pacotes turísticos ainda são um sonho.

Mas aqui vão as minhas previsões para os próximos anos.

Para 2015
  • Todos os municípios brasileiros serão cobertos pela banda larga.
  • O uso de smartphone como meio de pagamento deverá ser mais utilizado.
  • As empresas cada vez mais utilizarão a infraestrutura na nuvem.
  • A Artemis deferá lançar e rede sem fio que promete ser mil vezes mais veloz do que as atuais.
  • O uso da energia aeólica será mais utilizada.
  • Algumas casas produzirão 100% da energia que consomem.
  • A TV digital estará implantada em todo o estado de São Paulo.
  • Começarão os testes com carros que farão baliza automaticamente.
  • A administração da internet começará a passar para a  ONU. 


Em 1 ano
  • O uso da nuvem só crescerá.
  • 1/3 dos usuários terão dados na nuvem.
  • 1/2 das empresas colocarão seus dados na núvem.
  • A banda larga popular promete ser expandida para todo o país.
  • 1/2 dos usuários de computador não vão mais depender do desktop.
  • A maioria das TVs serão smart.
  • O IPv6 deverá estar implantado em toda a internet.
  • Carros sairão de fábrica com GPS.
  • Sondas deverão ser enviadas para Marte e Júpiter.
  • São Paulo terá 400 km de ciclovias, enclusive uma ligando o Ibirapuera ao Morumbi.


Em 2 anos
  • Telas de touchscreen deverão ser substituídas devido a falta do produto Índio.
  • Celulares comuns serão raridades.
  • O sistemas Windows Vista e Redhat 5 deixarão de ser suportados.
  • A realidade aumentada será usada em larga escala.
  • Haverá viajens espaciais turísticas, inclusive em torno da Lua.
  • A China será o maior mercado do mundo, passando os EUA. 
  • São Paulo passará a usar também as águas do rio São Lourenço em seu abastecimento.


Em 5 anos
  • O Governo da China migrará seus servidores e desktops para Linux.
  • O Linux será o principal sistema operacional do mundo.
  • 1/2 dos software adquiridos pelas empresas será livre.
  • A rede 5g entrará em operação
  • 95% das cidades brasileiras terão fibra ótica.
  • Saturação do IPv4 na África. 
  • Fim do suporte ao Windows 7 e do Red Hat 6. 
  • Fim das transmisões de TV analógica no Brasil. 
  • Comercialização de TVs de 8 K. 
  • 30% da energia do país não virá de hidroelétricas
  • A energia solar será usada em larga escala. 
  • O trem bala brasileiro deverá entrar em operações. 
  • Começarão a aparecer os carros elétricos autônomos. 
  • Os Vants serão usados pela polícia. 
  • Novas missões para a Lua.
  • Começará a colonização de Marte com a Mars One enviando a primeiro unidade de moradia. 

Em 10 anos
  • Começam a surgir as redes exclusivamente IPv6. 
  • Maior uso de realidade aumentada inclusive com óculos e lentes projetoras. 
  • Aparecerão os robôs para uso doméstico. 
  • 10% do PIB brasileiro deverá ser investido em educação. 
  • Começam as missões tripuladas a Marte. 
  • 2/3 da população do mundo sofrerá com a falta de água potável.
  • O petróleo começará a faltar.


Em 20 anos
  • As casas terão links de internet com 500 Mb, computadores com 20 Tb e processadores de 1 Thz. 
  • Dinheiro em papel será raro. 
  • Muitos voos comerciais não serão tripulados. 
  • Haverá carros comerciais movidos a água, embora a maioria será movido a eletricidade. 
  • Janelas poderão ser substituídas por monitores. 
  • Dormiremos em conchas acústicas. 
  • Faremos exames simples ao usarmos o banheiro. 
  • Sensores monitorarão nossa saúde, com os dados sendo transmitidos via rede sem fio. 
  • Operações a distância serão comuns. 
  • O etanol será mais usado no Brasil do que a gasolina. 
  • As residências reciclarão o lixo que produzirem. 
  • O mundo deverá chegar a 8 bilhões de habitantes e a a Índia será o país mais populoso
  • A Terra terá um défict de 40% de água potável, 50% de alimentos e 45% de energia.


Em 50 anos
  • Bug do timestamp.
  • Será possível fazer upload e download de/para o cérebro. 
  • Entra a operação a rede 6g. 
  • As residências terão links de internet de 5 Gb, micros com 500 Tb e processadores com 1 Phz. 
  • A população do mundo deverá se estabilizar em torno de 10 bilhões. 
  • 50% da população do mundo consumirá 100% dos recursos naturais. 
  • A temperatura da Terra será 5 graus maior do que em 2010. 
  • Haverá um conselho mundial das democracias na ONU. 
  • Será possível fazer escolhas genéticas. 
  • Haverá prédios com mais de 1 Km de altura. 
  • O Brasil será a quarta economia do mundo, Índia a terceira, EUA segunda e a China primeira. 
  • Haverá uma base em Marte. 
  • A clonagem humana será possível tecnicamente.


Em 100 anos
  • Equipamentos serão controlados pela mente. 
  • Carros terão piloto automático. 
  • A Terra será 6,4 graus mais quente do que em 2000. 
  • O nível do mar deverá subir até 82 cm se comparado com 2005.


quarta-feira, 17 de dezembro de 2014

Trabalhando com File Glob e Expressões Regulares

Muito usado em pesquisa de arquivos, File Glob é uma forma de fazer referência a vários arquivos usando uma única expressão. As mais conhecidas, também usadas na linha de comandos do Windows, são o asterisco "*" e o sinal de interrogação "?".

O "?" substitui um único caracter no nome do arquivo. Por exemplo, vamos supor que você tem uma pasta com os seguintes arquivos:

$ ls
carta1.odt  carta4.odt      carta_ext2.odt  ci1.odt  memorando1.odt
carta2.odt  carta5.odt      carta_ext3.odt  ci2.odt  memorando2.odt
carta3.odt  carta_ext1.odt  carta.odt        ci3.odt  memorando3.odt

Para listar os arquivos "carta1.odt", "carta2.odt", etc, mas não "carta.odt", digite.

$ ls carta?.odt
carta1.odt  carta2.odt  carta3.odt  carta4.odt  carta5.odt

O "*" substitui uma sequência qualquer de caracteres, inclusive nenhum. Para listar todos os arquivos que possuem "memorando" no nome, digite:

$ ls memorando*
memorando1.odt  memorando2.odt  memorando3.odt

Outro exemplo, vamos listar todos os arquivos que começam com "carta".

$ ls carta*
carta1.odt  carta3.odt  carta5.odt        carta_ext2.odt  carta.odt
carta2.odt  carta4.odt  carta_ext1.odt  carta_ext3.odt

Reparem que, ao contrário do "?", o "*" também listou o arquivo carta.odt.

Mas há ainda outras construções que não existem no ambiente Windows. Para listar todas as cartas com número 1 até 3 digite:

$ ls carta[123]*
carta1.odt  carta2.odt  carta3.odt

Essa construção considera todos os caracteres dentro de "[]". Para listar, por exemplo, "menino.txt" e "menina.txt" poderíamos usar "menin[ao].txt".

Outra forma é a seguinte:

$ ls carta[1-3]*
carta1.odt  carta2.odt  carta3.odt

O "-" diz "do primeiro caracter até o último". Se quiséssemos listar todos os arquivos que comaçam com números poderíamos usar "[0-9]*".

Podemos usar a negação "^". Para listar todos os arquivos que NÃO sejam de 1 a 3 digitamos:

$ ls carta[^1-3]*
carta4.odt  carta5.odt  carta_ext1.odt  carta_ext2.odt  carta_ext3.odt  carta.odt

Se eu não quiser "carta_ext", basta incluir o caracter "_" no comando acima.

$ ls carta[^1-3_]*
carta4.odt  carta5.odt  carta.odt

Você pode querer também listar todos os arquivos "carta" e "memorando". Para isso, use o "{}".

$ ls {carta,memorando}*
carta1.odt  carta2.odt  carta3.odt  carta4.odt  carta5.odt  carta_ext1.odt  carta_ext2.odt carta_ext3.odt  carta.odt  memorando1.odt  memorando2.odt  memorando3.odt

Reparem que "ci" não foi mostrado.

Essas regras podem ser misturadas. Por exemplo, para mostrar todos os arquivos "carta" ou "memorando" mas que sejam de 3 até 5, digite:

$ ls {carta,memorando}[3-5]*
carta3.odt  carta4.odt  carta5.odt  memorando3.odt

A tabela abaixo resume as opções de File Glob

*
Qualquer coisa
*.txt
?
Um caractere qualquer
arquivo-??.zip
[...]
Qualquer um dos caracteres listados
[Aa]rquivo.txt
[^...]
Qualquer um caractere, exceto os listados
[^A-Z]*.txt
{...}
Qualquer um dos textos separados por vírgula
arquivo.{txt,html}

Já as expressões regulares, ou REGEX, são expressões usadas para referenciar várias sentenças. São muito parecidas com o FileGlob, mas são usadas para pesquisa de texto. Por exemplo, o ponto (.) é usado para substituir um caracter. Já a barra invertida (\) diz que o próximo carcter deve ser interpretado literalmente. Por exemplo, para listar todos os sites dos tribunais regionais estaduais você pode fazer a seguinte regex:

trt\...\.gov\.br

Em outras palavras a regex acima diz para trazer qualquer texto que tenha a string "trt" seguida de um ponto literal (\.) seguida de dois caracteres quaisquer (..) seguida de outro ponto literal (\.) seguida do texto "br".

trt.sp.gov.br
trt.rj.gov.br
trt.ms.gov.br

Se eu quiser apenas os tribunais do Mato Grosso e do Mato Grosso do Sul posso usar o [] para referenciar todos os caracteres que podem aparecer na posição.

trt\.m[st]\.gov\.br

Se quisermos todos os tribunais menos os do Distrito Federal e do Ceará usamos o caracter de negação (^).

trt\.[^cd].\.gov\.br

Uma regex que uso bastaste é para omitor as linhas em branco de um arquivo texto . Para isso uso os posicionadores "^" (começo de linha) e o "$" (fim de linha).

grep -v ^$ arquivo.txt

No comando acima estou pedindo para o grep listar todas as linhas do arquivo "arquivo.txt"" com excessão (-v) daquelas que começam (^) e logo em seguida terminam ($), ou seja, as linhas em branco.

Em meus filtros de conteúdo eu costumo bloquear todos os sites que são acessados por IP. Para isso posso usar a regex {}. Por exemplo, para se referir a qualquer número de 0 a 999, uso a seguinte expresão.

grep -E '^[0-9]{1,3}' arquivo.txt

A regex {a,b} nos diz que a sequência anterior deverá se repetir pelo menos "a" vezes e no máximo "b" vezes. Se quisermos um número com exatos 3 algarismos, podemos usar [0-9]{3,3}. Se quisermos 3 ou mais vezes usamos [0-9]{3,}

Logo, para fazer referência a um endereço IP no começo da URL eu posso usar o seguinte:

^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

Abaixo segue um resumo das expressões regulares.

Meta Nome Descrição
. Ponto Curinga de um caractere
[] Lista Casa qualquer um dos caracteres listados
[^] Lista negada Casa qualquer caractere, exceto os listados
? Opcional O item anterior pode aparecer ou não (opcional)
* Asterisco O item anterior pode aparecer em qualquer quantidade
+ Mais O item anterior deve aparecer no mínimo uma vez
{,} Chaves O item anterior deve aparecer na quantidade indicada {mín,máx}
^ Circunflexo Casa o começo da linha
$ Cifrão Casa o fim da linha
\b Borda Limita uma palavra (letras, números e sublinhado)
\ Escape Escapa um metacaracter, tirando seu poder
| Ou Indica alternativas (usar com o grupo)
() Grupo Agrupa partes da expressão, é quantificável e multinível
\1 Retrovisor Recupera o conteúdo do grupo 1
\2 Retrovisor Recupera o conteúdo do grupo 2 (segue até o \9)
.* Curinga Casa qualquer coisa, é o tudo e o nada
?? Opcional NG Idem ao opcional comum, mas casa o mínimo possível
*? Asterisco NG Idem ao asterisco comum, mas casa o mínimo possível
+? Mais NG Idem ao mais comum, mas casa o mínimo possível
{}? Chaves NG Idem às chaves comuns, mas casa o mínimo possível
Para saber mais sobre esse assunto eu recomendo o site http://aurelio.net/shell/canivete e o livro Programação Shell Script de Julio Cezar Neves.

segunda-feira, 22 de setembro de 2014

Treinamentos em Linux

Pessoal.

Ministro cursos e palestras na área de TI há mais de 10 anos. Atualmente dou aulas do curso oficial preparatório de cerficação LPI (Linux Professional Institute), pfSense, Redes e outros. Estou criando vários cursos on-line, entre eles cito Introdução ao Linux, Linux em Redes TCP/IP, Introdução à linha de comandos do Linux e Linguagem Bash Script. Os cursos são de 16 horas e são ministrados no período noturno.
Quem tiver interesse me avise. Mais informações no link abaixo.


http://www.wiziq.com/course/80772-introdu%C3%A7%C3%A3o-ao-linux

sexta-feira, 25 de julho de 2014

Pesquisa de texto com grep

O comando grep é usado para fazer pesquisa de textos em arquivos e em saída de comandos. Sua forma mais simples é a seguinte.

$ grep ricardo /etc/passwd
ricardo:x:1000:1000:Ricardo Lino Olonca,,,:/home/ricardo:/bin/bash
ftp:x:155:65534::/home/ricardo/Copy/Copy/:/bin/false

Aqui estou procurando todas as linhas que contenham o texto "ricardo". Eu posso também usar o grep para filtrar a saída de um comando.

$ ls -l | grep root
-rw-r--r-- 1 ricardo root    2232995840 Jul  8 09:11 Olonca_2014.iso

Nesse caso eu executei o "ls -l" e pedi ao grep para mostrar somente as linhas que continham a string de texto "root". 

Grep é case sensitive, ou seja, ele faz diferenciação entre caracteres maiúsculos e minúsculos. No exemplo anterior, vamos supor que eu precise saber as linhas que contenham o texto olonca; se eu digitar:

$ ls -l | grep olonca

não será mostrada nenhuma linha, pois o correto é "Olonca".

$ ls -l | grep Olonca
-rw-r--r-- 1 ricardo root    2232995840 Jul  8 09:11 Olonca_2014.iso

Para evitar isso, use o parâmetro "-i".

$ ls -l | grep -i olonca
-rw-r--r-- 1 ricardo root    2232995840 Jul  8 09:11 Olonca_2014.iso

Há situações onde você quer o inverso, ou seja, as linhas que NÃO contem a texto procurado. Para isso use o "-v".

$ grep -v bash /etc/passwd
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh

Aqui estou listando todos os usuários que não possuem o shell bash. Se eu quiser contar essas linhas eu posso chamar o "wc -l" ou usar o parâmetro -c.

$ grep -v bash -c /etc/passwd
76

$ grep -v bash /etc/passwd | wc -l
76

Eu posso também querer mostrar apenas as duas primeiras ocorrências da pesquisa (-m 2)

$ grep -vm2 bash /etc/passwd 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh

Há dois parâmetros que funcionam como âncoras. Um se refere ao começa da linha (^) e o outro ao final ($). Por exemplo, para mostrar todas as linhas que começam com o texto "ricardo" no arquivo /etc/passwd digite:

# grep ^ricardo /etc/passwd
ricardo:x:1000:1000:Ricardo Lino Olonca,,,:/home/ricardo:/bin/bash

Para ver todos os usuários que usam o login "/bin/false" é só pesquisar pelo texto no final da linha.

$ grep false$ /etc/passwd
usbmux:x:101:46:usbmux daemon,,,:/home/usbmux:/bin/false
messagebus:x:102:104::/var/run/dbus:/bin/false
Debian-gdm:x:103:107:Gnome Display Manager:/var/lib/gdm3:/bin/false
haldaemon:x:105:109:Hardware abstraction layer,,,:/var/run/hald:/bin/false

Aqui vai uma dica preciosa: linhas em branco não consideradas linhas que começam e logo em seguida terminam, sem qualquer caracter entre o início e o fim. Portanto, para eliminar as linhas em branco de um arquivo é só executar o comando abaixo:

$ grep -v ^$ /etc/mtools.conf 
# Debian default mtools.conf file.
# "info mtools" or "man mtools.conf" for more detail.
# # Linux floppy drives
drive a: file="/dev/fd0" exclusive
drive b: file="/dev/fd1" exclusive
drive d: file="/dev/cdrom" exclusive
# # First SCSI hard disk partition
# drive c: file="/dev/sda1"
# # First IDE hard disk partition
# drive c: file="/dev/hda1"
# # dosemu hdimage.
drive m: file="/var/lib/dosemu/hdimage.first" partition=1 offset=128
# # dosemu floppy image
drive n: file="/var/lib/dosemu/fdimage"
# # SCSI zip disk
# drive z: file="/dev/sda4"
# # uncomment the following line to display all file names in lower
# # case by default
# mtools_lower_case=1

Para retirar os comentários do arquivo acima é só não mostrar as linhas que começam com "#". 

# grep -v ^$ /etc/mtools.conf | grep -v ^#
drive a: file="/dev/fd0" exclusive
drive b: file="/dev/fd1" exclusive
drive d: file="/dev/cdrom" exclusive
drive m: file="/var/lib/dosemu/hdimage.first" partition=1 offset=128
drive n: file="/var/lib/dosemu/fdimage"

Você pode querer ver não só as linhas pesquisadas como também algumas linhas antes (-B) e depois (-A).

# dmesg  | grep -A 2 -B 2 libata
[    1.544560] input: AT Translated Set 2 keyboard as /devices/platform/serio0/input/input0
[    1.544897] usbcore: Unknown symbol usb_speed_string (err 0)
[    1.547299] libata version 3.00 loaded.
[    1.745056] e1000e 0000:00:19.0: eth0: (PCI Express:2.5GT/s:Width x1) 50:e5:49:fc:de:9b
[    1.745059] e1000e 0000:00:19.0: eth0: Intel(R) PRO/1000 Network Connection

Você também pode usar as expressões regulares na pesquisa, mas isso é assunto para outro post.



quarta-feira, 23 de julho de 2014

Ferramenta gráfica para particionamento de disco

Quem pretende instalar o Linux em dual boot com o Windows provavelmente precisará redimensionar o disco para conseguir espaço para o novo sistema. Esse processo, chamado de particionamento, pode causar perda de dados se feito de forma errada. Por isso, muita gente tem um certo receio de fazê-lo. 

O Gparted é editor de partições (vulgo "particionador") gráfico que facilita e muito o processo de redimensionamento e particionamento do disco.


Ele tem suporte a vários tipos de sistemas de arquivo, como NTFS, FAT, Ext2, Ext3, Ext4, Reiserfs, Xfs, Jfx, Swap, Minix, etc, além do suporte a partições GPT.

Para diminuir o tamanho da partição Windows e liberar espaço para o Linux basta clicar com o botão direito na partição e escolher Redimensionar. Agora arraste a barra, ou digite o valor do tamanho desejado. Geralmente esse processo é bem tranquilo, mas sempre é bom fazer um backup. 

O Gparted está presente na maioria das distribuições Live-cd.

terça-feira, 15 de julho de 2014

Gpaint, o Paint do Linux

O Paint é aquela aplicação que vem junto com o Windows e que as crianças amam. Dá prá fazer algumas pinturas, rabiscos, e até alguns ajustes em fotos. Pois no Linux também tem uma aplicação semelhante: o Gpaint.


O Gpaint já deve estar instalado na tua distribuição Linux, mas caso não esteja você pode procurá-lo no gerenciador de aplicativos. No Debian e derivados use o Synaptic ou, pela linha de comandos, digite:

# apt-get install gpaint 

segunda-feira, 14 de julho de 2014

Olonca Live CD 2014

Está disponível no link https://copy.com/wXGfjHe0ZugX um live cd personalizado por mim. É essa versão que uso nos meus desktops e que contém a maioria dos aplicativos apresentados neste blog. A versão é baseada no Debian.

As principais mudanças em relação à 2013 são:


  • Kernel 3.2
  • Gnome 3.0
  • Instalador gráfico


Abaixo descrevo como instalar a distribuição usando o instalar gráfico que desenvolvi.

Após baixar a iso e queimar a midia, ligue o computador com DVD no drive. A seguinte tela aparecerá.


Aqui vale uma explicação: essa foto foi tirada em janeiro de 2014 no Ceará, a cerca de 3,5 Km da divisa com o Piauí, descendo a serra em direção ao Bom Jardim. É onde mora a avó da minha esposa. https://www.google.com/maps/@-5.5192587,-40.903904,50m/data=!3m1!1e3

No menu apresentado você pode escolher entre o modo Live (primeira opção) modo seguro (que não carrega alguns módulos que podem causar problemas e interface gráfica, ou num caso mais grave travar o sistema) e o teste de memória RAM. Escolhemos a primeira opção e teclamos ENTER.


Essa é a tela inicial o sistema pronto par ao uso. A foto é do Açude do Rodrigão, localizada na cidade de Novo Oriente, Ceará, Brasil.

Para instalar a distribuição, clique no menu Aplicativos, escolha Utilitários e clique em Terminal.


Na tela que aparece, digite "sudo ./instalar.sh


Será solicitada a senha de administrador. Digite "olonca" e tecle ENTER.


A tela seguinte mostra os discos que existem em teu sistema. Por enquanto o instalador não consegue dividir a instalação em vários discos, mas estou trabalhando nisso. Escolha o disco e clique em Ok.


É necessário criar pelo menos uma partição Linux. Também é recomendável criar uma partição swap para a memória virtual. Eu recomendo que a soma da memória virtual com a memória RAM seja de pelo menos 3Gb, mas isso é apenas uma recomendação. Clique em Ok.


Esta é a parte mais crítica da instalação. Nesta tela você pode alterar as partições do disco. É recomendável fazer um backup dos arquivos se você está instalando em dual boot em uma máquina que já possua o Windows, como no meu caso aqui. Na tela abaixo, vemos duas partições que foram criadas na instalação do Windows 7. Precisamos redimensionar a segunda partição. Embora seja raro aparecerem problemas aqui sempre é bom fazer um backup.


Clique na segunda partição com o botão direito e depois clique em Redimensionar/Mover.


Agora escolha o novo tamanho para a partição, ou o espaço que ficará livre após o redimensionamento. No meu caso eu deixei 16Gb de espaço livre. A instalação deverá ter pelo menos 8Gb. Clique em Redimensionar/Mover.


No espaço não alocado, clique com o botão direito e escolha Novo.


Em "Criar como", é aconselhável escolher "Partição estendida" e deixar todo o espaço disponível para ela. Clique em Adicionar.


No espaço não alocado clique com o botão direito e escolha Novo.


Agora vamos criar a partição destinada ao sistema operacional Linux. Você pode deixar todo o espaço disponível, mas aqui eu vou personalizar e separar 12Gb para o drive raiz. Digite 12000 em "Novo tamanho (Mb)" e clique em Adicionar.


No espaço não alocado clique com o botão direito e escolha Novo.


Estou separando 3Gb para o drive home. Numa instalação para Desktop esse drive deverá ser o maior pois conterá todos os teus arquivos pessoais. Digite 3000 em "Novo espaço (Mb)" e clique em Adicionar.


No espaço não alocado clique novamente com o botão direito e escolha Novo.


Vou deixar todo o espaço restante para a partição de troca. Em "Sistema de arquivos" esolha "linux-swap" e clique em Adicionar.


Nosso esquema de particionamento está completo. Clique no ícone verde onde deverá aparecer a mensagem "Aplicar todas as operaçoes" conforme mostrado na tela abaixo.


Uma tela avisará que as informações serão gravadas no disco. Clique em Aplicar.


O processo de criação das partições pode demorar um pouco dependendo do tamanho do teu disco.


Ao final do processo clique em Fechar.


Se você está fazendo uma instalação simples, ou seja, sem o Windows, será necessário marcar a partição raiz para ser bootável. Para fazer isso, clique na partição com o botão direito e escolha "Gerenciar sinalizadores".


Selecione Boot e clique em Fechar.


Agora feche a janela clicando no X conforme a tela abaixo. 


Agora escolha a partição onde deverá ser instalado o sistema raiz. No meu caso a partição sda5. Escolha a partição e clique em Ok.


A mensagem seguinte informa que todos os dados da partição serão apagados. Clique em Sim para continuar.


Agora esolha a partição onde deverá ser criada a memória virtual (swap). No meu caso é sda7. Clique na partição e depois clique em Ok.


Novamente a mensagem informando que os dados da partição serão apagados. Clique em Sim.


A tela seguinte pergunta se você quer colocar o drive Home em uma outra partição. Se você separou uma partição para os dados dos usuário clique em Sim. Caso contrário clique em Não. No meu caso cliquei em Sim.


Para quem clicou em Sim na tela anterior será mostrado uma tela para que a partição separada para o Home seja selecionada. No meu caso é a sda6. Escolha a partição e clique em Ok.


Se você já possui arquivos pessoais nessa partição então clique em Não. No meu caso cliquei em Sim.


Mais um aviso para quem escolheu formatar a partição Home informando que os dados serão apagados. Clique em Sim. 


Agora que as partições foram formatadas começa o processo de cópia dos arquivos. Isso pode levar bastante tempo. Tenha paciência. 


Após a instalação será perguntado o nome do novo usuário. Digite um nome que lhe agrade. No meu caso digitei "ricardo". Clique em Ok.


A senha do novo usuário é "olonca", assim como a senha do usuário root. Clique em Ok.


O processo de instalação terminou. Clique em Ok.


Clique no menu Olonca e depois em Desligar.


Agora clique em Reiniciar.


Antes do sistema reiniciar será pedido para que você retire a midia do drive de DVD. Retire e midia e tecle ENTER.


Ao reinciar, o menu abaixo será exibido. Nele você pode escolher entre os vários kernel do Linux (o padrão é o primeiro), o modo de segurança e o Windows (última opção). Ao entrar no Windows após a instalação um exame de disco será feito pelo Windows devido a mudança de tamanho da partição. Isso é normal. 


Qualquer problema é só me avisarem pelo e-mail ricardo.olonca@gmail.com