<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>miguelcarmona.name</title>
	
	<link>http://miguelcarmona.name</link>
	<description>Blog/Portfolio profesional de Miguel Carmona</description>
	<lastBuildDate>Sat, 29 Dec 2012 13:33:45 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/miguelcarmona" /><feedburner:info uri="miguelcarmona" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=es&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://eur.i1.yimg.com/eur.yimg.com/i/es/my/addto1.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.feedness.com/alta/http://feeds.feedburner.com/miguelcarmona" src="http://www.feedness.com/ayuda/wp-content/square_b_sh_feed.gif">Subscribe with Feedness</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/miguelcarmona" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fmiguelcarmona" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Ejecuta un comando a la hora que quieras con AT</title>
		<link>http://feedproxy.google.com/~r/miguelcarmona/~3/YCAcggwpxuU/ejecuta-un-comando-a-la-hora-que-quieras-con-at</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/ejecuta-un-comando-a-la-hora-que-quieras-con-at#comments</comments>
		<pubDate>Mon, 19 Nov 2012 17:13:24 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=937</guid>
		<description><![CDATA[¿Cómo funciona AT? Pues muy sencillo, la forma básica sería escribir en el terminal : $ at 15:37 Y debe salirnos algo como esto: warning: commands will be executed using /bin/sh at&#38;gt; Posteriormente escribimos el comando a ejecutar a esa hora, por ejemplo: at&#38;gt; killall console Luego salimos de AT tecleando Ctrl+D. En resumen se verá algo como esto: [...]]]></description>
				<content:encoded><![CDATA[<p>¿Cómo funciona <strong>AT</strong>? Pues muy sencillo, la forma básica sería escribir en el terminal :</p>

<div class="wp_codebox"><table><tr id="p9379"><td class="code" id="p937code9"><pre class="bash" style="font-family:monospace;">$ at <span style="color: #000000;">15</span>:<span style="color: #000000;">37</span></pre></td></tr></table></div>

<p>Y debe salirnos algo como esto:</p>

<div class="wp_codebox"><table><tr id="p93710"><td class="code" id="p937code10"><pre class="bash" style="font-family:monospace;">warning: commands will be executed using <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">sh</span>
at<span style="color: #000000; font-weight: bold;">&amp;</span>gt;</pre></td></tr></table></div>

<p>Posteriormente escribimos el comando a ejecutar a esa hora, por ejemplo:</p>

<div class="wp_codebox"><table><tr id="p93711"><td class="code" id="p937code11"><pre class="bash" style="font-family:monospace;">at<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #c20cb9; font-weight: bold;">killall</span> console</pre></td></tr></table></div>

<p><span id="more-937"></span><br />
Luego salimos de <strong>AT</strong> tecleando <strong>Ctrl+D</strong>. En resumen se verá algo como esto:</p>
<p><center><a href="http://miguelcarmona.name/wp-content/uploads/2012/11/at_terminal-600x363.png"><img class="aligncenter size-medium wp-image-950" alt="terminal" src="http://miguelcarmona.name/wp-content/uploads/2012/11/at_terminal-600x363-300x181.png" width="300" height="181" /></a></center>Si se fijan en la imagen, cuando terminamos AT nos entrega el número del proceso que ejecutamos:</p>

<div class="wp_codebox"><table><tr id="p93712"><td class="code" id="p937code12"><pre class="bash" style="font-family:monospace;">job <span style="color: #000000; font-weight: bold;">&lt;</span>strong<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">3</span><span style="color: #000000; font-weight: bold;">&lt;/</span>strong<span style="color: #000000; font-weight: bold;">&gt;</span> at Tue Oct  <span style="color: #000000;">2</span> <span style="color: #000000;">15</span>:<span style="color: #000000;">45</span>:00 <span style="color: #000000;">2012</span></pre></td></tr></table></div>

<p>En este caso es el número 3. Cuando tenemos varios proceso ejecutados con <strong>AT</strong>, podemos consultarlos con el comando:</p>

<div class="wp_codebox"><table><tr id="p93713"><td class="code" id="p937code13"><pre class="bash" style="font-family:monospace;">$ atq</pre></td></tr></table></div>

<p>Cuando sepamos el proceso que queremos matar, solo tenemos que teclear:</p>

<div class="wp_codebox"><table><tr id="p93714"><td class="code" id="p937code14"><pre class="bash" style="font-family:monospace;">$ atrm <span style="color: #666666; font-style: italic;">#</span></pre></td></tr></table></div>

<p>Por lo tanto, si quiero matar el proceso del ejemplo, solo tengo que poner:</p>

<div class="wp_codebox"><table><tr id="p93715"><td class="code" id="p937code15"><pre class="bash" style="font-family:monospace;">$ atrm <span style="color: #000000;">3</span></pre></td></tr></table></div>

<p>Listo</p>
<p>AT tiene otras opciones, como por ejemplo la opción de enviarnos un correo cuando ejecute la tarea. Estas opciones las pueden ver tecleando en consola:</p>

<div class="wp_codebox"><table><tr id="p93716"><td class="code" id="p937code16"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">man</span> at</pre></td></tr></table></div>

<p>vía: <a href="http://blog.desdelinux.net/ejecuta-un-comando-a-la-hora-que-quieras-con-at/" target="_blank">blog.desdelinux.net/ejecuta-un-comando-a-la-hora-que-quieras-con-at/</a></p>
<img src="http://feeds.feedburner.com/~r/miguelcarmona/~4/YCAcggwpxuU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/ejecuta-un-comando-a-la-hora-que-quieras-con-at/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://miguelcarmona.name/notas-y-recortes/ejecuta-un-comando-a-la-hora-que-quieras-con-at</feedburner:origLink></item>
		<item>
		<title>Sincronizar contenido a través de FTP</title>
		<link>http://feedproxy.google.com/~r/miguelcarmona/~3/D2adntTIA4s/sincronizar-contenido-a-traves-de-ftp</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/sincronizar-contenido-a-traves-de-ftp#comments</comments>
		<pubDate>Wed, 10 Oct 2012 18:16:33 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=927</guid>
		<description><![CDATA[Normalmente para la sincronización en GNU/Linux se suele utilizar rsync por su facilidad y principalmente por su eficacia. Se puede utilizar a través de otros protocolos (como ssh por ejemplo) y permite una gran flexibilidad. Para hacer una sincronización entre 2 rutas (por ejemplo para realizar un update de alguna aplicación en nuestro hosting compartido [...]]]></description>
				<content:encoded><![CDATA[<p>Normalmente para la sincronización en GNU/Linux se suele utilizar rsync por su facilidad y principalmente por su eficacia. Se puede utilizar a través de otros protocolos (como ssh por ejemplo) y permite una gran flexibilidad.</p>
<p>Para hacer una sincronización entre 2 rutas (por ejemplo para realizar un update de alguna aplicación en nuestro hosting compartido económico o una sincronización para posteriormente realizar un backup en local), podemos utilizar el siguiente script basado en lftp:<span id="more-927"></span></p>

<div class="wp_codebox"><table><tr id="p92718"><td class="code" id="p927code18"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #007800;">HOST</span>=<span style="color: #ff0000;">&quot;your.ftp.host.dom&quot;</span>
<span style="color: #007800;">USER</span>=<span style="color: #ff0000;">&quot;username&quot;</span>
<span style="color: #007800;">PASS</span>=<span style="color: #ff0000;">&quot;password&quot;</span>
<span style="color: #007800;">LCD</span>=<span style="color: #ff0000;">&quot;/path/of/your/local/dir&quot;</span>
<span style="color: #007800;">RCD</span>=<span style="color: #ff0000;">&quot;/path/of/your/remote/dir&quot;</span>
lftp <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;set ftp:list-options -a;
open ftp://<span style="color: #007800;">$USER</span>:<span style="color: #007800;">$PASS</span>@<span style="color: #007800;">$HOST</span>;
lcd <span style="color: #007800;">$LCD</span>;
cd <span style="color: #007800;">$RCD</span>;
mirror --reverse <span style="color: #000099; font-weight: bold;">\
</span>	--delete <span style="color: #000099; font-weight: bold;">\
</span>	--verbose <span style="color: #000099; font-weight: bold;">\
</span>	--exclude-glob a-dir-to-exclude/ <span style="color: #000099; font-weight: bold;">\
</span>	--exclude-glob a-file-to-exclude <span style="color: #000099; font-weight: bold;">\
</span>	--exclude-glob a-file-group-to-exclude* <span style="color: #000099; font-weight: bold;">\
</span>	--exclude-glob other-files-to-exclude&quot;</span></pre></td></tr></table></div>

<p>No creo que haya que explicar mucho la verdad.</p>
<p>Agradecimientos a su autor en: <a title="http://serverfault.com/a/106365" href="http://serverfault.com/a/106365" target="_blank">http://serverfault.com/a/106365</a></p>
<p>También tenemos un proyecto que pinta bastante bien (y en mantenimiento y desarrollo) llamado FTPSync. Se trata de un script en perl. Más en <a href="https://confluence.clazzes.org/display/FTPSYNC/FTPSync+Home">https://confluence.clazzes.org/display/FTPSYNC/FTPSync+Home</a></p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/miguelcarmona/~4/D2adntTIA4s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/sincronizar-contenido-a-traves-de-ftp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://miguelcarmona.name/notas-y-recortes/sincronizar-contenido-a-traves-de-ftp</feedburner:origLink></item>
		<item>
		<title>Enviar mensajes entre las terminales, y/o usuarios conectados por SSH</title>
		<link>http://feedproxy.google.com/~r/miguelcarmona/~3/6MZ0ZJ_eULI/enviar-mensajes-entre-las-terminales-yo-usuarios-conectados-por-ssh</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/enviar-mensajes-entre-las-terminales-yo-usuarios-conectados-por-ssh#comments</comments>
		<pubDate>Tue, 02 Oct 2012 17:51:35 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=915</guid>
		<description><![CDATA[En algún que otro día he necesitado enviarle un mensaje, notificación o aviso a los usuarios que están conectados por SSH a un servidor, por ejemplo; avisando que el servidor dentro de 5 minutos se reiniciará… o algo así. En ese momento me he visto en el dilema, ¿cómo hacer que ellos sepan esto de [...]]]></description>
				<content:encoded><![CDATA[<p>En algún que otro día he necesitado enviarle un mensaje, notificación o aviso a los usuarios que están conectados por SSH a un servidor, por ejemplo; avisando que el servidor dentro de 5 minutos se reiniciará… o algo así.</p>
<p>En ese momento me he visto en el dilema, ¿cómo hacer que ellos sepan esto de forma inmediata? … mediante email demorará, y depende de que todos y cada uno de los usuarios lea el email, por mensajería instantánea (IM) no es factible, pues no siempre todos están online, en fin… todo un problemilla</p>
<p>Y un buen día llegó la solución … comando <strong>wall</strong></p>
<p>Una línea tan simple como:<span id="more-915"></span></p>

<div class="wp_codebox"><table><tr id="p91522"><td class="code" id="p915code22"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;El servidor será reiniciado en los próximos 5mins, guarden sus trabajos.&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">wall</span></pre></td></tr></table></div>

<p>Y listo! … esto enviará ese mensaje a TODOS los usuarios que estén conectados por SSH al servidor, pero… no solo eso. Suponiendo que es un ordenador y no un servidor (o sea, que tiene entorno gráfico), veremos también el mensaje en la terminal que tengamos abierta, así como en el área de notificación:</p>
<p><img class="aligncenter size-full wp-image-919" title="mensaje de notificacion" src="/wp-content/uploads/2012/10/mensaje-notificacion.jpg" alt="" width="321" height="178" /></p>
<p><img title="mensaje-terminal" src="/wp-content/uploads/2012/10/mensaje-terminal.jpg" alt="" width="543" height="424" /></p>
<p>Pero…<strong> ¿qué hacer si deseo enviar un mensaje a solo una terminal o sesión SSH?</strong></p>
<p>En ese caso debemos conocer qué sesión es con la que deseamos comunicarnos. Para ello usamos lo que el mismo sistema nos brinda.</p>
<p><strong>1.</strong> Primero debemos saber a qué terminal deseamos mandar el mensaje, para ello escribimos en una terminal : <strong>w</strong> (<em>sí… solo la letra w</em>). Nos aparecerá lo siguiente, y con esa información veremos a qué terminal deseamos contactar:</p>
<p><img title="terminal-w" src="/wp-content/uploads/2012/10/terminal-w-300x215.jpg" alt="" width="300" height="215" /></p>
<p>En este ejemplo, deseo enviar un mensaje al <strong>tty2</strong> (el primero que ven).</p>
<p><strong>2.</strong> Ahora pasamos al comando:</p>

<div class="wp_codebox"><table><tr id="p91523"><td class="code" id="p915code23"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Esto es un mensaje de prueba&quot;</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>tty2</pre></td></tr></table></div>

<p>Y esto bastará para lograr lo que deseamos, en la TTY2 aparecerá ese texto.</p>
<p>Si en vez de enviarlo ahí, deseamos enviarlo a pts/2 … simplemente:</p>

<div class="wp_codebox"><table><tr id="p91524"><td class="code" id="p915code24"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Esto es un mensaje de prueba&quot;</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>pts<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2</span></pre></td></tr></table></div>

<p>vía: <a href="http://blog.desdelinux.net/enviar-mensajes-entre-las-terminales-yo-usuarios-conectados-por-ssh/">http://blog.desdelinux.net/enviar-mensajes-entre-las-terminales-yo-usuarios-conectados-por-ssh/</a></p>
<img src="http://feeds.feedburner.com/~r/miguelcarmona/~4/6MZ0ZJ_eULI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/enviar-mensajes-entre-las-terminales-yo-usuarios-conectados-por-ssh/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://miguelcarmona.name/notas-y-recortes/enviar-mensajes-entre-las-terminales-yo-usuarios-conectados-por-ssh</feedburner:origLink></item>
		<item>
		<title>¿Cómo usar el comando dig? (ejemplos)</title>
		<link>http://feedproxy.google.com/~r/miguelcarmona/~3/Q9VAxFBKDcc/como-usar-el-comando-dig-ejemplos</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/como-usar-el-comando-dig-ejemplos#comments</comments>
		<pubDate>Tue, 02 Oct 2012 17:43:05 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=903</guid>
		<description><![CDATA[El comando unix dig (domain information groper), con el permiso de nslookup, es una de las mejores opciones a la hora de hacer troubleshooting o debug de problemas DNS. Vamos a ver unos cuantos ejemplos de algunas las posibilidades que nos ofrece. Como siempre toda esta información la podéis ampliar en la página man del comando o la ayuda: $ man dig [...]]]></description>
				<content:encoded><![CDATA[<p>El comando unix <strong>dig (domain information groper)</strong>, con el permiso de <strong>nslookup</strong>, es una de las mejores opciones a la hora de hacer <strong>troubleshooting</strong> o <strong>debug</strong> de problemas <strong>DNS</strong>. Vamos a ver unos cuantos ejemplos de algunas las posibilidades que nos ofrece. Como siempre toda esta información la podéis ampliar en la página man del comando o la ayuda:</p>
<pre>$ man dig
$ dig -h</pre>
<p><strong>Nota</strong><em>: he suprimido salida no relevante de los comandos para reducir el tamaño del artículo.</em></p>
<p><strong>Ejecución sin argumentos</strong></p>
<p>Cuando ejecutamos el comando dig sin argumentos se realiza una consulta de los NS (Name Servers) raíz o root servers “.”. Cara al troubleshooting o debug no suele ser de mucha utilidad:<span id="more-903"></span></p>

<div class="wp_codebox"><table><tr id="p90333"><td class="code" id="p903code33"><pre class="bash" style="font-family:monospace;">$ dig
; DiG 9.8.1-P1 
<span style="color: #000000; font-weight: bold;">;;</span> global options: +cmd
<span style="color: #000000; font-weight: bold;">;;</span> Got answer:
<span style="color: #000000; font-weight: bold;">;;</span> <span style="color: #660033;">-HEADER-</span> opcode: QUERY, status: NOERROR, <span style="color: #c20cb9; font-weight: bold;">id</span>: <span style="color: #000000;">55735</span>
<span style="color: #000000; font-weight: bold;">;;</span> flags: qr rd ra; QUERY: <span style="color: #000000;">1</span>, ANSWER: <span style="color: #000000;">13</span>, AUTHORITY: <span style="color: #000000;">0</span>, ADDITIONAL: <span style="color: #000000;">14</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> QUESTION SECTION:
;. IN NS
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> ANSWER SECTION:
.			<span style="color: #000000;">494084</span>	IN	NS	e.root-servers.net.
.			<span style="color: #000000;">494084</span>	IN	NS	a.root-servers.net.
.			<span style="color: #000000;">494084</span>	IN	NS	b.root-servers.net.
.			<span style="color: #000000;">494084</span>	IN	NS	g.root-servers.net.
.			<span style="color: #000000;">494084</span>	IN	NS	h.root-servers.net.
.			<span style="color: #000000;">494084</span>	IN	NS	i.root-servers.net.
...
...
<span style="color: #000000; font-weight: bold;">;;</span> ADDITIONAL SECTION:
j.root-servers.net. <span style="color: #000000;">575975</span> IN A 192.58.128.30
m.root-servers.net. <span style="color: #000000;">428374</span> IN A 202.12.27.33
...
...
<span style="color: #000000; font-weight: bold;">;;</span> Query <span style="color: #000000; font-weight: bold;">time</span>: <span style="color: #000000;">40</span> msec</pre></td></tr></table></div>

<p><strong>Dominio como argumento</strong></p>
<p>La forma más común y simple de ejecutar dig. En este caso pasamos como argumento el dominio a consultar. Cuando no se especifica nada se consulta siempre el <strong>registro A</strong> del dominio. Al no especificar tampoco los servidores <strong>DNS</strong> contra los que hacer la consulta se utilizan los <strong>especificados en nuestra conexión</strong>(<a title="Hacer que /etc/resolv.conf utilice el DNS secundario o balancee carga" href="http://rm-rf.es/hacer-que-etcresolv-conf-utilice-el-dns-secundario-o-balancee-carga/">/etc/resolv.conf</a>). Debemos prestar especial importancia a la sección <strong>ANSWER SECTION</strong>, ya que muestra el resultado de nuestra consulta:</p>

<div class="wp_codebox"><table><tr id="p90334"><td class="code" id="p903code34"><pre class="bash" style="font-family:monospace;">$ dig rm-rf.es
&nbsp;
; DiG 9.8.1-P1 rm-rf.es
<span style="color: #000000; font-weight: bold;">;;</span> global options: +cmd
<span style="color: #000000; font-weight: bold;">;;</span> Got answer:
<span style="color: #000000; font-weight: bold;">;;</span> <span style="color: #660033;">-HEADER-</span> opcode: QUERY, status: NOERROR, <span style="color: #c20cb9; font-weight: bold;">id</span>: <span style="color: #000000;">10364</span>
<span style="color: #000000; font-weight: bold;">;;</span> flags: qr rd ra; QUERY: <span style="color: #000000;">1</span>, ANSWER: <span style="color: #000000;">1</span>, AUTHORITY: <span style="color: #000000;">0</span>, ADDITIONAL: <span style="color: #000000;">0</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> QUESTION SECTION:
;rm-rf.es. IN A
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> ANSWER SECTION:
rm-rf.es. <span style="color: #000000;">13104</span> IN A 93.93.112.55
<span style="color: #000000; font-weight: bold;">;;</span> Query <span style="color: #000000; font-weight: bold;">time</span>: <span style="color: #000000;">39</span> msec
<span style="color: #000000; font-weight: bold;">;;</span> SERVER: 127.0.0.1<span style="color: #666666; font-style: italic;">#53(127.0.0.1)</span>
...</pre></td></tr></table></div>

<p><strong>Dominio como argumento y usando un name server específico</strong></p>
<p>El comando anterior usaba el <strong>DNS local especificado en /etc/resolv.conf (127.0.0.1)</strong> para solicitar el registro A del dominio, en este caso vamos a hacer la consulta contra un<strong> NS externo</strong>, el de google por ejemplo (8.8.8.8). Se indica con la IP/nombre del servidor precedida de @. Se puede ver en la sección final como se especifica el servidor que utilizamos para la query (negrita). La respuesta debería ser la misma que los servidores autoritativos del dominio, en caso contrario podría haber envenenamiento DNS, DNS spoofing…:</p>

<div class="wp_codebox"><table><tr id="p90335"><td class="code" id="p903code35"><pre class="bash" style="font-family:monospace;">$ dig <span style="color: #000000; font-weight: bold;">@</span>8.8.8.8 rm-rf.es
; DiG 9.8.1-P1 <span style="color: #000000; font-weight: bold;">@</span>8.8.8.8 rm-rf.es
; <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">1</span> server found<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">;;</span> global options: +cmd
<span style="color: #000000; font-weight: bold;">;;</span> Got answer:
<span style="color: #000000; font-weight: bold;">;;</span> <span style="color: #660033;">-HEADER-</span> opcode: QUERY, status: NOERROR, <span style="color: #c20cb9; font-weight: bold;">id</span>: <span style="color: #000000;">29315</span>
<span style="color: #000000; font-weight: bold;">;;</span> flags: qr rd ra; QUERY: <span style="color: #000000;">1</span>, ANSWER: <span style="color: #000000;">1</span>, AUTHORITY: <span style="color: #000000;">0</span>, ADDITIONAL: <span style="color: #000000;">0</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> QUESTION SECTION:
;rm-rf.es. IN A
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> ANSWER SECTION:
rm-rf.es. <span style="color: #000000;">4315</span> IN A 93.93.112.55
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> Query <span style="color: #000000; font-weight: bold;">time</span>: <span style="color: #000000;">64</span> msec
<span style="color: #000000; font-weight: bold;">;;</span> SERVER: 8.8.8.8<span style="color: #666666; font-style: italic;">#53(8.8.8.8) ...</span></pre></td></tr></table></div>

<p><strong>Especificar el registro (A, NS, MX, CNAME…) a consultar</strong></p>
<p>Como decía antes, por defecto se consulta el registro A del dominio, pero podemos <strong>especificar el tipo de registro que queramos</strong> (ANY, NS, A, MX, SIG,SOA…):</p>

<div class="wp_codebox"><table><tr id="p90336"><td class="code" id="p903code36"><pre class="bash" style="font-family:monospace;">$ dig MX <span style="color: #000000; font-weight: bold;">@</span>8.8.8.8 rm-rf.es 
; DiG 9.8.1-P1 MX <span style="color: #000000; font-weight: bold;">@</span>8.8.8.8 rm-rf.es
; <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">1</span> server found<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">;;</span> global options: +cmd
<span style="color: #000000; font-weight: bold;">;;</span> Got answer:
<span style="color: #000000; font-weight: bold;">;;</span> <span style="color: #660033;">-HEADER-</span> opcode: QUERY, status: NOERROR, <span style="color: #c20cb9; font-weight: bold;">id</span>: <span style="color: #000000;">43941</span>
<span style="color: #000000; font-weight: bold;">;;</span> flags: qr rd ra; QUERY: <span style="color: #000000;">1</span>, ANSWER: <span style="color: #000000;">1</span>, AUTHORITY: <span style="color: #000000;">0</span>, ADDITIONAL: <span style="color: #000000;">0</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> QUESTION SECTION:
;rm-rf.es. IN MX
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> ANSWER SECTION:
rm-rf.es. <span style="color: #000000;">14400</span> IN MX <span style="color: #000000;">10</span> rm-rf.es.
<span style="color: #000000; font-weight: bold;">;;</span> Query <span style="color: #000000; font-weight: bold;">time</span>: <span style="color: #000000;">105</span> msec
<span style="color: #000000; font-weight: bold;">;;</span> SERVER: 8.8.8.8<span style="color: #666666; font-style: italic;">#53(8.8.8.8)</span>
<span style="color: #000000; font-weight: bold;">;;</span> WHEN: Mon Sep <span style="color: #000000;">10</span> <span style="color: #000000;">23</span>:06:<span style="color: #000000;">25</span> <span style="color: #000000;">2012</span>
<span style="color: #000000; font-weight: bold;">;;</span> MSG SIZE rcvd: <span style="color: #000000;">42</span></pre></td></tr></table></div>

<p><strong>Consultar todos los registros de la zona DNS</strong> En lugar de especificar el tipo de registro a mostrar (A, MX, CNAME, AAAA…) podemos decir directamente que consulte todos los que se sirven en la zona DNS del dominio con el parámetero <strong>ANY</strong>:</p>

<div class="wp_codebox"><table><tr id="p90337"><td class="code" id="p903code37"><pre class="bash" style="font-family:monospace;">$ dig ANY google.com
; DiG 9.8.1-P1 <span style="color: #000000; font-weight: bold;">&amp;</span>lt;<span style="color: #000000; font-weight: bold;">&amp;</span>lt;<span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>gt; ANY google.com
<span style="color: #000000; font-weight: bold;">;;</span> global options: +cmd
<span style="color: #000000; font-weight: bold;">;;</span> Got answer:
<span style="color: #000000; font-weight: bold;">;;</span> <span style="color: #660033;">-HEADER-</span> opcode: QUERY, status: NOERROR, <span style="color: #c20cb9; font-weight: bold;">id</span>: <span style="color: #000000;">13347</span>
<span style="color: #000000; font-weight: bold;">;;</span> flags: qr rd ra; QUERY: <span style="color: #000000;">1</span>, ANSWER: <span style="color: #000000;">22</span>, AUTHORITY: <span style="color: #000000;">0</span>, ADDITIONAL: <span style="color: #000000;">0</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> QUESTION SECTION:
;google.com. IN ANY
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> ANSWER SECTION:
google.com. <span style="color: #000000;">2778</span> IN TXT <span style="color: #ff0000;">&quot;v=spf1 include:_netblocks.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all&quot;</span>
google.com. <span style="color: #000000;">258</span> IN A 173.194.34.225
google.com. <span style="color: #000000;">258</span> IN A 173.194.34.230
google.com. <span style="color: #000000;">258</span> IN A 173.194.34.224
...
...
google.com. <span style="color: #000000;">258</span> IN A 173.194.34.229
google.com. <span style="color: #000000;">32168</span> IN NS ns4.google.com.
google.com. <span style="color: #000000;">32168</span> IN NS ns1.google.com.
google.com. <span style="color: #000000;">32168</span> IN NS ns3.google.com.
google.com. <span style="color: #000000;">32168</span> IN NS ns2.google.com.
google.com. <span style="color: #000000;">56</span> IN AAAA 2a00:<span style="color: #000000;">1450</span>:<span style="color: #000000;">4003</span>:<span style="color: #000000;">802</span>::<span style="color: #000000;">1007</span>
google.com. <span style="color: #000000;">326</span> IN MX <span style="color: #000000;">20</span> alt1.aspmx.l.google.com.
google.com. <span style="color: #000000;">326</span> IN MX <span style="color: #000000;">30</span> alt2.aspmx.l.google.com.
google.com. <span style="color: #000000;">326</span> IN MX <span style="color: #000000;">50</span> alt4.aspmx.l.google.com.
google.com. <span style="color: #000000;">326</span> IN MX <span style="color: #000000;">40</span> alt3.aspmx.l.google.com.
google.com. <span style="color: #000000;">326</span> IN MX <span style="color: #000000;">10</span> aspmx.l.google.com.
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> Query <span style="color: #000000; font-weight: bold;">time</span>: <span style="color: #000000;">43</span> msec
<span style="color: #000000; font-weight: bold;">;;</span> SERVER: 127.0.0.1<span style="color: #666666; font-style: italic;">#53(127.0.0.1)</span></pre></td></tr></table></div>

<p><strong>Hacer debug con el parámetro trace</strong></p>
<p>El parámetro “<strong>+trace</strong>” es muy útil para hacer debug ante problemas de resolución DNS ya que permite ver la<strong>traza y saltos de la petición hasta que llega al servidor autoritativo</strong> que ofrece la respuesta del registro:</p>

<div class="wp_codebox"><table><tr id="p90338"><td class="code" id="p903code38"><pre class="bash" style="font-family:monospace;">$ dig +trace rm-rf.es
; DiG 9.8.1-P1 +trace rm-rf.es
<span style="color: #000000; font-weight: bold;">;;</span> global options: +cmd
.			<span style="color: #000000;">103105</span>	IN	NS	f.root-servers.net.
.			<span style="color: #000000;">103105</span>	IN	NS	g.root-servers.net.
.			<span style="color: #000000;">103105</span>	IN	NS	h.root-servers.net.
...
...
.			<span style="color: #000000;">103105</span>	IN	NS	e.root-servers.net.
<span style="color: #000000; font-weight: bold;">;;</span> Received <span style="color: #000000;">500</span> bytes from 127.0.0.1<span style="color: #666666; font-style: italic;">#53(127.0.0.1) in 523 ms</span>
&nbsp;
es.			<span style="color: #000000;">172800</span>	IN	NS	a.nic.es.
es.			<span style="color: #000000;">172800</span>	IN	NS	f.nic.es.
es.			<span style="color: #000000;">172800</span>	IN	NS	ns1.cesca.es.
es.			<span style="color: #000000;">172800</span>	IN	NS	ns3.nic.fr.
es.			<span style="color: #000000;">172800</span>	IN	NS	ns15.communitydns.net.
es.			<span style="color: #000000;">172800</span>	IN	NS	ns-ext.nic.cl.
es.			<span style="color: #000000;">172800</span>	IN	NS	sns-pb.isc.org.
<span style="color: #000000; font-weight: bold;">;;</span> Received <span style="color: #000000;">454</span> bytes from 192.203.230.10<span style="color: #666666; font-style: italic;">#53(192.203.230.10) in 490 ms</span>
&nbsp;
rm-rf.es.		<span style="color: #000000;">86400</span>	IN	NS	dns2.sistema-dns.com.
rm-rf.es.		<span style="color: #000000;">86400</span>	IN	NS	dns1.sistema-dns.com.
<span style="color: #000000; font-weight: bold;">;;</span> Received <span style="color: #000000;">79</span> bytes from 84.88.0.3<span style="color: #666666; font-style: italic;">#53(84.88.0.3) in 145 ms</span>
&nbsp;
rm-rf.es.		<span style="color: #000000;">14400</span>	IN	A	93.93.112.55
rm-rf.es.		<span style="color: #000000;">14400</span>	IN	NS	dns2.sistema-dns.com.
rm-rf.es.		<span style="color: #000000;">14400</span>	IN	NS	dns1.sistema-dns.com.
<span style="color: #000000; font-weight: bold;">;;</span> Received <span style="color: #000000;">127</span> bytes from 93.93.118.80<span style="color: #666666; font-style: italic;">#53(93.93.118.80) in 47 ms</span></pre></td></tr></table></div>

<p><strong>Resolución inversa (IP -&gt; nombre)</strong></p>
<p>Para realizar consultas de <strong>reverse DNS</strong> tenemos el parámetro -x:</p>

<div class="wp_codebox"><table><tr id="p90339"><td class="code" id="p903code39"><pre class="bash" style="font-family:monospace;">$ dig <span style="color: #660033;">-x</span> 8.8.8.8 
; DiG 9.8.1-P1  <span style="color: #660033;">-x</span> 8.8.8.8
<span style="color: #000000; font-weight: bold;">;;</span> global options: +cmd
<span style="color: #000000; font-weight: bold;">;;</span> Got answer:
<span style="color: #000000; font-weight: bold;">;;</span> <span style="color: #660033;">-HEADER-</span> opcode: QUERY, status: NOERROR, <span style="color: #c20cb9; font-weight: bold;">id</span>: <span style="color: #000000;">51972</span>
<span style="color: #000000; font-weight: bold;">;;</span> flags: qr rd ra; QUERY: <span style="color: #000000;">1</span>, ANSWER: <span style="color: #000000;">1</span>, AUTHORITY: <span style="color: #000000;">0</span>, ADDITIONAL: <span style="color: #000000;">0</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> QUESTION SECTION:
;8.8.8.8.in-addr.arpa. IN PTR
&nbsp;
<span style="color: #000000; font-weight: bold;">;;</span> ANSWER SECTION:
8.8.8.8.in-addr.arpa. <span style="color: #000000;">70159</span> IN PTR google-public-dns-a.google.com.
...</pre></td></tr></table></div>

<p><strong>Otras opciones de consulta</strong></p>
<p>Para ver el resto de opciones de consulta es mejor directamente revisar la página man, básicamente nos permiden indicar como se va a visualizar el resultado de la consulta (eliminar información secundaria por ejemplo con la opción +nocmd), establecer timeouts, especificar el uso de TCP o UDP, flags de consulta, etc. Todas llevan el signo + delante, y se resetean con añadiendo “no” después del “+”</p>

<div class="wp_codebox"><table><tr id="p90340"><td class="code" id="p903code40"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">man</span> dig
       +<span style="color: #7a0874; font-weight: bold;">&#91;</span>no<span style="color: #7a0874; font-weight: bold;">&#93;</span>tcp
           Use <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000; font-weight: bold;">do</span> not use<span style="color: #7a0874; font-weight: bold;">&#93;</span> TCP when querying name servers. The default behavior is to use UDP unless an AXFR or IXFR query is requested,
           <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #c20cb9; font-weight: bold;">which</span> <span style="color: #000000; font-weight: bold;">case</span> a TCP connection is used.
&nbsp;
       +<span style="color: #7a0874; font-weight: bold;">&#91;</span>no<span style="color: #7a0874; font-weight: bold;">&#93;</span>vc
           Use <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000; font-weight: bold;">do</span> not use<span style="color: #7a0874; font-weight: bold;">&#93;</span> TCP when querying name servers. This alternate syntax to +<span style="color: #7a0874; font-weight: bold;">&#91;</span>no<span style="color: #7a0874; font-weight: bold;">&#93;</span>tcp is provided <span style="color: #000000; font-weight: bold;">for</span> backwards compatibility. The
           <span style="color: #ff0000;">&quot;vc&quot;</span> stands <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #ff0000;">&quot;virtual circuit&quot;</span>.
&nbsp;
       +<span style="color: #7a0874; font-weight: bold;">&#91;</span>no<span style="color: #7a0874; font-weight: bold;">&#93;</span>ignore
           Ignore truncation <span style="color: #000000; font-weight: bold;">in</span> UDP responses instead of retrying with TCP. By default, TCP retries are performed.
&nbsp;
       +<span style="color: #007800;">domain</span>=somename
           Set the search list to contain the single domain somename, <span style="color: #c20cb9; font-weight: bold;">as</span> <span style="color: #000000; font-weight: bold;">if</span> specified <span style="color: #000000; font-weight: bold;">in</span> a domain directive <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>resolv.conf, and
           <span style="color: #7a0874; font-weight: bold;">enable</span> search list processing <span style="color: #c20cb9; font-weight: bold;">as</span> <span style="color: #000000; font-weight: bold;">if</span> the +search option were given.
&nbsp;
       +<span style="color: #7a0874; font-weight: bold;">&#91;</span>no<span style="color: #7a0874; font-weight: bold;">&#93;</span>search
           Use <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000; font-weight: bold;">do</span> not use<span style="color: #7a0874; font-weight: bold;">&#93;</span> the search list defined by the searchlist or domain directive <span style="color: #000000; font-weight: bold;">in</span> resolv.conf <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">if</span> any<span style="color: #7a0874; font-weight: bold;">&#41;</span>. The search list is not
           used by default.
&nbsp;
       +<span style="color: #7a0874; font-weight: bold;">&#91;</span>no<span style="color: #7a0874; font-weight: bold;">&#93;</span>showsearch
           Perform <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000; font-weight: bold;">do</span> not perform<span style="color: #7a0874; font-weight: bold;">&#93;</span> a search showing intermediate results.
&nbsp;
       +<span style="color: #7a0874; font-weight: bold;">&#91;</span>no<span style="color: #7a0874; font-weight: bold;">&#93;</span>defname
           Deprecated, treated <span style="color: #c20cb9; font-weight: bold;">as</span> a synonym <span style="color: #000000; font-weight: bold;">for</span> +<span style="color: #7a0874; font-weight: bold;">&#91;</span>no<span style="color: #7a0874; font-weight: bold;">&#93;</span>search
&nbsp;
       +<span style="color: #7a0874; font-weight: bold;">&#91;</span>no<span style="color: #7a0874; font-weight: bold;">&#93;</span>aaonly
           Sets the <span style="color: #ff0000;">&quot;aa&quot;</span> flag <span style="color: #000000; font-weight: bold;">in</span> the query.
&nbsp;
       +<span style="color: #7a0874; font-weight: bold;">&#91;</span>no<span style="color: #7a0874; font-weight: bold;">&#93;</span>aaflag
           A synonym <span style="color: #000000; font-weight: bold;">for</span> +<span style="color: #7a0874; font-weight: bold;">&#91;</span>no<span style="color: #7a0874; font-weight: bold;">&#93;</span>aaonly.
...
...
...
...</pre></td></tr></table></div>

<p>Con estos ejemplos e información ya podemos comenzar a hacer un buen uso del comando dig para resolver problemas relacionados con DNS.</p>
<p>vía: <a title="http://rm-rf.es/como-usar-el-comando-dig-ejemplos" href="http://rm-rf.es/como-usar-el-comando-dig-ejemplos">http://rm-rf.es/como-usar-el-comando-dig-ejemplos</a></p>
<img src="http://feeds.feedburner.com/~r/miguelcarmona/~4/Q9VAxFBKDcc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/como-usar-el-comando-dig-ejemplos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://miguelcarmona.name/notas-y-recortes/como-usar-el-comando-dig-ejemplos</feedburner:origLink></item>
		<item>
		<title>Cómo usar el comando ip en Linux (ejemplos vs ifconfig)</title>
		<link>http://feedproxy.google.com/~r/miguelcarmona/~3/SxgpHMqKBjs/como-usar-el-comando-ip-en-linux-ejemplos-vs-ifconfig</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/como-usar-el-comando-ip-en-linux-ejemplos-vs-ifconfig#comments</comments>
		<pubDate>Tue, 02 Oct 2012 17:26:58 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=898</guid>
		<description><![CDATA[El comando ip, que forma parte de la iproute2 suite parece ser que es el sustituto de ifconfig, pero de momento ifconfig sigue entre nosotros, y creo que hasta que no desaparezca no dejaremos de usarlo (por comodidad, vagancia o desconocimiento del nuevo). Vamos a ver algunos ejemplos de uso del comando ip para comenzar a familiarizarnos con él [...]]]></description>
				<content:encoded><![CDATA[<p>El comando <strong>ip</strong>, que forma parte de la <strong>iproute2 suite</strong> parece ser que es el sustituto de <strong>ifconfig</strong>, pero de momento ifconfig sigue entre nosotros, y creo que hasta que no desaparezca no dejaremos de usarlo (por comodidad, vagancia o desconocimiento del nuevo).</p>
<p>Vamos a ver algunos ejemplos de uso del comando ip para comenzar a familiarizarnos con él y ver como realizariamos las tareas más comunes que hacemos con ifconfig.</p>
<h3>Ver interfaces de red y su configuración</h3>
<p>El comando <strong>ip addr list</strong> vendría a ser lo mismo que ejecutar <strong>ifconfig</strong>. Se puede ejecutar con el mismo resultado como <strong>ip address show</strong> o <strong>ip address list</strong>:<span id="more-898"></span></p>
<pre>~$ <strong>ip addr list</strong>
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:1b:24:d5:18:99 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.128/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::21b:24ff:fed5:1899/64 scope link 
       valid_lft forever preferred_lft forever
3: eth2:  mtu 1500 qdisc pfifo_fast state DORMANT qlen 1000
    link/ether 00:1a:73:d1:67:45 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::21a:73ff:fed1:6745/64 scope link 
       valid_lft forever preferred_lft forever</pre>
<p>También podemos usar el comando ip link show para ver la<strong> información en capa 2 (data link layer)</strong> de las interfaces de red del sistema:</p>
<pre>~$ <strong>ip link show</strong>
1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:1b:24:d5:18:99 brd ff:ff:ff:ff:ff:ff
3: eth2: &lt;NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state DORMANT qlen 1000
link/ether 00:1a:73:d1:67:45 brd ff:ff:ff:ff:ff:ff</pre>
<h3>Activar/desactivar interfaces de red</h3>
<p>Para habilitar o deshabilitar una interfaz de red seguiremos utilizando <strong>ip link</strong>:</p>
<pre>~# <strong>ip link set eth2 down</strong>
~# i<strong>p addr list eth2</strong>
3: eth2:  mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:1a:73:d1:67:45 brd ff:ff:ff:ff:ff:ff

~# <strong>ip link set eth2 up</strong>
~# <strong>ip addr list eth2</strong>
3: eth2:  mtu 1500 qdisc pfifo_fast state DORMANT qlen 1000
    link/ether 00:1a:73:d1:67:45 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::21a:73ff:fed1:6745/64 scope link tentative 
       valid_lft forever preferred_lft forever</pre>
<p>Os he mostrado en el ejemplo como al levantar o tirar la interfaz desaparece la flag de UP en el <strong>ip addr list</strong>. En ifconfig lo hacíamos del siguiente modo:</p>
<pre>~# <strong>ifconfig eth2 down</strong>
~# <strong>ifconfig eth2 up</strong></pre>
<p>&nbsp;</p>
<h3>Cambiar características de la interfaz</h3>
<p>Con ip link también podemos realizar modificaciones en las características o flags de la interfaz, como por ejemplo configurar el <strong>modo promiscuo, multicast, arp, dynamic o allmulti</strong>. Se utilizan los valores <strong>on|off. </strong>En esta otra entrada vimos como hacerlo con ifconfig: <a title="Configurar tarjeta de red en modo promiscuo" href="http://rm-rf.es/configurar-tarjeta-de-red-en-modo-promiscuo/">configurar tarjeta de red en modo promiscuo</a>:</p>
<pre>~# <strong>ip link set dev eth0 promisc on</strong>
~# <strong>ip addr list eth0</strong>
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:1b:24:d5:18:99 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.128/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::21b:24ff:fed5:1899/64 scope link 
       valid_lft forever preferred_lft forever

~# <strong>ip link set dev eth0 promisc off</strong>
~# <strong>ip addr list eth0</strong>
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:1b:24:d5:18:99 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.128/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::21b:24ff:fed5:1899/64 scope link 
       valid_lft forever preferred_lft forever</pre>
<h3>Configurar una IP para la interfaz</h3>
<p>Con <strong>ip addr add</strong> podemos especificar la IP, máscara (también en formato CIDR como vemos a continuación y la IP de broadcast:</p>
<pre>~# <strong>ip addr add 10.0.0.100/24 broadcast 10.0.0.255 dev eth2</strong>
~# <strong>ip addr list eth2</strong>
3: eth2:  mtu 1500 qdisc pfifo_fast state DORMANT qlen 1000
    link/ether 00:1a:73:d1:67:45 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global eth2
    inet6 fe80::21a:73ff:fed1:6745/64 scope link 
       valid_lft forever preferred_lft forever</pre>
<p>Y para eliminar la IP:</p>
<p>~# <strong>ip addr del 10.0.0.100/24 dev eth2</strong></p>
<p>También podemos crear alias en la interfaz:</p>
<pre>~# <strong>ip addr add 10.0.0.101/24 broadcast 10.0.0.255 dev eth2:1</strong></pre>
<h3>Cambiar la MTU de la interfaz</h3>
<pre>~# <strong>ip link set dev eth2 mtu 9000</strong></pre>
<h3>Ver la tabla de rutas</h3>
<pre>~# <strong>ip route show</strong>
default via 192.168.1.1 dev eth0  proto static 
169.254.0.0/16 dev eth0  scope link  metric 1000 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.128  metric 1</pre>
<h3>Ver la tabla de ARP Cache</h3>
<p>De todas las interfaces:</p>
<pre>~# <strong>ip neighbor show</strong>
192.168.1.1 dev eth0 lladdr 64:68:0c:6b:5f:7e REACHABLE</pre>
<p>De una interfaz concreta:</p>
<pre>~# <strong>ip neighbor show dev eth0</strong>
192.168.1.1 lladdr 64:68:0c:6b:5f:7e REACHABLE</pre>
<p>Esto es sólo una pequeña muestra de lo que ofrece el <strong>comando ip en GNU/Linux</strong> y la suite <strong>iproute2</strong> en general. Os recomiendo revisar la página man para profundizar en el tema.</p>
<pre>$ man ip</pre>
<div> vía: <a href="http://rm-rf.es/como-usar-el-comando-ip-en-linux-ejemplos-vs-ifconfig/">http://rm-rf.es/como-usar-el-comando-ip-en-linux-ejemplos-vs-ifconfig/</a></div>
<img src="http://feeds.feedburner.com/~r/miguelcarmona/~4/SxgpHMqKBjs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/como-usar-el-comando-ip-en-linux-ejemplos-vs-ifconfig/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://miguelcarmona.name/notas-y-recortes/como-usar-el-comando-ip-en-linux-ejemplos-vs-ifconfig</feedburner:origLink></item>
		<item>
		<title>Query log de MySQL (general log)</title>
		<link>http://feedproxy.google.com/~r/miguelcarmona/~3/jeDZcbgwQgc/query-log-de-mysql-general-log</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/query-log-de-mysql-general-log#comments</comments>
		<pubDate>Tue, 02 Oct 2012 11:26:20 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=891</guid>
		<description><![CDATA[En MySQL podemos habilitar un log de queries ejecutadas en el servidor llamado “general log“. Aunque no es muy recomendable tenerlo habilitado normalmente, puede resultar útil en momentos puntuales. Vamos a ver su funcionamiento: Las variables que controlan el general log son las siguientes: general_log: Indicamos si queremos habilitar o no dicho log general_log_file: Indicamos el path del fichero dónde queremos [...]]]></description>
				<content:encoded><![CDATA[<p>En <strong>MySQL</strong> podemos habilitar un <strong>log de queries ejecutadas en el servidor</strong> llamado “<strong>general log</strong>“. Aunque no es muy recomendable tenerlo habilitado normalmente, puede resultar útil en momentos puntuales. Vamos a ver su funcionamiento:</p>
<p>Las variables que controlan el <strong>general log</strong> son las siguientes:</p>
<ul>
<li><strong>general_log</strong>: Indicamos si queremos habilitar o no dicho log</li>
<li><strong>general_log_file</strong>: Indicamos el path del fichero dónde queremos el log</li>
</ul>
<p>Mediante <strong>SHOW VARIABLES</strong> podemos verlos:</p>
<pre>mysql&gt; show variables like 'general_log%';
+------------------+--------------------------+
| Variable_name    | Value                    |
+------------------+--------------------------+
| general_log      | OFF                      | 
| general_log_file | /var/log/mysql/query.log | 
+------------------+--------------------------+
2 rows in set (0.00 sec)</pre>
<p>También a partir de MySQL 5.1 tenemos que tener en cuenta el valor de “<strong>log_output</strong>“, ya que podemos indicar que en lugar de un fichero se guarde en una tabla:<span id="more-891"></span></p>
<pre>mysql&gt; show variables like 'log_out%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  | 
+---------------+-------+
1 row in set (0.00 sec)</pre>
<p>Mediante <strong>SET GLOBAL</strong> podemos <strong>habilitar el general log</strong>:</p>
<pre>mysql&gt; set global general_log=1;
Query OK, 0 rows affected (0.10 sec)</pre>
<p>En el fichero veremos como <strong>se guardan tanto las queries como las conexiones</strong>:</p>
<pre>100925 19:19:53	46223 Query	select version()
100925 19:19:57	46223 Quit	
<strong>100925 19:20:14 46224 Connect root@localhost on </strong>
		46224 Query	select @@version_comment limit 1
100925 19:20:16	46224 Query	select version()
<strong>100925 19:20:17 46224 Query select version() 46224 Query select version()</strong>
100925 19:20:18	46224 Quit</pre>
<p>Por otro lado, tenemos también la variable de sessión <strong>sql_log_off</strong>, la cual tenemos por defecto a <strong>OFF</strong> indicando que no deshabilita por defecto el log. Podemos ver su funcionamiento con la siguiente <strong>sesión de ejemplo</strong>:</p>
<pre>mysql&gt; select "sql_log_off en off";
+--------------------+
| sql_log_off en off |
+--------------------+
| sql_log_off en off |
+--------------------+
1 row in set (0.00 sec)

mysql&gt; set session sql_log_off=1;
Query OK, 0 rows affected (0.00 sec)

mysql&gt; select "sql_log_off en on";
+-------------------+
| sql_log_off en on |
+-------------------+
| sql_log_off en on |
+-------------------+
1 row in set (0.00 sec)</pre>
<p>En el <strong>log</strong> quedaría:</p>
<pre>100925 19:21:41	46226 Query	select "sql_log_off en off"
100925 19:21:54	46226 Query	set session sql_log_off=1</pre>
<p>Por lo que <strong>veríamos que se deshabilita el log</strong>, pero no las queries que se ejecuten a posteriori. No resulta muy problemática, ya que esta variable únicamente se puede modificar si el usuario tiene el privilegio <strong>SUPER</strong>.</p>
<p>&nbsp;</p>
<p>vía: <a href="http://systemadmin.es/2012/09/query-log-de-mysql-general-log">http://systemadmin.es/2012/09/query-log-de-mysql-general-log</a></p>
<img src="http://feeds.feedburner.com/~r/miguelcarmona/~4/jeDZcbgwQgc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/query-log-de-mysql-general-log/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://miguelcarmona.name/notas-y-recortes/query-log-de-mysql-general-log</feedburner:origLink></item>
		<item>
		<title>Introducción al uso de túneles SSH | securityartwork.es</title>
		<link>http://feedproxy.google.com/~r/miguelcarmona/~3/4INJg5Y_aCc/introduccion-al-uso-de-tuneles-ssh-securityartwork-es</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/introduccion-al-uso-de-tuneles-ssh-securityartwork-es#comments</comments>
		<pubDate>Tue, 31 Jul 2012 21:08:18 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=850</guid>
		<description><![CDATA[Todos nos hemos encontrado en algún momento con que ese servicio al que queremos acceder está en un equipo inalcanzable desde nuestra red u otros problemas similares. Si disponemos de acceso SSH podemos solucionar fácilmente problemas de este tipo utilizando túneles SSH. Planteamos un primer escenario, en el que tenemos un servidor de bases de [...]]]></description>
				<content:encoded><![CDATA[<p>Todos nos hemos encontrado en algún momento con que ese servicio al que queremos acceder está en un equipo inalcanzable desde nuestra red u otros problemas similares. Si disponemos de acceso SSH podemos solucionar fácilmente problemas de este tipo utilizando túneles SSH.</p>
<p>Planteamos un primer escenario, en el que tenemos un servidor de bases de datos al que podemos acceder por SSH, pero cuyo cortafuegos nos impide interactuar directamente con la base de datos (suponemos MySQL, que utiliza el puerto 3306).</p>
<p><center><img src="/wp-content/uploads/2012/07/Introduccion-al-uso-de-tuneles-SSH_0.jpg" alt="" /></center><span id="more-850"></span>En este caso, para ganar acceso local a la base de datos, haremos que todo el tráfico que vaya al puerto local X se redirija a través de la conexión SSH al puerto local 3306 de la máquina a la que nos estamos conectando, utilizando el modificador <tt>-L</tt>:</p>

<div class="wp_codebox"><table><tr id="p85046"><td class="code" id="p850code46"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #660033;">-L</span> X:localhost:<span style="color: #000000;">3306</span> 172.16.1.100</pre></td></tr></table></div>

<p>Ahora, si tenemos una aplicación que utilice dicho servidor de base de datos, símplemente debemos indicarle que la base de datos se encuentra en nuestro equipo local, en el puerto X. Del mismo modo, si el equipo que tiene la base de datos es un tercer equipo, al que no tenemos acceso desde nuestro equipo local pero si desde el servidor al que nos conectamos a través de SSH, la orden será:</p>

<div class="wp_codebox"><table><tr id="p85047"><td class="code" id="p850code47"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #660033;">-L</span> X:172.16.1.111:<span style="color: #000000;">3306</span> 172.16.1.100</pre></td></tr></table></div>

<p><center><img src="/wp-content/uploads/2012/07/Introduccion-al-uso-de-tuneles-SSH_1.jpg" alt="" /></center>&nbsp;</p>
<p>También podemos querer justo lo contrario: que un servidor remoto pueda acceder a un recurso o servicio proporcionado por nuestro equipo o nuestra red local.</p>
<p><center><img src="/wp-content/uploads/2012/07/Introduccion-al-uso-de-tuneles-SSH_2.jpg" alt="" /></center>En este caso, haremos que todo el tráfico que el servidor remoto envíe a su puerto Y se redirija hacia el puerto Z de nuestro equipo, utilizando el modificador <tt>-R</tt>:</p>

<div class="wp_codebox"><table><tr id="p85048"><td class="code" id="p850code48"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #660033;">-R</span> Y:localhost:Z 172.16.1.100</pre></td></tr></table></div>

<p>Al igual que en el caso anterior, si el equipo que contiene el servicio que queremos conectar es uno distinto del nuestro, cambiaremos localhost por la IP de dicho equipo. Por ejemplo:</p>

<div class="wp_codebox"><table><tr id="p85049"><td class="code" id="p850code49"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #660033;">-R</span> Y:192.168.0.123:Z 172.16.1.100</pre></td></tr></table></div>

<p><center><img src="/wp-content/uploads/2012/07/Introduccion-al-uso-de-tuneles-SSH_3.jpg" alt="" /></center>&nbsp;</p>
<p>Como extra, indicar que los servidores SSH ofrecen otra característica interesante, que consiste en crear un proxy de tipo SOCKS en el equipo local. Con esto hacemos que todas las peticiones que se envíen al puerto X del equipo local, se redirijan hacia el equipo remoto y se envíen a su destino como si las hubiera enviado el equipo remoto:</p>

<div class="wp_codebox"><table><tr id="p85050"><td class="code" id="p850code50"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #660033;">-D</span> X 172.16.1.100</pre></td></tr></table></div>

<p><center><img src="/wp-content/uploads/2012/07/Introduccion-al-uso-de-tuneles-SSH_4.jpg" alt="" /></center>Esto es de especial utilidad ya que existen multitud de aplicaciones cuyo tráfico puede ser reenviado a través de un proxy SOCKS. El mejor ejemplo de esto son los navegadores modernos, como Firefox, por ejemplo:</p>
<p><center><img src="/wp-content/uploads/2012/07/Introduccion-al-uso-de-tuneles-SSH_5.jpg" alt="" /></center>vía: <a href="http://www.securityartwork.es/2012/07/19/introduccion-al-uso-de-tuneles-ssh/">http://www.securityartwork.es/2012/07/19/introduccion-al-uso-de-tuneles-ssh/</a></p>
<img src="http://feeds.feedburner.com/~r/miguelcarmona/~4/4INJg5Y_aCc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/introduccion-al-uso-de-tuneles-ssh-securityartwork-es/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://miguelcarmona.name/notas-y-recortes/introduccion-al-uso-de-tuneles-ssh-securityartwork-es</feedburner:origLink></item>
		<item>
		<title>Restringir acceso a ficheros o directorio por IP usando .htaccess</title>
		<link>http://feedproxy.google.com/~r/miguelcarmona/~3/rU7gBmWLfv4/restringir-acceso-a-ficheros-o-directorio-por-ip-usando-htaccess</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/restringir-acceso-a-ficheros-o-directorio-por-ip-usando-htaccess#comments</comments>
		<pubDate>Tue, 26 Jun 2012 16:45:14 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=840</guid>
		<description><![CDATA[Proteger un directorio El fichero .htaccess deberá estar colgado de él y deberá contener el siguiente código: AuthUserFile /dev/null AuthGroupFile /dev/null AuthName &#34;Mi control de acceso&#34; AuthType Basic &#60;LIMIT GET&#62; order deny,allow deny from all allow from xx.xx.xx.xxx &#60;/LIMIT&#62; Cada IP con acceso deberá estar indicada en un nuevo allow. Podemos poner tantos allow como [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Proteger un directorio</strong></p>
<p>El fichero .htaccess deberá estar colgado de él y deberá contener el siguiente código:</p>

<div class="wp_codebox"><table><tr id="p84053"><td class="code" id="p840code53"><pre class="bash" style="font-family:monospace;">AuthUserFile <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null
AuthGroupFile <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null
AuthName <span style="color: #ff0000;">&quot;Mi control de acceso&quot;</span>
AuthType Basic
<span style="color: #000000; font-weight: bold;">&lt;</span>LIMIT GET<span style="color: #000000; font-weight: bold;">&gt;</span>
order deny,allow
deny from all
allow from xx.xx.xx.xxx
<span style="color: #000000; font-weight: bold;">&lt;/</span>LIMIT<span style="color: #000000; font-weight: bold;">&gt;</span></pre></td></tr></table></div>

<p>Cada IP con acceso deberá estar indicada en un nuevo allow. Podemos poner tantos allow como necesitemos.</p>
<p><span id="more-840"></span><strong>Proteger un fichero en particular</strong></p>
<p>Si quieres proteger un fichero en lugar de un directorio, la idea es la misma, en el directorio del fichero en su .htaccess indicamos:</p>

<div class="wp_codebox"><table><tr id="p84054"><td class="code" id="p840code54"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;</span>Files fichero.php<span style="color: #000000; font-weight: bold;">&gt;</span>
 Order Deny,Allow
 Deny from All
 Allow from x.x.x.x
 <span style="color: #000000; font-weight: bold;">&lt;/</span>Files<span style="color: #000000; font-weight: bold;">&gt;</span></pre></td></tr></table></div>

<p>Indicando tantos allow como necesitemos.</p>
<p>vía: <a href="http://www.linuxhispano.net/2012/06/13/restringir-acceso-a-ficheros-o-directorio-por-ip-usando-htaccess/" target="_blank">http://www.linuxhispano.net/2012/06/13/restringir-acceso-a-ficheros-o-directorio-por-ip-usando-htaccess/</a></p>
<img src="http://feeds.feedburner.com/~r/miguelcarmona/~4/rU7gBmWLfv4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/restringir-acceso-a-ficheros-o-directorio-por-ip-usando-htaccess/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://miguelcarmona.name/notas-y-recortes/restringir-acceso-a-ficheros-o-directorio-por-ip-usando-htaccess</feedburner:origLink></item>
		<item>
		<title>Apache: No space left on device: Couldn’t create accept lock</title>
		<link>http://feedproxy.google.com/~r/miguelcarmona/~3/tnYeqgcBSjQ/apache-no-space-left-on-device-couldnt-create-accept-lock</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/apache-no-space-left-on-device-couldnt-create-accept-lock#comments</comments>
		<pubDate>Fri, 22 Jun 2012 20:40:27 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=835</guid>
		<description><![CDATA[El servidor web Apache lo he visto fallar de dos formas distintas (persistentes a reinicios) por el mismo problema de semáforos. Vamos a ver cómo solucionarlo: En varias ocasiones he visto el siguiente error en el log: [emerg] (28)No space left on device: Couldn't create accept lock Pero también podemos encontrarnos que el server arranca y esta escuchando perono [...]]]></description>
				<content:encoded><![CDATA[<p style="margin: 10px 0px; padding: 0px; font-family: arial, sans; font-size: 14px; color: #222222; line-height: 25px;">El <strong style="margin: 0px; padding: 0px; font-size: 13px;">servidor web Apache</strong> lo he visto fallar de dos formas distintas (persistentes a reinicios) por el mismo <strong style="margin: 0px; padding: 0px; font-size: 13px;">problema de semáforos</strong>. Vamos a ver cómo solucionarlo:</p>
<p style="margin: 10px 0px; padding: 0px; font-family: arial, sans; font-size: 14px; color: #222222; line-height: 25px;">
<p style="margin: 10px 0px; padding: 0px; font-family: arial, sans; font-size: 14px; color: #222222; line-height: 25px;">En varias ocasiones he visto el <strong style="margin: 0px; padding: 0px; font-size: 13px;">siguiente error en el log</strong>:</p>
<pre style="margin-top: 0px; margin-bottom: 0px; padding: 0.4em; font-family: monospace, courier, 'Courier New'; font-size: 13px; border: 1px solid #3c78b5; background-color: #f0f0f0; overflow-x: scroll; overflow-y: visible; color: #222222; line-height: 25px;">[emerg] (28)No space left on device: Couldn't create accept lock</pre>
<p><span id="more-835"></span>
<p style="margin: 10px 0px; padding: 0px; font-family: arial, sans; font-size: 14px; color: #222222; line-height: 25px;">Pero también podemos encontrarnos que el server arranca y esta escuchando pero<strong style="margin: 0px; padding: 0px; font-size: 13px;">no nos devuelve nada</strong>:</p>
<pre style="margin-top: 0px; margin-bottom: 0px; padding: 0.4em; font-family: monospace, courier, 'Courier New'; font-size: 13px; border: 1px solid #3c78b5; background-color: #f0f0f0; overflow-x: scroll; overflow-y: visible; color: #222222; line-height: 25px;">$ curl -I localhost -H 'Host: ejemplo.com'
curl: (52) Empty reply from server</pre>
<p style="margin: 10px 0px; padding: 0px; font-family: arial, sans; font-size: 14px; color: #222222; line-height: 25px;">Y van apareciendo <strong style="margin: 0px; padding: 0px; font-size: 13px;">Segmentation faults</strong> en el log de error:</p>
<pre style="margin-top: 0px; margin-bottom: 0px; padding: 0.4em; font-family: monospace, courier, 'Courier New'; font-size: 13px; border: 1px solid #3c78b5; background-color: #f0f0f0; overflow-x: scroll; overflow-y: visible; color: #222222; line-height: 25px;">[notice] child pid 8033 exit signal Segmentation fault (11)</pre>
<p style="margin: 10px 0px; padding: 0px; font-family: arial, sans; font-size: 14px; color: #222222; line-height: 25px;">Causado por los semáforos que usa para comunicarse con los “<strong style="margin: 0px; padding: 0px; font-size: 13px;">apachitos</strong>” que no se han liberado:</p>
<pre style="margin-top: 0px; margin-bottom: 0px; padding: 0.4em; font-family: monospace, courier, 'Courier New'; font-size: 13px; border: 1px solid #3c78b5; background-color: #f0f0f0; overflow-x: scroll; overflow-y: visible; color: #222222; line-height: 25px;"># ipcs -s

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x00000000 2818048    apache    600        1         
0x00000000 15073281   apache    600        1         
0x00000000 15106050   apache    600        1         
0x00000000 425987     jprats    600        1         
(...)</pre>
<p style="margin: 10px 0px; padding: 0px; font-family: arial, sans; font-size: 14px; color: #222222; line-height: 25px;">Deberemos <strong style="margin: 0px; padding: 0px; font-size: 13px;">apagar el apache</strong> y limpiarlos con <strong style="margin: 0px; padding: 0px; font-size: 13px;">ipcrm</strong>:</p>
<pre style="margin-top: 0px; margin-bottom: 0px; padding: 0.4em; font-family: monospace, courier, 'Courier New'; font-size: 13px; border: 1px solid #3c78b5; background-color: #f0f0f0; overflow-x: scroll; overflow-y: visible; color: #222222; line-height: 25px;">for i in $(ipcs -s | awk ' $3 == "apache" {print $2}'); do ipcrm sem $i; done
resource(s) deleted</pre>
<p style="margin: 10px 0px; padding: 0px; font-family: arial, sans; font-size: 14px; color: #222222; line-height: 25px;">A continuación, ya lo podemos arrancar. Dicho comando es seguro ejecutarlo antes de arrancar el apache, por lo que lo podemos definir en el script de inicio y <strong style="margin: 0px; padding: 0px; font-size: 13px;">evitar así que surja el problema</strong> y tener que intervenir manualmente.</p>
<div></div>
<p><a href="http://systemadmin.es/2012/06/apache-no-space-left-on-device-couldnt-create-accept-lock">Apache: No space left on device: Couldn’t create accept lock | systemadmin.es</a>.</p>
<img src="http://feeds.feedburner.com/~r/miguelcarmona/~4/tnYeqgcBSjQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/apache-no-space-left-on-device-couldnt-create-accept-lock/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://miguelcarmona.name/notas-y-recortes/apache-no-space-left-on-device-couldnt-create-accept-lock</feedburner:origLink></item>
		<item>
		<title>Pausar procesos (aplicaciones)</title>
		<link>http://feedproxy.google.com/~r/miguelcarmona/~3/q_GHS_ZFwA4/pausar-procesos-aplicaciones</link>
		<comments>http://miguelcarmona.name/blog/pausar-procesos-aplicaciones#comments</comments>
		<pubDate>Fri, 22 Jun 2012 10:46:27 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=823</guid>
		<description><![CDATA[A veces, por algún motivo específico, necesitamos pausar alguna aplicación pero no cerrarla. Puede ser un caso el que hagamos una pausa en nuestra programación con nuestro flamante comedor de recursos como es eclipse o aptana y queramos ver un vídeo flash (otro glotón de recursos) con fluidez. Sería incómodo cerrar todo el IDE para [...]]]></description>
				<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-830" title="Matando procesos" src="http://miguelcarmona.name/wp-content/uploads/2012/06/linux-kill.png" alt="" width="256" height="256" />A veces, por algún motivo específico, necesitamos pausar alguna aplicación pero no cerrarla. Puede ser un caso el que hagamos una pausa en nuestra programación con nuestro flamante comedor de recursos como es eclipse o aptana y queramos ver un vídeo flash (otro glotón de recursos) con fluidez. Sería incómodo cerrar todo el IDE para luego volver a abrirlo. Pero el kernel Linux pensó en esos pequeños detalles y nos brinda ciertas posibilidades entre las que se encuentra <strong>detener, pausar o matar un proceso</strong> (o aplicación para los menos curtidos).</p>
<p><span id="more-823"></span>El caso es que podemos mandar la señal detener ( -19 ) a un determinado proceso para posteriormente poder iniciarlo de nuevo ( -18 ). Esta señal se puede mandar con el comando kill y el id de proceso o con el comando killall y el nombre de proceso. Como no me gusta dar tantas vueltas, me centraré en killall:</p>
<ul>
<li>Pausar proceso: killall -19 <em>&lt;nombre-proceso&gt;</em></li>
<li>Reanudar proceso pausado: killall -18 <em>&lt;nombre-proceso&gt;</em></li>
<li>Matar proceso: killall -9 <em>&lt;nombre-proceso&gt;</em></li>
</ul>
<p>De forma que si queremos pausar por ejemplo <strong>firefox</strong>, bastaría con un <em><strong>killall -19 firefox</strong></em> y un <em><strong>killall -18 firefox</strong></em> para reanudad este proceso. Hay que tener en cuenta que a partir de la versión 10 (creo recordar) de firefox los plugins (como flash) se ejecutan en un proceso diferente (plugin-container normalmente) de forma que aunque pausemos a firefox, no pausaremos el proceso flash lanzado por el mismo (tendríamos que lanzar  killall -19 plugin-container).</p>
<p>Es muy curioso lo bien que trabaja este sistema con los navegadores al igual que con flash por ejemplo. Se me ha dado más de un caso donde encontraba información realmente buena en una página llena de molestos banners flash lo cual hacía que el hecho de bajar la página se convirtiese en un grandioso reto. Bastaba con pausar dicho proceso (plugin-container), revisar el texto y una vez cerramos la pestaña, reanudarlo de nuevo. De hecho funciona bastante bien con grooveshark o con youtube de forma que puedes pausar flash y al reanudarlo, reanuda perfectamente la reproducción por donde lo teníamos.</p>
<p>Ni que decir queda que para aquellos que no sepan el nombre de proceso, bastaría con el comando ps y grep de forma que para firefox bastaría con:</p>

<div class="wp_codebox"><table><tr id="p82356"><td class="code" id="p823code56"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ps</span> <span style="color: #660033;">-A</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> fire</pre></td></tr></table></div>

<p>donde con ps -A decimos que muestre todos los procesos y con grep fire filtramos en la lista de todos los procesos aquellos que contengan fire.</p>
<p>Los usuarios de KDE tenemos nuestra aplicación de Actividad del sistema desde donde podemos mandar varios tipos de señales a un proceso. Para inicial la aplicación de Actividad del sistema bastaría con pulsar las teclas Crtl + esc</p>
<p><a href="http://miguelcarmona.name/wp-content/uploads/2012/06/kde-actividad-del-sistema.jpg"><img class="size-medium wp-image-828 aligncenter" title="KDE - Actividad del sistema" src="http://miguelcarmona.name/wp-content/uploads/2012/06/kde-actividad-del-sistema-300x107.jpg" alt="" width="300" height="107" /></a></p>
<p>Como vemos en esta aplicación tenemos más que de sobra para manejar dichos procesos. En la parte superior tenemos un campo para filtrar procesos. En este caso filtro por fire (lo cual me saca todo lo coincidente al igual que grep). Vemos que hay 2 procesos, dicho firefox y el proceso para lanzar plugins del mismo.</p>
<p>Al pulsar con botón derecho vemos que podemos mandar entre otras señales:</p>
<ul>
<li>Suspender (STOP) =&gt; pausar el proceso como hacíamos con killall -19 <em>&lt;nombre-proceso&gt;</em></li>
<li>Continuar (CONT) =&gt; reanudad el proceso como hacíamos con killall -18 <em>&lt;nombre-proceso&gt;</em></li>
<li>Matar (KILL) =&gt; matar el proceso como hacíamos con killall -9 <em>&lt;nombre-proceso&gt;</em></li>
</ul>
<p>Esta entrada viene inspirada por esta otra <a href="http://fedoreando.com/2012/06/09/usando-linux-like-a-boss-pausar-aplicaciones">http://fedoreando.com/2012/06/09/usando-linux-like-a-boss-pausar-aplicaciones</a> en la cual se explica el mismo proceso pero con el comando kill en vez de con killall. Viendo dicha entrada me vino a la mente que aunque es algo que use habitualmente desde hace algún tiempo, es muy probable que no se conozca en la mayoría de los casos por lo que al ver que era un tanto compleja para el público mayor, decidí exponerla de forma más sencilla.</p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/miguelcarmona/~4/q_GHS_ZFwA4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/blog/pausar-procesos-aplicaciones/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://miguelcarmona.name/blog/pausar-procesos-aplicaciones</feedburner:origLink></item>
	</channel>
</rss>
