Usando o XARGS

Este artigo foi adquirido pelo site Dicas-L da Unicamp

Colabora??o: J?lio Neves

Apesar de hoje ser dia de praia/piscina e cerveja gelada, vou pegar pesado porque a nossa semana de dicas est? acabando e eu n?o poderia deixar de mostrar as op??es e seus respectivos usos do comando xargs.

Existe um comando, cuja fun??o primordial ? construir listas de par?metros e pass?-la para a execu??o de outros programas ou instru??es. Este comando ? o xargs e deve ser usado da seguinte maneira:

xargs [comando [argumento inicial]]

Caso o comando, que pode ser inclusive um script Shell, seja omitido, ser? usado por default o echo.

O xargs combina o argumento inicial com os argumentos recebidos da entrada padr?o, de forma a executar o comando especificado uma ou mais vezes.

Exemplo:

Vamos produrar em todos os arquivos abaixo de um determinado diret?rio uma cadeia de caracteres usando o comando find com a op??o type f para pesquisar somente os arquivos normais, desprezando diret?rios, arquivos especiais, arquivos de liga??es, etc, e vamos torn?-la mais gen?rica recebendo o nome do diret?rio inicial e a cadeia a ser pesquisada como par?metros. Para isso fazemos:

$ cat grepr
#
# Grep recursivo
# Pesquisa a cadeia de caracteres definida em $2 a partir do diretorio $1
#
find $1 -type f -print|xargs grep -l “$2”

Na execu??o deste script procuramos, a partir do diret?rio definido na vari?vel $1, todos os arquivos que continham a cadeia definida na vari?vel $2.

Exatamente a mesma coisa poderia ser feito se a linha do programa fosse a seguinte:

find $1 -type f -exec grep -l “$2” {} \;

Este processo tem duas grandes desvantagens sobre o anterior:

1. A primeira ? bastante vis?vel: o tempo de execu??o deste m?todo ? muito superior ao daquele, isso porque o grep ser? feito em cada arquivo que lhe for passado pelo find, um-a-um, ao passo que com o xargs, ser? passada toda, ou na pior das hip?teses, a maior parte poss?vel, da lista de arquivos gerada pelo find;

2. Dependendo da quantidade de arquivos encontrados que atendem ao find, poderemos ganhar aquela famosa e fat?dica mensagem de erro “Too many arguments” indicando um estouro da pilha de execu??o do grep. Como foi dito no item anterior, se usarmos o xargs ele passar? para o grep a maior quantidade de par?metros poss?vel, suficiente para n?o causar este erro, e caso necess?rio executar? o grep mais de uma vez.

ATEN??O! A? pessoal do linux que usa o ls colorido que nem porta de tinturaria: nos exemplos a seguir que envolvem esta instru??o, voc? devem usar a op??o –color=none, sen?o existem grandes chances dos resultados n?o ocorrerem como o esperado.

Vamos agora analisar um exemplo que ? mais ou menos o inverso deste que acabamos de ver. Desta vez, vamos fazer um script para remover todos os arquivos do diret?rio corrente, pertencentes a um determinado usu?rio.

A primeira id?ia que surge ?, como no caso anterior, usar um comando find, da seguinte maneira:

$ find . -user cara -exec rm -f {} \;

Quase estaria certo, o problema ? que desta forma voc? removeria n?o s? os arquivos do cara no diret?rio corrente, mas tamb?m de todos os outros subdiret?rios “pendurados” neste. Vejamos ent?o como fazer:

$ ls -l | grep ” cara ” | cut -c55- | xargs rm

Desta forma, o grep selecionou os arquivos que continham a cadeia cara no diret?rio corrente listado pelo ls -l. O comando cut pegou somente o nome dos arquivos, passando-os para a remo??o pelo rm usando o comando xargs como ponte.

mais xargs

Colabora??o: J?lio Neves

Continuamos hoje o que come?amos ontem, isto ?, a ver as facilidades oferecidas pelo comando xargs.

O xargs ? tamb?m uma excelente ferramenta de cria??o de one-liners (scripts de somente uma linha). Veja este para listar todos os donos de arquivos (inclusive seus links) “pendurados” no diret?rio /bin e seus subdiret?rios.

