<?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>miguelcarmona.name</title>
	<atom:link href="http://miguelcarmona.name/feed" rel="self" type="application/rss+xml" />
	<link>http://miguelcarmona.name</link>
	<description>Blog/Portfolio profesional de Miguel Carmona</description>
	<lastBuildDate>Sat, 04 Feb 2012 19:47:09 +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>Dar acceso VNC a una máquina virtual Proxmox sin acceder al panel &#124; xavifernandez.com</title>
		<link>http://miguelcarmona.name/notas-y-recortes/dar-acceso-vnc-a-una-maquina-virtual-proxmox-sin-acceder-al-panel-xavifernandez-com</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/dar-acceso-vnc-a-una-maquina-virtual-proxmox-sin-acceder-al-panel-xavifernandez-com#comments</comments>
		<pubDate>Sat, 04 Feb 2012 19:47:09 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>
		<category><![CDATA[proxmox]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>
		<category><![CDATA[virtualizacion]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=726</guid>
		<description><![CDATA[Mientras no llega la nueva versión de nuestro querido panel de control para virtualización Proxmox, si se nos plantea la necesidad de tener que dar acceso por VNC a una máquina virtual, y no queremos pasarle el root de nuestro servidor podremos hacerlo de la siguiente forma: echo “5902 stream tcp nowait root /usr/sbin/qm qm [...]]]></description>
			<content:encoded><![CDATA[<p>Mientras no llega la nueva versión de nuestro querido panel de control para virtualización Proxmox, si se nos plantea la necesidad de tener que dar acceso por VNC a una máquina virtual, y no queremos pasarle el root de nuestro servidor podremos hacerlo de la siguiente forma:</p>

<div class="wp_codebox"><table><tr id="p7262"><td class="code" id="p726code2"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> “<span style="color: #000000;">5902</span> stream tcp nowait root <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>qm qm vncproxy <span style="color: #000000;">102</span> password” <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>inetd.conf
&nbsp;
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>openbsd-inetd restart</pre></td></tr></table></div>

<p>Donde 5902 es el puerto de VNC,<br />
102 es el número de máquina virtual<br />
y password la contraseña VNC de acceso</p>
<p>vía: <a href="http://xavifernandez.com/dar-acceso-vnc-a-una-maquina-virtual-proxmox-sin-acceder-al-panel/">Dar acceso VNC a una máquina virtual Proxmox sin acceder al panel | xavifernandez.com</a>.</p>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/habilitar-iptables-para-los-containers-openvz-en-proxmox" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/habilitar-iptables-para-los-containers-openvz-en-proxmox" target="_top">Habilitar iptables para los containers OpenVZ en Proxmox</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/configurar-escaner-en-red-opensuse-11" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/escaner1.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/configurar-escaner-en-red-opensuse-11" target="_top">Configurar escáner en red - openSuse 11</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/acceso-a-consola-de-nuestro-servidor-web" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/02/php.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/acceso-a-consola-de-nuestro-servidor-web" target="_top">Acceso a consola de nuestro servidor web</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/acceso-ssh-sin-contrasena" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/acceso-ssh-sin-contrasena" target="_top">Acceso ssh sin contraseña</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/lvm-volumenes-logicos" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/09/lvm.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/lvm-volumenes-logicos" target="_top">LVM (volumenes logicos)</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/dar-acceso-vnc-a-una-maquina-virtual-proxmox-sin-acceder-al-panel-xavifernandez-com/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dependencias en Plasmoid</title>
		<link>http://miguelcarmona.name/notas-y-recortes/dependencias-en-plasmoid</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/dependencias-en-plasmoid#comments</comments>
		<pubDate>Tue, 17 Jan 2012 10:47:26 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[openSuse]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=718</guid>
		<description><![CDATA[Hay veces que se nos presenta el problema de que alguno de nuestros plasmoid instalados no se muestra o nos tira algún error del tipo: No ha sido posible crear este objetos por el siguiente motivo: El script de inicialización ha fallado Normalmente pasa cuando actualizamos la versión del sistema o instalamos uno de nuevo. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-719" title="Plasma logo" src="http://miguelcarmona.name/wp-content/uploads/2012/01/Plasma_icon.jpg" alt="" width="256" height="256" /><br />
Hay veces que se nos presenta el problema de que alguno de nuestros plasmoid instalados no se muestra o nos tira algún error del tipo:</p>
<blockquote><p>No ha sido posible crear este objetos por el siguiente motivo:</p>
<p>El script de inicialización ha fallado</p></blockquote>
<p>Normalmente pasa cuando actualizamos la versión del sistema o instalamos uno de nuevo.</p>
<p>La mejor opción para estos casos es abrirnos una consola y lanzarlo desde consola.</p>
<p>Para listar los plasmoid instalados:</p>

<div class="wp_codebox"><table><tr id="p7186"><td class="code" id="p718code6"><pre class="bash" style="font-family:monospace;">plasmapkg <span style="color: #660033;">-l</span></pre></td></tr></table></div>

<p>Para lanzar un plasmoid:</p>

<div class="wp_codebox"><table><tr id="p7187"><td class="code" id="p718code7"><pre class="bash" style="font-family:monospace;">plasmoidviewer nombre-plasmoid</pre></td></tr></table></div>

<p>De esta forma podemos ver qué dependencia necesitamos o qué error nos está reportando. Sin ir más lejos, en openSuse 12.1, el plasmoid veromix no funciona a pesar de instalar varias dependencias que solicita el desarrollador. Al lanzarlo desde consola obtengo:</p>

<div class="wp_codebox"><table><tr id="p7188"><td class="code" id="p718code8"><pre class="bash" style="font-family:monospace;">plasmoidviewer veromix-plasmoid
Traceback <span style="color: #7a0874; font-weight: bold;">&#40;</span>most recent call <span style="color: #c20cb9; font-weight: bold;">last</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>:
  File <span style="color: #ff0000;">&quot;/usr/share/kde4/apps/plasma_scriptengine_python/pyappletscript.py&quot;</span>, line <span style="color: #000000;">59</span>, <span style="color: #000000; font-weight: bold;">in</span> init
    self.module = __import__<span style="color: #7a0874; font-weight: bold;">&#40;</span>self.pluginName+<span style="color: #ff0000;">'.'</span>+relpath<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  File <span style="color: #ff0000;">&quot;/usr/share/kde4/apps/plasma_scriptengine_python/plasma_importer.py&quot;</span>, line <span style="color: #000000;">107</span>, <span style="color: #000000; font-weight: bold;">in</span> load_module
    <span style="color: #7a0874; font-weight: bold;">exec</span> code <span style="color: #000000; font-weight: bold;">in</span> mod.__dict__
  File <span style="color: #ff0000;">&quot;/home/fasiko/.kde4/share/apps/plasma/plasmoids/veromix-plasmoid/contents/code/main.py&quot;</span>, line <span style="color: #000000;">57</span>, <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">&lt;</span>module<span style="color: #000000; font-weight: bold;">&gt;</span>
    from VeroMix import VeroMix
  File <span style="color: #ff0000;">&quot;/usr/share/kde4/apps/plasma_scriptengine_python/plasma_importer.py&quot;</span>, line <span style="color: #000000;">107</span>, <span style="color: #000000; font-weight: bold;">in</span> load_module
    <span style="color: #7a0874; font-weight: bold;">exec</span> code <span style="color: #000000; font-weight: bold;">in</span> mod.__dict__
  File <span style="color: #ff0000;">&quot;/home/fasiko/.kde4/share/apps/plasma/plasmoids/veromix-plasmoid/contents/code/VeroMix.py&quot;</span>, line <span style="color: #000000;">27</span>, <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">&lt;</span>module<span style="color: #000000; font-weight: bold;">&gt;</span>
    from SortedLayout import SortedLayout
  File <span style="color: #ff0000;">&quot;/usr/share/kde4/apps/plasma_scriptengine_python/plasma_importer.py&quot;</span>, line <span style="color: #000000;">107</span>, <span style="color: #000000; font-weight: bold;">in</span> load_module
    <span style="color: #7a0874; font-weight: bold;">exec</span> code <span style="color: #000000; font-weight: bold;">in</span> mod.__dict__
  File <span style="color: #ff0000;">&quot;/home/usuario/.kde4/share/apps/plasma/plasmoids/veromix-plasmoid/contents/code/SortedLayout.py&quot;</span>, line <span style="color: #000000;">20</span>, <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">&lt;</span>module<span style="color: #000000; font-weight: bold;">&gt;</span>
    from SinkInputUI import InputSinkUI
  File <span style="color: #ff0000;">&quot;/usr/share/kde4/apps/plasma_scriptengine_python/plasma_importer.py&quot;</span>, line <span style="color: #000000;">107</span>, <span style="color: #000000; font-weight: bold;">in</span> load_module
    <span style="color: #7a0874; font-weight: bold;">exec</span> code <span style="color: #000000; font-weight: bold;">in</span> mod.__dict__
  File <span style="color: #ff0000;">&quot;/home/usuario/.kde4/share/apps/plasma/plasmoids/veromix-plasmoid/contents/code/SinkInputUI.py&quot;</span>, line <span style="color: #000000;">27</span>, <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">&lt;</span>module<span style="color: #000000; font-weight: bold;">&gt;</span>
    from SinkUI import <span style="color: #000000; font-weight: bold;">*</span>
  File <span style="color: #ff0000;">&quot;/usr/share/kde4/apps/plasma_scriptengine_python/plasma_importer.py&quot;</span>, line <span style="color: #000000;">107</span>, <span style="color: #000000; font-weight: bold;">in</span> load_module
    <span style="color: #7a0874; font-weight: bold;">exec</span> code <span style="color: #000000; font-weight: bold;">in</span> mod.__dict__
  File <span style="color: #ff0000;">&quot;/home/usuario/.kde4/share/apps/plasma/plasmoids/veromix-plasmoid/contents/code/SinkUI.py&quot;</span>, line <span style="color: #000000;">26</span>, <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">&lt;</span>module<span style="color: #000000; font-weight: bold;">&gt;</span>
    from Channel import Channel
  File <span style="color: #ff0000;">&quot;/usr/share/kde4/apps/plasma_scriptengine_python/plasma_importer.py&quot;</span>, line <span style="color: #000000;">107</span>, <span style="color: #000000; font-weight: bold;">in</span> load_module
    <span style="color: #7a0874; font-weight: bold;">exec</span> code <span style="color: #000000; font-weight: bold;">in</span> mod.__dict__
  File <span style="color: #ff0000;">&quot;/home/usuario/.kde4/share/apps/plasma/plasmoids/veromix-plasmoid/contents/code/Channel.py&quot;</span>, line <span style="color: #000000;">27</span>, <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">&lt;</span>module<span style="color: #000000; font-weight: bold;">&gt;</span>
    from MuteButton  import MuteButton
  File <span style="color: #ff0000;">&quot;/usr/share/kde4/apps/plasma_scriptengine_python/plasma_importer.py&quot;</span>, line <span style="color: #000000;">107</span>, <span style="color: #000000; font-weight: bold;">in</span> load_module
    <span style="color: #7a0874; font-weight: bold;">exec</span> code <span style="color: #000000; font-weight: bold;">in</span> mod.__dict__
  File <span style="color: #ff0000;">&quot;/home/usuario/.kde4/share/apps/plasma/plasmoids/veromix-plasmoid/contents/code/MuteButton.py&quot;</span>, line <span style="color: #000000;">23</span>, <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">&lt;</span>module<span style="color: #000000; font-weight: bold;">&gt;</span>
    from Utils import <span style="color: #000000; font-weight: bold;">*</span>
  File <span style="color: #ff0000;">&quot;/usr/share/kde4/apps/plasma_scriptengine_python/plasma_importer.py&quot;</span>, line <span style="color: #000000;">107</span>, <span style="color: #000000; font-weight: bold;">in</span> load_module
    <span style="color: #7a0874; font-weight: bold;">exec</span> code <span style="color: #000000; font-weight: bold;">in</span> mod.__dict__
  File <span style="color: #ff0000;">&quot;/home/usuario/.kde4/share/apps/plasma/plasmoids/veromix-plasmoid/contents/code/Utils.py&quot;</span>, line <span style="color: #000000;">20</span>, <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">&lt;</span>module<span style="color: #000000; font-weight: bold;">&gt;</span>
    from xdg import BaseDirectory
ImportError: No module named xdg</pre></td></tr></table></div>

<p>Podemos ver que nos informa que no encuentra el módulo xdg por lo que al buscarlo, veo que hay un paquete llamado python-xdg el cual no está instalado. Tras instalarlo y lanzarlo de nuevo, funciona perfectamente por lo que ya sólo nos queda reiniciar la sesión.</p>
<p>&nbsp;</p>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/enjaular-a-un-usuario-conectado-por-ssh" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/ssh.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/enjaular-a-un-usuario-conectado-por-ssh" target="_top">Enjaular a un usuario conectado por ssh</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/problemas-con-botones-de-aplicaciones-java-en-kde4" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/03/generics-native-eclipse-jamvm-540x357.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/problemas-con-botones-de-aplicaciones-java-en-kde4" target="_top">¿Problemas con botones de aplicaciones java en kde4?</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/comandos-gnulinux-para-principiantes" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/gnu-linux.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/comandos-gnulinux-para-principiantes" target="_top">Comandos GNU/Linux para principiantes</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/compresor-de-codigo-javascript" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/javascript2.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/compresor-de-codigo-javascript" target="_top">Compresor de código javascript</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/vmware-server-1-x-en-opensuse-11-2" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2009/11/captura_vmware_1.x_openSuse_11.2-540x386.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/vmware-server-1-x-en-opensuse-11-2" target="_top">Vmware server 1.x en opensuse 11.2</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/dependencias-en-plasmoid/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manejo habitual de LVM (volúmenes lógicos)</title>
		<link>http://miguelcarmona.name/notas-y-recortes/manejo-habitual-de-lvm-volumenes-logicos</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/manejo-habitual-de-lvm-volumenes-logicos#comments</comments>
		<pubDate>Tue, 20 Sep 2011 08:34:37 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[lvm]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=707</guid>
		<description><![CDATA[Manejo habitual de LVM (los comandos los proporciona el paquete lvm2 que se instala por dependencias): Añadir una partición al disco virtual, primero tenemos que formatearla con fdisk y marcarla como 8e (Linux LVM). Después añadiremos la partición al disco virtual: vgextend disco_virtual /dev/hdc1 Aumentar el tamaño de una partición virtual, primero aumentaremos el tamaño de la partición: lvextend -L+120G [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding: 0px;">Manejo habitual de LVM (los comandos los proporciona el <dfn style="font-family: Verdana, 'Trebuchet MS', Tahoma, Arial, sans-serif; color: #e45b00; font-style: normal; padding: 0px; margin: 0px;">paquete lvm2</dfn> que se instala por dependencias):</p>
<ul style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 30px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; list-style-type: disc;">
<li><strong>Añadir una partición al disco virtual</strong>, primero tenemos que formatearla con <var style="font-family: Verdana, 'Trebuchet MS', Tahoma, Arial, sans-serif; color: #7d49f5; font-style: normal; padding: 0px; margin: 0px;">fdisk</var> y marcarla como <var style="font-family: Verdana, 'Trebuchet MS', Tahoma, Arial, sans-serif; color: #7d49f5; font-style: normal; padding: 0px; margin: 0px;">8e</var> (<em style="font-style: italic; padding: 0px; margin: 0px;">Linux LVM</em>). Después añadiremos la partición al disco virtual:

<div class="wp_codebox"><table><tr id="p70716"><td class="code" id="p707code16"><pre class="bash" style="font-family:monospace;">vgextend disco_virtual <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>hdc1</pre></td></tr></table></div>

</li>
</ul>
<p><span id="more-707"></span></p>
<ul style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 30px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; list-style-type: disc;">
<li style="margin-top: 20px;"><strong style="font-weight: bold; padding: 0px; margin: 0px;">Aumentar el tamaño de una partición virtual</strong>, primero aumentaremos el tamaño de la partición:

<div class="wp_codebox"><table><tr id="p70717"><td class="code" id="p707code17"><pre class="bash" style="font-family:monospace;">lvextend -L+120G <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home</pre></td></tr></table></div>

<p style="">y luego aumentaremos el tamaño del filesystem:</p>

<div class="wp_codebox"><table><tr id="p70718"><td class="code" id="p707code18"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home
resize2fs <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home <span style="color: #000000; font-weight: bold;">/</span>home</pre></td></tr></table></div>

</li>
<li style="margin-top: 20px;"><strong style="font-weight: bold; padding: 0px; margin: 0px;">Reducir el tamaño de una partición virtual</strong>, primero reduciremos el tamaño del filesystem:

<div class="wp_codebox"><table><tr id="p70719"><td class="code" id="p707code19"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home
resize2fs <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home 80G
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home <span style="color: #000000; font-weight: bold;">/</span>home</pre></td></tr></table></div>

<p>y luego reduciremos el tamaño de la partición:</p>

<div class="wp_codebox"><table><tr id="p70720"><td class="code" id="p707code20"><pre class="bash" style="font-family:monospace;">lvreduce <span style="color: #660033;">-L-120G</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home</pre></td></tr></table></div>

</li>
<li style="margin-top: 20px;"><strong style="font-weight: bold;">Quitar una partición del disco virtual</strong>, primero moveremos los datos que contiene a otras particiones con el comando:

<div class="wp_codebox"><table><tr id="p70721"><td class="code" id="p707code21"><pre class="bash" style="font-family:monospace;">pvmove <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>hdc1</pre></td></tr></table></div>

<p>y luego quitaremos la partición:</p>

<div class="wp_codebox"><table><tr id="p70722"><td class="code" id="p707code22"><pre class="bash" style="font-family:monospace;">vgreduce disco_virtual <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>hdc1</pre></td></tr></table></div>

<p>Ya podemos quitar físicamente la unidad.</p>
</li>
</ul>
<p>vía: <a href="http://www.estrellateyarde.org/discover/lvm-en-linux">LVM (volumenes logicos) en Linux | Estréllate y Arde</a>.</p>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/lvm-volumenes-logicos" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/09/lvm.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/lvm-volumenes-logicos" target="_top">LVM (volumenes logicos)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/previsualizacion-de-datos-de-un-formulario-en-vivo" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2009/11/previsualizacion-de-comentario-en-vivo-540x337.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/previsualizacion-de-datos-de-un-formulario-en-vivo" target="_top">Previsualización de datos de un formulario "en vivo"</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/despertar-equipo-por-la-red-wake-on-lan-wol" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/ipcop-wol-gui_wake_on_lan_gui-540x321.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/despertar-equipo-por-la-red-wake-on-lan-wol" target="_top">Despertar equipo por la red (wake on lan WOL)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/control-de-cabeceras-para-amavis-new" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/05/amavis-2.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/control-de-cabeceras-para-amavis-new" target="_top">Control de cabeceras para amavis-new</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/dar-acceso-vnc-a-una-maquina-virtual-proxmox-sin-acceder-al-panel-xavifernandez-com" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/dar-acceso-vnc-a-una-maquina-virtual-proxmox-sin-acceder-al-panel-xavifernandez-com" target="_top">Dar acceso VNC a una máquina virtual Proxmox sin acceder al panel | xavifernandez.com</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/manejo-habitual-de-lvm-volumenes-logicos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial rápido de jQuery</title>
		<link>http://miguelcarmona.name/notas-y-recortes/tutorial-rapido-de-jquery</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/tutorial-rapido-de-jquery#comments</comments>
		<pubDate>Wed, 29 Jun 2011 15:18:03 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[webDesign]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=697</guid>
		<description><![CDATA[Con algo más de 4 años de vida, jQuery se ha convertido en la librería JavaScript más utilizada actualmente, y es que, además, es gratuita, de código abierto (bajo licencia MIT y GPL v2) e increíblemente ligera. Entre sus usuarios podemos encontrar a Google, Microsoft, IBM, Amazon, Twitter, WordPress, Mozilla o Drupal. Para poder utilizar [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-707 alignleft" title="jquery" src="http://miguelcarmona.name/wp-content/uploads/2011/06/jquery.png" alt="" width="256" height="256" style="margin-right: 25px;" /></p>
<p>Con algo más de 4 años de vida, jQuery se ha convertido en la librería JavaScript más utilizada actualmente, y es que, además, es gratuita, de código abierto (bajo licencia MIT y GPL v2) e increíblemente ligera. Entre sus usuarios podemos encontrar a Google, Microsoft, IBM, Amazon, Twitter, WordPress, Mozilla o Drupal.</p>
<p>Para poder utilizar esta librería lo primero que tendremos que hacer será incluir su código en nuestro proyecto. Podemos descargar el script desde su página web, subirlo a nuestro servidor, y ejecutarlo con la etiqueta script:</p>

<div class="wp_codebox"><table><tr id="p697130"><td class="code" id="p697code130"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;jquery.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>También podemos cargarla directamente desde el CDN que mantiene Google:</p>

<div class="wp_codebox"><table><tr id="p697131"><td class="code" id="p697code131"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>el de Microsoft:</p>

<div class="wp_codebox"><table><tr id="p697132"><td class="code" id="p697code132"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>o el del propio jQuery<br />
<span id="more-697"></span></p>

<div class="wp_codebox"><table><tr id="p697133"><td class="code" id="p697code133"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;http://code.jquery.com/jquery-1.4.2.min.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Independientemente de la opción elegida, ya estaremos listos para comenzar a trabajar con la librería. Sin embargo, y aunque no es estrictamente necesario, os aconsejaría tener unos conocimientos básicos de JavaScript primero, conocimientos que podéis obtener con nuestro tutorial de JavaScript. Y ahora, manos a la obra.</p>
<p>El corazón de jQuery es la función sobrecargada del mismo nombre, jQuery, que ofrece distinta funcionalidad dependiendo de los parámetros utilizados. Además, como JavaScript también toma conceptos del paradigma funcional, y las funciones no son más que otro tipo de objeto, la función jQuery cuenta a su vez con distintas propiedades y métodos. La intención de esta decisión de diseño es la de evitar llenar el espacio de nombres global con montones de nombres inútiles esperando a colisionar.</p>
<p>Si queremos escribir menos y que nuestros archivos sean más pequeños, y si no utilizamos ninguna otra librería que pueda causar algún conflicto con este símbolo, también podemos utilizar el alias $ en sustitución de jQuery.</p>
<p><strong>SELECTORES JQUERY</strong></p>
<p>El primer paso a la hora de trabajar con jQuery es seleccionar los elementos del árbol de documento sobre los que queremos trabajar. Para ello se utiliza la funciónjQuery, pasando como argumento a la función una cadena con un selector, la mayoría de los cuales utilizan una sintaxis similar a la de CSS 3 (ver Tutorial rápido de CSS). El engine que utiliza jQuery para seleccionar elementos se llama Sizzle, y puede descargarse y utilizarse de forma aislada.</p>
<p>Los distintos selectores que podemos utilizar son los siguientes:</p>
<p><strong>Selectores básicos</strong></p>
<p>Selector universal: selecciona todos los elementos de la página (CSS 2)</p>

<div class="wp_codebox"><table><tr id="p697134"><td class="code" id="p697code134"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;*&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Selector de tipo o etiqueta: selecciona todos los elementos con el tipo de etiqueta indicado (CSS 1)</p>

<div class="wp_codebox"><table><tr id="p697135"><td class="code" id="p697code135"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Selector de clase: selecciona todos los elementos con la clase indicada (atributo class) (CSS 1)</p>

<div class="wp_codebox"><table><tr id="p697136"><td class="code" id="p697code136"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Selector de identificador: selecciona el elemento con el identificador (atributo id) indicado (CSS 1)</p>

<div class="wp_codebox"><table><tr id="p697137"><td class="code" id="p697code137"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div#cabecera&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Grupos de selectores: se puede combinar el resultado de varios selectores distintos separándolos con comas (CSS 1)</p>

<div class="wp_codebox"><table><tr id="p697138"><td class="code" id="p697code138"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p,div,a&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p><strong>Selectores de atributos</strong></p>
<p>Selector de atributo: selecciona elementos que tengan un cierto atributo (CSS 2)</p>

<div class="wp_codebox"><table><tr id="p697139"><td class="code" id="p697code139"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a[rel]&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>También se puede seleccionar aquellos que tengan un cierto valor para un atributo (CSS 2)</p>

<div class="wp_codebox"><table><tr id="p697140"><td class="code" id="p697code140"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a[rel='nofollow']&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>O que tengan un valor distinto del indicado (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697141"><td class="code" id="p697code141"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a[rel!='nofollow']&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Aquellos cuyo valor empieza por una cierta cadena (CSS 3)</p>

<div class="wp_codebox"><table><tr id="p697142"><td class="code" id="p697code142"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a[href^='http://mundogeek.net/']&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Los que terminan con una cierta cadena (CSS 3)</p>

<div class="wp_codebox"><table><tr id="p697143"><td class="code" id="p697code143"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a[href$='.com']&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Y los que contienen una cierta cadena (CSS 3)</p>

<div class="wp_codebox"><table><tr id="p697144"><td class="code" id="p697code144"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a[href*='geek']&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Por último, podemos hacer combinaciones de todo lo anterior (CSS 2)</p>

<div class="wp_codebox"><table><tr id="p697145"><td class="code" id="p697code145"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a[rel='nofollow'][href]&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p><strong>Selectores de widgets</strong></p>
<p>Pseudo clase botón: selecciona todos los botones (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697146"><td class="code" id="p697code146"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:button&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase checkbox: selecciona todos los checkboxes (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697147"><td class="code" id="p697code147"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:checkbox&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase archivo: selecciona todos los widgets de tipo archivo (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697148"><td class="code" id="p697code148"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:file&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase cabeceras: selecciona todas las cabeceras (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697149"><td class="code" id="p697code149"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:header&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase imagen: selecciona todas las imágenes (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697150"><td class="code" id="p697code150"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:image&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase input: selecciona todos los widgets de tipo input (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697151"><td class="code" id="p697code151"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:input&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase contraseña: selecciona todos los elementos password (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697152"><td class="code" id="p697code152"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:password&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase radiobutton: selecciona todos los elementos radiobutton (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697153"><td class="code" id="p697code153"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:radio&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase reset: selecciona todos los elementos reset (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697154"><td class="code" id="p697code154"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:reset&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase seleccionado: selecciona las opciones seleccionadas en un select (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697155"><td class="code" id="p697code155"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:select&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase submit: selecciona todos los elementos submit (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697156"><td class="code" id="p697code156"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:submit&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase texto: selecciona todos las cajas de texto (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697157"><td class="code" id="p697code157"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:text&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase marcado: selecciona todos los radiobuttons y checkboxes marcados (CSS 3)</p>

<div class="wp_codebox"><table><tr id="p697158"><td class="code" id="p697code158"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:checked&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase activo: selecciona todos los elementos que estén activos (CSS 3)</p>

<div class="wp_codebox"><table><tr id="p697159"><td class="code" id="p697code159"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;input:enabled&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase inactivo: selecciona todos los elementos que no estén activos (CSS 3)</p>

<div class="wp_codebox"><table><tr id="p697160"><td class="code" id="p697code160"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;input:disabled&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase ocultos: selecciona todos los elementos ocultos (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697161"><td class="code" id="p697code161"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:hidden&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase visible: selecciona todos los elementos visibles (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697162"><td class="code" id="p697code162"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:visible&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p><strong>Selectores de jerarquía</strong></p>
<p>Selector de descendientes: selecciona elementos que desciendan de otro elemento (CSS 1)</p>

<div class="wp_codebox"><table><tr id="p697163"><td class="code" id="p697code163"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada h2&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Selector de hijos: selecciona elementos que sean hijos directos de otro elemento (CSS 2)</p>

<div class="wp_codebox"><table><tr id="p697164"><td class="code" id="p697code164"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada &gt; h2&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase hijo: selecciona el enésimo hijo de un elemento (CSS 3)</p>

<div class="wp_codebox"><table><tr id="p697165"><td class="code" id="p697code165"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;tr:nth-child(1)&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase primer hijo: selecciona el primero hijo de un elemento (CSS 2)</p>

<div class="wp_codebox"><table><tr id="p697166"><td class="code" id="p697code166"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;tr:first-child&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase último hijo: selecciona el último hijo de un elemento (CSS 3)</p>

<div class="wp_codebox"><table><tr id="p697167"><td class="code" id="p697code167"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;tr:last-child&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase hijo único: selecciona los elementos que sean hijos únicos de otros elementos (CSS 3)</p>

<div class="wp_codebox"><table><tr id="p697168"><td class="code" id="p697code168"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div:only-child&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase índice: selecciona el elemento con el índice indicado de un grupo de elementos (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697169"><td class="code" id="p697code169"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;td:eq(0)&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase primero: selecciona el primer elemento de un grupo de elementos. Equivale a eq(0) (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697170"><td class="code" id="p697code170"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;td:first)&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase último: selecciona el último elemento de un grupo de elementos (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697171"><td class="code" id="p697code171"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;td:last)&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase mayor que: selecciona todos los elementos con un índice mayor que el indicado en un grupo de elementos (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697172"><td class="code" id="p697code172"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;td:gt(0)&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase menor que: selecciona todos los elementos con un índice menor que el indicado en un grupo de elementos (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697173"><td class="code" id="p697code173"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;td:lt(3)&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase par: selecciona los elementos pares de un grupo de elementos (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697174"><td class="code" id="p697code174"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;td:even&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase impar: selecciona los elementos impares de un grupo de elementos (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697175"><td class="code" id="p697code175"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;td:odd&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Selector de hermanos: selecciona todos los hermanos que se encuentren precedidos de otro elemento (CSS 3)</p>

<div class="wp_codebox"><table><tr id="p697176"><td class="code" id="p697code176"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada ~ p&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Selector de próximo adyacente: similar al anterior, pero sólo selecciona el adyacente directo (CSS 2)</p>

<div class="wp_codebox"><table><tr id="p697177"><td class="code" id="p697code177"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada + p&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase padre: selecciona los padres de otros elementos (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697178"><td class="code" id="p697code178"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;h2:parent&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase vacío: selecciona los elementos que no tengan ningún hijo, incluyendo texto plano (CSS 3)</p>

<div class="wp_codebox"><table><tr id="p697179"><td class="code" id="p697code179"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:empty&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p><strong>Otros selectores</strong></p>
<p>Pseudo clase animado: selecciona todos los elementos que están en proceso de animación en este momento (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697180"><td class="code" id="p697code180"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:animated&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase contiene: selecciona todos los elementos que contengan el texto indicado, directamente o en uno de los hijos (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697181"><td class="code" id="p697code181"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div:contains('Mundo geek')&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase tiene: selecciona todos los elementos que contengan al menos un elemento que responda al selector indicado (jQuery)</p>

<div class="wp_codebox"><table><tr id="p697182"><td class="code" id="p697code182"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div:has(h2)&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Pseudo clase negación: selecciona todos los elementos que no cumplan con el selector dado (CSS 3)</p>

<div class="wp_codebox"><table><tr id="p697183"><td class="code" id="p697code183"><pre class="javascript" style="font-family:monospace;">jquery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div:not(.entrada)&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>GESTIONANDO UNA COLECCIÓN JQUERY<br />
Al llamar a la función jQuery con un selector como argumento, el valor devuelto será otro objeto jQuery representando la colección de elementos DOM seleccionados. Tanto es así, que podremos obtener uno de los elementos utilizando el operador [], como si de un array normal se tratara</p>

<div class="wp_codebox"><table><tr id="p697184"><td class="code" id="p697code184"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<p>y también tenemos acceso a una propiedad length con el número de elementos que contiene la colección</p>

<div class="wp_codebox"><table><tr id="p697185"><td class="code" id="p697code185"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">length</span></pre></td></tr></table></div>

<p>Otras cosas que podemos hacer con este objeto son añadir elementos a la colección</p>

<div class="wp_codebox"><table><tr id="p697186"><td class="code" id="p697code186"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.comentario&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>eliminar elementos</p>

<div class="wp_codebox"><table><tr id="p697187"><td class="code" id="p697code187"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">not</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.destacada&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>filtrar elementos con un selector o basándonos en el valor devuelto por una función</p>

<div class="wp_codebox"><table><tr id="p697188"><td class="code" id="p697code188"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">filter</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:has(h2)&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>quedarnos con los elementos que contengan otro cierto elemento</p>

<div class="wp_codebox"><table><tr id="p697189"><td class="code" id="p697code189"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">has</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;h2&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>obtener un sólo elemento, por su índice</p>

<div class="wp_codebox"><table><tr id="p697190"><td class="code" id="p697code190"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">eq</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>obtener el primer elemento de la colección</p>

<div class="wp_codebox"><table><tr id="p697191"><td class="code" id="p697code191"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">first</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>obtener el último elemento de la colección</p>

<div class="wp_codebox"><table><tr id="p697192"><td class="code" id="p697code192"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">last</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>crear una sub colección a partir de la original</p>

<div class="wp_codebox"><table><tr id="p697193"><td class="code" id="p697code193"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slice</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slice</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>obtener los descendientes directos</p>

<div class="wp_codebox"><table><tr id="p697194"><td class="code" id="p697code194"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">children</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>  
jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">children</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>obtener los descendientes directos, incluyendo el texto plano</p>

<div class="wp_codebox"><table><tr id="p697195"><td class="code" id="p697code195"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">contents</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>obtener los hijos que cumplan con un determinado selector</p>

<div class="wp_codebox"><table><tr id="p697196"><td class="code" id="p697code196"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>obtener el hermano siguiente</p>

<div class="wp_codebox"><table><tr id="p697197"><td class="code" id="p697code197"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>obtener los hermanos siguientes</p>

<div class="wp_codebox"><table><tr id="p697198"><td class="code" id="p697code198"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">nextAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>obtener el hermano anterior</p>

<div class="wp_codebox"><table><tr id="p697199"><td class="code" id="p697code199"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">prev</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>obtener los hermanos anteriores</p>

<div class="wp_codebox"><table><tr id="p697200"><td class="code" id="p697code200"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">prevAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>obtener todos los hermanos</p>

<div class="wp_codebox"><table><tr id="p697201"><td class="code" id="p697code201"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">siblings</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>obtener el padre de cada elemento</p>

<div class="wp_codebox"><table><tr id="p697202"><td class="code" id="p697code202"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>obtener todos los ancestros de cada elemento</p>

<div class="wp_codebox"><table><tr id="p697203"><td class="code" id="p697code203"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">parents</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>crear una copia de la colección</p>

<div class="wp_codebox"><table><tr id="p697204"><td class="code" id="p697code204"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">clone</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>o buscar la posición que ocupa un elemento en la colección (si existe)</p>

<div class="wp_codebox"><table><tr id="p697205"><td class="code" id="p697code205"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;*&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">index</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p><strong>MODIFICAR LA PÁGINA CON JQUERY</strong></p>
<p>Veamos ahora cómo utilizar jQuery para modificar nuestra página web. Podemos, por ejemplo, modificar el valor de un atributo</p>

<div class="wp_codebox"><table><tr id="p697206"><td class="code" id="p697code206"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a#principal&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;href&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;http://mundogeek.net/&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>añadir una nueva clase a uno o varios elementos</p>

<div class="wp_codebox"><table><tr id="p697207"><td class="code" id="p697code207"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada:first&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;primera&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>añadir una propiedad CSS a uno o varios elementos</p>

<div class="wp_codebox"><table><tr id="p697208"><td class="code" id="p697code208"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;border&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;1px solid red&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>añadir contenido a un elemento</p>

<div class="wp_codebox"><table><tr id="p697209"><td class="code" id="p697code209"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada:first&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">before</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;strong&gt;Destacada&lt;/strong&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada:first&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">prepend</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;strong&gt;Destacada&lt;/strong&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada:first&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">after</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;strong&gt;Destacada&lt;/strong&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada:first&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;strong&gt;Destacada&lt;/strong&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>modificar el contenido de un elemento</p>

<div class="wp_codebox"><table><tr id="p697210"><td class="code" id="p697code210"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;strong&gt;Sustituido&lt;/strong&gt;&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>eliminar un elemento de la página</p>

<div class="wp_codebox"><table><tr id="p697211"><td class="code" id="p697code211"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div.entrada:first&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>ocultar un elemento</p>

<div class="wp_codebox"><table><tr id="p697212"><td class="code" id="p697code212"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>o volver a mostrar un elemento</p>

<div class="wp_codebox"><table><tr id="p697213"><td class="code" id="p697code213"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p><strong>EVENTOS EN JQUERY</strong></p>
<p>Existen distintas funciones para asignar una función que maneje un evento lanzado por un widget. Para el evento click, al hacer clic sobre un elemento:</p>

<div class="wp_codebox"><table><tr id="p697214"><td class="code" id="p697code214"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:button#pulsame&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Has hecho clic&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>evento submit, cuando se pulsa sobre el botón de enviar de un formulario:</p>

<div class="wp_codebox"><table><tr id="p697215"><td class="code" id="p697code215"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#formulario&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">submit</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Enviando&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>evento dblclick, al hacer doble clic sobre un elemento:</p>

<div class="wp_codebox"><table><tr id="p697216"><td class="code" id="p697code216"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p:first&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">dblclick</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Has hecho doble clic&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>evento hover, cuando al pasar el ratón por encima de un elemento. Podemos utilizarjQuery(this) para referirnos a este elemento:</p>

<div class="wp_codebox"><table><tr id="p697217"><td class="code" id="p697code217"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p:first&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hover</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  jQuery<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;border&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;1px solid red&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>evento mouseenter, cuando el cursor entra en un elemento</p>

<div class="wp_codebox"><table><tr id="p697218"><td class="code" id="p697code218"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p:first&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">mouseenter</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  jQuery<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;border&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;1px solid red&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>evento mouseout, cuando el cursor sale de un elemento</p>

<div class="wp_codebox"><table><tr id="p697219"><td class="code" id="p697code219"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p:first&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">mouseenter</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  jQuery<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;border&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;1px solid red&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
&nbsp;
jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p:first&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">mouseout</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  jQuery<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;border&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;0&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>evento change, cuando se modifica un elemento:</p>

<div class="wp_codebox"><table><tr id="p697220"><td class="code" id="p697code220"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:text#nombre&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">change</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Cambiado&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>evento load, cuando se termina de cargar el elemento:</p>

<div class="wp_codebox"><table><tr id="p697221"><td class="code" id="p697code221"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Página cargada&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>evento ready, cuando se termina de cargar el DOM, para no tener que esperar a cargar las imágenes, por ejemplo, de forma que el usuario pueda utilizar nuestra funcionalidad JavaScript cuanto antes:</p>

<div class="wp_codebox"><table><tr id="p697222"><td class="code" id="p697code222"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;DOM cargado&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>esto último, al ser esto algo muy común, se puede resumir pasando una función a la función jQuery, directamente:</p>

<div class="wp_codebox"><table><tr id="p697223"><td class="code" id="p697code223"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;DOM cargado&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong>ANIMACIONES CON JQUERY</strong></p>
<p>jQuery viene con unas pocas animaciones útiles y vistosas por defecto, aunque para sacarle todo el partido probablemente tendremos que recurrir a plugins.</p>
<p>Para hacer un fundido a opaco:</p>

<div class="wp_codebox"><table><tr id="p697224"><td class="code" id="p697code224"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
  jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">200</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">fadeIn</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>En el ejemplo anterior se utiliza delay para hacer pasar un par de segundos y que se vea más claramente el efecto. A esta función se le puede pasar un valor numérico con el número de milisegundos a esperar, o una cadena, como &#8220;slow&#8221; (lento) o&#8221;fast&#8221; (rápido).</p>
<p>para hacer un fundido a transparente:</p>

<div class="wp_codebox"><table><tr id="p697225"><td class="code" id="p697code225"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:button&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">fadeOut</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>También podemos cambiar la opacidad de un elemento a cualquier valor intermedio</p>

<div class="wp_codebox"><table><tr id="p697226"><td class="code" id="p697code226"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:button&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">fadeTo</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;slow&quot;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0.5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>mostrar los elementos con una animación de deslizamiento de arriba a abajo:</p>

<div class="wp_codebox"><table><tr id="p697227"><td class="code" id="p697code227"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">200</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideDown</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>ocultarlos deslizándolos hacia arriba:</p>

<div class="wp_codebox"><table><tr id="p697228"><td class="code" id="p697code228"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">200</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideUp</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>mostrarlos u ocultarlos, dependiendo de si se estaban mostrando o no:</p>

<div class="wp_codebox"><table><tr id="p697229"><td class="code" id="p697code229"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:button&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">200</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideToggle</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Por último, para cualquier otro tipo de animación con propiedades CSS cuyos valores sean numéricos, utilizaríamos:</p>

<div class="wp_codebox"><table><tr id="p697230"><td class="code" id="p697code230"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:button&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">animate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>opacity<span style="color: #339933;">:</span><span style="color: #CC0000;">0.50</span><span style="color: #339933;">,</span>width<span style="color: #339933;">:</span><span style="color: #CC0000;">100</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'slow'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong>JQUERY Y AJAX</strong></p>
<p>La forma más sencilla de enviar una petición HTTP de forma asíncrona y mostrar el resultado en la página actual es utilizar la función load. Esta se ejecuta sobre el elemento al que se va a añadir la respuesta, y se le pasa como argumento una cadena con el archivo a cargar. Esta cadena puede contener también un selector con el que seleccionar qué elementos queremos mostrar de la respuesta.</p>

<div class="wp_codebox"><table><tr id="p697231"><td class="code" id="p697code231"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:button&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#citas&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;citas.html li&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>también se pueden enviar parámetros al documento (se utiliza GET a menos que los datos se manden en forma de objeto):</p>

<div class="wp_codebox"><table><tr id="p697232"><td class="code" id="p697code232"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:button#login&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#mensaje&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;login.php&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>nombre<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;zootropo&quot;</span><span style="color: #339933;">,</span> pass<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;contraseña&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>e indicar una función a ejecutar cuando se termine de llevar a cabo la petición</p>

<div class="wp_codebox"><table><tr id="p697233"><td class="code" id="p697code233"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;:button#login&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
  jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#mensaje&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;login.php&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>nombre<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;zootropo&quot;</span><span style="color: #339933;">,</span> pass<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;contraseña&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>responseText<span style="color: #339933;">,</span> textStatus<span style="color: #339933;">,</span> XMLHttpRequest<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
    <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;cargado&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>También se pueden utilizar los métodos get y post del objeto jQuery, en cuyo caso se nos devolverá unos ciertos datos con los que nosotros mismos tendremos que trabajar para generar la respuesta y mostrarla en nuestro documento actual:</p>

<div class="wp_codebox"><table><tr id="p697234"><td class="code" id="p697code234"><pre class="javascript" style="font-family:monospace;">jQuery.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;login.php&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>nombre<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;zootropo&quot;</span><span style="color: #339933;">,</span> pass<span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;contraseña&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>  
  <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #339933;">,</span> textStatus<span style="color: #339933;">,</span> XMLHttpRequest<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>  
    jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#mensaje&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Han devuelto: &quot;</span> <span style="color: #339933;">+</span> data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
&nbsp;
jQuery.<span style="color: #660066;">post</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;login.php&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>nombre<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;zootropo&quot;</span><span style="color: #339933;">,</span> pass<span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;contraseña&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>  
  <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #339933;">,</span> textStatus<span style="color: #339933;">,</span> XMLHttpRequest<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>  
    jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#mensaje&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Han devuelto: &quot;</span> <span style="color: #339933;">+</span> data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Si la respuesta del servidor va a estar en formato JSON (JavaScript Object Notation), muy utilizado actualmente, podemos utilizar el método jQuery.getJSON(), al que se le pasa la URL de la petición y, opcionalmente, cualquier parámetro que se necesite, además de una función de callback que ejecutar cuando se termine con la petición. Este método se encargará de parsear la estructura del objeto JSON devuelta utilizando jQuery.parseJSON(), objeto que estará disponible como primer parámetro de la función de callback.</p>

<div class="wp_codebox"><table><tr id="p697235"><td class="code" id="p697code235"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #660066;">getJSON</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'tareas.php'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #339933;">,</span> textStatus<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>  
          $.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>data<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span> tarea<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>  
            $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;li&gt;&lt;/li&gt;&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span>tarea.<span style="color: #660066;">nombre</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; - &quot;</span> <span style="color: #339933;">+</span> tarea.<span style="color: #660066;">hora</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">appendTo</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul#tareas&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
          <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>El código de este tareas.php podría tener este aspecto:</p>

<div class="wp_codebox"><table><tr id="p697236"><td class="code" id="p697code236"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php  
<a href="http://www.php.net/header"><span style="color: #990000;">header</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-type: text/javascript'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
&nbsp;
<span style="color: #000088;">$bbdd</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> mysqli<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'servidor.com'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'usuario'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'pass'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'tareas'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
&nbsp;
<span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'SELECT * FROM tareas'</span><span style="color: #339933;">;</span>  
<span style="color: #000088;">$tareas</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$resultado</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$bbdd</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>  
  <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tarea</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$resultado</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetch_object</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>  
    <span style="color: #000088;">$tareas</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$tarea</span><span style="color: #339933;">;</span>  
&nbsp;
<span style="color: #000088;">$bbdd</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
&nbsp;
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/json_encode"><span style="color: #990000;">json_encode</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tareas</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>vía: <a href="http://mundogeek.net/archivos/2010/04/21/tutorial-rapido-de-jquery/">http://mundogeek.net/archivos/2010/04/21/tutorial-rapido-de-jquery/</a></p>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/previsualizacion-de-datos-de-un-formulario-en-vivo" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2009/11/previsualizacion-de-comentario-en-vivo-540x337.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/previsualizacion-de-datos-de-un-formulario-en-vivo" target="_top">Previsualización de datos de un formulario "en vivo"</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/compresor-de-codigo-javascript" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/javascript2.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/compresor-de-codigo-javascript" target="_top">Compresor de código javascript</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/hmvc-sistema-modular-en-codeigniter" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/codeigniter_logo-e1262900174656.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/hmvc-sistema-modular-en-codeigniter" target="_top">HMVC - Sistema modular en codeIgniter</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/comandos-gnulinux-para-principiantes" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/gnu-linux.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/comandos-gnulinux-para-principiantes" target="_top">Comandos GNU/Linux para principiantes</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/crear-copias-de-seguridad-en-servidor-web-de-hosting-mediante-php" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/02/php.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/crear-copias-de-seguridad-en-servidor-web-de-hosting-mediante-php" target="_top">Crear copias de seguridad en servidor web de hosting mediante php</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/tutorial-rapido-de-jquery/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tunear Apache con cabeza</title>
		<link>http://miguelcarmona.name/notas-y-recortes/tunear-apache-con-cabeza</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/tunear-apache-con-cabeza#comments</comments>
		<pubDate>Mon, 14 Feb 2011 01:00:30 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=691</guid>
		<description><![CDATA[A la hora de instalar Apache debemos elegir entre dos versiones, aunque generalmente lo elegirá nuestro gestor de paquetes. Apache Worker Incluido desde Apache 2.0. Utiliza menos memoria y tiene un mejor rendimiento. Se lanzan múltiples procesos y cada uno de estos pueden correr múltiples threads. Apache Prefork Es el MPM por defecto en Apache [...]]]></description>
			<content:encoded><![CDATA[<p>A la hora de instalar Apache debemos elegir entre dos versiones, aunque generalmente lo elegirá nuestro gestor de paquetes.</p>
<ul>
<li><strong>Apache Worker</strong></li>
</ul>
<p>Incluido desde Apache 2.0. Utiliza menos memoria y tiene un mejor rendimiento. Se lanzan múltiples procesos y cada uno de estos pueden correr múltiples threads.</p>
<ul>
<li><strong>Apache Prefork</strong></li>
</ul>
<p>Es el MPM por defecto en Apache 1.3 y Apache 2.0. Es el instalado por defecto si hacemos uso de mod_php, ya que algunos módulos de PHP no son &#8220;thread safe&#8221;. Tiene un rendimiento ligeramente peor que Worker y más consumo de memoria, pero se considera más seguro y estable. En este MPM se lanzan múltiples procesos y se ejecuta un thread por proceso.</p>
<p>Lo lógico sería utilizar Worker, pero vamos a basarnos en el típico ejemplo LAMP que incluye el soporte mod_php, aunque esto no sea lo más óptimo. Por dicha razón vamos a ver como deberíamos ajustar la configuración para un Prefork.</p>
<p><span id="more-691"></span>El principal parámetro hardware de nuestros frontales Apache será la memoria RAM. Aquí está todo claro, a más memoria RAM, más procesos se podrán lanzar y más peticiones se podrán atender. Por lo tanto, en primer lugar debemos saber el número de procesos que nuestra máquina puede llegar a soportar. Para ello podemos hacer uso de esta fórmula:</p>
<pre>MaxClients = (RAM - tamaño_del_resto_de_procesos)/(tamaño_de_procesos_apache)</pre>
<p>Para conocer el tamaño de los procesos de Apache podemos ejecutar un ps:</p>
<pre>ps -ylC httpd --sort:rss</pre>
<p>Es recomendable que los procesos de Apache ya hayan atentido algunas peticiones, de forma que podamos observar no solo el valor mínimo de memoria de los procesos, si no el máximo que alcanzan una vez atendidas las peticiones.</p>
<p>Entonces, pongamos el siguiente ejemplo:</p>
<ul>
<li>El mayor tamaño que alcanza un proceso de Apache son 98 megas</li>
<li>El resto de procesos ocupan 250 megas.</li>
<li>Tenemos 32 gigas de ram</li>
</ul>
<pre>MaxClients = (32768 - 250) / 98</pre>
<p>Por lo tanto, el número máximo de procesos Apache que se pueden arrancar son 331. Hay que tener en cuenta que esto sería un límite teórico antes de empezar a swapear. Para no estar rozando el límite recomiendo poner algo menos, 310. Con esto definimos claramente cuantos procesos podrán lanzarse para atender a las peticiones y será en función de la RAM que tengamos. Si reducimos el tamaño de los procesos de Apache podremos también aumentar el número de procesos que se pueden lanzar. Para ello, lo mejor es desactivar todos los módulos que no se vayan a utilizar.</p>
<p>En caso de recibir más peticiones de las que pueda atender las encolará y evitaremos que comience a swapear tirando la máquina abajo. Esta cola está definida por el parámetro ListenBacklog que tiene como valor por defecto 511. Como bien dice el manual de Apache, no se recomienda cambiar este valor a no ser que estemos sufriendo un ataque de flood SYN.</p>
<p>Además, tenemos que configurar los siguientes valores:</p>
<ul>
<li><strong>StartServers</strong></li>
</ul>
<p>Indica el número de procesos que arranca al iniciar el servicio. Este valor no se debe poner demasiado elevado o ralentizará mucho la puesta en marcha del servicio. Como modificar este valor no da ninguna mejora de rendimiento, lo dejamos en el valor por defecto 5.</p>
<ul>
<li><strong>MinSpareServers</strong></li>
</ul>
<p>Son el número de procesos IDLE que deben existir como mínimo en el servidor. Según vayan recibiendo peticiones Apache lanzará nuevos procesos para mantener este número mínimo. De esta forma los nuevos usuarios que se conecten a la web no tendrán que esperar a que Apache lance un proceso para ellos, si no que siempre se garantizará un mínimo, mejorando la respuesta del servicio. Aún así no es recomendado poner un valor exageradamente grande. Con 30 es suficiente.</p>
<ul>
<li><strong>MaxSpareServers</strong></li>
</ul>
<p>Es el número máximo de procesos IDLE que existirán en el servidor. Si este número se supera, Apache empezará a cerrar procesos. Poner un valor que sea el doble de MinSpareServers suele dar buenos resultados, siempre y cuando MinSpareServers no tenga un valor absurdamente grande. 60 será suficiente.</p>
<ul>
<li><strong>MaxRequestsPerChild</strong></li>
</ul>
<p>Con el fin de evitar posibles posibles fugas de memoria en la programación, se suele establecer el número de peticiones máximas que atenderá un proceso antes de morir. Poner un valor pequeño reducirá el rendimiento, ya que Apache tendrá que estár continuamente matando y lanzando nuevos procesos. Un valor recomendado por defecto es 100000, el cual es correcto.</p>
<p>Por lo tanto, el tuning quedaría de la siguiente manera:</p>
<pre>StartServer 5
MinSpareServer 30
MaxSpareServer 60
MaxClients 310
MaxRequestsPerChild 10000</pre>
<p>Además es recomendable bajar los timeous para evitar tener procesos sin hacer nada.</p>
<pre>Timeout 30</pre>
<p>Timeout esperará 30 segundos antes de cerrar una petición. Esperará para tres cosas (copy/paste del manual):</p>
<p><em>1- La cantidad de tiempo que tarda en recibir una petición GET.</em></p>
<p><em> </em></p>
<p><em>2- La cantidad de tiempo entre la recepción de paquetes TCP packets en una petición POST o PUT.</em></p>
<p><em>3- La cantidad de tiempo entre ACKs en transmisiones de paquetes TCP en las respuestas.</em></p>
<p>Por defecto el valor es 300, el cual bajo mi experiencia es realmente exágerado.</p>
<pre>KeepAliveTimeout 5</pre>
<p>Muchos clientes no ven con buenos ojos la bajada del KeepAliveTimeout, pero tiene una buena razón. En prefork, una petición se queda asociada a un proceso durante todo el KeepAlive, por lo que tener un valor muy alto terminará por agotar las conexiones en algunos picos de carga. En algunos casos incluso es posible aumentar el rendimiento deshabilitando por completo el KeepAlive, pero eso ya dependerá de la página y la programación de la misma. El valor por defecto es 15.</p>
<p>Con estos consejos tendrás una configuración mucho mejor que la de defecto y completamente ajustada a tu máquina. Si ves que el número máximo de clientes es muy poco y no puedes atender todas las peticiones, no lo aumentes a lo loco, mete más máquinas en el balanceador o aumenta la RAM. Lo más importante como ya he indicado es poner valores realistas. En sistemas con mucha carga evitar la swap es la diferencia entre poder acceder a la máquina por SSH o tener que ir al centro de datos a dar un botonazo.</p>
<p>Además es importante tunear los frontales teniendo en cuenta el backend. Si tu MySQL no puede gestionar por memoria más de 200 conexiones, es una estupidez poner en apache 310. Todo tiene que estar equilibrado.</p>
<p>vía: <a href="http://miguelangelnieto.net/?action=view&amp;url=tuning-de-apache-con-cabeza" target="_blank">http://miguelangelnieto.net/?action=view&amp;url=tuning-de-apache-con-cabeza</a></p>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/archivos-swap-y-paralelizacion-de-espacio-swap" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/06/raid0.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/archivos-swap-y-paralelizacion-de-espacio-swap" target="_top">Archivos swap y paralelización de espacio swap</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/ejecutar-scripts-en-php-con-un-php-ini-diferente" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/02/php.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/ejecutar-scripts-en-php-con-un-php-ini-diferente" target="_top">Ejecutar scripts en php con un php.ini diferente</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/servidor-lamp-en-opensuse" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/lamp.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/servidor-lamp-en-opensuse" target="_top">Servidor LAMP en openSuse</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/comandos-gnulinux-para-principiantes" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/gnu-linux.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/comandos-gnulinux-para-principiantes" target="_top">Comandos GNU/Linux para principiantes</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/dns_ico.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql" target="_top">MyDNS: Servidor DNS alternativo a bind con datos en mysql</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/tunear-apache-con-cabeza/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comprobar si un script en bash ya se está ejecutando</title>
		<link>http://miguelcarmona.name/notas-y-recortes/comprobar-si-un-script-en-bash-ya-se-esta-ejecutando</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/comprobar-si-un-script-en-bash-ya-se-esta-ejecutando#comments</comments>
		<pubDate>Fri, 07 Jan 2011 17:19:40 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>
		<category><![CDATA[webAdmin]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=684</guid>
		<description><![CDATA[Algo realmente útil para cuando necesitamos que sólo haya una ejecución del mismo script (por ejemplo, para copias de seguridad automáticas llamadas mediante cron). Lógicamente, se incluye al principio del script. if pidof -x $&#40;basename $0&#41; &#62; /dev/null; then for p in $&#40;pidof -x $&#40;basename $0&#41;&#41;; do if &#91; $p -ne $$ &#93;; then echo [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-561 aligncenter" title="bash" src="http://miguelcarmona.name/wp-content/uploads/2010/01/bash.gif" alt="bash" width="168" height="150" /></p>
<p>Algo realmente útil para cuando necesitamos que sólo haya una ejecución del mismo script (por ejemplo, para copias de seguridad automáticas llamadas mediante cron).</p>
<p>Lógicamente, se incluye al principio del script.</p>

<div class="wp_codebox"><table><tr id="p684238"><td class="code" id="p684code238"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #c20cb9; font-weight: bold;">pidof</span> <span style="color: #660033;">-x</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">basename</span> <span style="color: #007800;">$0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null; <span style="color: #000000; font-weight: bold;">then</span>
  <span style="color: #000000; font-weight: bold;">for</span> p <span style="color: #000000; font-weight: bold;">in</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">pidof</span> <span style="color: #660033;">-x</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">basename</span> <span style="color: #007800;">$0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>; <span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$p</span> <span style="color: #660033;">-ne</span> <span style="color: #007800;">$$</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
      <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;El script $0 ya se está ejecutando. Saliendo...&quot;</span>
      <span style="color: #7a0874; font-weight: bold;">exit</span>
    <span style="color: #000000; font-weight: bold;">fi</span>
  <span style="color: #000000; font-weight: bold;">done</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre></td></tr></table></div>

<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/no-guardar-los-comandos-en-el-history-para-una-determinada-sesion-histfile" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/bash.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/no-guardar-los-comandos-en-el-history-para-una-determinada-sesion-histfile" target="_top">No guardar los comandos en el history para una determinada sesión (HISTFILE)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/limitar-el-espacio-de-una-carpeta-sin-usar-cuotas-en-samba" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/10/logo-samba1.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/limitar-el-espacio-de-una-carpeta-sin-usar-cuotas-en-samba" target="_top">Limitar el espacio de una carpeta sin usar cuotas en Samba</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/crear-copias-de-seguridad-en-servidor-web-de-hosting-mediante-php" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/02/php.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/crear-copias-de-seguridad-en-servidor-web-de-hosting-mediante-php" target="_top">Crear copias de seguridad en servidor web de hosting mediante php</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/ejecutar-scripts-en-php-con-un-php-ini-diferente" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/02/php.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/ejecutar-scripts-en-php-con-un-php-ini-diferente" target="_top">Ejecutar scripts en php con un php.ini diferente</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/enjaular-a-un-usuario-conectado-por-ssh" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/ssh.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/enjaular-a-un-usuario-conectado-por-ssh" target="_top">Enjaular a un usuario conectado por ssh</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/comprobar-si-un-script-en-bash-ya-se-esta-ejecutando/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VPN con OpenSSH</title>
		<link>http://miguelcarmona.name/notas-y-recortes/vpn-con-openssh</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/vpn-con-openssh#comments</comments>
		<pubDate>Mon, 08 Nov 2010 12:20:54 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=668</guid>
		<description><![CDATA[Tras Creando túneles TCP/IP (port forwarding) con SSH: Los 8 escenarios posibles usando OpenSSH y Reenvío dinámico de puertos / montar un servidor SOCKS con SSH, puede ser buena idea hablar de cómo crear una VPN improvisada entre dos redes cuyos nodos no pueden llegar de una red a la otra exceptuando un sistema de una de las [...]]]></description>
			<content:encoded><![CDATA[<p>Tras <a href="http://www.vicente-navarro.com/blog/2009/05/24/creando-tuneles-tcpip-port-forwarding-con-ssh-los-8-escenarios-posibles-usando-openssh/">Creando túneles TCP/IP (port forwarding) con SSH: Los 8 escenarios posibles usando OpenSSH</a> y <a href="http://www.vicente-navarro.com/blog/2009/06/13/reenvio-dinamico-de-puertos-montar-un-servidor-socks-con-ssh/">Reenvío dinámico de puertos / montar un servidor SOCKS con SSH</a>, puede ser buena idea hablar de cómo crear una <a href="http://en.wikipedia.org/wiki/Virtual_private_network">VPN</a> improvisada entre dos redes cuyos nodos no pueden llegar de una red a la otra exceptuando un sistema de una de las redes que puede crear una conexión <a href="http://www.openssh.com/">OpenSSH </a>con otro sistema de la otra red.</p>
<p><a href="http://www.openssh.org/txt/release-4.3">OpenSSH permite esto desde su versión 4.3</a>, y es tan sencillo que <a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ssh&amp;sektion=1">en la página <code>man</code> de <code>ssh</code></a> se describe en apenas 5 párrafos (sección SSH-BASED VIRTUAL PRIVATE NETWORKS). La parte no tan sencilla es la de gestionar las rutas.</p>
<p><span id="more-668"></span><br />
Además, como digo, esta configuración es adecuada para una red <em>improvisada</em> y no como solución definitiva porque, como indica la propia página de manual, la sobrecarga por el protocolo SSH es muy alta:</p>
<blockquote><p>Since an SSH-based setup entails a fair amount of overhead, it may be<br />
more suited to temporary setups, such as for wireless VPNs.  More<br />
permanent VPNs are better provided by tools such as ipsecctl(8) and<br />
isakmpd(8).</p></blockquote>
<p>Vamos a trabajar con el escenario mostrado en el siguiente esquema:</p>
<p style="text-align: center;"><img class="size-full wp-image-677 aligncenter" title="ssh vpn" src="http://miguelcarmona.name/wp-content/uploads/2010/11/ssh_vpn.jpg" alt="" width="500" height="90" /></p>
<p>Tenemos dos oficinas de una misma empresa conectadas internamente y a Internet con el típico router/switch ADSL que tiene una única IP pública y que hace <a href="http://en.wikipedia.org/wiki/Network_address_translation">NAT</a> para compartirla. Ahora queremos interconectarlas, de forma que todos los nodos de una oficina accedan a los de la otra y viceversa.</p>
<p>En la primera de ellas se usa la subred 192.168.10.0/24 para la red local, y en la segunda, la subred 172.16.20.0/24. En la configuración del NAT del router ADSL de la segunda oficina abrimos el puerto 22 de SSH y lo redirigimos hacia el nodo servidorssh172 (172.16.20.2), que está ejecutando el <code>sshd</code> de OpenSSH. La IP pública de la segunda oficina debería ser fija o tal vez se podría usar un servicio de <a href="http://en.wikipedia.org/wiki/Dynamic_DNS">DNS dinámico</a>. El nodo clientessh192 (192.168.10.2) de la primera red establecerá una conexión OpenSSH con el nodo servidorssh172 (172.16.20.2) de la segunda red usando la IP pública de la segunda oficina.</p>
<p>Establecemos la conexión SSH especificando la opción &#8220;<code>-w 0:1</code>&#8220;, con la que estamos solicitando que se cree un túnel entre el interface virtual <code>tun0</code> del cliente SSH y el interfaz virtual <code>tun1</code> del servidor SSH (<a href="http://en.wikipedia.org/wiki/TUN/TAP">interfaces TUN/TAP</a>):</p>

<div class="wp_codebox"><table><tr id="p668256"><td class="code" id="p668code256"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>clientessh192<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #660033;">-w</span> <span style="color: #000000;">0</span>:<span style="color: #000000;">1</span> root<span style="color: #000000; font-weight: bold;">@</span>ip-publica-red172</pre></td></tr></table></div>

<p>Sólo los sistemas operativos que soporten este tipo de interfaces virtuales podrán crear VPNs con OpenSSH. Por ejemplo, usando el OpenSSH de Cywin en Windows nos encontraremos con el siguiente error:</p>

<div class="wp_codebox"><table><tr id="p668257"><td class="code" id="p668code257"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #660033;">-w</span> <span style="color: #000000;">0</span>:<span style="color: #000000;">1</span> root<span style="color: #000000; font-weight: bold;">@</span>ip-publica-red172
Tunnel interfaces are not supported on this platform
Tunnel device open failed.
Could not request tunnel forwarding.</pre></td></tr></table></div>

<p>Como en general sólo el usuario root puede crear interfaces TUN, necesitaremos que el usuario que lanza el <code>ssh</code> en el cliente sea <code>root</code> y que se conecte al servidor también como <code>root</code>. Además, en el servidor, el demonio <code>sshd</code>tiene que tener habilitada la opción <code>PermitTunnel</code> en el fichero <code>/etc/ssh/sshd_config</code>.</p>
<p>Si la conexión se ha establecido correctamente, encontraremos un nuevo interfaz en cada extremo (a partir de ahora suponemos que ambos extremos de la conexión SSH son Linux; en otros sistemas operativos que soporten esta característica los comandos serían diferentes):</p>

<div class="wp_codebox"><table><tr id="p668258"><td class="code" id="p668code258"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>clientessh192<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">ifconfig</span> tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          POINTOPOINT NOARP MULTICAST  MTU:<span style="color: #000000;">1500</span>  Metric:<span style="color: #000000;">1</span>
          RX packets:<span style="color: #000000;">0</span> errors:<span style="color: #000000;">0</span> dropped:<span style="color: #000000;">0</span> overruns:<span style="color: #000000;">0</span> frame:<span style="color: #000000;">0</span>
          TX packets:<span style="color: #000000;">0</span> errors:<span style="color: #000000;">0</span> dropped:<span style="color: #000000;">0</span> overruns:<span style="color: #000000;">0</span> carrier:<span style="color: #000000;">0</span>
          collisions:<span style="color: #000000;">0</span> txqueuelen:<span style="color: #000000;">500</span>
          RX bytes:<span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">0.0</span> b<span style="color: #7a0874; font-weight: bold;">&#41;</span>  TX bytes:<span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">0.0</span> b<span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>servidorssh172<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">ifconfig</span> tun1
tun1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          POINTOPOINT NOARP MULTICAST  MTU:<span style="color: #000000;">1500</span>  Metric:<span style="color: #000000;">1</span>
          RX packets:<span style="color: #000000;">0</span> errors:<span style="color: #000000;">0</span> dropped:<span style="color: #000000;">0</span> overruns:<span style="color: #000000;">0</span> frame:<span style="color: #000000;">0</span>
          TX packets:<span style="color: #000000;">0</span> errors:<span style="color: #000000;">0</span> dropped:<span style="color: #000000;">0</span> overruns:<span style="color: #000000;">0</span> carrier:<span style="color: #000000;">0</span>
          collisions:<span style="color: #000000;">0</span> txqueuelen:<span style="color: #000000;">500</span>
          RX bytes:<span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">0.0</span> b<span style="color: #7a0874; font-weight: bold;">&#41;</span>  TX bytes:<span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">0.0</span> b<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>A los que les podemos asignar una IP de la misma subred (10.0.0.0/30), puesto que están virtualmente conectadas:</p>

<div class="wp_codebox"><table><tr id="p668259"><td class="code" id="p668code259"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>clientessh192<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">ifconfig</span> tun0 10.0.0.1 netmask 255.255.255.252
<span style="color: #7a0874; font-weight: bold;">&#91;</span>servidorssh172<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">ifconfig</span> tun1 10.0.0.2 netmask 255.255.255.252</pre></td></tr></table></div>

<p>y ya podemos verificar que tenemos conectividad entre las máquinas:</p>

<div class="wp_codebox"><table><tr id="p668260"><td class="code" id="p668code260"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>clientessh192<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">ping</span> 10.0.0.2
PING 10.0.0.2 <span style="color: #7a0874; font-weight: bold;">&#40;</span>10.0.0.2<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">56</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">84</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> bytes of data.
<span style="color: #000000;">64</span> bytes from 10.0.0.2: <span style="color: #007800;">icmp_seq</span>=<span style="color: #000000;">1</span> <span style="color: #007800;">ttl</span>=<span style="color: #000000;">64</span> <span style="color: #007800;">time</span>=<span style="color: #000000;">86.3</span> ms
<span style="color: #000000;">64</span> bytes from 10.0.0.2: <span style="color: #007800;">icmp_seq</span>=<span style="color: #000000;">2</span> <span style="color: #007800;">ttl</span>=<span style="color: #000000;">64</span> <span style="color: #007800;">time</span>=<span style="color: #000000;">98.1</span> ms
<span style="color: #000000;">64</span> bytes from 10.0.0.2: <span style="color: #007800;">icmp_seq</span>=<span style="color: #000000;">3</span> <span style="color: #007800;">ttl</span>=<span style="color: #000000;">64</span> <span style="color: #007800;">time</span>=<span style="color: #000000;">61.2</span> ms
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>servidorssh172<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">ping</span> 10.0.0.1
PING 10.0.0.1 <span style="color: #7a0874; font-weight: bold;">&#40;</span>10.0.0.1<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">56</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">84</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> bytes of data.
<span style="color: #000000;">64</span> bytes from 10.0.0.1: <span style="color: #007800;">icmp_seq</span>=<span style="color: #000000;">1</span> <span style="color: #007800;">ttl</span>=<span style="color: #000000;">64</span> <span style="color: #007800;">time</span>=<span style="color: #000000;">96.2</span> ms
<span style="color: #000000;">64</span> bytes from 10.0.0.1: <span style="color: #007800;">icmp_seq</span>=<span style="color: #000000;">2</span> <span style="color: #007800;">ttl</span>=<span style="color: #000000;">64</span> <span style="color: #007800;">time</span>=<span style="color: #000000;">88.3</span> ms
<span style="color: #000000;">64</span> bytes from 10.0.0.1: <span style="color: #007800;">icmp_seq</span>=<span style="color: #000000;">3</span> <span style="color: #007800;">ttl</span>=<span style="color: #000000;">64</span> <span style="color: #007800;">time</span>=<span style="color: #000000;">81.6</span> ms</pre></td></tr></table></div>

<p>Ahora introducimos rutas en cada uno de estos nodos para que sepan llegar a la otra red:</p>

<div class="wp_codebox"><table><tr id="p668261"><td class="code" id="p668code261"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>clientessh192<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ route add <span style="color: #660033;">-net</span> 172.16.20.0 netmask 255.255.255.0 gateway 10.0.0.2
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>servidorssh172<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ route add <span style="color: #660033;">-net</span> 192.168.10.0 netmask 255.255.255.0 gateway 10.0.0.1</pre></td></tr></table></div>

<p>Si el escenario no fuera exactamente el mostrado inicialmente, sino que clientessh192 tuviera conectividad directa con servidorssh172 y no hubiera una IP pública involucrada, con estas rutas podríamos tener un problema, y es que estas rutas podrían cortar inmediatamente el SSH que mantiene el túnel. Éste es un problema real cuando, por ejemplo, tenemos una red aislada dentro de una empresa cuyos nodos pueden salir hacia fuera usando NAT, pero que no es posible entrar a ella desde fuera. Podemos hacer fácilmente un SSH saliente pero no podemos establecer conexiones entrantes, algo que queremos solucionar <em>improvisadamente</em> con una VPN por OpenSSH. Las rutas romperán la conexión SSH.</p>
<p>Usando los sistemas de nuestro ejemplo inicial: Supongamos que clientessh192 puede establecer conexión directa con servidorssh172 habiendo sólo un router que hace NAT entre ambos. Esto funciona porque en clientessh192 hay una ruta específica hacia 172.16.20/24 o porque su ruta por defecto ya va hacia el router que hace NAT. En el momento en que pongamos la ruta propuesta, el SSH se cortará instantáneamente y el túnel se perderá (de hecho, la conexión se queda colgada, porque los paquetes los enviamos por el túnel SSH, pero a su vez los paquetes de SSH también los mandamos por el túnel, causando un tremendo lío). En cambio, la ruta en servidorssh172 no causaría problemas, porque en 172.16.20.0/24 no saben nada de la red 192.168.10.0/24, ya que está NATeada.</p>
<p>En estos casos, una solución que he encontrado es hacer rutas más específicas (con máscaras más pequeñas) que no incluyan a los nodos involucrados en el SSH. Por ejemplo, si el rango de nodos a los que queremos acceder es 172.16.10.35-75, podríamos poner estas rutas en clientessh192 que no afectan a cómo se llega a 172.16.20.2:</p>

<div class="wp_codebox"><table><tr id="p668262"><td class="code" id="p668code262"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>clientessh192<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ route add <span style="color: #660033;">-net</span> 172.16.20.32 netmask 255.255.255.224 gateway 10.0.0.2
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>clientessh192<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ route add <span style="color: #660033;">-net</span> 172.16.20.64 netmask 255.255.255.224 gateway 10.0.0.2</pre></td></tr></table></div>

<p>El peor de los casos sería tener que llegar a IPs muy cercanas a las de servidorssh172, como 172.16.20.1, 172.16.20.3 o 172.16.20.4. En tal caso, tendríamos que poner rutas con máscaras muy grandes (/30, /31) y rutas directas a hosts. Las siguientes rutas permitirían llegar a .1, .3, .4 y .5:</p>

<div class="wp_codebox"><table><tr id="p668263"><td class="code" id="p668code263"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>clientessh192<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ route add <span style="color: #660033;">-host</span> 172.16.20.1 gateway 10.0.0.2
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>clientessh192<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ route add <span style="color: #660033;">-host</span> 172.16.20.3 gateway 10.0.0.2
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>clientessh192<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ route add <span style="color: #660033;">-net</span> 172.16.20.4 netmask 255.255.255.254 gateway 10.0.0.2</pre></td></tr></table></div>

<p>Pero si las rutas no crean otras complicaciones, como en el caso expuesto inicialmente, desde este momento, los paquetes IP de clientessh192 y de servidorssh172 podrían llegar a los nodos de la otra red, pero aquellos nodos no sabrían enviar sus paquetes de vuelta, puesto que no tienen una ruta para ello. Por tanto, en todos los nodos de la red 192.168.10.0/24 habría que poner esta ruta:</p>
<ul>
<li>Sistemas Linux:</li>
</ul>

<div class="wp_codebox"><table><tr id="p668264"><td class="code" id="p668code264"><pre class="bash" style="font-family:monospace;">route add <span style="color: #660033;">-net</span> 172.16.20.0 netmask 255.255.255.0 gateway 192.168.10.2</pre></td></tr></table></div>

<ul>
<li>Sistemas Windows:</li>
</ul>

<div class="wp_codebox"><table><tr id="p668265"><td class="code" id="p668code265"><pre class="bash" style="font-family:monospace;">C:<span style="color: #000000; font-weight: bold;">&gt;</span>route add 172.16.20.0 mask 255.255.255.0 192.168.10.2</pre></td></tr></table></div>

<p>En todos los nodos de la red 172.16.20.0/24 habría que poner esta ruta:</p>
<ul>
<li>Sistemas Linux:</li>
</ul>

<div class="wp_codebox"><table><tr id="p668266"><td class="code" id="p668code266"><pre class="bash" style="font-family:monospace;">route add <span style="color: #660033;">-net</span> 192.168.10.0 netmask 255.255.255.0 gateway 172.16.20.2</pre></td></tr></table></div>

<ul>
<li>Sistemas Windows:</li>
</ul>

<div class="wp_codebox"><table><tr id="p668267"><td class="code" id="p668code267"><pre class="bash" style="font-family:monospace;">C:<span style="color: #000000; font-weight: bold;">&gt;</span>route add 192.168.10.0 mask 255.255.255.0 172.16.20.2</pre></td></tr></table></div>

<p>En Linux podemos verificar las rutas introducidas con “<code>netstat -rn</code>“, en Windows con “<code>route print</code>“.</p>
<p>Pero además, tenemos que configurar que tanto el cliente como el servidor de SSH permitan que los paquetes IP vayan de unos interfaces a otros (<em>IP Forwarding</em>). Si queremos hacerlo sólo temporalmente (que es lo adecuado si estamos montando esta red para una necesidad puntual), ejecutaremos en ambos sistemas:</p>

<div class="wp_codebox"><table><tr id="p668268"><td class="code" id="p668code268"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>net<span style="color: #000000; font-weight: bold;">/</span>ipv4<span style="color: #000000; font-weight: bold;">/</span>ip_forward</pre></td></tr></table></div>

<p>Si quisiéramos que esta configuración sobreviviera a reinicios de la máquina, editaríamos <code>/etc/sysctl.conf</code> y pondríamos:</p>

<div class="wp_codebox"><table><tr id="p668269"><td class="code" id="p668code269"><pre class="bash" style="font-family:monospace;">net.ipv4.ip_forward = <span style="color: #000000;">1</span></pre></td></tr></table></div>

<p>Podemos pedirle al kernel que relea este fichero haciendo &#8220;<code>sysctl -p</code>&#8220;.</p>
<p>Además, es posible que las reglas de <a href="http://en.wikipedia.org/wiki/Iptables"><code>iptables</code></a> impidan el tráfico. Podemos ajustarlas a medida o, si conocemos los riesgos de seguridad que asumimos, podemos eliminar cualquier restricción ejecutando en ambos extremos:</p>

<div class="wp_codebox"><table><tr id="p668270"><td class="code" id="p668code270"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-F</span></pre></td></tr></table></div>

<p>A partir de este punto, todos los nodos de cada una de las redes será capaz de comunicarse libremente con todos los nodos de la otra red. Podemos verificar esto, por ejemplo, con el comando <code>traceroute</code> de Linux o el <code>tracert</code> de Windows:</p>
<ul>
<li>Sistema Windows en la red 192.168.10.0/24 llegando al nodo sistema101.red172.net (172.16.20.101) de la red 172.16.20.0/24:</li>
</ul>

<div class="wp_codebox"><table><tr id="p668271"><td class="code" id="p668code271"><pre class="bash" style="font-family:monospace;">C:<span style="color: #000000; font-weight: bold;">&gt;</span>tracert sistema101.red172.net
&nbsp;
Tracing route to sistema101.red172.net <span style="color: #7a0874; font-weight: bold;">&#91;</span>172.16.20.101<span style="color: #7a0874; font-weight: bold;">&#93;</span>
over a maximum of <span style="color: #000000;">30</span> hops:
&nbsp;
  <span style="color: #000000;">1</span>    <span style="color: #000000; font-weight: bold;">&amp;</span>lt;<span style="color: #000000;">1</span> ms    <span style="color: #000000; font-weight: bold;">&amp;</span>lt;<span style="color: #000000;">1</span> ms    <span style="color: #000000; font-weight: bold;">&amp;</span>lt;<span style="color: #000000;">1</span> ms  clientessh192.red192.net <span style="color: #7a0874; font-weight: bold;">&#91;</span>192.168.10.2<span style="color: #7a0874; font-weight: bold;">&#93;</span>
  <span style="color: #000000;">2</span>    <span style="color: #000000;">93</span> ms    <span style="color: #000000;">81</span> ms    <span style="color: #000000;">82</span> ms  10.0.0.2
  <span style="color: #000000;">3</span>    <span style="color: #000000;">83</span> ms    <span style="color: #000000;">80</span> ms    <span style="color: #000000;">81</span> ms  sistema101.red172.net <span style="color: #7a0874; font-weight: bold;">&#91;</span>172.16.20.101<span style="color: #7a0874; font-weight: bold;">&#93;</span>
&nbsp;
Trace complete.</pre></td></tr></table></div>

<ul>
<li>Sistema Linux en la red 172.16.20.0/24 llegando al nodo sistema35.red192.net (192.169.10.35) de la red 192.168.10.0/24:</li>
</ul>

<div class="wp_codebox"><table><tr id="p668272"><td class="code" id="p668code272"><pre class="bash" style="font-family:monospace;">traceroute sistema35.red192.net
traceroute to sistema35.red192.net <span style="color: #7a0874; font-weight: bold;">&#40;</span>192.169.10.35<span style="color: #7a0874; font-weight: bold;">&#41;</span>, <span style="color: #000000;">30</span> hops max, <span style="color: #000000;">38</span> byte packets
 <span style="color: #000000;">1</span>  servidorssh172.red172.net <span style="color: #7a0874; font-weight: bold;">&#40;</span>172.16.20.2<span style="color: #7a0874; font-weight: bold;">&#41;</span>  <span style="color: #000000;">0.358</span> ms  <span style="color: #000000;">0.295</span> ms  <span style="color: #000000;">0.201</span> ms
 <span style="color: #000000;">2</span>  10.0.0.1 <span style="color: #7a0874; font-weight: bold;">&#40;</span>10.0.0.1<span style="color: #7a0874; font-weight: bold;">&#41;</span>  <span style="color: #000000;">80.756</span> ms  <span style="color: #000000;">80.443</span> ms  <span style="color: #000000;">81.502</span> ms
 <span style="color: #000000;">3</span>  sistema35.red192.net <span style="color: #7a0874; font-weight: bold;">&#40;</span>192.169.10.35<span style="color: #7a0874; font-weight: bold;">&#41;</span>  <span style="color: #000000;">79.250</span> ms  <span style="color: #000000;">81.179</span> ms  <span style="color: #000000;">81.858</span> ms</pre></td></tr></table></div>

<p>Para finalizar, una curiosidad: El vetusto <a href="http://tldp.org/HOWTO/VPN-HOWTO/">VPN HOWTO</a> muestra cómo crear una VPN mediante SSH y <a href="http://en.wikipedia.org/wiki/Point-to-Point_Protocol">PPP</a>.</p>
<p>via <a href="http://www.vicente-navarro.com/blog/2010/11/05/vpn-con-openssh/">VPN con OpenSSH</a></p>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/dependencias-en-plasmoid" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2012/01/Plasma_icon.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/dependencias-en-plasmoid" target="_top">Dependencias en Plasmoid</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/05/pxe-suse10.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe" target="_top">Instalación de openSuse por red mediante tftp-pxe</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/freenx-algo-mas-que-un-terminal-server-mejorado-alternativa-a-vnc-server-en-linux" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2009/01/freenx-pantallazo-de-ejecucion-540x367.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/freenx-algo-mas-que-un-terminal-server-mejorado-alternativa-a-vnc-server-en-linux" target="_top">FreeNX - Algo más que un 'Términal Server' mejorado (alternativa a vnc server en Linux)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/acceso-ssh-sin-contrasena" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/acceso-ssh-sin-contrasena" target="_top">Acceso ssh sin contraseña</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/tunear-apache-con-cabeza" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/tunear-apache-con-cabeza" target="_top">Tunear Apache con cabeza</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/vpn-con-openssh/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Limitar el espacio de una carpeta sin usar cuotas en Samba</title>
		<link>http://miguelcarmona.name/notas-y-recortes/limitar-el-espacio-de-una-carpeta-sin-usar-cuotas-en-samba</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/limitar-el-espacio-de-una-carpeta-sin-usar-cuotas-en-samba#comments</comments>
		<pubDate>Sat, 16 Oct 2010 13:41:33 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[samba]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=656</guid>
		<description><![CDATA[Limitar el espacio de una carpeta sin usar cuotas en Samba. Hace poco me consultaron si se podía limitar el espacio de una carpeta Samba (samba share) sin tener control de usuarios es decir hay una carpeta por usuario que esta a su vez es &#8216;mapeada&#8217; a su estación de trabajo (que corre windows) pero [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-660 aligncenter" title="samba" src="http://miguelcarmona.name/wp-content/uploads/2010/10/logo-samba1.jpg" alt="" width="363" height="182" /></p>
<p>Limitar el espacio de una carpeta sin usar cuotas en Samba.</p>
<p>Hace poco me consultaron si se podía limitar el espacio de una carpeta Samba (samba share) sin tener control de usuarios es decir hay una carpeta por usuario que esta a su vez es &#8216;mapeada&#8217; a su estación de trabajo (que corre windows) pero todos los usuarios usan el mismo usuario y el mismo password para acceder cada una de sus carpetas. La pregunta me dejo cabezón, yo nunca trabaje con Samba pero se que debe de haber forma de hacer esto. Por ahora me dispuse a crear un script que le ayudara.</p>
<p><span id="more-656"></span>El script lee un archivo de texto separado por comas el cual tiene dos columnas una para el nombre del usuario y la cantidad de Megabytes que se le va a asignar a cada usuario. Usando el comando dd el script crear archivos que son formateados como EXT3 y seguidamente los monta. El archivo de texto plano luce así:</p>

<div class="wp_codebox"><table><tr id="p656276"><td class="code" id="p656code276"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>usuarios.txt
maria.perez,<span style="color: #000000;">5</span>
arnaldo.hernandez,<span style="color: #000000;">5</span>
gustavo.flores,<span style="color: #000000;">10</span>
jesus.boss,<span style="color: #000000;">5</span>
marta.hernandez,<span style="color: #000000;">5</span>
wilkneman.pascoski,<span style="color: #000000;">5</span>
tatiana.siu,<span style="color: #000000;">5</span>
alexandra.delarosa,<span style="color: #000000;">5</span></pre></td></tr></table></div>

<p>Aparte de crear, formatear y montar estos archivos el script también crea la configuración base que se le va a anexar a al smb.conf con el siguiente formato para cada usuario:</p>

<div class="wp_codebox"><table><tr id="p656277"><td class="code" id="p656code277"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>alexandra.delarosa<span style="color: #7a0874; font-weight: bold;">&#93;</span>
comment = alexandra.delarosa with 5MB
path = <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>smb_discs<span style="color: #000000; font-weight: bold;">/</span>alexandra.delarosa
<span style="color: #c20cb9; font-weight: bold;">read</span> only = no
browseable = <span style="color: #c20cb9; font-weight: bold;">yes</span>
guest ok = <span style="color: #c20cb9; font-weight: bold;">yes</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>arnaldo.hernandez<span style="color: #7a0874; font-weight: bold;">&#93;</span>
comment = arnaldo.hernandez with 5MB
path = <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>smb_discs<span style="color: #000000; font-weight: bold;">/</span>arnaldo.hernandez
<span style="color: #c20cb9; font-weight: bold;">read</span> only = no
browseable = <span style="color: #c20cb9; font-weight: bold;">yes</span>
guest ok = <span style="color: #c20cb9; font-weight: bold;">yes</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>gustavo.flores<span style="color: #7a0874; font-weight: bold;">&#93;</span>
comment = gustavo.flores with 10MB
path = <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>smb_discs<span style="color: #000000; font-weight: bold;">/</span>gustavo.flores
<span style="color: #c20cb9; font-weight: bold;">read</span> only = no
browseable = <span style="color: #c20cb9; font-weight: bold;">yes</span>
guest ok = <span style="color: #c20cb9; font-weight: bold;">yes</span></pre></td></tr></table></div>

<p>Luego seria cuestión de retocar el /etc/Samba/smb.conf y reiniciar el servicio, re-mapear esto Samba share a los usuarios y listo.</p>
<p>Aquí esta el script:</p>

<div class="wp_codebox"><table><tr id="p656278"><td class="code" id="p656code278"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">LISTAUSUARIOS</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>usuarios.txt<span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">sort</span><span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #007800;">RUTA_DISCOS</span>=<span style="color: #ff0000;">&quot;/smb_disks/smb_drives&quot;</span>
<span style="color: #007800;">MOUNT_SMB</span>=<span style="color: #ff0000;">&quot;/mnt/smb_discs&quot;</span>
<span style="color: #007800;">TMPSAMBACONF</span>=<span style="color: #ff0000;">&quot;/tmp/samba.virt.conf&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$TMPSAMBACONF</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$RUTA_DISCOS</span><span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #000000; font-weight: bold;">for</span> X <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #007800;">$LISTAUSUARIOS</span>
<span style="color: #000000; font-weight: bold;">do</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$X</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-F</span> , <span style="color: #ff0000;">'{print &quot;asignando &quot; $2 &quot;MB a usuario &quot;$1}'</span>
<span style="color: #007800;">USUARIO</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$X</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-F</span> , <span style="color: #ff0000;">'{print $1}'</span><span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #007800;">PRE_ESPACIO</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$X</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-F</span> , <span style="color: #ff0000;">'{print $2}'</span><span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #7a0874; font-weight: bold;">let</span> <span style="color: #007800;">ESPACIO</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$PRE_ESPACIO</span><span style="color: #000000; font-weight: bold;">`*</span><span style="color: #000000;">1024</span>
<span style="color: #c20cb9; font-weight: bold;">dd</span> <span style="color: #007800;">if</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>zero <span style="color: #007800;">of</span>=<span style="color: #007800;">$RUTA_DISCOS</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$USUARIO</span>.img <span style="color: #007800;">bs</span>=<span style="color: #000000;">1024</span> <span style="color: #007800;">count</span>=<span style="color: #007800;">$ESPACIO</span>
<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>mke2fs <span style="color: #660033;">-L</span> <span style="color: #007800;">$USUARIO</span> <span style="color: #660033;">-j</span> <span style="color: #007800;">$RUTA_DISCOS</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$USUARIO</span>.img
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> <span style="color: #007800;">$MOUNT_SMB</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$USUARIO</span>
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #660033;">-t</span> ext3 <span style="color: #007800;">$RUTA_DISCOS</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$USUARIO</span>.img <span style="color: #660033;">-o</span> loop <span style="color: #007800;">$MOUNT_SMB</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$USUARIO</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;[<span style="color: #007800;">$USUARIO</span>]
comment = <span style="color: #780078;">`echo $USUARIO&quot; with &quot;$PRE_ESPACIO&quot;MB&quot;`</span>
path = /mnt/smb_discs/<span style="color: #007800;">$USUARIO</span>
read only = no
browseable = yes
guest ok = yes
&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #007800;">$TMPSAMBACONF</span>
<span style="color: #000000; font-weight: bold;">done</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;espacio usado en <span style="color: #007800;">$RUTA_DISCOS</span>: &quot;</span>
<span style="color: #c20cb9; font-weight: bold;">du</span> <span style="color: #660033;">-smh</span> <span style="color: #007800;">$RUTA_DISCOS</span><span style="color: #000000; font-weight: bold;">/*</span>.img
<span style="color: #c20cb9; font-weight: bold;">du</span> <span style="color: #660033;">-smh</span> <span style="color: #007800;">$RUTA_DISCOS</span><span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #007800;">$MOUNT_SMB</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;CHECK <span style="color: #007800;">$TMPSAMBACONF</span> AND ADD IT TO YOUR /etc/samba/smb.conf&quot;</span></pre></td></tr></table></div>

<p>Como mencione anteriormente, yo nunca he trabajado con Samba en ambiente de producción yo practique o jugué un poco con Samba hace unos 5 años. este script no incluye configuraciones para estos Samba shares que proporcionen algo de seguridad. Si alguien tiene sugerencias pueden dejarlas en los comentarios.</p>
<p>vía <a href="http://www.orvtech.com/archives/2010/06/25/limitar_el_espacio_de_una_carpeta_sin_usar_cuotas_en_samba/index.html">Limitar el espacio de una carpeta sin usar cuotas en Samba. | Linux y el NSLU2</a>.</p>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/enjaular-a-un-usuario-conectado-por-ssh" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/ssh.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/enjaular-a-un-usuario-conectado-por-ssh" target="_top">Enjaular a un usuario conectado por ssh</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/montar-recursos-samba-en-gnulinux" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/smb_pantalla_principal-540x298.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/montar-recursos-samba-en-gnulinux" target="_top">Montar recursos samba en GNU/Linux</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/archivos-swap-y-paralelizacion-de-espacio-swap" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/06/raid0.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/archivos-swap-y-paralelizacion-de-espacio-swap" target="_top">Archivos swap y paralelización de espacio swap</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/comprobar-si-un-script-en-bash-ya-se-esta-ejecutando" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/bash.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/comprobar-si-un-script-en-bash-ya-se-esta-ejecutando" target="_top">Comprobar si un script en bash ya se está ejecutando</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/comandos-gnulinux-para-principiantes" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/gnu-linux.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/comandos-gnulinux-para-principiantes" target="_top">Comandos GNU/Linux para principiantes</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/limitar-el-espacio-de-una-carpeta-sin-usar-cuotas-en-samba/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Archivos swap y paralelización de espacio swap</title>
		<link>http://miguelcarmona.name/notas-y-recortes/archivos-swap-y-paralelizacion-de-espacio-swap</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/archivos-swap-y-paralelizacion-de-espacio-swap#comments</comments>
		<pubDate>Sat, 16 Oct 2010 13:18:21 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=606</guid>
		<description><![CDATA[Los archivos swap o particiones swap son archivos que residen en bajo el directorio / (Root Directory) o particiones dedicadas a expandir el espacio para la paginación de memoria (respectivamente). El sistema operativo mantiene el control sobre qué páginas están en memoria principal (RAM) y cuáles no; lleva un registro en la tabla de paginación [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://miguelcarmona.name/wp-content/uploads/2010/06/raid0.gif" alt="" width="313" height="294" /></p>
<p>Los archivos swap o particiones swap son archivos que residen en bajo el directorio / (Root Directory) o particiones dedicadas a expandir el espacio para la paginación de memoria (respectivamente). El sistema operativo mantiene el control sobre qué páginas están en memoria principal (RAM) y cuáles no; lleva un registro en la tabla de paginación y le da una prioridad mas alta a el espacio que reside en la RAM. Este espacio permite hacer creer a los programas que tienen más memoria que la disponible realmente.</p>
<p><span id="more-606"></span>Es el sistema operativo el encargado de mover procesos inactivos para la swap liberando espacio de esta forma espacio en RAM. Este procedimiento de intercambio se lleva a cabo en las dos direcciones dependiendo de las necesidades.</p>
<p>Como asigno prioridades a mis archivos o particiones swap?</p>
<p>En /etc/fstab podemos usar el parámetro &#8220;pri&#8221; y un numero entre 0 y 32767 justo después de sw. Entre mas alto sea el valor de pri mas alta sera su prioridad y mas rápido sera usado. Con Kernels nuevos si tenemos varias particiones swap podemos usarlas en paralelo como si fuese un RAID 0 asignándoles la misma prioridad.</p>
<p>Particiones swap trabajando como RAID CERO?</p>
<p>El parámetro pri no solo permite paralizar el acceso a swap sino también permite asignar mayor prioridad a discos mas rápidos, sectores de disco que son mas rápidos (los que están al inicio del disco son mas rápidos que los que están al final) y hacer un mejor uso de nuestros recursos como lo podemos ver en este ejemplo:</p>

<div class="wp_codebox"><table><tr id="p606280"><td class="code" id="p606code280"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sda2    none  swap  sw,<span style="color: #007800;">pri</span>=<span style="color: #000000;">4</span>    <span style="color: #000000;">0</span>    <span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb2    none  swap  sw,<span style="color: #007800;">pri</span>=<span style="color: #000000;">4</span>    <span style="color: #000000;">0</span>    <span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdc2    none  swap  sw,<span style="color: #007800;">pri</span>=<span style="color: #000000;">4</span>    <span style="color: #000000;">0</span>    <span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdd2    none  swap  sw,<span style="color: #007800;">pri</span>=<span style="color: #000000;">3</span>    <span style="color: #000000;">0</span>    <span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">/</span>swapfile    none  swap  sw,<span style="color: #007800;">pri</span>=<span style="color: #000000;">2</span>    <span style="color: #000000;">0</span>    <span style="color: #000000;">0</span></pre></td></tr></table></div>

<p>vía <a href="http://www.orvtech.com/archives/2010/06/07/archivos_swap_y_paralelizaci%C3%B3n_de_espacio_swap/index.html">Archivos swap y paralelización de espacio swap | Linux y el NSLU2</a>.</p>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/comandos-gnulinux-para-principiantes" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/gnu-linux.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/comandos-gnulinux-para-principiantes" target="_top">Comandos GNU/Linux para principiantes</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/tunear-apache-con-cabeza" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/tunear-apache-con-cabeza" target="_top">Tunear Apache con cabeza</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/limitar-el-espacio-de-una-carpeta-sin-usar-cuotas-en-samba" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/10/logo-samba1.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/limitar-el-espacio-de-una-carpeta-sin-usar-cuotas-en-samba" target="_top">Limitar el espacio de una carpeta sin usar cuotas en Samba</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/borrar-disco-sin-recuperacion-de-datos" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/borrar-disco-sin-recuperacion-de-datos" target="_top">Borrar disco sin recuperación de datos</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/hmvc-sistema-modular-en-codeigniter" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/codeigniter_logo-e1262900174656.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/hmvc-sistema-modular-en-codeigniter" target="_top">HMVC - Sistema modular en codeIgniter</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/archivos-swap-y-paralelizacion-de-espacio-swap/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LVM (volumenes logicos)</title>
		<link>http://miguelcarmona.name/notas-y-recortes/lvm-volumenes-logicos</link>
		<comments>http://miguelcarmona.name/notas-y-recortes/lvm-volumenes-logicos#comments</comments>
		<pubDate>Wed, 29 Sep 2010 10:26:24 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Notas y recortes]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>
		<category><![CDATA[virtualizacion]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=635</guid>
		<description><![CDATA[Manejo habitual de LVM (los comandos los proporciona el paquete lvm2 que se instala por dependencias): Para añadir una partición al disco virtual, primero tenemos que formatearla con fdisk y marcarla como 8e (Linux LVM). Después añadiremos la partición al disco virtual: vgextend disco_virtual /dev/hdc1 Para aumentar el tamaño de una partición virtual, primero aumentaremos [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-645" title="lvm" src="http://miguelcarmona.name/wp-content/uploads/2010/09/lvm.jpg" alt="lvm" width="244" height="150" /></p>
<p>Manejo habitual de LVM (los comandos los proporciona el paquete lvm2 que se instala por dependencias):</p>
<ul>
<li>Para añadir una partición al disco virtual, primero tenemos que formatearla con fdisk y marcarla como 8e (Linux LVM). Después añadiremos la partición al disco virtual:

<div class="wp_codebox"><table><tr id="p635288"><td class="code" id="p635code288"><pre class="bash" style="font-family:monospace;">vgextend disco_virtual <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>hdc1</pre></td></tr></table></div>

</li>
<li>Para aumentar el tamaño de una partición virtual, primero aumentaremos el tamaño de la partición:

<div class="wp_codebox"><table><tr id="p635289"><td class="code" id="p635code289"><pre class="bash" style="font-family:monospace;">lvextend -L+120G <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home</pre></td></tr></table></div>

<p>y luego aumentaremos el tamaño del filesystem:</p>

<div class="wp_codebox"><table><tr id="p635290"><td class="code" id="p635code290"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home
resize2fs <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home <span style="color: #000000; font-weight: bold;">/</span>home</pre></td></tr></table></div>

</li>
<li>Para reducir el tamaño de una partición virtual, primero reduciremos el tamaño del filesystem:

<div class="wp_codebox"><table><tr id="p635291"><td class="code" id="p635code291"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home
resize2fs <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home 80G
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home <span style="color: #000000; font-weight: bold;">/</span>home</pre></td></tr></table></div>

<p>y luego reduciremos el tamaño de la partición:</p>

<div class="wp_codebox"><table><tr id="p635292"><td class="code" id="p635code292"><pre class="bash" style="font-family:monospace;">lvreduce <span style="color: #660033;">-L-120G</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>disco_virtual-home</pre></td></tr></table></div>

</li>
<li>Para quitar una partición del disco virtual, primero moveremos los datos que contiene a otras particiones con el comando:

<div class="wp_codebox"><table><tr id="p635293"><td class="code" id="p635code293"><pre class="bash" style="font-family:monospace;">pvmove <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>hdc1</pre></td></tr></table></div>

<p>y luego quitaremos la partición:</p>

<div class="wp_codebox"><table><tr id="p635294"><td class="code" id="p635code294"><pre class="bash" style="font-family:monospace;">vgreduce disco_virtual <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>hdc1</pre></td></tr></table></div>

<p>Ya podemos quitar físicamente la unidad.</li>
</ul>
<p>vía <a href="http://www.estrellateyarde.org/discover/lvm-en-linux">LVM (volumenes logicos) en Linux | Estrellate y Arde</a>.</p>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/manejo-habitual-de-lvm-volumenes-logicos" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/manejo-habitual-de-lvm-volumenes-logicos" target="_top">Manejo habitual de LVM (volúmenes lógicos)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/dar-acceso-vnc-a-una-maquina-virtual-proxmox-sin-acceder-al-panel-xavifernandez-com" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/dar-acceso-vnc-a-una-maquina-virtual-proxmox-sin-acceder-al-panel-xavifernandez-com" target="_top">Dar acceso VNC a una máquina virtual Proxmox sin acceder al panel | xavifernandez.com</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/no-guardar-los-comandos-en-el-history-para-una-determinada-sesion-histfile" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/bash.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/no-guardar-los-comandos-en-el-history-para-una-determinada-sesion-histfile" target="_top">No guardar los comandos en el history para una determinada sesión (HISTFILE)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/dependencias-en-plasmoid" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2012/01/Plasma_icon.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/dependencias-en-plasmoid" target="_top">Dependencias en Plasmoid</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/configurar-servidor-y-cliente-nfs-en-opensuse-o-en-cualquier-gnulinux" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/yast_nfs_server_principal-540x346.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/configurar-servidor-y-cliente-nfs-en-opensuse-o-en-cualquier-gnulinux" target="_top">Configurar servidor y cliente NFS en openSuse o en cualquier GNU/linux</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/notas-y-recortes/lvm-volumenes-logicos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

