Uma nova forma de se desenvolver tecnologia está alta e se tornando cada vez mais conhecida é o Hackerspace. A principio o termo Hacker assusta os leigos, pois o termo erroneamente se popularizou com uma ação que não determina seu real sentido.
O termo Hacker está ligado ao conhecimento sobre tecnologias e o entendimento a fundo. Mas na verdade o termo Hacker está ligado ao processo de desconstruir o funcionamento de algo para reconstruir com um novo funcionamento. E o Hackerspace é o lugar onde se reúnem amantes de tecnologia para o desenvolvimento cooperativo.
No video do link abaixo, é possível compreender melhor esse formato de desenvolvimento em um Hackerspace brasileiro.
http://video.globo.com/Videos/Player/Noticias/0,,GIM1666053-7823-CASA+DE+CULTURA+DIGITAL+PROPOE+A+CONVIVENCIA+ENTRE+A+CIDADANIA+E+A+TECNOLOGIA,00.html
Na comunidade do Arduino de Brasilia muito tem se conversado para a criação de um Hackerspace. O local ainda está sendo discutido, porém o nome já foi escolhido e vai ser Calango Hacker Clube.
http://garoa.net.br/wiki/Hackerspaces_em_planejamento_no_Brasil
Atualmente o Hackerspace Garoa parece ser um dos mais influentes entre os atuais 6 Hackerspaces cadastrados do Brasil.
http://garoa.net.br/wiki/Como_criar_um_hackerspace
E, em Shangai o governo está propondo a criação de 100 comunidades de Hackerspaces.
http://hardware.slashdot.org/story/11/11/10/1353240/shanghai-government-proposes-100-community-hackerspaces
Abaixo seguem mais links para informações.
http://groups.google.com/group/hackerspacesp/topics
http://anchisesbr.blogspot.com/2011/05/cyber-cultura-o-que-e-um-hackerspace.html
http://tecnologia.terra.com.br/noticias/0,,OI5153107-EI15607,00-Saiba+o+que+sao+Hackerspaces+oficinas+comunitarias+para+geeks.html
sexta-feira, 11 de novembro de 2011
segunda-feira, 7 de novembro de 2011
Arduino Paraná
Há dois meses e meio atrás eu iniciei pesquisas sobre o Arduino. Acabei entrando em contato com um pessoal da UnB de Brasília que possuía uma lista de discussão com quase 200 membros e resolvi participar. A lista de Brasilia está nesse momento chegando a 300 membros e o Arduino é uma febre crescente. Com o apoio da comunidade de Brasilia: Jeronimo Avelar, Webert Oliveira, Isaias Coelho, Filipe Oliveira, Helton Lidio, Izaias Cabral... Estou dando inicio ao grupo de estudos de Arduino no Paraná:
arduino-parana@googlegroups.com
https://groups.google.com/group/arduino-parana?hl=pt-BR
arduino-parana@googlegroups.com
https://groups.google.com/group/arduino-parana?hl=pt-BR
domingo, 6 de novembro de 2011
Uso do Datasheet
A maioria dos componentes eletrônicos que são fabricados possuem, cada um, o seu manual com as características principais do produto e suas limitações. Também possui a descrição, formato, mapa dos pinos, valores de entrada e saídas de corrente, tensão, potência com valores mínimos e máximos, curvas características de resposta e uma série de parâmetros. Os fabricantes disponibilizam esses manuais, conhecidos como datasheet, em seus sites. Porém existe um site que centraliza os produtos de todos os fabricantes ocidentais e até mesmo alguns orientais. Ultimamente tenho encontrado alguns manuais chineses dentro do site que antigamente não era comum. Antes era necessário acessar os sites um por um... Texas Instruments, National Semiconductor, Sony, SM, Fairchild e pra piorar o Google nem sempre encontrava o componente pelo código. Na verdade, isso ainda acontece. A dica é acessar o site Datasheet Catalog e ir procurar direto na fonte.
HTACCESS - Gerenciando Páginas
Um arquivo importante que existe dentro do sistema que utiliza servidor Apache é o .htaccess. O ponto no inicio do arquivo já indica que o arquivo é oculto, ou seja não aparece nas listagens. O htaccess pode ser colocado em diversas pastas sendo que o arquivo na raiz possui prioridade sobre os subarquivos no momento da leitura. O htaccess é usado para redirecionar arquivos de erros, controlar autenticação e modificar a URL. O PHP não possui o recurso conhecido no Java como Servlets, porém com o htaccess é possível utilizar expressões regulares e url's amigáveis de forma que uma string na URL possa ser interpretada e redirecionada a arquivos específicos. Desse modo o site fica protegido ocultando o tipo de programação que está sendo utilizada dentro do servidor.
Dicas de leitura:
http://codigofonte.uol.com.br/artigo/seguranca/protegendo-suas-paginas-com-htaccess-do-apache
http://cgoncalves.com/htaccess-retirar-www/
Dicas de leitura:
http://codigofonte.uol.com.br/artigo/seguranca/protegendo-suas-paginas-com-htaccess-do-apache
http://cgoncalves.com/htaccess-retirar-www/
quarta-feira, 2 de novembro de 2011
Na Onda do Quadricóptero
Vários garagistas estão começando a desenvolver seus protótipos de Quadricóptero e AR Drones. A construção no que se refere ao material parece ser simples. A complexidade maior está na comunicação, uso do acelerômetro, escolha da bateria e estabilidade da aeronave. O mais interessante é o uso de câmeras embarcadas para o controle dos Drones. Em vários casos o iPhone está sendo usado como controle.
É necessário fazer todo um cálculo com relação ao peso do objeto, potencia do motor, capacidade da bateria e tamanho e quantidade de hélices para saber se o quadcopter vai sair do chão.
http://www.ecalc.ch/xcoptercalc_e.htm
Vários videos podem ser encontrados na internet e algumas equipes brasileiras estão se especializando no assunto.
Alguns links sobre o assunto e equipes de desenvolvimento:
http://www.aeroquad.com/
http://www.mikrokopter.de/
http://diydrones.com/
https://www.webmodelismo.com.br/
http://www.parrot.com/usa/
http://hexacoptero.blogspot.com/
E nesse mês o vídeo que está causando furor entre os desenvolvedores é o surgimento do primeiro multicóptero com o engenheiro piloto a bordo da nave. O que mais chama a atenção é que uma boa parte deses desenvolvedores fabrica esses equipamentos dentro de casa.
http://www.youtube.com/watch?feature=player_embedded&v=L75ESD9PBOw
É necessário fazer todo um cálculo com relação ao peso do objeto, potencia do motor, capacidade da bateria e tamanho e quantidade de hélices para saber se o quadcopter vai sair do chão.
http://www.ecalc.ch/xcoptercalc_e.htm
Vários videos podem ser encontrados na internet e algumas equipes brasileiras estão se especializando no assunto.
Alguns links sobre o assunto e equipes de desenvolvimento:
http://www.aeroquad.com/
http://www.mikrokopter.de/
http://diydrones.com/
https://www.webmodelismo.com.br/
http://www.parrot.com/usa/
http://hexacoptero.blogspot.com/
E nesse mês o vídeo que está causando furor entre os desenvolvedores é o surgimento do primeiro multicóptero com o engenheiro piloto a bordo da nave. O que mais chama a atenção é que uma boa parte deses desenvolvedores fabrica esses equipamentos dentro de casa.
http://www.youtube.com/watch?feature=player_embedded&v=L75ESD9PBOw
Acelerando Shellscript - Parte 2
Este post vai servir para entender um pouco sobre o funcionamento do sistema no Linux. Algumas pastas são criadas em tempo de execução e muito se pode saber sobre o funcionamento do Kernel, até mesmo para gerar relatórios de sistema. Através dos comandos ls e cat, é possível desbravar o conteúdo de arquivos e diretórios de sistema mesmo com usuário comum. Para isso é necessário conhecer algumas pastas de sistema como:
/proc
/proc/cpuinfo
/proc/meminfo
/proc/modules
/proc/uptime
/proc/sys/net/ipv4
/proc/sys/net/ipforward
Abaixo segue apenas um exemplo de como capturar alguns dados que podem ser inclusive mais bem trabalhados com outros comandos e usando a criatividade.
#!/bin/bash
vhost=`hostname`
echo "1.Nome da máquina........................................:$vhost"
vdom=`hostname -d`
echo "2.Domínio da máquina.....................................:$vdom"
vtimeon=`uptime`
echo "3.Há quanto tempo esta máquina está ligada?..............:$vtimeon"
vdata=`date`
echo "4.Qual a data do sistema?................................:$vdata"
vdist=`cat /etc/issue`
echo "5.Qual a distribuição linux está instalada?..............:$vdist"
vversion=`uname -v`
echo "6.Qual a versão de kernel?...............................:$vversion"
# lshw
# cat /proc/cpuinfo
vhards=`dmesg | greep -i hda`
echo "7.Qual o hardware foi reconhecido pelo sistema?..........:$vhards"
vip=`/sbin/ifconfig | grep Bcast | cut -c22-34`
echo "8.Qual a configuração de IP?.............................:$vip"
vmasc=`/sbin/ifconfig | grep Bcast | cut -c62-84`
echo "9.Qual a máscara de rede?................................:$vmasc"
vmac=` /sbin/ifconfig | grep HW | cut -d' ' -f13`
echo "10. Qual o endereço físico ?Mac Address?.................:$vmac"
vgate=`/sbin/route | grep default | cut -c17-70`
echo "11. Qual o gateway?......................................:$vgate"
vdns=`cat /etc/resolv.conf | grep nameserver | cut -c12-70`
echo "12. Qual o DNS?..........................................:$vdns"
vprocess=`ps aux`
echo "13. Quantos programas estão carregados na memória?.......:$vprocess"
# lsof pode ser mais bem trabalhado com o uso do comando grep
vopenfile=`lsof`
echo "14. Quais arquivos estão abertos?........................:$vopenfile"
vdaemons=`ps aux | cut -d' ' -f1 | sort -u | grep -v USER`
echo "15. Quais usuários ou daemons estão executando programas ou"
echo "serviços?..............................................:$vdaemons"
vmemo=`cat /proc/meminfo`
echo "16. Quanto de memória existe no sistema?.................:$vmemo"
#/etc/apt/sources.list
echo "17. Quais pacotes estão instalados na máquina?...........:"
vmaqproc=`uname -`
echo "18. Qual o Processador da máquina?.......................:$vmaqproc"
vusb=`lsusb`
echo "19. Existem equipamentos USB nesta máquina?..............:$vusb"
vpci=`lspci`
echo "20. Existem placas PCI nesta máquina?....................:$vpci"
vusrs=`cat /etc/passwd | grep bash | cut -d: -f1`
echo "21. Quantos usuários estão cadastrados?..................:$vusrs"
vuser=`whoami`
echo "22. Quem está logado agora?..............................:$vuser"
vpwd=`pwd`
echo "23. Em qual pasta você está trabalhando?.................:$vpwd"
vspaceuser=`du -kh --max-depth=1 /home 2>/dev/null`
echo "24. Quanto cada usuário está utilizando de espaço no HD?.:$vspaceuser"
#crontab -l (agendados)
echo "25. Agendar para executar estes comandos automaticamente, toda sexta-feira às 10hs."
#crontab -e (editar)
Ainda é possivel criar um SHELLSCRIPT que poderá gerar um arquivo cujo nome será a data do sistema + nome da máquina + ?-resumo.txt? , utilizando as questões acima.
ex: 2011-10-21_lab21_resumo.txt
/proc
/proc/cpuinfo
/proc/meminfo
/proc/modules
/proc/uptime
/proc/sys/net/ipv4
/proc/sys/net/ipforward
Abaixo segue apenas um exemplo de como capturar alguns dados que podem ser inclusive mais bem trabalhados com outros comandos e usando a criatividade.
#!/bin/bash
vhost=`hostname`
echo "1.Nome da máquina........................................:$vhost"
vdom=`hostname -d`
echo "2.Domínio da máquina.....................................:$vdom"
vtimeon=`uptime`
echo "3.Há quanto tempo esta máquina está ligada?..............:$vtimeon"
vdata=`date`
echo "4.Qual a data do sistema?................................:$vdata"
vdist=`cat /etc/issue`
echo "5.Qual a distribuição linux está instalada?..............:$vdist"
vversion=`uname -v`
echo "6.Qual a versão de kernel?...............................:$vversion"
# lshw
# cat /proc/cpuinfo
vhards=`dmesg | greep -i hda`
echo "7.Qual o hardware foi reconhecido pelo sistema?..........:$vhards"
vip=`/sbin/ifconfig | grep Bcast | cut -c22-34`
echo "8.Qual a configuração de IP?.............................:$vip"
vmasc=`/sbin/ifconfig | grep Bcast | cut -c62-84`
echo "9.Qual a máscara de rede?................................:$vmasc"
vmac=` /sbin/ifconfig | grep HW | cut -d' ' -f13`
echo "10. Qual o endereço físico ?Mac Address?.................:$vmac"
vgate=`/sbin/route | grep default | cut -c17-70`
echo "11. Qual o gateway?......................................:$vgate"
vdns=`cat /etc/resolv.conf | grep nameserver | cut -c12-70`
echo "12. Qual o DNS?..........................................:$vdns"
vprocess=`ps aux`
echo "13. Quantos programas estão carregados na memória?.......:$vprocess"
# lsof pode ser mais bem trabalhado com o uso do comando grep
vopenfile=`lsof`
echo "14. Quais arquivos estão abertos?........................:$vopenfile"
vdaemons=`ps aux | cut -d' ' -f1 | sort -u | grep -v USER`
echo "15. Quais usuários ou daemons estão executando programas ou"
echo "serviços?..............................................:$vdaemons"
vmemo=`cat /proc/meminfo`
echo "16. Quanto de memória existe no sistema?.................:$vmemo"
#/etc/apt/sources.list
echo "17. Quais pacotes estão instalados na máquina?...........:"
vmaqproc=`uname -`
echo "18. Qual o Processador da máquina?.......................:$vmaqproc"
vusb=`lsusb`
echo "19. Existem equipamentos USB nesta máquina?..............:$vusb"
vpci=`lspci`
echo "20. Existem placas PCI nesta máquina?....................:$vpci"
vusrs=`cat /etc/passwd | grep bash | cut -d: -f1`
echo "21. Quantos usuários estão cadastrados?..................:$vusrs"
vuser=`whoami`
echo "22. Quem está logado agora?..............................:$vuser"
vpwd=`pwd`
echo "23. Em qual pasta você está trabalhando?.................:$vpwd"
vspaceuser=`du -kh --max-depth=1 /home 2>/dev/null`
echo "24. Quanto cada usuário está utilizando de espaço no HD?.:$vspaceuser"
#crontab -l (agendados)
echo "25. Agendar para executar estes comandos automaticamente, toda sexta-feira às 10hs."
#crontab -e (editar)
Ainda é possivel criar um SHELLSCRIPT que poderá gerar um arquivo cujo nome será a data do sistema + nome da máquina + ?-resumo.txt? , utilizando as questões acima.
ex: 2011-10-21_lab21_resumo.txt
Acelerando Shellscript - Parte 1
Este material que vou postar é um exercício que tem por objetivo trabalhar com arquivos texto. O Shell entende tudo como arquivo texto, porém para conseguir recortar um cabeçalho ou um rodapé, efetuar cortes horizontais e verticais em listas, trabalhando com ordenação exige um entendimento de como se usar comandos como: head, tail, sort, grep, cut... então aí vão alguns exemplos.
Primeiro é necessário um arquivo de texto para se trabalhar. Utilizando o comando wget vamos fazer um download de um arquivo que é uma lista de preços identada de um site qualquer:
wget http://www.navenet.com/home/lista/ListaNave.txt
Agora com o terminal testar os comandos que fazem parte de um Shellcript abaixo.
#!/bin/bash
echo "1. [0,5] Mostre o cabeçalho do arquivo (somente as linhas antes do inicio dos produtos);"
cat ListaNave.txt | head -4
echo "2. [0,5] Mostre o rodapé do arquivo (somente as linhas após a listagem dos produtos);"
cat ListaNave.txt | tail -8
echo "3. [0,5] Mostre os últimos 25 produtos;"
cat ListaNave.txt | tail -4080 | head -4072 | tail -25
echo "4. [1,0] Mostre os 19 primeiros produtos, em uma lista com as linhas numeradas;"
cat ListaNave.txt | tail -4080 | head -4072 | head -19 | nl
echo "5. [1,0] Mostre somente os produtos (sem as linhas do inicio e do final do arquivo)"
cat ListaNave.txt | tail -4080 | head -4072
echo "6. [0,5] Quantos produtos existem nessa listagem?"
cat ListaNave.txt | tail -4080 | head -4072 | wc | cut -d" " -f4
echo "7. [0,5] Mostre somente os produtos para impressora;"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i IMPRESSORA
echo "8. [1,0] Quantos nobreaks (ou UPS) possui a listagem?"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i -E '(NOBREAK|UPS)'
echo "9. [1,0] Mostre os produtos sem as linhas verticais (pipes) presentes na listagem;"
cat ListaNave.txt | tail -4080 | head -4072 | sed y/"|"/" "/
echo "10. [1,0] Ordene a lista em ordem de código;"
cat ListaNave.txt | tail -4080 | head -4072 | sort -t"|" -k2 -n
echo "11. [1,0] Mostre a listagem dos produtos em ordem alfabetica (não pelo código);"
cat ListaNave.txt | tail -4080 | head -4072 | sort -t"|" -k3
echo "12. [1,0] Mostre os DVD, somente os para carro;"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'DVD P/CARRO'
echo "13. [1,0] Informe somente o código e o preço dos 5 produtos mais caros;"
cat ListaNave.txt | tail -4080 | head -4072 | sort -t"|" -k4 -n -r | head -5
echo "14. [1,0] Qual são os Ipad 2 da lista de produtos?"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'ipad2'
echo "15. [1,0] Crie um arquivo com as câmeras panasonic ;"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'panasonic' | grep -i 'camera' > camerapanasonic.txt
echo "16. [1,0] Crie um arquivo com os 8 primeiros produtos e os 13 últimos em uma lista com o"
echo "cabeçalho e o rodapé;"
cat ListaNave.txt | head -4 > lista.txt
cat ListaNave.txt | tail -4080 | head -4072 | head -8 >> lista.txt
cat ListaNave.txt | tail -4080 | head -4072 | tail -13 >> lista.txt
cat ListaNave.txt | tail -8 >> lista.txt
echo "17. [1,5] Ordene a lista pelo preço: os mais produtos baratos no início da listagem;"
#cat ListaNave.txt | tail -4080 | head -4072 | sort -t"|" -k4 -n
cat lista.txt | head -25 | tail -21 | sort -t"|" -k4 -n
echo "18. [1,5] Quais são os 10 telefones BlackBerry mais baratos?"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'blackberry' | grep -i 'celular' | sort -t"|" -k4 | head -10
echo "19. [1,5] Crie uma nova listagem com: o cabeçalho do arquivo (questão 1) + as 10 filmadoras"
echo "mais baratas (questão 16) e o rodapé do arquivo (questão 2) em arquivo chamado:"
echo "ListaFilmadoras.txt"
cat ListaNave.txt | head -4 > ListaFilmadoras.txt
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'filmadora' | sort -t"|" -k4 -n >> ListaFilmadoras.txt
cat ListaNave.txt | tail -8 >> ListaFilmadoras.txt
echo "20. [2,0] Crie um arquivo com a listagem de produtos para IPAD (não incluir para IPAD 2),"
echo "sem repetição. Compacte o arquivo em formato ZIP ou TAR.GZ."
cat ListaNave.txt | tail -4080 | head -4072 | grep -i IPAD | sort -u | grep -v 'IPAD2' | grep -v 'IPAD 2' > listaipad.txt
tar czvf listaipad.txt listaipad.tar.gz
Primeiro é necessário um arquivo de texto para se trabalhar. Utilizando o comando wget vamos fazer um download de um arquivo que é uma lista de preços identada de um site qualquer:
wget http://www.navenet.com/home/lista/ListaNave.txt
Agora com o terminal testar os comandos que fazem parte de um Shellcript abaixo.
#!/bin/bash
echo "1. [0,5] Mostre o cabeçalho do arquivo (somente as linhas antes do inicio dos produtos);"
cat ListaNave.txt | head -4
echo "2. [0,5] Mostre o rodapé do arquivo (somente as linhas após a listagem dos produtos);"
cat ListaNave.txt | tail -8
echo "3. [0,5] Mostre os últimos 25 produtos;"
cat ListaNave.txt | tail -4080 | head -4072 | tail -25
echo "4. [1,0] Mostre os 19 primeiros produtos, em uma lista com as linhas numeradas;"
cat ListaNave.txt | tail -4080 | head -4072 | head -19 | nl
echo "5. [1,0] Mostre somente os produtos (sem as linhas do inicio e do final do arquivo)"
cat ListaNave.txt | tail -4080 | head -4072
echo "6. [0,5] Quantos produtos existem nessa listagem?"
cat ListaNave.txt | tail -4080 | head -4072 | wc | cut -d" " -f4
echo "7. [0,5] Mostre somente os produtos para impressora;"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i IMPRESSORA
echo "8. [1,0] Quantos nobreaks (ou UPS) possui a listagem?"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i -E '(NOBREAK|UPS)'
echo "9. [1,0] Mostre os produtos sem as linhas verticais (pipes) presentes na listagem;"
cat ListaNave.txt | tail -4080 | head -4072 | sed y/"|"/" "/
echo "10. [1,0] Ordene a lista em ordem de código;"
cat ListaNave.txt | tail -4080 | head -4072 | sort -t"|" -k2 -n
echo "11. [1,0] Mostre a listagem dos produtos em ordem alfabetica (não pelo código);"
cat ListaNave.txt | tail -4080 | head -4072 | sort -t"|" -k3
echo "12. [1,0] Mostre os DVD, somente os para carro;"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'DVD P/CARRO'
echo "13. [1,0] Informe somente o código e o preço dos 5 produtos mais caros;"
cat ListaNave.txt | tail -4080 | head -4072 | sort -t"|" -k4 -n -r | head -5
echo "14. [1,0] Qual são os Ipad 2 da lista de produtos?"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'ipad2'
echo "15. [1,0] Crie um arquivo com as câmeras panasonic ;"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'panasonic' | grep -i 'camera' > camerapanasonic.txt
echo "16. [1,0] Crie um arquivo com os 8 primeiros produtos e os 13 últimos em uma lista com o"
echo "cabeçalho e o rodapé;"
cat ListaNave.txt | head -4 > lista.txt
cat ListaNave.txt | tail -4080 | head -4072 | head -8 >> lista.txt
cat ListaNave.txt | tail -4080 | head -4072 | tail -13 >> lista.txt
cat ListaNave.txt | tail -8 >> lista.txt
echo "17. [1,5] Ordene a lista pelo preço: os mais produtos baratos no início da listagem;"
#cat ListaNave.txt | tail -4080 | head -4072 | sort -t"|" -k4 -n
cat lista.txt | head -25 | tail -21 | sort -t"|" -k4 -n
echo "18. [1,5] Quais são os 10 telefones BlackBerry mais baratos?"
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'blackberry' | grep -i 'celular' | sort -t"|" -k4 | head -10
echo "19. [1,5] Crie uma nova listagem com: o cabeçalho do arquivo (questão 1) + as 10 filmadoras"
echo "mais baratas (questão 16) e o rodapé do arquivo (questão 2) em arquivo chamado:"
echo "ListaFilmadoras.txt"
cat ListaNave.txt | head -4 > ListaFilmadoras.txt
cat ListaNave.txt | tail -4080 | head -4072 | grep -i 'filmadora' | sort -t"|" -k4 -n >> ListaFilmadoras.txt
cat ListaNave.txt | tail -8 >> ListaFilmadoras.txt
echo "20. [2,0] Crie um arquivo com a listagem de produtos para IPAD (não incluir para IPAD 2),"
echo "sem repetição. Compacte o arquivo em formato ZIP ou TAR.GZ."
cat ListaNave.txt | tail -4080 | head -4072 | grep -i IPAD | sort -u | grep -v 'IPAD2' | grep -v 'IPAD 2' > listaipad.txt
tar czvf listaipad.txt listaipad.tar.gz
Assinar:
Postagens (Atom)