$ find /bin -type f -follow | \
xargs ls -al | tr -s ‘ ‘ | cut -f3 -d’ ‘ | sort -u

Muitas vezes o /bin ? um link (se n?o me engano, no Solaris o ?) e a op??o -follows obriga o find a seguir o link. O comando xargs alimenta o ls -al e a seq??ncia de comandos seguinte ? para pegar somente o 3? campo (dono) e classific?-lo devolvendo somente uma vez cada dono (op??o -u do comando sort).

Voc? pode usar as op??es do xargs para construir comandos extremamente poderosos. Para exemplificar isso e come?ar a entender as principais op??es desta instru??o, vamos supor que temos que remover todos as arquivos com extens?o .txt sob o diret?rio corrente e apresentar os seus nomes na tela. Veja o que podemos fazer:

$ find . -type f -name “*.txt” | \
xargs -i bash -c “echo removendo {}; rm {}”

A op??o -i do xargs troca pares de chaves ({}) pela cadeia que est? recebendo pelo pipe (|). Ent?o neste caso as chaves ({}) ser?o trocadas pelos nomes dos arquivos que satifa?am ao comando find.

Olha s? a brincadeira que vamos fazer com o xargs:

$ ls | xargs echo > arq.ls
$ cat arq.ls
arq.ls arq1 arq2 arq3
$ cat arq.ls | xargs -n1
arq.ls
arq1
arq2
arq3

Quando mandamos a sa?da do ls para o arquivo usando o xargs, comprovamos o que foi dito anteriormente, isto ?, o xargs manda tudo que ? poss?vel (o suficiente para n?o gerar um estouro de pilha) de uma s? vez. Em seguida, usamos a op??o -n 1 para listar um por vez. S? para dar certeza veja o exemplo a seguir, quando listaremos dois em cada linha:

$ cat arq.ls | xargs -n 2
arq.ls arq1
arq2 arq3

Mas a linha acima poderia (e deveria) ser escrita sem o uso de pipe (|), da seguinte forma:

$ xargs -n 2 < arq.lsOutra op??o legal do xargs ? a -p, na qual o xargs pergunta se voc? realmente deseja executar o comando. Digamos que em um diret?rio voc? tenha arquivo com a extens?o .bug e .ok, os .bug est?o com problemas que ap?s corrigidos s?o salvos como .ok. D? uma olhadinha na listagem deste diret?rio:$ ls dir
arq1.bug
arq1.ok
arq2.bug
arq2.ok

arq9.bug
arq9.ok

Para comparar os arquivos bons com os defeituosos, fazemos:

$ ls | xargs -p -n2 diff -c
diff -c arq1.bug arq1.ok ?…y
….
diff -c arq9.bug arq9.ok ?…y

Para finalizar, o xargs tamb?m tem a op??o -t, onde vai mostrando as instru??es que montou antes de execut?-las. Gosto muito desta op??o para ajudar a depurar o comando que foi montado.

Ent?o podemos resumir o comando de acordo com a tabela a seguir:

Op??o A??o

-i Substitui o par de chaves ({}) pelas cadeias recebidas
-nNum Manda o m?ximo de par?metros recebidos, at? o m?ximo de Num para o comando a ser executado
-lNum Manda o m?ximo de linhas recebidas, at? o m?ximo de Num para o comando a ser executado
-p Mostra a linha de comando montada e pergunta se deseja execut?-la
-t Mostra a linha de comando montada antes de execut?-la

Duvidas? julio.neves@gmail.com
Deseja fazer curso de Programa??o em Shell? julio.neves@tecnohall.com.br

Posted in Sem categoria

Apache 2.0 + PHP4/5 + MySQL Server

Neste artigo iremos mostrar como instalar e configurar uma solu??o “LAMP”, usando os fontes dos aplicativos para a instala??o.

Considera??es iniciais:

SO: Debian Gnu/Linux
Kernel 2.4.29

Pacotes necess?rios:
Apache 2.0.52
PHP5.0.3
LibXML2
zlib 1.2.2
MySQL 4.1.10

Instalando a biblioteca LibXML2

Para iniciarmos nossas configura??es vamos instalar o libxml2, para isso siga os procedimentos abaixo:

