<?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>LuAuF &#187; UNIX</title>
	<atom:link href="http://luauf.com/category/sistemas-operativos/unix/feed/" rel="self" type="application/rss+xml" />
	<link>http://luauf.com</link>
	<description></description>
	<lastBuildDate>Fri, 27 Jan 2012 01:44:47 +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>Ayuda memoria: loops infinitos en el shell</title>
		<link>http://luauf.com/2012/01/26/ayuda-memoria-loops-infinitos-en-el-shell/</link>
		<comments>http://luauf.com/2012/01/26/ayuda-memoria-loops-infinitos-en-el-shell/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 01:44:47 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Miscelaneas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[bucle]]></category>
		<category><![CDATA[infinito]]></category>
		<category><![CDATA[ksh]]></category>
		<category><![CDATA[LOOP]]></category>
		<category><![CDATA[sh]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1197</guid>
		<description><![CDATA[Este blog, me ha sido en más de una ocasión, mi ayuda memoria ideal. En otras tantas ocasiones, un link al mismo me permitió &#8220;ayudar al prójimo&#8221;, más bien, ahorrarme tiempo de utilización de cuerdas vocales y ahorrar al otro el fastidio de escucharme. Por tal motivo, y ante un requerimiento del primer tipo (como [...]]]></description>
			<content:encoded><![CDATA[<p>Este blog, me ha sido en más de una ocasión, mi ayuda memoria ideal. En otras tantas ocasiones, un link al mismo me permitió &#8220;ayudar al prójimo&#8221;, más bien, ahorrarme tiempo de utilización de cuerdas vocales y ahorrar al otro el fastidio de escucharme.</p>
<p>Por tal motivo, y ante un requerimiento del primer tipo (como &#8220;ayuda memoria&#8221;) quiero publicar algo que frecuentemente utilizo (o que cuando no es tan frecuente mi fragil memoria olvida):</p>
<p><strong>¿Cómo hacer un loop infinito en un intérprete de comandos (sh, ksh o similar)?</strong></p>
<p>Pongamos unas comillas al &#8220;infinito&#8221;, todo concluye al fin, nada puede escapar a un <strong>Ctrl+C</strong> o a un break (produce un abandono inmediato) dentro del bucle.</p>
<p><span id="more-1197"></span></p>
<pre>while :; do
  # Todo lo que quieras repetir infinitas veces
  echo "Hola Mundo"
  sleep 2
done</pre>
<p>No olvides el sleep, sino pasarán cosas muy rápido <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Otras opciones son utilizar las <em>palabras especiale</em>s <strong>true</strong> (indica que una condición en verdadera) y <strong>false</strong> (indica que una condición es falsa) de<strong> bash</strong>:</p>
<pre>while true; do
  ...
  ...
done</pre>
<p>O:</p>
<pre>until false; do
  ...
  ...</pre>
<pre>done</pre>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2012/01/26/ayuda-memoria-loops-infinitos-en-el-shell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hojas de referencia de comandos de UNIX, vi/vim, etc.</title>
		<link>http://luauf.com/2010/09/27/hojas-de-referencia-de-comandos-de-unix-vivim-etc/</link>
		<comments>http://luauf.com/2010/09/27/hojas-de-referencia-de-comandos-de-unix-vivim-etc/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 11:00:14 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Miscelaneas]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[cheat sheet]]></category>
		<category><![CDATA[Comandos]]></category>
		<category><![CDATA[hojas de referencia]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[rgb]]></category>
		<category><![CDATA[vi]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1178</guid>
		<description><![CDATA[Y un día volví&#8230; y como no podía ser de otra manera con las clásicas hojas de referencia, para imprimir y tener a nuestro lado en los escritorios. Como lo más destacado de este post, les dejo una cheatsheet de comandos de UNIX. Y como plus, algunas cheatsheet varias, de esas que encontrarás miles en [...]]]></description>
			<content:encoded><![CDATA[<p>Y un día volví&#8230; y como no podía ser de otra manera con las clásicas hojas de referencia, para imprimir y tener a nuestro lado en los escritorios.</p>
<p>Como lo más destacado de este post, les dejo una cheatsheet de comandos de UNIX.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/09/unix_commands_cheatsheet.jpg"><img class="aligncenter size-thumbnail wp-image-1179" title="unix_commands_cheatsheet" src="http://luauf.com/wp-content/uploads/2010/09/unix_commands_cheatsheet-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p style="text-align: center;">
<p><span id="more-1178"></span>Y como plus, algunas cheatsheet varias, de esas que encontrarás miles en Internet. Son una hoja de referencia de vi/vim (a menos que trabajes hace tiempo con vi o vim, esta hoja te será muy útil inclusive para saber como salir del editor <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ).</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/09/vi-vim-cheat-sheet.gif"><img class="aligncenter size-medium wp-image-1180" title="vi-vim-cheat-sheet" src="http://luauf.com/wp-content/uploads/2010/09/vi-vim-cheat-sheet-300x212.gif" alt="" width="300" height="212" /></a></p>
<p>Y además, otras dos hojas acerca de las equivalencias en colores RGB/Hexadecimal (para imprimir a colores) y otra de JQuery, estas últimas dos para webmasters por sobre todas las cosas.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/09/rgb-hex-cheat-sheet-v1.png"><img class="aligncenter size-medium wp-image-1181" title="rgb-hex-cheat-sheet-v1" src="http://luauf.com/wp-content/uploads/2010/09/rgb-hex-cheat-sheet-v1-220x300.png" alt="" width="220" height="300" /></a></p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/09/Jquery-Cheat-Sheet-1.2.png"><img class="aligncenter size-medium wp-image-1182" title="Jquery-Cheat-Sheet-1.2" src="http://luauf.com/wp-content/uploads/2010/09/Jquery-Cheat-Sheet-1.2-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Vía: <a href="http://www.pixelbeat.org/cmdline.html">PixelBeat</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/09/27/hojas-de-referencia-de-comandos-de-unix-vivim-etc/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>¿Como conocer mi IP privada y mi IP pública?</title>
		<link>http://luauf.com/2010/04/24/%c2%bfcomo-conocer-mi-ip-privada-y-mi-ip-publica/</link>
		<comments>http://luauf.com/2010/04/24/%c2%bfcomo-conocer-mi-ip-privada-y-mi-ip-publica/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 02:07:31 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cut]]></category>
		<category><![CDATA[ifconfig]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[ip privada]]></category>
		<category><![CDATA[ip publica]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[shell script]]></category>
		<category><![CDATA[Shell scripts]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1173</guid>
		<description><![CDATA[¿Como conocer mi IP privada y mi IP pública?, esa es la cuestión. Vamos a ver un pequeño script para lograr este propósito utilizando algunos comandos ya vistos y utilizados en la historia de este blog con varios distintos propósitos (ifconfig, grep, cut, awk, wget, sed) Primero, para obtener mi IP local (privada) puedo hacerlo [...]]]></description>
			<content:encoded><![CDATA[<p>¿Como conocer mi IP privada y mi IP pública?, esa es la cuestión.</p>
<p>Vamos a ver un pequeño script para lograr este propósito utilizando algunos comandos ya vistos y utilizados en la historia de este blog con varios distintos propósitos (<a href="http://luauf.com/2009/03/26/ejemplos-de-como-configurar-la-interfaz-de-red-mediante-ifconfig/">ifconfig</a>, <a href="http://luauf.com/2009/05/04/varios-ejemplos-de-uso-del-comando-grep/">grep</a>, <a href="http://luauf.com/2009/04/12/descargar-videos-de-youtube-de-la-forma-mas-facil/">cut</a>, <a href="http://luauf.com/2008/04/02/top-5-de-los-comandos-mas-utilizados/">awk</a>, <a href="http://luauf.com/2008/04/15/descargar-un-sitio-web-completo/">wget</a>, <a href="http://luauf.com/2010/02/22/reemplazar-cadenas-en-archivos-con-sed/">sed</a>)</p>
<p align="center">
<img class="aligncenter size-full wp-image-1174" title="terminal" src="http://luauf.com/wp-content/uploads/2010/04/terminal.png" alt="" width="128" height="128" />
</p>
<p><span id="more-1173"></span></p>
<p>Primero, para obtener mi IP local (privada) puedo hacerlo mediante <a href="http://luauf.com/2009/03/26/ejemplos-de-como-configurar-la-interfaz-de-red-mediante-ifconfig/">ifconfig</a>, ahora, con la ayuda de <a href="http://luauf.com/2009/05/04/varios-ejemplos-de-uso-del-comando-grep/">grep</a>, <a href="http://luauf.com/2008/04/02/top-5-de-los-comandos-mas-utilizados/">awk</a> y <a href="http://luauf.com/2009/04/12/descargar-videos-de-youtube-de-la-forma-mas-facil/">cut</a> quitaré todo lo que sobra para obtener <strong>solo</strong> la IP.</p>
<div class="syntax_hilite">
<div id="code-4">
<div class="code">ifconfig | grep <span style="color:#CC0000;">'inet:'</span>| grep -v <span style="color:#CC0000;">'127.0.0.1'</span> | cut -d: -f2 |&nbsp; awk <span style="color:#CC0000;">'{print $1}'</span></div>
</div>
</div>
<p></p>
<p>Segundo, con la ayuda de un sitio web  y <a href="http://luauf.com/2008/04/15/descargar-un-sitio-web-completo/">wget</a> obtendré mi IP pública, IP otorgada por el servidor de Internet al conectarme, por lo general es dinámica (a menos que paguemos a nuestro ISP por una IP fija). Al resultado obtenido con la ayuda de <a href="http://luauf.com/2010/02/22/reemplazar-cadenas-en-archivos-con-sed/">sed</a> le dejaré tan <strong>solo</strong> la IP.</p>
<div class="syntax_hilite">
<div id="code-5">
<div class="code">wget -q -O - checkip.<span style="">dyndns</span>.<span style="">org</span>|sed -e <span style="color:#CC0000;">'s/.*Current IP Address://'</span> -e <span style="color:#CC0000;">'s/&lt;.*$//'</span></div>
</div>
</div>
<p></p>
<p>Finalmente, el script:</p>
<div class="syntax_hilite">
<div id="code-6">
<div class="code">#!/bin/sh<br />
echo <span style="color:#CC0000;">"IP privada: "</span>$<span style="color:#006600; font-weight:bold;">&#40;</span>ifconfig | grep <span style="color:#CC0000;">'inet:'</span>| grep -v <span style="color:#CC0000;">'127.0.0.1'</span> | cut -d: -f2 | awk <span style="color:#CC0000;">'{print $1}'</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
echo <span style="color:#CC0000;">"IP pública: "</span>$<span style="color:#006600; font-weight:bold;">&#40;</span>wget -q -O - checkip.<span style="">dyndns</span>.<span style="">org</span>|sed -e <span style="color:#CC0000;">'s/.*Current IP Address://'</span> -e <span style="color:#CC0000;">'s/&lt;.*$//'</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div>
</div>
<p></p>
<p>Vía: <a href="http://belinuxmyfriend.blogspot.com/2010/04/saber-la-ip-de-red-y-publica-con-un.html">Be Linux my Friend</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/04/24/%c2%bfcomo-conocer-mi-ip-privada-y-mi-ip-publica/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Enviar tweets desde la terminal</title>
		<link>http://luauf.com/2010/04/19/enviar-tweets-desde-la-terminal/</link>
		<comments>http://luauf.com/2010/04/19/enviar-tweets-desde-la-terminal/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 11:00:30 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Miscelaneas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Consola]]></category>
		<category><![CDATA[cURL]]></category>
		<category><![CDATA[Terminal]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[webservice]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1170</guid>
		<description><![CDATA[Casi dos meses después de la última publicación, es necesario dar "señales de vida" del blog, que nunca fue discontinuado... pero que se mantuvo en "pausa" por falta de "inspiración"   Y para volver, que mejor que con un clásico: hacer "cosas" desde la terminal (hoy estoy muy "comillero") A las publicaciones de tiempo atrás [...]]]></description>
			<content:encoded><![CDATA[<p>Casi dos meses después de la última publicación, es necesario dar "señales de vida" del blog, que nunca fue discontinuado... pero que se mantuvo en "pausa" por falta de "inspiración" <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />   Y para volver, que mejor que con un clásico: hacer "cosas" desde la terminal (hoy estoy muy "comillero")</p>
<p>A las publicaciones de tiempo atrás de <a href="http://luauf.com/2009/10/27/centerim-mensajeria-instantanea-para-hombres/">Center IM</a>, <a href="http://luauf.com/2008/07/06/escuchando-musica-en-modo-texto-con-mp3blaster/">mp3blaster</a> y <a href="http://luauf.com/2008/06/20/navegando-en-modo-texto-con-lynx/">Lynx</a> hoy aprenderemos a enviar tweets desde la terminal utilizando cURL-</p>
<p align="center">
<img src="http://luauf.com/wp-content/uploads/2010/04/twitter.jpg" alt="" title="twitter" width="160" height="44" class="aligncenter size-full wp-image-1171" />
</p>
<p>cURL es una herramienta, que muy probablemente tengas instalado en tu GNU/Linux o BSD, que nos permite enviar a una datos a una URL utilizando los protocolos HTTP, HTTPS, FTP, FTPS, etc.</p>
<p><span id="more-1170"></span>Bien, enviar un tweet desde la terminal es realmente muy sencillo, basta copiar la siguiente línea:</p>
<p><codeline>curl -u usuario:password -d status="Mi primer tweet desde la terminal" http://twitter.com/statuses/update.xml<br />
</codeline></p>
<p>Donde:
<ul>
<li><strong>Usuario</strong>: es tu nombre de usuario</li>
<li><strong>Contraseña</strong>: es tu clave de acceso</li>
<li><strong>status</strong>: es el texto del tweet</li>
<li><a href="http://twitter.com/statuses/update.xml">http://twitter.com/statuses/update.xml</a>: es la URL de la <a href="http://apiwiki.twitter.com/Twitter-API-Documentation">API que ofrece Twitter</a> para el envio y recepción de datos. Verás que los tweets escritos de esta forma dirán debajo "hace 'tanto tiempo' via API"</li>
</ul>
<p>Algo que obviamente puede no gustarnos de esto es escribir, a la vista de todos, la contraseña por terminal y lo que puede ser peor, que quede en el histórico. Para lo segundo, podemos borrar el <a href="http://luauf.com/2008/08/19/utilizar-el-bash-history-a-fondo/">history</a> (history -c)</p>
<p>That's all folks.</p>
<p>Vía: <a href="http://120linux.com/twitter-desde-el-terminal/">120% Linux</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/04/19/enviar-tweets-desde-la-terminal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Reemplazar cadenas en archivos con sed</title>
		<link>http://luauf.com/2010/03/01/reemplazar-cadenas-en-archivos-con-sed/</link>
		<comments>http://luauf.com/2010/03/01/reemplazar-cadenas-en-archivos-con-sed/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 11:00:28 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[editor de texto]]></category>
		<category><![CDATA[filtrado de textos]]></category>
		<category><![CDATA[flujo]]></category>
		<category><![CDATA[reemplazar texto]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[stream]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[transformacion de textos]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1165</guid>
		<description><![CDATA[sed es un "editor de textos" para el filtrado y la transformación de textos. Escribo "editor de texto" entre comillas pues en realidad sed no trabaja con cadenas de caracteres sino con "flujos", la diferencia con los editores de textos clásicos (interactivos) es que sed acepta como entrada estándar un archivo o cualquier otro stream; [...]]]></description>
			<content:encoded><![CDATA[<p><strong>sed</strong> es un "editor de textos" para el filtrado y la transformación de textos. Escribo "editor de texto" entre comillas pues en realidad sed no trabaja con cadenas de caracteres sino con "flujos", la diferencia con los editores de textos clásicos (interactivos) es que <strong>sed</strong> acepta como entrada estándar un archivo o cualquier otro stream; resultado que es procesado y devuelto a la salida estándar (vea más acerca de stdin, stdout y stderr <a href="http://luauf.com/2008/06/02/el-shell-de-unix/">aquí</a>)</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/02/seda.gif"><img class="aligncenter size-thumbnail wp-image-1169" title="seda" src="http://luauf.com/wp-content/uploads/2010/02/seda-150x150.gif" alt="" width="150" height="150" /></a></p>
<p><span id="more-1165"></span>Veamos un ejemplo muy sencillito:</p>
<div class="syntax_hilite">
<div id="code-11">
<div class="code">$ cat saludo.<span style="">txt</span><br />
hola<br />
maldito<br />
mundo</div>
</div>
</div>
<p></p>
<div class="syntax_hilite">
<div id="code-12">
<div class="code">$ sed <span style="color:#CC0000;">'2d'</span> saludo.<span style="">txt</span><br />
hola<br />
mundo</div>
</div>
</div>
<p></p>
<p>No hace mucha explicación ¿no?, el <strong>comando d</strong> recibe el número de línea a eliminar. Esto es muy sencillo y es el ejemplo más básico del uso de sed; simplemente para que te vayas amigando.</p>
<p>Ahora veamos un ejemplo similar, pero reemplazando palabras:</p>
<div class="syntax_hilite">
<div id="code-13">
<div class="code">$ sed <span style="color:#CC0000;">'s/maldito/bendito/'</span> saludo.<span style="">txt</span><br />
hola<br />
bendito<br />
mundo</div>
</div>
</div>
<p></p>
<p>Ahora usamos el<strong> comando s</strong>, éste recibe una cadena a buscar y una cadena por la que se reemplazarán las coincidencias en todos sus archivos.</p>
<p>Finalmente, para cerrar esta breve introducción a sed veamos un ejemplito propuesto en <a href="http://felinfo.blogspot.com/2010/02/reemplazar-texto-en-varios-archivos.html">Feelinfo</a> ¿Cómo reemplazar textos en varios archivos en Linux?:</p>
<p>Sabiendo que "sed -i '/s/palabra-vieja/palabra-nueva/g' *.txt" reemplaza todas las ocurrencias de la palabra vieja por palabra nueva en todos los archivos:</p>
<div class="syntax_hilite">
<div id="code-14">
<div class="code">sed -i <span style="color:#CC0000;">'s/Pepe/Jose/g'</span> *.<span style="">txt</span><br />
sed -i <span style="color:#CC0000;">'s/Manolo/Manuel/g'</span> *.<span style="">txt</span><br />
sed -i <span style="color:#CC0000;">'s/Nacho/Ignacio/g'</span> *.<span style="">txt</span><br />
sed -i <span style="color:#CC0000;">'s/Inma/Inmaculada/g'</span> *.<span style="">txt</span></div>
</div>
</div>
<p></p>
<p>Bien, esto es todo por ahora. Una observación para mi como para ustedes, no nos creamos que <strong>sed</strong> se limita a solo esto... manipulando flujos podemos dominar el mundo <img src='http://luauf.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  (¿no me crees? mira este rudimentario <strong>tetris</strong> escrito con <strong>sed</strong>, <a href="http://uuner.doslash.org/forfun/sedtris.sed">sedtris.sed</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/03/01/reemplazar-cadenas-en-archivos-con-sed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ver estado de archivos y sistema de archivos con el comando stat</title>
		<link>http://luauf.com/2009/08/17/ver-estado-de-archivos-y-sistema-de-archivos-con-el-comando-stat/</link>
		<comments>http://luauf.com/2009/08/17/ver-estado-de-archivos-y-sistema-de-archivos-con-el-comando-stat/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 19:30:30 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[BSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[Archivos]]></category>
		<category><![CDATA[estadistica]]></category>
		<category><![CDATA[estado]]></category>
		<category><![CDATA[files]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[stat]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1084</guid>
		<description><![CDATA[ls -l nos da bastante información acerca de nuestros archivos y/o directorios. Sin embargo, cuando esa información no es suficiente y queremos más, de seguro que el comando stat nos ayudará. Como debería ser sabido, todo en Unix se trata como archivo (archivos propiamente dichos, directorios, dispositivos, etc). El comando stat nos muestra el estado [...]]]></description>
			<content:encoded><![CDATA[<p><strong>ls -l</strong> nos da bastante información acerca de nuestros archivos y/o directorios. Sin embargo, cuando esa información no es suficiente y queremos más, de seguro que el comando <strong>stat</strong> nos ayudará.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/08/ls_l.png"><img class="alignnone size-medium wp-image-1085" title="ls_l" src="http://luauf.com/wp-content/uploads/2009/08/ls_l-277x300.png" alt="ls_l" width="277" height="300" /></a></p>
<p>Como debería ser sabido, todo en Unix se trata como archivo (archivos propiamente dichos, directorios, dispositivos, etc). El comando stat nos muestra el estado de archivos y del sistema de archivos tal como se podrá ver en este artículo.</p>
<p><span id="more-1084"></span></p>
<p><strong>Estadísticas de un archivo:</strong></p>
<p><codeline>stat passwd</codeline></p>
<div class="syntax_hilite">
<div id="code-18">
<div class="code">root@hardy:/etc# stat passwd<br />
File: «passwd»<br />
Size: <span style="color:#800000;">1670</span>          Blocks: <span style="color:#800000;">8</span>          IO Block: <span style="color:#800000;">4096</span>   archivo regular<br />
Device: 802h/2050d    Inode: <span style="color:#800000;">869977</span>      Links: <span style="color:#800000;">1</span><br />
Access: <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">0644</span>/-rw-r--r--<span style="color:#006600; font-weight:bold;">&#41;</span>  Uid: <span style="color:#006600; font-weight:bold;">&#40;</span>    <span style="color:#800000;">0</span>/    root<span style="color:#006600; font-weight:bold;">&#41;</span>   Gid: <span style="color:#006600; font-weight:bold;">&#40;</span>    <span style="color:#800000;">0</span>/    root<span style="color:#006600; font-weight:bold;">&#41;</span><br />
Access: <span style="color:#800000;">2009</span>-<span style="color:#800000;">06</span>-<span style="color:#800000;">03</span> <span style="color:#800000;">00</span>:<span style="color:#800000;">11</span>:<span style="color:#800000;">03</span>.<span style="color:#800000;">000000000</span> -<span style="color:#800000;">0300</span><br />
Modify: <span style="color:#800000;">2009</span>-<span style="color:#800000;">06</span>-<span style="color:#800000;">03</span> <span style="color:#800000;">00</span>:<span style="color:#800000;">10</span>:<span style="color:#800000;">14</span>.<span style="color:#800000;">000000000</span> -<span style="color:#800000;">0300</span><br />
Change: <span style="color:#800000;">2009</span>-<span style="color:#800000;">06</span>-<span style="color:#800000;">03</span> <span style="color:#800000;">00</span>:<span style="color:#800000;">10</span>:<span style="color:#800000;">14</span>.<span style="color:#800000;">000000000</span> -<span style="color:#800000;">0300</span></div>
</div>
</div>
<p></p>
<p>Donde entre otros datos se puede reconocer el tipo de archivo, la cantidad de links al mismo, los permisos de acceso en octal y con los caracteres rwx, el usuario y el grupo (id / nombre). Además de las fechas de acceso, modificación y cambio.</p>
<p><strong>Estadísticas de un directorio:</strong></p>
<p><codeline>stat /etc</codeline></p>
<div class="syntax_hilite">
<div id="code-19">
<div class="code">root@hardy:/etc# stat /etc/<br />
File: «/etc/»<br />
Size: <span style="color:#800000;">12288</span>         Blocks: <span style="color:#800000;">24</span>         IO Block: <span style="color:#800000;">4096</span>   directorio<br />
Device: 802h/2050d    Inode: <span style="color:#800000;">868353</span>      Links: <span style="color:#800000;">148</span><br />
Access: <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">0755</span>/drwxr-xr-x<span style="color:#006600; font-weight:bold;">&#41;</span>  Uid: <span style="color:#006600; font-weight:bold;">&#40;</span>    <span style="color:#800000;">0</span>/    root<span style="color:#006600; font-weight:bold;">&#41;</span>   Gid: <span style="color:#006600; font-weight:bold;">&#40;</span>    <span style="color:#800000;">0</span>/    root<span style="color:#006600; font-weight:bold;">&#41;</span><br />
Access: <span style="color:#800000;">2009</span>-<span style="color:#800000;">08</span>-<span style="color:#800000;">17</span> <span style="color:#800000;">13</span>:<span style="color:#800000;">09</span>:<span style="color:#800000;">49</span>.<span style="color:#800000;">000000000</span> -<span style="color:#800000;">0300</span><br />
Modify: <span style="color:#800000;">2009</span>-<span style="color:#800000;">08</span>-<span style="color:#800000;">17</span> <span style="color:#800000;">12</span>:<span style="color:#800000;">15</span>:<span style="color:#800000;">01</span>.<span style="color:#800000;">000000000</span> -<span style="color:#800000;">0300</span><br />
Change: <span style="color:#800000;">2009</span>-<span style="color:#800000;">08</span>-<span style="color:#800000;">17</span> <span style="color:#800000;">12</span>:<span style="color:#800000;">15</span>:<span style="color:#800000;">01</span>.<span style="color:#800000;">000000000</span> -<span style="color:#800000;">0300</span></div>
</div>
</div>
<p></p>
<p><strong>Estadísticas del sistema de archivos:</strong></p>
<p><codeline>stat -f /</codeline></p>
<div class="syntax_hilite">
<div id="code-20">
<div class="code">root@hardy:/etc# stat -f /<br />
File: <span style="color:#CC0000;">"/"</span><br />
ID: 94e56a4d8792941f Namelen: <span style="color:#800000;">255</span>     Type: ext2/ext3<br />
Block size: <span style="color:#800000;">4096</span>       Fundamental block size: <span style="color:#800000;">4096</span><br />
Blocks: Total: <span style="color:#800000;">4225652</span>    Free: <span style="color:#800000;">3165630</span>    Available: <span style="color:#800000;">2952669</span><br />
Inodes: Total: <span style="color:#800000;">1064960</span>    Free: <span style="color:#800000;">864190</span></div>
</div>
</div>
<p></p>
<p>Vía: <a href="http://www.thegeekstuff.com/2009/07/unix-stat-command-how-to-identify-file-attributes/">The Geek Stuff</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/08/17/ver-estado-de-archivos-y-sistema-de-archivos-con-el-comando-stat/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Se acerca el &#8220;viejazo&#8221; (o segunda adolescencia) para UNIX</title>
		<link>http://luauf.com/2009/06/22/se-acerca-el-viejazo-o-segunda-adolescencia-para-unix/</link>
		<comments>http://luauf.com/2009/06/22/se-acerca-el-viejazo-o-segunda-adolescencia-para-unix/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 09:00:51 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[40]]></category>
		<category><![CDATA[adolescencia]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[cumpleaños]]></category>
		<category><![CDATA[historia]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[viejazo]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1060</guid>
		<description><![CDATA[Se dice que el viejazo, fenómeno ocurrido en personas del sexo masculino, también llamado segunda adolescencia se produce a las cuatro décadas. UNIX es pronto a cumplir esa edad, aproximadamente por el mes de agosto, sin embargo no creo que se trate de una segunda adolescencia, pues Unix nunca envejeció, al contrario, cada día está [...]]]></description>
			<content:encoded><![CDATA[<p>Se dice que el viejazo, fenómeno ocurrido en personas del sexo masculino, también llamado segunda adolescencia se produce a las cuatro décadas. UNIX es pronto a cumplir esa edad, aproximadamente por el mes de agosto, sin embargo no creo que se trate de una segunda adolescencia, pues Unix nunca envejeció, al contrario, cada día está más joven.</p>
<p>La historia cuenta que allá por 1969, días después de la llegada del hombre a la luna (si es alguien cree en ese discutible suceso) un programador llamdo <strong>Ken Thomson</strong> de Bell Laboratories (subsidiaria de AT&amp;T) aprovechando la susencia de su mujer e hijo por vacaciones (que casualidad ¿no?) escribió la primera versión de Unix en un lenguaje ensamblador.</p>
<p>En marzo del mismo año, los mismos laboratorios habían renunciado a seguir con un ambicioso proyecto de sistema de tiempo compartido llamado Multics (Multiplexed Information and Computer Service), del que Thomson aplicó algunos principios y como broma al proyecto anterior denominó Unics (reemplazando la primer paralabra por Thomson Uniplexed) a su proyecto.</p>
<p>Como AT&amp;T Bell vió que el proyecto tenía futuro decidió apostar al proyecto e incorporar a varios programadores de los cuales se destaca<strong> Brian Kernighan</strong>. Por motivos desconocidos UNICS pasa llamarse UNIX y va tomando forma adquiriendo nuvas funcionalidades y aplicaciones como cat, chmod, chown, cp, ls, mv, who, wc, etc. Si bien el desarrollo era rápido, el principal cuello de botella estaba en Ensamblador, es así que aparece <strong>Dennis Ritchie </strong>quien con colaboración de Kernighan escribe un lenguaje de más alto nivel, añadiendo nuevas funcionalidades y más abstracción que lo que ofrecía el lenguaje B. El éxito fue rotundo y para 1973 todo UNIX ya estaba re-escrito en C.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/06/unix.gif"><img class="alignnone size-medium wp-image-1063" title="unix" src="http://luauf.com/wp-content/uploads/2009/06/unix-286x300.gif" alt="unix" width="286" height="300" /></a></p>
<p><span id="more-1060"></span>A todo esto, el departamento de defensa estadounidense empezó a financiar su red ARPANET y con ella la pila de protocolos TCP/IP. En 1974 la Universidad de California en Berkeley recibió una copia de los fuentes de UNIX y allí el desarrolló comenzó a dispararse pues se encargaron de implementar el protocolo TCP/IP.  Con esto, la conectividad en red (gran problema hasta el momento para Unix) quedó totalmente resuelto gracias a uso de sockets para las comunicaciones. Este punto fue el boom definitivo de Unix que se empieza a hacer presente en todos los servidores de red o computadoras del mundo.</p>
<p><strong>Bill Joy</strong>, un recién graduado en Berkeley creó la primer versión de BSD (Berkeley Software Distribution) basada en Unix V6 de Bell Labs. Es aquí donde empieza una gran disputa legal entre Berkeley y AT&amp;T, pues para distribuir el software (BSD) había que contar con licencias de AT&amp;T. Pero llegó a un punto que la universisas había cambiado tantos aspectos internos del SO que la diferencia entre ambos Unix era enorme. Este conflicto duró  hasta 1994, cuando Novell compró en 1992 los derechos del Unix AT&amp;T y acordó con la universidad que consistía en eliminar de BSD todo el código residual del Unix de AT&amp;T.</p>
<p>En 1982 Bill Joy fue cofundador de Sun Microsystems, empresa que se basó en Sun OS para la venta de estaciones de trabajo y servidores. En 1983 aparece la primera versión de Unix System V, el cual sería base para los sistemas AIX de IBM y HP-UX de Heweltt Packard.</p>
<p>En medio de la batalla legal (década del 80), Bill Gates empieza a comercializar MS-DOS, un sistema mucho más pobre que Unix, pero con la particularidad en que podía correr en cualquier computadora personal (PC), de ahí nace la historia del imperio de Microsoft, del cual no hablaremos en esta publicación.</p>
<p>También, a finales de esa década un estudiante finlandés llamado Linus Torvalds decide crear su propio SO basado en Minix (SO creado como recurso pedagógico por el profesor <strong>Andrew Tanenbamum</strong>). Apenas Linus tiene un prototipo funcional escribe un mensaje en Usenet y <a href="http://luauf.com/2008/12/04/asi-empezaba-la-historia-de-linux/comment-page-1/">así empezaba la histora de Linux</a>)</p>
<p>Volviendo el tiempo atrás, en 1983 Richard Stallman se desvincula del MIT y comienza un movimiento que se transformó en marco de referencia moral, político y legal, el proyecto GNU. No solo a filosofar se dedicaba la comunidad GNU, al contrario, escribía cientos y cientos de aplicaciones (todas de ellas libres). GNU se tardó en escribir su SO (GNU Hurd), más que nada porque fue dejado para lo último dadas las ambiciones del proyecto que proponía una arquitectura microkernel por sobre las clásicas monolíticas.</p>
<p>El retraso de Hurd, la llegada de Linux y el montón de aplicaciones escritas por GNU llevó a una aparición casi anárquica GNU/Linux, que no era otra cosa que el kernel escrito por Linux Torvalds acompañado por un sin-numero de aplicaciones GNU. La popularidad de GNU desde entonces provocó en cierta medida el decrecimiento de la cuota de mercado de Unix, y a la vez llevó un "Clon de Unix" a los escritorios de las computadoras personales, hasta entonces monopolizado por empresas de software propietario.</p>
<p>Como bonus a la impresionante historia que acabamos de leer, le agregamos a los <a href="http://luauf.com/2008/03/21/timelines/">timelines</a> publicados hace bastante (propiamente al timeline de UNIX) el siguiente diagrama (algo más simplificado) pero con el interesante agregado del tipo de distribución de su código fuente:</p>
<ul>
<li>Open Source</li>
<li>Mixed/Shared Source</li>
<li>Closed Source</li>
</ul>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/06/unix_history-simple.png"><img class="alignnone size-medium wp-image-1061" title="unix_history-simple" src="http://luauf.com/wp-content/uploads/2009/06/unix_history-simple-300x190.png" alt="unix_history-simple" width="300" height="190" /></a></p>
<p>Finalmente, una versión muy simplificada del mismo arbol de genealógico:</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/06/unix-images-unix-histoire.gif"><img class="alignnone size-medium wp-image-1062" title="unix-images-unix-histoire" src="http://luauf.com/wp-content/uploads/2009/06/unix-images-unix-histoire-300x150.gif" alt="unix-images-unix-histoire" width="300" height="150" /></a></p>
<p>Vía: <a href="http://www.muylinux.com/2009/06/04/unix-cumple-40-anos/">MuyLinux</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/06/22/se-acerca-el-viejazo-o-segunda-adolescencia-para-unix/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Backups full e incremental con bash</title>
		<link>http://luauf.com/2009/05/22/backups-full-e-incremental-con-bash/</link>
		<comments>http://luauf.com/2009/05/22/backups-full-e-incremental-con-bash/#comments</comments>
		<pubDate>Fri, 22 May 2009 09:00:09 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[full]]></category>
		<category><![CDATA[incremental]]></category>
		<category><![CDATA[Repositorio]]></category>
		<category><![CDATA[sh]]></category>
		<category><![CDATA[shell script]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1016</guid>
		<description><![CDATA[Requisito de un tema laboral fue crear de urgencia unos backups full e incrementales de un repositorio. Como siempre estos requerimientos se requieren para ayer y son para salvar cabezas cuando las papas queman. Debido al gran volumen de datos, como estrategia de backups se decidió realizar un backup full  mensualmente y un backup incremental [...]]]></description>
			<content:encoded><![CDATA[<p>Requisito de un tema laboral fue crear de urgencia unos backups full e incrementales de un repositorio. Como siempre estos requerimientos se requieren para ayer y son para salvar cabezas cuando las papas queman.</p>
<p>Debido al gran volumen de datos, como estrategia de backups se decidió realizar un backup full  mensualmente y un backup incremental diario.</p>
<p>A tal fin, se escribieron dos scripts, el primero de ellos, que dado un directorio crea un tar comprimido del mismo. Y el segundo, el que se ejecuta diariamente, que se encarga de verificar la fecha de modificación del último backup full del directorio y a partir de la misma crea un tar comprimido con los cambios desde entonces.</p>
<p>Nada de otro mundo, dos scripts sencillos, pero que se dejan a vuestra disposición por si las moscas.</p>
<p><span id="more-1016"></span><br />
<strong>Backup Full:</strong></p>
<div class="syntax_hilite">
<div id="code-23">
<div class="code">#!/bin/bash</p>
<p>TAR=$<span style="color:#006600; font-weight:bold;">&#40;</span>which tar<span style="color:#006600; font-weight:bold;">&#41;</span><br />
TEE=$<span style="color:#006600; font-weight:bold;">&#40;</span>which tee<span style="color:#006600; font-weight:bold;">&#41;</span></p>
<p>ARGS=<span style="color:#800000;">2</span></p>
<p>if <span style="color:#006600; font-weight:bold;">&#91;</span> $# -ne $ARGS <span style="color:#006600; font-weight:bold;">&#93;</span><br />
then<br />
&nbsp; &nbsp; &nbsp; &nbsp; echo <span style="color:#CC0000;">"Usage: "</span>$0<span style="color:#CC0000;">" file dir"</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; echo <span style="color:#CC0000;">"&nbsp; file: backup file name"</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; echo <span style="color:#CC0000;">"&nbsp; dir:&nbsp; path to backup"</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; exit<br />
fi</p>
<p>APP=$<span style="color:#800000;">0</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #app name<br />
FILE=$1<span style="color:#CC0000;">"_full.tgz"</span>&nbsp; &nbsp; &nbsp; #backup file<br />
FILE_OLD=$FILE<span style="color:#CC0000;">"~"</span>&nbsp; &nbsp; &nbsp; &nbsp;#file backuped before remove<br />
DIR=$<span style="color:#800000;">2</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #path</p>
<p>LOG_DIR=/var/log<br />
LOG_FILE=$LOG_DIR<span style="color:#CC0000;">"/"</span>$<span style="color:#006600; font-weight:bold;">&#123;</span>APP##*\/<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#CC0000;">".log"</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#remuevo de APP&nbsp; lo que este antes de la ultima /</p>
<p>TODAY=`date <span style="color:#CC0000;">"+%Y-%m-%d %a"</span>`<br />
echo $TODAY<span style="color:#CC0000;">" *** Backup full *** "</span> | $TEE -a $LOG_FILE</p>
<p>if <span style="color:#006600; font-weight:bold;">&#91;</span> ! -d $DIR <span style="color:#006600; font-weight:bold;">&#93;</span><br />
then<br />
&nbsp; &nbsp; &nbsp; &nbsp; echo <span style="color:#CC0000;">"ERROR: path "</span>$DIR<span style="color:#CC0000;">" not exist"</span> | $TEE -a $LOG_FILE<br />
&nbsp; &nbsp; &nbsp; &nbsp; exit<br />
fi</p>
<p>#Realizo backup del backup<br />
echo <span style="color:#CC0000;">"Rotating files..."</span>&nbsp; | $TEE -a $LOG_FILE</p>
<p>if <span style="color:#006600; font-weight:bold;">&#91;</span> -f $FILE <span style="color:#006600; font-weight:bold;">&#93;</span>;<br />
then<br />
&nbsp; &nbsp; &nbsp; &nbsp; #cp -v $FILE $FILE_OLD | $TEE -a $LOG_FILE<br />
&nbsp; &nbsp; &nbsp; &nbsp; rm -v $FILE | $TEE -a $LOG_FILE<br />
fi</p>
<p>echo <span style="color:#CC0000;">"Making backup..."</span> | $TEE -a $LOG_FILE<br />
#Realizo el backup<br />
$TAR -chzf $FILE $DIR | $TEE -a $LOG_FILE</p>
<p>if <span style="color:#006600; font-weight:bold;">&#91;</span> $? == <span style="color:#800000;">0</span> <span style="color:#006600; font-weight:bold;">&#93;</span><br />
then<br />
&nbsp; &nbsp; &nbsp; &nbsp; echo <span style="color:#CC0000;">"Backup successfull!"</span><br />
else<br />
&nbsp; &nbsp; &nbsp; &nbsp; echo <span style="color:#CC0000;">"ERROR: error making backup <img src='http://luauf.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> "</span><br />
fi</div>
</div>
</div>
<p></p>
<p><strong>Backup Incremental:</strong></p>
<div class="syntax_hilite">
<div id="code-24">
<div class="code">#!/bin/sh<br />
TAR=$<span style="color:#006600; font-weight:bold;">&#40;</span>which tar<span style="color:#006600; font-weight:bold;">&#41;</span><br />
TEE=$<span style="color:#006600; font-weight:bold;">&#40;</span>which tee<span style="color:#006600; font-weight:bold;">&#41;</span></p>
<p>ARGS=<span style="color:#800000;">2</span></p>
<p>
if <span style="color:#006600; font-weight:bold;">&#91;</span> $# -ne $ARGS <span style="color:#006600; font-weight:bold;">&#93;</span></p>
<p>then<br />
&nbsp; &nbsp; &nbsp; &nbsp; echo <span style="color:#CC0000;">"Usage: "</span>$0<span style="color:#CC0000;">" file dir"</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; echo <span style="color:#CC0000;">"&nbsp; file: backup file name"</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; echo <span style="color:#CC0000;">"&nbsp; dir:&nbsp; path to backup"</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; exit<br />
fi</p>
<p>
APP=$<span style="color:#800000;">0</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #app name<br />
FILE=$1<span style="color:#CC0000;">"_incremental.tgz"</span>&nbsp; &nbsp; &nbsp; &nbsp;#backup file<br />
FILE_FULL=$1<span style="color:#CC0000;">"_full.tgz"</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#backup full<br />
FILE_OLD=$FILE<span style="color:#CC0000;">"~"</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#file backuped before remove<br />
DIR=$<span style="color:#800000;">2</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #path</p>
<p>LOG_DIR=/var/log<br />
LOG_FILE=$LOG_DIR<span style="color:#CC0000;">"/"</span>$<span style="color:#006600; font-weight:bold;">&#123;</span>APP##*\/<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#CC0000;">".log"</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#remuevo de APP&nbsp; lo que este antes de la ultima /</p>
<p>TODAY=`date <span style="color:#CC0000;">"+%Y-%m-%d %a"</span>`<br />
echo $TODAY<span style="color:#CC0000;">" *** Backup incremental ***"</span> | $TEE -a $LOG_FILE</p>
<p>if <span style="color:#006600; font-weight:bold;">&#91;</span> ! -d $DIR <span style="color:#006600; font-weight:bold;">&#93;</span><br />
then<br />
&nbsp; &nbsp; &nbsp; &nbsp; echo <span style="color:#CC0000;">"ERROR: path "</span>$DIR<span style="color:#CC0000;">" not exist"</span> | $TEE -a $LOG_FILE<br />
&nbsp; &nbsp; &nbsp; &nbsp; exit<br />
fi</p>
<p># Reviso si existe el backup full<br />
if <span style="color:#006600; font-weight:bold;">&#91;</span> ! -f $FILE_FULL <span style="color:#006600; font-weight:bold;">&#93;</span>;<br />
then<br />
&nbsp; &nbsp; &nbsp; &nbsp; echo <span style="color:#CC0000;">"ERROR: full backup "</span>$FILE_FULL<span style="color:#CC0000;">" not exist!"</span> | $TEE -a $LOG_FILE<br />
&nbsp; &nbsp; &nbsp; &nbsp; exit<br />
fi</p>
<p>#Realizo backup del backup</p>
<p>echo <span style="color:#CC0000;">"Rotating files..."</span> | $TEE $LOG_FILE</p>
<p>if <span style="color:#006600; font-weight:bold;">&#91;</span> -f $FILE <span style="color:#006600; font-weight:bold;">&#93;</span>;</p>
<p>then<br />
&nbsp; &nbsp; &nbsp; &nbsp; #cp -v $FILE $FILE_OLD | $TEE $LOG_FILE<br />
&nbsp; &nbsp; &nbsp; &nbsp; rm -v $FILE | $TEE $LOG_FILE<br />
fi</p>
<p>#Realizo el backup<br />
DATE_FULL=<span style="color:#CC0000;">"`date <span style="color:#000099; font-weight:bold;">\"</span>+%Y-%m-%d %H:%M<span style="color:#000099; font-weight:bold;">\"</span> -r "</span>$FILE_FULL<span style="color:#CC0000;">"`"</span><br />
echo <span style="color:#CC0000;">"Full backupe created: "</span>$DATE_FULL | $TEE $LOG_FILE</p>
<p>
echo <span style="color:#CC0000;">"Making backup..."</span> | $TEE $LOG_FILE<br />
$TAR -chzf&nbsp; $FILE --newer-mtime=<span style="color:#CC0000;">"$DATE_FULL"</span> $DIR | $TEE -a $LOG_FILE</p>
<p>
if <span style="color:#006600; font-weight:bold;">&#91;</span> $? == <span style="color:#800000;">0</span> <span style="color:#006600; font-weight:bold;">&#93;</span><br />
then<br />
&nbsp; &nbsp; &nbsp; &nbsp; echo <span style="color:#CC0000;">"Backup successfull!"</span><br />
else<br />
&nbsp; &nbsp; &nbsp; &nbsp; echo <span style="color:#CC0000;">"ERROR: error making backup <img src='http://luauf.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> "</span><br />
fi</div>
</div>
</div>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/05/22/backups-full-e-incremental-con-bash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Varios ejemplos de uso del comando grep</title>
		<link>http://luauf.com/2009/05/04/varios-ejemplos-de-uso-del-comando-grep/</link>
		<comments>http://luauf.com/2009/05/04/varios-ejemplos-de-uso-del-comando-grep/#comments</comments>
		<pubDate>Mon, 04 May 2009 07:00:06 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[BSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[Comandos]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[servidores]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=935</guid>
		<description><![CDATA[En esta publicación lo que sobran son las palabras y vamos directo a los hechos. A continuación veremos varios ejemplos del uso del comando grep. Usamos grep para buscar una palabra dentro de un archivo en Linux, pero... ¿hasta donde podemos llegar con su uso? A continuación, en cada ejemplo, intentaremos trabajar con dos archivos [...]]]></description>
			<content:encoded><![CDATA[<p>En esta publicación lo que sobran son las palabras y vamos directo a los hechos. A continuación veremos varios ejemplos del uso del comando <strong>grep</strong>.</p>
<p>Usamos grep para buscar una palabra dentro de un archivo en Linux, pero... ¿hasta donde podemos llegar con su uso?</p>
<p><span id="more-935"></span></p>
<p>A continuación, en cada ejemplo, intentaremos trabajar con dos archivos de demostración iguales a los siguientes:</p>
<div class="syntax_hilite">
<div id="code-43">
<div class="code">$&nbsp; cat archivo_demo1</p>
<p>ESTA ES LA PRIMER LINEA EN MAYUSCULAS DE ESTE ARCHIVO<br />
esta es la primer linea en minusculas de este archivo<br />
Esta Es La Primer Linea Con El Primer Caracter De Cada Palabra Con Mayuscula</p>
<p>Hay dos lineas vacias sobre esta<br />
Y esta es la ultima linea<br />
$ cp /tmp/archivo_demo1 /tmp/archivo_demo2</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Uso básico, buscar una cadena en un archivo</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-44">
<div class="code">$ grep <span style="color:#CC0000;">"esta"</span> archivo_demo1<br />
esta es la primer linea en minusculas de este archivo<br />
Hay dos lineas vacias sobre esta<br />
Y esta es la ultima linea</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Buscar una cadena en varios archivos</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-45">
<div class="code">$ grep <span style="color:#CC0000;">"esta"</span> archivo_demo*<br />
archivo_demo1:esta es la primer linea en minusculas de este archivo<br />
archivo_demo1:Hay dos lineas vacias sobre esta<br />
archivo_demo1:Y esta es la ultima linea<br />
archivo_demo2:esta es la primer linea en minusculas de este archivo<br />
archivo_demo2:Hay dos lineas vacias sobre esta<br />
archivo_demo2:Y esta es la ultima linea</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Buscar sin coincidencia entre mayúsculas y minúsculas (uso del argumento -i)</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-46">
<div class="code">$ grep -i <span style="color:#CC0000;">"esta"</span> archivo_demo1<br />
ESTA ES LA PRIMER LINEA EN MAYUSCULAS DE ESTE ARCHIVO<br />
esta es la primer linea en minusculas de este archivo<br />
Esta Es La Primer Linea Con El Primer Caracter De Cada Palabra Con Mayuscula<br />
Hay dos lineas vacias sobre esta<br />
Y esta es la ultima linea</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Buscar expresiones regulares</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-47">
<div class="code">$ grep <span style="color:#CC0000;">"esta.*linea"</span> archivo_demo1<br />
esta es la primer linea en minusculas de este archivo<br />
Y esta es la ultima linea</div>
</div>
</div>
<p></p>
<p>En este ejemplo buscamos aquellas líneas que contienen la palabra "esta" y luego de cualquier texto (*) continúan con "linea". Para más operadores de expresiones regulares se recomienda leer la documentación del grep.</p>
<ul>
<li><strong>Buscar palabras completas (excluir subcadenas) (uso del argumento -w)</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-48">
<div class="code">$ grep -iw <span style="color:#CC0000;">"de"</span> archivo_demo1</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Buscar N líneas luego de la coincidencia</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-49">
<div class="code">$ grep -A2 <span style="color:#CC0000;">"ESTA"</span> archivo_demo1<br />
ESTA ES LA PRIMER LINEA EN MAYUSCULAS DE ESTE ARCHIVO<br />
esta es la primer linea en minusculas de este archivo<br />
Esta Es La Primer Linea Con El Primer Caracter De Cada Palabra Con Mayuscula<br />
$grep -A1 <span style="color:#CC0000;">"ESTA"</span> archivo_demo1<br />
ESTA ES LA PRIMER LINEA EN MAYUSCULAS DE ESTE ARCHIVO<br />
esta es la primer linea en minusculas de este archivo</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Buscar N líneas antes de la coincidencia</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-50">
<div class="code">$ grep -B1 <span style="color:#CC0000;">"ultima"</span> archivo_demo1<br />
Hay dos lineas vacias sobre esta<br />
Y esta es la ultima linea</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Buscar N líneas alrededor de la coincidencia</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-51">
<div class="code">$ grep -C1 <span style="color:#CC0000;">"minusculas"</span> archivo_demo1<br />
ESTA ES LA PRIMER LINEA EN MAYUSCULAS DE ESTE ARCHIVO<br />
esta es la primer linea en minusculas de este archivo<br />
Esta Es La Primer Linea Con El Primer Caracter De Cada Palabra Con Mayuscula</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Resaltar los resultados</strong></li>
</ul>
<p>Es necesario setear las variables de entorno GREP_OPTIONS y GREP_COLOR</p>
<div class="syntax_hilite">
<div id="code-52">
<div class="code">$ export GREP_OPTIONS=<span style="color:#CC0000;">'--color=auto'</span> GREP_COLOR=<span style="color:#CC0000;">'100;8'</span></div>
</div>
</div>
<p></p>
<ul>
<li><strong>Buscar en archivos recursivamente (uso del argumento -r)</strong></li>
</ul>
<p>Cuando necesitas buscar una cadena en los archivos del directorio actual y sus subdirectorios. El siguiente ejemplo buscaría la palabra "auto" en todos los archivos del directorio actual y sus subdirectorios.</p>
<div class="syntax_hilite">
<div id="code-53">
<div class="code">$ grep -r <span style="color:#CC0000;">"auto"</span> *</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Buscar no coincidencias (uso del argumento -v)<br />
</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-54">
<div class="code">$ grep -iv <span style="color:#CC0000;">"primer"</span> archivo_demo1</p>
<p>Hay dos lineas vacias sobre esta<br />
Y esta es la ultima linea</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Mostrar las lineas de varias no coincidencias (uso del argumento -v y los argumentos -e)</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-55">
<div class="code">$ cat archivo_demo3<br />
a<br />
b<br />
c<br />
d</p>
<p>$ grep -v -e <span style="color:#CC0000;">"a"</span> -e <span style="color:#CC0000;">"b"</span> -e <span style="color:#CC0000;">"c"</span> archivo_demo3<br />
d</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Contar el número de ocurrencias (uso del argumento -c)<br />
</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-56">
<div class="code">$ grep -c <span style="color:#CC0000;">"esta"</span> archivo_demo1<br />
<span style="color:#800000;">3</span><br />
$ grep -ic <span style="color:#CC0000;">"esta"</span> archivo_demo1<br />
<span style="color:#800000;">5</span></div>
</div>
</div>
<p></p>
<ul>
<li><strong>Mostrar solo los nombres de los archivos los cuales contienen coincidencias (uso del argumento -l)</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-57">
<div class="code">$ grep -l <span style="color:#CC0000;">"esta"</span> archivo_demo*<br />
archivo_demo1<br />
archivo_demo2</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Mostrar solo la cadena buscada (uso del argumento -o)</strong></li>
</ul>
<p>Por defecto el comando grep muesrta la línea completa de la cadena o patrón dado, pero si solo quieres mostrar dicha cadena o patrón puedes utilizar el argumento -o.</p>
<p>Nota la diferencia en el ejemplo:</p>
<div class="syntax_hilite">
<div id="code-58">
<div class="code">$ grep <span style="color:#CC0000;">"es.*linea"</span> archivo_demo1<br />
esta es la primer linea en minusculas de este archivo<br />
Y esta es la ultima linea<br />
$<br />
$ grep -o <span style="color:#CC0000;">"es.*linea"</span> archivo_demo1<br />
esta es la primer linea<br />
esta es la ultima linea</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Mostrar la posición en el archivo de la conicidencia (uso de argumento -b)</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-59">
<div class="code">$ grep -bo <span style="color:#CC0000;">"es.*linea"</span> archivo_demo1<br />
<span style="color:#800000;">54</span>:esta es la primer linea<br />
<span style="color:#800000;">222</span>:esta es la ultima linea<br />
$<br />
$ grep -bo <span style="color:#CC0000;">"es.*linea"</span> archivo_demo*<br />
archivo_demo1:<span style="color:#800000;">54</span>:esta es la primer linea<br />
archivo_demo1:<span style="color:#800000;">222</span>:esta es la ultima linea<br />
archivo_demo2:<span style="color:#800000;">54</span>:esta es la primer linea<br />
archivo_demo2:<span style="color:#800000;">222</span>:esta es la ultima linea</div>
</div>
</div>
<p></p>
<ul>
<li><strong>Mostrar la fila en el archivo de la conicidencia (uso de argumento -n)</strong></li>
</ul>
<div class="syntax_hilite">
<div id="code-60">
<div class="code">$ grep -no <span style="color:#CC0000;">"es.*linea"</span> archivo_demo*<br />
archivo_demo1:<span style="color:#800000;">2</span>:esta es la primer linea<br />
archivo_demo1:<span style="color:#800000;">7</span>:esta es la ultima linea<br />
archivo_demo2:<span style="color:#800000;">2</span>:esta es la primer linea<br />
archivo_demo2:<span style="color:#800000;">7</span>:esta es la ultima linea</div>
</div>
</div>
<p></p>
<p>Vía: <a href="http://www.thegeekstuff.com/2009/03/15-practical-unix-grep-command-examples/">The Geek Stuff</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/05/04/varios-ejemplos-de-uso-del-comando-grep/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Como utilizar vi y no morir en el intento</title>
		<link>http://luauf.com/2009/04/24/como-utilizar-vi-y-no-morir-en-el-intento/</link>
		<comments>http://luauf.com/2009/04/24/como-utilizar-vi-y-no-morir-en-el-intento/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 02:30:09 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Consola]]></category>
		<category><![CDATA[editor de texto]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[telnet]]></category>
		<category><![CDATA[Terminal]]></category>
		<category><![CDATA[vi]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=930</guid>
		<description><![CDATA[vi es un editor de texto de pantalla completa clásico de UNIX. Como no tiene interfaz grafica puede usarse en cualquier tipo de terminal. Su uso se torna "obligatorio" cuando debes administrar servidores a los que solo puedes acceder por consola (telnet o ssh). Si bien existen otras alternativas más versátiles, como emacs, pico (nano), [...]]]></description>
			<content:encoded><![CDATA[<p><strong>vi</strong> es un editor de texto de pantalla completa clásico de UNIX. Como no tiene interfaz grafica puede usarse en cualquier tipo de terminal. Su uso se torna "obligatorio" cuando debes administrar servidores a los que solo puedes acceder por consola (telnet o ssh).</p>
<p>Si bien existen otras alternativas más versátiles, como emacs, pico (nano), etc., vi está presente en todos los UNIX, requiere pocos recursos y se usa mucho en administración (para programar y en situaciones de emergencia)</p>
<p>Con las razones antes expuestas es prácticamente imprescindible que tengas y/o adquieras algún conocimiento de vi.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/04/vi-splash.png"><img class="alignnone size-medium wp-image-931" title="vi-splash" src="http://luauf.com/wp-content/uploads/2009/04/vi-splash-300x189.png" alt="vi-splash" width="300" height="189" /></a></p>
<p><span id="more-930"></span>Para empezar, lo primero que debemos conocer de vi son sus "modos". Existen tres modos o estados en vi:</p>
<ul>
<li>Modo comando: permite desplazarse por el documento con las teclas de cursos, recorrer el archivo y ejecutar comandos de manejo de texto o salir del editor.</li>
<li>Modo texto o insersión: permite el ingreso de caracteres en el documento</li>
<li>Modo "ultima línea" o ex: permite escribir comandos (comandos que se ven en la última línea de la pantalla)</li>
</ul>
<p><!--more--></p>
<p>A continuación, lo básico que hay que saber para no pasar vergüenza o sentir impotencia es:</p>
<ul>
<li><strong>vi mi_archivo</strong>: edita el archivo mi_archivo</li>
<li><strong>i</strong>: inserta texto a la izquierda del cursor</li>
<li><strong>a</strong>: agrega texto a la derecha del cursor</li>
<li><strong>ESC</strong>: vuelve a modo comando</li>
<li><strong>x</strong>: borra el caracter bajo el cursor</li>
<li><strong>dd</strong>: borra una línea</li>
<li><strong>dw</strong>: borra una palabra</li>
<li><strong>h</strong> o <strong>flecha izquierda</strong>: mueve el cursor un caracter a la izquierda</li>
<li><strong>j</strong> o <strong>flecha</strong> <strong>abajo</strong>: mueve el cursor una línea hacia abajo</li>
<li><strong>k</strong> o <strong>flecha</strong> <strong>arriba</strong>: mueve el cursor una línea hacia arriba</li>
<li><strong>l</strong> o <strong>flecha derecha</strong>: mueve el cursor un caracter a la derecha</li>
<li><strong>0</strong>: mueve el cursor al principio de la línea</li>
<li><strong>$</strong>: mueve el cursor al final de la línea</li>
<li><strong>1G</strong>: mueve el cursor al principio del archivo</li>
<li><strong>G</strong>: mueve el cursor al final del archivo</li>
<li><strong>u</strong>: deshace el último comando</li>
<li><strong>:w</strong>: guarda el archivo</li>
<li><strong>:w </strong>nombre_archivo: guardar como nombre_archivo</li>
<li><strong>:q</strong>: sale del editor (debe guardarse el archivo primero)</li>
<li><strong>:q!</strong>: sale del editor sin grabar</li>
<li><strong>ZZ</strong>: guarda el archivo y sale del editor</li>
<li><strong>/</strong>palabra: busca palabra</li>
</ul>
<p>¿Como cambiar de modos?</p>
<ul>
<li>De <strong>comando</strong> a <strong>texto</strong>:
<ul>
<li>teclas de inserción <strong>i I a A o O</strong></li>
<li>tecla de sobreescritura <strong>R</strong></li>
</ul>
</li>
<li>De <strong>texto</strong> a <strong>comando</strong>:
<ul>
<li>tecla <strong>ESC</strong></li>
</ul>
</li>
<li>DE <strong>comando</strong> a <strong>última línea</strong>:
<ul>
<li>teclas <strong>: / ?</strong></li>
</ul>
</li>
<li>De <strong>última línea</strong> a <strong>comando</strong>:
<ul>
<li>tecla <strong>ENTER</strong> (al finalizar el comando)</li>
<li>tecla <strong>ESC</strong> (interrumpe el comando)</li>
</ul>
</li>
</ul>
<p>Uno de los problemas más frecuentes en el uso de vi es saber donde estamos (en que modo). Esto se facilita enormemente con un seteo a escribir en modo comando:<strong> :set showmode</strong>. De ahi en más veremos una leyenda que indica si estamos en modo comando o inserción.</p>
<p>La lista de comandos continua y es mucho más larga y prácticamente fin, pero como nuestro objetivo en esta publicación es simplemente "sobrevivir", vamos a plantear un último aspecto interesante y dar por finalizada esta guía:</p>
<p><strong>¿Cómo copiar y pegar con vi?</strong></p>
<ul>
<li><strong>yy</strong>: copiar línea</li>
<li><strong>yw</strong>: copiar palabra</li>
<li><strong>y$</strong>: copiar desde el cursor hasta el fin de la línea</li>
<li><strong>p</strong>: pegar a la derecha de la posición cursor</li>
<li><strong>P</strong>: pegar a la izquierda de la posición cursor</li>
</ul>
<p>Un detalle más, ausente en muchos editores más sofisticados, es el de copiar en buffers, los comandos son los mismos, pero son antecedidos por el nombre del buffer, por ejemplo:</p>
<ul>
<li><strong>ayy</strong>: copia línea en buffer "a"</li>
<li><strong>ayw</strong>: copia palabra en buffer "a"</li>
<li><strong>ap</strong>: pegar a la derecha de la posición del cursor el buffer "a"</li>
<li><strong>aP</strong>: pegar a la izquierda de la posición del cursor el buffer "a"</li>
<li><strong>bdd</strong>: borra la línea y la guarda en e buffer "b" (equivalente a cortar)</li>
<li><strong>bdw</strong>: borra la palabra y la guarda en e buffer "b" (equivalente a cortar)</li>
</ul>
<p>Y esto fue todo por hoy, no te habrás convertido en un experto, pero de seguro fue más que suficiente para dar los primeros pasos.</p>
<p>Vía: <a href="http://iie.fing.edu.uy/~vagonbar/unixbas/editorvi.htm">Instituto de Ingeniería Eléctrica</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/04/24/como-utilizar-vi-y-no-morir-en-el-intento/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

