<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title># rm-rf.es &#187; Unix</title>
	<atom:link href="http://rm-rf.es/sobre/unix/feed/" rel="self" type="application/rss+xml" />
	<link>http://rm-rf.es</link>
	<description>Administración de sistemas, Unix, Linux, FreeBSD, Windows, hosting, dominios, servidores...</description>
	<lastBuildDate>Sat, 28 Jan 2012 19:36:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Diferencias entre soft (symbolic) y hard links</title>
		<link>http://rm-rf.es/diferencias-entre-soft-symbolic-y-hard-links/</link>
		<comments>http://rm-rf.es/diferencias-entre-soft-symbolic-y-hard-links/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 17:23:52 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[sistema ficheros]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=1757</guid>
		<description><![CDATA[Hoy vamos a tratar de comprender las diferencias que existen en Unix / Linux entre los enlaces simbólicos (soft o symbolic links) y los enlaces duros (hard links). Esquema: tldp.org &#160; Enlaces simbólicos (soft / symbolic links) La manera más sencilla de comprender que es un enlace simbólico en Linux es compararlo con el &#8220;enlace [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy vamos a tratar de comprender las <strong>diferencias que existen en Unix / Linux entre los enlaces simbólicos (soft o symbolic links) y los enlaces <em>duros</em> (hard links)</strong>.</p>
<div align="center"><img src="http://rm-rf.es/wp-content/uploads/2011/04/links.png" alt="Symbolic Link Hard links Unix" title="Symbolic Link Hard links Unix" width="295" height="401" class=" size-full wp-image-1758" /></div>
<div align="center">Esquema: <a target="_blank" href="http://tldp.org/">tldp.org</a></div>
<p>&nbsp;</p>
<h2>Enlaces simbólicos (soft / symbolic links)</h2>
<p>La manera más sencilla de comprender que es un enlace simbólico en Linux es compararlo con el &#8220;enlace directo&#8221; o &#8220;shortcut&#8221; en Windows. El fichero o directorio se encuentra en un único punto del disco y los enlaces son un <em>puntero</em> contra él. <strong>Cada enlace simbólico tiene su propio número de inodo</strong> lo que permite hacer enlaces simbólicos entre distintos sistemas de ficheros.</p>
<p>Para crear enlaces (tanto simbólicos como duros) usamos el <strong>comando ln</strong>. En este caso vamos a crear un enlace simbólico (parámetro</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">-s</div></div>
<p>) del fichero test:</p>
<pre>$ ln -s test enlace-a-test</pre>
<p>Si listamos ambos veremos que el enlace tiene el carácter</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">l</div></div>
<p>que lo identifica como enlace simbólico:</p>
<pre>$ ls -l
lrwxrwxrwx 1 alex alex 4 2011-04-27 18:59 enlace-a-test -&gt; test
-rw-r--r-- 1 alex alex 0 2011-04-27 18:58 test</pre>
<p>Para confirmar que el enlace simbólico tiene un inodo distinto usamos el comando stat:</p>
<pre>$ stat test
  File: «test»
  Size: 0         	Blocks: 0          IO Block: 4096   archivo regular vacío
Device: 804h/2052d	Inode: 73793       Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    alex)   Gid: ( 1000/    alex)
Access: 2011-04-27 18:58:53.124142406 +0200
Modify: 2011-04-27 18:58:53.124142406 +0200
Change: 2011-04-27 18:58:53.124142406 +0200

$ stat enlace-a-test
  File: «enlace-a-test» -&gt; «test»
  Size: 4         	Blocks: 0          IO Block: 4096   vínculo simbólico
Device: 804h/2052d	Inode: 77212       Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/    alex)   Gid: ( 1000/    alex)
Access: 2011-04-27 18:59:07.812139890 +0200
Modify: 2011-04-27 18:59:06.460112888 +0200
Change: 2011-04-27 18:59:06.460112888 +0200</pre>
<p>También lo podemos verificar sacando el inodo en el ls (</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">-i</div></div>
<p>):</p>
<pre>$ ls -li
77212 lrwxrwxrwx 1 alex alex 4 2011-04-27 18:59 enlace-a-test -&gt; test
73793 -rw-r--r-- 1 alex alex 0 2011-04-27 18:58 test</pre>
<p>Hay que tener en cuenta, que en Linux / Unix (al igual que con los accesos directos de Windows), <strong>si borramos el fichero o directorio origen, el enlace simbólico permanece pero los datos desaparecen para siempre</strong>.<br />
&nbsp;</p>
<h2>Enlaces duros (hard links)</h2>
<p>Los enlaces duros lo que hacen es <strong>asociar dos o más ficheros compartiendo el mismo inodo</strong>. Esto hace que cada enlace duro es una copia exacta del resto de ficheros asociados, tanto de datos como de permisos, propietario, etc. Esto implica también que cuando se realicen cambios en uno de los enlaces o en el fichero este también se realizará en el resto de enlaces.</p>
<p>Los enlaces duros <strong>no pueden hacerse contra directorios y tampoco fuera del propio sistema de ficheros</strong>.</p>
<p>Vamos a crear un hard link contra el fichero &#8220;test&#8221; de antes y veremos que efectivamente comparten inodo y que los datos se sincronizan entre ambos:</p>
<pre>$ ln test enlace-duro-test
$ ls -li
73793 -rw-r--r-- 2 alex alex 5 2011-04-27 19:09 enlace-duro-test
73793 -rw-r--r-- 2 alex alex 5 2011-04-27 19:09 test</pre>
<p>En la primera columna verificamos que tienen el mismo número de inodo y en la tercera se especifica cuando enlaces duros tiene el fichero. Si hacéis cambios en uno de ellos veréis que también se hacen en el resto. Si por ejemplo cambiamos los permisos al fichero test:</p>
<pre>$ chmod 0755 test
$ ls -li
73793 -rwxr-xr-x 2 alex alex 5 2011-04-27 19:09 enlace-duro-test
73793 -rwxr-xr-x 2 alex alex 5 2011-04-27 19:09 test</pre>
<p>Y finalmente el stat de cada uno verifica todo lo que comentamos:</p>
<pre>
$ stat test
  File: «test»
  Size: 5         	Blocks: 8          IO Block: 4096   archivo regular
Device: 804h/2052d	Inode: 73793       Links: 2
Access: (0755/-rwxr-xr-x)  Uid: ( 1000/    alex)   Gid: ( 1000/    alex)
Access: 2011-04-27 19:09:51.528132995 +0200
Modify: 2011-04-27 19:09:53.640114896 +0200
Change: 2011-04-27 19:11:42.516138726 +0200

$ stat enlace-duro-test
  File: «enlace-duro-test»
  Size: 5         	Blocks: 8          IO Block: 4096   archivo regular
