<?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>terminal &#8211; El Cornijal de Linux</title>
	<atom:link href="https://linuxete.duckdns.org/category/terminal/feed/" rel="self" type="application/rss+xml" />
	<link>https://linuxete.duckdns.org</link>
	<description>Un blog sobre Linux</description>
	<lastBuildDate>Fri, 18 Sep 2026 21:59:27 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.2</generator>
	<item>
		<title>Empaquetado y compresión en Linux desde la terminal</title>
		<link>https://linuxete.duckdns.org/empaquetado-y-compresion-en-linux-desde-la-terminal/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=empaquetado-y-compresion-en-linux-desde-la-terminal</link>
					<comments>https://linuxete.duckdns.org/empaquetado-y-compresion-en-linux-desde-la-terminal/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Fri, 18 Sep 2026 21:32:00 +0000</pubDate>
				<category><![CDATA[Sistema]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[compresión]]></category>
		<category><![CDATA[empaquetado]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[tar]]></category>
		<category><![CDATA[Terminal_Linux]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4683</guid>

					<description><![CDATA[Cuando empezamos a gestionar sistemas y servidores Linux, una de las primeras cosas que aprendemos por necesidad es a manejar archivos comprimidos. Ya sea para empaquetar backups de configuraciones, gestionar gigas de logs, o preparar imágenes de sistema, la terminal nos ofrece muchas opciones: tar, gzip, zip&#8230; Hoy vamos a diseccionar los principales compresores, descubrir [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Cuando empezamos a gestionar sistemas y servidores Linux, una de las primeras cosas que aprendemos por necesidad es a manejar archivos comprimidos. Ya sea para empaquetar backups de configuraciones, gestionar gigas de logs, o preparar imágenes de sistema, la terminal nos ofrece muchas opciones: <code>tar</code>, <code>gzip</code>, <code>zip</code>&#8230;</p>



<p class="wp-block-paragraph">Hoy vamos a diseccionar los principales compresores, descubrir cómo sacarles el máximo partido exprimiendo nuestra CPU, y terminaremos montando un sistema de backup automatizado que nos avise por Telegram. ¡Vamos al lío!</p>



<p class="wp-block-paragraph">En sistemas GNU/Linux existe una distinción fundamental que a menudo confunde a quienes empiezan: <strong>empaquetar no es comprimir</strong>.</p>



<ul class="wp-block-list">
<li><strong>Empaquetar (Archivar):</strong> Consiste en juntar múltiples archivos y directorios (junto con sus permisos, propietarios y estructura de carpetas) en un único archivo continuo. El tamaño total casi no varía. El estándar indiscutible es <code>tar</code> (<em>Tape Archive</em>).</li>



<li><strong>Comprimir:</strong> Consiste en aplicar un algoritmo matemático a un único archivo para reducir el espacio que ocupa en disco. Herramientas nativas como <code>gzip</code>, <code>bzip2</code> o <code>xz</code><strong>solo pueden comprimir un único archivo a la vez</strong>.</li>
</ul>



<p class="wp-block-paragraph">Por esta razón se combinan ambas tareas: primero se empaqueta una carpeta con <code>tar</code> y luego se pasa por el compresor (generando archivos <code>.tar.gz</code>, <code>.tar.bz2</code> o <code>.tar.xz</code>).</p>



<h2 class="wp-block-heading">1. El comodín del administrador: El comando <code>tar</code></h2>



<p class="wp-block-paragraph">El comando <code>tar</code> permite empaquetar y comprimir en un solo paso gracias a que integra los motores de compresión directamente mediante modoles o <em>flags</em>.</p>



<h3 class="wp-block-heading">Opciones (flags) principales de <code>tar</code></h3>



<ul class="wp-block-list">
<li><strong>Operaciones básicas (elegir una):</strong>
<ul class="wp-block-list">
<li><code>-c</code> (<code>--create</code>): Crea un nuevo archivo empaquetado.</li>



<li><code>-x</code> (<code>--extract</code>): Extrae el contenido de un archivo empaquetado.</li>



<li><code>-t</code> (<code>--list</code>): Lista el contenido del archivo sin extraerlo.</li>
</ul>
</li>



<li><strong>Selección del algoritmo de compresión:</strong>
<ul class="wp-block-list">
<li><em>(Sin flag)</em>: Solo empaqueta (<code>.tar</code>).</li>



<li><code>-z</code> (<code>--gzip</code>): Filtra a través de <code>gzip</code> (<code>.tar.gz</code> o <code>.tgz</code>).</li>



<li><code>-j</code> (<code>--bzip2</code>): Filtra a través de <code>bzip2</code> (<code>.tar.bz2</code>).</li>



<li><code>-J</code> (<code>--xz</code>): Filtra a través de <code>xz</code> (<code>.tar.xz</code>).</li>
</ul>
</li>



<li><strong>Modificadores esenciales:</strong>
<ul class="wp-block-list">
<li><code>-f</code> (<code>--file</code>): Especifica el nombre del archivo de destino o lectura. <strong>Debe ser el último flag de la lista</strong>.</li>



<li><code>-v</code> (<code>--verbose</code>): Muestra el detalle del proceso en pantalla paso a paso.</li>



<li><code>-C</code> (<code>--directory</code>): Cambia a un directorio específico antes de realizar la extracción.</li>



<li><code>-p</code> (<code>--same-permissions</code>): Mantiene intactos los permisos de archivos y propietarios originales.</li>



<li><code>--exclude=PATRÓN</code>: Excluye archivos o carpetas que coincidan con el patrón indicado (ej. <code>--exclude='.git'</code>).</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Ejemplos prácticos con <code>tar</code></h3>



<pre class="wp-block-code"><code># Empaquetar sin comprimir
tar -cvf backup.tar /var/www/html

# Empaquetar y comprimir con GZIP (rápido y ligero)
tar -czvf backup.tar.gz /var/www/html

# Empaquetar y comprimir con BZIP2 (ratio intermedio)
tar -cjvf backup.tar.bz2 /var/www/html

# Empaquetar y comprimir con XZ (compresión máxima)
tar -cJvf backup.tar.xz /var/www/html

# Extraer en el directorio actual (autodetecta el formato de compresión)
tar -xvf backup.tar.xz

# Extraer el contenido dentro de una carpeta concreta
tar -xvf backup.tar.gz -C /tmp/restauracion

# Listar contenido sin extraer
tar -tvf backup.tar.xz
</code></pre>



<h2 class="wp-block-heading">2. Herramientas de compresión individuales: <code>gzip</code>, <code>bzip2</code> y <code>xz</code></h2>



<p class="wp-block-paragraph">Si trabajas con un solo archivo grande (por ejemplo, un volcado de base de datos <code>.sql</code> o una imagen <code>.img</code>), no necesitas <code>tar</code>. Puedes usar directamente los compresores.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>¡Atención!</strong> Por defecto, estas herramientas <strong>eliminan el archivo original</strong> y dejan únicamente el comprimido, a menos que utilices el flag <code>-k</code> (<code>--keep</code>).</p>
</blockquote>



<h3 class="wp-block-heading"><code>gzip</code> (GNU zip)</h3>



<p class="wp-block-paragraph">Es el estándar por su velocidad.</p>



<ul class="wp-block-list">
<li><strong>Comprimir (conservando el original):</strong><code>gzip -k archivo.txt</code></li>



<li><strong>Descomprimir:</strong><code>gunzip archivo.txt.gz</code> o <code>gzip -d archivo.txt.gz</code></li>



<li><strong>Niveles de compresión:</strong> Del <code>-1</code> (ultra rápido, menos compresión) al <code>-9</code> (máxima compresión). Por defecto aplica <code>-6</code>.</li>
</ul>



<h3 class="wp-block-heading"><code>bzip2</code></h3>



<p class="wp-block-paragraph">Ofrece mejor ratio que <code>gzip</code> a costa de usar más tiempo y CPU.</p>



<ul class="wp-block-list">
<li><strong>Comprimir (conservando el original):</strong><code>bzip2 -k archivo.txt</code></li>



<li><strong>Descomprimir:</strong><code>bunzip2 archivo.txt.bz2</code> o <code>bzip2 -d archivo.txt.bz2</code></li>
</ul>



<h3 class="wp-block-heading"><code>xz</code></h3>



<p class="wp-block-paragraph">Usa el algoritmo LZMA2. Ofrece el máximo ratio de compresión en Linux.</p>



<ul class="wp-block-list">
<li><strong>Comprimir (conservando el original):</strong><code>xz -k archivo.txt</code></li>



<li><strong>Descomprimir:</strong><code>unxz archivo.txt.xz</code> o <code>xz -d archivo.txt.xz</code></li>



<li><strong>Uso de multinúcleo (Multithreading):</strong> Por defecto usa un solo hilo. Con <code>-T0</code> utiliza todos los núcleos disponibles del procesador:<br>Bash<code>xz -k -9 -T0 imagen_sistema.img</code></li>
</ul>



<h2 class="wp-block-heading">3. Intercambio con Windows/macOS: <code>zip</code> y <code>unzip</code></h2>



<p class="wp-block-paragraph">A diferencia de los comandos nativos de Linux, <code>zip</code> empaqueta y comprime en el mismo paso y es el estándar universal para compartir archivos con otros sistemas operativos.</p>



<h3 class="wp-block-heading">Comandos y flags principales</h3>



<h4 class="wp-block-heading">Para crear archivos <code>.zip</code>:</h4>



<ul class="wp-block-list">
<li><code>-r</code> (<code>--recurse-paths</code>): <strong>Imprescindible</strong> para incluir subcarpetas recursivamente.</li>



<li><code>-e</code> (<code>--encrypt</code>): Solicita clave para cifrar el archivo.</li>



<li><code>-9</code>: Aplica compresión máxima.</li>
</ul>



<pre class="wp-block-code"><code># Comprimir una carpeta entera recursivamente
zip -r -9 archivo.zip /ruta/a/carpeta

# Comprimir y proteger con contraseña
zip -r -e seguro.zip /ruta/a/datos_sensibles</code></pre>



<h4 class="wp-block-heading">Para descomprimir <code>.zip</code>:</h4>



<ul class="wp-block-list">
<li><code>-l</code> (<code>--list</code>): Muestra el contenido sin extraer.</li>



<li><code>-d</code> (<code>--directory</code>): Especifica la carpeta de destino.</li>
</ul>



<pre class="wp-block-code"><code># Extraer en una ruta específica
unzip archivo.zip -d /home/usuario/descargas/</code></pre>



<h2 class="wp-block-heading">4. Comparativa visual de rendimiento</h2>



<p class="wp-block-paragraph">A la hora de elegir la herramienta adecuada, hay que sopesar tres factores: <strong>Ratio de compresión</strong>, <strong>Velocidad</strong> y <strong>Consumo de recursos (CPU)</strong>.</p>



<p class="wp-block-paragraph"><em>(A continuación se muestra la tarjeta comparativa global con las métricas fijas de cada herramienta):</em></p>



<div style="background-color: #f8f9fa; padding: 20px; border-radius: 8px; border: 1px solid #dee2e6; max-width: 650px; margin: 20px auto; font-family: system-ui, -apple-system, sans-serif; box-shadow: 0 4px 6px rgba(0,0,0,0.05);">
  <h3 style="margin-top: 0; color: #212529; font-size: 1.2rem; margin-bottom: 20px; text-align: center; font-weight: 700;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ca.png" alt="📊" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Comparativa de Compresores en Linux</h3>
  
  <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 15px;">
    
    <!-- GZIP -->
    <div style="background-color: #ffffff; padding: 15px; border-radius: 8px; border: 1px solid #e9ecef; box-shadow: 0 2px 4px rgba(0,0,0,0.02);">
      <div style="font-size: 1.1rem; font-weight: bold; color: #1c2d42; margin-bottom: 10px; border-bottom: 2px solid #0d6efd; padding-bottom: 4px;">gzip (.gz)</div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ratio compresión</span><span>60%</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #0d6efd; width: 60%; height: 100%;"></div></div>
      </div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a1.png" alt="⚡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Velocidad</span><span>90% (Muy Rápido)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #198754; width: 90%; height: 100%;"></div></div>
      </div>

      <div>
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Uso de CPU</span><span>20% (Bajo)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #6c757d; width: 20%; height: 100%;"></div></div>
      </div>
    </div>

    <!-- BZIP2 -->
    <div style="background-color: #ffffff; padding: 15px; border-radius: 8px; border: 1px solid #e9ecef; box-shadow: 0 2px 4px rgba(0,0,0,0.02);">
      <div style="font-size: 1.1rem; font-weight: bold; color: #1c2d42; margin-bottom: 10px; border-bottom: 2px solid #0d6efd; padding-bottom: 4px;">bzip2 (.bz2)</div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ratio compresión</span><span>75%</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #0d6efd; width: 75%; height: 100%;"></div></div>
      </div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a1.png" alt="⚡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Velocidad</span><span>50% (Medio)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #0d6efd; width: 50%; height: 100%;"></div></div>
      </div>

      <div>
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Uso de CPU</span><span>50% (Medio)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #6c757d; width: 50%; height: 100%;"></div></div>
      </div>
    </div>

    <!-- XZ -->
    <div style="background-color: #ffffff; padding: 15px; border-radius: 8px; border: 1px solid #e9ecef; box-shadow: 0 2px 4px rgba(0,0,0,0.02);">
      <div style="font-size: 1.1rem; font-weight: bold; color: #1c2d42; margin-bottom: 10px; border-bottom: 2px solid #198754; padding-bottom: 4px;">xz (.xz)</div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ratio compresión</span><span>95% (Máximo)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #198754; width: 95%; height: 100%;"></div></div>
      </div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a1.png" alt="⚡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Velocidad</span><span>20% (Lento)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #0d6efd; width: 20%; height: 100%;"></div></div>
      </div>

      <div>
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Uso de CPU</span><span>90% (Alto)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #dc3545; width: 90%; height: 100%;"></div></div>
      </div>
    </div>

    <!-- ZIP -->
    <div style="background-color: #ffffff; padding: 15px; border-radius: 8px; border: 1px solid #e9ecef; box-shadow: 0 2px 4px rgba(0,0,0,0.02);">
      <div style="font-size: 1.1rem; font-weight: bold; color: #1c2d42; margin-bottom: 10px; border-bottom: 2px solid #0d6efd; padding-bottom: 4px;">zip (.zip)</div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ratio compresión</span><span>50%</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #0d6efd; width: 50%; height: 100%;"></div></div>
      </div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a1.png" alt="⚡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Velocidad</span><span>85% (Rápido)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #0d6efd; width: 85%; height: 100%;"></div></div>
      </div>

      <div>
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Uso de CPU</span><span>15% (Muy bajo)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #6c757d; width: 15%; height: 100%;"></div></div>
      </div>
    </div>

  </div>
</div>



<h2 class="wp-block-heading">5. Resumen rápido (Cheat Sheet)</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Tarea habitual</strong></td><td><strong>Comando recomendado</strong></td></tr></thead><tbody><tr><td><strong>Empaquetar carpeta (sin comprimir)</strong></td><td><code>tar -cvf salida.tar /carpeta</code></td></tr><tr><td><strong>Comprimir carpeta rápido (<code>gzip</code>)</strong></td><td><code>tar -czvf salida.tar.gz /carpeta</code></td></tr><tr><td><strong>Comprimir carpeta máximo ahorro (<code>xz</code>)</strong></td><td><code>tar -cJvf salida.tar.xz /carpeta</code></td></tr><tr><td><strong>Extraer cualquier <code>.tar.*</code></strong></td><td><code>tar -xvf archivo.tar.*</code></td></tr><tr><td><strong>Extraer <code>.tar.*</code> en carpeta específica</strong></td><td><code>tar -xvf archivo.tar.* -C /ruta/destino</code></td></tr><tr><td><strong>Comprimir un solo archivo conservándolo</strong></td><td><code>xz -k -T0 archivo.log</code> <em>(o <code>gzip -k</code>, <code>bzip2 -k</code>)</em></td></tr><tr><td><strong>Crear zip para Windows</strong></td><td><code>zip -r archivo.zip /carpeta</code></td></tr><tr><td><strong>Descomprimir zip en carpeta</strong></td><td><code>unzip archivo.zip -d /ruta/destino</code></td></tr></tbody></table></figure>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Nivel Pro: Multihilo y Barras de Progreso</h2>



<h3 class="wp-block-heading">1. Exprimiendo la CPU: Compresión Multihilo</h3>



<h4 class="wp-block-heading">¿Por qué la compresión tradicional se siente «lenta»?</h4>



<p class="wp-block-paragraph">Los procesadores modernos (de un ordenador de sobremesa, un servidor o una Raspberry Pi) tienen <strong>varios núcleos o hilos</strong> (4, 8, 16 o más). Sin embargo, herramientas tradicionales como <code>gzip</code>, <code>bzip2</code> o <code>xz</code> fueron creadas hace décadas, cuando los procesadores solo tenían un núcleo.</p>



<p class="wp-block-paragraph">Por defecto, <strong>estos comandos solo utilizan 1 solo núcleo al 100%</strong>, dejando el resto de tu procesador totalmente ocioso. Si tienes un procesador de 8 núcleos y usas <code>gzip</code>, estás aprovechando apenas un 12,5% de la potencia total de tu máquina.</p>



<h4 class="wp-block-heading">Las versiones multihilo al rescate</h4>



<p class="wp-block-paragraph">Para solucionar esto existen versiones <strong>paralelizadas (multihilo)</strong>. Lo que hacen es dividir el archivo gigante en pequeños trozos, repartir cada trozo entre todos los núcleos de tu CPU para comprimirlos simultáneamente y luego juntarlos de nuevo.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Herramienta clásica (1 núcleo)</strong></td><td><strong>Herramienta Multihilo (Todos los núcleos)</strong></td></tr></thead><tbody><tr><td><code>gzip</code></td><td><strong><code>pigz</code></strong> (<em>Parallel Implementation of GZip</em>)</td></tr><tr><td><code>bzip2</code></td><td><strong><code>pbzip2</code></strong> (<em>Parallel BZIP2</em>)</td></tr><tr><td><code>xz</code></td><td><strong><code>pixz</code></strong> <em>(o <code>xz -T0</code> nativo)</em></td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Paso 1: Instalación</h3>



<p class="wp-block-paragraph">En la mayoría de distribuciones basadas en Debian, Ubuntu o Raspberry Pi OS, estas herramientas no vienen instaladas por defecto, pero se instalan con un solo comando:</p>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install pigz pbzip2 pixz pv</code></pre>



<h3 class="wp-block-heading">Paso 2: Uso directo de los comandos multihilo</h3>



<p class="wp-block-paragraph">Funcionan con las mismas banderas básicas que ya conoces (<code>-k</code> para mantener el original, <code>-d</code> para descomprimir, <code>-9</code> para máxima compresión):</p>



<pre class="wp-block-code"><code># Comprimir un archivo usando TODOS los núcleos de la CPU con pigz
pigz -k -9 base_de_datos.sql
# Genera: base_de_datos.sql.gz (mucho más rápido que gzip)

# Descomprimir a máxima velocidad con pigz
pigz -d base_de_datos.sql.gz

# Comprimir con pbzip2 (repartiendo carga entre núcleos)
pbzip2 -k imagen.iso
</code></pre>



<h3 class="wp-block-heading">Paso 3: Usar herramientas multihilo directamente con <code>tar</code></h3>



<p class="wp-block-paragraph">Para que <code>tar</code> no use el <code>gzip</code> tradicional sino <code>pigz</code>, se utiliza el flag <strong><code>-I</code></strong> (o <code>--use-compress-program=</code>), indicándole a <code>tar</code> qué motor de compresión externo debe emplear:</p>



<pre class="wp-block-code"><code># Empaquetar y comprimir una carpeta a la máxima velocidad posible usando pigz:
tar -I pigz -cvf backup_ultrarrapido.tar.gz /var/www/html

# Lo mismo para bzip2 multihilo (pbzip2):
tar -I pbzip2 -cvf backup.tar.bz2 /var/www/html

# Lo mismo para xz multihilo (pixz):
tar -I pixz -cvf backup.tar.xz /var/www/html</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Nota para XZ:</strong> El comando <code>xz</code> moderno ya incluye soporte multihilo sin instalar nada extra. Solo debes pasarle el flag <code>-T0</code> para usar todos los núcleos disponibles:</p>



<pre class="wp-block-code"><code>tar -I "xz -T0" -cvf backup.tar.xz /var/www/html</code></pre>
</blockquote>



<h3 class="wp-block-heading">2. Barras de progreso en tiempo real con <code>pv</code> (<em>Pipe Viewer</em>)</h3>



<p class="wp-block-paragraph">Cuando comprimes un archivo o carpeta de varios Gigabytes desde la terminal, la pantalla se queda congelada sin mostrar si el proceso va por el 10% o el 90%, ni cuánto tiempo falta.</p>



<p class="wp-block-paragraph">La herramienta <strong><code>pv</code></strong> (<em>Pipe Viewer</em>) intercepta el flujo de datos entre comandos (tuberías o <em>pipes</em><code>|</code>) y muestra una <strong>barra de progreso en tiempo real</strong> con velocidad de transferencia, tiempo transcurrido y tiempo estimado de finalización (ETA).</p>



<pre class="wp-block-code"><code>&#91;===&gt;                                       ] 12% 14.2MB/s ETA 0:04:32</code></pre>



<h3 class="wp-block-heading">Ejemplo 1: Ver el progreso al comprimir un solo archivo grande</h3>



<p class="wp-block-paragraph">En lugar de lanzar <code>gzip archivo.iso</code>, hacemos pasar el archivo a través de <code>pv</code>:</p>



<pre class="wp-block-code"><code>pv archivo.iso | pigz &gt; archivo.iso.gz</code></pre>



<ul class="wp-block-list">
<li><strong>Explicación:</strong><code> </code><code>pv</code> lee <code>archivo.iso</code>, muestra la barra de progreso en pantalla mientras lo pasa por la tubería <code>|</code> a <code>pigz</code>, y el resultado se guarda en <code>archivo.iso.gz</code>.</li>
</ul>



<h3 class="wp-block-heading">Ejemplo 2: Ver el progreso al empaquetar una carpeta con <code>tar</code></h3>



<p class="wp-block-paragraph">Para ver la barra de progreso mientras empaquetas y comprimes una carpeta entera:</p>



<pre class="wp-block-code"><code>tar -cf - /var/www/html | pv | pigz &gt; backup_con_progreso.tar.gz</code></pre>



<ul class="wp-block-list">
<li><strong><code>tar -cf - /var/www/html</code></strong>: Empaqueta la carpeta y, en vez de crear un archivo en disco directamente, manda el resultado a la salida estándar (<code>-</code>).</li>



<li><strong><code>| pv |</code></strong>: Mide los datos que van pasando y dibuja la barra de progreso.</li>



<li><strong><code>| pigz &gt; backup_con_progreso.tar.gz</code></strong>: Recibe el flujo, lo comprime usando todos los núcleos de la CPU y lo guarda finalmente en el archivo de destino.</li>
</ul>



<h3 class="wp-block-heading">Ejemplo 3: Ver el progreso al descomprimir</h3>



<pre class="wp-block-code"><code>pv backup.tar.gz | pigz -d | tar -x</code></pre>



<ul class="wp-block-list">
<li>Lee el comprimido mostrando la barra de progreso (<code>pv</code>), lo descomprime en memoria con todos los núcleos (<code>pigz -d</code>) y lo extrae en el directorio actual (<code>tar -x</code>).</li>
</ul>



<h2 class="wp-block-heading">Conclusión: Pon tu disco duro a dieta</h2>



<p class="wp-block-paragraph">Ahora que ya conoces los entresijos del empaquetamiento y la compresión en la terminal de Linux, no hay archivo grande ni directorio pesado que se te resista. Al final, esto es como un gimnasio de alto rendimiento para tus datos: la clave no está en «sudar» CPU a lo loco, sino en elegir la rutina adecuada para cada caso:</p>



<ul class="wp-block-list">
<li><strong>Si necesitas velocidad pura y cero esperas:</strong> Tira de <code>gzip</code> o, mejor aún, desata toda la potencia multihilo con <code>pigz</code>.</li>



<li><strong>Si el espacio en disco o el ancho de banda son sagrados:</strong> Dale caña con la mancuerna pesada de <code>xz</code> (o <code>pixz</code>) para arañar hasta el último megabyte.</li>



<li><strong>Y no olvides la regla de oro:</strong> <em>Empaquetar</em> junta los archivos ordenadamente con sus permisos; <em>comprimir</em> los encoge.</li>
</ul>



<p class="wp-block-paragraph">Dominar estas herramientas y sus alternativas modernas marca la diferencia entre un administrador que se queda mirando una pantalla congelada y uno que optimiza recursos e infraestructura como un profesional.</p>



<p class="wp-block-paragraph">En la próxima entrada daremos el paso definitivo: cogeremos todo este músculo de compresión multihilo y lo integraremos en un <a href="https://linuxete.duckdns.org/copias-de-seguridad-notificaciones-en-telegram-systemd-timers/"><strong>sistema de backups automatizado con Systemd y avisos directos al móvil por Telegram</strong>.</a></p>



<p class="wp-block-paragraph">¿Cuál es tu combinación favorita en el día a día? ¿Eres más de primar la velocidad o de buscar el máximo ahorro de espacio? ¡Nos leemos en los comentarios!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/empaquetado-y-compresion-en-linux-desde-la-terminal/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como entender los permisos en Linux.</title>
		<link>https://linuxete.duckdns.org/como-entender-los-permisos-en-linux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-entender-los-permisos-en-linux</link>
					<comments>https://linuxete.duckdns.org/como-entender-los-permisos-en-linux/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Wed, 21 May 2025 20:44:58 +0000</pubDate>
				<category><![CDATA[terminal]]></category>
		<category><![CDATA[Usuarios]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=2753</guid>

					<description><![CDATA[Si alguna vez has trabajado en Linux, es muy probable que te hayas topado con algo como esto: -rw-r--r--. ¿Te suena a chino? ¡No te preocupes! Hoy vamos a desentrañar el misterio de los permisos en Linux, un concepto fundamental para entender cómo funciona la seguridad y el acceso a los archivos en este sistema [&#8230;]]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator has-alpha-channel-opacity"/>



<figure class="wp-block-image aligncenter size-large is-resized"><img fetchpriority="high" decoding="async" width="1024" height="1024" src="https://linuxete.duckdns.org/wp-content/uploads/2025/05/Gemini_Generated_Image_bsgah5bsgah5bsga-1024x1024.jpeg" alt="" class="wp-image-2759" style="width:355px" srcset="https://linuxete.duckdns.org/wp-content/uploads/2025/05/Gemini_Generated_Image_bsgah5bsgah5bsga-1024x1024.jpeg 1024w, https://linuxete.duckdns.org/wp-content/uploads/2025/05/Gemini_Generated_Image_bsgah5bsgah5bsga-300x300.jpeg 300w, https://linuxete.duckdns.org/wp-content/uploads/2025/05/Gemini_Generated_Image_bsgah5bsgah5bsga-150x150.jpeg 150w, https://linuxete.duckdns.org/wp-content/uploads/2025/05/Gemini_Generated_Image_bsgah5bsgah5bsga-768x768.jpeg 768w, https://linuxete.duckdns.org/wp-content/uploads/2025/05/Gemini_Generated_Image_bsgah5bsgah5bsga-1536x1536.jpeg 1536w, https://linuxete.duckdns.org/wp-content/uploads/2025/05/Gemini_Generated_Image_bsgah5bsgah5bsga.jpeg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Si alguna vez has trabajado en Linux, es muy probable que te hayas topado con algo como esto: <code>-rw-r--r--</code>. ¿Te suena a chino? ¡No te preocupes! Hoy vamos a desentrañar el misterio de los <strong>permisos en Linux</strong>, un concepto fundamental para entender cómo funciona la seguridad y el acceso a los archivos en este sistema operativo.</p>



<p class="wp-block-paragraph">Los permisos son la columna vertebral de la seguridad en Linux. Determinan quién puede leer, escribir o ejecutar un archivo o directorio. Sin un sistema de permisos robusto, cualquiera podría modificar archivos importantes del sistema o acceder a información sensible, lo que sería un caos.</p>



<h3 class="wp-block-heading">¿Cómo se representan los Permisos?</h3>



<p class="wp-block-paragraph">Cuando ejecutas el comando <code>ls -l</code> en tu terminal, obtendrás una lista detallada de los archivos y directorios en el directorio actual, incluyendo la información de sus permisos. La cadena de 10 caracteres al principio de cada línea es la clave:</p>



<pre class="wp-block-code"><code>drwxr-xr-x 2 usuario grupo 4096 May 21 15:30 mi_directorio<br><br>-rw-r--r-- 1 usuario grupo 1024 May 21 15:30 mi_archivo.txt</code></pre>



<p class="wp-block-paragraph">Vamos a desglosar esos 10 caracteres:</p>



<ul class="wp-block-list">
<li><strong>Primer carácter:</strong> Indica el tipo de archivo.
<ul class="wp-block-list">
<li><code>-</code>: Archivo regular.</li>



<li><code>d</code>: Directorio.</li>



<li><code>l</code>: Enlace simbólico.</li>



<li>Y hay otros menos comunes como <code>c</code> para archivos de caracteres, <code>b</code> para archivos de bloques, etc.</li>
</ul>
</li>



<li><strong>Los nueve caracteres restantes:</strong> Se dividen en tres grupos de tres, representando los permisos para:
<ol class="wp-block-list">
<li><strong>Dueño (Owner):</strong> Los primeros tres caracteres (<code>rwx</code> en el ejemplo anterior) definen los permisos del usuario que es el propietario del archivo o directorio.</li>



<li><strong>Grupo (Group):</strong> Los siguientes tres caracteres (<code>r-x</code> en el ejemplo) definen los permisos para los miembros del grupo al que pertenece el archivo o directorio.</li>



<li><strong>Otros (Others):</strong> Los últimos tres caracteres (<code>r-x</code> en el ejemplo) definen los permisos para todos los demás usuarios del sistema que no son el dueño ni forman parte del grupo.</li>
</ol>
</li>
</ul>



<h3 class="wp-block-heading">Entendiendo los Permisos: rwx</h3>



<p class="wp-block-paragraph">Cada uno de estos tres caracteres tiene un significado específico:</p>



<ul class="wp-block-list">
<li><strong>r (read &#8211; lectura):</strong>
<ul class="wp-block-list">
<li><strong>Archivos:</strong> Permite ver el contenido del archivo.</li>



<li><strong>Directorios:</strong> Permite listar el contenido del directorio (es decir, ver qué archivos y subdirectorios hay dentro).</li>
</ul>
</li>



<li><strong>w (write &#8211; escritura):</strong>
<ul class="wp-block-list">
<li><strong>Archivos:</strong> Permite modificar o eliminar el archivo.</li>



<li><strong>Directorios:</strong> Permite crear, renombrar o eliminar archivos y subdirectorios dentro de ese directorio. <strong>¡Cuidado!</strong> Para eliminar un archivo, necesitas permiso de escritura en el <em>directorio</em> que lo contiene, no necesariamente en el archivo en sí.</li>
</ul>
</li>



<li><strong>x (execute &#8211; ejecución):</strong>
<ul class="wp-block-list">
<li><strong>Archivos:</strong> Permite ejecutar el archivo si es un programa o un script.</li>



<li><strong>Directorios:</strong> Permite «entrar» al directorio, es decir, acceder a sus contenidos y subdirectorios. Sin este permiso, no puedes usar <code>cd</code> para navegar a él, incluso si tienes permiso de lectura.</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Cuando un permiso no está presente, se muestra un guion (<code>-</code>) en su lugar. Por ejemplo, <code>-rw-r--r--</code> significa:</p>



<ul class="wp-block-list">
<li><strong>Dueño:</strong> Puede leer y escribir (<code>rw-</code>).</li>



<li><strong>Grupo:</strong> Solo puede leer (<code>r--</code>).</li>



<li><strong>Otros:</strong> Solo puede leer (<code>r--</code>).</li>
</ul>



<h3 class="wp-block-heading">Modificando Permisos: <code>chmod</code></h3>



<p class="wp-block-paragraph">Aquí es donde las cosas se ponen interesantes. El comando <strong><code>chmod</code></strong> (change mode) es tu mejor amigo para modificar los permisos. Hay dos formas principales de usarlo:</p>



<h4 class="wp-block-heading">1. Notación Simbólica (Letras)</h4>



<p class="wp-block-paragraph">Esta es una forma intuitiva de agregar o quitar permisos. Usamos <code>u</code> (dueño), <code>g</code> (grupo), <code>o</code> (otros) y <code>a</code> (todos). Los operadores son <code>+</code> (añadir), <code>-</code> (quitar) y <code>=</code> (establecer exactamente).</p>



<ul class="wp-block-list">
<li><strong>Ejemplos:</strong>
<ul class="wp-block-list">
<li><code>chmod u+x mi_script.sh</code>: Añade permiso de ejecución al dueño del archivo <code>mi_script.sh</code>.</li>



<li><code>chmod g-w mi_archivo.txt</code>: Quita el permiso de escritura al grupo en <code>mi_archivo.txt</code>.</li>



<li><code>chmod o=r mi_documento.pdf</code>: Establece el permiso de lectura para «otros» en <code>mi_documento.pdf</code>, quitando cualquier otro permiso que tuvieran.</li>



<li><code>chmod a+rw archivo_compartido</code>: Añade permisos de lectura y escritura para todos (<code>u</code>, <code>g</code>, <code>o</code>).</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading">2. Notación Octal (Números)</h4>



<p class="wp-block-paragraph">Esta es una forma más compacta y potente de establecer permisos, especialmente útil cuando quieres configurar varios permisos a la vez. Cada permiso tiene un valor numérico:</p>



<ul class="wp-block-list">
<li><strong>r (read):</strong> 4</li>



<li><strong>w (write):</strong> 2</li>



<li><strong>x (execute):</strong> 1</li>



<li><strong>&#8211; (no permiso):</strong> 0</li>
</ul>



<p class="wp-block-paragraph">Para cada grupo (dueño, grupo, otros), sumas los valores de los permisos deseados. Luego, concatenas estos tres números para formar un código octal de tres dígitos.</p>



<ul class="wp-block-list">
<li><strong>Ejemplos:</strong>
<ul class="wp-block-list">
<li><code>rwx</code> = 4 + 2 + 1 = 7</li>



<li><code>rw-</code> = 4 + 2 + 0 = 6</li>



<li><code>r-x</code> = 4 + 0 + 1 = 5</li>



<li><code>r--</code> = 4 + 0 + 0 = 4</li>
</ul>
</li>



<li><strong>Aplicando <code>chmod</code> con notación octal:</strong>
<ul class="wp-block-list">
<li><code><kbd>chmod 755 mi_script.sh</kbd></code>: Da permisos <code>rwx</code> al dueño, <code>r-x</code> al grupo y <code>r-x</code> a otros. Esto es común para scripts ejecutables.</li>



<li><code>chmod 644 mi_archivo.txt</code>: Da permisos <code>rw-</code> al dueño, <code>r--</code> al grupo y <code>r--</code> a otros. Esto es común para archivos de texto.</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><code>chown</code> y <code>chgrp</code>: Cambiando Dueño y Grupo</h3>



<p class="wp-block-paragraph">Además de los permisos, también puedes cambiar el propietario de un archivo o directorio y el grupo al que pertenece:</p>



<ul class="wp-block-list">
<li><strong><code>chown</code> (change owner):</strong> Cambia el dueño de un archivo o directorio.
<ul class="wp-block-list">
<li><code>chown nuevo_usuario archivo.txt</code></li>



<li><code>chown nuevo_usuario:nuevo_grupo archivo.txt</code> (Cambia dueño y grupo a la vez)</li>
</ul>
</li>



<li><strong><code>chgrp</code> (change group):</strong> Cambia el grupo de un archivo o directorio.
<ul class="wp-block-list">
<li><code>chgrp nuevo_grupo archivo.txt</code></li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Permisos por Defecto: <code>umask</code></h3>



<p class="wp-block-paragraph">Cuando creas un nuevo archivo o directorio, Linux le asigna un conjunto de permisos por defecto. Este comportamiento se controla mediante el comando <code>umask</code>. El <code>umask</code> es una máscara que <em>resta</em> permisos a los permisos máximos posibles (666 para archivos, 777 para directorios).</p>



<ul class="wp-block-list">
<li>Por ejemplo, si tu <code>umask</code> es <code>0022</code>:
<ul class="wp-block-list">
<li>Para archivos (máximo 666): <code>666 - 022 = 644</code> (rw-r&#8211;r&#8211;)</li>



<li>Para directorios (máximo 777): <code>777 - 022 = 755</code> (rwxr-xr-x)</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Puedes ver tu <code>umask</code> actual escribiendo <code>umask</code> en la terminal.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Los permisos en Linux son una herramienta poderosa y esencial para mantener tu sistema seguro y organizado. Dominarlos te dará un control total sobre tus archivos y directorios, y te permitirá trabajar de forma más eficiente y segura. Así que la próxima vez que veas esos misteriosos <code>-rw-r--r--</code>, ¡ya sabrás exactamente qué significan!</p>



<h2 class="wp-block-heading">Permisos Especiales</h2>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Más Allá de <code>rwx</code>: Desentrañando los Permisos Especiales en Linux</h3>



<p class="wp-block-paragraph">Ya hemos explorado los permisos básicos de lectura (<code>r</code>), escritura (<code>w</code>) y ejecución (<code>x</code>) en Linux, un pilar fundamental para la seguridad del sistema. Sin embargo, el universo de los permisos en Linux esconde algunas joyas adicionales que ofrecen funcionalidades avanzadas y, a veces, cruciales para la administración del sistema. Hablamos de los <strong>permisos especiales</strong>: el <code>setuid</code>, <code>setgid</code> y el <code>sticky bit</code>.</p>



<p class="wp-block-paragraph">Estos permisos, representados por un <code>s</code> o <code>t</code> en la cadena de permisos que obtenemos con <code>ls -l</code>, pueden parecer un poco intimidantes al principio. Pero una vez que entiendes su propósito, te darás cuenta de su utilidad y de por qué es tan importante manejarlos con precaución.</p>



<h3 class="wp-block-heading">1. El Bit <code>setuid</code> (s)</h3>



<p class="wp-block-paragraph">El <code>setuid</code> (abreviatura de «set user ID») es un permiso que se aplica exclusivamente a <strong>archivos ejecutables</strong>. Su función es muy específica y potente: cuando un usuario ejecuta un archivo con el bit <code>setuid</code> activado, el proceso se ejecuta con los privilegios del <strong>dueño del archivo</strong>, en lugar de los privilegios del usuario que lo está ejecutando.</p>



<p class="wp-block-paragraph">¿Cómo lo ves?</p>



<p class="wp-block-paragraph">En la cadena de permisos, verás una s en lugar de la x para el dueño:</p>



<p class="wp-block-paragraph">-rwsr-xr-x</p>



<p class="wp-block-paragraph">¿Por qué es útil?</p>



<p class="wp-block-paragraph">Imagina un programa como passwd, que permite a los usuarios cambiar su contraseña. Para hacer esto, passwd necesita escribir en un archivo que solo el usuario root tiene permiso para modificar (generalmente /etc/shadow). Si passwd no tuviera setuid activado, un usuario normal no podría cambiar su contraseña. Con setuid, passwd se ejecuta temporalmente con los privilegios de root (su dueño), permitiendo el cambio de contraseña.</p>



<p class="wp-block-paragraph">Riesgos:</p>



<p class="wp-block-paragraph">Debido a que otorga privilegios elevados, un uso indebido o una vulnerabilidad en un programa con setuid puede ser un grave riesgo de seguridad. Un atacante podría explotar un programa setuid para ejecutar código malicioso con permisos de root. Por eso, es fundamental que solo los programas de confianza y bien auditados tengan este permiso.</p>



<h3 class="wp-block-heading">2. El Bit <code>setgid</code> (s)</h3>



<p class="wp-block-paragraph">Similar al <code>setuid</code>, el <code>setgid</code> (abreviatura de «set group ID») puede aplicarse tanto a <strong>archivos ejecutables</strong> como a <strong>directorios</strong>.</p>



<ul class="wp-block-list">
<li><strong>En archivos ejecutables:</strong> Cuando un usuario ejecuta un archivo con el bit <code>setgid</code> activado, el proceso se ejecuta con los privilegios del <strong>grupo propietario del archivo</strong>, en lugar de los privilegios del grupo principal del usuario que lo ejecuta. ¿Cómo lo ves?Una s en lugar de la x para el grupo:-rwxr-sr-x <strong>Utilidad:</strong> Permite que un programa interactúe con recursos que son accesibles para un grupo específico, incluso si el usuario que lo ejecuta no pertenece a ese grupo, siempre y cuando el programa sea parte de ese grupo.</li>



<li><strong>En directorios:</strong> Este es un uso muy común y práctico. Cuando el <code>setgid</code> está activado en un directorio, todos los <strong>nuevos archivos y subdirectorios</strong> creados dentro de él heredarán automáticamente el <strong>grupo del directorio padre</strong>, en lugar del grupo principal del usuario que los creó. ¿Cómo lo ves?Una s en lugar de la x para el grupo:drwxr-sr-x <strong>Utilidad:</strong> Es ideal para directorios compartidos donde varios usuarios necesitan colaborar. Asegura que todos los archivos creados por diferentes usuarios en ese directorio pertenezcan al mismo grupo, simplificando la gestión de permisos para la colaboración.</li>
</ul>



<h3 class="wp-block-heading">3. El <code>Sticky Bit</code> (t)</h3>



<p class="wp-block-paragraph">El <code>sticky bit</code> es un permiso que se aplica exclusivamente a <strong>directorios</strong>. Su función principal es evitar que los usuarios eliminen o renombren archivos de otros usuarios dentro de un directorio compartido, incluso si tienen permisos de escritura sobre ese directorio.</p>



<p class="wp-block-paragraph">¿Cómo lo ves?</p>



<p class="wp-block-paragraph">Una t en lugar de la x para «otros»:</p>



<p class="wp-block-paragraph">drwxrwxrwt</p>



<p class="wp-block-paragraph"><strong>Utilidad:</strong> El ejemplo más claro y común es el directorio <code>/tmp</code>. En este directorio, cualquier usuario puede crear archivos y directorios. Sin el <code>sticky bit</code>, un usuario malicioso podría eliminar los archivos temporales de otro usuario. Con el <code>sticky bit</code> activado, un usuario solo puede eliminar o renombrar los archivos y directorios que él mismo posee dentro de <code>/tmp</code>.</p>



<h3 class="wp-block-heading">Cómo Establecer los Permisos Especiales con <code>chmod</code></h3>



<p class="wp-block-paragraph">Al igual que los permisos básicos, los permisos especiales se pueden establecer utilizando el comando <code>chmod</code>, tanto con la notación simbólica como con la octal.</p>



<h4 class="wp-block-heading">Notación Simbólica:</h4>



<ul class="wp-block-list">
<li><strong><code>setuid</code>:</strong><code>u+s</code>
<ul class="wp-block-list">
<li><code>chmod u+s mi_programa</code></li>
</ul>
</li>



<li><strong><code>setgid</code>:</strong><code>g+s</code>
<ul class="wp-block-list">
<li><code>chmod g+s mi_directorio_compartido</code></li>
</ul>
</li>



<li><strong><code>sticky bit</code>:</strong><code>o+t</code>
<ul class="wp-block-list">
<li><code>chmod o+t /var/tmp</code></li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading">Notación Octal:</h4>



<p class="wp-block-paragraph">Los permisos especiales tienen un dígito octal adicional que se coloca al principio de los tres dígitos de permisos básicos (dueño, grupo, otros).</p>



<ul class="wp-block-list">
<li><code>setuid</code>: 4</li>



<li><code>setgid</code>: 2</li>



<li><code>sticky bit</code>: 1</li>
</ul>



<p class="wp-block-paragraph">Para aplicar, sumas el valor del permiso especial que quieres establecer y lo antepones al número octal de los permisos básicos.</p>



<ul class="wp-block-list">
<li><strong>Ejemplos:</strong><ul><li><strong><code>setuid</code> en un ejecutable (755):</strong> <code>chmod 4755 mi_programa</code> (El 4 activa <code>setuid</code>, luego 755 para <code>rwxr-xr-x</code>)</li><li><strong><code>setgid</code> en un directorio (770):</strong> <code>chmod 2770 mi_directorio_compartido</code> (El 2 activa <code>setgid</code>, luego 770 para <code>rwxrwx---</code>)</li><li><strong><code>sticky bit</code> en un directorio (777):</strong> <code>chmod 1777 /tmp</code> (El 1 activa <code>sticky bit</code>, luego 777 para <code>rwxrwxrwx</code>)</li></ul>Si un permiso especial se activa pero el permiso de ejecución (<code>x</code>) no está presente para el grupo o «otros», la <code>s</code> o <code>t</code> se mostrará en mayúscula (<code>S</code> o <code>T</code>), indicando que el permiso especial está presente, pero el bit de ejecución está ausente.</li>
</ul>



<h3 class="wp-block-heading">Conclusión</h3>



<p class="wp-block-paragraph">Los permisos especiales en Linux son herramientas poderosas que, cuando se usan correctamente, mejoran la funcionalidad y la seguridad del sistema. Sin embargo, su poder conlleva una gran responsabilidad. El uso descuidado de <code>setuid</code> y <code>setgid</code> en programas no confiables puede abrir brechas de seguridad significativas.</p>



<p class="wp-block-paragraph">Entender cuándo y cómo aplicar estos permisos, junto con los permisos básicos, es un paso crucial para cualquier administrador de sistemas o usuario avanzado de Linux. Así que, la próxima vez que veas una <code>s</code> o una <code>t</code> en un listado de permisos, ya sabrás que estás frente a algo más que simple lectura, escritura o ejecución. ¡Estás ante una capa adicional de control y seguridad en tu sistema Linux!</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/como-entender-los-permisos-en-linux/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Conexiones seguras con SSH</title>
		<link>https://linuxete.duckdns.org/conexiones-seguras-con-ssh/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=conexiones-seguras-con-ssh</link>
					<comments>https://linuxete.duckdns.org/conexiones-seguras-con-ssh/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sat, 30 Nov 2024 21:18:35 +0000</pubDate>
				<category><![CDATA[server]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[openssh-client]]></category>
		<category><![CDATA[openssh-server]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[ssh Debian 12]]></category>
		<category><![CDATA[ssh linux]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=2096</guid>

					<description><![CDATA[SSH, (Secure Shell), es un protocolo de administración remota por el cual los usuarios pueden controlar sus equipos a través de Internet. Se creó para sustituir a Telnet, un protocolo no cifrado que no ofrecía ningún tipo de seguridad a los usuarios. En cambio, SSH hace uso de las técnicas de criptografía más innovadoras con [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="728" height="250" src="https://linuxete.duckdns.org/wp-content/uploads/2024/11/ssh.jpg" alt="" class="wp-image-2119" srcset="https://linuxete.duckdns.org/wp-content/uploads/2024/11/ssh.jpg 728w, https://linuxete.duckdns.org/wp-content/uploads/2024/11/ssh-300x103.jpg 300w" sizes="(max-width: 728px) 100vw, 728px" /></figure>



<p class="wp-block-paragraph">SSH, (Secure Shell), es un protocolo de administración remota por el cual los usuarios pueden controlar sus equipos a través de Internet.</p>



<p class="wp-block-paragraph">Se creó para sustituir a Telnet, un protocolo no cifrado que no ofrecía ningún tipo de seguridad a los usuarios. En cambio, SSH hace uso de las técnicas de criptografía más innovadoras con el claro objetivo de que todas las comunicaciones realizadas entre los usuarios y los servidores remotos sean seguras. Dispone de una herramienta que permite autenticar al usuario remoto para posteriormente transferir las entradas desde el cliente al host y, finalmente, realizar la salida de vuelta a los usuarios.</p>



<h3 class="wp-block-heading">Instalación del servidor y del cliente</h3>



<p class="wp-block-paragraph">Generalmente <strong>SSH</strong> suele venir preinstalado en tu distribución Linux, pero si no es así, procede a la instalación de los paquetes correspondientes, que son el servidor (openssh-server) y el cliente (openssh-client).</p>



<pre class="wp-block-code"><code><strong>sudo apt-get install openssh-server openssh-client</strong> <strong>-y</strong></code></pre>



<p class="wp-block-paragraph">El paquete <strong>openssh-server</strong> proporciona el demonio <strong>sshd</strong> y <strong>sftp-server</strong> que permite a los clientes <strong>ssh</strong> y <strong>scp</strong> establecer conexiones seguras, y a los clientes <strong>sftp</strong> transferir archivos, también de forma segura.</p>



<p class="wp-block-paragraph">El paquete <strong>openssh-client</strong> proporciona los clientes de <strong>ssh</strong>, <strong>scp</strong> y <strong>sftp</strong>, los programas <strong>ssh-agent</strong> y <strong>ssh-add</strong> para hacer más cómoda la identificación de clave pública, y las utilidades <strong>ssh-keygen</strong>, <strong>ssh-keyscan</strong>, <strong>ssh-copy-id</strong> y <strong>ssh-argv0</strong>.</p>



<h3 class="wp-block-heading">Test SSH</h3>



<p class="wp-block-paragraph">Comprueba que el servidor SSH está habilitado y activo con la siguiente orden:</p>



<pre class="wp-block-code"><code><strong>sudo systemctl status sshd</strong></code></pre>



<p class="wp-block-paragraph">En la siguiente imagen, resaltado en color verde vemos que es así.</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="1022" height="495" src="https://linuxete.duckdns.org/wp-content/uploads/2024/11/Captura-desde-2024-11-29-18-50-48.png" alt="" class="wp-image-2097" srcset="https://linuxete.duckdns.org/wp-content/uploads/2024/11/Captura-desde-2024-11-29-18-50-48.png 1022w, https://linuxete.duckdns.org/wp-content/uploads/2024/11/Captura-desde-2024-11-29-18-50-48-300x145.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2024/11/Captura-desde-2024-11-29-18-50-48-768x372.png 768w" sizes="(max-width: 1022px) 100vw, 1022px" /></figure>



<p class="wp-block-paragraph">Hay otros comandos como son:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<pre class="wp-block-code"><code><strong>sudo systemctl enable sshd</strong> = Habilita el servicio</code></pre>



<pre class="wp-block-code"><code><strong>sudo systemctl disable sshd</strong> = Deshabilita el servicio</code></pre>



<pre class="wp-block-code"><code><strong>sudo systemctl start sshd</strong> = Inicia el servicio</code></pre>



<pre class="wp-block-code"><code><strong>sudo systemctl stop sshd</strong> = Para el servicio</code></pre>



<pre class="wp-block-code"><code><strong>sudo systemctl restart</strong> <strong>sshd</strong> = reinicia el servicio</code></pre>



<pre class="wp-block-code"><code><strong>sudo systemctl reload</strong> <strong>sshd</strong> = recarga el servicio</code></pre>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Nota: La diferencia entre <strong>restart</strong> y <strong>reload</strong> es que, en el primer caso, el servicio se detiene y se vuelve a iniciar y en el segundo caso, sigue ejecutándose y vuelve a leer los archivos de configuración.</p>
</blockquote>



<h3 class="wp-block-heading">Archivos de configuración:</h3>



<p class="wp-block-paragraph">SSH dispone de varios archivos de configuración, que son los siguientes:</p>



<p class="wp-block-paragraph"><strong>/etc/ssh/sshd_config</strong>: Archivo principal de configuración del servidor SSH.<br><br><strong>/etc/ssh/ssh_config</strong>: Archivo principal de configuración de los clientes SSH.<br><br><strong>~/.ssh/config</strong>: Archivo personal de cada usuario. Contiene la configuración utilizada por los clientes SSH. Permite al usuario local utilizar una configuración distinta a la definida en el archivo /etc/ssh/ssh_config.<br><br><strong>~/.ssh/known_hosts</strong>: Archivo personal de cada usuario. Contiene las firmas digitales de los servidores SSH a los que se conectan los clientes. Cuando éstas firmas cambian, se pueden actualizar ejecutando el comando ssh-keygen -R, pasando el nombre del anfitrión o la IP del anfitrión como argumento. Este comando elimina la entrada correspondiente en el archivo ~/.ssh/known_hosts y, permite añadir de nuevo al anfitrión con una nueva firma digital. La sintaxis genérica sería:</p>



<pre class="wp-block-code"><code><strong>ssh-keygen -R nombre_o_ip_del_servidor_SSH</strong></code></pre>



<p class="wp-block-paragraph"><strong>~/.ssh/authorized_keys</strong>: Archivo personal para cada usuario. Contiene los certificados de los clientes SSH, para permitir autenticación hacia servidores SSH sin requerir contraseña.</p>



<h3 class="wp-block-heading">Configurar SSH</h3>



<p class="wp-block-paragraph">Tras la instalación procederemos a la configuración del servidor, para ello, editaremos el fichero de configuración /etc/ssh/sshd_config.</p>



<p class="wp-block-paragraph">NOTA: es importante hacer copia de seguridad del archivo /etc/ssh/sshd_config antes de realizar cualquier cambio.</p>



<pre class="wp-block-code"><code>sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</code></pre>



<p class="wp-block-paragraph">Abrimos el archivo de confirmación con nano</p>



<pre class="wp-block-code"><code>sudo nano /etc/ssh/sshd_config</code></pre>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="786" height="605" src="https://linuxete.duckdns.org/wp-content/uploads/2024/11/Captura-desde-2024-11-29-21-12-17.png" alt="" class="wp-image-2102" srcset="https://linuxete.duckdns.org/wp-content/uploads/2024/11/Captura-desde-2024-11-29-21-12-17.png 786w, https://linuxete.duckdns.org/wp-content/uploads/2024/11/Captura-desde-2024-11-29-21-12-17-300x231.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2024/11/Captura-desde-2024-11-29-21-12-17-768x591.png 768w" sizes="auto, (max-width: 786px) 100vw, 786px" /></figure>



<p class="wp-block-paragraph">Una forma de elevar la seguridad del servidor SSH, consiste en cambiar el número de puerto predeterminado por otro que sólo el administrador del sistema conozca. Aunque cambiar de puerto disminuye considerablemente la posibilidad de una intrusión, en internet hay cientos de robots escaneando IPs y sus respectivos puertos abiertos, con lo que al final acabas siendo encontrado.</p>



<p class="wp-block-paragraph"><strong>Port</strong> &#8211; De forma predeterminada, el servicio SSH escucha por el puerto 22. Los atacantes buscarán servidores que estén escuchando dicho puerto.Sustituye el 22 a otro puerto, preferiblemente entre el 1024 y 65535.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="786" height="605" src="https://linuxete.duckdns.org/wp-content/uploads/2024/11/Captura-desde-2024-11-30-19-13-31.png" alt="" class="wp-image-2113" srcset="https://linuxete.duckdns.org/wp-content/uploads/2024/11/Captura-desde-2024-11-30-19-13-31.png 786w, https://linuxete.duckdns.org/wp-content/uploads/2024/11/Captura-desde-2024-11-30-19-13-31-300x231.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2024/11/Captura-desde-2024-11-30-19-13-31-768x591.png 768w" sizes="auto, (max-width: 786px) 100vw, 786px" /></figure>



<p class="wp-block-paragraph">Veamos algunas otras opciones interesantes a tener en cuenta a la hora de configurar el servidor:</p>



<p class="wp-block-paragraph"><strong>AddressFamily</strong> -Especifica qué familia de direcciones debe utilizar sshd. Los argumentos válidos son any (por defecto), inet (sólo IPv4), o inet6 (sólo IPv6).</p>



<p class="wp-block-paragraph"><strong>ListenAddress</strong> &#8211; De forma predeterminada, el servicio SSH escuchará peticiones a través de todas las direcciones IP correspondientes a todas las interfaces de red del sistema. La directriz por defecto sería: ListenAddress 0.0.0.0. Si queremos que el servidor solo escuche por la interfaz de red con IP 192.168.1.30, a la cual sólo se puede acceder desde la red local:</p>



<pre class="wp-block-code"><code>ListenAddress 192.168.1.30</code></pre>



<p class="wp-block-paragraph"><strong>LoginGraceTime</strong> &#8211; Establece el tiempo, en segundos, durante el cual la pantalla de login estará disponible para que el usuario introduzca su nombre de usuario y contraseña, si no lo hace durante ese período de tiempo el login se cerrará, evitando así dejar por tiempo indeterminado pantallas de login sin que nadie las use, o que alguien este intentando mediante un&nbsp;<strong>script</strong>&nbsp;adivinar un usuario y su contraseña. Si el valor es&nbsp;<strong>0</strong>, no hay límite de tiempo para que un usuario se autentique, lo cual no es recomendable ya que de esta forma un atacante podría utilizar ataques de fuerza bruta o usando métodos de diccionario para adivinar la contraseña, por lo tanto no es recomendable dejar esta directriz a&nbsp;<strong>0</strong>. Lo podemos dejar en&nbsp;<strong>10 segundos</strong>.</p>



<pre class="wp-block-code"><code>LoginGraceTime 10</code></pre>



<p class="wp-block-paragraph"><strong>PermitRootLogin</strong> &#8211; Probablemente sea la directriz de seguridad más importante que podemos establecer para asegurar nuestro servidor SSH. En los sistemas Unix y Linux se crea por defecto al usuario root, lo que implica que ya conocemos la existencia de al menos un usuario, ¡y que usuario!, con privilegios de adnimistrador. Muchos ataques de fuerza bruta se concentran en atacar al usuario root con la esperanza de que tenga una contraseña débil.<br>Sabiendo una parte de la ecuación (root) solo será cuestión de tiempo para que alguien con paciencia y suerte vulnere el sistema. En esta directriz denegamos el acceso al usuario root y por lo tanto, cualquier intento de ataque directo al usuario root será inútil.<br>Al denegar el acceso al usuario root, cada vez que necesitemos realizar tareas administrativas, accederemos como un usuario normal y una vez dentro, utilizando alguno de los comandos su o sudo podremos realizar dichas tareas administrativas. Por lo tanto, denegando el acceso al usuario root, el atacante tendrá que acertar tanto el nombre de un usuario del sistema como su contraseña, algo que disminuye notablemente la probabilidad de una intrusión.</p>



<p class="wp-block-paragraph"><strong>StrictModes</strong> &#8211; En esta directriz se establece que sshd revisara los modos y permisos de los archivos de los usuarios y el directorio $HOME de el usuario antes de aceptar la sesión. Esto es normalmente deseable porque a veces algunos usuarios dejan sus directorios, accidentalmente, con permiso de escritura para cualquiera. El valor predeterminado es yes, por lo tanto, lo dejaremos con su valor predeterminado.</p>



<pre class="wp-block-code"><code>StrictModes yes</code></pre>



<p class="wp-block-paragraph"><strong>MaxAuthTries</strong> &#8211; El valor de esta directriz establece el máximo número de intentos de autenticación permitidos por conexión, es decir, la cantidad de veces que podemos equivocarnos al ingresar el usuario y/o contraseña. Una vez que los intentos alcanzan la mitad de este valor, las conexiones fallidas siguientes serán registradas. Después del máximo número de intentos se cerrará la conexión. Es posible volver a intentarlo, pero el límite de intentos por vez evita ataques basados en la persistencia de la conexión.</p>



<pre class="wp-block-code"><code>MaxAuthTries 5</code></pre>



<p class="wp-block-paragraph"><strong>MaxSessions</strong> &#8211; Especifica el número máximo de sesiones abiertas de shell, inicio de sesión o subsistema (por ejemplo, sftp) permitidas por conexión de red. Los clientes que soportan la multiplexación de conexiones pueden establecer múltiples sesiones. Si se establece MaxSessions a 1, se desactivará la multiplexación de sesiones, mientras que si se establece a 0, se evitarán todas las sesiones de shell, login y subsistema, a la vez que se permite el for- warding. El valor predeterminado es 10.</p>



<pre class="wp-block-code"><code>MaxSessions 10</code></pre>



<p class="wp-block-paragraph">Con todo esto que hemos aprendido  ya puedes entrar a tu sistema remoto de la siguiente forma:</p>



<pre class="wp-block-verse">ssh -p 22343 tu_usuario@host_o_IP</pre>



<p class="wp-block-paragraph">Si te interesa saber mas de como proteger tu servidor, puedes ver «<a href="https://linuxete.duckdns.org/instalar-fail2ban-en-debian-12-y-que-funcione/">Instalar Fail2ban en Debian 12 y que funcione</a>«</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/conexiones-seguras-con-ssh/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Bash: orden no encontrada</title>
		<link>https://linuxete.duckdns.org/bash-no-se-encontro-la-orden/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bash-no-se-encontro-la-orden</link>
					<comments>https://linuxete.duckdns.org/bash-no-se-encontro-la-orden/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Wed, 17 Jul 2024 17:01:50 +0000</pubDate>
				<category><![CDATA[terminal]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[no se encontró la orden]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=1462</guid>

					<description><![CDATA[En Debian hay comandos que por defecto sólo están para el usuario root. Se almacenan la carpeta /sbin en vez de en /usr/bin. Por lo tanto al ejecutar un comando reservado como un usuario normal sin privilegios dará el siguiente error:&#160; &#160; En mi caso he tenido problemas con «ssmtp» ya que cuando intentaba enviar [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="569" src="https://linuxete.duckdns.org/wp-content/uploads/2024/07/1_v4o2AXLIJaHSZmqYZk26qA-1024x569.jpg" alt="" class="wp-image-1470" srcset="https://linuxete.duckdns.org/wp-content/uploads/2024/07/1_v4o2AXLIJaHSZmqYZk26qA-1024x569.jpg 1024w, https://linuxete.duckdns.org/wp-content/uploads/2024/07/1_v4o2AXLIJaHSZmqYZk26qA-300x167.jpg 300w, https://linuxete.duckdns.org/wp-content/uploads/2024/07/1_v4o2AXLIJaHSZmqYZk26qA-768x427.jpg 768w, https://linuxete.duckdns.org/wp-content/uploads/2024/07/1_v4o2AXLIJaHSZmqYZk26qA.jpg 1080w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">En Debian hay comandos que por defecto sólo están para el usuario root. Se almacenan la carpeta <em><strong>/sbin</strong></em> en vez de en <em><strong>/usr/bin</strong></em>. Por lo tanto al ejecutar un comando reservado como un usuario normal sin privilegios dará el siguiente error:<strong>&nbsp; &nbsp; </strong></p>



<pre class="wp-block-code"><code><strong>bash: comando: orden no encontrada </strong></code></pre>



<p class="wp-block-paragraph">En mi caso he tenido problemas con «ssmtp» ya que cuando intentaba enviar emails desde la terminal, me devolvía un error</p>



<pre class="wp-block-code"><code>echo "Testing…1…2…3" | ssmtp <mark>mi_email@gmail.com</mark>
bash: ssmtp: orden no encontrada</code></pre>



<p class="wp-block-paragraph">Para solucionar esto hay que crear un enlace simbólico que apunte de la carpeta /sbin a /usr/bin</p>



<h2 class="wp-block-heading">Comando ln</h2>



<p class="wp-block-paragraph">El comando <strong>ln</strong> en Linux es utilizado para crear enlaces simbólicos y duros. Estos enlaces son útiles cuando se necesita acceder a un archivo o directorio desde diferentes ubicaciones dentro del sistema de archivos.</p>



<p class="wp-block-paragraph">Ejemplo de como crear un enlace simbólico :</p>



<pre class="wp-block-code"><code><strong>ln -s /sbin/comando /usr/bin/comando</strong></code></pre>



<h2 class="wp-block-heading">Ejemplo práctico</h2>



<p class="wp-block-paragraph">Enlace simbólico del comando <strong>ssmtp</strong>:</p>



<pre class="wp-block-code"><code>sudo ln -s /sbin/ssmtp /usr/bin/ssmtp</code></pre>



<p class="wp-block-paragraph">Ahora ya lo puedes ejecutar como un usuario normal</p>



<pre class="wp-block-code"><code>echo "Probando…1…2…3" | ssmtp mi_email@gmail.com</code></pre>



<p class="wp-block-paragraph">Si no quieres añadir un enlace simbólico y deseas ejecutarlo como un usuario normal solo hay que ejecutar el comando de la siguiente manera:</p>



<pre class="wp-block-code"><code><strong>$ sudo </strong>echo "Probando…1…2…3" | ssmtp mi_email@gmail.com</code></pre>



<p class="wp-block-paragraph"><strong>Nota</strong>, para usar el comando ssmtp (enviar emails desde la terminal) debes de tenerlo instalado y configurado.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/bash-no-se-encontro-la-orden/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