#tar -zxvf libxml2-2.6.0.tar.gz
#cd libxml2-2.6.0
#./configure
#make
#make install


Instalando o Zlib 1.2.2

#tar -zxvf zlib-1.2.2.tar.gz
#cd zlib-1.2.2
#./configure
#make
#make install

Instalando o Apache 2.0.52

Tendo instalado as bibliotecas necess?rias vamos agora instalar o servidor web Apache 2:

#tar -zxvf httpd-2.0.52.tar.gz
#./configure –prefix=/usr/local/apache2 –enable-so
#make
#make install

Adicione um nome ao servidor Apache, em ServerName dentro do /usr/local/apache/conf/httpd.conf digite um nome para o Apache.

Instalando o MySQL Server.

O MySQL iremos usar o utilit?rio Apt-GET para agilizar o processo de instala??o; edite seu seu arquivo de Mirrors de Apt e adicione as linhas:

deb http://ftp.br.debian.org/debian/ testing main
deb-src http://ftp.br.debian.org/debian/ testing main

Depois use os comandos abaixo para atualizar a base de dados do Apt-Get:

#apt-get update
#apt-get install mysql-server libmysqlclient10-dev

Responda atentamente as quest?es que ser?o feitas pelo DebConf.

Instalando o PHP5

Descompacte o pacote do PHP5 usando as instru??es passadas acima, depois entre no diret?rio php5.0.3RC1 e entre com os comandos abaixo:

#./configure –prefix=/usr/local/php5 –with-apxs2=/usr/local/apache2/bin/apxs –enable-track-vars –with-zlib –with-mysql
#make
#make install

Copie o arquivo php.ini-dist para a pasta /usr/local/php5/lib/ .
Dentro do arquivo php.ini habilite zend.ze1_compatibility_mode mudando para
On, com isso ? habilitado a compatibilidade com as vers?es de PHP4

zend.ze1_compatibility_mode = On

Depois edite o arquivo /usr/local/apache2/conf/httpd.conf e adione as linhas:

LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php

procure pela linhas de arquivos de ?ndice “DirectoyIndex” e adicione o seguinte conte?do:

DirectoryIndex index.php index.php4

Instalando o PHPMyadmin 2.6.0

Descompacte o pacote phpMyadmin-2.6.0-pl2.tar.gz, copie a pasta para /usr/local/apache2/htdocs/ , eu sugiro que ao copiar a pasta do PHPMyadmin voc? mude o nome da pasta para phpmyadmin, feito isso edite o arquivo /usr/local/apache2/htdocs/phpmyadmin/config.inc.php, procure pela linha “root” entre com as informa??es dentro das aspas simples como usu?rio do MySQL, senha e ainda caso queira isolar o usu?rio a manipular apenas uma base de dados, na variav?l ‘only_db’ informe o nome da base de dados, um exemplo de configura??o ficaria assim:

$cfg[‘Servers’][$i][‘auth_type’] = ‘http’; // Authentication method (config, http or cookie based)?
$cfg[‘Servers’][$i][‘user’] = ‘root’; // MySQL user
$cfg[‘Servers’][$i][‘password’] = ‘minhasenha’; // MySQL password (only needed
$cfg[‘Servers’][$i][‘only_db’] = ”; // If set to a db-name, only

Com isso j? teremos um ambiente de desenvolvimento dentro de nosso servidor usando uma solu??o livre baseadono “LAMP”.

Espero que tenham gostado, qualquer d?vida ? s? entrar em contato.

At? a pr?xima.

Posted in Sem categoria

O Comando Paste

Colabora??o: J?lio Neves

O paste ? um comando pouco usado por sua sintaxe ser pouco
conhecida. Vamos brincar com 2 arquivos criados da seguinte
forma:

$ seq 10 > inteiros
$ seq 2 10 > pares

Para ver o conte?do dos arquivos criados, vamos usar o paste
na sua forma careta:

$ paste inteiros pares
1 2
2 4
3 6
4 8
5 10
6
7
8
9
10

Agora vamos transformar a coluna do pares em linha:

$ paste -s pares
2 4 6 8 10