Device: 804h/2052d	Inode: 73793       Links: 2
Access: (0755/-rwxr-xr-x)  Uid: ( 1000/    alex)   Gid: ( 1000/    alex)
Access: 2011-04-27 19:09:51.528132995 +0200
Modify: 2011-04-27 19:09:53.640114896 +0200
Change: 2011-04-27 19:11:42.516138726 +0200
</pre>
<p>&nbsp;</p>
<h2>Diferencias entre soft y hard links</h2>
<ul>
<li>Los enlaces simbólicos se pueden hacer con ficheros y directorios mientras que los duros solo entre ficheros.</li>
<li>Los enlaces simbólicos se pueden hacer entre distintos sistemas de ficheros, los duros no.</li>
<li>Los enlaces duros comparten el número de inodo, los simbólicos no.</li>
<li>En los enlaces simbólicos si se borra el fichero o directorio original, la información se pierde, en los duros no.</li>
<li>Los enlaces duros son copias exactas del fichero mientras que los simbólicos son meros punteros o &#8220;accesos directos&#8221;.</li>
</ul>
<p>Si se os ocurre alguna diferencia o apunte más no dudéis en comentarlo.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/como-montar-sistema-ficheros-nfs/" title="Cómo montar un sistema de ficheros NFS (Cliente Linux)">Cómo montar un sistema de ficheros NFS (Cliente Linux)</a></li><li><a href="http://rm-rf.es/permisos-especiales-setuid-setgid-sticky-bit/" title="Permisos especiales (setuid, setgid, sticky bit)">Permisos especiales (setuid, setgid, sticky bit)</a></li><li><a href="http://rm-rf.es/gestion-de-trabajos-en-bash-jobs-fg-bg/" title="Gestión de trabajos en BASH (jobs, fg, bg, &#038;&#8230;)">Gestión de trabajos en BASH (jobs, fg, bg, &#038;&#8230;)</a></li><li><a href="http://rm-rf.es/stdin-stdout-y-stderr-redirigir-en-unixlinux/" title="redirigir stdin, stdout y stderr en Unix/Linux">redirigir stdin, stdout y stderr en Unix/Linux</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/diferencias-entre-soft-symbolic-y-hard-links/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Permisos especiales (setuid, setgid, sticky bit)</title>
		<link>http://rm-rf.es/permisos-especiales-setuid-setgid-sticky-bit/</link>
		<comments>http://rm-rf.es/permisos-especiales-setuid-setgid-sticky-bit/#comments</comments>
		<pubDate>Sun, 24 Apr 2011 19:49:35 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[permisos]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=1747</guid>
		<description><![CDATA[En Unix existen tres bits de permisos especiales que pueden ser asignados a directorios y/o ficheros ejecutables, setuid (set user information), setgid (set group information) y sticky. setuid EL bit setuid es asignable a ficheros ejecutables, y permite que cuando un usuario ejecute dicho fichero, el proceso adquiera los permisos del propietario del fichero ejecutado. [...]]]></description>
			<content:encoded><![CDATA[<p>En Unix existen tres bits de permisos especiales que pueden ser asignados a directorios y/o ficheros ejecutables, <strong>setuid (set user information), setgid (set group information) y sticky</strong>.</p>
<h2>setuid</h2>
<p>EL bit setuid es asignable a ficheros ejecutables, y permite que <strong>cuando un usuario ejecute dicho fichero, el proceso adquiera los permisos del propietario del fichero ejecutado</strong>. El ejemplo más claro de fichero ejecutable y con el bit setuid el</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">su</div></div>
<p>.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">su</div></div>
<p>sirve para ejecutar una shell con identificadores de grupo y de usuario distintos al nuestro, por ello ha de tener este bit y así permitir adquirir al usuario temporalmente permisos administrativos para poder hacer el cambio de usuario.</p>
<p>Podemos ver que el bit está asignado (s) haciendo un ls:</p>
<pre>$ ls -l /bin/su
-rw<strong>s</strong>r-xr-x 1 root root 31012 2009-04-04 07:49 /bin/su</pre>
<p>Para asignar este bit a un fichero:</p>
<pre># chmod u+s /bin/su</pre>
<p>Y para quitarlo:</p>
<pre># chmod u-s /bin/su</pre>
<p>Lógicamente, conviene utilizar este bit con extremo cuidado ya que puede provocar una escalada de privilegios en situaciones inseguras. Para que veáis un ejemplo de lo que se podría hacer.</p>
<p>El usuario &#8220;alex&#8221; no tiene permisos para ejecutar correctamente un fdisk -l:</p>
<pre>alex@linux:~$ fdisk -l</pre>
<p>La salida es 0, pero si asignamos el bit setuid al binario de fdisk&#8230;</p>
<pre># ls -l /sbin/fdisk
-rwsr-xr-x 1 root root 93048 2009-02-18 20:43 /sbin/fdisk</pre>
<p>Probamos de nuevo a ejecutar fdisk con el usuario &#8220;alex&#8221; y conseguimos privilegios de root:</p>
<pre>alex@linux:~$ fdisk -l

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

Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1   *           1        3232    25959424    7  HPFS/NTFS
/dev/sda2            3233        9683    51817657+  83  Linux
/dev/sda3            9684        9855     1381590   82  Linux swap / Solaris
/dev/sda4            9856       19457    77128065   83  Linux</pre>
<p>Luego nos acordamos de volver a quitarlo:</p>
<pre># chmod u-s /sbin/fdisk</pre>
<h2>setgid</h2>
<p>Si el bit setuid permitía que el proceso adquiriera los permisos del propietario del fichero ejecutado, setgid hace lo mismo pero <strong>adquiriendo los privilegios del grupo asignado al fichero</strong>, también es asignable a directorios. Este bit entonces será muy útil cuando varios usuarios de un mismo grupo necesiten trabajar con recursos dentro de un mismo directorio.</p>
<p>En el siguiente ejemplo asignamos el bit setgid la carpeta /compartido, le asignamos permisos totales para el propietario y el grupo (770) y el bit segid (2):</p>
<pre>$ mkdir compartido &amp;&amp; chmod 2770 /compartido</pre>
<p>Si hacemos un ls veremos el bit asignado:</p>
<pre>$ ls -l
drwxrw<strong>s</strong>--- 2 alex alex      4096 2011-04-24 21:27 compartido</pre>
<p>Ahora vamos a hacer la prueba de crear un fichero dentro del directorio. Lo vamos a crear estando autenticados como root, pero al tener el bit setgid le asignará el grupo &#8220;alex&#8221; en lugar de root.</p>
<pre>$ su
# touch test
root@sistemas:/home/alex/compartido# ls -l
total 0
-rw-r--r-- 1 root alex 0 2011-04-24 21:28 test
# whoami
root</pre>
<p>En lugar de modo octal podéis asignar también los permisos setgid del siguiente modo:</p>
<pre>$ chmog g+s /compartido</pre>
<p>Y quitarlo:</p>
<pre>$ chmog g-s /compartido</pre>
<h2>sticky</h2>
<p>Este bit suele asignarse en directorios a los que todos los usuarios tienen acceso, y <strong>permite evitar que un usuario pueda borrar ficheros/directorios de otro usuario dentro de ese directorio, ya que todos tienen permiso de escritura</strong>. Seguro que lo estáis pensando, este bit se asigna siempre en /tmp y /var/tmp.</p>
<p>tmp tiene permisos 777, el bit sticky se asignaría del siguiente modo:</p>
<pre># chmod 1777 /tmp</pre>
<p>También así:</p>
<pre>chmod o+t /tmp</pre>
<p>Y para quitarlo:</p>
<pre>chmod o-t /tmp</pre>
<p>Si hacemos un ls veremos la &#8220;t&#8221; asignada:</p>
<pre>drwxrwxrw<strong>t</strong>  13 root root  4096 2011-04-24 20:55 tmp</pre>
<p>Esta es una visión general de estos tres bits especiales asignables a ficheros ejecutables y directorios en Unix/Linux.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/el-comando-umask/" title="El comando umask">El comando umask</a></li><li><a href="http://rm-rf.es/comando-chage-tiempo-de-vida-de-claves-y-usuarios-en-gnulinux/" title="Comando chage: tiempo de vida de claves y usuarios en GNU/Linux">Comando chage: tiempo de vida de claves y usuarios en GNU/Linux</a></li><li><a href="http://rm-rf.es/diferencias-entre-soft-symbolic-y-hard-links/" title="Diferencias entre soft (symbolic) y hard links">Diferencias entre soft (symbolic) y hard links</a></li><li><a href="http://rm-rf.es/gestion-de-trabajos-en-bash-jobs-fg-bg/" title="Gestión de trabajos en BASH (jobs, fg, bg, &#038;&#8230;)">Gestión de trabajos en BASH (jobs, fg, bg, &#038;&#8230;)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/permisos-especiales-setuid-setgid-sticky-bit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gestión de trabajos en BASH (jobs, fg, bg, &amp;&#8230;)</title>
		<link>http://rm-rf.es/gestion-de-trabajos-en-bash-jobs-fg-bg/</link>
		<comments>http://rm-rf.es/gestion-de-trabajos-en-bash-jobs-fg-bg/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 20:55:46 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=1664</guid>
		<description><![CDATA[Hoy vamos a ver el modo de gestionar trabajos, procesos o aplicaciones que corren dentro de un sistema Linux/Unix. El objetivo es aprender a poner un proceso que se está ejecutando en segundo plano, suspenderlo, volver a ponerlo en primer plano, reactivarlo, etc. Ejecutar un trabajo/proceso en segundo plano Para ejecutar algo en segundo plano, [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy vamos a ver el modo de <strong>gestionar trabajos, procesos o aplicaciones que corren dentro de un sistema Linux/Unix</strong>. El objetivo es aprender a poner un proceso que se está ejecutando en segundo plano, suspenderlo, volver a ponerlo en primer plano, reactivarlo, etc.</p>
<h3>Ejecutar un trabajo/proceso en segundo plano</h3>
<p>Para ejecutar algo en segundo plano, debemos utilizar el carácter &amp; y colocarlo tras el comando o proceso a ejecutar:</p>
<pre>$ top &amp;</pre>
<p>Os recomiendo también revisar esta entrada sobre el <a title="nohup: Mantiene la ejecución de un comando pese a salir de la terminal" href="http://rm-rf.es/nohup-mantiene-ejecucion-comando-pese-salir-terminal/">comando nohup</a>.</p>
<h3>Visualizar los procesos que se encuentran en segundo plano</h3>
<p>Para obtener un listado de los procesos que están ejecutándose en segundo plano utilizaremos el comando</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">bg</div></div>
<p>(<em>background</em>). La salida del mismo nos indicará cada uno de los procesos con su número de trabajo asignado entre corchetes.</p>
<pre>$ bg
[1]+ top &amp;</pre>
<h3>Traer a primer plano los procesos que se encuentran en segundo plano</h3>
<p>Para ello utilizaremos el comando</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">fg</div></div>
<p>(<em>foreground</em>) junto con el ID del trabajo anteponiéndole %:</p>
<pre>$ fg %1</pre>
<h3>Suspender un proceso que tenemos corriendo en primer plano</h3>
<p>Si estamos ejecutando un trabajo en pantalla/terminal y queremos suspenderlo colocarlo en segundo plano utilizaremos la combinación de teclas <strong>Ctrl + Z</strong>. Automáticamente nos asignará el ID de trabajo para poder gestionarlo posteriormente:</p>
<pre>top - 21:20:57 up 33 min,  2 users,  load average: 0.99, 0.98, 0.81
Tasks: 112 total,   1 running, 111 sleeping,   0 stopped,   0 zombie
Cpu(s): 23.0%us,  4.7%sy,  0.0%ni, 70.5%id,  1.6%wa,  0.1%hi,  0.0%si,  0.0%st
Mem:   2052640k total,   948528k used,  1104112k free,    55876k buffers
Swap:  1951888k total,        0k used,  1951888k free,   461444k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                  

  776 root      15  -5     0    0    0 S    0  0.0   0:00.02 kjournald2                                                                                                               

[1]+  Stopped                 top</pre>
<p>Para volver a arrancarlo en primer plano después:</p>
<pre>$ fg %1</pre>
<p>Y para ponerlo en segundo plano:</p>
<pre>$ bg %1</pre>
<p>Esto es realmente útil en casos como por ejemplo, estamos ejecutando un script que se demora más de lo esperado y necesitamos ejecutarlo sin necesidad de una terminal, lo dejamos en segundo plano y seguirá corriendo sin necesidad de ningún entorno visual. También si solo disponemos de una única terminal y necesitamos realizar varias tareas simultaneamente.</p>
<h3>Visualizar los trabajos en primer plano, suspendidos, en segundo plano</h3>
<p>El comando</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">jobs</div></div>
<p>nos permite visualizar un listado de los trabajos en el sistema junto con su estado e identificador:</p>
<pre>$ jobs
[1]   Stopped                 top
[2]-  Stopped                 top
[3]+  Stopped                 vim</pre>
<p>Un resumen práctico sería el siguiente. Arrancamos un programa (<em>por ejemplo thunderbird</em>) desde línea de comandos:</p>
<pre>$ thunderbird</pre>
<p>Ocurre que necesitamos pararlo temporalmente. En la terminal desde la que lo hemos lanzado presionamos <strong>Ctrl + Z</strong>.</p>
<p>Ahora el programa está parado a la espera de ser reactivado cuando queramos:</p>
<pre>$ thunderbird
^Z
[1]+  Stopped                 thunderbird
$ jobs
[1]+  Stopped                 thunderbird</pre>
<p>Podemos arrancarlo de nuevo pero en segundo plano:</p>
<pre>$ bg %1
[1]+ thunderbird &amp;</pre>
<p>O en primer plano:</p>
<pre>$ fg %1</pre>
<p>Recordad que es interesante revisar la ayuda (páginas man y &#8211;help) de los comandos para obtener información sobre su utilización y las posibilidades que nos ofrece.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/automatizar-tareas-ftp-dentro-de-un-script-en-bash/" title="Automatizar tareas FTP dentro de un script en BASH">Automatizar tareas FTP dentro de un script en BASH</a></li><li><a href="http://rm-rf.es/coleccion-definitiva-de-chuletas-linux-unix/" title="Colección definitiva de chuletas Linux-Unix">Colección definitiva de chuletas Linux-Unix</a></li><li><a href="http://rm-rf.es/diferencias-entre-soft-symbolic-y-hard-links/" title="Diferencias entre soft (symbolic) y hard links">Diferencias entre soft (symbolic) y hard links</a></li><li><a href="http://rm-rf.es/permisos-especiales-setuid-setgid-sticky-bit/" title="Permisos especiales (setuid, setgid, sticky bit)">Permisos especiales (setuid, setgid, sticky bit)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/gestion-de-trabajos-en-bash-jobs-fg-bg/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>redirigir stdin, stdout y stderr en Unix/Linux</title>
		<link>http://rm-rf.es/stdin-stdout-y-stderr-redirigir-en-unixlinux/</link>
		<comments>http://rm-rf.es/stdin-stdout-y-stderr-redirigir-en-unixlinux/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 20:34:17 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[stderr]]></category>
		<category><![CDATA[stdin]]></category>
		<category><![CDATA[stdout]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=1598</guid>
		<description><![CDATA[En todas las variantes de Unix tenemos tres flujos estándar que, a modo de canales, conectan la entrada y salida (I/O) de un comando/aplicación con la terminal/consola cuando se ejecuta, son los siguientes: standard input (stdin) standard output (stdout) standard error (stderr) Vamos a explicar los usos que podemos dar estos tres canales para enviar [...]]]></description>
			<content:encoded><![CDATA[<p>En todas las variantes de Unix tenemos tres flujos estándar que, a modo de canales, conectan la entrada y salida (I/O) de un comando/aplicación con la terminal/consola cuando se ejecuta, son los siguientes:</p>
<ul>
<li> standard input (stdin)</li>
<li>standard output (stdout)</li>
<li>standard error (stderr)</li>
</ul>
<p>Vamos a explicar los usos que podemos dar estos tres canales para <strong>enviar y recoger los datos que surgen de la ejecución de un script, comando o aplicación</strong>.</p>
<h3>standard input (stdin)</h3>
<p><strong>Stdin, o standard input son los datos que son enviados al programa</strong>, quizás cara al usuario de terminal sea el menos utilizado ya que lo normal suele ser interpretar los datos que el programa o comando envía, y no al revés. Normalmente stdin es texto enviado por el usuario, vamos a ver un ejemplo.</p>
<p>En un script en perl, podemos solicitar la interacción del usuario mediante STDIN, por ejemplo en este caso recogemos mediante STDIN el valor de dos variables que el usuario escribe:</p>
<pre>#!/usr/bin/perl
print "Introduce tu nombre:\n";
my $nombre = &lt;STDIN&gt;;
print "Introduce tu apellido:\n";
my $apellido = &lt;STDIN&gt;;</pre>
<p>Otro ejemplo que se me ocurre es el que puse en la entrada de <a title="Automatizar FTP" href="http://rm-rf.es/automatizar-tareas-ftp-dentro-de-un-script-en-bash/" target="_blank">automatizar comandos FTP</a>, en este caso a la conexión FTP le pasamos de antemano los comandos a ejecutar:</p>
<pre>ftp -inv direccion_ip&lt;&lt;FINFTP
comando1
comando2
comando3
FINFTP</pre>
<h3>standard output (stdout)</h3>
<p>A través de la salida estándar, &#8220;<strong>stdout</strong>&#8221; <strong>se reciben los datos que vuelca el comando o programa durante su ejecución</strong>, ejemplos sencillos de stdout serían por ejemplo el resultado de un &#8220;ls&#8221;,&#8221;cat&#8221; o cualquier otro comando de terminal. En cambio, hay otros comandos o programas que no muestran salida (a no ser que se especifique), como por ejemplo mover o copiar ficheros. Como ya sabemos cualquiera de estos flujos de datos se puede manipular, vamos a ver un ejemplo  para comprender sus posibilidades.</p>
<p>Si hicieramos un &#8220;ls&#8221; a una carpeta, la salida de datos (stdout) se muestra en nuestra terminal:</p>
<pre>$ ls
backups  cpq    games  local  log   opt  spool  www
cache    crash  lib    lock   mail  run  tmp</pre>
<p>Para manipular la salida estándar, utilizaremos el símbolo &#8220;&gt;&#8221;. Si por ejemplo quisieramos que stdout fuera redirigido a un fichero de texto, haríamos así:</p>
<pre>$ ls &gt; fichero.txt</pre>
<p>Como podréis comprobar, por pantalla no aparece el resultado del comando, sino que se ha almacenado en el fichero indicado:</p>
<pre>$ cat fichero.txt
backups  cpq    games  local  log   opt  spool  www
cache    crash  lib    lock   mail  run  tmp</pre>
<h3>standard error (stderr)</h3>
<p><strong>A través del canal stderr los programas o comandos suelen enviar el informe de error de la ejecución de un comando en caso de fallar</strong>. En nuestros scripts o comandos podemos combinar el uso de stdout y stderr para separar la salida estándar de los errores, almacenarlos en registros independientes o manipularlos por separado.</p>
<p>En el siguiente ejemplo vamos a ejecutar un &#8220;ls&#8221; con parámetros incorrectos, por defecto la salida de errores se volcará en pantalla (terminal):</p>
<pre>$ ls -7
ls: opción incorrecta -- '7'
Pruebe `ls --help' para más información.</pre>
<p>Si quisieramos almacenar los errores de la ejecución del comando en caso de suceder, podemos volcarlos usando en lugar del símbolo &#8220;&gt;&#8221; el número 2 seguido de &#8220;&gt;&#8221;, &#8220;2&gt;&#8221;:</p>
<pre>$ ls -7 2&gt; errores.log</pre>
<p>Como podéis ver los errores ya no aparecen por pantalla, pero si abrimos el fichero de log tenemos el registro del fallo:</p>
<pre>$ cat errores.log
ls: opción incorrecta -- '7'
Pruebe `ls --help' para más información.</pre>
<p>Si quisieramos redirigir tanto el stdout como stderr al mismo sitio, en lugar de especificar dos veces el destino podemos hacerlo del siguiente modo &#8220;2&gt;&amp;1&#8243;. Vamos a ver un ejemplo</p>
<p>Stdout y stderr a un fichero de log:</p>
<pre>$ ls -3 &gt; fichero.log 2&gt;&amp;1</pre>
<p>Vamos a ver un ejemplo práctico de mysql. El comando mysqldump vuelca a stdout el dump de una base de datos, seguro que nos es más útil en un fichero que por pantalla, así mismo, si surge algún error nos conviene revisarlo así que lo volcamos a otro fichero distinto de log:</p>
<pre>$ mysqldump test &gt; test.sql 2&gt; error.log</pre>
<p>Otra opción es querer que tanto stdout  como stderr vayan directamente a la basura (/dev/null):</p>
<pre>$ ls -l &gt; /dev/null 2&gt;&amp;1</pre>
<p>Este es el uso más básico que podemos dar a estos tres importantes <strong>flujos estandar Unix</strong>, si tenéis cualquier duda podéis consultarla a través de los comentarios.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/diferencias-entre-soft-symbolic-y-hard-links/" title="Diferencias entre soft (symbolic) y hard links">Diferencias entre soft (symbolic) y hard links</a></li><li><a href="http://rm-rf.es/permisos-especiales-setuid-setgid-sticky-bit/" title="Permisos especiales (setuid, setgid, sticky bit)">Permisos especiales (setuid, setgid, sticky bit)</a></li><li><a href="http://rm-rf.es/gestion-de-trabajos-en-bash-jobs-fg-bg/" title="Gestión de trabajos en BASH (jobs, fg, bg, &#038;&#8230;)">Gestión de trabajos en BASH (jobs, fg, bg, &#038;&#8230;)</a></li><li><a href="http://rm-rf.es/automatizar-tareas-ftp-dentro-de-un-script-en-bash/" title="Automatizar tareas FTP dentro de un script en BASH">Automatizar tareas FTP dentro de un script en BASH</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/stdin-stdout-y-stderr-redirigir-en-unixlinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automatizar tareas FTP dentro de un script en BASH</title>
		<link>http://rm-rf.es/automatizar-tareas-ftp-dentro-de-un-script-en-bash/</link>
		<comments>http://rm-rf.es/automatizar-tareas-ftp-dentro-de-un-script-en-bash/#comments</comments>
		<pubDate>Thu, 13 Jan 2011 15:11:49 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Scripts]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=1554</guid>
		<description><![CDATA[La automatización de tareas vía FTP dentro de un script, puede resultar muy útil para scripts de copias de seguridad por ejemplo. Vamos a ver la forma de hacerlo y las posibilidades que nos ofrece. La sintaxis básica para hacer la llamada a FTP dentro de un script en bash es la siguiente: ftp -inv [...]]]></description>
			<content:encoded><![CDATA[<p>La <strong>automatización de tareas vía FTP dentro de un script</strong>, puede resultar muy útil para scripts de copias de seguridad por ejemplo. Vamos a ver la forma de hacerlo y las posibilidades que nos ofrece.</p>
<p>La sintaxis básica para hacer la llamada a FTP dentro de un script en bash es la siguiente:</p>
<pre>ftp -inv direccion_ip&lt;&lt;FINFTP
comando1
comando2
comando3
FINFTP</pre>
<p>Comenzamos explicando los parámetros que pasamos al binario FTP,</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">i</div></div>
<p>sirve para desactivar el prompt interactivo,</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">n</div></div>
<p>sirve para impedir que se use la auto-autenticación, podéis quitarlo si vais a usar el acceso automático a través de .netrc, finalmente</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">v</div></div>
<p>es para verbose.</p>
<p>Posteriormente, dentro de la llamada a FTP ya se trata de añadir los comandos que cada uno necesite, en el siguiente ejemplo nos conectamos con usuario test y clave t3st al ftp 192.168.0.100 y subimos dos ficheros desde la carpeta local /home/local hacia la carpeta remota /.</p>
<pre>#!/bin/bash
ftp -inv 192.168.0.100&lt;&lt;FINFTP
       user test t3st
       binary
       lcd /home/local
       cd /home/download
       put fichero1.txt
       put fichero2.txt
       bye
FINFTP</pre>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/gestion-de-trabajos-en-bash-jobs-fg-bg/" title="Gestión de trabajos en BASH (jobs, fg, bg, &#038;&#8230;)">Gestión de trabajos en BASH (jobs, fg, bg, &#038;&#8230;)</a></li><li><a href="http://rm-rf.es/coleccion-definitiva-de-chuletas-linux-unix/" title="Colección definitiva de chuletas Linux-Unix">Colección definitiva de chuletas Linux-Unix</a></li><li><a href="http://rm-rf.es/diferencias-entre-soft-symbolic-y-hard-links/" title="Diferencias entre soft (symbolic) y hard links">Diferencias entre soft (symbolic) y hard links</a></li><li><a href="http://rm-rf.es/permisos-especiales-setuid-setgid-sticky-bit/" title="Permisos especiales (setuid, setgid, sticky bit)">Permisos especiales (setuid, setgid, sticky bit)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/automatizar-tareas-ftp-dentro-de-un-script-en-bash/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Unix: Mostrar listado de últimos reinicios de la máquina</title>
		<link>http://rm-rf.es/unix-mostrar-listado-ultimos-reinicios-servidor/</link>
		<comments>http://rm-rf.es/unix-mostrar-listado-ultimos-reinicios-servidor/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 20:02:10 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[reboot]]></category>
		<category><![CDATA[reinicio]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=1054</guid>
		<description><![CDATA[Una entrada rápida y concisa, si queréis ver un historico de los reinicios de una máquina, ejecutad el comando &#8220;last reboot&#8221;, mostrará la fecha y hora de los últimos reinicios así como la versión de kernel de la máquina: ~$ last reboot reboot system boot 2.6.28-11-generi Fri Oct 23 20:52 - 21:58 (01:06) reboot system [...]]]></description>
			<content:encoded><![CDATA[<p>Una entrada rápida y concisa, si queréis ver un historico de los reinicios de una máquina, ejecutad el comando &#8220;last reboot&#8221;, mostrará la fecha y hora de los últimos reinicios así como la versión de kernel de la máquina:</p>
<pre>
~$ last reboot
reboot   system boot  2.6.28-11-generi Fri Oct 23 20:52 - 21:58  (01:06)
reboot   system boot  2.6.28-11-generi Thu Oct 22 23:31 - 23:54  (00:23)
reboot   system boot  2.6.28-11-generi Thu Oct 22 21:05 - 23:18  (02:13)
</pre>
<p>Recordad que el comando &#8220;last&#8221; tiene más utilidades, como por ejemplo ver los últimos accesos a la máquina, simplemente ejecutad &#8220;last&#8221;:</p>
<pre>
~$ last
alex     pts/1        :0.0             Fri Oct 23 21:56   still logged in
alex     pts/0        :0.0             Fri Oct 23 21:54 - 21:58  (00:04)
alex     pts/0        :0.0             Fri Oct 23 21:40 - 21:47  (00:06)
alex     tty7         :0               Fri Oct 23 20:52   still logged in
</pre>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/como-configurar-un-servidor-linux-para-rebotar-automaticamente-ante-un-kernel-panic/" title="Cómo configurar un servidor Linux para rebotar automáticamente ante un Kernel Panic">Cómo configurar un servidor Linux para rebotar automáticamente ante un Kernel Panic</a></li><li><a href="http://rm-rf.es/diferencias-entre-soft-symbolic-y-hard-links/" title="Diferencias entre soft (symbolic) y hard links">Diferencias entre soft (symbolic) y hard links</a></li><li><a href="http://rm-rf.es/permisos-especiales-setuid-setgid-sticky-bit/" title="Permisos especiales (setuid, setgid, sticky bit)">Permisos especiales (setuid, setgid, sticky bit)</a></li><li><a href="http://rm-rf.es/gestion-de-trabajos-en-bash-jobs-fg-bg/" title="Gestión de trabajos en BASH (jobs, fg, bg, &#038;&#8230;)">Gestión de trabajos en BASH (jobs, fg, bg, &#038;&#8230;)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/unix-mostrar-listado-ultimos-reinicios-servidor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comando tr (unix): convertir mayúsculas a minúsculas y viceversa</title>
		<link>http://rm-rf.es/comando-tr-unix-convertir-mayusculas-minusculas/</link>
		<comments>http://rm-rf.es/comando-tr-unix-convertir-mayusculas-minusculas/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 10:21:49 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[comando]]></category>
		<category><![CDATA[convertir]]></category>
		<category><![CDATA[mayúsculas]]></category>
		<category><![CDATA[minúsculas]]></category>
		<category><![CDATA[tr]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=1029</guid>
		<description><![CDATA[Un truco rápido con el comando Unix tr, vamos a convertir las letras mayúsculas a minúsculas de un fichero. Fichero test.txt: $ cat test.txt minusculas MAYUSCULAS Convertir mayúsculas en minúsculas del fichero test.txt: $ cat test.txt &#124; tr [:upper:] [:lower:] minusculas mayusculas Convertir minúsculas en mayúsculas del fichero test.txt: $ cat test.txt &#124; tr [:lower:] [...]]]></description>
			<content:encoded><![CDATA[<p>Un truco rápido con el comando Unix tr, vamos a convertir las letras mayúsculas a minúsculas de un fichero.</p>
<p>Fichero test.txt:</p>
<pre>$ cat test.txt
minusculas
MAYUSCULAS
</pre>
<p>Convertir mayúsculas en minúsculas del fichero test.txt:</p>
<pre>$ cat test.txt | tr [:upper:] [:lower:]
minusculas
mayusculas
</pre>
<p>Convertir minúsculas en mayúsculas del fichero test.txt:</p>
<pre>$ cat test.txt | tr [:lower:] [:upper:]
MINUSCULAS
MAYUSCULAS
</pre>
<p>Por supuesto, el comando tr nos ofrece muchas más opciones para transformación de carácteres, os dejo la ayuda del comando, recordad que en las páginas man hay mucha más información.</p>
<pre>$ tr --help
Modo de empleo: tr [OPCIÓN]... CONJUNTO1 [CONJUNTO2]
Traducir, comprimir, y/o borrar caracteres de la entrada estándar,
escribiendo a la  entrada estándar.

  -c, -C, --complement    primer compliment SET1
  -d, --delete            borrar caracteres en SET1, no traducir
  -s, --squeeze-repeats   reemplazar cada secuencia de entradas de un caracter repetido
                            esta es una lista de SET1 con una sóla coincidencia
                            de ese caracter
  -t, --truncate-set1     primero truncar SET1 a la longitud de SET2
      --help     muestra esta ayuda y finaliza
      --version  informa de la versión y finaliza

Los CONJUNTOs se especifican como cadenas de caracteres. La mayoría se
representan a sí mismos.
Las secuencias válidas son las siguientes:

  \NNN            carácter con valor octal NNN (de uno a tres dígitos)
  \\              barra invertida
  \a              pitido audible (BEL)
  \b              espacio hacia atrás
  \f              salto de página
  \n              salto de línea
  \r              retorno de carro
  \t              tabulación horizontal
  \v              tabulación vertical
  CAR1-CAR2       todos los caracteres comprendidos entre CAR1 y CAR2 contados
                  en orden ascendente
  [CAR*]          en CONJUNTO2, copias de CAR hasta que se alcance la longitud
                  de CONJUNTO1
  [CAR*REPITE]    copia REPITE veces CAR; REPITE es octal si comienza con 0
  [:alnum:]       todas las letras y dígitos
  [:alpha:]       todas las letras
  [:blank:]       todos los espacios en blanco horizontales
  [:cntrl:]       todos los caracteres de control
  [:digit:]       todos los dígitos
  [:graph:]       todos los caracteres imprimibles, sin incluir el espacio
  [:lower:]       todas las letras minúsculas
  [:print:]       todos los caracteres imprimibles, incluyendo el espacio
  [:punct:]       todos los caracteres de puntuación
  [:space:]       todos los espacios en blanco horizontales y verticales
  [:upper:]       todas las letras mayúsculas
  [:xdigit:]      todos los números hexadecimales
  [=CAR=]         todos los caracteres que son igual que CAR

Se produce la traducción si no se especifican CONJUNTO1 y CONJUNTO2, siempre
y cuando no aparezca la opción -d. -t se puede usar sólo al traducir.
CONJUNTO2 se expande a la longitud de CONJUNTO1, repitiendo su último
carácter tantas veces como sea necesario.  Los caracteres que sobran en
CONJUNTO2 no se tienen en cuenta. Solamente se garantiza que [:lower:]
y [:upper:] sean expandidos en orden ascendente; si se usa en
CONJUNTO2 al traducir, sólo se pueden usar en parejas, para
especificar conversión a mayúsculas.  -s usa CONJUNTO1 si no se está
traduciendo ni borrando; si no, la compresión usa CONJUNTO2 después de
la traducción o el borrado.
</pre>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/nohup-mantiene-ejecucion-comando-pese-salir-terminal/" title="nohup: Mantiene la ejecución de un comando pese a salir de la terminal">nohup: Mantiene la ejecución de un comando pese a salir de la terminal</a></li><li><a href="http://rm-rf.es/truco-shell-unix-quitar-lineas-en-blanco-de-un-fichero-con-grep/" title="Truco shell Unix: quitar líneas en blanco de un fichero con grep">Truco shell Unix: quitar líneas en blanco de un fichero con grep</a></li><li><a href="http://rm-rf.es/como-dividir-archivos-en-sistemas-unix-con-split/" title="Cómo dividir archivos en sistemas Unix con split">Cómo dividir archivos en sistemas Unix con split</a></li><li><a href="http://rm-rf.es/unix-uso-del-comando-cut/" title="Unix: Uso del comando cut">Unix: Uso del comando cut</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/comando-tr-unix-convertir-mayusculas-minusculas/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cómo montar un sistema de ficheros NFS (Cliente Linux)</title>
		<link>http://rm-rf.es/como-montar-sistema-ficheros-nfs/</link>
		<comments>http://rm-rf.es/como-montar-sistema-ficheros-nfs/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 20:11:46 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mount]]></category>
		<category><![CDATA[nfs]]></category>
		<category><![CDATA[sistema ficheros]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=1021</guid>
		<description><![CDATA[El Network File System (Sistema de archivos de red), o NFS, es un protocolo de nivel de aplicación, según el Modelo OSI. Es utilizado para sistemas de archivos distribuido en un entorno de red de computadoras de área local. Posibilita que distintos sistemas conectados a una misma red accedan a ficheros remotos como si se [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>El Network File System (Sistema de archivos de red), o NFS, es un protocolo de nivel de aplicación, según el Modelo OSI. Es utilizado para sistemas de archivos distribuido en un entorno de red de computadoras de área local. Posibilita que distintos sistemas conectados a una misma red accedan a ficheros remotos como si se tratara de locales. <a href="http://es.wikipedia.org/wiki/Network_File_System" target="_blank">Wikipedia</a></p></blockquote>
<p>Vamos a suponer que tenemos montado un servidor con comparticiones NFS (otro día explicaré detalladamente como se monta un servidor NFS). En el caso de querer conectarnos a ese sistema de ficheros desde un equipo remoto (cliente), tendremos que hacerlo del siguiente modo:</p>
<pre>mount host:/comparticion /punto/de/montaje</pre>
<p>En el ejemplo encontramos:</p>
<ul>
<li>Host: IP o FQDN del servidor que está compartiendo vía NFS</li>
<li>/compartición: Ruta que comparte el servidor NFS</li>
<li>/punto/de/montaje: Lugar en el que queremos montar la compartición NFS (Punto de montaje)</li>
</ul>
<p>Un ejemplo real podría ser:</p>
<pre>$ mkdir /mnt/compartido
$ mount 192.168.0.199:/home/compartido /mnt/compartido</pre>
<p>Una vez realizado, si hacemos un df veremos que efectivamente la unidad ha sido montada satisfactoriamente, y tenemos acceso a ella a través de /mnt/compartido. Para que esto se mantenga tras el reinicio de la máquina, hemos de incluir la línea correspondiente en el fichero <strong>/etc/fstab</strong>. Por ejemplo, para el ejemplo anterior añadiríamos una línea similar a lo que sigue.</p>
<p>La estructura de la línea es la siguiente:</p>
<pre>&lt;server&gt;:&lt;/path/of/dir&gt; &lt;/local/mnt/point&gt; nfs &lt;options&gt; 0 0</pre>
<p>Y en nuestro ejemplo (con opcion de read-write, lectura escritura):</p>
<pre>192.168.0.199:/home/compartido /mnt/compartido nfs rw 0 0</pre>
<p>Recomiendo no obstante revisar la <a target="_blank" href="http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/ref-guide/s1-nfs-client-config.html#S2-NFS-CLIENT-CONFIG-OPTIONS">documentación de Red-Hat </a>pues detallan de forma extensa y muy buena todas las opciones disponibles.</p>
<p>Próximamente montaremos un servidor NFS desde cero.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/autofs-y-automount-para-servir-nfs/" title="Autofs y automount para servir nfs">Autofs y automount para servir nfs</a></li><li><a href="http://rm-rf.es/diferencias-entre-soft-symbolic-y-hard-links/" title="Diferencias entre soft (symbolic) y hard links">Diferencias entre soft (symbolic) y hard links</a></li><li><a href="http://rm-rf.es/storage-diferencias-entre-nas-san-y-das/" title="Storage: diferencias entre NAS, SAN y DAS">Storage: diferencias entre NAS, SAN y DAS</a></li><li><a href="http://rm-rf.es/permisos-especiales-setuid-setgid-sticky-bit/" title="Permisos especiales (setuid, setgid, sticky bit)">Permisos especiales (setuid, setgid, sticky bit)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/como-montar-sistema-ficheros-nfs/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>nohup: Mantiene la ejecución de un comando pese a salir de la terminal</title>
		<link>http://rm-rf.es/nohup-mantiene-ejecucion-comando-pese-salir-terminal/</link>
		<comments>http://rm-rf.es/nohup-mantiene-ejecucion-comando-pese-salir-terminal/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 16:19:32 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[comando]]></category>
		<category><![CDATA[nohup]]></category>
		<category><![CDATA[segundo plano]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=1010</guid>
		<description><![CDATA[El comando nohup permite mantener la ejecución de un comando (el cual le pasamos como un argumento) pese a salir de la terminal (logout), ya que hace que se ejecute de forma independiente a la sesión. Básicamente, lo que hace es ignorar la señal HUP (señal que se envía a un proceso cuando la terminal [...]]]></description>
			<content:encoded><![CDATA[<p>El comando <strong>nohup</strong> permite mantener la ejecución de un comando (el cual le pasamos como un argumento) pese a salir de la terminal (logout), ya que hace que se ejecute de forma independiente a la sesión.</p>
<p>Básicamente, lo que hace es ignorar la señal HUP (señal que se envía a un proceso cuando la terminal que lo controla se cierra), esto implica que aunque cerremos la terminal, el proceso se siga ejecutando.</p>
<p>La propia ayuda disponible en la shell (y en las páginas man) nos ayudará a entender el modo de ejecución del comando:</p>
<pre>$ nohup --help
Modo de empleo: nohup ORDEN [ARGUMENTO]...
       o bien:  nohup OPCIÓN
Ejecuta ORDEN, descartando las señales de colgar.

      --help     muestra esta ayuda y finaliza
      --version  informa de la versión y finaliza

si la entrada estándar es una terminal, redirigirla desde /dev/null.
si la salida estándar es una terminal, añadir la salida a `nohup.out` si es posible,
en caso contrario a `$HOME/nohup.out`.
si los errores van a una terminal, redirigirlos a la salida estándar.
Para guardar la salida a FILE, use `nohup COMMAND &gt; FILE`</pre>
<p>Un ejemplo sencillo sería la ejecución en segundo plano de un script cualquiera, gracias al comando nohup permitiremos la continuidad de la ejecución en caso de cualquier problema con la sesión, shell de ejecución, etc:</p>
<pre>$ nohup ./miscript.sh &#038;</pre>
<p>Por defecto, la salida del comando, que normalmente aparecería directamente en la terminal, será procesada a un fichero llamado nohup.out que aparecerá en la ruta donde nos encontremos al ejecutar el comando.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/comando-tr-unix-convertir-mayusculas-minusculas/" title="Comando tr (unix): convertir mayúsculas a minúsculas y viceversa">Comando tr (unix): convertir mayúsculas a minúsculas y viceversa</a></li><li><a href="http://rm-rf.es/truco-shell-unix-quitar-lineas-en-blanco-de-un-fichero-con-grep/" title="Truco shell Unix: quitar líneas en blanco de un fichero con grep">Truco shell Unix: quitar líneas en blanco de un fichero con grep</a></li><li><a href="http://rm-rf.es/como-dividir-archivos-en-sistemas-unix-con-split/" title="Cómo dividir archivos en sistemas Unix con split">Cómo dividir archivos en sistemas Unix con split</a></li><li><a href="http://rm-rf.es/unix-uso-del-comando-cut/" title="Unix: Uso del comando cut">Unix: Uso del comando cut</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/nohup-mantiene-ejecucion-comando-pese-salir-terminal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monitorización de CPU y actividad de discos duros con iostat</title>
		<link>http://rm-rf.es/monitorizacion-cpu-actividad-discos-duros-iostat/</link>
		<comments>http://rm-rf.es/monitorizacion-cpu-actividad-discos-duros-iostat/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 19:45:49 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[comandos linux]]></category>
		<category><![CDATA[iostat]]></category>
		<category><![CDATA[Monitorización]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=911</guid>
		<description><![CDATA[El comando iostat es utilizado para monitorizar la actividad de los dispositivos, particiones y sistemas en red (NFS) del sistema, además también muestra una media en % del uso de CPU en la máquina. Una muestra de la salida del comando iostat: $ iostat Linux 2.6.28-11-generic (sistemas) 01/07/09 _i686_ (2 CPU) avg-cpu: %user %nice %system [...]]]></description>
			<content:encoded><![CDATA[<p>El comando <strong>iostat</strong> es utilizado para monitorizar la actividad de los dispositivos, particiones y sistemas en red (NFS) del sistema, además también muestra una media en % del uso de CPU en la máquina.</p>
<p>Una muestra de la salida del comando iostat:</p>
<pre>
$ iostat
Linux 2.6.28-11-generic (sistemas) 	01/07/09 	_i686_	(2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          12,70    0,00    3,72    0,90    0,00   82,77

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               4,38       127,82        85,96    1811478    1218136
sda1              0,00         0,00         0,00          6          0
sda2              0,06         1,80         5,14      25446      72792
sda3              3,93       103,94        76,24    1473036    1080432
sda5              0,31        22,02         4,58     312118      64912
</pre>
<p>Podéis ver que para los dispositivos nos muestra en columnas lo siguiente:</p>
<p>Device: (<em>Dispositivo</em>)   tps <em>(transferencias por segundo, cada una es una única request de I/O al dispositivo</em>)   Blk_read/s (<em>Bloques de datos leidos por segundo</em>)   Blk_wrtn/s (<em>Bloques de datos escritos por segundo</em>)  Blk_read (<em>Bloques totales de datos leidos</em>)  Blk_wrtn (<em>Bloques totales de datos escritos por segundo</em>).</p>
<p>La primera vez que ejecutamos el comando, nos muestra un reporte con datos recopilados desde el último reinicio, posteriormente recopilará los datos desde la última vez que hemos ejecutado el comando. El uso y opciones del comando es el siguiente:</p>
<p>Uso: iostat [ opciones ] [ <intervalo> [ <conteo> ] ]</p>
<p>Las opciones son:</p>
<p>[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ]<br />
[ <dispositivo> [ ... ] | ALL ] [ -p [ <dispositivo> | ALL ] ]</p>
<p>Donde las opciones más comunes son el intervalo, mediante el cual podemos especificar el tiempo en segundos entre cada reporte, &#8220;-c&#8221; para mostrar el reporte de utilización de cpu, &#8220;-d&#8221; para mostrar la utilización de los dispositivos, &#8220;-m&#8221; para mostrar los datos en megas, etc.</p>
<p>Como siempre, toda la información sobre cada opción y la salida del programa la tenéis muy detallada en la página man:</p>
<pre>man iostat</pre>
<p>A continuación podéis ver unos ejemplos:</p>
<pre>iostat -d 2</pre>
<p>Mostrará el reporte de dispositivos cada dos segundos</p>
<pre>iostat -d 2 6</pre>
<p>Mostrará séis reportes con un intervalo entre cada uno de 2 segundos</p>
<pre>iostat -x hda hdb 2 6</pre>
<p>Mostrará un reporte con estadísticas extendidas, cada dos segundos y en séis ocasiones de los dispositivos  hda y hdb.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/exim-monitorizar-la-cola-de-correo-en-big-brother/" title="Exim: monitorizar la cola de correo en Big Brother">Exim: monitorizar la cola de correo en Big Brother</a></li><li><a href="http://rm-rf.es/tee-linux-mandar-la-salida-de-un-comando-a-dos-sitios/" title="tee linux: mandar la salida de un comando a dos sitios">tee linux: mandar la salida de un comando a dos sitios</a></li><li><a href="http://rm-rf.es/como-encontrar-fallos-e-inconsistencias-en-los-ficheros-passwd-y-shadow/" title="Cómo encontrar fallos e inconsistencias en los ficheros passwd y shadow">Cómo encontrar fallos e inconsistencias en los ficheros passwd y shadow</a></li><li><a href="http://rm-rf.es/como-evitar-los-saltos-de-linea-en-el-comando-unix-df/" title="Cómo evitar los saltos de línea en el comando unix df">Cómo evitar los saltos de línea en el comando unix df</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/monitorizacion-cpu-actividad-discos-duros-iostat/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

