<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Gustavo Picoloto &#187; shell script</title> <atom:link href="http://www.picoloto.com.br/tag/shell-script/feed" rel="self" type="application/rss+xml" /><link>http://www.picoloto.com.br</link> <description>Dicas e "notícias" sobre Linux, Segurança e etc ...</description> <lastBuildDate>Wed, 14 Dec 2011 17:48:40 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3</generator> <item><title>Alguns comandos úteis em Solaris</title><link>http://www.picoloto.com.br/solaris/alguns-comandos-uteis-em-solaris.php</link> <comments>http://www.picoloto.com.br/solaris/alguns-comandos-uteis-em-solaris.php#comments</comments> <pubDate>Mon, 30 Mar 2009 22:37:30 +0000</pubDate> <dc:creator>Gustavo</dc:creator> <category><![CDATA[solaris]]></category> <category><![CDATA[shell script]]></category><guid
isPermaLink="false">http://www.picoloto.com.br/?p=196</guid> <description><![CDATA[A maioria dos servidores onde trabalho é baseada em Sparc Solaris. Algumas pessoas conhecem Linux ao invés de Unix e ficam perguntando coisas como &#8220;como é que se chama o comando top do Solaris?&#8221; Para manter uma lista &#8220;organizada&#8221; para mim, meus colegas de trabalho e quem mais precisar, segue uma lista simples com alguns [...]]]></description> <content:encoded><![CDATA[<p>A maioria dos servidores onde trabalho é baseada em Sparc Solaris. Algumas pessoas conhecem Linux ao invés de Unix e ficam perguntando coisas como &#8220;como é que se chama o comando <em><strong>top</strong></em> do Solaris?&#8221;</p><p>Para manter uma lista &#8220;organizada&#8221; para mim, meus colegas de trabalho e quem mais precisar, segue uma lista simples com alguns comandos (eventualmente eu adiciono mais alguma coisa, mas vai isso mesmo agora):</p><p><em><strong>prstat -a</strong></em> -&gt; lembra o &#8220;top&#8221; do Linux.</p><p><em><strong>vmstat 1</strong></em> -&gt; mostra status da memória e atualiza a cada 1 segundo. Sem o &#8220;1&#8243; apenas mostra o status e finaliza.</p><p><strong><em>iostat 1</em></strong> -&gt; mostra status de I/O a e atualiza a cada 1 segundo.</p><p><em><strong> mpstat 1</strong></em> -&gt; mostra status de cada cpu e atualiza a cada 1 segundo.</p><p><em><strong>/usr/ucb/ps auxwww|grep 15251</strong></em> -&gt; mostra &#8220;todo&#8221; o comando cujo PID é 15251. É necessário digitar o PATH completo (ou mudar a ordem do PATH da máquina) pois este é outro <strong><em>ps</em></strong> que vem nos Solaris. Não sabia que tinha outro ps? Dê uma <em>passeada</em> em <em>/usr/ucb</em> ou em <em>/usr/xpg4/bin</em> e veja o que mais tem repetido mas com algumas funcionalidades diferentes :)</p><p><em><strong>psrinfo -v</strong></em> -&gt; mostra o processador instalado e velocidade.<br
/> <em><strong></strong></em></p><p><em><strong>prtvtoc /dev/dsk/c0d0s0</strong></em> -&gt; mostra informações sobre partições do disco.<br
/> <em><strong></strong></em></p><p><em><strong>/usr/sbin/prtconf</strong></em> -&gt; mostra informações sobre a máquina (incluindo memória instalada).</p><p><strong><em>kstat -c net|grep net</em></strong> -&gt; mostra interfaces de rede disponíveis.</p><p><strong>prtdiag</strong> -&gt; mostra algumas informações do sistema.</p>]]></content:encoded> <wfw:commentRss>http://www.picoloto.com.br/solaris/alguns-comandos-uteis-em-solaris.php/feed</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Dica sobre o comando split</title><link>http://www.picoloto.com.br/linux/dica-sobre-o-comando-split.php</link> <comments>http://www.picoloto.com.br/linux/dica-sobre-o-comando-split.php#comments</comments> <pubDate>Wed, 25 Mar 2009 00:19:35 +0000</pubDate> <dc:creator>Gustavo</dc:creator> <category><![CDATA[Linux]]></category> <category><![CDATA[shell script]]></category> <category><![CDATA[split]]></category><guid
isPermaLink="false">http://www.picoloto.com.br/?p=188</guid> <description><![CDATA[Hoje um colega do trampo me perguntou se tem algum comando rápido e fácil, em unix, pra dividir um arquivo em vários. Como sei que esta pode ser uma dúvida para mais pessoas, resolvi publicar este mini artigo com o resumo da conversa. Pergunta: tem algum comando rápido e fácil de unix pra dividir um [...]]]></description> <content:encoded><![CDATA[<p>Hoje um colega do trampo me perguntou se tem algum comando rápido e fácil, em unix, pra dividir um arquivo em vários.</p><p>Como sei que esta pode ser uma dúvida para mais pessoas, resolvi publicar este mini artigo com o resumo da conversa.<span
id="more-188"></span></p><p><strong>Pergunta</strong>: tem algum comando rápido e fácil de unix pra dividir um arquivo em vários?<br
/> <strong>Resposta</strong>: split<br
/> <strong>Resposta</strong>: split -b 100M arquivo_origem destino<br
/> <strong>Resposta</strong>: vai quebrar o arquivo_origem em arquivos de 100 mbytes e o prefixo do nome será &#8220;destino&#8221;<br
/> <strong>Pergunta</strong>: tem como ser pela quantidade de linhas?<br
/> <strong>Resposta</strong>: split -l 100 arquivo_origem destino<br
/> <strong>Resposta</strong>: vai quebrar em arquivos de 100 linhas</p><p>Acho que pelo resumo do diálogo já é possível que se tenha uma ideia básica do funcionamento do comando split. Caso tenha mais dúvidas, consulte o help:</p><blockquote><pre>$ split --help</pre><pre>Usage: split [OPTION] [INPUT [PREFIX]]</pre><pre>Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default</pre><pre>size is 1000 lines, and default PREFIX is `x'.  With no INPUT, or when INPUT</pre><pre>is -, read standard input.</pre><pre>Mandatory arguments to long options are mandatory for short options too.</pre><pre>-a, --suffix-length=N   use suffixes of length N (default 2)</pre><pre>-b, --bytes=SIZE        put SIZE bytes per output file</pre><pre>-C, --line-bytes=SIZE   put at most SIZE bytes of lines per output file</pre><pre>-d, --numeric-suffixes  use numeric suffixes instead of alphabetic</pre><pre>-l, --lines=NUMBER      put NUMBER lines per output file</pre><pre>--verbose           print a diagnostic to standard error just</pre><pre>before each output file is opened</pre><pre>--help     display this help and exit</pre><pre>--version  output version information and exit</pre><pre>SIZE may have a multiplier suffix:</pre><pre>b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,</pre><pre>GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.</pre></blockquote>]]></content:encoded> <wfw:commentRss>http://www.picoloto.com.br/linux/dica-sobre-o-comando-split.php/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Introdução a shell script</title><link>http://www.picoloto.com.br/linux/shell.php</link> <comments>http://www.picoloto.com.br/linux/shell.php#comments</comments> <pubDate>Sat, 19 Jan 2008 19:44:36 +0000</pubDate> <dc:creator>Gustavo</dc:creator> <category><![CDATA[Linux]]></category> <category><![CDATA[bash]]></category> <category><![CDATA[shell script]]></category><guid
isPermaLink="false">http://cenoura.homelinux.com/linux/shell.php</guid> <description><![CDATA[Introdução Programar em shell faz voltarmos a filosofia clássica do UNIX que é quebrar projetos complexos em subtarefas mais simples (isso é conhecido como princípio KISS, de Keep It Simple Stupid). Um conhecimento em shell script é essencial para qualquer um que deseja se tornar um administrador de sistemas, pois usando scripts, podemos realizar tarefas [...]]]></description> <content:encoded><![CDATA[<p>Introdução Programar em shell faz voltarmos a filosofia clássica do UNIX que é quebrar projetos complexos em subtarefas mais simples (isso é conhecido como princípio KISS, de Keep It Simple Stupid). Um conhecimento em shell script é essencial para qualquer um que deseja se tornar um administrador de sistemas, pois usando scripts, podemos realizar tarefas de administração muito mais rapidamente e muito mais facilmente (imagine a diferença entre ter que cadastrar trezentos usuários manualmente ou fazer um script com 6 linhas que cadastra todos estes usuários e ainda pode definir uma senha padrão para eles).</p><p><span
id="more-30"></span> Todos os exemplos daqui podem ser testados bastando apenas salvar o arquivo em formato ASCII (pode-se usar qualquer editor de texto para isso, vi ou emacs por exemplo) e dar a permissão de execução ao arquivo do script (com chmod u+x nome-do-script).</p><p>A essência da programação em scripts pode ser resumida em saber lidar bem com pipes (se pronuncia páipes), redirecionamentos e pouco mais que uma dúzia de comandos.</p><p>Eu pretendo com este (futuro) conjunto de textos passar um exemplo simples e explicar os detalhes dele seja novos comandos ou mesmo o porque de um redirecionamento ao invés de um pipe. Além disso, pretendo explicar alguns conceitos como por exemplo como fazer um laço num script e etc.</p><p>O uso de Pipes No primeiro exemplo, vamos ver um script que simplesmente conta quantos são os usuários cadastrados no sistema.</p><p>#!/bin/bash<br
/> cat /etc/passwd |wc -l</p><p>A primeira linha (#!/bin/bash) apenas informa ao sistema qual shell usar e a segunda, lê o arquivo com informações do usuário e repassa estas informações por pipe para o comando wc -l, que apenas conta o número de linhas recebidas pela entrada padrão (stdin).</p><p>O pipe nada mais é que o símbolo | e este faz com que tudo o que for saída padrão (stdout) do comando antes do pipe seja repassado para a entrada padrão do comando após o pipe. O comando cat neste exemplo irá direcionar o conteúdo do arquivo /etc/passwd para sua saída padrão (este arquivo nada mais é do que o banco de dados de usuários de um sistema Unix e cada usuário é representado por exatamente uma linha deste arquivo). Sabendo que cada usuário ocupa uma linha, basta contarmos quantas linhas tem este arquivo para sabermos quantos usuários o sistema possui. É aí que o comando wc entra. Com o parâmetro -l, wc conta o número de linhas recebidas resultando neste caso no número de usuários do sistema. Simples não ?</p><p>Após salvarmos o arquivo (que vou chamar de script.sh), damos a permissão de execução para o arquivo com chmod u+x script.sh e o executamos com ./script.sh. A saída dele deve ser apenas um número, como 35.</p><p>Aqui começam os problemas: você sabe que existem 35 usuários no sistema, mas e o seu chefe (aquele mesmo que tem dificuldade até para mudar o papel de parede daquele sistema operacional), ele vai saber o que este número sem lógica significa ?</p><p>Expansão de comandos Agora que já vimos como usar pipes, vamos começar a deixar nossos scripts mais amigáveis.</p><p>#!/bin/bash<br
/> echo &#8220;Existem `cat /etc/passwd |wc -l` usuarios no sistema&#8221;</p><p>Neste exemplo, usamos o comando echo que simplesmente irá ecoar tudo o que estiver entre as aspas para a saída padrão mas, antes disso, o bash irá executar os comandos entre as crases e retornar para o echo a saída do comando. O echo vai receber entre as aspas algo como Existem 35 usuarios no sistema e irá ecoar isso (agora o seu chefe vai saber o que o seu script faz !).</p><p>Trabalhando com variáveis Nosso pequeno script até agora apenas executa comandos, ele não armazena informação alguma. Se precisarmos do número de usuários cadastrados no sistema em algum outro momento, teremos que executar os comandos novamente ou podemos armazenar o resultado dele em uma variável:</p><p>#!/bin/bash<br
/> tmp=`cat /etc/passwd | wc -l`<br
/> echo &#8220;Existem $tmp usuarios no sistema&#8221;</p><p>No exemplo anterior, armazenamos o número de usuários do sistema numa variável chamada tmp e a passamos como parâmetro para o echo (o shell expande as variáveis antes de executar o comando, neste exemplo a variável foi tratada pelo shell como se o próprio comando entre crases tivesse sido executado novamente, mas isto não foi preciso pois o shell &#8220;lembrou&#8221; do resultado da última execução). O shell sabe que é uma variável porque colocamos um $ antes do nome dela.</p><p>Trabalhando com laços para (for) Podemos incrementar nosso script fazendo, por exemplo, ele contar quantas vezes um usuário conectou ao sistema. Neste caso, usaremos o comando last, que retorna todos os logins que obtiveram sucesso no sistema desde a instalação do mesmo (ou desde que o log foi rotacionado pela última vez) e o comando cut, que serve para cortar parte de uma linha:</p><p>#!/bin/bash<br
/> for user in `cat /etc/passwd|cut -d &#8220;:&#8221; -f 1`;do<br
/> cont=`last|grep $user|wc -l`<br
/> echo &#8220;usuario $user conectou $cont vezes&#8221;<br
/> done</p><p>Explicando com detalhes: o cut recebe cada linha do comando cat e retorna apenas o primeiro campo (-f 1) usando &#8220;:&#8221; como separador de campos (se você executar apenas cat /etc/passwd poderá observar que o primeiro campo corresponder ao nome dos usuários no sistema). O for construído desta maneira, irá montar um vetor (referenciado pela variável user ) onde cada posição contém o nome de um usuário do sistema. Além disso, cada passo do laço será exatamente o nome de um usuário.</p><p>Dentro do laço, a variável count receberá a saída da execução do comando last (para obter uma lista de todo mundo que se logou no sistema) passando a saída por pipe para grep (onde iremos filtrar para mostrar apenas as linhas com o usu&amp;aaute;rio user) e finalmente irá repassar, também por pipe, para wc (onde iremos contar quantas linhas aparece o nome do usuário, ou seja, quantas vezes ele se logou no sistema).</p><p>Ainda no laço, iremos ecoar o nome do usuário que estamos lendo da lista naquele momento e a valor atual de cont. Para finalizar o laço, usamos done.i</p><p>Testes de condições (if / else) No script anterior, vimos que vários usuários se conectaram 0 vezes ao sistema. A maioria deles é usuário do sistema que nunca terá login algum (se tiver, é bom se analisar o motivo, pode ser alguma falha de segurança sendo explorada).</p><p>Mas e se eu não quiser mostrar quem nunca se conectou ? Poderíamos apenas fazer um teste para ver se a variável cont esta com valor 0 e, se não estiver, imprimimos a mensagem.</p><p>#!/bin/bash<br
/> for user in `cat /etc/passwd|cut -d &#8220;:&#8221; -f 1`;do<br
/> cont=`last|grep $user|wc -l`<br
/> if  [ $cont -ne 0 ]; then<br
/> echo &#8220;usuario $user conectou $cont vezes&#8221;<br
/> fi<br
/> done</p><p>Neste script, adicionamos o teste se (if) onde verificamos se a variável cont é diferente ( -ne, not equal) de zero. Se for diferente, o script executa o bloco entre o if e o fi (fi finaliza um bloco if) e a mensagem informando o número de logins do usuário será mostrada.</p><p>Além disso, poderíamos colocar uma mensagem informando que o usuário nunca se logou ao sistema (ao invés de informar que ele se logou zero vezes).</p><p>#!/bin/bash<br
/> for user in `cat /etc/passwd|cut -d &#8220;:&#8221; -f 1`;do<br
/> cont=`last|grep $user|wc -l`<br
/> if [ $cont -eq 0 ]; then<br
/> echo &#8220;usuario $user nunca conectou ao sistema&#8221;<br
/> else<br
/> echo &#8220;usuario $user conectou $cont vezes&#8221;<br
/> fi<br
/> done</p><p>Neste exemplo, mudamos o teste para se igual (-eq, equal) a zero, então mostre a mensagem e adicionamos um senão ( else), mostre outra mensagem.</p>]]></content:encoded> <wfw:commentRss>http://www.picoloto.com.br/linux/shell.php/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 1/15 queries in 0.007 seconds using disk: basic
Object Caching 270/295 objects using disk: basic

Served from: www.picoloto.com.br @ 2012-02-06 16:58:41 -->