O separador default ? , mas isso pode ser alterado com
a op??o -d. Ent?o para calcular a soma do conte?do de pares
primeiramente far?amos:

$ paste -s -d’+’ pares # tamb?m poderia ser -sd’+’
2+4+6+8+10

e depois passar?amos esta linha para a calculadora (bc)
e ent?o ficaria:

$ paste -s -d’+’ pares | bc
30

Assim sendo, para calcular o fatorial do n?mero contido em
$Num, basta:

$ seq $Num | paste -sd’*’ | bc

At? amanh?…

Posted in Sem categoria

Intel lan?a Pentium 4 de 64 bits para PCs

Intel lan?a Pentium 4 de 64 bits para PCs

Segunda-feira, 21 fevereiro de 2005 – 11:50
IDG Now!
A Intel lan?a, nesta segunda-feira (21/02), a primeira atualiza??o de sua fam?lia Pentium 4 de microprocessadores desde que a companhia decidiu que havia alcan?ado o limite da velocidade de clock do componente.

Os quatro novos processadores Pentium 4 contam com 1 Megabyte (MB) extra no n?vel 2 de mem?ria cache (L2), elevando o total de nem?ria do chip para 2 MB. A mem?ria cache ? usada para armazenar dados frequentemente acessados no processador para que o componente possa processar a informa??o com mais rapidez.

Os chips j? est?o preparados para trabalhar com sistemas operacionais e aplica??es de 64 bits. Tanto a Intel como a Advanced Micro Devices Inc. (AMD), que lan?aram chips de 64 bits para desktops em 2003, est?o suportando o novo Windows XP de 64 bits da Microsoft, cujo lan?amento est? previsto para o primeiro semestre deste ano. Os sistemas operacionais de c?digo-fonte aberto da plataforma Linux j? s?o compat?veis com os novos chips.

A fam?lia P4 engloba os processadores Pentium 4 660 de 3.6 Gigahertz (GHz), P4 650 de 3.4GHz, P4 640 de 3.2GHz e P4 630 de 3GHz.

A Intel tamb?m lan?ou o Pentium 4 Extreme Edition de 3.73GHz com 2 MB de mem?ria cache L2 e 1066 Megahertz de barramento frontal. Este chip ? geralmente usado por gamers e entusiastas de PCs, que buscam gastar um pouco mais para ter uma m?quina com m?xima performance.

Em lotes de 1 mil unidades, o chip 660 tem pre?o sugerido de 605 d?lares, o modelo 650 custa 401 d?lares, o 640 sai por 273 d?lares e o 630 por 224 d?lares. O lote do P4 Extreme Edition de 3.73GHz custa 999 d?lares.

Entre os fabricantes que come?am a oferecer desktops com a nova linha P4 est?o a HP e a Gateway. Nesta segunda-feira, a HP inicia a oferta de m?quinas com processadores P4 660 e P4 650, enquanto as m?quinas com chips P4 630 e P4 640 come?am a ser oferecidas em 9 de mar?o.
Tom Krazit – IDG News Service, EUA

Posted in Sem categoria

Substitui??o de Processos

Colabora??o: J?lio Neves

Ontem aqui apareceu uma dica sobre named pipes, hoje vou mostrar que o Shell tamb?m usa os named pipes de uma maneira bastante singular, que ? a substitui??o de processos (process substitution). Uma substitui??o de processos ocorre quando voc? p?e um < ou um > grudado na frente do par?ntese da esquerda. Teclando-se o comando:

$ cat < (ls -l)Resultar? no comando ls -l executado em um subshell como ? normal, por?m redirecionar? a sa?da para um named pipe tempor?rio, que o Shell cria, nomeia e depois remove. Ent?o o cat ter? um nome de arquivo v?lido para ler (que ser? este named pipe e cujo dispositivo l?gico associado ? /dev/fd/63), e teremos a mesma sa?da que a gerada pela listagem do ls -l, por?m dando um ou mais passos que o usual.Como poderemos constatar isso? F?cil… Veja o comando a seguir:$ ls -l >(cat)
l-wx—— 1 jneves jneves 64 Aug 27 12:26 /dev/fd/63 -> pipe:[7050]

?… Realmente ? um named pipe.

