<?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># rm-rf.es &#187; Comandos</title>
	<atom:link href="http://rm-rf.es/categoria/comandos-unix/feed/" rel="self" type="application/rss+xml" />
	<link>http://rm-rf.es</link>
	<description>Administración de sistemas, Unix, Linux, FreeBSD, Windows, hosting, dominios, servidores...</description>
	<lastBuildDate>Sat, 28 Jan 2012 19:36:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Ver el contenido de btmp y wtmp con utmpdump</title>
		<link>http://rm-rf.es/ver-el-contenido-de-btmp-y-wtmp-con-utmpdump/</link>
		<comments>http://rm-rf.es/ver-el-contenido-de-btmp-y-wtmp-con-utmpdump/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 08:42:46 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[logs]]></category>
		<category><![CDATA[ssh login]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2476</guid>
		<description><![CDATA[El comando utmpdump permite visualizar el contenido de los ficheros btmp y wtmp. Ambos ficheros tienen formato binario y almacenan logs de: btmp: log que almacena un registro de los accesos fallidos al sistema wtmp: log que almacena un registro de los accesos al sistema Los ficheros son ilegibles de forma directa debido a que [...]]]></description>
			<content:encoded><![CDATA[<p>El comando <strong>utmpdump</strong> permite visualizar el contenido de los ficheros <strong>btmp</strong> y <strong>wtmp</strong>. Ambos ficheros tienen formato binario y almacenan logs de:</p>
<ul>
<li><strong>btmp</strong>: log que almacena un registro de los accesos fallidos al sistema</li>
<li><strong>wtmp</strong>: log que almacena un registro de los accesos al sistema</li>
</ul>
<p>Los ficheros son ilegibles de forma directa debido a que están almacenados en binario:</p>
<pre># file wtmp
wtmp: data</pre>
<p>Para ello tenemos el comando utmpdump. Simplemente pasamos el fichero de log como parámetro y podremos visualizar su contenido:</p>
<pre># <strong>utmpdump /var/log/btmp </strong>
Utmp dump of /var/log/btmp
[6] [01585] [    ] [alex    ] [ssh:notty   ] [192.168.1.128       ] [192.168.1.128  ] [Mon Jan 16 21:45:56 2012 CET]
[6] [01585] [    ] [alex    ] [ssh:notty   ] [192.168.1.128       ] [192.168.1.128  ] [Mon Jan 16 21:45:59 2012 CET]
[6] [02927] [    ] [foo  ] [ssh:notty   ] [192.168.1.128       ] [0.0.0.0        ] [Fri Jan 27 21:52:13 2012 CET]
[6] [03787] [    ] [root    ] [ssh:notty   ] [192.168.1.128       ] [192.168.1.128  ] [Fri Jan 27 22:01:35 2012 CET]
[6] [03787] [    ] [root    ] [ssh:notty   ] [192.168.1.128       ] [192.168.1.128  ] [Fri Jan 27 22:01:51 2012 CET]</pre>
<pre># <strong>utmpdump /var/log/wtmp</strong> | head
Utmp dump of /var/log/wtmp
[2] [00000] [~~  ] [reboot  ] [~           ] [2.6.32-220.el6.i686 ] [0.0.0.0        ] [Wed Dec 28 21:01:04 2011 CET]
[1] [00051] [~~  ] [runlevel] [~           ] [2.6.32-220.el6.i686 ] [0.0.0.0        ] [Wed Dec 28 21:01:04 2011 CET]
[6] [01052] [1   ] [LOGIN   ] [tty1        ] [                    ] [0.0.0.0        ] [Wed Dec 28 21:01:25 2011 CET]
[6] [01054] [2   ] [LOGIN   ] [tty2        ] [                    ] [0.0.0.0        ] [Wed Dec 28 21:01:25 2011 CET]
[6] [01056] [3   ] [LOGIN   ] [tty3        ] [                    ] [0.0.0.0        ] [Wed Dec 28 21:01:25 2011 CET]
[6] [01060] [4   ] [LOGIN   ] [tty4        ] [                    ] [0.0.0.0        ] [Wed Dec 28 21:01:25 2011 CET]
[6] [01062] [5   ] [LOGIN   ] [tty5        ] [                    ] [0.0.0.0        ] [Wed Dec 28 21:01:25 2011 CET]
[6] [01064] [6   ] [LOGIN   ] [tty6        ] [                    ] [0.0.0.0        ] [Wed Dec 28 21:01:25 2011 CET]
[7] [01052] [1   ] [root    ] [tty1        ] [                    ] [0.0.0.0        ] [Wed Dec 28 21:01:31 2011 CET]
[7] [03021] [ts/0] [root    ] [pts/0       ] [192.168.1.128       ] [192.168.1.128  ] [Wed Dec 28 21:10:28 2011 CET]</pre>
<p>utmpdump también nos permite visualizar el contenido del log a tiempo real (como un <strong>tail -f</strong>):</p>
<pre># <strong>utmpdump -f /var/log/wtmp </strong>
Utmp dump of /var/log/wtmp
[8] [01555] [6   ] [        ] [tty6        ] [                    ] [0.0.0.0        ] [Fri Jan 27 22:20:43 2012 CET]
[2] [00000] [~~  ] [reboot  ] [~           ] [2.6.32-220.el6.i686 ] [0.0.0.0        ] [Sat Jan 28 10:34:12 2012 CET]
[1] [00051] [~~  ] [runlevel] [~           ] [2.6.32-220.el6.i686 ] [0.0.0.0        ] [Sat Jan 28 10:34:12 2012 CET]
...
...</pre>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/configurar-un-syslog-remoto-para-centralizar-logs/" title="Configurar un syslog remoto para centralizar logs">Configurar un syslog remoto para centralizar logs</a></li><li><a href="http://rm-rf.es/login-ssh-sin-password-de-forma-rapida-y-sencilla/" title="Login SSH sin password de forma rápida y sencilla">Login SSH sin password de forma rápida y sencilla</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/ver-el-contenido-de-btmp-y-wtmp-con-utmpdump/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comando sar: controlar la actividad de CPU (I)</title>
		<link>http://rm-rf.es/comando-sar-controlar-la-actividad-de-cpu-i/</link>
		<comments>http://rm-rf.es/comando-sar-controlar-la-actividad-de-cpu-i/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 18:08:09 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[cpu]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2460</guid>
		<description><![CDATA[En Linux y Unix existen otros comandos además de top para monitorizar de un modo eficiente la utilización de las CPU en el sistema. Hoy vamos a ver unos cuantos ejemplos del comando sar. En este primer artículo nos centramos en la CPU, veremos en sucesivos que podemos ir más allá (disco, red, procesos, carga, [...]]]></description>
			<content:encoded><![CDATA[<p>En <strong>Linux y Unix</strong> existen otros comandos además de <a title="El comando TOP" href="http://rm-rf.es/el-comando-top/">top</a> para <strong>monitorizar de un modo eficiente la utilización de las CPU</strong> en el sistema. Hoy vamos a ver unos cuantos ejemplos del <strong>comando sar</strong>. En este primer artículo nos centramos en la CPU, veremos en sucesivos que podemos ir más allá (disco, red, procesos, carga, etc).</p>
<p>Para poder comenzar a utilizar sar, debemos tener en cuenta que es necesario por un lado tener corriendo el proceso <strong>sysstat</strong>:</p>
<pre># /etc/init.d/sysstat start
# chkconfig sysstat on</pre>
<p>Además, hay que configurar sysstat para permitir la recolección de datos. Estos datos estadísticos se almacenan en /var/log/sysstat/sa*. Para ello es necesario tener estos parámetros en el fichero de configuración <strong>/etc/sysconfig/sysstat</strong>. Lo hacemos antes de reiniciar sysstat:</p>
<pre>ENABLED="false"
SA1_OPTIONS="-S DISK"</pre>
<p>Normalmente, si se instala el paquete por yum o apt, automáticamente se configuran los cron necesarios para recolectar la información que utiliza sar:</p>
<pre>$ more /etc/cron.d/sysstat
# Global variables:
#
#  our configuration file
DEFAULT=/etc/default/sysstat
#  default setting, overriden in the above file
ENABLED=false
SA1_OPTIONS=""

# Activity reports every 10 minutes everyday
5-55/10 * * * * root [ -x /usr/lib/sysstat/sa1 ] &amp;&amp; { [ -r "$DEFAULT" ] &amp;&amp; . "$DEFAULT" ; [ "$ENABLED" = "true" ] &amp;&amp; exec /usr/lib/sysstat/
sa1 $SA1_OPTIONS 1 1 ; }

# Additional run at 23:59 to rotate the statistics file
59 23 * * * root [ -x /usr/lib/sysstat/sa1 ] &amp;&amp; { [ -r "$DEFAULT" ] &amp;&amp; . "$DEFAULT" ; [ "$ENABLED" = "true" ] &amp;&amp; exec /usr/lib/sysstat/sa1
$SA1_OPTIONS 60 2 ; }</pre>
<p>Vamos a ver unos cuantos ejemplos, os recomiendo como siempre revisar la página man porque es un comando con mucho potencial y opciones.</p>
<h2>Mostrar el uso de CPU en un intervalo de tiempo determinado</h2>
<p>El siguiente ejemplo muestra el uso de cpu cada 2 segundo:</p>
<pre># sar -u 2
Linux 2.6.28-17-generic (sistemas) 	22/01/12 	_i686_	(2 CPU)

19:14:05        CPU     %user     %nice   %system   %iowait    %steal     %idle
19:14:07        all     12,08      0,00      3,86      0,72      0,00     83,33
19:14:09        all      8,52      0,00      2,19      0,00      0,00     89,29
19:14:11        all      8,39      0,00      2,88      0,72      0,00     88,01
...
...
...</pre>
<p>EL siguiente ejemplo hace lo mismo a excepción de que se ejecutará únicamente 4 veces. El anterior por contra se ejecutaba continuamente hasta que lo cancelaramos. Lo interesante de este ejemplo es que al final nos muestra una media de utilización durante el tiempo que se ha ejecutado:</p>
<pre># sar -u 2 4
Linux 2.6.28-17-generic (sistemas) 	22/01/12 	_i686_	(2 CPU)

19:16:39        CPU     %user     %nice   %system   %iowait    %steal     %idle
19:16:41        all     35,47      0,00      6,40      3,20      0,00     54,93
19:16:43        all     26,57      0,00     10,78      0,00      0,00     62,66
19:16:45        all     13,87      0,00      3,65      1,46      0,00     81,02
19:16:47        all     19,07      0,00      5,13      0,00      0,00     75,79
<strong>Media: all 23,69 0,00 6,46 1,17 0,00 68,68</strong></pre>
<p>Para los que no conozcáis el significado de cada columna:</p>
<ul>
<li><strong>CPU</strong>: CPUs que se stán monitorizando, en los casos anteriores todas las del equipo.</li>
<li><strong>%user</strong>:  Porcentaje de tiempo de CPU utilizada por aplicaciones/procesos a nivel de usuario.</li>
<li><strong>%nice</strong>:  Porcentaje de tiempo de CPU utilizada por aplicaciones/procesos con prioridad nice asignada.</li>
<li><strong>%system</strong>:  Porcentaje de tiempo de CPU utilizada por aplicaciones/procesos a nivel de sistema/kernel.</li>
<li><strong>%iowait</strong>:  Porcentaje de tiempo de CPU en espera a que terminen operaciones de I/O.</li>
<li><strong>%steal</strong>:  Porcentaje de tiempo utilizado por las CPU en involuntary wait mientras el hypervisor servía a otro procesador virtual</li>
<li><strong>%idle</strong>: Porcentaje de tiempo de CPU en espera y sin operaciones de I/O pendientes.</li>
</ul>
<p>Por supuesto se pueden añadir más columnas, revisad las páginas man:</p>
<pre># sar -u ALL 2 4
Linux 2.6.28-17-generic (sistemas) 	22/01/12 	_i686_	(2 CPU)

19:28:16        CPU      %usr     %nice      %sys   %iowait    %steal      %irq     %soft    %guest     %idle
19:28:18        all      9,18      0,00      2,90      0,97      0,00      0,00      0,00      0,00     86,96
19:28:20        all      7,95      0,00      4,34      0,00      0,00      0,00      0,00      0,00     87,71
19:28:22        all     14,46      0,00      5,15      1,47      0,00      0,25      0,00      0,00     78,68
19:28:24        all     17,89      0,00      5,39      0,00      0,00      0,00      0,00      0,00     76,72
Media:          all     12,34      0,00      4,44      0,61      0,00      0,06      0,00      0,00     82,55</pre>
<p>Si ejecutaramos <strong>sar -u</strong> sin parámeteros nos mostaría la CPU utilizada durante el día, sacándola de los ficheros de estadísticas.</p>
<h3>Monitorizar por CPU</h3>
<p>En lugar de mostrar el estado de todas las CPU a la vez podemos seleccionar la que queramos o incluso mostrar una fila para cada CPU de forma independiente. En el siguiente ejemplo monitorizamos la CPU 1 durante 2 segundos y cuatro ejecuciones:</p>
<pre>$ sar -P 1 2 4
Linux 2.6.28-17-generic (sistemas) 	22/01/12 	_i686_	(2 CPU)

19:29:17        CPU     %user     %nice   %system   %iowait    %steal     %idle
19:29:19          1     22,49      0,00      2,39      0,48      0,00     74,64
19:29:21          1      3,33      0,00      2,86      0,00      0,00     93,81
19:29:23          1     17,92      0,00      5,19      0,00      0,00     76,89
19:29:25          1     26,09      0,00     14,01      0,00      0,00     59,90
Media:            1     17,42      0,00      6,09      0,12      0,00     76,37</pre>
<p>Como decía antes, una fila para cada CPU, en este caso un equipo con 2 CPU, únicamente una ejecución:</p>
<pre>$ sar -P ALL 2 1
Linux 2.6.28-17-generic (sistemas) 	22/01/12 	_i686_	(2 CPU)

19:31:12        CPU     %user     %nice   %system   %iowait    %steal     %idle
19:31:14        all     17,69      0,00      3,93      0,74      0,00     77,64
19:31:14          0     22,39      0,00      2,99      0,00      0,00     74,63
19:31:14          1     13,04      0,00      5,31      1,45      0,00     80,19

Media:          CPU     %user     %nice   %system   %iowait    %steal     %idle
Media:          all     17,69      0,00      3,93      0,74      0,00     77,64
Media:            0     22,39      0,00      2,99      0,00      0,00     74,63
Media:            1     13,04      0,00      5,31      1,45      0,00     80,19</pre>
<h3>Mostrar toda la información almacenada en el fichero de estadísticas diario</h3>
<pre>$ sar -A</pre>
<p>Sar no se limita únicamente a la monitorización de CPU, también podemos controlar la actividad en discos (al estilo <a title="Monitorización de CPU y actividad de discos duros con iostat" href="http://rm-rf.es/monitorizacion-cpu-actividad-discos-duros-iostat/">iostat</a>), de red, procesos, load average, etc. En este primer artículo no hemos centrado en la CPU, en los próximos veremos algunos ejemplos de ello.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/asignar-prioridad-de-cpu-a-procesos-en-linux-con-nice/" title="Asignar prioridad de CPU a procesos en Linux con nice">Asignar prioridad de CPU a procesos en Linux con nice</a></li><li><a href="http://rm-rf.es/top-mostrar-informacion-multiples-cpu/" title="TOP: mostrar información de múltiples CPU">TOP: mostrar información de múltiples CPU</a></li><li><a href="http://rm-rf.es/linux-listar-procesos-cpu-memoria/" title="Linux: Listar procesos por % cpu o uso de memoria">Linux: Listar procesos por % cpu o uso de memoria</a></li><li><a href="http://rm-rf.es/linux-mostrar-informacion-de-cpu/" title="Linux: Mostrar información de CPU">Linux: Mostrar información de CPU</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/comando-sar-controlar-la-actividad-de-cpu-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Añadir la cabecera Content-type al usar el comando mail o mailx</title>
		<link>http://rm-rf.es/anadir-la-cabecera-content-type-al-usar-el-comando-mail/</link>
		<comments>http://rm-rf.es/anadir-la-cabecera-content-type-al-usar-el-comando-mail/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 19:51:34 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[mta]]></category>
		<category><![CDATA[smtp]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2436</guid>
		<description><![CDATA[En algunas versiones del comando mail&#124;mailx&#124;Mail (creo que en las antiguas) se podía especificar una cabecera con el parámetro -a: $ mail --help usage: mail [-dEIinv] [-a header] [-b bcc-addr] [-c cc-addr] [-s subject] to-addr ... De este modo era sencillo especificar cualquier cabecera y modificarla, como por ejemplo el Content-type si quisieramos enviar un [...]]]></description>
			<content:encoded><![CDATA[<p>En algunas versiones del comando <strong>mail|mailx|Mail</strong> (creo que en las antiguas) se podía especificar una cabecera con el parámetro <strong>-a</strong>:</p>
<pre>$ mail --help
usage: mail [-dEIinv] <strong>[-a header]</strong> [-b bcc-addr] [-c cc-addr] [-s subject] to-addr ...</pre>
<p>De este modo era sencillo especificar cualquier cabecera y modificarla, como por ejemplo el <strong>Content-type si quisieramos enviar un correo en formato HTML (text/html)</strong>. En cambio en nuevas versiones este parámetro ha desaparecido, y si queremos añadir el Content-type, por ejemplo, hay que engañar al MTA del siguiente modo:</p>
<pre>$ cat mensaje.html | mail -s "$(echo -e "Este es el asunto\nContent-Type: text/html")" foo@bar.com</pre>
<p>Como véis, a la hora de especificar el subject del mail con el parámetro -s, hacemos la trampa de crear un salto de línea y especificar después el Content-type, al igual que podemos ver en las cabeceras de un email estándar. De este modo, el MTA no asocia la segunda línea con el Subject sino como si fuera una cabecera normal de Content Type.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/estadisticas-de-correo-spam-y-virus-con-mailgraph/" title="Estadísticas de correo, spam y virus con Mailgraph">Estadísticas de correo, spam y virus con Mailgraph</a></li><li><a href="http://rm-rf.es/configurar-ip-de-salida-en-postfix/" title="Configurar IP de salida en Postfix">Configurar IP de salida en Postfix</a></li><li><a href="http://rm-rf.es/cpanel-configurar-exim-puerto-alternativo/" title="cPanel: Configurar exim en puerto alternativo">cPanel: Configurar exim en puerto alternativo</a></li><li><a href="http://rm-rf.es/cpanel-11-25-error-en-modulo-perl-mailspf/" title="cPanel 11.25: error en módulo perl Mail::SPF">cPanel 11.25: error en módulo perl Mail::SPF</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/anadir-la-cabecera-content-type-al-usar-el-comando-mail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ejemplos prácticos de grep y egrep</title>
		<link>http://rm-rf.es/ejemplos-practicos-de-grep-y-egrep/</link>
		<comments>http://rm-rf.es/ejemplos-practicos-de-grep-y-egrep/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 16:19:55 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[expresiones regulares]]></category>
		<category><![CDATA[grep]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2399</guid>
		<description><![CDATA[Grep es sin duda alguna no de los comandos más utilizados en el día a día por los administradores de sistemas. Muchos no van más allá de sus usos más básicos, que si bien cumplen a la perfección su función son una mínima parte de las posibilidades que nos ofrece. Algunos de estos ejemplos se [...]]]></description>
			<content:encoded><![CDATA[<p><img class=" size-full wp-image-2402" title="grep search" src="http://rm-rf.es/wp-content/uploads/2011/12/search-logo.jpg" alt="grep search" width="180" height="179" align="right" />Grep es sin duda alguna no de los comandos más utilizados en el día a día por los administradores de sistemas. Muchos no van más allá de sus usos más básicos, que si bien cumplen a la perfección su función son una mínima parte de las posibilidades que nos ofrece. Algunos de estos ejemplos se pueden ejecutar tanto con grep como con egrep (<strong>egrep= grep -E</strong>), independientemente de que casi siempre se ejecuten con egrep en el post. Espero que os sean de utilidad.</p>
<p>Este es el texto que se va a utilizar para trabajar como ejemplo. Sí, es un fichero de configuración de un Cluster MySQL de prueba, pero es que no tenía otra cosa a mano y no me apetecía preparar un fichero específicamente para esto ;)</p>
<pre>[ndb_mgmd]
hostname=192.168.0.10           # Hostname or IP address of management node
datadir=/var/lib/mysql-cluster  # Directory for management node log files

# Options for data node "A":
[ndbd]
                                # (one [ndbd] section per data node)
hostname=192.168.0.30           # Hostname or IP address
datadir=/usr/local/mysql/data   # Directory for this data node's data files

# Options for data node "B":
[ndbd]
hostname=192.168.0.40           # Hostname or IP address
datadir=/usr/local/mysql/data   # Directory for this data node's data files

# SQL node options:
[mysqld]
hostname=192.168.0.20           # Hostname or IP address
                                # (additional mysqld connections can be
                                # specified for this node for various
                                # purposes such as running ndb_restore)</pre>
<h3>Buscar dos ó n strings distintas dentro de un mismo fichero</h3>
<p>La sintaxis es &#8216;(cadena1|cadena2|cadenaN)&#8217;. La salida será todas aquellas líneas que contienen cualquiera de esas strings. Esto nos permite hacer múltiples búsquedas en un único comando:</p>
<pre>$ egrep '(192.168.0.30|192.168.0.40)' test
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.40           # Hostname or IP address</pre>
<pre>$ egrep '(192.168.0.30|192.168.0.40|192.168.0.20)' test
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.40           # Hostname or IP address
hostname=192.168.0.20           # Hostname or IP address</pre>
<h3>Usar los corchetes para reducir el rango de búsqueda</h3>
<p>Podemos hacer uso de los corchetes [] para definir, dentro de una misma string, que una sección contenga únicamente X carácteres, un rango de ellos, etc.</p>
<p>En este caso queremos sacar únicamente los resultados que contengan 192.168.0.30 y 192.168.0.40:</p>
<pre>$ egrep 192.168.0.[30,40] test
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.40           # Hostname or IP address</pre>
<p>Pero si quisiéramos definir los rangos que queremos mostrar para los dos últimos caracteres, en este caso numéricos (se podría hacer con alfanuméricos) podemos hacerlo separando el valor inicial y el final con &#8220;-&#8221;. En este ejemplo queremos que nos muestre aquello que cumpla la condición de que el primer número del último bloque tiene que ser 0,1 ó 2:</p>
<pre>$ egrep 192.168.0.[0-2]0 test
hostname=192.168.0.10           # Hostname or IP address of management node
hostname=192.168.0.20           # Hostname or IP address</pre>
<p>Y en este que el primer número del último bloque sea 1,2 ó 3 y el último entre 0 y 9:</p>
<pre>$ egrep 192.168.0.[0-3][0-9] test
hostname=192.168.0.10           # Hostname or IP address of management node
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.20           # Hostname or IP address</pre>
<p>Un ejemplo práctico con caracteres alfanuméricos sería usar por ejemplo <strong>[a-c]test</strong>, que buscaría atest, btest y ctest ó por ejemplo <strong>[ar4d]test</strong> que buscaría atest, rtest, 4test y dtest.</p>
<h3>Uso de clases predefinidas</h3>
<p>Existen clases predefinidas que nos pueden llegar a ahorrar mucho trabajo. Son las siguientes:</p>
<pre>[:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:], [:xdigit:]</pre>
<p>Lo que hace cada una de ellas está claro por su nombre, no obstante vamos a ver un ejemplo. Podemos buscar toda línea que contenga un carácter en mayúsculas:</p>
<pre>$ egrep [[:upper:]] test
hostname=192.168.0.10           # Hostname or IP address of management node
datadir=/var/lib/mysql-cluster  # Directory for management node log files
...
...</pre>
<h3>Todo lo que comienza o termina por&#8230;</h3>
<p>Esto es sencillo, <strong>las líneas comienzan por el carácter ^ y terminan con $</strong>. Por lo que:</p>
<p>Buscar todo lo que comience por &#8220;hostname&#8221;:</p>
<pre>$ egrep ^hostname test
hostname=192.168.0.10           # Hostname or IP address of management node
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.40           # Hostname or IP address
hostname=192.168.0.20           # Hostname or IP address</pre>
<p>O todo lo que termine por &#8220;node&#8221;:</p>
<pre>$ egrep node$ test
hostname=192.168.0.10           # Hostname or IP address of management node</pre>
<h3>Más expresiones regulares</h3>
<p>Ya hicimos un artículo sobre ello hace tiempo, podéis revisarlo aquí: <a title="Unix: Expresiones regulares" href="http://rm-rf.es/unix-expresiones-regulares/">unix: Expresiones regulares</a>, ahí también encontraréis unos cuantos <strong>ejemplos de grep</strong>. Son muy útiles los operadores de repetición:</p>
<pre>       ?      El carácter que precede es opcional y coincide al menos una vez.
       *      El carácter que precede coincidirá 0 o más veces.
       +      El carácter que precede coincidirá 1 o más veces.
       {n}    El carácter que precede coincidirá exactamente n veces.
       {n,}   El carácter que precede coincidirá n o más veces.
       {,m}   El carácter que precede coincidirá como máximo m veces.
       {n,m}  El carácter que precede coincidirá entre n y m veces.</pre>
<p>Podemos entonces buscar todas las líneas del fichero que contienen una IP. Usamos primero los corchetes para definir que puede haber números del 0 al 9, con las llaves decimos que habrá 1 o 3 números en cada bloque y así cuatro veces (nota: hay que escapar las llaves):</p>
<pre>$ grep '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}' test
hostname=192.168.0.10           # Hostname or IP address of management node
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.40           # Hostname or IP address
hostname=192.168.0.20           # Hostname or IP address</pre>
<h3>Buscar palabras completas, contar resultados</h3>
<p>Para indicar a grep que queremos que la búsqueda se centre en palabras y no en caracteres sueltos especificamos el parámetro &#8220;-w&#8221;. Podemos ver la diferencia buscando &#8220;data&#8221; en el ejemplo, contamos los resultados satisfactorios con el parámetro &#8220;-c&#8221;:</p>
<pre>$ grep -cw data test
5
$ grep -c data test
6</pre>
<h3>Excluir resultados, sensibilidad a mayúsculas</h3>
<p>Algo básico a la hora de usar grep es conocer los parámetros &#8220;-v&#8221; que excluye la cadena indicada en el resultado y &#8220;-i&#8221; que especifica que no se tendrá en cuenta si el resultado es mayúscula o minúscula.</p>
<p>Eliminamos las líneas que tienen comodines:</p>
<pre>$ grep -v "#" test
[ndb_mgmd]

[ndbd]

[ndbd]

[mysqld]</pre>
<h3>Uso de pipes</h3>
<p>Todos usamos pipes (|) para acotar resultados. Hacemos un primer grep, con el resultado de ese hacemos otro y así sucesivamente:</p>
<pre>$ grep -iw hostname test | grep 192.168.0.[0-9]0 | grep -v 192.168.0.40 | grep -vw node
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.20           # Hostname or IP address</pre>
<h3>Listar los archivos que contienen la cadena</h3>
<p>Con el parámetro -l podemos ejecutar grep contra varios archivos (y de forma recursiva en múltiples directorios con -R) y recibiremos el listado de archivos con coincidencias sin mostrar las líneas que contienen la cadena:</p>
<pre>$ grep -lR SQL *
config.ini
header.xcf
iptables.sh
test
dir1/test.sql
dir2/prueba.txt
...</pre>
<h3>Número de línea en la que se encuentran los resultados</h3>
<p>Para saber el número de línea en la que se encuentra el resultado utilizaremos el parámetro -n:</p>
<pre>$ grep -n hostname test
2:hostname=192.168.0.10           # Hostname or IP address of management node
8:hostname=192.168.0.30           # Hostname or IP address
...</pre>
<h3>Cuantas veces se encuentran resultados</h3>
<p>Si &#8220;-n&#8221; nos monstraba el nº de línea en el que estaba la coincidencia, &#8220;-c&#8221; nos dice cuantas veces está la búsqueda en el fichero:</p>
<pre>$ grep -c hostname test
4</pre>
<p>Bueno, de momento esto es todo. Por supuesto hay muchas más opciones y explotar la potencia de grep llevaría mucho tiempo así que a partir de aquí investigáis vosotros ;)</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/awk-imprimir-expresion-regular-hasta-final-fichero/" title="AWK: imprimir a partir de una expresión regular hasta el final del fichero">AWK: imprimir a partir de una expresión regular hasta el final del fichero</a></li><li><a href="http://rm-rf.es/grep-mostrar-lineas-anteriores-posteriores-busqueda/" title="Truco GREP: Mostrar líneas anteriores/posteriores al resultado de la búsqueda">Truco GREP: Mostrar líneas anteriores/posteriores al resultado de la búsqueda</a></li><li><a href="http://rm-rf.es/truco-shell-unix-quitar-lineas-en-blanco-de-un-fichero-con-grep/" title="Truco shell Unix: quitar líneas en blanco de un fichero con grep">Truco shell Unix: quitar líneas en blanco de un fichero con grep</a></li><li><a href="http://rm-rf.es/vim-manual-de-expresiones-regulares/" title="Vim: Manual de expresiones regulares">Vim: Manual de expresiones regulares</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/ejemplos-practicos-de-grep-y-egrep/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Volver a concatenar líneas de un LDIF con sed</title>
		<link>http://rm-rf.es/volver-a-concatenar-lineas-de-un-ldif-con-sed/</link>
		<comments>http://rm-rf.es/volver-a-concatenar-lineas-de-un-ldif-con-sed/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 19:40:55 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[OpenLDAP]]></category>
		<category><![CDATA[sed]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2325</guid>
		<description><![CDATA[Cuando necesitamos manipular a través de scripts un fichero LDIF, y este tiene líneas de atributos divididas con saltos de línea es necesario revertir esto y volver a concatenarlas para poder comenzar a trabajar. Como muchos sabéis, el estándar de LDIF especifica este punto: Any line that begins with a single space MUST be treated [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando necesitamos manipular a través de scripts un fichero <strong>LDIF</strong>, y este tiene líneas de atributos divididas con saltos de línea es necesario revertir esto y volver a concatenarlas para poder comenzar a trabajar. Como muchos sabéis, el estándar de LDIF especifica este punto:</p>
<blockquote><p>Any line that begins with a single space MUST be treated as a continuation of the previous (non-empty) line. When joining folded lines, exactly one space character at the beginning of each continued line must be discarded. Implementations SHOULD NOT fold lines in the middle of a multi-byte UTF-8 character.</p></blockquote>
<p>Vamos a ver entonces como a través de una línea de comandos <strong>usando sed podemos concatenar de nuevo las líneas que comiencen con un espacio con la línea anterior</strong>. El comando es el siguiente:</p>
<pre>$ sed -e :a -e '$!N;s/\n //;ta' -e 'P;D' test.ldif</pre>
<p>Este ejemplo únicamente volcará la salida por pantalla, recordar redirigir <a title="redirigir stdin, stdout y stderr en Unix/Linux" href="http://rm-rf.es/stdin-stdout-y-stderr-redirigir-en-unixlinux/">stdout</a> a otro fichero o forzar con &#8220;-i&#8221; para sobreescribir el mismo fichero.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/usar-autenticacion-ldap-openldap-con-opensshd-sshd/" title="Usar autenticación LDAP (OpenLDAP) con OpenSSHD (sshd)">Usar autenticación LDAP (OpenLDAP) con OpenSSHD (sshd)</a></li><li><a href="http://rm-rf.es/ldap-openldap-instalacion-y-configuracion-i/" title="LDAP (OpenLDAP): instalación y configuración (I)">LDAP (OpenLDAP): instalación y configuración (I)</a></li><li><a href="http://rm-rf.es/utilizar-variables-dentro-de-sed/" title="Utilizar variables dentro de sed">Utilizar variables dentro de sed</a></li><li><a href="http://rm-rf.es/usar-sed-sobre-multiples-lineas/" title="Usar SED sobre múltiples líneas">Usar SED sobre múltiples líneas</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/volver-a-concatenar-lineas-de-un-ldif-con-sed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cron o anacron, ¿qué elegir?</title>
		<link>http://rm-rf.es/cron-o-anacron-%c2%bfque-elegir/</link>
		<comments>http://rm-rf.es/cron-o-anacron-%c2%bfque-elegir/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 15:04:15 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[anacron]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[crond]]></category>
		<category><![CDATA[crontab]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2264</guid>
		<description><![CDATA[Pese a que aparentemente su función es la misma, es decir, la de realizar tareas de forma automática y desantendida en momentos concretos y/o periódicos, cada uno tiene sus peculiaridades y características que los hacen bastante distintos y su utilización depende de ámbitos distintos. De cron/crontab ya he hablado en varias ocasiones, no así de [...]]]></description>
			<content:encoded><![CDATA[<p><img align="right" class=" size-full wp-image-2268" title="Cron Linux" src="http://rm-rf.es/wp-content/uploads/2011/09/cronjobs-linux.jpg" alt="Cron Linux" width="187" height="186" />Pese a que aparentemente su función es la misma, es decir, la de <strong>realizar tareas de forma automática y desantendida en momentos concretos y/o periódicos</strong>, cada uno tiene sus peculiaridades y características que los hacen bastante distintos y su utilización depende de ámbitos distintos. De <a title="crontab: modo de uso y ejemplos" href="http://rm-rf.es/crontab-modo-de-uso-ejemplos/">cron/crontab</a> ya he hablado en varias ocasiones, no así de anacron, podéis usar el buscador o seguir el anterior enlace para encontrar más artículos.</p>
<p>Básicamente, las principales diferencias entre cron y anacron son las siguientes:</p>
<ol>
<li>Cron es estricto al 100% a la hora de ejecutar tareas configuradas, todo lo contrario que anacron. Si hay un cron que se tiene que ejecutar todos los días a las 03:00 y el sistema está apagado, cron no lo ejecutará. En cambio, anacron sí, lo ejecutará una vez que el sistema vuelva a encenderse si el trabajo tenía que haberse realizado cuando el equipo estaba apagado. Es decir, <strong>en servidores y sistemas con disponibilidad 24 x 7 x 365 es mejor usar cron, pero en equipos de escritorio o aquellos que puedan estar apagados es mejor anacron</strong>.</li>
<li><strong>Cron permite programar tareas con exactitud de minutos, mientras que en anacron el mínimo es la ejecución diaria</strong> de la tarea, pudiendo únicamente especificar un rango horario en el que se ejecutará.</li>
<li>Cualquier usuario puede tener sus propios cron configurados, mientras que <strong>para usar anacron hay que ser superusuario</strong>. (<a title="Cron linux: autorizar o denegar su uso a usuarios" href="http://rm-rf.es/cron-linux-autorizar-o-denegar-su-uso-a-usuarios/">cron es versatil y se puede restringir</a> si fuera necesario).</li>
<li>Cron corre como demonio todo el tiempo mientras que anacron se ejecuta a través de scripts en el arranque de sistema o con llamadas propias desde cron.</li>
</ol>
<p>Normalmente en la mayoría de sistemas de producción, por no decir en todos encontraréis que se usa cron, anacron se suele dejar para equipos de escritorio, portátiles y demás equipos de uso personal.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/cron-linux-autorizar-o-denegar-su-uso-a-usuarios/" title="Cron linux: autorizar o denegar su uso a usuarios">Cron linux: autorizar o denegar su uso a usuarios</a></li><li><a href="http://rm-rf.es/crontab-modo-de-uso-ejemplos/" title="crontab: modo de uso y ejemplos">crontab: modo de uso y ejemplos</a></li><li><a href="http://rm-rf.es/generar-crontab-de-forma-sencilla/" title="Generar crontab de forma sencilla">Generar crontab de forma sencilla</a></li><li><a href="http://rm-rf.es/cambiar-editor-crontab-por-defecto/" title="Cambiar editor crontab por defecto">Cambiar editor crontab por defecto</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/cron-o-anacron-%c2%bfque-elegir/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Guía de comandos apt para Debian / Ubuntu (apt-get, apt-cache)</title>
		<link>http://rm-rf.es/guia-de-comandos-apt-para-debian-ubuntu-apt-get-apt-cache/</link>
		<comments>http://rm-rf.es/guia-de-comandos-apt-para-debian-ubuntu-apt-get-apt-cache/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 08:50:03 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[apt]]></category>
		<category><![CDATA[debian]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2191</guid>
		<description><![CDATA[Hoy vamos a dar un repaso al gestor de paquetes de Debian (y Ubuntu&#8230;) apt (Advanced Packaging Tool). Nos vamos a centrar en apt-get y apt-cache. apt-get permite descargar, actualizar e instalar paquetes entre otras cosas, apt-cache por otro lado permite lanzar consultas y buscar paquetes contra la base de datos de los repositorios. APT-GET [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2193" style="margin: 5px 20px;" title="debian" src="http://rm-rf.es/wp-content/uploads/2011/09/debian.jpg" alt="debian" width="147" height="209" align="right" />Hoy vamos a dar un repaso al <strong>gestor de paquetes de Debian (y Ubuntu&#8230;) apt (Advanced Packaging Tool)</strong>. Nos vamos a centrar en <strong>apt-get</strong> y <strong>apt-cache</strong>. <strong>apt-get permite descargar, actualizar e instalar paquetes</strong> entre otras cosas, <strong>apt-cache</strong> por otro lado permite <strong>lanzar consultas y buscar paquetes contra la base de datos de los repositorios</strong>.</p>
<h2>APT-GET</h2>
<p>Instalar un paquete:</p>
<pre># apt-get install &lt;paquete&gt;</pre>
<p>Desinstalar un paquete:</p>
<pre># apt-get remove &lt;paquete&gt;</pre>
<p>Eliminar un paquete incluidos sus ficheros de configuración:</p>
<pre># apt-get purge &lt;paquete&gt;</pre>
<p>Eliminar de forma automática aquellos paquetes que no se estén utilizando:</p>
<pre># apt-get autoremove</pre>
<p>Actualizar un paquete a la última versión disponible en el repositorio:</p>
<pre># apt-get update &lt;paquete&gt;</pre>
<p>Actualizar el sistema. Actualizará todos los paquetes que dispongan de una versión superior dentro de la rama instalada de la distribución:</p>
<pre># apt-get upgrade</pre>
<p>Actualizar la distribución completa. Actualizará nuestro sistema a la siguiente versión disponible de la distribución:</p>
<pre># apt-get dist-upgrade</pre>
<p>Descargar únicamente las fuentes de un paquete para manipularlas de forma manual:</p>
<pre># apt-get source &lt;paquete&gt;</pre>
<p>Limpiar cachés, paquetes descargados, etc:</p>
<pre># apt-get clean</pre>
<pre># apt-get autoclean</pre>
<p>Verificar que no tenemos ninguna dependencia incumplida:</p>
<pre># apt-get check</pre>
<h2>APT-CACHE</h2>
<p>Buscar un paquete en los repositorios, se puede especificar un patrón, expresión regular, el nombre exacto del paquete, etc:</p>
<pre># apt-cache search &lt;paquete&gt;</pre>
<p>Mostrar información sobre un paquete específico (nombre del paquete, versión, dependencias&#8230;):</p>
<pre># apt-cache showpkg &lt;paquete&gt;</pre>
<p>Mostrar información del paquete incluyendo la descripción, información del paquete como su sitio web, página de bugs&#8230;</p>
<pre># apt-cache show &lt;paquete&gt;</pre>
<p>Mostrar dependencias de un paquete:</p>
<pre># apt-cache depends &lt;paquete&gt;</pre>
<p>Mostrar los nombres de todos los paquetes instalados en el sistema:</p>
<pre># apt-cache pkgnames</pre>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/desactivar-el-acceso-por-proxy-en-debian-a-apt/" title="Desactivar el acceso por proxy en Debian a APT">Desactivar el acceso por proxy en Debian a APT</a></li><li><a href="http://rm-rf.es/ubuntudebian-deshabilitar-touchpad-portatil-dell-vostro/" title="Ubuntu/Debian: deshabilitar Touchpad portatil Dell Vostro">Ubuntu/Debian: deshabilitar Touchpad portatil Dell Vostro</a></li><li><a href="http://rm-rf.es/getlibs-encontrar-dependencias-en-librerias-64-vs-32-bits/" title="Getlibs: encontrar dependencias en librerías (64 vs 32 bits)">Getlibs: encontrar dependencias en librerías (64 vs 32 bits)</a></li><li><a href="http://rm-rf.es/como-usar-apt-o-synaptic-en-versiones-antiguas-de-ubuntu-tras-end-of-life/" title="Cómo usar APT o Synaptic en versiones antiguas de Ubuntu (tras &#8216;end of life&#8217;)">Cómo usar APT o Synaptic en versiones antiguas de Ubuntu (tras &#8216;end of life&#8217;)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/guia-de-comandos-apt-para-debian-ubuntu-apt-get-apt-cache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>xargs: problemas con los argumentos {}</title>
		<link>http://rm-rf.es/xargs-problemas-con-los-argumentos/</link>
		<comments>http://rm-rf.es/xargs-problemas-con-los-argumentos/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 14:34:02 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[argumentos]]></category>
		<category><![CDATA[xargs]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2069</guid>
		<description><![CDATA[{} es el marcador por defecto para los argumentos que pasamos al comando xargs. Existe la opción de renombrar este marcador para hacer más comprensible el comando y/o evitar problemas como el que podemos ver a continuación: # grep xx@xxxx.es /var/log/exim_mainlog &#124; awk '{print $3}' &#124; sort -u &#124; xargs grep {} /var/log/exim_mainlog grep: 1QmbRA-0003Ba-4E: [...]]]></description>
			<content:encoded><![CDATA[<p><strong>{}</strong> es el marcador por defecto para los argumentos que pasamos al <strong>comando xargs</strong>. Existe la opción de renombrar este marcador para hacer más comprensible el comando y/o evitar problemas como el que podemos ver a continuación:</p>
<pre># grep xx@xxxx.es /var/log/exim_mainlog | awk '{print $3}' | sort -u | xargs grep {} /var/log/exim_mainlog

grep: 1QmbRA-0003Ba-4E: No such file or directory
grep: 1QmdAR-0001To-DY: No such file or directory
grep: 1QmeHn-0002ZO-Ib: No such file or directory
grep: 1Qmfzd-0008TC-Lc: No such file or directory
grep: 1QmgoV-0002aV-Vo: No such file or directory
grep: 1QmhPk-0000Ou-UV: No such file or directory
grep: 1Qmi22-0007kj-B3: No such file or directory
grep: 1Qmifd-0006ur-3S: No such file or directory</pre>
<p>Como podéis ver el argumento, que es el identificador del correo lo recibe correctamente pero genera problemas a la hora de ejecutar el xargs. En casos como estos, si no tenéis tiempo para revisar el problema <strong>podéis probar a renombrar {} por una cadena de texto con el parámetro -I</strong> y verificar si de ese modo funciona:</p>
<pre># grep xx@xxxx.es /var/log/exim_mainlog | awk '{print $3}' | sort -u | xargs <strong>-I marcador</strong> grep <strong>marcador</strong> /var/log/exim_mainlog

011-07-29 16:14:38 1Qmnpl-0000za-U7 H=([XX.XX.XX.230]) [XX.XX.XX.XX]Warning: "SpamAssassin as xx detected message as NOT spam (-0.2)"
2011-07-29 16:14:38 1Qmnpl-0000za-U7  xxx  R=virtual_user T=virtual_userdelivery
2011-07-29 16:14:39 1Qmnpl-0000za-U7 =&gt; xx@xx.es  R=lookuphost T=remote_smtp H=xx.xx.es [xx.xx.xx.xx] X=TLSv1:DHE-RSA-AE3256-SHA:256
2011-07-29 16:14:39 1Qmnpl-0000za-U7 Completed</pre>
<p>Efectivamente así ha funcionado correctamente.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/bash-ejecutar-comando-argumentos-ejecutado-anteriormente/" title="Truco shell: Ejecutar un comando con los argumentos del ejecutado anteriormente">Truco shell: Ejecutar un comando con los argumentos del ejecutado anteriormente</a></li><li><a href="http://rm-rf.es/truco-linux-eliminar-directorios-vacios-usando-find/" title="Truco Linux: Eliminar directorios vacíos usando Find">Truco Linux: Eliminar directorios vacíos usando Find</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/xargs-problemas-con-los-argumentos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>tee linux: mandar la salida de un comando a dos sitios</title>
		<link>http://rm-rf.es/tee-linux-mandar-la-salida-de-un-comando-a-dos-sitios/</link>
		<comments>http://rm-rf.es/tee-linux-mandar-la-salida-de-un-comando-a-dos-sitios/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 11:51:50 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[comandos linux]]></category>
		<category><![CDATA[tee]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2064</guid>
		<description><![CDATA[Imágen: wikipedia Tee es un comando Linux (bueno, realmente está disponible en Unix, 4DOS/4NT y Windows PowerShell) que permite copiar la entrada estándar de un comando a un archivo y así mismo seguir teniendo salida estándar por pantalla/terminal. Copia la entrada estándar a cada ARCHIVO, y también a salida estándar. Vamos a ver un ejemplo [...]]]></description>
			<content:encoded><![CDATA[<div align="center"><img class="size-full wp-image-2065" title="Tee Linux" src="http://rm-rf.es/wp-content/uploads/2011/07/Tee.jpg" alt="Tee Linux" width="450" height="285" /></div>
<div align="center"><em><small>Imágen: <a href="http://en.wikipedia.org/wiki/Tee_%28command%29" target="_blank">wikipedia</a></small></em></div>
<p><strong>Tee</strong> es un <strong>comando Linux</strong> (bueno, realmente está disponible en Unix, 4DOS/4NT y Windows PowerShell) que permite copiar la entrada estándar de un comando a un archivo y así mismo seguir teniendo salida estándar por pantalla/terminal.<br />
Copia la entrada estándar a cada ARCHIVO, y también a salida estándar.</p>
<p>Vamos a ver un ejemplo sencillo, ejecutamos el comando ps y a su vez volcamos su salida a un fichero:</p>
<pre>$ ps | tee ps.txt
  PID TTY          TIME CMD
 2901 pts/6    00:00:00 bash
 3111 pts/6    00:00:00 ps
 3112 pts/6    00:00:00 tee
$ cat ps.txt
  PID TTY          TIME CMD
 2901 pts/6    00:00:00 bash
 3111 pts/6    00:00:00 ps
 3112 pts/6    00:00:00 tee</pre>
<p>Hemos verificado que el contenido de la salida se ha almacenado en el fichero ps.txt y a su vez seguimos visualizandolo por pantalla, si no usaramos el comando tee y volcaramos la salida a un fichero no lo veríamos por pantalla (ver artículo <a title="redirigir stdin, stdout y stderr en Unix/Linux" href="http://rm-rf.es/stdin-stdout-y-stderr-redirigir-en-unixlinux/" target="_blank">redirigir stdin, stdout y stderr en Unix/Linux</a>):</p>
<pre>$ ps &gt; ps.txt</pre>
<p>El comando tee tiene muchas más posibilidades, recuerdo por ejemplo el artículo en el que explicabamos como <a title="Guardar un fichero dentro de VIM cuando no tenemos permisos" href="http://rm-rf.es/guardar-un-fichero-dentro-de-vim-cuando-no-tenemos-permisos/" target="_blank">guardar un fichero dentro de VIM cuando no tenemos permisos</a> en vim:</p>
<pre>:w !sudo tee %
[sudo] password for alex:</pre>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/como-encontrar-fallos-e-inconsistencias-en-los-ficheros-passwd-y-shadow/" title="Cómo encontrar fallos e inconsistencias en los ficheros passwd y shadow">Cómo encontrar fallos e inconsistencias en los ficheros passwd y shadow</a></li><li><a href="http://rm-rf.es/como-evitar-los-saltos-de-linea-en-el-comando-unix-df/" title="Cómo evitar los saltos de línea en el comando unix df">Cómo evitar los saltos de línea en el comando unix df</a></li><li><a href="http://rm-rf.es/comando-date-en-bash-sumar-y-restar-anos-dias-o-meses-a-la-fecha-actual/" title="Comando DATE en bash: sumar y restar años, días o meses a la fecha actual">Comando DATE en bash: sumar y restar años, días o meses a la fecha actual</a></li><li><a href="http://rm-rf.es/linux-enviar-senales-a-un-proceso-con-el-comando-kill/" title="Linux: enviar señales a un proceso con el comando kill">Linux: enviar señales a un proceso con el comando kill</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/tee-linux-mandar-la-salida-de-un-comando-a-dos-sitios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crear y eliminar particiones con fdisk en Linux</title>
		<link>http://rm-rf.es/crear-y-eliminar-particiones-con-fdisk-en-linux/</link>
		<comments>http://rm-rf.es/crear-y-eliminar-particiones-con-fdisk-en-linux/#comments</comments>
		<pubDate>Sun, 24 Jul 2011 19:38:17 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[fdisk]]></category>
		<category><![CDATA[particion]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2043</guid>
		<description><![CDATA[Crear particiones con fdisk Para crear particiones usando la herramienta fdisk, primero debemos comprobar los discos del sistema disponibles y las particiones que ya haya creadas, para ello utilizamos el parámetro -l: $ sudo fdisk -l Disco /dev/sda: 160.0 GB, 160041885696 bytes 255 cabezas, 63 sectores/pista, 19457 cilindros Unidades = cilindros de 16065 * 512 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-1695" style="margin-left: 18px; margin-right: 18px;" title="disco duro" src="http://rm-rf.es/wp-content/uploads/2011/04/disco-duro.jpg" alt="disco duro" width="200" height="200" align="right" /></p>
<h3>Crear particiones con fdisk</h3>
<p>Para crear <strong>particiones</strong> usando la herramienta <strong>fdisk</strong>, primero debemos comprobar los discos del sistema disponibles y las particiones que ya haya creadas, para ello utilizamos el parámetro <strong>-l</strong>:</p>
<pre>$ sudo fdisk -l

Disco /dev/sda: 160.0 GB, 160041885696 bytes
255 cabezas, 63 sectores/pista, 19457 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Identificador de disco: 0x000c3c51

Dispositivo Inicio    Comienzo   Fin     Bloques  Id  Sistema
/dev/sda2            3233        9855    53199247+  83  Linux
/dev/sda4            9856       19457    77128065   83  Linux</pre>
<p>En la salida de fdisk hemos verificado que tenemos un único disco <strong>/dev/sda</strong> de 160 GB, sobre el cual ya hay dos particiones creadas con sistemas Linux, <strong>/dev/sda2</strong> y <strong>/dev/sda4</strong>. Si nos fijamos bien, vemos que el disco tiene 19457 cilindros y que las particiones comienzan en el 3233, por lo que tenemos espacio libre para crear más si lo deseamos.</p>
<p>Vamos a crear entonces una partición de prueba que utilice el resto de espacio disponible en el disco, comenzamos ejecutando fdisk sobre el disco a utilizar:</p>
<pre>$ sudo fdisk /dev/sda</pre>
<p>Si pulsamos la m una vez dentro podremos visualizar las distintas opciones con su respectiva letra de ejecución:</p>
<pre>Orden  Acción
   a   Conmuta el indicador de iniciable
   b   Modifica la etiqueta de disco bsd
   c   Conmuta el indicador de compatibilidad con DOS
   d   Suprime una partición
   l   Lista los tipos de particiones conocidos
   m   Imprime este menú
   n   Añade una nueva partición
   o   Crea una nueva tabla de particiones DOS vacía
   p   Imprime la tabla de particiones
   q   Sale sin guardar los cambios
   s   Crea una nueva etiqueta de disco Sun
   t   Cambia el identificador de sistema de una partición
   u   Cambia las unidades de visualización/entrada
   v   Verifica la tabla de particiones
   w   Escribe la tabla en el disco y sale
   x   Funciones adicionales (sólo para usuarios avanzados)</pre>
<p>Vamos a crear una nueva partición, así que pulsamos &#8220;n&#8221;:</p>
<pre>Orden (m para obtener ayuda): n
Acción de la orden
   e   Partición extendida
   p   Partición primaria (1-4)</pre>
<p>Seleccionamos si queremos una <strong>partición extendida o primaria</strong>, en este caso podemos crearla como primaria, pulsamos &#8220;p&#8221; y dejamos que automáticamente se configure el número de la partición (se puede especificar, del 1 al 4). Después podemos seleccionar el primer y último cilindro a utilizar para la partición. Como yo voy a usar el resto de espacio disponible será del 1 al 19457 tal y como hemos visto antes, también <strong>podríamos indicar el tamaño de la partición en K, M o G</strong>. Lo dejamos por defecto en este caso:</p>
<pre>p
Número de partición (1-4): 3
Primer cilindro (1-19457, valor predeterminado 1):
Último cilindro, +cilindros o +tamaño{K,M,G} (1-3232, valor predeterminado 3232):
Se está utilizando el valor predeterminado 3232</pre>
<p>Ahora escribimos los cambios y salimos de fdisk:</p>
<pre>Orden (m para obtener ayuda): w
¡Se ha modificado la tabla de particiones!

Llamando a ioctl() para volver a leer la tabla de particiones.

El núcleo todavía usa la tabla antigua.
La nueva tabla se usará en el próximo reinicio.
Se están sincronizando los discos.</pre>
<p>Finalmente debemos ejecutar el comando <strong>partprobe</strong> para indicar al kernel que vuelva a leer la tabla de particiones:</p>
<pre>$ sudo partprobe</pre>
<p>Y ya tenemos nuestra nueva partición creada, ahora únicamente faltaría asignar el sistema de ficheros deseado (ext3, ext4, ntfs, etc):</p>
<pre>$ sudo fdisk -l

Disco /dev/sda: 160.0 GB, 160041885696 bytes
255 cabezas, 63 sectores/pista, 19457 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Identificador de disco: 0x000c3c51

Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda2            3233        9855    53199247+  83  Linux
/dev/sda3               1        3232    25961008+  83  Linux
/dev/sda4            9856       19457    77128065   83  Linux</pre>
<p>Formateamos la partición como <a title="ext3, ext4: liberar espacio reservado con tune2fs" href="http://rm-rf.es/ext3-ext4-liberar-espacio-reservado-con-tune2fs/"><strong>ext4</strong></a>:</p>
<pre>$ mkfs.ext4  /dev/sda3
mke2fs 1.41.4 (27-Jan-2009)
mkfs.ext4: Permiso denegado mientras se intentaba determinar el tamaño del sistema de ficheros
alex@sistemas:~$ sudo mkfs.ext4  /dev/sda3
mke2fs 1.41.4 (27-Jan-2009)
Etiqueta del sistema de ficheros=
Tipo de SO: Linux
Tamaño del bloque=4096 (bitácora=2)
Tamaño del fragmento=4096 (bitácora=2)
1623840 nodos-i, 6490252 bloques
324512 bloques (5.00%) reservados para el superusuario
Primer bloque de datos=0
Número máximo de bloques del sistema de ficheros=0
199 bloque de grupos
32768 bloques por grupo, 32768 fragmentos por grupo
8160 nodos-i por grupo
Respaldo del superbloque guardado en los bloques:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000

Escribiendo las tablas de nodos-i: hecho
Creating journal (32768 blocks): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: hecho

Este sistema de ficheros se revisará automáticamente cada 27 montajes o
180 días, lo que suceda primero.  Utilice tune2fs -c o -i para cambiarlo.</pre>
<p>Ahora podemos <strong>montar la partición</strong> y comenzar a usarla:</p>
<pre>$ sudo mount //dev/sda3</pre>
<p>Vemos que está disponible con el <a title="Cómo evitar los saltos de línea en el comando unix df" href="http://rm-rf.es/como-evitar-los-saltos-de-linea-en-el-comando-unix-df/">comando df</a>:</p>
<pre>$ df -h | grep /dev/sda3
/dev/sda3              25G  172M   23G   1% /test</pre>
<h3>Eliminar particiones con fdisk</h3>
<p>Eliminar una partición usando fdisk es más sencillo que crearla, lo primero que haremos será desmontarla del sistema con el comando <strong>umount</strong>:</p>
<pre>$ sudo umount /dev/sda3</pre>
<p>Accedemos de nuevo a la gestión del disco con <strong>fdisk</strong>:</p>
<pre>$ sudo fdisk /dev/sda</pre>
<p>Una vez dentro, eliminamos la partición con la letra &#8220;d&#8221; y seguido el número de la partición, escribimos después los cambios con &#8220;w&#8221;:</p>
<pre>Orden (m para obtener ayuda): d
Número de partición (1-4): 3

Orden (m para obtener ayuda): w
¡Se ha modificado la tabla de particiones!

Llamando a ioctl() para volver a leer la tabla de particiones.</pre>
<p>Ejecutamos de nuevo partproble para hacer efectivos los cambios sin reiniciar:</p>
<pre>$ sudo partprobe</pre>
<p>Y la partición ha sido eliminada, un fdisk -l no devolverá la partición:</p>
<pre>$ sudo fdisk -l | grep sda3</pre>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/gestion-de-particiones-con-parted-en-linux/" title="Gestión de particiones con parted en Linux">Gestión de particiones con parted en Linux</a></li><li><a href="http://rm-rf.es/gestion-de-lvm-en-linux-logical-volume-manager/" title="Gestión de LVM en Linux (Logical Volume Manager)">Gestión de LVM en Linux (Logical Volume Manager)</a></li><li><a href="http://rm-rf.es/convertir-a-ext4-en-un-sistema-de-ficheros-ext3/" title="Convertir a ext4 en un sistema de ficheros ext3">Convertir a ext4 en un sistema de ficheros ext3</a></li><li><a href="http://rm-rf.es/como-crear-linux-logical-volume-manager-lvm-fdisk/" title="Cómo crear un Linux Logical Volume Manager (LVM) usando fdisk">Cómo crear un Linux Logical Volume Manager (LVM) usando fdisk</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/crear-y-eliminar-particiones-con-fdisk-en-linux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