Voc? deve estar pensando que isto ? uma maluquice de nerd, n?? Ent?o suponha que voc? tenha 2 diret?rios: dir e dir.bkp e deseja saber se os dois est?o iguais (aquela velha d?vida: ser? que meu backup est? atualizado?). Basta comparar os dados dos arquivos dos diret?rios com o comando cmp, fazendo:

$ cmp < (cat dir/*) <(cat dir.bkp/*) || echo backup furadoou, melhor ainda:$ cmp <(cat dir/*) <(cat dir.bkp/*) >/dev/null || echo backup furado

Este ? um exemplo meramente did?tico, mas s?o tantos os comandos que produzem mais de uma linha de sa?da, que serve como guia para outros. Eu quero gerar uma listagem dos meus arquivos, numerando-os e ao final dar o total de arquivos do diret?rio corrente:

while read arq
do
((i++)) # assim nao eh necessario inicializar i
echo “$i: $arq”
done < <(ls)
echo “No diretorio corrente (`pwd`) existem $i arquivos”

T? legal, eu sei que existem outras formas de executar a mesma tarefa. Mas tente fazer usando while, sem usar substitui??o de processos que voc? ver? que este m?todo ? muito melhor.

At? amanh?…

Duvidas? julio.neves@gmail.com
Deseja fazer curso de Programa??o em Shell? julio.neves@tecnohall.com.br

Posted in Sem categoria

Configurando Samba com servidor de data/hora

2-) CONFIGURANDO O SAMBA COMO SERVIDOR DE HORA

2.1- Edite o arquivo /etc/inetd.conf e descomente a linha:

time stream tcp nowait root internal

2.2- Reinicie o inet com o comando:

/etc/rc.d/init.d/inet restart

3- Se vc estiver usando o samba como PDC para as m?quinas Win, d? para sincronizar
automaticamente no logon:
3.1- crie o diretorio /home/samba/netlogon, com permiss?o drwxr-xr-x
3.2- Na se??o [global] do /etc/smb.conf, inclua as linhas:
time server = True
logon script = logon.bat
3.3- Inclua a se??o [netlogon] no /etc/smb.conf conforme abaixo:
[netlogon]
comment = Servico de Logon
path = /home/samba/netlogon
writable = no
share modes = no
browseable = no
3.4- Fa?a um arquivo de lote (.bat) no windows (n?o pode ser no linux) contendo
a linha abaixo e exporte (ftp) para o diret?rio /home/samba/netlogon, com
permiss?es -rwxr-xr-x:
net time \\nome_do_servidor_samba /set /yes
3.5- V?rias outras tarefas podem ser implementadas no arquivo de lote, como por
exemplo mapear os diret?rios disponibilizados pelo samba para as m?quinas

Posted in Sem categoria

Configurando corretamente o Gnu/Linux para rodar DVD/Movies.

Todos n?s sabemos que rodar Filmes em DVD no Gnu/Linux, n?o ? uma tarefa t?o simples assim quando queremos que a execu??o do DVD seja perfeita.

Neste tutorial estaremos mostrando como customizar seu Gnu/Linux para tirar 100% de aproveitamento na execu??o de filmes em DVD no sistema do Debian Gnu/Linux.

Considera??es iniciais:

Sistema Operacional:
Debian 3.0 ( woody ) / kernel 2.4.29

M?dulos do kernel:
AgpGart

Aplicativos usados:
Gnome-VLC 0.8.1-1: Player Multi m?dia para todos formatos de ?udio e video
WxVLC 0.8.1-1: Frontend para o VLC
QVLC 0.8.1-1: Frontend para o VLC
HDparm 5.9-1: Aplicativo para setar a alta performance dos par?metros do disco r?gido

Bibliotecas compartilhadas:
Libdvdcss2 1.2.8-1: Biblioteca para decripita??o de regi?es.

Instalando Aplicativos:

Os pacotes necess?rios podem ser instalados e configurados atrav?s da ferramenta Apt do Debian, abaixo relacionamos os Mirrors para download dos aplicativos necess?rios para dar sequ?ncia em exemplo:

# As linhas abaixo devem ser adicionadas ao arquivo /etc/apt/sources.list
deb http://ftp.br.debian.org/debian/ testing main
deb-src http://ftp.br.debian.org/debian/ testing main
deb http://security.debian.org/ testing/updates main
deb http://mirrors.kernel.org/debian/ stable main
deb-src http://mirrors.kernel.org/debian/ stable main
deb http://download.videolan.org/pub/videolan/debian woody main
deb-src http://download.videolan.org/pub/videolan/debian woody main
deb http://download.videolan.org/pub/videolan/debian sarge main
deb-src http://download.videolan.org/pub/videolan/debian sarge main
deb http://download.videolan.org/pub/videolan/debian sid main
deb-src http://download.videolan.org/pub/videolan/debian sid main

Depois de adicionado os mirrors devemos atualizar o banco de dados de pacotes do Apt-Get, para isso use os comandos:

#apt-get update

na sequ?ncia instale os aplicativos com o comando:

#apt-get install gnome-vlc libdvdcss2 wxvlc qvlc hdparm

Considerando neste ponto que os pacotes j? est?o instalados e devidamente configurados, devemos configurar manualmente a biblioteca compartilhada Libxosd, para isso use o comando:

#dpkg -i –force-all /var/cache/apt/archives/libxv*.deb

Com isso os pacotes necess?rios j? estar?o configurados, agora devemos configurar o sistema operacional de forma que possamos tirar 100% de aproveitamento na execu??o do DVD.

Configurando o sistema:

Para come?armos as configura??es no sistema ? importante saber se seu disco r?gido e seu DVD-Rom possuem suporte a tecnologia Ultra-DMA, a forma mais f?cil de descobrir ? usando o aplicativo hdparm, basta entrar com o comando abaixo e verificar a sa?da padr?o:

Como super usu?rio, vamos iniciar os teste em nossos dispositivos:

#hdparm -c -d /dev/hda

A sa?da padr?o do comando nosso caso ser?:

/dev/hda:
IO_support=0 (default 16-bit)
using_dma=0 (off)

Depois use:

# hdparm -t /dev/hda
/dev/hda:
Timing buffered disk reads: 158 MB in 3.03 seconds = 52.15 MB/sec

Podemos verificar de forma clara que o suporte a U-DMA e tamb?m o acesso ao disco em 32 bits est?o desativados, a velocidade de leitura do disco ? de 52.12 MB/sec.

Para melhorarar este aspecto devemos ativar o suporte a U-DMA e ativar o acesso em 32bits.

# hdparm -c 1 -d 1 /dev/hda

Teste novamento com o comando hdparm e verifique as altera??es:

#hdparm -c -d /dev/hda
/dev/hda:
IO_support=0 (default 32-bit)
using_dma=0 (on )

Placas m?es mais antigas como por exemplo para modelos at? Intel Pentium 150 Mhz e fam?lia 486/586 n?o possibilitam a ativa??o do U-DMA, por?m quase todas possuem acesso a 32bits.

Adicione o par?metro hdparm -c 1 -d 1 /dev/hda ,no arquivo /etc/init.d/bootmisc.sh na pen?ltima linha existente de forma que fique assim:

hdparm -c 1 -d 1 /dev/hda
: exit 0

Salve o arquivo e iremos para o pr?ximo passo:

Ativando m?dulo AGP no Kernel:

na distribui??o Debian Gnu/Linux a forma mais f?cil de manipular m?dulos do kernel ? com o aplicativos Modconf:

Para isso entre com o comando modconf procurando a sess?o
kernel/drivers/char/agp e habilite a op??o agpgart selecionando com o cursor e teclando “Enter” para ativar e depois selecione “Exit” duas vezes para sair .

Usando o VLC:

O VLC ? muito simples de ser usado, por?m alguma vezes alguns DVD’s com suporte a Dolby 5.1 geram problemas com a sa?da de som na execu??o do filme, para contornar este problema use o menu de ?udio para selecionar a op??o Stereo.

Considera??es finais:

Para verificar quais os modelos de placas que possuem suporte a Dolby 5.1 verifique no site:

http://www.linuxhardware.org/

ScreenSHOT:

http://fsbox.org/busca/upload_files/screenshot.jpg

Posted in Sem categoria