Guía de referencia de Debian

                             Osamu Aoki

Copyright © 2013-2024 Osamu Aoki

    La Guía de Referencia de Debian (version 2.143) (2026-07-10
    14:59:15 UTC) pretende aportar una visión amplia del sistema
    Debian y servir de guía al usuario después de la instalación. Se
    tratan diferentes aspectos de la administración del sistema,
    usando ejemplos en el intérprete de órdenes, para todo tipo de
    usuarios.

Resumen

Este libro es libre. Puede redistribuirlo y/o modificarlo cumpliendo
las condiciones de cualquier versión de la Licencia Pública General
GNU compatible con las Directrices de software libre de Debian
(DFSG).

---------------------------------------------------------------------

Tabla de contenidos

Prefacio
    1. Aviso
    2. Qué es Debian
    3. Sobre este documento
        3.1. Directrices
        3.2. Prerrequisitos
        3.3. Convenciones
        3.4. Estadísticas de uso (popcon)
        3.5. El tamaño del paquete
        3.6. Informes de errores en este documento
    4. Consejos para usuarios noveles
    5. Algunos comentarios para usuarios noveles
1. Tutoriales de GNU/Linux
    1.1. Introducción a la consola
        1.1.1. El cursor del intérprete de órdenes
        1.1.2. El indicador del intérprete de órdenes en GUI
        1.1.3. La cuenta de superusuario (root)
        1.1.4. El cursor del intérprete de órdenes de superusuario
        1.1.5. Herramientas gráficas para la administración del
        sistema
        1.1.6. Consolas virtuales
        1.1.7. Cómo cerrar el intérprete de órdenes
        1.1.8. Cómo apagar el sistema
        1.1.9. Cómo recuperar la configuración normal de una consola
        1.1.10. Paquetes complementarios recomendados para usuarios
        sin experiencia
        1.1.11. Una cuenta de usuario adicional
        1.1.12. Configuración de sudo
        1.1.13. Hora de jugar
    1.2. Sistema de archivos tipo Unix
        1.2.1. Información básica sobre archivos en Unix
        1.2.2. Sistemas de archivos internos
        1.2.3. Permisos del sistema de archivos
        1.2.4. Gestión de permisos para nuevos archivos: umask
        1.2.5. Permisos para grupos de usuarios (grupo)
        1.2.6. Marcas de tiempo
        1.2.7. Enlaces
        1.2.8. Tuberías con nombre (FIFOs)
        1.2.9. «Sockets»
        1.2.10. Archivos de dispositivos
        1.2.11. Archivos de dispositivos especiales
        1.2.12. procfs y sysfs
        1.2.13. tmpfs
    1.3. Midnight Commander (MC)
        1.3.1. Personalización de MC
        1.3.2. Comenzando con MC
        1.3.3. Gestor de archivos de MC
        1.3.4. Trucos de la línea de órdenes en MC
        1.3.5. El editor interno de MC
        1.3.6. El visor interno de MC
        1.3.7. Selección inteligente del visor en MC
        1.3.8. Sistema de archivos virtual de MC
    1.4. Fundamentos de entornos de trabajo tipo Unix
        1.4.1. El intérprete de órdenes (shell)
        1.4.2. Personalización de bash
        1.4.3. Combinaciones de teclas
        1.4.4. Operaciones con el ratón
        1.4.5. El paginador
        1.4.6. El editor de texto
        1.4.7. Configuración del editor de texto por defecto
        1.4.8. Usando vim
        1.4.9. Grabación de las actividades del intérprete de órdenes
        1.4.10. Órdenes básicas de Unix
    1.5. Órdenes simples para el intérprete de órdenes
        1.5.1. Ejecución de órdenes y variables de entorno
        1.5.2. La variable «$LANG»
        1.5.3. La variable «$PATH»
        1.5.4. La variable «$HOME»
        1.5.5. Opciones de la línea de órdenes
        1.5.6. Expansión de un patrón en el intérprete de órdenes
        1.5.7. Valor devuelto por la orden
        1.5.8. Secuencias de órdenes comunes y redirecciones del
        intérprete de órdenes
        1.5.9. Alias de órdenes
    1.6. Operaciones de texto al estilo de Unix
        1.6.1. Herramientas de texto Unix
        1.6.2. Expresiones regulares
        1.6.3. Sustitución de expresiones
        1.6.4. Sustituciones globales mediante expresiones regulares
        1.6.5. Extracción de datos en archivos de texto en forma de
        tabla
        1.6.6. Fragmentos de órdenes utilizados con tuberías
2. Gestión de paquetes Debian
    2.1. Prerequisitos de la gestión de paquetes Debian
        2.1.1. Sistema de gestión de paquetes Debian
        2.1.2. Configuración de paquetes
        2.1.3. Precauciones principales
        2.1.4. Conviviendo con actualizaciones continuas
        2.1.5. Fundamentos del archivo de Debian
        2.1.6. Debian es 100% software libre
        2.1.7. Dependencias de paquetes
        2.1.8. El flujo de eventos de la gestión de paquetes
        2.1.9. Soluciones a problemas básicos en la gestión de
        paquetes
        2.1.10. Como seleccionar paquetes Debian
        2.1.11. Cómo hacer frente a requisitos contradictorios
    2.2. Operaciones básicas de la gestión de paquetes
        2.2.1. apt vs. apt-get / apt-cache vs. aptitude
        2.2.2. Operaciones básicas de gestión de paquetes utilizando
        la línea de órdenes
        2.2.3. Uso interactivo de aptitude
        2.2.4. Combinaciones de teclado en aptitude
        2.2.5. Visualización de paquetes en aptitude
        2.2.6. Opciones del método de búsqueda con aptitude
        2.2.7. La fórmula de la expresión regular de aptitude
        2.2.8. Resolución de dependencias en aptitude
        2.2.9. Registro de la actividad de los paquetes
    2.3. Ejemplos de operaciones con aptitude
        2.3.1. Buscando paquetes interesantes
        2.3.2. Enumera los paquetes cuyos nombres encajan con la
        expresión regular
        2.3.3. Navega por la relación de paquetes que encajan con la
        expresión regular
        2.3.4. Purga los paquetes eliminados definitivamente
        2.3.5. Estado de instalación ordenado de forma automática/
        manual
        2.3.6. Actualización mayor del sistema
    2.4. Operaciones avanzadas de gestión de paquetes
        2.4.1. Operaciones avanzadas de gestión de paquetes desde la
        línea de órdenes
        2.4.2. Verificación de los archivos de un paquete instalado
        2.4.3. Protección frente a problemas con paquetes
        2.4.4. Buscando metadatos en los paquetes
    2.5. Gestión interna de los paquetes Debian
        2.5.1. Metadatos de archivos
        2.5.2. Archivo «Release» del nivel superior y autenticación
        2.5.3. Archivos «Release» a nivel de archivo
        2.5.4. Actualizando la meta información de los paquetes
        2.5.5. Estado del paquete para APT
        2.5.6. El estado del paquete en aptitude
        2.5.7. Copias locales de los paquetes descargados
        2.5.8. Nombres de archivos de paquetes Debian
        2.5.9. La orden dpkg
        2.5.10. La orden update-alternatives
        2.5.11. La orden dpkg-statoverride
        2.5.12. La orden dpkg-divert
    2.6. Recuperación de un sistema
        2.6.1. Incompatibilidad con la configuración antigua del
        usuario
        2.6.2. Errores de almacenamiento en la caché de los datos del
        paquete
        2.6.3. Recuperación con la orden dpkg
        2.6.4. Instalación fallida debido a dependencias incumplidas
        2.6.5. Superposición de archivos por diferentes paquetes
        2.6.6. Arreglando un archivo de órdenes de un paquete roto
        2.6.7. Recuperando datos de la selección de paquetes
    2.7. Consejos para la gestión de paquetes
        2.7.1. ¿Quién sube los paquetes?
        2.7.2. Limitar el ancho de banda de descarga para APT
        2.7.3. Descarga y actualización automática de paquetes
        2.7.4. Actualizaciones y Backports
        2.7.5. Archivos externos de los paquetes
        2.7.6. Paquetes de origen mixto de archivos sin apt-pinning
        2.7.7. Ajustar la versión candidata con apt-pinning
        2.7.8. Bloqueo de la instalación de paquetes recomendados
        («Recommends«)
        2.7.9. Seguimiento «en pruebas» con algunos paquetes de
        «inestable»
        2.7.10. Mantener unstable (inestable) con algunos paquetes de
        experimental
        2.7.11. Volver al estado anterior por emergencia
        2.7.12. El paquete «equivs«
        2.7.13. Portar un paquete a un sistema estable
        2.7.14. Servidor proxy para APT
        2.7.15. Más información acerca de la gestión de paquetes
3. La inicialización del sistema
    3.1. Un resumen del proceso de arranque
        3.1.1. Fase 1: UEFI
        3.1.2. Fase 2: el cargador de arranque
        3.1.3. Fase 3: el sistema mini-Debian
        3.1.4. Fase 4: el sistema normal Debian
    3.2. Rescue system
        3.2.1. GRUB UEFI rescue system on USB
        3.2.2. Linux live rescue system on USB
        3.2.3. Linux live rescue system from GRUB
    3.3. Systemd
        3.3.1. Arranque de systemd
        3.3.2. Inicio de sesión en Systemd
    3.4. Los mensajes del núcleo
    3.5. El sistema de mensajes
    3.6. Gestión del sistema
    3.7. Otros monitores del sistema
    3.8. Configuración del sistema
        3.8.1. El nombre del equipo (hostname)
        3.8.2. El sistema de archivos
        3.8.3. Inicialización del interfaz de red
        3.8.4. Inicialización del sistema en la nube
        3.8.5. Ejemplo de personalización para ajustar el servicio
        sshd
    3.9. El sistema udev
    3.10. La inicialización del módulo del núcleo
4. Autenticación y controles de acceso
    4.1. Acreditación normal de Unix
    4.2. Gestionando información de cuentas y contraseñas
    4.3. Buenas contraseñas
    4.4. Creando una contraseña cifrada
    4.5. PAM y NSS
        4.5.1. Archivos de configuración utilizados por PAM y NSS
        4.5.2. La actual gestión centralizada de sistemas
        4.5.3. «Razones por las que GNU no tienen la funcionalidad
        del grupo wheel«
        4.5.4. Regla estricta para contraseñas
    4.6. Acreditación de seguridad
        4.6.1. Contraseñas seguras en Internet
        4.6.2. «Secure Shell«
        4.6.3. Medidas extraordinarias de seguridad en Internet
        4.6.4. Asegurando la contraseña de root
    4.7. Otros controles de acceso
        4.7.1. Listas de control de acceso (ACL)
        4.7.2. sudo
        4.7.3. PolicyKit
        4.7.4. Restricción de acceso a algunos servicios del servidor
        4.7.5. Características de seguridad de Linux
5. Configuración de red
    5.1. La infraestructura de red básica
        5.1.1. La resolución del nombre del equipo
        5.1.2. El nombre del interfaz de red
        5.1.3. EL rango de direcciones de red para una LAN
        5.1.4. El mantenimiento de los dispositivos de red
    5.2. La configuración moderna de red en el escritorio
        5.2.1. Herramientas de interfaz gráfico de usuario para la
        configuración de red
    5.3. La moderna configuración de la red sin GUI
    5.4. La moderna configuración de la red para la nube
        5.4.1. La moderna configuración de red para la nube con DHCP
        5.4.2. La moderna configuración de red para la nube con una
        IP estática
        5.4.3. La configuración de red moderna para la nube con
        Network Manager
    5.5. La configuración de red de bajo nivel
        5.5.1. Órdenes iproute2
        5.5.2. Operaciones seguras de red a nivel bajo
    5.6. Optimización de la red
        5.6.1. Encontrando la MTU óptima
        5.6.2. Optimización TCP en redes WAN
    5.7. Infraestructura Netfilter
6. Aplicaciones de red
    6.1. Navegadores web
        6.1.1. Spoofing de la cadena User-Agent
        6.1.2. extensión del navegador
    6.2. El sistema de correo
        6.2.1. Fundamentos de correo
        6.2.2. Limitación del servicio moderno de correo
        6.2.3. Expectativa histórica del servicio de correo
        6.2.4. Agente de transporte de correo (Mail transport agent,
        MTA)
    6.3. Servidor de acceso remoto (SSH) y utilidades
        6.3.1. Fundamentos de SSH
        6.3.2. Nombre de usuario en el host remoto
        6.3.3. Conectarse sin contraseñas del equipo remoto
        6.3.4. Tratando con clientes SSH extraños
        6.3.5. Configuración ssh-agent
        6.3.6. Enviar un correo desde un host remoto
        6.3.7. Puerto de reenvío para túnel SMTP/POP3
        6.3.8. Apagar un sistema remoto con SSH
        6.3.9. Resolución de problemas de SSH
    6.4. Servidor de impresión y utilidades
    6.5. Servidores de aplicaciones en otras redes
    6.6. Otros clientes de aplicaciones de red
    6.7. Diagnóstico de los demonios del sistema
7. Sistema GUI (interfaz gráfica de usuario)
    7.1. Entorno de escritorio GUI
    7.2. protocolo de comunicación GUI
    7.3. infraestructura GUI
    7.4. Aplicaciones GUI
    7.5. Directorios de los usuarios
    7.6. Tipografía
        7.6.1. Tipos de letras fundamentales
        7.6.2. Rasterización de fuentes
    7.7. Sandbox
    7.8. Escritorio remoto
    7.9. conexión del servidor X
        7.9.1. Conexión local del servidor X
        7.9.2. Conexión remota del servidor X
        7.9.3. Conexión chroot del servidor X
    7.10. Portapapeles
8. I18N y L10N
    8.1. Configuración regional
        8.1.1. Razón de ser de la configuración regional UTF-8
        8.1.2. Reconfiguración de la configuración regional
        8.1.3. Codificación del nombre de archivo
        8.1.4. Configuración regional de los mensajes y documentación
        traducida
        8.1.5. Efectos de la configuración regional
    8.2. La entrada por teclado
        8.2.1. Teclado de entrada para la consola Linux y X Window
        8.2.2. La entrada por teclado para Wayland
        8.2.3. El soporte al método de entrada con lBus
        8.2.4. The input method support with Fcitx
        8.2.5. Ejemplo para el japonés
    8.3. La salida por pantalla
        8.3.1. La configuración de la terminal
        8.3.2. Ancho de los caracteres ambiguos de Asia oriental
9. Trucos del sistema
    9.1. Consejos para la consola
        9.1.1. Registro correcto de las actividades del intérprete de
        órdenes
        9.1.2. El programa screen
        9.1.3. Navegando por los directorios
        9.1.4. Readline wrapper
        9.1.5. Escaneando el árbol del código fuente
    9.2. Personalización de vim
        9.2.1. Personalizando vim con características internas
        9.2.2. Personalizando vim con paquetes externos
    9.3. Registro de datos y presentación
        9.3.1. El demonio de registro
        9.3.2. Analizador de registros
        9.3.3. Personalizar la visualización de información en
        formato texto
        9.3.4. Personalización de la visualización de la fecha y hora
        9.3.5. Intérprete de órdenes en color
        9.3.6. Órdenes coloreadas
        9.3.7. Grabación de las actividades del editor con
        repeticiones complejas
        9.3.8. Capturar una imagen gráfica en un aplicación X
        9.3.9. Guardando cambios en los archivos de configuración
    9.4. Monitoreando, controlando e iniciando lo que hacer los
    programas
        9.4.1. Temporización de un proceso
        9.4.2. La prioridad de planificación
        9.4.3. La orden ps
        9.4.4. La orden top
        9.4.5. Relación de los archivos abiertos por un proceso
        9.4.6. Trazando la actividad de un programa
        9.4.7. Identificación de procesos utilizando archivos o
        conexiones (sockets)
        9.4.8. Repetición de una orden a intervalos constantes
        9.4.9. Repetición de una orden sobre archivos
        9.4.10. Iniciar un programa desde el interfaz gráfico de
        usuario
        9.4.11. Personalizando el inicio de un programa
        9.4.12. Matando un proceso
        9.4.13. Planificación una vez de las tareas
        9.4.14. Planificación regular de tareas
        9.4.15. Programación de tareas en un suceso
        9.4.16. Tecla Alt-SysRq
    9.5. Trucos para el mantenimiento del sistema
        9.5.1. ¿Quién está en el sistema?
        9.5.2. Avisos para todos
        9.5.3. Identificación del hardware
        9.5.4. Configuración del hardware
        9.5.5. Hora del sistema y del hardware
        9.5.6. La infraestructura de sonido
        9.5.7. Deshabilitar el salvapantallas
        9.5.8. Deshabilitando los pitidos
        9.5.9. Utilización de memoria
        9.5.10. Sistema de seguridad y de comprobación de la
        integridad
    9.6. Trucos del almacenamiento de datos
        9.6.1. Uso de espacio de disco
        9.6.2. Configuración del particionado de disco
        9.6.3. Acceso al particionado utilizando UUID
        9.6.4. LVM2
        9.6.5. Configuración del sistema de archivos
        9.6.6. Comprobación de la integridad y creación del sistema
        de archivos
        9.6.7. Optimización de los sistemas de archivos a través de
        las opciones de montaje
        9.6.8. Optimización del sistema de archivo a través del
        superbloque
        9.6.9. Optimización del disco duro
        9.6.10. Optimización de un disco de estado sólido (SSD)
        9.6.11. Utilice SMART para predecir fallos en su disco duro
        9.6.12. Determine el directorio de almacenamiento temporal
        por medio de $TMPDIR
        9.6.13. Expansión del espacio de almacenamiento utilizable
        mediante LVM
        9.6.14. Expansión del espacio de almacenamiento útil mediante
        el montaje de otra partición
        9.6.15. Expansión del espacio de almacenamiento por el enlace
        mediante el montaje en otro directorio
        9.6.16. Expansión del espacio de almacenamiento utilizable
        por superposición-montaje de otro directorio
        9.6.17. Expansión del espacio de almacenamiento útil
        utilizando un enlace simbólico
    9.7. La imagen de disco
        9.7.1. Creando un archivo de imagen de disco
        9.7.2. Escribiendo directamente en el disco
        9.7.3. Montaje del archivo imagen del disco
        9.7.4. Limpiando un archivo de imagen de disco
        9.7.5. Haciendo un archivo de imagen de disco vacío
        9.7.6. Haciendo un archivo de imagen ISO9660
        9.7.7. Escritura directa al CD/DVD-R/RW
        9.7.8. Montando un archivo imagen ISO9660
    9.8. Datos binarios
        9.8.1. Viendo y editando datos binarios
        9.8.2. Manipular archivos sin el montaje de discos
        9.8.3. Redundancia de datos
        9.8.4. Recuperación de datos de archivos y análisis forense
        9.8.5. División de un archivo grande en archivos de tamaño
        menor
        9.8.6. Limpieza del contenido de los archivos
        9.8.7. Archivos «vacíos»
        9.8.8. Borrando completo de un disco duro
        9.8.9. Borrar áreas de disco duro no utilizadas
        9.8.10. Recuperando archivos borrados pero todavía abiertos
        9.8.11. Buscando todos los enlaces duros
        9.8.12. Consumo invisible de espacio de disco
    9.9. Trucos para cifrar información
        9.9.1. Cifrado de discos externos con dm-crypt/LUKS
        9.9.2. Montaje de disco cifrado con dm-crypt/LUCKS
    9.10. El núcleo
        9.10.1. Parámetros del núcleo
        9.10.2. Cabeceras del núcleo
        9.10.3. Compilar el núcleo y los módulos asociados
        9.10.4. Compilando el código fuente del núcleo:
        recomendaciones del Equipo Debian del Núcleo
        9.10.5. Controladores y firware del hardware
    9.11. Sistemas virtualizados
        9.11.1. Herramientas de virtualización y emulación
        9.11.2. Flujo de trabajo de la virtualización
        9.11.3. Montando el archivo de imagen de disco virtual
        9.11.4. Sistemas chroot
        9.11.5. Varios sistemas de escritorio
10. Gestión de información
    10.1. Compartición, copia y archivo
        10.1.1. Herramientas de repositorios y compresión
        10.1.2. Herramientas de sincronización y copia
        10.1.3. Formas de archivado
        10.1.4. Formas de copia
        10.1.5. Formas de selección de archivos
        10.1.6. Medios de archivo
        10.1.7. Dispositivos de almacenamiento extraíbles
        10.1.8. Selección del sistema de archivos para compartir
        datos
        10.1.9. Compartir información a través de la red
    10.2. Respaldo y recuperación
        10.2.1. Política de respaldo y recuperación
        10.2.2. Suites de utilidades de copias de seguridad
        10.2.3. Consejos para copias de seguridad
    10.3. Infraestructura de seguridad de la información
        10.3.1. Gestión de claves con GnuPG
        10.3.2. Usando GnuPG en archivos
        10.3.3. Uso de Mutt con GnuPG
        10.3.4. Utilizando Vim con GnuPG
        10.3.5. El resumen MD5
        10.3.6. Llavero de contraseña
    10.4. Herramientas para mezclar código fuente
        10.4.1. extrae las diferencias entre dos archivos fuente
        10.4.2. Mezcla actualizaciones del archivos de código fuente
        10.4.3. Integración interactiva
    10.5. Git
        10.5.1. Configuración del cliente Git
        10.5.2. Comandos Git básicos
        10.5.3. Consejos para Git
        10.5.4. Algunas referencias sobre Git
        10.5.5. Otros sistemas de control de versiones
11. Conversión de datos
    11.1. Herramientas para la conversión de información en formato
    texto
        11.1.1. Convirtiendo un archivo de texto con iconv
        11.1.2. Comprobando que un archivo es UTF-8 con iconv
        11.1.3. Convirtiendo los nombres de archivos con iconv
        11.1.4. Conversión EOL
        11.1.5. Conversión de tabuladores
        11.1.6. Editores con conversión automática
        11.1.7. Extracción de texto plano
        11.1.8. Resaltando y dándole formato a información en texto
        plano
    11.2. datos XML
        11.2.1. Conceptos básicos de XML
        11.2.2. Procesamiento XML
        11.2.3. La extracción de información XML
        11.2.4. Análisis de datos XML
    11.3. Configuración tipográfica
        11.3.1. composición tipográfica roff
        11.3.2. TeX/LaTeX
        11.3.3. Impresión de una página de manual
        11.3.4. Crear una página de man
    11.4. Información imprimible
        11.4.1. Ghostscript
        11.4.2. Mezcla de dos archivos PS o PDF
        11.4.3. Utilidades de impresión
        11.4.4. Imprimiendo con CUPS
    11.5. La conversión de los datos de correo
        11.5.1. Fundamentos de información de correo
    11.6. Herramientas para información gráfica
        11.6.1. Herramientas gráficas de datos (meta paquete)
        11.6.2. Herramientas de datos gráficos (GUI)
        11.6.3. Herramientas de datos gráficos (CLI)
    11.7. Conversiones de información variadas
12. Programación
    12.1. Los archivos de órdenes
        12.1.1. Compatibilidad del intérprete de órdenes POSIX
        12.1.2. Parámetros del intérprete de órdenes
        12.1.3. Condiciones del intérprete de órdenes
        12.1.4. Bucles del intérprete de órdenes
        12.1.5. Variables del entorno de shell
        12.1.6. La secuencia de procesamiento de la línea de órdenes
        12.1.7. Programas útiles para los archivos de órdenes
    12.2. Programación en lenguajes interpretados
        12.2.1. Depuración de los códigos del lenguaje interpretado
        12.2.2. Programa GUI con el script de shell
        12.2.3. Acciones personalizadas para el archivador GUI
        12.2.4. Locura de pequeños archivos de órdenes en Perl
    12.3. Codificación en lenguajes compilados
        12.3.1. C
        12.3.2. Programa sencillo en C (gcc)
        12.3.3. Flex — una mejora de Lex
        12.3.4. Bison — una mejora de Yacc
    12.4. Herramientas de análisis estático de memoria
    12.5. Depuración
        12.5.1. Fundamentos de gdb
        12.5.2. Depurando un paquete Debian
        12.5.3. Obteniendo trazas
        12.5.4. Órdenes avanzadas de gdb
        12.5.5. Comprobar las dependencias de las bibliotecas
        12.5.6. Herramientas de rastreo dinámico de llamadas
        12.5.7. Errores de depuración X
        12.5.8. Herramientas de detección de fugas de memoria
        12.5.9. Desemsamblado de binarios
    12.6. Herramientas de construcción
        12.6.1. Make
        12.6.2. Autotools (Autoherramientas) (herramientas de
        automatización)
        12.6.3. Meson
    12.7. Web
    12.8. La traducción de código fuente
    12.9. Haciendo un paquete Debian
A. Apéndice
    A.1. Debian maze
    A.2. Histórico de copyright
    A.3. Formato del documento

Lista de tablas

1.1. Relación de paquetes con programas interesantes en modo texto
1.2. Relación de paquetes con documentación útil
1.3. Relación de directorios clave y su uso
1.4. La interpretación del primer carácter de cada línea de la salida
de «ls -l» se interpreta como se muestra
1.5. El modo numérico en chmod(1) es como se muestra
1.6. Ejemplos de valores de umask
1.7. Relación de grupos importantes del sistema para el acceso a
archivos
1.8. Relación de grupos importantes del sistema para la ejecución de
órdenes específicas
1.9. Relación de tipos de marcas de tiempo
1.10. Relación de archivos de dispositivos especiales
1.11. Funciones de las teclas en MC
1.12. Acción de la tecla Intro en MC
1.13. Relación de intérpretes de órdenes
1.14. Relación de combinaciones de teclado en bash
1.15. Lista de acciones de teclado relacionadas y operaciones con
ratón en Debian
1.16. Lista de comandos básicos de Vim
1.17. Relación de órdenes Unix fundamentales
1.18. Tres partes del valor de la configuración regional
1.19. Relación de recomendaciones para la configuración regional
1.20. Relación de valores de «$HOME»
1.21. Patrones para la expansión de nombres de archivos del
intérprete de órdenes
1.22. Códigos de salida de una orden
1.23. Expresiones de una orden
1.24. Descriptores de archivos predefinidos
1.25. Metacaracteres para BRE y ERE
1.26. Sustitución mediante expresiones regulares
1.27. Relación de fragmentos de órdenes con tuberías
2.1. Relación de herramientas para la gestión de paquetes de Debian
2.2. Relación de sitios de archivo de Debian
2.3. Relación de áreas de archivo Debian
2.4. Relación entre los nombres de publicación y distribución
2.5. Relación de los principales sitios web para resolver problemas
de un paquete concreto
2.6. Operaciones básicas de gestión de paquetes utilizando la línea
de órdenes apt(8), aptitude(8) y apt-get(8)/apt-cache(8)
2.7. Opciones más importantes de la orden aptitude(8)
2.8. Relación de combinaciones de teclado de aptitude
2.9. Relación de vistas en aptitude
2.10. La clasificación de la vista de paquetes estándar
2.11. Relación de fórmulas de expresiones regulares de aptitute
2.12. Los archivos de registro de acciones sobre paquetes
2.13. Relación de operaciones avanzadas con paquetes
2.14. El contenido de metadatos del repositorio Debian
2.15. La estructura del nombre de los paquetes Debian
2.16. Los caracteres permitidos en cada campo del nombre del paquete
en Debian
2.17. Los archivos destacados creados por dpkg
2.18. Relación de valores Pin-Priority importantes para la técnica 
apt-pinning.
2.19. Relación de herramientas de proxy especificas para el
repositorio Debian
3.1. Relación de cargadores de arranque
3.2. El significado de la entrada del menú de la parte anterior de /
boot/grub/grub.cfg
3.3. Relación de sistemas de arranque en el sistema Debian
3.4. Lista de niveles de error del núcleo
3.5. Lista de fragmentos de comando típicos de journalctl
3.6. Lista de típicos snippets de comandos systemctl
3.7. Lista de otros fragmentos de comandos de supervisión en systemd
4.1. los tres archivos importantes de configuración de pam_unix(8)
4.2. El contenido de la segunda entrada de «/etc/passwd»
4.3. Relación de órdenes para la gestión de información de las
cuentas
4.4. Relación de herramientas para generar contraseñas
4.5. Relación de sistemas PAM y NSS relevantes
4.6. Relación de archivos de configuración utilizados por PAM y NSS
4.7. Relación de servicios y puertos seguros e inseguros
4.8. Relación de herramientas que aportan medidas extra de seguridad
5.1. Relación de herramientas de configuración de red
5.2. Relación de rangos de direcciones de red
5.3. Tabla de correspondencia entre las órdenes en desuso de
net-tools y las nuevas órdenes de iproute2
5.4. Relación de órdenes de red de bajo nivel
5.5. Relación de herramientas de optimización de red
5.6. Guía básica para una MTU óptima
5.7. Relación de herramientas de cortafuegos
6.1. Relación de navegadores web
6.2. Relación de agentes de usuario de correo (MUA)
6.3. Lista de paquetes básicos relacionados con el agente de
transferencia de correo
6.4. Relación de páginas importantes del manual en postfix
6.5. Relación de los archivos relacionados con la configuración de la
dirección de correo
6.6. Relación de operaciones MTA fundamentales
6.7. Relación de servidores de acceso remoto y utilidades
6.8. Relación de los archivos de configuración de SSH
6.9. Relación de ejemplos de inicio del clientes ssh
6.10. Relación de clientes SSH libres en otras plataformas
6.11. Relación de las utilidades y servidores de impresión
6.12. Relación de los servidores de aplicaciones de red
6.13. Relación de clientes de aplicaciones de red
6.14. Relación de RFCs comúnes
7.1. Lista del entorno del escritorio
7.2. Lista de paquetes notables de la infraestructura GUI
7.3. Lista de aplicaciones GUI destacadas
7.4. Lista de notables fuentes TrueType y OpenType
7.5. Lista de entornos de fuentes notables y paquetes relacionados
7.6. Lista de entornos sandbox notables y paquetes asociados
7.7. Lista de servidores de acceso remoto notables
7.8. Relación de los métodos de conexión al servidor X
7.9. Lista de programas relacionados con la manipulación del
portapapeles de caracteres
8.1. List of IBus and its plugin packages
8.2. List of Fcitx5 and its plugin packages
9.1. Lista de programas de apoyo a las actividades de la consola
9.2. Relación de los atajos de teclado para screen
9.3. Información de la inicialización de vim
9.4. Relación de analizadores de registro del sistema
9.5. Mostrar los ejemplos de la hora y la fecha para el comando "ls
-l" con el time style value.
9.6. Relación de herramientas de manipulación de imágenes
9.7. Relación de paquetes que pueden guardar el histórico de
configuración
9.8. Relación de las herramientas de monitorización y control de las
actividades de los programas
9.9. Relación de buenos valores para la prioridad de planificación
9.10. Lista de estilo de la orden ps
9.11. Relación de las señales más usadas con la orden kill
9.12. Lista de teclas notables del comando SAK
9.13. Relación de las herramientas para la identificación de hardware
9.14. Relación de herramientas de configuración hardware
9.15. Relación de paquetes de sonido
9.16. Relación de las órdenes para deshabilitar el salvapantallas
9.17. Relación de informes de tamaño de la memoria
9.18. Relación de las herramientas de seguridad del sistema y
comprobación de la integridad
9.19. Relación de paquetes para la gestión del particionado del disco
9.20. Relación de paquetes para la gestión del sistema de archivos
9.21. Relación de paquetes para la visualización y edición de datos
binarios
9.22. Relación de paquetes para manipular archivos sin montar el
disco
9.23. Relación de herramientas para añadir redundancia de datos a los
archivos
9.24. Relación de paquetes para la recuperación de archivos y
análisis forense
9.25. Relación de utilidades para el cifrado de información
9.26. Relación de los paquetes fundamentales para la recompilación
del núcleo en los sistemas Debian
9.27. Relación de herramientas de virtualización
10.1. Relación de las herramientas de repositorios y compresión
10.2. Relación de las herramientas de copia y sincronización
10.3. Relación de posibles sistemas de archivos para dispositivos de
almacenamiento extraíbles con sus casos de uso normales
10.4. Relación de los servicios de red disponibles con el escenario
típico de utilización
10.5. Relación de suites de utilidades de copias de respaldo
10.6. Relación de herramientas de infraestructura de seguridad de la
información
10.7. Relación de las órdenes GNU Privacy Guard par la gestión de
claves
10.8. Relación del significado del código de confianza
10.9. Relación de órdenes GNU Privacy Guard sobre archivos
10.10. Relación de las herramientas para mezclar código fuente
10.11. Relación de paquetes y órdenes relacionados con git
10.12. Principales comandos de Git
10.13. Consejos para Git
10.14. Lista de otras herramientas del sistema del control de las
versiones
11.1. Relación de herramientas de conversión de información en
formato texto
11.2. Relación de valores de codificación y su uso
11.3. Relación de estilos EOL para las diferentes plataformas
11.4. Relación de las órdenes de conversión de tabuladores de los
paquetes bsdmainutils y coreutils
11.5. Relación de las herramientas para extraer información en texto
plano
11.6. Relación de herramientas para resaltar información en texto
plano
11.7. Relación de entidades predefinidas para XML
11.8. Relación de herramientas XML
11.9. Relación de herramientas DSSSL
11.10. Relación de herramientas de extracción de información XML
11.11. Relación de las herramientas de impresión de calidad de XML
11.12. Relación de las herramientas de composición tipográfica
11.13. Relación de paquetes que ayudan a crear páginas man
11.14. Relación de intérpretes Ghostscript de PostScript
11.15. Relación de utilidades para la impresión
11.16. Relación de paquetes que ayudan a la conversión de datos de
correo
11.17. Lista de herramientas de datos gráficos (meta paquete)
11.18. Lista de herramientas de datos gráficos (GUI)
11.19. Lista de herramientas de datos gráficos (CLI)
11.20. Relación de herramientas varias para la conversión de
información
12.1. Relación de particularidades de bash
12.2. Relación de los parámetros de intérprete de órdenes
12.3. Relación de expansiones de parámetros del intérprete de órdenes
12.4. Relación de las sustituciones clave de parámetros del
intérprete de órdenes
12.5. Relación de operadores para comparar archivos en la expresión
condicional
12.6. Relación de operadores de comparación de cadenas en expresiones
condicionales
12.7. Relación de paquetes que contienen pequeñas utilidades para los
archivos de órdenes
12.8. Lista de paquetes relacionados con el intérprete
12.9. Lista de programas de diálogo
12.10. Lista de paquetes relacionados con el compilador
12.11. Relación de analizadores sintácticos LALR compatibles con Yacc
12.12. Relación de las herramientas para el análisis de código
estático
12.13. Lista de paquetes de la depuración
12.14. Relación de órdenes avanzadas gdb
12.15. Relación de herramientas de detección de fugas de memoria
12.16. Lista de paquetes de herramientas de compilación
12.17. Relación de variables automáticas de make
12.18. Relación de expansiones de variables de make
12.19. Relación de herramientas de traducción de código fuente

Prefacio

Tabla de contenidos

1. Aviso
2. Qué es Debian
3. Sobre este documento
    3.1. Directrices
    3.2. Prerrequisitos
    3.3. Convenciones
    3.4. Estadísticas de uso (popcon)
    3.5. El tamaño del paquete
    3.6. Informes de errores en este documento
4. Consejos para usuarios noveles
5. Algunos comentarios para usuarios noveles

La Guía de referencia de Debian (versión 2.143) (2026-07-10 14:59:15
UTC) pretende dar una visión general de la administración del sistema
Debian en una guía de usuario posterior a la instalación.

Esta obra está dirigida a quien desea aprender scripts de shell, pero
que no está preparado para entender el código fuente C para
comprender el funcionamiento interno de un sistema GNULinux.

Para instrucciones de instalación, ver:

  * Guía de Instalación de Debian GNU/Linux de la versión estable
    (stable)

  * Guía de Instalación de Debian GNU/Linux de la versión de pruebas
    (testing)

1. Aviso

    Esta guía se ofrece sin ninguna garantía. Todas las marcas son
    propiedad de sus respectivos dueños.

    Debian es un sistema vivo. Por lo que es difícil mantener este
    documento totalmente actualizado y sin errores. Para escribir
    este documento se usa la versión testing del sistema Debian.
    Cuando lo lea puede que parte de su contenido ya esté
    desactualizado.

    Por favor, considere este documento como una fuente secundaria de
    información. No sustituye a ninguna guía acreditada. El autor y
    los colaboradores no asumen ninguna responsabilidad por las
    consecuencias de errores, omisiones o ambigüedades de este
    documento.

2. Qué es Debian

    El Proyecto Debian es una asociación de individualidades que han
    hecho causa común para crear un sistema operativo libre. Su
    distribución se caracteriza por lo siguiente.

      * Compromiso con la libertad del software: Contrato Social de
        Debian y Directrices de Software Libre de Debian (DFSG)

      * Publicación de trabajo voluntario no remunerado en Internet:
        https://www.debian.org

      * Gran cantidad de paquetes de software de alta calidad
        compilados

      * Enfocado en la estabilidad y la seguridad con fácil acceso a
        las actualizaciones de seguridad

      * Centrado en la actualización fácil a las versiones recientes
        de los paquetes de los archivos testing

      * Admite una amplia gama de arquitecturas de hardware

    El Software Libre de Debian tiene su origen en GNU, Linux, BSD,
    X, ISC, Apache, Ghostscript, Sistema de Impresión Común de Unix
    (Common Unix Printing System) , Samba, GNOME, KDE, Mozilla,
    LibreOffice, Vim, TeX, LaTeX, DocBook, Perl, Python, Tcl, Java,
    Ruby, PHP, Berkeley DB, MariaDB, PostgreSQL, SQLite, Exim,
    Postfix, Mutt, FreeBSD, OpenBSD, Plan 9 y otros muchos proyectos
    libres e independientes. Debian integra esta diversidad de
    Software Libre en un único sistema.

3. Sobre este documento

3.1. Directrices

    En la elaboración de este documento se han seguido las siguientes
    normas orientativas.

      * Proporciona una visión global y omite los casos menos
        frecuentes (Visión General)

      * Simplicidad y brevedad (KISS - Keep It Short and Simple)

      * No se reinventa la rueda (se usan enlaces a fuentes ya
        existentes)

      * Énfasis en la consola y herramientas sin interfaz gráfica de
        usuario. ( Usa ejemplos del intérprete de órdenes)

      * Es objetivo. (Usa popcon etc.)

    Sugerencia
   
    Trataré de mostrar las facetas jerárquicas y de bajo nivel del
    sistema.

3.2. Prerrequisitos

    Aviso

    Más allá de este documento, has de ser capaz de conseguir las
    respuestas por ti mismo. Este documento solo es un punto de
    partida.

    Debes buscar la solución por ti mismo a partir de las fuentes
    primarias.

      * El sitio web de Debian https://www.debian.org para la
        información general,

      * La documentación en el directorio «/usr/share/doc
        nombre_del_paquete»

      * Las páginas de manual al estilo de Unix: «dpkg -L 
        package_name |grep '/man/man.*/'»,

      * Las páginas de información (info page) al estilo GNU: «dpkg
        -L package_name |grep '/info/'»

      * El informe de errores: https://bugs.debian.org/
        nombre_del_paquete,

      * La wiki de Debian https://wiki.debian.org/ para profundizar y
        aprender sobre temas concretos,

      * La especificación UNIX única de The UNIX System Home Page del
        Open Group

      * La enciclopedia libre Wikipedia en https://www.wikipedia.org/

      * El manual del administrador de Debian,

      * Los COMOs de El Proyecto de Documentación de Linux (TLDP)

    Nota

    Para obtener documentación detallada de un paquete, necesitará
    instalar el paquete correspondiente, cuyo nombre es el nombre del
    paquete con el sufijo «-doc».

3.3. Convenciones

    Este documento proporciona información con un estilo de
    presentación simple con ejemplos del intérprete de órdenes bash
    (1).

    # command-in-root-account
    $ command-in-user-account

    Estos cursores del intérprete de órdenes diferencian el tipo de
    cuenta que tiene asociada un conjunto de variables de entorno
    como: «PS1='\$'» y «PS2=' '». Se han seleccionado estos valores
    para mejorar la claridad del documento y no tienen por qué
    ajustarse a los de un sistema real en funcionamiento.

    Todos los ejemplos de comandos se ejecutan en la configuración
    regional en inglés "LANG=en_US.UTF8". No espere que los ejemplos
    como command-in-root-account y command-in-user-account estén
    traducidos. Lo hacemos para mantener actualizados todos los
    ejemplos traducidos.

    Nota
   
    Consulte el significado de las variables de entorno «$PS1» y
    «$PS2» en bash(1).

    Cuando sea necesario ejecutar una acción requerida por parte del
    administrador del sistema se utilizará una oración imperativa, p.
    ej. «Pulse la tecla Intro después de escribir cada orden en el
    intérprete de órdenes.»

    La descripción de una columna y similares en una tabla puede
    contener un sintagma nominal seguido de las reglas de la
    descripción corta de los paquetes que eliminan los artículos como
    «un» y «la». También pueden contener una oración en infinitivo
    como un sintagma nominal seguido de la descripción corta de la
    orden según la reglas de las páginas de manual. Esto puede
    parecer que no tiene sentido, pero son reglas elegidas para
    mantener el estilo tan simple como es posible. Los sintagmas
    nominales no se inician en mayúsculas y no finalizan con un punto
    según las reglas de descripciones cortas.

    Nota
   
    Los nombres propios, incluidas las órdenes, mantienen las
    mayúsculas y las minúsculas independientemente de su lugar.

    La cita de un fragmento de una orden en un párrafo aparecerá con
    otro tipo de letra entre comillas dobles como «aptitude
    safe-upgrade».

    El contenido de un archivo de configuración en formato texto
    citado en un párrafo aparecerá con otro tipo de letra entre
    comillas dobles, como «deb-src».

    Una orden se cita por su nombre en otro tipo de letra, seguida
    opcionalmente por el número de la sección de las páginas manual a
    la que pertenece entre paréntesis, como bash(1). Se recomienda
    escribir lo siguiente para obtener más información sobre dicha
    orden.

    $ man 1 bash

    Una página de manual se cita por su nombre en otro tipo de letra
    seguido del número de la sección de la página de manual a la que
    pertenece entre paréntesis, como sources.list(5). Se recomienda
    escribir lo siguiente para obtener más información sobre dicha
    página de manual.

    $ man 5 sources.list

    Una página de información se cita con su orden en otro tipo de
    letra entre comillas dobles como, «info make». Es recomendable
    ejecutar lo siguiente para obtener más información sobre dicha
    página de información.

    $ info make

    Un nombre de archivo es referido por la fuente de la máquina de
    escribir entre comillas dobles, como "/etc/passwd". Para los
    archivos de configuración, se recomienda obtener información
    escribiendo lo siguiente.

    $ sensible-pager "/etc/passwd"

    Un nombre de directorio es referido por la fuente de máquina de
    escribir entre comillas dobles, como "/etc/apt/". Animamos a
    explorar su contenido escribiendo lo siguiente.

    $ mc "/etc/apt/"

    El nombre de un paquete se cita por su nombre con un tipo de
    letra diferente, como vim. Animo a obtener más información sobre
    el paquete escribiendo lo siguiente.

    $ dpkg -L vim
    $ apt-cache show vim
    $ aptitude show vim

    Una documentación puede indicar su ubicación mediante el nombre
    de archivo en la fuente de máquina de escribir entre comillas
    dobles, como "/usr/share/doc/base-passwd/users-and-groups.txt.gz"
    o "/usr/share/doc/base-passwd/users-and-groups.html"; o por su
    URL, como https://www.debian.org. Le animamos a leer la
    documentación escribiendo lo siguiente.

    $ zcat "/usr/share/doc/base-passwd/users-and-groups.txt.gz" | sensible-pager
    $ sensible-browser "/usr/share/doc/base-passwd/users-and-groups.html"
    $ sensible-browser "https://www.debian.org"

    Una variable de entorno se cita con su nombre en otro tipo de
    letra precedido de «$» y entre comillas dobles como «$TERM».
    Descubra el valor de dicha variable escribiendo lo que se
    muestra.

    $ echo "$TERM"

3.4. Estadísticas de uso (popcon)

    Los datos de popcon se presentan como la medida objetiva de la
    popularidad de cada paquete. Se descargó el 2026-06-25 08:29:27
    UTC y contiene el envío total de 279505 informes sobre 218050
    paquetes binarios y arquitecturas 25 .

    Nota

    Tener en cuenta que el archivo amd64 unstable contiene solo 77003
    paquetes actuales. Los datos de popcon contienen informes de
    muchas instalaciones de sistemas antiguos.

    En las estadísticas de uso, un número precedido de «V» es el
    número de «votos» que se calcula mediante la fórmula «1000 *
    (número de paquetes utilizados recientemente en el equipo)/(total
    de informes de uso remitidos)».

    En las estadística de uso, un número precedido de «I» se refiere
    al «número de instalaciones» calculado por «1000 * (número de
    instalaciones del paquete)/(el total de informes de uso)».

    Nota

    Las estadísticas de uso no determina la importancia de los
    paquetes. Existen muchos factores que puede afectar a las
    estadísticas. Por ejemplo, algunos sistemas que participan en
    estas, pueden tener directorios como «/usr/bin» con la opción
    «noatime» para mejorar el desempeño del sistema desactivando su
    sistema de «voto».

3.5. El tamaño del paquete

    El tamaño de los paquetes se presenta como una medida objetiva.
    Se obtiene del valor de «Tamaño sin comprimir:» que devuelve la
    orden apt-cache show» o «aptitude show» (en la arquitectura amd64
    de la distribución «inestable»). El tamaño informado es en KiB
    (Kibibyte = equivalente a 1024 bytes).

    Nota

    Un paquete con un tamaño pequeño puede indicar que en la
    distribución unstable es un paquete «ficticio» que instala otro
    con contenido real según sus dependencias. Un paquete «ficticio»
    permite transiciones fluidas o la división de un paquete en
    varios.

    Nota

    Cuando al tamaño del paquete le sigue «(*)» significa que no está
    disponible en la distribución «inestable» y que el valor que
    aparece es el tamaño en la distribución «experimental».

3.6. Informes de errores en este documento

    Puede informar de un error en el paquete debian-reference
    utilizando reportbug(1). Por favor, incluya la corrección
    ejecutando «diff -u» con el texto plano o la fuente.

4. Consejos para usuarios noveles

    Aquí hay algunos consejos para usuarios noveles:

      * haga copias de seguridad de sus datos

          + Consulte Sección 10.2, “Respaldo y recuperación”.

      * proteja su contraseña y claves de seguridad

      * KISS ('keep it simple stupid', mantenlo sencillo estúpido)

          + no complique su sistema

      * lea sus archivos de registro

          + el PRIMER error es el que cuenta

      * RTFM ('read the fine manual', lea el manual)
   
      * busque en Internet antes de preguntar

      * no use la cuenta del superusuario cuando no es necesario

      * no modifique el sistema de gestión de paquetes

      * no escriba nada que no entienda

      * no cambie los permisos de los archivos (si no conoce su
        impacto en la seguridad)

      * No cierre su terminal de superusuario hasta que HAYA PROBADO
        sus cambios

      * Always have an alternative boot media (USB flash drive,
        CD-ROM, …)

5. Algunos comentarios para usuarios noveles

    He aquí algunas citas interesantes de la lista de correo de
    Debian que pueden servir de ayuda a los nuevos usuarios.

      * «Así es Unix. Te da bastante cuerda para que te ahorques tu
        mismo.» --- Miquel van Smoorenburg <miquels at cistron.nl>
   
      * «Unix ES muy amigable ... únicamente que es muy puntilloso
        eligiendo a sus amigos.» --- Tollef Fog Heen <tollef at
        add.no>

    El artículo de Wikipedia «la filosofía de Unix» contiene citas
    muy interesantes.

Capítulo 1. Tutoriales de GNU/Linux

    Aprender a usar un sistema informático es como aprender un idioma
    nuevo. Aunque los libros de ayuda y la documentación son útiles,
    uno debe practicarlo. Para ayudarle a comenzar sin tropiezos, he
    escrito algunos puntos básicos.

    La calidad del diseño de Debian GNU/Linux tiene su origen en el
    sistema operativo Unix, un sistema operativo multiusuario y
    multitarea. Debe aprender a aprovechar el poder de estas
    características y las similitudes entre Unix y GNU/Linux.

    No utilice únicamente documentos de GNU/Linux y utilice también
    documentos de Unix , ya que esto le permitirá acceder a mucha
    información útil.

    Nota

    Si tiene experiencia con las herramientas de la línea de órdenes
    de algún sistema tipo Unix probablemente ya conozca lo que se
    explica en este documento. Utilice este documento para refrescar
    sus conocimientos.

1.1. Introducción a la consola

1.1.1. El cursor del intérprete de órdenes

    Al iniciar el sistema, aparecerá la pantalla de inicio de sesión
    basada en caracteres si no instaló ningún entorno GUI de sistema
    de escritorio como GNOME o KDE. Supongamos que su nombre de host
    es foo, el indicador de inicio de sesión tiene el siguiente
    aspecto.

    A pesar de tener instalado un entorno gráfico de usuario, puede
    acceder al indicador de inicio de sesión basado en caracteres
    mediante Ctrl-Alt-F3, y puede regresar al entorno GUI mediante
    Ctrl-Alt-F2 (consulte Sección 1.1.6, “Consolas virtuales” para
    más información).

    foo login:

    En el diálogo de entrada escriba su nombre de usuario, p. ej.
    pingüino y pulse la tecla Intro, a continuación escriba su
    contraseña y pulse Intro otra vez.

    Nota

    Siguiendo la tradición Unix, el nombre de usuario y la contraseña
    del sistema Debian distinguen entre mayúsculas y minúsculas. El
    nombre de usuario se suele elegir sólo entre minúsculas. La
    primera cuenta de usuario se crea normalmente durante la
    instalación. El usuario root puede crear cuentas de usuario
    adicionales con adduser(8).

    El sistema empieza mostrando el mensaje de bienvenida almacenado
    en «/etc/motd» (Mensaje del día) y muestra un cursor para
    realizar la petición de órdenes.

    Debian GNU/Linux 12 foo tty3

    foo login: penguin
    Password:

    Linux foo 6.5.0-0.deb12.4-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.5.10-1~bpo12+1 (2023-11-23) x86_64

    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.

    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
    permitted by applicable law.

    Last login: Wed Dec 20 09:39:00 JST 2023 on tty3
    foo:~$

    Ahora nos encontramos en el intérprete de órdenes (shell). El
    intérprete de órdenes interpreta las órdenes del usuario.

1.1.2. El indicador del intérprete de órdenes en GUI

    Si ha instalado un entorno GUI durante la instalación, se
    mostrará una pantalla gráfica de inicio de sesión al iniciar el
    sistema. Escribe el nombre de usuario y la contraseña para
    iniciar sesión en la cuenta de usuario sin privilegios. Use la
    pestaña para navegar entre el nombre de usuario y la contraseña,
    o use el clic principal del ratón.

    Puede obtener un cursor del intérprete de órdenes en un entorno
    gráfico abriendo un programa x-terminal-emulator como
    gnome-terminal(1), rxvt(1) o xterm(1). Si usa el entorno de
    escritorio Gnome para abrir un intérprete de órdenes debe hacer
    clic en «Aplicaciones« → «Accesorios« → «Terminal«.

    En algunos entornos de escritorio (como fluxbox), no existe un
    punto de acceso al menú tal cual. Si se encuentra en este caso,
    simplemente pruebe a hacer clic con el (botón derecho del ratón)
    sobre el fondo de escritorio y surgirá un menú.

1.1.3. La cuenta de superusuario (root)

    La cuenta root también se denomina superusuario o usuario
    privilegiado. Desde esta cuenta, puede realizar las siguientes
    tareas de administración del sistema.

      * leer, escribir y borrar cualquier archivo del sistema
        independientemente de los permisos de dicho archivo

      * Cambiar la propiedad y los permisos de cualquier archivo del
        sistema
   
      * Cambiar la contraseña de cualquier usuario no privilegiado
        del sistema

      * entrar en la cuenta de cualquier usuario sin usar su
        contraseña

    El poder ilimitado de la cuenta de superusuario necesita de un
    uso basado en la consideración y la responsabilidad.

    Aviso
   
    Nunca comparta la contraseña del superusuario con nadie.

    Nota

    Los permisos de acceso a un archivo (incluidos los dispositivos
    como un CD-ROM u otros, que son simplemente otro archivo para el
    sistema Debian) pueden hacer que sea inaccesible a los usuarios
    distintos del superusuario. Aunque el uso de la cuenta de
    superusuario es una manera rápida de comprobar este tipo de
    situaciones, resolverlas es algo que debe hacerse estableciendo
    adecuadamente los permisos del archivo y la relación de usuarios
    que pertenece a cada grupo (véase Sección 1.2.3, “Permisos del
    sistema de archivos”).

1.1.4. El cursor del intérprete de órdenes de superusuario

    A continuación podrá ver algunos métodos para acceder al
    intérprete de órdenes del superusuario utilizando la contraseña
    del mismo.

      * Escriba root en la pantalla de inicio de sesión en modo
        texto.

      * Escriba «su -l» desde cualquier intérprete de órdenes.
   
          + Esto no conserva el entorno del usuario actual.

      * Escriba «su» en cualquier intérprete de órdenes.

          + esto conserva parte del entorno del usuario actual.

1.1.5. Herramientas gráficas para la administración del sistema

    Si el menú de su escritorio no inicia las herramientas gráficas
    de administración del sistema con los permisos adecuados
    automáticamente, puede iniciarlas desde el intérprete de órdenes
    del superusuario en un emulador de terminal de X como
    gnome-terminal(1), rxvt(1), o xterm(1). Ver Sección 1.1.4, “El
    cursor del intérprete de órdenes de superusuario” y Sección 7.9,
    “conexión del servidor X”.

    Aviso

    Nunca inicies un administrador de pantalla/sesión de GUI como
    root escribiendo root en el indicador de un administrador de
    pantalla (por ejemplo, gdm3(1)).

    Nunca ejecute programas gráficos remotos no confiables en el
    sistema de ventanas X cuando se esté mostrando información
    crítica, porque dichos programas pueden realizar una
    interceptación pasiva de toda su pantalla X.

1.1.6. Consolas virtuales

    En el sistema Debian que se instala por defecto hay seis consolas
    tipo VT100 intercambiables, disponibles para iniciar un
    intérprete de órdenes directamente en el equipo Linux. A menos
    que se encuentre en un entorno gráfico, podrá cambiar entre ellas
    presionando simultáneamente la tecla Alt situado en la izquierda
    y una de las teclas F1 — F6. Cada consola en modo texto permite
    acceder independientemente a la cuenta y acceder a un entorno
    multiusuario. Este entorno multiusuario es una gran
    característica de Unix y es muy adictivo.

    Si está en un entorno GUI puede ir a la consola de caracteres 3
    con la tecla Ctrl-Alt-F3, es decir, presionando al mismo tiempo
    Left Ctrl y Left Alt y tecla F3. Puede presionar Alt-F2 para
    volver al entorno de GUI, que generalmente se ejecuta en la
    consola virtual 2.

    También puede cambiar a otra consola virtual, p. ej. a la consola
    3, desde el intérprete de órdenes.

    # chvt 3

1.1.7. Cómo cerrar el intérprete de órdenes

    Pulsando Ctrl-D, es decir, la tecla Ctrl de la izquierda y la
    tecla d simultáneamente en el intérprete de órdenes, se cerrará.
    Si se encuentra en una consola de modo texto, volverá a ver la
    pantalla de inicio de sesión. Aunque es normal referirse a estos
    caracteres de control como «control D» en mayúscula, no es
    necesario pulsar la tecla de mayúsculas. La abreviatura ^D
    también es muy utilizada para Ctrl-D. Otra forma de cerrar el
    intérprete de órdenes es escribiendo «exit».

    Si está en x-terminal-emulator (1), puede cerrar la ventana
    x-terminal-emulator con esto.

1.1.8. Cómo apagar el sistema

    Al igual que cualquier otro sistema operativo moderno en el que
    la operación con ficheros implica almacenamiento de datos en
    memoria para mejorar el rendimiento, el sistema Debian necesita
    el procedimiento de apagado adecuado antes de poder apagarse de
    forma segura. Esto es para mantener la integridad de los
    ficheros, forzando que todos los cambios en memoria se escriban
    en el disco. Si el software de control de energía está
    disponible, el procedimiento de apagado apaga automáticamente el
    sistema. (De lo contrario, es posible que tenga que pulsar el
    botón de encendido durante unos segundos después del
    procedimiento de apagado)

    Puedes apagar el sistema en modo multiusuario normal desde la
    línea de comandos.

    # shutdown -h now

    Puede apagar el sistema en el modo monousuario desde el
    intérprete de órdenes como se muestra.

    # poweroff -i -f

    Ver Sección 6.3.8, “Apagar un sistema remoto con SSH”.

1.1.9. Cómo recuperar la configuración normal de una consola

    Cuando la pantalla se vuelve loca tras hacer alguna cosa
    divertida como «cat un-archivo-binario», escriba «reset» en el
    intérprete de órdenes. Puede que no sea posible ver la orden en
    la pantalla mientras la teclea. Además, puede escribir «clear»
    para limpiar la pantalla.

1.1.10. Paquetes complementarios recomendados para usuarios sin
experiencia

    Una instalación mínima del sistema Debian sin ningún entorno de
    escritorio proporciona la funcionalidad básica de Unix, sin
    embargo es una buena idea instalar algunos paquetes de terminal
    de caracteres adicionales basados en curses o en modo texto como
    mc y vim mediante la orden apt-get(8) para que los nuevos
    usuarios empiecen a tener experiencia con lo siguiente.

    # apt-get update
     ...
    # apt-get install mc vim sudo aptitude
     ...

    Si los paquetes antes mencionados están instalados con
    anterioridad, no se instalará ningún paquete nuevo.

    Tabla 1.1. Relación de paquetes con programas interesantes en
    modo texto

    +---------------------------------------------------------------+
    | paquete |popularidad|tamaño|           descripción            |
    |---------+-----------+------+----------------------------------|
    |mc       |V:41, I:182|1590  |Un gestor de archivos en modo     |
    |         |           |      |texto a pantalla completa         |
    |---------+-----------+------+----------------------------------|
    |         |           |      |Un programa para dar algunos      |
    |sudo     |V:750,     |6774  |privilegios de superusuario a los |
    |         |I:866      |      |usuarios de acuerdo a la          |
    |         |           |      |configuración establecida         |
    |---------+-----------+------+----------------------------------|
    |         |           |      |Editor de texto Unix Vi IMproved  |
    |vim      |V:85, I:347|4135  |(Vi Mejorado), un editor de texto |
    |         |           |      |para programadores (versión       |
    |         |           |      |estándar)                         |
    |---------+-----------+------+----------------------------------|
    |         |           |      |Editor de texto Unix Vi IMproved  |
    |vim-tiny |V:57, I:979|1862  |(Vi Mejorado), un editor de texto |
    |         |           |      |para programadores (versión       |
    |         |           |      |compacta)                         |
    |---------+-----------+------+----------------------------------|
    |emacs-nox|V:3, I:13  |46564 |El proyecto GNU Emacs, un editor  |
    |         |           |      |de texto ampliable basado en Lisp |
    |---------+-----------+------+----------------------------------|
    |w3m      |V:11, I:137|2853  |Navegadores web en modo texto     |
    |---------+-----------+------+----------------------------------|
    |gpm      |V:8.7,     |524   |Copiar y pegar, al estilo Unix, en|
    |         |I:9.5      |      |la consola de texto (demonio)     |
    +---------------------------------------------------------------+


    Puede ser una buena idea que usted leyera algo de documentación
    útil.

    Tabla 1.2. Relación de paquetes con documentación útil

    +---------------------------------------------------------------+
    |      paquete       |popularidad|tamaño|      descripción      |
    |--------------------+-----------+------+-----------------------|
    |                    |           |      |Documentación del      |
    |                    |           |      |Proyecto Debian,       |
    |doc-debian          |I:883      |185   |Preguntas Frecuentes   |
    |                    |           |      |(FAQ) y otros          |
    |                    |           |      |documentos             |
    |--------------------+-----------+------+-----------------------|
    |                    |           |      |Manual de la           |
    |debian-policy       |I:7.4      |5147  |Directrices Debian y   |
    |                    |           |      |documentos asociados   |
    |--------------------+-----------+------+-----------------------|
    |                    |           |      |Directrices e          |
    |developers-reference|V:0.2,     |2635  |información para       |
    |                    |I:2.4      |      |desarrolladores de     |
    |                    |           |      |Debian                 |
    |--------------------+-----------+------+-----------------------|
    |debmake-doc         |I:0.37     |11807 |Guía para Mantenedores |
    |                    |           |      |de Debian              |
    |--------------------+-----------+------+-----------------------|
    |debian-history      |I:0.52     |6251  |Historia del Proyecto  |
    |                    |           |      |Debian                 |
    |--------------------+-----------+------+-----------------------|
    |debian-faq          |I:881      |791   |Preguntas frecuentes   |
    |                    |           |      |(FAQ) sobre Debian     |
    +---------------------------------------------------------------+


    Puedes instalar algunos de estos paquetes de la siguiente manera.

    # apt-get install package_name

1.1.11. Una cuenta de usuario adicional

    Si no quiere utilizar su cuenta de usuario aprende y práctica,
    puede crear una cuenta de usuario, p. ej. pescado, para ello haga
    lo siguiente.

    # adduser fish

    Conteste a todas las preguntas.

    Con ello se creará una nueva cuenta llamada pescado. Cuando
    termine de practicar, puede borrar esta cuenta y su directorio de
    usuario como se muestra.

    # deluser --remove-home fish

    En sistemas Debian especializados y no Debian, las actividades
    anteriores deben utilizar niveles inferiores useradd (8) y
    userdel (8) utilidades, en su lugar.

1.1.12. Configuración de sudo

    Para una estación de trabajo típica de un único usuario o un
    escritorio Debian en un portátil, es normal realizar una
    configuración sencilla de sudo(8) como se indica a continuación
    para permitir al usuario no privilegiado, p. ej. pinguino,
    obtener los privilegios administrativos simplemente con su
    contraseña de usuario sin utilizar la contraseña del
    superusuario.

    # echo "penguin  ALL=(ALL) ALL" >> /etc/sudoers

    También es normal hacerlo de la siguiente manera para permitir al
    usuario no privilegiado, p. ej. pinguino, ganar los privilegios
    administrativos sin usar ninguna contraseña como se muestra.

    # echo "penguin  ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

    Este truco solamente se debe usar en una estación de trabajo con
    un único usuario en la que usted sea el administrador y usuario
    único.

    Aviso

    No establezca de esta manera privilegios para cuentas de usuarios
    no privilegiados en una estación de trabajo multiusuario porque
    es perjudicial para la seguridad del sistema.

    Atención

    La contraseña de la cuenta pinguino, en los ejemplos de arriba,
    requiere tanta protección como la contraseña del superusuario.
   
    Los privilegios administrativos pertenecen a alguien autorizado a
    realizar tareas de administración del sistema en la estación de
    trabajo. Nunca le de a un administrador del departamento de
    Sistemas de su compañía ni a su jefe tales privilegios a menos
    que estén autorizados y sean capaces.

    Nota

    Para dar privilegios de acceso a determinados dispositivos y
    determinados archivos debería considerar usar grupos para dar
    acceso limitado en lugar de utilizar los privilegios de
    superusuario vía sudo(8).
   
    Con una configuración mejor pensada y cuidadosa, sudo(8) puede
    dar privilegios administrativos limitados a otros usuarios en un
    sistema compartido sin compartir la contraseña de superusuario.
    Esto puede ayudar en el mantenimiento de un equipo con múltiples
    administradores de manera que usted pueda saber quién hizo qué.
    Por otra parte, puede preferir que nadie más tenga tales
    privilegios.

1.1.13. Hora de jugar

    Ahora está listo para jugar con el sistema Debian sin riesgos
    siempre que utilice la cuenta de usuario sin privilegios.

    Esto se debe a que el sistema Debian está, incluso en una
    instalación por defecto, configurado con los permisos de archivos
    adecuados que impide que los usuarios no privilegiados dañen el
    sistema. Por supuesto, puede haber aún algunos agujeros que se
    pudieran explotar, pero aquellos a quienes interesen esos
    detalles, que no trataremos aquí, pueden obtener la información
    precisa en Manual de seguridad de Debian.

    Aprendemos el sistema Debian como un sistema Unix-like con lo
    siguiente.

      * Sección 1.2, “Sistema de archivos tipo Unix” (conceptos
        básicos),

      * Sección 1.3, “Midnight Commander (MC)” (método de
        supervivencia),

      * Sección 1.4, “Fundamentos de entornos de trabajo tipo Unix”
        (método básico),

      * Sección 1.5, “Órdenes simples para el intérprete de órdenes”
        (mecanismos del intérprete de órdenes (shell)),

      * Sección 1.6, “Operaciones de texto al estilo de Unix” (método
        de procesado de texto)

1.2. Sistema de archivos tipo Unix

    En GNU/Linux y otros sistemas operativos tipo Unix, los archivos
    se organizan en directorios. Todos los archivos y directorios
    están ordenados en un gran árbol que tiene como raíz «/». Se le
    llama árbol porque si se dibuja el sistema de archivos, parece un
    árbol pero cabeza abajo.

    Estos archivos y directorios pueden distribuirse entre varios
    dispositivos. mount(8) se utiliza para añadir el sistema de
    archivos que se encuentra en un dispositivo al gran árbol de
    archivos. Inversamente, umount(8) lo desconecta del gran árbol de
    archivos. En los núcleos más recientes de Linux, mount(8), con
    determinadas opciones, puede unir parte de un sistema de ficheros
    en otro sitio del árbol o puede montar un sistema de archivos
    como compartido, privado, esclavo o no enlazable. Las opciones
    soportadas para cada sistema de ficheros están disponibles en «/
    usr/share/doc/linux-doc-*/Documentation/filesystems/».

    Los directorios de los sistemas Unix se llaman carpetas en otros
    sistemas. Por favor, note que no existe el concepto de unidad
    como «A:» en ningún sistema Unix. Solamente hay un sistema de
    archivos y todo se encuentra en él. Esto es una gran ventaja en
    comparación con Windows.

1.2.1. Información básica sobre archivos en Unix

    Estos son algunos conceptos básicos de los archivos Unix.

      * Los nombres de archivos son sensibles a mayúsculas. Es decir,
        «MIARCHIVO» y «MiArchivo» son archivos diferentes.

      * El directorio raíz (root en inglés) se llama así por estar en
        la raíz del sistema de archivos representado simplemente por
        «/». No lo confunda con el directorio del superusuario: «/
        root».

      * Cada directorio tiene un nombre que puede contener cualquier
        letra o símbolo excepto «/». El directorio raíz es una
        excepción: su nombre es «/» (pronunciado «barra« o «el
        directorio raíz«) y no se puede renombrar.

      * Cada archivo o directorio se identifi con un nombre
        completamente cualificado, nombre absoluto, o ruta), dando la
        secuencia de directorios que deben atravesarse para
        alcanzarlo. Los tres términos son sinónimos.

      * Todos los nombres completamente cualificados comienzan con el
        directorio «/», y se coloca una «/» entre cada dos nombres de
        directorio o archivo en el nombre de fichero completo. La
        primera «/» es el directorio de más alto nivel (la raíz) y
        las demás «/» separan subdirectorios sucesivos hasta que
        alcanzamos la última entrada, que es el nombre real del
        archivo en cuestión. Las palabras pueden ser confusas.
        Elijamos el siguiente nombre completamente cualificado como
        un ejemplo: «/usr/share/keytables/es.map.gz». Es de uso
        generalizado el referirse a la última entrada «es.map.gz»
        como un nombre de archivo.

      * El directorio raíz tiene un cierto número de ramificaciones,
        como «/etc/» y «/usr/». Estos subdirectorios a su vez se
        ramifican en más subdirectorios, como «/etc/systemd/» y «/usr
        /local/». El todo, visto colectivamente, se llama árbol de
        directorios. Puede pensar que un nombre de archivo absoluto
        es una ruta desde la raíz del árbol («/») hasta la hoja de
        una rama (un archivo). También oirá hablar del árbol de
        directorios como de un árbol genealógico que descienden de un
        elemento único llamado raíz («/»: así, los subdirectorios
        tienen padres y una ruta muestra la genealogía completa de un
        archivo. Hay, además, rutas relativas que comienzan de alguna
        otra manera que con el directorio raíz. Debe recordar que el
        directorio «../» hace referencia al directorio padre. Esta
        terminología se utiliza también para otras estructuras
        semejantes a los directorios, como las estructuras
        jerárquicas de datos.

      * No existen directorios, que forman parte de las rutas que
        describen archivos, que se correspondan con dispositivos
        físicos, como discos duros. Esto cambia respecto a RT-11, CP/
        M, OpenVMS, MS-DOS, AmigaOS y Microsoft Windows, donde la
        ruta contiene el nombre del dispositivo, como «C:\». Sin
        embargo, existen directorios que referencian dispositivos
        físicos como parte del sistema de archivos. Ver
        Sección 1.2.2, “Sistemas de archivos internos”)

    Nota

    Es posible usar casi cualquier letra o símbolo en el nombre de un
    archivo, pero es una mala idea. Es preferible evitar el uso de
    cualquier carácter que tenga un significado especial en la línea
    de órdenes, incluido espacios, tabulaciones, saltos de línea y
    otros caracteres especiales: { } ( ) [ ] ' ` " \ / > < | ; ! # &
    ^ * % @ $. Si quiere separar palabras en un nombre, son buenas
    elecciones el punto, el guión y el guión bajo. Además puede
    empezar cada palabra con mayúscula, «ComoEsto». Los usuarios con
    experiencia suelen evitar los espacios en los nombres de archivo.

    Nota
   
    La palabra «root» puede referirse a «superusuario» o «directorio
    raíz». El contexto determinará su significado correcto.

    Nota

    El término path se utiliza tanto para los nombres de archivos que
    especifican la ruta completa, como hemos hecho con anterioridad,
    como en la ruta para la búsqueda de órdenes. El significado
    correcto vendrá determinado por el contexto.

    Las mejores prácticas detalladas para la jerarquía de ficheros se
    describen en el Filesystem Hierarchy Standard ("/usr/share/doc/
    debian-policy/fhs/fhs-2.3.txt.gz" y hier(7)). Como comienzo debes
    recordar los siguientes hechos.

    Tabla 1.3. Relación de directorios clave y su uso

    +---------------------------------------------------------------+
    |directorio|                 uso del directorio                 |
    |----------+----------------------------------------------------|
    |/         |directorio raíz                                     |
    |----------+----------------------------------------------------|
    |/etc/     |archivos principales para la configuración del      |
    |          |sistema                                             |
    |----------+----------------------------------------------------|
    |/var/log/ |archivos de registro del sistema                    |
    |----------+----------------------------------------------------|
    |/home/    |todos los directorios personales de usuario sin     |
    |          |privilegios                                         |
    +---------------------------------------------------------------+


1.2.2. Sistemas de archivos internos

    Siguiendo la tradición de Unix, el sistema Debian GNU/Linux
    ofrece el sistemas de archivos «/dev/» que representa de manera
    unificada el almacenamiento físico en discos duros u otros
    dispositivos de almacenamiento y la interacción con los
    dispositivos hardware como las consolas en modo texto o las
    consolas en serie remotas.

    Cada archivo, directorio, tubería con nombre (sirve para
    compartir datos entre dos programas) o dispositivo físico tiene
    en el sistema Debian GNU/Linux una estructura con metainformación
    llamada inodo que describe sus propiedades como quién es su dueño
    (owner), el grupo al que pertenece, la fecha de último acceso,
    etc. La idea de incluir todo en el sistema de archivos fue una
    innovación de Unix y las versiones modernas de los núcleos de
    Linux la han llevado más allá. Hoy en día puede encontrar en el
    sistema de archivos incluso información de procesos en ejecución.

    La representación unificada y abstracta tanto de entidades
    físicas como de procesos internos es sumamente útil ya que
    permite el uso de la misma orden para el mismo tipo de operación
    en dispositivos totalmente diferentes. Incluso es posible cambiar
    la forma de trabajar del núcleo escribiendo datos en archivos
    especiales que están enlazándolos a procesos en ejecución.

    Sugerencia
   
    Si necesita determinar la correspondencia entre un árbol de
    archivos y un elemento físico, ejecute mount(8) sin parámetros.

1.2.3. Permisos del sistema de archivos

    Los permisos del sistema de archivos de Unix-like se definen en
    tres categorías de usuarios afectados.

      * El usuario que es dueño del archivo (u)

      * Los usuarios que pertenecen al mismo grupo al que pertenece
        el archivo (h)

      * Todos los usuarios de other (o), también llamado "mundo" o
        "todo el mundo"

    Para el fichero, cada permiso correspondiente permite las
    siguientes acciones.

      * El permiso de lectura (r) permite al dueño examinar el
        contenido del archivo.

      * El permiso de escritura (w) permite al dueño modificar el
        archivo.

      * el permiso de ejecución (x) permite al dueño ejecutar el
        archivo como una orden.

    Para el directorio, cada permiso correspondiente permite las
    siguientes acciones.

      * El permiso de lectura (r) permite al propietario listar el
        contenido del directorio.

      * El permiso de escritura (w) permite al propietario añadir o
        eliminar archivos en el directorio.

      * el permiso de ejecución (x) permite al dueño acceder a los
        archivos del directorio.

    El permiso de ejecución de un directorio no solo indica que se
    pueden leer los archivos que contiene, sino que también sus
    atributos, como el tamaño y la fecha de modificación.

    ls(1) se utiliza para mostrar información de permisos (y más)
    para archivos y directorios. Cuando se invoca con la opción "-l",
    muestra la siguiente información en el orden indicado.

      * tipo de fichero (primer carácter),

      * permisos del archivo (nueve caracteres, tres para el usuario,
        tres para el grupo y los tres últimos para el resto, en este
        orden),

      * número de enlaces duros al archivo,

      * nombre del usuario que es dueño del archivo,

      * nombre del grupo al que pertenece,

      * tamaño del archivo expresado en caracteres (bytes),

      * fecha y hora del archivo (mtime),

      * nombre del archivo

    Tabla 1.4. La interpretación del primer carácter de cada línea de
    la salida de «ls -l» se interpreta como se muestra

    +---------------------------------------------------+
    |carácter|               significado                |
    |--------+------------------------------------------|
    |-       |archivo normal                            |
    |--------+------------------------------------------|
    |d       |directorio                                |
    |--------+------------------------------------------|
    |l       |enlace simbólico                          |
    |--------+------------------------------------------|
    |c       |nodo de dispositivo orientado a caracteres|
    |--------+------------------------------------------|
    |b       |nodo de dispositivo orientado a bloques   |
    |--------+------------------------------------------|
    |p       |tubería con nombre                        |
    |--------+------------------------------------------|
    |s       |socket                                    |
    +---------------------------------------------------+


    Para cambiar el dueño de un archivo, el superusuario utiliza la
    orden chown(1). Para alterar el grupo de un archivo, su dueño
    utiliza la orden chgrp(1). Para modificar los permisos del acceso
    al archivo o directorio, su dueño o el superusuario utilizan la
    orden chmod(1). La sintaxis para operar sobre un archivo foo es
    la que se muestra.

    # chown newowner foo
    # chgrp newgroup foo
    # chmod  [ugoa][+-=][rwxXst][,...] foo

    Por ejemplo, se puede asignar a un árbol de directorios como
    dueño al usuario foo y como grupo bar como se muestra.

    # cd /some/location/
    # chown -R foo:bar .
    # chmod -R ug+rwX,o=rX .

    Existen tres bits adicionales de permisos especiales.

      * El bit set user ID (s o S en lugar del permiso del dueño x)

      * El bit set group ID (s o S en lugar del permiso del grupo x)

      * El bit sticky (t o T en vez del permiso de todos x)

    Aquí, la salida de "ls -l" para estos bits está en mayúscula si
    los bits de ejecución ocultos por estas salidas están sin
    configurar.

    La configuración de set user ID en un archivo ejecutable permite
    a un usuario ejecutarlo con todos los privilegios de su dueño (al
    ejecutarlo con el identificador del dueño, por ejemplo root).
    Igualmente la configuración set group ID en un archivo ejecutable
    permite al usuario ejecutarlo con todos los privilegios de su
    grupo (al ejecutarlo con el identificador del grupo, por ejemplo 
    root). Esto crea riesgos de seguridad, por lo que su
    configuración debe ser extremadamente cuidadosa.

    La configuración del bit set group ID en un directorio permite la
    creación de archivos al estilo BSD, donde todos los archivos
    creados en el directorio pertenecen al mismo grupo que el
    directorio.

    Activar el sticky bit en un directorio impide que sus archivos
    sean eliminados por alguien que no es su dueño. En los
    directorios con permisos de escritura para todos, como «/tmp», o
    para su grupo, con el fin de asegurar la integridad de los
    archivos, se debe eliminar los permisos de escritura de los
    archivos. Además se debe configurar el sticky bit en el
    directorio para evitar que cualquier usuario con permiso de
    escritura en él pueda borrar un archivo y después crear otro con
    el mismo nombre.

    Aquí están algunos ejemplos interesantes.

    $ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4
    crw------T 1 root root   108, 0 Oct 16 20:57 /dev/ppp
    -rw-r--r-- 1 root root     2761 Aug 30 10:38 /etc/passwd
    -rw-r----- 1 root shadow   1695 Aug 30 10:38 /etc/shadow
    -rwsr-xr-x 1 root root   973824 Sep 23 20:04 /usr/sbin/exim4
    $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src
    drwxrwxrwt 14 root root  20480 Oct 16 21:25 /tmp
    drwxrwsr-x 10 root staff  4096 Sep 29 22:50 /usr/local
    drwxr-xr-x 10 root root   4096 Oct 11 00:28 /usr/src
    drwxrwsr-x  2 root mail   4096 Oct 15 21:40 /var/mail
    drwxrwxrwt  3 root root   4096 Oct 16 21:20 /var/tmp

    La orden chmod(1) tiene otra forma de describir los permisos
    mediante números. Este modo numérico utiliza 3 o 4 dígitos en
    base octal (base 8).

    Tabla 1.5. El modo numérico en chmod(1) es como se muestra

    +---------------------------------------------------------------+
    |   dígito   |                   significado                    |
    |------------+--------------------------------------------------|
    |1º dígito   |suma de set user ID (=4), set group ID (=2) y     |
    |(opcional)  |sticky bit (=1)                                   |
    |------------+--------------------------------------------------|
    |2º dígito   |suma de los permisos de lectura (=4), escritura (=|
    |            |2) y ejecución (=1) para usuario                  |
    |------------+--------------------------------------------------|
    |3º dígito   |idem para el grupo                                |
    |------------+--------------------------------------------------|
    |4º dígito   |idem para todos                                   |
    +---------------------------------------------------------------+


    Parece más complicado de lo que es. Si se fija en las primeras
    columnas (de la 2 a la 10) de la salida de la orden «ls -l» y la
    lee como la representación en binario (base 2) de los permisos
    del archivo («-» siendo «0» y cualquiera de «rwx» un «1»), la
    conversión a octal (base 8) de los últimos 3 dígitos
    representaría los permisos del archivo.

    Por ejemplo, intente lo siguiente

    $ touch foo bar
    $ chmod u=rw,go=r foo
    $ chmod 644 bar
    $ ls -l foo bar
    -rw-r--r-- 1 penguin penguin 0 Oct 16 21:39 bar
    -rw-r--r-- 1 penguin penguin 0 Oct 16 21:35 foo

    Sugerencia

    Si necesita acceder a información de salida de la orden «ls -l»
    en un archivo de órdenes, es mejor utilizar las órdenes como test
    (1), stat(1) y readlink(1). La funcionalidad interna del
    intérprete de órdenes como«[» o «test» se puede usar también.

1.2.4. Gestión de permisos para nuevos archivos: umask

    Los permisos que se asignan por defecto a los nuevos archivos y
    directorios cuando estos se crean están definidos por la orden
    interna del intérprete de órdenes umask. Consulte dash(1), bash
    (1) y builtins(7).

     (file permissions) = (requested file permissions) & ~(umask value)

    Tabla 1.6. Ejemplos de valores de umask

    +---------------------------------------------------------------+
    |umask| permisos creados |  permisos creados  |       uso       |
    |     | para un archivo  | para un directorio |                 |
    |-----+------------------+--------------------+-----------------|
    |0022 |-rw-r--r--        |-rwxr-xr-x          |modificable solo |
    |     |                  |                    |por el usuario   |
    |-----+------------------+--------------------+-----------------|
    |0002 |-rw-rw-r--        |-rwxrwxr-x          |modificable por  |
    |     |                  |                    |el grupo         |
    +---------------------------------------------------------------+


    El sistema Debian utiliza por defecto un esquema de grupos
    privados de usuarios (UPG). Un grupo privado de usuario se crea
    cuando sea añade un nuevo usuario al sistema. El UPG tiene el
    mismo nombre que el usuario para el cual fue creado y ese usuario
    es el único miembro de ese grupo. En el esquema UPG es seguro
    asignar a la máscara (umask) el valor 0002 ya que cada usuario
    tiene un grupo privado propio. (En algunas variantes de Unix, es
    común que todos los usuarios no privilegiados pertenezcan al
    mismo grupo users siendo buena idea asignar el valor 0022 a la
    máscara por motivos de seguridad.)

    Sugerencia
   
    Active UPG añadiendo «umask 002» en el archivo ~/.bashrc.

1.2.5. Permisos para grupos de usuarios (grupo)

    Aviso
   
    Por favor, asegúrese de guardar los cambios no guardados antes de
    realizar reinicios o acciones similares.

    Puedes añadir un usuario penguin a un grupo bird en dos pasos:

      * Cambie la configuración del grupo utilizando una de las
        siguientes opciones:

          + Ejecute "sudo usermod -aG bird penguin".

          + Ejecute "sudo adduser penguin bird" (sólo en sistemas
            Debían típicos)

          + Ejecute "sudo vigr" para /etc/group y "sudo vigr -s" para
            /etc/gshadow para añadir penguin en la línea para bird.

      * Aplique la configuración utilizando una de las siguientes
        opciones:

          + Reinicio e inicio de sesión. (Mejor opción)

          + Cerrar la sesión con el menú GUI y volver a entrar.
            (Puede no funcionar en el entorno de escritorio actual).

    Puedes eliminar un usuario penguin de un grupo bird en dos pasos:

      * Cambie la configuración del grupo utilizando una de las
        siguientes opciones:

          + Ejecute "sudo usermod -rG bird penguin".

          + Ejecute "sudo deluser penguin bird" (sólo en sistemas
            Debian típicos)

          + Ejecute "sudo vigr" para /etc/group y "sudo vigr -s" para
            /etc/gshadow para eliminar penguin en la línea para bird.
   
      * Aplique la configuración utilizando una de las siguientes
        opciones:

          + Reinicio e inicio de sesión. (Mejor opción)

          + Ejecute "kill -TERM -1" y realice algunas acciones de
            reparación como "systemctl restart
            NetworkManager.service".

          + El cierre de sesión a través del menú GUI no es una
            opción para Gnome Desktop.

    Cualquier intento de reinicio en caliente es un frágil sustituto
    del verdadero reinicio en frío en el sistema de escritorio
    moderno.

    Nota

    Otra manera dinámica consiste en añadir usuarios a grupos durante
    el proceso de acreditación añadiendo la línea «auth optional
    pam_group.so» al archivo «/etc/pam.d/common-auth» y configurar «/
    etc/security/group.conf». (Consulte Capítulo 4, Autenticación y
    controles de acceso.)

    Los dispositivos de hardware son también archivos en el sistema
    Debian. Si tiene problemas al acceder a dispositivos como el
    CD-ROM o dispositivos de memoria USB con una cuenta de usuario,
    debería añadir a este usuario al grupo pertinente.

    Algunos grupos importantes del propio sistema permiten a sus
    miembros acceder a archivos y directorios específicos sin
    privilegios de superusuario.

    Tabla 1.7. Relación de grupos importantes del sistema para el
    acceso a archivos

    +---------------------------------------------------------------+
    | grupo |   descripción de archivos y dispositivos accesibles   |
    |-------+-------------------------------------------------------|
    |dialout|acceso directo y completo a los puertos serie («/dev/  |
    |       |ttyS[0-3]»)                                            |
    |-------+-------------------------------------------------------|
    |       |acceso limitado a los puertos serie para establecer    |
    |dip    |conexiones a internet por vía telefónica (dialup IP) a |
    |       |pares confiables                                       |
    |-------+-------------------------------------------------------|
    |cdrom  |dispositivos CD-ROM, DVD+/-RW                          |
    |-------+-------------------------------------------------------|
    |audio  |dispositivo audio                                      |
    |-------+-------------------------------------------------------|
    |video  |dispositivo de vídeo                                   |
    |-------+-------------------------------------------------------|
    |scanner|escáner                                                |
    |-------+-------------------------------------------------------|
    |adm    |registros de supervisión del sistema                   |
    |-------+-------------------------------------------------------|
    |staff  |algunos directorios para la administración básica del  |
    |       |sistema: «/usr/local», «/home»                         |
    +---------------------------------------------------------------+


    Sugerencia

    Necesita pertenecer al grupo dialout para reconfigurar el modem,
    marcar, etc. Pero si el superusuario crea archivos de
    configuraciones predefinidas para algunos pares en «/etc/ppp/
    peers/», únicamente necesitará pertenecer al grupo dip para crear
    conexiones a internet por vía telefónica a estos pares usando las
    órdenes pppd(8), pon(1) y poff(1).

    Algunos grupos importantes proporcionados por el sistema permiten
    a sus miembros ejecutar determinadas órdenes sin privilegios de
    superusuario.

    Tabla 1.8. Relación de grupos importantes del sistema para la
    ejecución de órdenes específicas

    +---------------------------------------------------------------+
    | grupo |                  órdenes permitidas                   |
    |-------+-------------------------------------------------------|
    |sudo   |execute any command with superuser privileges          |
    |-------+-------------------------------------------------------|
    |lpadmin|ejecuta órdenes para añadir, modificar y eliminar las  |
    |       |impresoras disponibles                                 |
    +---------------------------------------------------------------+


    Puede consultar una relación completa de los usuarios y grupos
    del sistema en el documento «Users and Groups« /usr/share/doc/
    base-passwd/users-and-groups.html del paquete base-passwd.

    Consulte las órdenes para la gestión de usuarios y grupos: passwd
    (5), group(5), shadow(5), newgrp(1), vipw(8), vigr(8) y pam_group
    (8).

1.2.6. Marcas de tiempo

    Existen tres tipos de marcas o sellos de tiempo para un archivo
    GNU/Linux.

    Tabla 1.9. Relación de tipos de marcas de tiempo

    +------------------------------------------------+
    |tipo |significado (definición histórica en Unix)|
    |-----+------------------------------------------|
    |mtime|el momento de modificación (ls -l)        |
    |-----+------------------------------------------|
    |ctime|el momento de cambio de estado (ls -lc)   |
    |-----+------------------------------------------|
    |atime|el momento del último acceso (ls -lu)     |
    +------------------------------------------------+


    Nota
   
    ctime no es el momento de creación del archivo.

    Nota
   
    El significado actual de atime en sistemas GNU/Linux puede no ser
    diferente del de Unix clásico.

      * Al sobrescribir un archivo se cambian todos los atributos 
        mtime, ctime y atime del archivo.

      * Cambiar la propiedad o el permiso de un archivo modifica los
        atributos ctime y atime del archivo.

      * la lectura de un archivo en un sistema Unix clásico modifica
        su propiedad atime.

      * La lectura de un archivo cambia el atributo atime del archivo
        en el sistema GNU/Linux si su sistema de archivos está
        montado con " strictatime ".

      * La lectura de un archivo por primera vez o después de un día
        cambia la propiedad atime en un sistema GNU/Linux si el
        sistema de archivos está montado con la opción «relatime».
        (comportamiento por defecto desde Linux 2.6.30)

      * La lectura del archivo no cambia su propiedad atime en un
        sistema GNU/Linux si el sistema de archivos está montado con
        la opción «noatime».

    Nota

    Las opciones de montaje «noatime» y «relatime» se diseñaron para
    mejorar el desempeño de lectura del sistema de archivos de forma
    normal. La simple lectura de un archivo con la opción
    «strictatime» genera una operación de escritura para actualizar
    la propiedad atime. El atributo atime se usa poco excepto para el
    archivo mbox(5). Consulte mount(8).

    Utilice la orden touch(1) para cambiar las marcas de tiempo de
    los archivos existentes.

    Para la fecha, el comando ls genera cadenas localizadas en una
    configuración regional que no es inglesa ("fr_FR.UTF-8").

    $ LANG=C  ls -l foo
    -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
    $ LANG=en_US.UTF-8  ls -l foo
    -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
    $ LANG=fr_FR.UTF-8  ls -l foo
    -rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo

    Sugerencia
   
    Consulte Sección 9.3.4, “Personalización de la visualización de
    la fecha y hora” para personalizar la salida de «ls -l».

1.2.7. Enlaces

    Existen dos métodos para asociar a un archivo "foo" con otro
    nombre de archivo "bar".

      * enlace duro,

          + Nombre duplicado de un fichero ya existente

          + «ln foo bar»
   
      * Enlace simbólico o «simlink»

          + Fichero especial que apunta a otro fichero por su nombre

          + «ln -s foo bar».

    Con el siguiente ejemplo se muestra los cambios en el contador de
    enlaces y las sutiles diferencias de la orden rm.

    $ umask 002
    $ echo "Original Content" > foo
    $ ls -li foo
    1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo
    $ ln foo bar     # hard link
    $ ln -s foo baz  # symlink
    $ ls -li foo bar baz
    1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar
    1450180 lrwxrwxrwx 1 penguin penguin  3 Oct 16 21:47 baz -> foo
    1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo
    $ rm foo
    $ echo "New Content" > foo
    $ ls -li foo bar baz
    1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar
    1450180 lrwxrwxrwx 1 penguin penguin  3 Oct 16 21:47 baz -> foo
    1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo
    $ cat bar
    Original Content
    $ cat baz
    New Content

    Los enlaces duros deben ser construidos en el mismo sistema de
    archivos y comparten el mismo «inodo» como revela el parámetro
    «-i» de la orden ls(1) .

    Los enlaces simbólicos siempre tienen permisos de acceso al
    archivo nominales «rwxrwxrwx», como se mostró en el ejemplo
    anterior, con los permisos reales que tenga el archivo al que
    referencia.

    Atención

    En general es preferible no crear nunca enlaces simbólicos o
    enlaces duros excepto que tenga poderosas razones. Los enlaces
    simbólicos puede causar problemas graves al crear bucles en el
    sistema de archivos.

    Nota
   
    En general es preferible crear enlaces simbólicos a enlaces
    duros, al menos que tenga alguna buena razón para ello.

    El directorio . enlaza al propio directorio en el que aparece,
    por lo que la cuenta de enlaces de cualquier nuevo directorio es
    2. El directorio «..» enlaza al directorio padre, por lo que la
    cuenta de enlaces del directorio se incrementa con la creación de
    nuevos subdirectorios.

    Si proviene de Windows, pronto comprenderá lo bien diseñado que
    están los enlaces de Unix, comparados con su equivalente en
    Windows que son los accesos directos (shortcuts). Gracias su
    implementación en el sistema de archivos, las aplicaciones no
    distinguen entre el archivo original y su enlace. En el caso de
    los enlaces duros, ciertamente no existe diferencia.

1.2.8. Tuberías con nombre (FIFOs)

    Una tubería con nombre es un archivo que se comporta como una
    tubería. Usted introduce algo dentro del archivo y sale por el
    otro lado. Por esa razón se dice que es FIFO o
    primero-en-entrar-primero-en-salir: lo primero que se introduce
    en la tubería es lo primero en salir por el otro lado.

    Si se escribe en una tubería con nombre, los procesos que han
    escrito en la tubería no pueden terminar hasta que la información
    que han escrito es leída de la tubería. Si se lee de una tubería
    con nombre, el proceso lector espera hasta que no hay nada que
    leer antes de terminar. El tamaño de la tubería es siempre cero
    --- no almacena datos, la tubería solo comunica los dos procesos
    de igual manera que lo hace el intérprete de órdenes mediante la
    sintaxis «|». Sin embargo, desde que la tubería tiene un nombre,
    los dos procesos no tienen que estar en la misma línea de órdenes
    y ni siquiera ser ejecutados por el mismo usuario. Las tuberías
    fueron una innovación muy relevante de Unix.

    Por ejemplo, intente lo siguiente

    $ cd; mkfifo mypipe
    $ echo "hello" >mypipe & # put into background
    [1] 8022
    $ ls -l mypipe
    prw-rw-r-- 1 penguin penguin 0 Oct 16 21:49 mypipe
    $ cat mypipe
    hello
    [1]+  Done                    echo "hello" >mypipe
    $ ls mypipe
    mypipe
    $ rm mypipe

1.2.9. «Sockets»

    Los «sockets» se usan de forma generalizada en las comunicaciones
    en Internet, bases de datos y sistemas operativos. Son similares
    a las tuberías con nombre (FIFO) y permiten que los procesos
    intercambien información entre diferentes equipos. Para los
    «sockets» los procesos no necesitan estar ejecutandose al mismo
    tiempo, ni ser hijos del mismo proceso padre. Este es el mejor
    sistema para la comuniación entre procesos (IPC). El intercambio
    de información puede ocurrir en la red entre equipos. Los dos
    tipos de «sockets» más comunes son los «sockets« Internet y los
    «sockets» de dominio Unix.

    Sugerencia
   
    "ss -t -u -a" (from the iproute2 package) provides a very useful
    overview of sockets that are open on a given system.

1.2.10. Archivos de dispositivos

    Los archivos de dispositivos se refieren a dispositivos físicos o
    virtuales del sistema, como el disco duro, la tarjeta de vídeo,
    la pantalla o el teclado. Un ejemplo de dispositivo virtual es la
    consola, representado por «/dev/console».

    Hay dos tipos de archivos de dispositivo.

      * dispositivos orientados a carácter,

          + se accede a un carácter cada vez,

          + 1 carácter = 1 byte,

          + p. ej. teclado, puerto serie, …
   
      * dispositivo orientado a bloque

          + se accede a unidades grandes llamadas bloques,

          + 1 bloque > 1 byte,

          + p. ej. un disco duro, …

    Los archivos de dispositivos se pueden leer y escribir, aunque el
    fichero pueda contener datos binarios los cuales son un
    galimatias incomprensibles para los humanos. Algunas veces
    escribir datos directamente en esos ficheros puede ayudar a
    resolver problemas de conexión con los dispositivos. Por ejemplo,
    se puede enviar un archivo de texto al dispositivo de la
    impresora«/dev/lp0» o mandar órdenes de modem por el puerto serie
    «/dev/ttyS0». Pero, al menos que se haga con cuidado, puede
    causar un problema mayor. Así que tenga cuidado.

    Nota
   
    Comúnmente a la impresora se accede utilizando lp(1).

    El número de nodo del dispositivo se muestra por la ejecución de
    ls(1) como se muestra.

    $ ls -l /dev/sda /dev/sr0 /dev/ttyS0 /dev/zero
    brw-rw---T  1 root disk     8,  0 Oct 16 20:57 /dev/sda
    brw-rw---T+ 1 root cdrom   11,  0 Oct 16 21:53 /dev/sr0
    crw-rw---T  1 root dialout  4, 64 Oct 16 20:57 /dev/ttyS0
    crw-rw-rw-  1 root root     1,  5 Oct 16 20:57 /dev/zero

      * «/dev/sda» tiene como número de dispositivo mayor de 8 y como
        número de dispositivo menor de 0. Los usuario pueden realizar
        operaciones de lectura/escritura haciendo si pertenecen al
        grupo disk.

      * «/dev/sr0» tiene como número de dispositivo mayor de 11 y
        como menor de 0. Los usuarios pueden realizar operaciones de
        lectura/escritura si pertenecen al grupo cdrom.

      * «/dev/ttyS0» tiene el número de dispositivo mayor de 4 y
        menor de 64. Los usuarios pueden realizar operaciones de
        lectura/escritura si pertenecen al grupo dialout.

      * «/dev/zero» tiene como número mayor de dispositivo 1 y como
        menor 5. Todos los usuarios pueden realizar operaciones de
        lectura/escritura.

    En un sistema Linux moderno, el sistema de archivos en «/dev/» se
    rellena de forma automática mediante udev(7).

1.2.11. Archivos de dispositivos especiales

    Existen algunos archivos de dispositivos especiales.

    Tabla 1.10. Relación de archivos de dispositivos especiales

    +---------------------------------------------------------------+
    |archivo de | acción  |        descripción de respuesta         |
    |dispositivo|         |                                         |
    |-----------+---------+-----------------------------------------|
    |/dev/null  |lectura  |devuelve el «carácter de final de archivo|
    |           |         |(EOF)»                                   |
    |-----------+---------+-----------------------------------------|
    |/dev/null  |escritura|no devuelve nada (un pozo sin fondo al   |
    |           |         |que enviar datos)                        |
    |-----------+---------+-----------------------------------------|
    |/dev/zero  |lectura  |devuelve «el carácter \0 (NUL)» (difiere |
    |           |         |del número cero representado en ASCII)   |
    |-----------+---------+-----------------------------------------|
    |           |         |devuelve caracteres aleatorios creados   |
    |/dev/random|lectura  |por el generador de números aleatorios   |
    |           |         |confiable, ofreciendo entropía real      |
    |           |         |(baja)                                   |
    |-----------+---------+-----------------------------------------|
    |           |         |devuelve caracteres de forma aleatoria   |
    |/dev/      |lectura  |desde el generador de números            |
    |urandom    |         |pseudo-aleatorios de seguridad           |
    |           |         |criptográfica                            |
    |-----------+---------+-----------------------------------------|
    |/dev/full  |escritura|devuelve el error de disco lleno (ENOSPC)|
    +---------------------------------------------------------------+


    Con frecuencia son utilizados en las redirecciones del intérprete
    de órdenes (consulte Sección 1.5.8, “Secuencias de órdenes
    comunes y redirecciones del intérprete de órdenes”).

1.2.12. procfs y sysfs

    Los pseudo sistemas de archivos procfs y sysfs, que se montan en
    «/proc» y «/sys», son estructuras de datos internas del núcleo
    que se muestran al espacio de usuario. Expresado de otra forma,
    estas entradas son virtuales actúan como una ventana adecuada al
    funcionamiento del sistema operativo.

    El directorio «/proc» contiene (entre otras cosas) un
    subdirectorio por cada proceso que se está ejecutando en el
    sistema operativo, cuyo nombre es el identificador del proceso
    (PID). Las herramientas del sistema que acceden a la información
    de los procesos, como ps(1), obtienen dicha información de la
    estructura de este directorio.

    Los directorios dentro de «/proc/sys/» contienen interfaces que
    permiten cambiar algunos parámetros del núcleo en tiempo de
    ejecución. (Se puede realizar las mismas operaciones por medio de
    la orden sysctl(8) o de su archivo de configuración «/etc/
    sysctl.d/*.conf».)

    La gente normalmente se alarma del gran tamaño de un archivo en
    particular, «/proc/kcore». Es (más o menos) una copia del
    contenido de la memoria del equipo. Es útil para depurar el
    núcleo y es un archivo virtual que es una referencia a la memoria
    del equipo, así es que no hay que preocuparse por su tamaño.

    El subdirectorio "/sys" contiene las estructuras de datos del
    kernel exportadas, sus atributos y los enlaces entre ellos.
    También contiene interfaces para cambiar ciertos parámetros del
    kernel que se están ejecutándose.

    Consulte «proc.txt(.gz)», «sysfs.txt(.gz)» y otros documentos que
    forman parte de la documentación del núcleo de Linux («/usr/share
    /doc/linux-doc-*/Documentation/filesystems/*») incluidos en el
    paquete linux-doc-*.

1.2.13. tmpfs

    El sistema de archivos temporal tmpfs tiene la función de
    mantener todos los archivos en la memoria virtual. Los datos de
    «tmpfs« de la caché de páginas de la memoria se puede enviar al
    área de intercambio en disco cuando sea necesario.

    El directorio «/run» se monta como tmpfs al comienzo del proceso
    de arranque. Así se permite la escritura sobre él, incluso cuando
    el directorio «/» está montado en solo lectura. Aquí se guardan
    los archivos en estado temporal y sustituye a varios directorios
    de la Jerarquía Estándar del Sistema de Ficheros versión 2.3:

      * «/var/run» → «/run»,

      * «/var/lock» → «/run/lock»,

      * "/dev/shm" → "/run/shm"

    Ver el documento del núcleo de Linux «tmpfs.txt(.gz)» («/usr/
    share/doc/linux-doc-*/Documentation/filesystems/*») que está en
    el paquete linux-doc-*.

1.3. Midnight Commander (MC)

    Midnight Commander (MC) es una «navaja multiusos» GNU para la
    consola de Linux y otros entornos de terminal. Aporta a los
    nuevos usuarios una experiencia de consola basada en menús que es
    más sencilla de aprender que las órdenes estándar de Unix.

    Necesitará instalar el paquete de Midnight Commander llamado «mc
    como se muestra.

    $ sudo apt-get install mc

    Usa el comando mc(1) para explorar el sistema Debian. Esta es la
    mejor forma de aprender. Por favor, explora algunos lugares
    interesantes sólo usando las teclas del cursor y la tecla Intro.

      * "/etc" y sus subdirectorios

      * «/var/log» y sus subdirectorios
   
      * «/usr/share/doc» y sus subdirectorios

      * «/usr/sbin» y «/usr/bin»

1.3.1. Personalización de MC

    Para cambiar el directorio de trabajo de MC después de salir y no
    tener que ejecutar una orden cd al último directorio, le sugiero
    que cambie «~/.bashrc» para incluir el archivo de órdenes que
    está en el paquete mc.

    . /usr/lib/mc/mc.sh

    Consulte mc(1) (en la opción «-P») para comprobar por qué. (Si no
    comprende exactamente lo que estoy diciendo puede hacerlo más
    tarde.)

1.3.2. Comenzando con MC

    Para ejecutar MC escribe lo siguiente.

    $ mc

    MC permite ejecutar todas las operaciones sobre archivos a través
    de sus menús, con el mínimo esfuerzo para el usuario. Para
    acceder a la pantalla de ayuda presione F1. Puede probar MC con
    solo pulsar las teclas de los cursores y las teclas de función.

    Nota

    En algunas consolas como gnome-terminal(1), la pulsación de las
    teclas de función las recibe la consola. Esta funcionalidad se
    desactiva en «Editar» → «Atajos de teclado» para gnome-terminal.

    Si encuentra problemas de codificación de los caracteres y
    parecen no tener sentido, añadir «-a» como parámetro a la orden
    MC ayudará a evitar problemas.

    Si esto no soluciona el problema consulte Sección 8.3.1, “La
    configuración de la terminal”.

1.3.3. Gestor de archivos de MC

    Por defecto hay dos paneles con dos directorios y su contenido.
    Otro modo útil es asignar el panel derecho para que muestre los
    permisos de los archivos, etc. A continuación mostraremos algunas
    claves. Con el demonio gpm(8) ejecutándose, se puede usar el
    ratón en la consola de caracteres de Linux. (Asegúrese de pulsar
    la tecla de mayúsculas para obtener el comportamiento normal
    cuando corte y pegue en MC.)

    Tabla 1.11. Funciones de las teclas en MC

    +---------------------------------------------------------------+
    |  tecla   |                      función                       |
    |----------+----------------------------------------------------|
    |F1        |menú de ayuda                                       |
    |----------+----------------------------------------------------|
    |F3        |visión del contenido del archivo                    |
    |----------+----------------------------------------------------|
    |F4        |editor interno                                      |
    |----------+----------------------------------------------------|
    |F9        |activa el menú superior                             |
    |----------+----------------------------------------------------|
    |F10       |salida de Midnight Commander                        |
    |----------+----------------------------------------------------|
    |Tab       |moverse entre los paneles                           |
    |----------+----------------------------------------------------|
    |Insert o  |marcar el fichero para seleccionar varios para otra |
    |Ctrl-T    |operación como copiar                               |
    |----------+----------------------------------------------------|
    |Del       |borrar el archivo (tenga cuidado---active el modo   |
    |          |seguro de borrado en MC)                            |
    |----------+----------------------------------------------------|
    |Cursores  |se explican por si mismas                           |
    +---------------------------------------------------------------+


1.3.4. Trucos de la línea de órdenes en MC

      * La orden cd cambia el directorio en el panel seleccionado.

      * Ctrl-Intro o Alt-Intro copia el nombre del archivo a la orden
        en la línea de órdenes Se utiliza en combinación con las
        órdenes cp(1) y mv(1) para añadir parámetros a las órdenes.

      * Alt-Tab muestra los posibles archivos elegibles por expansión
        del nombre en el intérprete de órdenes.

      * Se puede especificar los directorios de inicio de ambos
        paneles como parámetros a MC; por ejemplo, «mc /etc/root».

      * Esc + tecla numérica n → tecla de función n (p. ej., Esc + 1
        → F1, etc.; Esc + 0 → F10)

      * Pulsando Esc antes que la tecla tiene el mismo efecto que
        presionar Alt y otra tecla a la vez.; p. ej. pulse Esc+c para
        obtener Alt-C. Esc la llaman la meta-tecla y algunas veces se
        representa como «M-».

1.3.5. El editor interno de MC

    El editor interno tiene un esquema de corta-y-pega interesante.
    Al pulsarF3 comienza la selección, una segunda pulsación de F3
    finaliza la selección y resalta lo seleccionado. Entonces puede
    mover el cursor. Si presiona F6 el área seleccionada se moverá a
    la posición del cursor. Si presiona F5 el área seleccionada se
    copia e inserta en la posición del cursor. F2 guarda el archivo.
    F10 permite salir. La mayor parte de las teclas cursor funcionan
    de forma intuitiva.

    Este editor puede iniciarse directamente en un fichero utilizando
    uno de los siguientes comandos.

    $ mc -e filename_to_edit

    $ mcedit filename_to_edit

    El editor posee una sola ventana, pero se pueden usar varias
    consolas de Linux para obtener el mismo comportamiento. Para
    copiar entre ventanas, use las teclas Alt-Fn para cambiar entre
    consolas virtuales y utilice «Archivo→Insertar archivo» o
    «Archivo→Copiar a un archivo» para mover una parte de un archivo
    a otro.

    El editor interno se puede reemplazar por cualquier otro editor
    de su elección.

    De hecho, muchos programas usan la variable de entorno «$EDITOR»
    o «$VISUAL» para determinar el editor a utilizar. Si al principio
    no está cómodo con vim(1) o nano(1), puede cambiar su valor a
    «mcedit» añadiendo la siguientes líneas a «~/.bashrc».

    export EDITOR=mcedit
    export VISUAL=mcedit

    Si le parece, mi recomendación es asignarles el valor «vim».

    Si está incómodo con vim(1) puede utilizar mcedit(1) para la
    mayor parte de las tareas de administración del sistema.

1.3.6. El visor interno de MC

    MC posee un visor inteligente. Es una gran herramienta para
    buscar palabras en los documentos. Siempre lo uso para archivos
    del directorio «/usr/share/doc». Es la manera más rápida de
    navegar a través de la ingente cantidad de información de Linux.
    Este visor puede iniciarse de forma separada utilizando una de
    las órdenes que se muestran.

    $ mc -v path/to/filename_to_view

    $ mcview path/to/filename_to_view

1.3.7. Selección inteligente del visor en MC

    Pulse Intro en un archivo y el programa, de acuerdo a su
    contenido, abrirá el archivo (consulte Sección 9.4.11,
    “Personalizando el inicio de un programa”). Es una funcionalidad
    de MC muy útil.

    Tabla 1.12. Acción de la tecla Intro en MC

    +---------------------------------------------------------------+
    |   tipo de archivo    |        acción de la tecla Intro        |
    |----------------------+----------------------------------------|
    |archivo ejecutable    |ejecuta la orden                        |
    |----------------------+----------------------------------------|
    |archivo de página de  |envía el contenido a la aplicación de   |
    |manual                |visualización                           |
    |----------------------+----------------------------------------|
    |archivo html          |envía el contenido al navegador web     |
    |----------------------+----------------------------------------|
    |archivos «*.tar.gz» y |muestra su contenido como si fuera un   |
    |«*.deb»               |subdirectorio                           |
    +---------------------------------------------------------------+


    Para que opere de forma correcta el visor y las funciones
    virtuales de archivo, los archivos visibles no deben tener
    permisos de ejecución. Puede cambiar su estado con chmod(1) o en
    el menú de archivo de MC.

1.3.8. Sistema de archivos virtual de MC

    MC puede acceder a archivos en Internet a través de FTP. Vaya al
    menú pulsando F9, "Enter" y "h" para activar el sistema de
    archivos Shell. Escriba la URL con el formato «sh://[user@]
    machine[:options]/[remote-dir]», que abre un directorio remoto
    que aparece como uno local usando ssh.

1.4. Fundamentos de entornos de trabajo tipo Unix

    Aunque MC permite realizar casi cualquier cosa, es importante
    aprender a utilizar la línea de órdenes y el intérprete de
    comandos y acostumbrarse a un entorno de trabajo tipo Unix.

1.4.1. El intérprete de órdenes (shell)

    Dado que algunos programas de inicialización del sistema pueden
    usar el shell de inicio de sesión, es prudente mantenerlo como
    bash(1) y evitar cambiar el shell de inicio de sesión con chsh
    (1).

    Si desea utilizar un prompt interactivo diferente de shell,
    hágalo desde la configuración del emulador de la terminal GUI o
    iniciélo desde ~/.bashrc, por ejemplo, colocando "exec /usr/bin/
    zsh -i -l"o"exec /usr/bin/fish -i -l"en ella.

    Tabla 1.13. Relación de intérpretes de órdenes

    +---------------------------------------------------------------+
    |               |           |      |Intérprete|                 |
    |    paquete    |popularidad|tamaño|de órdenes|   descripción   |
    |               |           |      |  POSIX   |                 |
    |---------------+-----------+------+----------+-----------------|
    |               |           |      |          |Bash: el         |
    |               |           |      |          |intérprete de    |
    |bash           |V:888,     |7276  |Sí        |órdenes GNU      |
    |               |I:999      |      |          |Bourne Again     |
    |               |           |      |          |SHell (estándar  |
    |               |           |      |          |de facto)        |
    |---------------+-----------+------+----------+-----------------|
    |               |           |      |          |terminación      |
    |bash-completion|V:36, I:958|1952  |N/A       |programable para |
    |               |           |      |          |la shell bash    |
    |---------------+-----------+------+----------+-----------------|
    |               |           |      |          |Intérprete de    |
    |               |V:928,     |      |          |órdenes Debian   |
    |dash           |I:998      |207   |Sí        |Almquist, bueno  |
    |               |           |      |          |para archivos de |
    |               |           |      |          |órdenes          |
    |---------------+-----------+------+----------+-----------------|
    |               |           |      |          |Intérprete de    |
    |               |           |      |          |órdenes Z: un    |
    |zsh            |V:41, I:70 |2499  |Sí        |intérprete de    |
    |               |           |      |          |órdenes con      |
    |               |           |      |          |muchas mejoras   |
    |---------------+-----------+------+----------+-----------------|
    |               |           |      |          |TENEX C Shell:   |
    |tcsh           |V:4, I:15  |1366  |No        |una versión      |
    |               |           |      |          |mejorada de      |
    |               |           |      |          |Berkeley csh     |
    |---------------+-----------+------+----------+-----------------|
    |               |V:5.4,     |      |          |Versión de el    |
    |mksh           |I:7.9      |7713  |Sí        |intérprete de    |
    |               |           |      |          |órdenes Korn     |
    |---------------+-----------+------+----------+-----------------|
    |               |           |      |          |Intérprete de    |
    |csh            |V:1.1,     |348   |No        |órdenes OpenBSD  |
    |               |I:5.4      |      |          |C, una versión de|
    |               |           |      |          |Berkeley csh     |
    |---------------+-----------+------+----------+-----------------|
    |               |           |      |          |Intérprete de    |
    |               |           |      |          |órdenes          |
    |               |V:0.3,     |      |          |Stand-alone con  |
    |sash           |I:5.2      |1245  |Sí        |órdenes internas |
    |               |           |      |          |(no es el        |
    |               |           |      |          |estándar «/usr/  |
    |               |           |      |          |bin/sh»)         |
    |---------------+-----------+------+----------+-----------------|
    |               |           |      |          |la versión AT&T  |
    |ksh            |V:0.3,     |65    |Sí        |actual del       |
    |               |I:8.4      |      |          |intérprete de    |
    |               |           |      |          |órdenes Korn     |
    |---------------+-----------+------+----------+-----------------|
    |               |           |      |          |implementación   |
    |rc             |V:0.10,    |182   |No        |del intérprete de|
    |               |I:0.73     |      |          |órdenes rc de AT&|
    |               |           |      |          |T Plan 9         |
    |---------------+-----------+------+----------+-----------------|
    |               |           |      |          |Intérprete de    |
    |               |           |      |          |órdenes que      |
    |               |V:0.01,    |      |          |cumple con las   |
    |posh           |I:0.23     |191   |Sí        |directrices      |
    |               |           |      |          |estándar         |
    |               |           |      |          |(derivado de     |
    |               |           |      |          |pdksh)           |
    +---------------------------------------------------------------+


    Sugerencia

    Aunque los intérpretes de órdenes tipo POSIX comparten la
    sintaxis básica, pueden cambiar el comportamiento de algunos
    elementos básicos como sus variables o la expansión de nombres de
    archivos con comodines. Por favor, compruebe su documentación
    para obtener más detalles.

    En este capítulo se sobreentiende que el intérprete de órdenes es
    bash.

1.4.2. Personalización de bash

    Puede personalizar bash(1) en el archivo de configuración «~
    /.bashrc».

    Por ejemplo, pruebe con lo que se muestra.

    # enable bash-completion
    if ! shopt -oq posix; then
      if [ -f /usr/share/bash-completion/bash_completion ]; then
        . /usr/share/bash-completion/bash_completion
      elif [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
      fi
    fi

    # CD upon exiting MC
    . /usr/lib/mc/mc.sh

    # set CDPATH to a good one
    CDPATH=.:/usr/share/doc:~:~/Desktop:~
    export CDPATH

    PATH="${PATH+$PATH:}/usr/sbin:/sbin"
    # set PATH so it includes user's private bin if it exists
    if [ -d ~/bin ] ; then
      PATH="~/bin${PATH+:$PATH}"
    fi
    export PATH

    EDITOR=vim
    export EDITOR

    Sugerencia

    Puede encontrar más posibilidades de personalización de bash,
    como Sección 9.3.6, “Órdenes coloreadas” en Capítulo 9, Trucos
    del sistema.

    Sugerencia
   
    El paquete bash-completion permite la finalización programable de
    bash.

1.4.3. Combinaciones de teclas

    En un entorno tipo Unix, hay algunas teclas que tiene un uso
    especial. Tenga en cuenta que en una consola en modo texto de
    Linux, solo las teclas Ctrl y Alt del lado izquierdo funcionan de
    la forma esperada. He aquí algunas combinaciones de teclas que
    conviene recordar.

    Tabla 1.14. Relación de combinaciones de teclado en bash

    +---------------------------------------------------------------+
    |           tecla            | descripción de la combinación de |
    |                            |              teclas              |
    |----------------------------+----------------------------------|
    |Ctrl-U                      |borra el contenido desde el cursor|
    |                            |al inicio de la línea             |
    |----------------------------+----------------------------------|
    |Ctrl-H                      |borra el carácter anterior al     |
    |                            |cursor                            |
    |----------------------------+----------------------------------|
    |Ctrl-D                      |fin de la entrada (finaliza el    |
    |                            |intérprete de órdenes en uso)     |
    |----------------------------+----------------------------------|
    |Ctrl-C                      |finaliza el programa en ejecución |
    |----------------------------+----------------------------------|
    |Ctrl-Z                      |para temporalmente el programa que|
    |                            |pasa a segundo plano              |
    |----------------------------+----------------------------------|
    |Ctrl-S                      |para la salida por pantalla       |
    |----------------------------+----------------------------------|
    |Ctrl-Q                      |reanuda la salida por pantalla    |
    |----------------------------+----------------------------------|
    |Ctrl-Alt-Del                |reinicia/apaga el sistema, ver    |
    |                            |inittab(5)                        |
    |----------------------------+----------------------------------|
    |tecla izquierda Alt         |meta-tecla para Emacs e interfaces|
    |(opcionalmente, tecla de    |similares de usuario              |
    |Windows)                    |                                  |
    |----------------------------+----------------------------------|
    |Up-arrow                    |retrocede en el histórico de      |
    |                            |órdenes bash                      |
    |----------------------------+----------------------------------|
    |Ctrl-R                      |búsqueda en el histórico de       |
    |                            |órdenes de bash                   |
    |----------------------------+----------------------------------|
    |Tab                         |completa la entrada de la orden   |
    |                            |con el nombre de archivo en bash  |
    |----------------------------+----------------------------------|
    |Ctrl-V Tab                  |introduce Tab sin completar la    |
    |                            |orden en bash                     |
    +---------------------------------------------------------------+


    Sugerencia
   
    La funcionalidad del terminal de Ctrl-S puede deshabilitarse con
    stty(1).

1.4.4. Operaciones con el ratón

    Las operaciones del ratón para el texto en el sistema Debian
    mezclan 2 estilos con algunos cambios:

      * Operaciones tradicionales del ratón al estilo de Unix:

          + usar 3 botones (clic)

          + usar PRIMARIO/A

          + usado por aplicaciones X tales como xterm y aplicaciones
            de linea de comando en la consola Linux
   
      * Operación del ratón al estilo GUI (interfaz gráfica de
        usuario) moderna:

          + usar 2 botones (arrastrar + clic)

          + usar PRIMARIO y PORTAPAPELES

          + usado en aplicaciones modernas GUI tales como
            gnome-terminal

    Tabla 1.15. Lista de acciones de teclado relacionadas y
    operaciones con ratón en Debian

    +---------------------------------------------------------------+
    |         acción         |              respuesta               |
    |------------------------+--------------------------------------|
    |botón izquierdo y       |seleccionar un rango como selección   |
    |arrastre del ratón      |PRIMARIA                              |
    |------------------------+--------------------------------------|
    |botón izquierdo         |seleccione el inicio del rango para la|
    |                        |selección PRIMARIA                    |
    |------------------------+--------------------------------------|
    |botón derecho           |seleccione el final del rango para la |
    |(tradicional)           |selección PRIMARIA                    |
    |------------------------+--------------------------------------|
    |botón derecho (moderno) |menú dependiente del contexto (cortar/|
    |                        |copiar/pegar)                         |
    |------------------------+--------------------------------------|
    |Clic central o Mayús-Ins|insertar selección PRIMARIA en el     |
    |                        |cursor                                |
    |------------------------+--------------------------------------|
    |Ctrl-X                  |cortar la selección PRIMARIA al       |
    |                        |PORTAPAPELES                          |
    |------------------------+--------------------------------------|
    |Ctrl-C (Shift-Ctrl-C en |copiar la selección PRIMARIA al       |
    |terminal)               |PORTAPAPELES                          |
    |------------------------+--------------------------------------|
    |Ctrl-V                  |pegue el contenido de CLIPBOARD en la |
    |                        |ubicación del cursor                  |
    +---------------------------------------------------------------+


    Aquí, la selección PRIMARIA es el rango de texto resaltado.
    Dentro del programa de terminal, Shift-Ctrl-C se usa en su lugar
    para evitar terminar un programa en ejecución.

    La rueda central del ratón moderno se considera el botón central
    del mismo y se puede usar para hacer clic en el medio. Hacer clic
    en los botones izquierdo y derecho del ratón al mismo tiempo
    equivale como clic central en los ratones de 2 botones.

    Para usar un ratón en las consolas de caracteres de Linux, debe
    tener gpm(8) ejecutándose como daemon.

1.4.5. El paginador

    La orden less(1) es un paginador mejorado (permite navegar por el
    contenido de los archivos). Lee el archivo indicado como
    parámetro en su orden o la entrada estándar. Pulse «h» si
    necesita ayuda mientras utiliza la orden less. Es más capaz que
    more(1) y se puede mejorar ejecutando «eval $(lesspipe)» o «eval
    $(lessfile)» en el archivo de órdenes de inicio. Ver «/usr/share/
    doc/less/LESSOPEN». La opción «-R» permite la salida en crudo y
    permite las secuencias de escape ANSI coloreadas. Ver less(1).

    Sugerencia

    En el comando less, escriba "h" to see the help screen, type "/"
    o "?" to search a string, and type "-i" para cambiar la
    sensibilidad entre mayúsculas y minúsculas.

1.4.6. El editor de texto

    Debería ser competente con Vim o Emacs que son habituales en los
    sistemas tipo Unix.

    Pienso que el correcto es Vim, ya que el editor Vi esta siempre
    disponible en el mundo Linux/Unix. (En realidad, los programas,
    bien el original vi o el nuevonvi los puede encontrar en
    cualquier lugar. Yo elegí Vim en vez de la versión nueva ya que
    ofrece ayuda a través de tecla F1 siendo similar y más potente.)

    Si elige Emacs o XEmacs como su editor también son buenas
    opciones, especialmente para la programación. Emacs tiene una
    extensa cantidad de características también, incluyendo funciones
    como lector de noticias, editor de directorios, aplicación de
    correo, etc. Cuando se usa para programar o editar archivos de
    órdenes, reconocerá el formato en el que está trabajando y
    tratará de ayudarle. Algunos mantienen que el único programa que
    se necesita en Linux es Emacs. Aprender Emacs durante diez
    minutos ahora puede ahorrar muchas horas después. Es recomendable
    usar el manual de GNU Emacs para aprender.

    Todos estos programas normalmente incluyen un tutorial para que
    pueda aprender a través de la práctica. Se inicia en «vim»
    pulsando la tecla F1. Debería al menos leer las primeras treinta
    y cinco líneas. Después realizar el curso de entrenamiento
    posicionando el cursor en«|tutor|» y pulsando Ctrl-].

    Nota

    Los buenos editores, como Vim y Emacs, gestionan de manera
    adecuada codificaciones UTF-8 y otras menos comunes o más
    exóticas. Es una buena idea usar el entorno X con la
    configuración regional UTF-8 e instalar los programas y tipos de
    letra necesarias para ello. Los editores tienen opciones para
    asignar una codificación independientemente de la del entorno X.
    Por favor, consulte su documentación sobre texto multibyte.

1.4.7. Configuración del editor de texto por defecto

    Debian tiene un buen número de editores. Recomendamos instalar el
    paquete vim, como ya hemos mencionado.

    Debian tiene un acceso unificado al editor por defecto del
    sistema mediante la orden «/usr/bin/editor», y así otros
    programas (p. ej. reportbug(1)) puedan llamarlo. Puede cambiarlo
    como se muestra.

    $ sudo update-alternatives --config editor

    Mi recomendación es la opción «/usr/bin/vim.basic» mejor que «/
    usr/bin/vim.tiny» para los usuario noveles ya que permite
    realzado de sintaxis.

    Sugerencia

    Muchos programas utilizan las variables de entorno «$EDITOR» o
    «$VISUAL» para determinar el editor a usar (ver Sección 1.3.5,
    “El editor interno de MC” y Sección 9.4.11, “Personalizando el
    inicio de un programa”). Para un sistema Debian coherente asigne
    este valor a «/usr/bin/editor». (Históricamente, «$EDITOR» era
    «ed» y «$VISUAL» era «vi».)

1.4.8. Usando vim

    El reciente vim(1) se inicia en la sana opción "incompatible" y
    entra en el modo NORMAL.^[1]

    Tabla 1.16. Lista de comandos básicos de Vim

    +---------------------------------------------------------------+
    |     modo      |entradas con el |            acción            |
    |               |    teclado     |                              |
    |---------------+----------------+------------------------------|
    |NORMAL         |:help|only      |mostrar el archivo de ayuda   |
    |---------------+----------------+------------------------------|
    |NORMAL         |:e filename.ext |abrir un nuevo búfer para     |
    |               |                |editar filename.ext           |
    |---------------+----------------+------------------------------|
    |NORMAL         |:w              |sobrescribir el búfer actual  |
    |               |                |en el archivo original        |
    |---------------+----------------+------------------------------|
    |NORMAL         |:w filename.ext |escribir el búfer actual en   |
    |               |                |filename.ext                  |
    |---------------+----------------+------------------------------|
    |NORMAL         |:q              |salir vim                     |
    |---------------+----------------+------------------------------|
    |NORMAL         |:q!             |forzar salir vim              |
    |---------------+----------------+------------------------------|
    |NORMAL         |:only           |cierre todas las demás        |
    |               |                |ventanas abiertas             |
    |---------------+----------------+------------------------------|
    |NORMAL         |:set            |comprobar si vim está en el   |
    |               |nocompatible?   |modo incompatible             |
    |---------------+----------------+------------------------------|
    |NORMAL         |:set            |establecer vim en el modo     |
    |               |nocompatible    |incompatible                  |
    |---------------+----------------+------------------------------|
    |NORMAL         |i               |pulse el modo INSERTAR        |
    |---------------+----------------+------------------------------|
    |NORMAL         |R               |entrar en el modo REEMPLAZAR  |
    |---------------+----------------+------------------------------|
    |NORMAL         |v               |entrar en el modo VISUAL      |
    |---------------+----------------+------------------------------|
    |NORMAL         |V               |ingrese al modo lineal VISUAL |
    |---------------+----------------+------------------------------|
    |NORMAL         |Ctrl-V          |Ingresar al modo VISUAL en    |
    |               |                |bloque                        |
    |---------------+----------------+------------------------------|
    |excepto        |Tecla ESC       |entrar al modo NORMAL         |
    |TERMINAL-JOB   |                |                              |
    |---------------+----------------+------------------------------|
    |NORMAL         |:term           |entrar al modo TERMINAL-JOB   |
    |---------------+----------------+------------------------------|
    |TERMINAL-NORMAL|i               |entrar al modo TERMINAL-JOB   |
    |---------------+----------------+------------------------------|
    |TERMINAL-JOB   |Ctrl-W N (o     |entre el modo TERMINAL-NORMAL |
    |               |Ctrl-\ Ctrl-N)  |                              |
    |---------------+----------------+------------------------------|
    |TERMINAL-JOB   |Ctrl-W :        |entre el modo Ex-en modo      |
    |               |                |TERMINAL-NORMAL               |
    +---------------------------------------------------------------+


    Por favor use el programa "vimtutor" para aprender vim en un
    curso con tutorial interactivo.

    El programa vim cambia su comportamiento al pulsar las teclas
    basadas en modo. La mayoría de las pulsaciones de teclas en el
    búfer se realizan en modo INSERTAR y modo REEMPLAZAR. El
    movimiento del cursor se realiza principalmente en modo NORMAL.
    La selección interactiva se realiza en modo VISUAL. Escribir ":"
    en modo NORMAL cambia su modo a Ex-modo. El modo Ex acepta
    comandos.

    Sugerencia

    El Vim viene con el paquete Netrw. ¡Netrw admite la lectura de
    archivos, la escritura de archivos, la exploración de directorios
    en una red y la exploración local! Pruebe Netrw con "vim ." (un
    punto como argumento) y lea su manual en ":help netrw".

    Para la configuración avanzada de vim, ver Sección 9.2,
    “Personalización de vim”.

1.4.9. Grabación de las actividades del intérprete de órdenes

    La salida del intérprete de órdenes puede colapsar su pantalla y
    puede perderse para siempre. Es una buena práctica registrar la
    actividad del intérprete de órdenes en un archivo para poder
    revisarlo más tarde. Este registro es esencial para llevar a buen
    término cualquier tarea de administración de un sistema.

    Sugerencia

    El nuevo Vim (versión> = 8.2) se puede usar para registrar las
    actividades de shell limpiamente usando el modo TERMINAL-JOB.
    Consulte Sección 1.4.8, “Usando vim”.

    El método básico de registro del intérprete de órdenes es operar
    con script(1).

    Por ejemplo, intente lo siguiente

    $ script
    Script started, file is typescript

    Ejecute las órdenes que desee después de script.

    Pulse Ctrl-D para finalizar script.

    $ vim typescript

    Consulte Sección 9.1.1, “Registro correcto de las actividades del
    intérprete de órdenes”.

1.4.10. Órdenes básicas de Unix

    Aprendamos las órdenes fundamentales de UNIX. Aquí utilizaremos
    «Unix» en su sentido genérico. Normalmente cualquier sistema
    operativo tipo Unix tiene un conjunto de órdenes similares. El
    sistema Debian no es una excepción. No se preocupe si en este
    momento algunas órdenes no funcionan como esperaba. Si se utiliza
    alias en el intérprete de órdenes, las salidas de las órdenes
    correspondientes difieren. Estos ejemplos no pretenden ejecutarse
    en orden.

    Pruebe las siguientes órdenes desde una cuenta de usuario sin
    privilegios.

    Tabla 1.17. Relación de órdenes Unix fundamentales

    +---------------------------------------------------------------+
    |   orden   |                    descripción                    |
    |-----------+---------------------------------------------------|
    |pwd        |muestra el nombre del directorio actual/de trabajo |
    |-----------+---------------------------------------------------|
    |whoami     |muestra el nombre del usuario actual               |
    |-----------+---------------------------------------------------|
    |id         |muestra la identidad del usuario actual (nombre,   |
    |           |uid, gid y grupos a los que pertenece)             |
    |-----------+---------------------------------------------------|
    |file foo   |muestra el tipo de archivo de «foo»                |
    |-----------+---------------------------------------------------|
    |type -p    |muestra la ubicación del archivo de la orden «     |
    |commandname|nombre_de_la_orden»                                |
    |-----------+---------------------------------------------------|
    |which      |, ,                                                |
    |commandname|                                                   |
    |-----------+---------------------------------------------------|
    |type       |muestra información de la orden «nombre_de_la_orden|
    |commandname|»                                                  |
    |-----------+---------------------------------------------------|
    |apropos    |encuentra órdenes relacionadas con la «            |
    |key-word   |palabra_clave»                                     |
    |-----------+---------------------------------------------------|
    |man -k     |, ,                                                |
    |key-word   |                                                   |
    |-----------+---------------------------------------------------|
    |whatis     |muestra una descripción de una línea de la orden « |
    |commandname|nombre_de_la_orden»                                |
    |-----------+---------------------------------------------------|
    |man -a     |muestra la descripción de la orden «               |
    |commandname|nombre_de_la_orden» (al estilo Unix)               |
    |-----------+---------------------------------------------------|
    |info       |muestra una descripción detallada de la orden «    |
    |commandname|nombre_de_la_orden» (al estilo GNU)                |
    |-----------+---------------------------------------------------|
    |           |relación el contenido del directorio (excluye      |
    |ls         |aquellos archivos o directorios que comienzan por  |
    |           |.)                                                 |
    |-----------+---------------------------------------------------|
    |ls -a      |relación el contenido del directorio (todos los    |
    |           |archivos y directorios)                            |
    |-----------+---------------------------------------------------|
    |           |relación el contendido del directorio (casi todos  |
    |ls -A      |los archivos y directorios, a saber, oculta «..» y |
    |           |«.»)                                               |
    |-----------+---------------------------------------------------|
    |ls -la     |relación todo el contenido del directorio con      |
    |           |información detallada                              |
    |-----------+---------------------------------------------------|
    |ls -lai    |relación el contenido completo del directorio con  |
    |           |el número del inodo e información detallada        |
    |-----------+---------------------------------------------------|
    |ls -d      |relación los directorios que cuelgan del directorio|
    |           |actual                                             |
    |-----------+---------------------------------------------------|
    |tree       |muestra el contenido de los directorios en formato |
    |           |de árbol                                           |
    |-----------+---------------------------------------------------|
    |lsof foo   |relación de los procesos que tienen abierto el     |
    |           |archivo «foo»                                      |
    |-----------+---------------------------------------------------|
    |lsof -p pid|relación de los archivos abiertos por el proceso   |
    |           |con el identificador: «pid»                        |
    |-----------+---------------------------------------------------|
    |mkdir foo  |crear un nuevo directorio «foo» en el directorio   |
    |           |actual                                             |
    |-----------+---------------------------------------------------|
    |rmdir foo  |borra el directorio «foo» del directorio actual    |
    |-----------+---------------------------------------------------|
    |           |cambia al directorio «foo» que se encuentre en el  |
    |cd foo     |directorio actual o en los directorios incluidos en|
    |           |la variable «$CDPATH»                              |
    |-----------+---------------------------------------------------|
    |cd /       |cambia al directorio raíz                          |
    |-----------+---------------------------------------------------|
    |cd         |cambia al directorio principal del usuario actual  |
    |-----------+---------------------------------------------------|
    |cd /foo    |cambia al directorio con ruta absoluta «foo»       |
    |-----------+---------------------------------------------------|
    |cd ..      |cambia al directorio padre                         |
    |-----------+---------------------------------------------------|
    |cd ~foo    |cambia al directorio principal del usuario «foo»   |
    |-----------+---------------------------------------------------|
    |cd -       |cambia al directorio anterior                      |
    |-----------+---------------------------------------------------|
    |</etc/motd |muestra el contenido de «/etc/motd» usando el      |
    |pager      |paginador por defecto                              |
    |-----------+---------------------------------------------------|
    |touch      |crea un archivo vacío «junkfile»                   |
    |junkfile   |                                                   |
    |-----------+---------------------------------------------------|
    |cp foo bar |copia el archivo existente «foo» en un archivo     |
    |           |nuevo «bar»                                        |
    |-----------+---------------------------------------------------|
    |rm junkfile|borra el archivo «junkfile»                        |
    |-----------+---------------------------------------------------|
    |           |renombra el archivo existente «foo» con un nuevo   |
    |mv foo bar |nombre «bar» («bar» no debe existir con            |
    |           |anterioridad)                                      |
    |-----------+---------------------------------------------------|
    |           |mueve el archivo existente «foo» a una nueva       |
    |mv foo bar |ubicación «bar/foo» (el directorio «bar» debe      |
    |           |existir previamente)                               |
    |-----------+---------------------------------------------------|
    |           |mueve un archivo existente «foo» a una nueva       |
    |mv foo bar/|ubicación con el nombre nuevo «bar/baz» (el        |
    |baz        |directorio «bar» debe existir con anterioridad pero|
    |           |el archivo «bar/baz» no)                           |
    |-----------+---------------------------------------------------|
    |chmod 600  |el archivo existente «foo» únicamente tiene        |
    |foo        |permisos de lectura y escritura para el dueño (y no|
    |           |se permite la ejecución por nadie)                 |
    |-----------+---------------------------------------------------|
    |chmod 644  |hace que un archivo existente «foo» lo pueda leer  |
    |foo        |cualquiera, que únicamente el dueño pueda escribir |
    |           |sobre él (y nadie puede ejecutarlo)                |
    |-----------+---------------------------------------------------|
    |chmod 755  |hace que un archivo «foo» pueda ser leído por      |
    |foo        |cualquiera y modificado solo por el dueño          |
    |           |(cualquiera puede ejecutarlo)                      |
    |-----------+---------------------------------------------------|
    |find .     |encuentra archivos que cumplen la «                |
    |-name      |expresión_regular» del intérprete de órdenes       |
    |pattern    |(lento)                                            |
    |-----------+---------------------------------------------------|
    |           |encuentra archivos que cumplen «expresión_regular» |
    |locate -d .|del intérprete de órdenes (rápido ya que utiliza   |
    |pattern    |una base de datos que se actualiza de forma        |
    |           |periódica)                                         |
    |-----------+---------------------------------------------------|
    |grep -e "  |buscar un patrón " " en todos los archivos que     |
    |pattern"   |terminen con " .html " en el directorio actual y   |
    |*.html     |mostrarlos todos                                   |
    |-----------+---------------------------------------------------|
    |top        |muestra información de los procesos a pantalla     |
    |           |completa, pulsando «q» para terminar               |
    |-----------+---------------------------------------------------|
    |ps aux |   |muestra información de todos los procesos          |
    |pager      |ejecutándose utilizando para la salida el estilo   |
    |           |BSD                                                |
    |-----------+---------------------------------------------------|
    |ps -ef |   |muestra información de todos los procesos          |
    |pager      |ejecutándose utilizando para la salida el estilo   |
    |           |Unix system-V                                      |
    |-----------+---------------------------------------------------|
    |ps aux |   |                                                   |
    |grep -e "  |muestra todos los procesos «exim» y «exim4»        |
    |[e]xim4*"  |                                                   |
    |-----------+---------------------------------------------------|
    |ps axf |   |muestra información de todos los procesos con la   |
    |pager      |salida al estilo de arte ASCII                     |
    |-----------+---------------------------------------------------|
    |kill 1234  |elimina el proceso cuyo identificador de proceso   |
    |           |es: «1234»                                         |
    |-----------+---------------------------------------------------|
    |gzip foo   |comprime «foo» y crea «foo.gz» usando la           |
    |           |codificación Lempel-Ziv (LZ77)                     |
    |-----------+---------------------------------------------------|
    |gunzip foo |descomprimir "foo.gz" para crear "foo"             |
    |.gz        |                                                   |
    |-----------+---------------------------------------------------|
    |           |comprime «foo» y crea «foo.bz2» usando el algoritmo|
    |bzip2 foo  |de compresión de texto por ordenación de bloques   |
    |           |Burrows-Wheeler y codificación Huffman (ofrece     |
    |           |mejor compresión que gzip)                         |
    |-----------+---------------------------------------------------|
    |bunzip2 foo|descomprime «foo.bz2» y crea «foo»                 |
    |.bz2       |                                                   |
    |-----------+---------------------------------------------------|
    |           |comprimir "foo" para crear "foo.xz" utilizando el  |
    |xz foo     |algoritmo de cadena Lempel-Ziv-Markov (mejor       |
    |           |compresión que bzip2)                              |
    |-----------+---------------------------------------------------|
    |unxz foo.xz|descomprime «foo.xz» y crea «foo»                  |
    |-----------+---------------------------------------------------|
    |tar -xvf   |extrae archivos del archivo «foo.tar»              |
    |foo.tar    |                                                   |
    |-----------+---------------------------------------------------|
    |tar -xvzf  |extrae los archivos del archivo comprimido mediante|
    |foo.tar.gz |gzip «foo.tar.gz»                                  |
    |-----------+---------------------------------------------------|
    |tar -xvjf  |extrae archivos del archivo «foo.tar.bz2»          |
    |foo.tar.bz2|                                                   |
    |-----------+---------------------------------------------------|
    |tar -xvJf  |extrae los archivos del archivo «foo.tar.xz»       |
    |foo.tar.xz |                                                   |
    |-----------+---------------------------------------------------|
    |tar -cvf   |archiva el contenido de la carpeta «bar/» en el    |
    |foo.tar bar|archivo «foo.tar»                                  |
    |/          |                                                   |
    |-----------+---------------------------------------------------|
    |tar -cvzf  |archiva el contenido de la carpeta «bar/» en el    |
    |foo.tar.gz |archivo comprimido «foo.tar.gz»                    |
    |bar/       |                                                   |
    |-----------+---------------------------------------------------|
    |tar -cvjf  |archiva el contenido de la carpeta «bar/» en el    |
    |foo.tar.bz2|archivo «foo.tar.bz2»                              |
    |bar/       |                                                   |
    |-----------+---------------------------------------------------|
    |tar -cvJf  |archiva el contenido de la carpeta «bar/» en el    |
    |foo.tar.xz |archivo «foo.tar.xz»                               |
    |bar/       |                                                   |
    |-----------+---------------------------------------------------|
    |zcat       |mostrar el contenido del archivo comprimido        |
    |README.gz ||"README.gz" usando el paginador por defecto        |
    |pager      |                                                   |
    |-----------+---------------------------------------------------|
    |zcat       |crea un archivo «foo» con el contenido             |
    |README.gz >|descomprimido de «README.gz»                       |
    |foo        |                                                   |
    |-----------+---------------------------------------------------|
    |zcat       |adjunta el contenido descomprimido de «README.gz»  |
    |README.gz  |al final del archivo «foo» (si no existe, lo creará|
    |>> foo     |primero)                                           |
    +---------------------------------------------------------------+


    Nota

    Unix tiene una tradición de ocultar los archivos que comienzan
    con «.». Tradicionalmente contienen información de configuración
    y de preferencias de usuario.

    Para la orden cd, consulte builtins(7).

    El paginador por defecto del sistema Debian es more(1) que es
    básico y no permite el desplazamiento para atrás. La instalación
    del paquete less con la orden «apt-get install less», convertirá
    a less(1) en el paginador por defecto y este sí permite el
    desplazamiento hacia atrás con las teclas de cursor.

    En la expresión regular de la orden «ps aux | grep -e «[e]
    xim4*«», «[» y «]» permite a grep que no encaje consigo mismo. La
    expresión regular «4*» significa cero o más repeticiones del
    carácter «4» y de este modo permite a grep encajar con «exim» y
    con «exim4». Aunque el intérprete de órdenes utiliza «*» para el
    completado de nombres y las expresiones regulares, sus
    significados son distintos. Aprenda expresiones regulares
    consultando grep(1).

    Por favor, para entrenar recorra los directorios y de un vistazo
    al sistema utilizando las órdenes que acabamos de introducir. Si
    tiene dudas sobre cualquier orden de consola, asegúrese de leer
    la página del manual.

    Por ejemplo, intente lo siguiente

    $ man man
    $ man bash
    $ man builtins
    $ man grep
    $ man ls

    El estilo de la páginas de manual puede ser un poco áspero, ya
    que puede ser bastante conciso, especialmente las más antiguas y
    típicas pero una vez que se acostumbre, llegará a apreciar su
    concisión.

    Recuerde que muchas órdenes de la familia Unix, incluidas las que
    provienen de GNU y BSD muestran un resumen de la ayuda si las
    ejecuta en alguna de las siguientes maneras (o sin parámetros en
    algunos casos).

    $ commandname --help
    $ commandname -h

1.5. Órdenes simples para el intérprete de órdenes

    Ahora ya tiene una idea de como utilizar un sistema Debian. Vamos
    a ver en profundidad el mecanismo de la ejecución de órdenes en
    el sistema Debian. En este tema haremos una simplificación de la
    realidad para las personas con poca experiencia. Para una
    explicación más completa consultar bash(1).

    Un comando simple es una secuencia de componentes.

     1. asignación de variables (opcional),

     2. nombre de la orden,

     3. parámetros (opcional),

     4. redirecciones (optional: > , >> , < , << , etc.),

     5. operadores de control (optional: && , || , nueva_línea , ; ,
        & , ( , ) ).

1.5.1. Ejecución de órdenes y variables de entorno

    El comportamiento de algunas órdenes Unix cambia dependiendo del
    valor de algunas variables de entorno.

    Los valores predeterminados de las variables de entorno los
    estable inicialmente el sistema PAM y luego algunos de ellos se
    pueden restablecer por algunos programas de la aplicación.

      * El sistema PAM como pam_env puede establecer variables de
        entorno mediante /etc/pam.conf", "/etc/environment" y "/etc/
        default/locale".

      * The modern GUI environment run from the user mode systemd
        unit (see systemd.unit(5)) sets its environment variables by
        a file in the "~/.config/environment.d/" directory.

      * La inicialización del programa específico del usuario puede
        reajustar variables del entorno por "~/.profile", "~
        /.bash_profile"y"~/.bashrc".

1.5.2. La variable «$LANG»

    La configuración regional predeterminada se define en la variable
    de entorno "$LANG" y se configura como "LANG=xx_YY.UTF-8" por el
    instalador o por la configuración posterior de la GUI, por
    ejemplo, "Configuración" → "Región e idioma" → "Idioma" /
    "Formatos" para GNOME.

    Nota

    Recomiendo que se configure el entorno del sistema sólo con la
    variable "$LANG" por ahora y mantenerse alejado de las variables
    "$LC_*" a menos que sea absolutamente necesario.

    La variable de la configuración regional «$LANG» tiene tres
    partes: «xx_YY.ZZZZ».

    Tabla 1.18. Tres partes del valor de la configuración regional

    +---------------------------------------------------------------+
    |      valor de      |                                          |
    |   configuración    |               significado                |
    |      regional      |                                          |
    |--------------------+------------------------------------------|
    |xx                  |códigos de la lengua según la ISO 639 (en |
    |                    |minúsculas) como «en»                     |
    |--------------------+------------------------------------------|
    |YY                  |código del país de la ISO 3166 (en        |
    |                    |mayúsculas) como «US»                     |
    |--------------------+------------------------------------------|
    |ZZZZ                |codificación de caracteres, siempre       |
    |                    |«UTF-8»                                   |
    +---------------------------------------------------------------+


    Tabla 1.19. Relación de recomendaciones para la configuración
    regional

    +---------------------------------------------------------------+
    |recomendación de la configuración |    lengua (territorio)     |
    |             regional             |                            |
    |----------------------------------+----------------------------|
    |en_US.UTF-8                       |Inglés (USA)                |
    |----------------------------------+----------------------------|
    |en_GB.UTF-8                       |Inglés (Gran Bretaña)       |
    |----------------------------------+----------------------------|
    |fr_FR.UTF-8                       |Francés (Francia)           |
    |----------------------------------+----------------------------|
    |de_DE.UTF-8                       |Alemán (Alemania)           |
    |----------------------------------+----------------------------|
    |it_IT.UTF-8                       |Italiano (Italia)           |
    |----------------------------------+----------------------------|
    |es_ES.UTF-8                       |Español (España)            |
    |----------------------------------+----------------------------|
    |ca_ES.UTF-8                       |Catalán (España)            |
    |----------------------------------+----------------------------|
    |sv_SE.UTF-8                       |Sueco (Suecia)              |
    |----------------------------------+----------------------------|
    |pt_BR.UTF-8                       |Portugués (Brasil)          |
    |----------------------------------+----------------------------|
    |ru_RU.UTF-8                       |Ruso (Rusia)                |
    |----------------------------------+----------------------------|
    |zh_CN.UTF-8                       |Chino (República Popular de |
    |                                  |China)                      |
    |----------------------------------+----------------------------|
    |zh_TW.UTF-8                       |Chino (República de China   |
    |                                  |(Taiwan))                   |
    |----------------------------------+----------------------------|
    |ja_JP.UTF-8                       |Japonés (Japón)             |
    |----------------------------------+----------------------------|
    |ko_KR.UTF-8                       |Coreano (República de Corea)|
    |----------------------------------+----------------------------|
    |vi_VN.UTF-8                       |Vietnamita (Vietnam)        |
    +---------------------------------------------------------------+


    La forma más común de ejecutar la orden en un intérprete de
    órdenes es como se muestra.

    $ echo $LANG
    en_US.UTF-8
    $ date -u
    Wed 19 May 2021 03:18:43 PM UTC
    $ LANG=fr_FR.UTF-8 date -u
    mer. 19 mai 2021 15:19:02 UTC

    Aquí, el programa date(1) se ejecuta con valores locales
    diferentes.

      * En la primera orden «$LANG» tiene el valor por defecto de la
        configuración regional «en_US.UTF-8».
   
      * En la segunda orden «$LANG» asigna la configuración regional
        a francés UTF-8 con el valor «fr_FR.UTF-8».

    La mayor parte de las órdenes ejecutadas no van precedidas de la
    definición de variables de entorno. Otra forma alternativa del
    ejemplo anterior es la que se muestra.

    $ LANG=fr_FR.UTF-8
    $ date -u
    mer. 19 mai 2021 15:19:24 UTC

    Sugerencia

    Cuando envíe un informe de error, es una buena idea ejecutar y
    comprobar el comando bajo la configuración regional "en_US.UTF-8"
    si utiliza un entorno distinto al inglés.

    Consultar Sección 8.1, “Configuración regional” para obtener más
    detalles de la configuración regional.

1.5.3. La variable «$PATH»

    Cuando escribe una orden en el intérprete de órdenes, este busca
    la orden en la relación de directorios contenidos en la variable
    de entorno «$PATH». El valor de la variable de entorno «$PATH»
    también se le conoce como la ruta de búsqueda del intérprete de
    órdenes.

    En la instalación por defecto de Debian, la variable de entorno
    «$PATH» de las cuentas de usuario puede no incluir «/usr/sbin» y
    «/usr/sbin». Por ejemplo, la orden ifconfig necesita ser
    ejecutada con la ruta completa con «/usr/sbin/ifconfig». (Órdenes
    parecidas como ip están ubicadas en «/usr/bin».)

    Puede cambiar la variable de entorno "$PATH" del shell Bash
    mediante los archivos "~/.bash_profile" o "~/.bashrc".

1.5.4. La variable «$HOME»

    Muchas órdenes almacenan configuraciones específicas del usuario
    en su directorio principal y cambian su comportamiento en función
    de estas. El directorio principal del usuario es determinado por
    el valor de la variable de entorno «$HOME».

    Tabla 1.20. Relación de valores de «$HOME»

    +---------------------------------------------------------------+
    | valor de  |     características de ejecución del programa     |
    |  «$HOME»  |                                                   |
    |-----------+---------------------------------------------------|
    |/          |programa ejecutándose por el proceso init (demonio)|
    |-----------+---------------------------------------------------|
    |/root      |programa ejecutándose desde el intérprete de       |
    |           |órdenes del superusuario                           |
    |-----------+---------------------------------------------------|
    |/home/     |programa ejecutándose desde el intérprete de       |
    |normal_user|órdenes de un usuario normal                       |
    |-----------+---------------------------------------------------|
    |/home/     |programa ejecutándose desde el menú en el          |
    |normal_user|escritorio gráfico de un usuario normal            |
    |-----------+---------------------------------------------------|
    |/home/     |programa ejecutándose como superusuario con «sudo  |
    |normal_user|programa»                                          |
    |-----------+---------------------------------------------------|
    |/root      |programa ejecutándose como superusuario con «sudo  |
    |           |-H programa»                                       |
    +---------------------------------------------------------------+


    Sugerencia

    El intérprete de órdenes sustituye «~/» por el directorio
    principal del usuario actual, esto es, «$HOME/». El intérprete de
    órdenes sustituye «~foo/» por el directorio principal del usuario
    foo, a saber, «/home/foo/».

    Ver Sección 12.1.5, “Variables del entorno de shell” si $HOME no
    está disponible para su programa.

1.5.5. Opciones de la línea de órdenes

    Algunas órdenes tienen parámetros. Se llaman opciones a los
    parámetros que comienzan con «-» o «--» y controlan el
    comportamiento de la orden.

    $ date
    Thu 20 May 2021 01:08:08 AM JST
    $ date -R
    Thu, 20 May 2021 01:08:12 +0900

    En este caso, el argumento de la línea de comandos "-R" cambia el
    comportamiento de date(1) para mostrar una cadena de fecha
    compatible con RFC2822.

1.5.6. Expansión de un patrón en el intérprete de órdenes

    A menudo querrá que una orden afecte a un grupo de archivos sin
    escribir el nombre de cada uno de ellos. Para cubrir esta
    necesidad existe la expansión de patrones de nombres de archivos
    dentro del intérprete de órdenes glob, (algunas veces también
    llamado uso de comodines).

    Tabla 1.21. Patrones para la expansión de nombres de archivos del
    intérprete de órdenes

    +---------------------------------------------------------------+
    |patrón|           descripción de la regla de encaje            |
    |------+--------------------------------------------------------|
    |*     |nombres de archivos que no comienza con «.»             |
    |------+--------------------------------------------------------|
    |.*    |nombres de archivos que comienza con «.»                |
    |------+--------------------------------------------------------|
    |?     |un único carácter                                       |
    |------+--------------------------------------------------------|
    |[…]   |un único carácter que pertenezca al grupo de caracteres |
    |      |entre corchetes                                         |
    |------+--------------------------------------------------------|
    |[a-z] |un único carácter con cualquier valor comprendido entre |
    |      |«a» y «z»                                               |
    |------+--------------------------------------------------------|
    |[^…]  |un único carácter que no pertenezca al grupo de         |
    |      |caracteres encerrados entre corchetes (excluyendo «^»)  |
    +---------------------------------------------------------------+


    Por ejemplo, intente lo siguiente

    $ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt ..6.txt
    $ echo *.txt
    1.txt 2.txt
    $ echo *
    1.txt 2.txt 3.c 4.h
    $ echo *.[hc]
    3.c 4.h
    $ echo .*
    . .. .5.txt ..6.txt
    $ echo .*[^.]*
    .5.txt ..6.txt
    $ echo [^1-3]*
    4.h
    $ cd ..; rm -rf junk

    Ver glob(7).

    Nota

    Si prueba «*» en la orden find(1) con «-name» test etc., encajará
    «.» como parte inicial del nombre de archivo, al contrario que en
    la expansión de nombres del intérprete de órdenes .
    (Funcionalidad nueva de POSIX)

    Nota

    BASH puede cambiar el comportamiento de la expansión de nombres
    de archivo con sus opciones internas como «dotglob», «noglob»,
    «nocaseglob», «nullglob», «extglob», etc. Ver bash(1).

1.5.7. Valor devuelto por la orden

    Cada orden devuelve su estado de salida en el valor devuelto (en
    la variable: «$?»).

    Tabla 1.22. Códigos de salida de una orden

    +---------------------------------------------------------------+
    |estado de salida de una |  valor numérico   |   valor lógico   |
    |         orden          |     devuelto      |     devuelto     |
    |------------------------+-------------------+------------------|
    |éxito                   |cero, 0            |VERDAD            |
    |------------------------+-------------------+------------------|
    |error                   |diferente de cero, |FALSO             |
    |                        |-1                 |                  |
    +---------------------------------------------------------------+


    Por ejemplo, pruebe con lo que se muestra.

    $ [ 1 = 1 ] ; echo $?
    0
    $ [ 1 = 2 ] ; echo $?
    1

    Nota

    Tenga en cuenta que en el contexto lógico del intérprete de
    órdenes, éxito es tratado de forma lógica como CIERTO que tiene
    un valor 0 (cero). Quizá esto sea poco intuitivo y por ello se
    necesite recordar.

1.5.8. Secuencias de órdenes comunes y redirecciones del intérprete
de órdenes

    Intentemos recordar las siguientes expresiones como parte de una
    orden de una única línea.

    Tabla 1.23. Expresiones de una orden

    +---------------------------------------------------------------+
    |expresión|                                                     |
    |  de la  |                     descripción                     |
    |  orden  |                                                     |
    |---------+-----------------------------------------------------|
    |command &|ejecución en segundo plano de la orden en un         |
    |         |intérprete de órdenes hijo                           |
    |---------+-----------------------------------------------------|
    |command1 |envía a la tubería la salida estándar de la orden1 a |
    ||        |la entrada estándar de la orden2 (se ejecutan de     |
    |command2 |forma concurrente )                                  |
    |---------+-----------------------------------------------------|
    |command1 |envía a la tubería la salida estándar y el error     |
    |2>&1 |   |estándar de la orden1 a la entrada estándar de la    |
    |command2 |orden2 (se ejecutan de forma concurrente )           |
    |---------+-----------------------------------------------------|
    |command1 |                                                     |
    |;        |ejecuta la orden1 y la orden2 de forma secuencial    |
    |command2 |                                                     |
    |---------+-----------------------------------------------------|
    |command1 |ejecuta la orden1; y si ha tenido éxito, ejecuta la  |
    |&&       |orden2 secuencialmente (devuelve éxito si tanto la   |
    |command2 |orden1 como la orden2 finalizan con éxito)           |
    |---------+-----------------------------------------------------|
    |command1 |ejecuta la orden1; si no tiene éxito, se ejecuta la  |
    |||       |orden2 de forma secuencial (devuelve éxito si orden1 |
    |command2 |o orden2 se ejecutan con éxito)                      |
    |---------+-----------------------------------------------------|
    |command >|redirecciona la salida estándar de la orden al       |
    |foo      |archivo foo (y si existe lo sobreescribe)            |
    |---------+-----------------------------------------------------|
    |command  |redirecciona el error estándar de orden al archivo   |
    |2> foo   |foo (sobreescribiendolo)                             |
    |---------+-----------------------------------------------------|
    |command  |redirecciona la salida estándar de orden al          |
    |>> foo   |archivofoo (concatenándola)                          |
    |---------+-----------------------------------------------------|
    |command  |redirecciona el error estándar de orden al archivo   |
    |2>> foo  |foo (concatenándola)                                 |
    |---------+-----------------------------------------------------|
    |command >|redirecciona salida estándar y el error estándar de  |
    |foo 2>&1 |orden al archivo foo                                 |
    |---------+-----------------------------------------------------|
    |command <|envía a la entrada estándar de la orden a un archivo |
    |foo      |foo                                                  |
    |---------+-----------------------------------------------------|
    |command  |envía a la entrada estándar de la orden a las líneas |
    |<<       |siguientes hasta que encuentra un «delimitador» (aquí|
    |delimiter|el documento)                                        |
    |---------+-----------------------------------------------------|
    |command  |envía a la entrada estándar de la orden a las líneas |
    |<<-      |siguientes hasta que se encuentre con el             |
    |delimiter|«delimitador» ( en las líneas de entrada se eliminan |
    |         |los tabuladores al inicio)                           |
    +---------------------------------------------------------------+


    El sistema Debian es un sistema multitarea. Mediante trabajos en
    segundo plano se pueden ejecutar por parte de los usuario
    múltiples programas desde un único intérprete de órdenes. La
    gestión de los procesos en segundo plano se realiza con las
    órdenes internas: jobs, fg, bg y kill. Por favor, ver las
    secciones de bash(1) «SIGNALS», «JOB CONTROL» y builtins(1).

    Por ejemplo, intente lo siguiente

    $ </etc/motd pager

    $ pager </etc/motd

    $ pager /etc/motd

    $ cat /etc/motd | pager

    Aunque los cuatro ejemplos de redirección del intérprete de
    órdenes son equivalentes, el último ejemplo ejecuta una orden más
    cat y desperdicia recursos sin razón alguna.

    El intérprete de órdenes permite abrir archivos utilizando la
    orden interna exec con un descriptor de archivo arbitrario.

    $ echo Hello >foo
    $ exec 3<foo 4>bar  # open files
    $ cat <&3 >&4       # redirect stdin to 3, stdout to 4
    $ exec 3<&- 4>&-    # close files
    $ cat bar
    Hello

    Los descriptores de archivo de 0 a 2 están predefinidos.

    Tabla 1.24. Descriptores de archivos predefinidos

    +--------------------------------------------------+
    |dispositivo|  descripción   |descriptor de archivo|
    |-----------+----------------+---------------------|
    |stdin      |entrada estándar|0                    |
    |-----------+----------------+---------------------|
    |stdout     |salida estándar |1                    |
    |-----------+----------------+---------------------|
    |stderr     |error estándar  |2                    |
    +--------------------------------------------------+


1.5.9. Alias de órdenes

    Usted puede definir alias para las órdenes más utilizadas.

    Por ejemplo, intente lo siguiente

    $ alias la='ls -la'

    Ahora, «la» funciona como forma corta de «ls -la» la cual muestra
    una relación de todos los archivos en el formato largo.

    Se pueden enumerar los alias existentes mediante alias (ver el
    epígrafe «SHELL BUILTIN COMMANDS» de bash(1)).

    $ alias
    ...
    alias la='ls -la'

    Se puede determinar la ruta exacta o la identidad de la orden
    mediante «type» (ver el epígrafe «SHELL BUILTIN COMMANDS» de bash
    (1)).

    Por ejemplo, intente lo siguiente

    $ type ls
    ls is hashed (/bin/ls)
    $ type la
    la is aliased to ls -la
    $ type echo
    echo is a shell builtin
    $ type file
    file is /usr/bin/file

    En el ejemplo anterior ls fue consultado recientemente y «file»
    no lo fue, de este modo «ls» está indexado, a saber, el
    intérprete de órdenes tiene un registro interno que determina
    rápidamente la ubicación de la orden «ls».

    Sugerencia
   
    Ver Sección 9.3.6, “Órdenes coloreadas”.

1.6. Operaciones de texto al estilo de Unix

    En un entorno de trabajo del estilo de Unix, el tratamiento de
    texto se realiza mediante el uso de tuberías que unen un conjunto
    de herramientas para formar una cadena. Esta fue otra de las
    innovaciones esenciales de Unix.

1.6.1. Herramientas de texto Unix

    Algunas herramientas que trabajan con texto se usan muy
    frecuentemente en un sistema tipo Unix.

      * No se usan expresiones regulares:

          + cat(1) concatena archivos y muestra el contenido
            completo.

          + tac(1) concatena archivos y sale en sentido inverso.

          + cut(1) selecciona las partes de las líneas y las salidas.

          + head(1) muestra la primera parte de los archivos.

          + tail(1) muestra la última parte de los archivos.

          + sort(1) ordena las líneas de los archivos de texto.

          + uniq(1) elimina las líneas duplicadas de un archivo ya
            ordenado.

          + tr(1) traduce o borra caracteres.

          + diff(1) compara archivos línea a línea.

      * La expresión regular básica (BRE) se utiliza por defecto:

          + ed(1) es un editor de líneas antiguo.

          + sed(1) es un editor de flujos.

          + grep(1) compara el texto con otros patrones.

          + vim(1) es un editor de pantalla.

          + emacs(1) es un editor interactivo (en cierta manera
            amplía BRE).

      * Las expresiones regulares ampliadas (ERE son utilizadas por:

          + awk(1) realiza un simple procesamiento de texto.

          + egrep(1) hace coincidencias de los patrones en el texto.

          + tcl(3tcl) puede hacer cualquier procesamiento de texto
            imaginado: Ver re_syntax(3). A menudo se utiliza con tk
            (3tk).

          + perl(1) puede hacer cualquier procesamiento de texto que
            imágenes. Ver perlre(1).

          + pcre2grep(1) del paquete pcre2-util empareja texto con el
            patrón Perl Compatible Regular Expressions (PCRE).

          + python(1) utilizando el módulo re puede realizar
            cualquier procesamiento de textos imaginable. Ver «/usr/
            share/doc/python/html/index.html».

    Si no esta seguro de que hacen exactamente estas órdenes, por
    favor utilice «man orden» para averiguarlo por usted mismo.

    Nota

    El orden de clasificación y la expresión de rango dependen de la
    configuración regional. Si desea obtener un comportamiento
    tradicional para un comando, use la configuración regional C o la
    configuración regional C.UTF-8 en lugar de la configuración
    regional normal UTF-8 (ver Sección 8.1, “Configuración regional”
    ).

    Nota

    Las expresiones regulares de Perl(perlre(1)), Perl Compatible
    Regular Expressions (PCRE) y las expresiones regulares de Python
    ofrecidas por su módulo re tienen muchas expresiones comunes a
    las tradicionales ERE.

1.6.2. Expresiones regulares

    Las expresiones regulares son utilizadas por muchas herramientas
    de procesamiento de texto. Son similares a la expansión de
    nombres de archivo en el intérprete de órdenes, aunque más
    complicadas y poderosas.

    Las expresiones regulares especifican un patrón de encaje y está
    compuesto por caracteres de texto y metacaracteres.

    Un metacarácter es un carácter que tiene un significado especial.
    Existen dos tendencias principales, BRE y ERE dependiendo de cada
    herramienta de texto, como ya se ha descrito.

    Tabla 1.25. Metacaracteres para BRE y ERE

    +---------------------------------------------------------------+
    |  BRE   | ERE  |      descripción de la expresión regular      |
    |--------+------+-----------------------------------------------|
    |\ . [ ] |\ . [ |                                               |
    |^ $ *   |] ^ $ |metacaracteres comunes                         |
    |        |*     |                                               |
    |--------+------+-----------------------------------------------|
    |\+ \? \(|      |                                               |
    |\) \{ \}|      |sólo en BRE metacaracteres escapados con «\»   |
    |\|      |      |                                               |
    |--------+------+-----------------------------------------------|
    |        |+ ? ( |                                               |
    |        |) { } |sólo en ERE metacaracteres no escapados con "\"|
    |        ||     |                                               |
    |--------+------+-----------------------------------------------|
    |c       |c     |que encaja con el no metacarácter «c»          |
    |--------+------+-----------------------------------------------|
    |\c      |\c    |encaja con un carácter literal «c» incluso si  |
    |        |      |«c» representa un metacarácter                 |
    |--------+------+-----------------------------------------------|
    |.       |.     |encaja cualquier carácter incluyendo el de     |
    |        |      |nueva línea                                    |
    |--------+------+-----------------------------------------------|
    |^       |^     |posición al comienzo de la cadena de caracteres|
    |--------+------+-----------------------------------------------|
    |$       |$     |posición al final de la cadena de caracteres   |
    |--------+------+-----------------------------------------------|
    |\<      |\<    |posición al comienzo de la palabra             |
    |--------+------+-----------------------------------------------|
    |\>      |\>    |posición al final de la palabra                |
    |--------+------+-----------------------------------------------|
    |[abc…]  |[abc…]|encaja cualquier carácter incluido en «abc...» |
    |--------+------+-----------------------------------------------|
    |[^abc…] |[^    |coincide con cualquier carácter excepto en     |
    |        |abc…] |"abc..."                                       |
    |--------+------+-----------------------------------------------|
    |r*      |r*    |coincide con cero o más expresiones regulares  |
    |        |      |identificadas por " r "                        |
    |--------+------+-----------------------------------------------|
    |r\+     |r+    |coinciden con una o varias expresiones         |
    |        |      |regulares identificadas por "r"                |
    |--------+------+-----------------------------------------------|
    |r\?     |r?    |coinciden con ninguna o una expresión regular  |
    |        |      |identificada por "r"                           |
    |--------+------+-----------------------------------------------|
    |r1\|r2  |r1|r2 |encaja una de las expresiones regulares «r1» o |
    |        |      |«r2»                                           |
    |--------+------+-----------------------------------------------|
    |\(r1\|r2|(r1|  |coincide con una de las expresiones regulares  |
    |\)      |r2)   |identificadas por «r1» o «r2» y la trata como  |
    |        |      |una expresión regular entre paréntesis         |
    +---------------------------------------------------------------+


    Emacs utiliza principalmente el tipo de expresión regular BRE
    pero se ha ampliado para utilizar «+» y «?» como metacaracteres
    como en ERE. Por lo tanto no es necesario añadirles el prefijo «\
    » en las expresiones regulares de emacs.

    grep(1) puede utilizarse para realizar búsquedas de texto por
    medio de expresiones regulares.

    Por ejemplo, intente lo siguiente

    $ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL
    GNU GENERAL PUBLIC LICENSE
    GNU GENERAL PUBLIC LICENSE
    Yoyodyne, Inc., hereby disclaims all copyright interest in the program

    Sugerencia
   
    Ver Sección 9.3.6, “Órdenes coloreadas”.

1.6.3. Sustitución de expresiones

    En la sustitución de expresiones algunos caracteres tienen un
    significado especial.

    Tabla 1.26. Sustitución mediante expresiones regulares

    +---------------------------------------------------------------+
    | expresión  |descripción del texto para reemplazar la expresión|
    | sustituida |                   de reemplazo                   |
    |------------+--------------------------------------------------|
    |&           |lo que encaja con la expresión regular (usar \& en|
    |            |emacs)                                            |
    |------------+--------------------------------------------------|
    |\n          |lo que encaja con la n enésima expresión regular  |
    |            |entre paréntesis (donde «n» es un número)         |
    +---------------------------------------------------------------+


    Para la sustitución de cadenas en Perl se usa "$&" en lugar de "&
    " y "$n" en lugar de "\n".

    Por ejemplo, intente lo siguiente

    $ echo zzz1abc2efg3hij4 | \
    sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/'
    zzz=1abc2efg3hij4=
    $ echo zzz1abc2efg3hij4 | \
    sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/=&=/'
    zzz=1abc2efg3hij4=
    $ echo zzz1abc2efg3hij4 | \
    perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=$&=/'
    zzz=1abc2efg3hij4=
    $ echo zzz1abc2efg3hij4 | \
    sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/'
    zzzefg3hij4===1abc
    $ echo zzz1abc2efg3hij4 | \
    sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/\2===\1/'
    zzzefg3hij4===1abc
    $ echo zzz1abc2efg3hij4 | \
    perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/'
    zzzefg3hij4===1abc

    En la sustitución de texto, en las diferentes herramientas,
    prestar especial atención al encaje de las expresiones regulares 
    entre corchetes o paréntesis con las cadenas de caracteres.

    Algunos editores permiten la utilización de expresiones regulares
    para la búsqueda y/o sustitución de texto.

    En el intérprete de órdenes se puede escribir una misma orden en
    varias líneas anteponiendo el caraćter de barra invertida «\» al
    carácter de nueva línea que será sustituido por el vacío.

    Por favor, consultar las páginas de manual de estas órdenes.

1.6.4. Sustituciones globales mediante expresiones regulares

    La orden ed(1) permite sustituir todas las ocurrencias de
    «LA_EXPRESIÓN_REGULAR» por «EL_TEXTO» en el «archivo».

    $ ed file <<EOF
    ,s/FROM_REGEX/TO_TEXT/g
    w
    q
    EOF

    La orden sed(1) sustituye todas las ocurrencias de
    «LA_EXPRESIÓN_REGULAR» por «EL_TEXTO» en el «archivo».

    $ sed -i -e 's/FROM_REGEX/TO_TEXT/g' file

    La orden vim(1) puede sustituir todas las ocurrencias de
    «LA_EXPRESIÓN_REGULAR» por «EL_TEXTO» en el «archivo» utilizando
    las órdenes ex(1).

    $ vim '+%s/FROM_REGEX/TO_TEXT/gc' '+update' '+q' file

    Sugerencia
   
    La bandera «c» de la orden anterior hace que se pida la
    confirmación interactiva de cada una de las sustituciones.

    Se pueden procesar varios archivos de forma similar («archivo1»,
    «archivo2» y «archivo3») mediante las expresiones regulares de
    vim(1) o perl(1).

    $ vim '+argdo %s/FROM_REGEX/TO_TEXT/gce|update' '+q' file1 file2 file3

    Sugerencia
   
    La bandera "e" en lo anterior evita que el error "No match" rompa
    un mapeo.

    $ perl -i -p -e 's/FROM_REGEX/TO_TEXT/g;' file1 file2 file3

    En el ejemplo en perl(1), «-i» es para la edición de cada
    elemento que encaja con el patrón y «-p» se utiliza para repetir
    la operación sobre cada uno de los archivos que aparecen como
    argumentos.

    Sugerencia

    El uso del argumento «-i.bak» en vez de «-i» mantiene cada
    archivo original añadiéndole «.bak» al nombre del archivo. Esto
    permite deshacer los cambios de forma sencilla si nos hemos
    equivocado al realizar la sustitución.

    Nota
   
    ed(1) y vim(1) utiliza BRE; perl(1) utiliza ERE.

1.6.5. Extracción de datos en archivos de texto en forma de tabla

    Consideremos un archivo de texto llamado «DPL» con los siguientes
    campos: nombres de los líderes del proyecto Debian con
    anterioridad a 2004 y su fecha de inicio, utilizando como
    separador el espacio en blanco.

    Ian     Murdock   August  1993
    Bruce   Perens    April   1996
    Ian     Jackson   January 1998
    Wichert Akkerman  January 1999
    Ben     Collins   April   2001
    Bdale   Garbee    April   2002
    Martin  Michlmayr March   2003

    Sugerencia
   
    Ver «Una breve historia de Debian» para conocer quién es el
    último líder del proyecto Debian.

    Awk se utiliza a menudo para obtener datos de este tipo de
    archivos.

    Por ejemplo, intente lo siguiente

    $ awk '{ print $3 }' <DPL                   # month started
    August
    April
    January
    January
    April
    April
    March
    $ awk '($1=="Ian") { print }' <DPL          # DPL called Ian
    Ian     Murdock   August  1993
    Ian     Jackson   January 1998
    $ awk '($2=="Perens") { print $3,$4 }' <DPL # When Perens started
    April 1996

    Los intérprete de órdenes, como Bash, se pueden usar para
    analizar este tipo de archivos.

    Por ejemplo, intente lo siguiente

    $ while read first last month year; do
        echo $month
      done <DPL
    ... same output as the first Awk example

    Aquí la orden interna read usa los caracteres de «$IFS»
    (separadores internos) para dividir las líneas en palabras.

    Si cambia el valor «$IFS» a «:», puede analizar «/etc/passwd» con
    el intérprete de órdenes de la forma adecuada.

    $ oldIFS="$IFS"   # save old value
    $ IFS=':'
    $ while read user password uid gid rest_of_line; do
        if [ "$user" = "bozo" ]; then
          echo "$user's ID is $uid"
        fi
      done < /etc/passwd
    bozo's ID is 1000
    $ IFS="$oldIFS"   # restore old value

    (Para hacer lo mismo con Awk asigne el separador de campos
    mediante «FS=':'».)

    El intérprete de órdenes utiliza IFS para separar los resultados
    de la expansión de parámetros, sustitución de órdenes y
    expansiones aritméticas. Las palabras entre comillas dobles o
    simples no se tienen en cuenta en estas operaciones. El valor por
    defecto de IFS es la relación espacio, tabulador y nueva_línea.

    Tenga cuidado cuando utilice estos trucos en el intérprete de
    órdenes. Cuando el intérprete de órdenes trabaje en algunas
    partes de un archivo de órdenes y su entrada pueden ocurrir cosas
    extrañas.

    $ IFS=":,"                        # use ":" and "," as IFS
    $ echo IFS=$IFS,   IFS="$IFS"     # echo is a Bash builtin
    IFS=  , IFS=:,
    $ date -R                         # just a command output
    Sat, 23 Aug 2003 08:30:15 +0200
    $ echo $(date -R)                 # sub shell --> input to main shell
    Sat  23 Aug 2003 08 30 36 +0200
    $ unset IFS                       # reset IFS to the default
    $ echo $(date -R)
    Sat, 23 Aug 2003 08:30:50 +0200

1.6.6. Fragmentos de órdenes utilizados con tuberías

    Los fragmentos de órdenes siguientes son muy potentes cuando
    forman parte de una cadena de órdenes unidas por tuberías.

    Tabla 1.27. Relación de fragmentos de órdenes con tuberías

    +---------------------------------------------------------------+
    |fragmento de archivo de|                                       |
    |órdenes (escrito en una|          efecto de la orden           |
    |     única línea)      |                                       |
    |-----------------------+---------------------------------------|
    |find /usr -print       |lista todos los archivos que se        |
    |                       |encuentran por debajo de «/usr»        |
    |-----------------------+---------------------------------------|
    |seq 1 100              |escribe del 1 al 100                   |
    |-----------------------+---------------------------------------|
    |                       |ejecuta la orden de forma repetida para|
    || xargs -n 1 command   |cada elemento de la tubería y          |
    |                       |utilizando este como argumento         |
    |-----------------------+---------------------------------------|
    || xargs -n 1 echo      |divide los elementos de la tubería     |
    |                       |separados por espacios en líneas       |
    |-----------------------+---------------------------------------|
    || xargs echo           |une todas la líneas de la tubería en   |
    |                       |una                                    |
    |-----------------------+---------------------------------------|
    |                       |selecciona las líneas de la tubería que|
    || grep -e regex_pattern|encajan con el                         |
    |                       |patrón_de_expresión_regular            |
    |-----------------------+---------------------------------------|
    || grep -v -e           |selecciona las líneas de la tubería que|
    |regex_pattern          |no tienen encaje con el                |
    |                       |patrón_de_la_expresión_regular         |
    |-----------------------+---------------------------------------|
    |                       |selecciona el tercer campo de cada     |
    || cut -d: -f3 -        |línea de la tubería utilizando como    |
    |                       |separado «:» (archivo de contraseñas   |
    |                       |etc.)                                  |
    |-----------------------+---------------------------------------|
    |                       |selecciona el tercer campo de cada     |
    || awk '{ print $3 }'   |línea de la tubería utilizando como    |
    |                       |separador espacios en blanco           |
    |-----------------------+---------------------------------------|
    || awk -F'\t' '{ print  |selecciona el tercer campo de cada     |
    |$3 }'                  |línea de la tubería utilizando como    |
    |                       |separador el tabulador                 |
    |-----------------------+---------------------------------------|
    || col -bx              |elimina los retornos de carro y        |
    |                       |sustituye los tabuladores por espacios |
    |-----------------------+---------------------------------------|
    || expand -             |sustituye los tabuladores por espacios |
    |-----------------------+---------------------------------------|
    || sort| uniq           |ordena y elimina duplicados            |
    |-----------------------+---------------------------------------|
    || tr 'A-Z' 'a-z'       |convierte mayúsculas a minúsculas      |
    |-----------------------+---------------------------------------|
    || tr -d '\n'           |concatena las líneas en una sola       |
    |-----------------------+---------------------------------------|
    || tr -d '\r'           |elimina el retorno de carro            |
    |-----------------------+---------------------------------------|
    || sed 's/^/# /'        |añade «#» al comienzo de cada línea    |
    |-----------------------+---------------------------------------|
    || sed 's/\.ext//g'     |elimina «.ext»                         |
    |-----------------------+---------------------------------------|
    || sed -n -e 2p         |imprime la segunda línea               |
    |-----------------------+---------------------------------------|
    || head -n 2 -          |imprimir las primeras dos líneas       |
    |-----------------------+---------------------------------------|
    || tail -n 2 -          |imprime las últimas dos líneas         |
    +---------------------------------------------------------------+


    Un archivo de órdenes de una sola línea puede repetirse sobre
    varios archivos utilizando find(1) y xargs(1) para realizar
    tareas muy complicadas. Ver Sección 10.1.5, “Formas de selección
    de archivos” y Sección 9.4.9, “Repetición de una orden sobre
    archivos”.

    Cuando la utilización de órdenes de forma interactiva se complica
    demasiado debe considerarse escribir un archivo de órdenes (ver
    Sección 12.1, “Los archivos de órdenes”).


---------------------------------------------------------------------

    ^[1] Incluso el antiguo vim puede comenzar en el sano modo
    "incompatible" al iniciarlo con la opción "-N".

Capítulo 2. Gestión de paquetes Debian

    Nota

    Este capítulo se ha escrito según la última distribución estable,
    cuyo nombre de publicación es: trixie.
   
    La fuente de datos del sistema APT se denomina colectivamente 
    lista de fuentes en este documento . Puede definirse en cualquier
    parte de los archivos "/etc/apt/sources.list", "/etc/apt/
    sources.list.d/*.list" o "/etc/apt/sources.list.d/*.sources".

2.1. Prerequisitos de la gestión de paquetes Debian

2.1.1. Sistema de gestión de paquetes Debian

    Debian es una organización constituida por voluntarios que
    construyen versiones de paquetes binarios precompilados 
    compatibles basados en software libre y lo distribuyen en su
    archivo,

    El archivo de Debian lo constituyen múltiples nodos espejo a los
    que se accede por medio de los protocolos HTTP y FTP. También
    esta disponible en CD-ROM/DVD.

    El actual sistema de gestión de paquetes de Debian que puede
    utilizar todos estos recursos es Herramienta de empaquetado
    avanzada (APT).

    El sistema de gestión de paquetes Debian, cuando se usa de forma
    adecuada desde el archivo, ofrece al usuario la instalación en el
    sistema de un conjunto de paquetes binarios consistentes.
    Actualmente existen 77003 paquetes disponibles para la
    arquitectura amd64.

    El sistema de administración de paquetes de Debian tiene una rica
    historia y muchas opciones para el programa de usuario de
    front-end y el método de acceso al archivo de back-end que se
    utilizará. Actualmente, recomendamos lo siguiente.

      * apt(8) para todas las operaciones de la línea de órdenes,
        incluida la instalación, eliminación y actualización de
        paquetes.

      * apt-get(8) para llamar desde los archivos de órdenes al
        sistema de gestión de paquetes de Debian. Es una opción de
        reserva en antiguos sistemas Debian en los que apt no esta
        disponible.

      * aptitude(8) para la gestión interactiva mediante interfaz de
        texto para la gestión de los paquetes instalados y búsquedas
        sobre los paquetes disponibles

    Tabla 2.1. Relación de herramientas para la gestión de paquetes
    de Debian

    +---------------------------------------------------------------+
    |      paquete      |popularidad|tamaño|      descripción       |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |sistema de gestión de   |
    |dpkg               |V:905,     |6399  |paquetes de bajo nivel  |
    |                   |I:1000     |      |para Debian (basado en  |
    |                   |           |      |archivos)               |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |Front-end de APT para   |
    |apt                |V:896,     |4682  |administrar paquetes con|
    |                   |I:1000     |      |CLI: apt/apt-get/       |
    |                   |           |      |apt-cache               |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |Front-end de APT para   |
    |                   |           |      |gestionar paquetes de   |
    |aptitude           |V:34, I:172|4621  |forma interactiva con   |
    |                   |           |      |consola de pantalla     |
    |                   |           |      |completa: aptitude(8)   |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |Front-end de APT para   |
    |tasksel            |V:37, I:984|346   |instalar las tareas     |
    |                   |           |      |seleccionadas: tasksel  |
    |                   |           |      |(8)                     |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |paquete mejorado de APT,|
    |                   |V:128,     |      |para permitir la        |
    |unattended-upgrades|I:183      |317   |instalación automática  |
    |                   |           |      |de actualizaciones de   |
    |                   |           |      |seguridad               |
    |-------------------+-----------+------+------------------------|
    |                   |V:160,     |      |Centro de software para |
    |gnome-software     |I:262      |4715  |GNOME (front-end GUI    |
    |                   |           |      |APT)                    |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |gestor de paquetes      |
    |synaptic           |V:32, I:281|7788  |gráfico (interfaz de GTK|
    |                   |           |      |APT)                    |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |utilidades de APT:      |
    |apt-utils          |V:417,     |1139  |apt-extracttemplates(1),|
    |                   |I:998      |      |apt-ftparchive(1) y     |
    |                   |           |      |apt-sortpkgs(1)         |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |herramienta de          |
    |apt-listchanges    |V:400,     |563   |notificación de cambios |
    |                   |I:891      |      |en el histórico de      |
    |                   |           |      |paquetes                |
    |-------------------+-----------+------+------------------------|
    |                   |V:5.2,     |      |relación de bugs        |
    |apt-listbugs       |I:7.1      |512   |críticos después de cada|
    |                   |           |      |instalación APT         |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |utilidad APT para la    |
    |apt-file           |V:15, I:55 |89    |búsqueda de paquetes —  |
    |                   |           |      |interfaz de línea de    |
    |                   |           |      |órdenes                 |
    |-------------------+-----------+------+------------------------|
    |                   |V:0.4,     |      |relación de dependencias|
    |apt-rdepends       |I:4.5      |39    |recursivas de los       |
    |                   |           |      |paquetes                |
    +---------------------------------------------------------------+


2.1.2. Configuración de paquetes

    Estos son algunos puntos clave para la configuración de los
    paquetes en el sistema Debian.

      * For the modern Desktop environment, rebooting of the system
        after package configuration change and package upgrade is a
        good idea to ensure the system to function properly.

      * Se respeta la configuración manual del administrador del
        sistema. Dicho de otra forma, por convenio el sistema de
        configuración de paquetes no realiza configuraciones de
        manera intrusíva.

      * Cada paquete viene con su propio archivo de órdenes para su
        configuración con un interfaz de usuario estándar llamado
        debconf(7) que facilita el proceso de la instalación inicial
        del paquete.

      * Los desarrolladores de Debian lo hacen lo mejor posible para
        que tenga una experiencia de actualización perfecta a través
        de los archivos de órdenes para la configuración del paquete.

      * Las funcionalidades completas del software empaquetado están
        disponibles para el administrador del sistema. Sin embargo,
        aquellas que representan riesgos para la seguridad están
        deshabilitadas en la instalación por defecto.

      * Si manualmente activa un servicio peligroso para la
        seguridad, será el responsable de los riesgos que contenga.

      * El administrador del sistema puede realizar manualmente
        configuraciones esotéricas. Esto puede interferir con los
        programas de ayuda estándar que se utilizan para la
        configuración del sistema.

2.1.3. Precauciones principales

    Aviso

    No mezcle paquetes de diferentes fuentes. Probablemente romperá
    la consistencia entre paquetes del sistema lo que requiere un
    conocimiento de su gestión interna, como son el compilador ABI,
    versiones de bibliotecas, funcionalidades de intérpretes, etc.

    El administrador del sistema Debian newbie deberías quedarte con
    la versión stable (estable) de Debian y aplicar sólo las
    actualizaciones de seguridad. Hasta que entiendas muy bien el
    sistema Debian, deberías seguir las siguientes precauciones.

      * No incluyas testing (pruebas) o unstable (inestable) en la
        lista de fuentes.

      * No mezcles Debian estándar con otros archivos no Debian como
        Ubuntu en la lista de fuentes .

      * No crees "/etc/apt/preferences".

      * No modifiques el comportamiento predeterminado de las
        herramientas de gestión de los paquetes a través de los
        archivos de la configuración sin conocer todas sus
        repercusiones.
   
      * No instales paquetes aleatorios mediante "dpkg -i 
        random_package".

      * No instales nunca paquetes aleatorios mediante "dpkg
        --force-all -i random_package".

      * No borres ni modifiques los archivos de "/var/lib/dpkg/".

      * no sobreescribas el sistema de archivos al instalar software
        compilado directamente de su código fuente.

          + Si lo necesitas instálalos en «/usr/local» o «/opt».

    Los efectos no compatibles causados por violar las precauciones
    anteriores al sistema de gestión de paquetes de Debian pueden
    dejar tu sistema inutilizable.

    Los administradores serios del sistema Debian responsables de los
    servidores de una misión crítica deben tomar precauciones
    adicionales.

      * No instalar ningún paquete de Debian, incluyendo las
        actualizaciones de seguridad, sin probarlo con su
        configuración especifica en un entorno seguro.

          + Al final, tu como administrador del sistema, eres el
            responsable de tu sistema.

          + el largo historial de estabilidad del sistema Debian no
            es una garantía por sí misma.

2.1.4. Conviviendo con actualizaciones continuas

    Atención

    Para sus servidores de producción es recomendable la distribución
    stable (estable) con sus actualizaciones de seguridad. También es
    recomendable para los equipos de escritorio a los que quiera
    dedicar poco tiempo en su administración.

    A pesar de mis advertencias anteriores, muchos lectores de este
    documento pueden desear ejecutar las suites testing (pruebas) o
    unstable (inestable) más nuevas.

    La iluminación de las siguientes secciones salva a las personas
    de la eterna lucha kármica de actualizar el infierno y las dejan
    llegar al nirvana de Debian.

    Esta lista está destinada al entorno de escritorio 
    self-administered.

      * Utilice la suite testing ya que es prácticamente la versión
        rolling -continua- gestionada automáticamente por la
        infraestructura de control de calidad del archivo de Debian,
        como la integración continua de Debian, la prácticas de carga
        solo de fuente, y el seguimiento de transición de biblioteca.
        Los paquetes de la suite testing se actualizan con la
        suficiente frecuencia para ofrecer las funciones más
        recientes.

      * Establece el nombre de código correspondiente al conjunto
        testing ("forky" durante el ciclo de publicación
        trixie-as-stable) en la lista de las fuentes.

      * Actualiza manualmente este nombre en clave en la lista de
        fuentes al nuevo solo después de evaluar la situación durante
        aproximadamente un mes después del lanzamiento de la suite
        principal. La lista de los correos de los usuarios y los
        desarrolladores de Debian también es una buena fuente de
        información para esto.

    No se recomienda el uso de la suite inestable. La suite inestable
    es buena para depurar paquetes como desarrollador pero tiende a
    exponerle a riesgos innecesarios para el uso normal del
    escritorio. Aunque la suite inestable del sistema Debian parece
    muy estable la mayoría de las veces, ha habido algunos problemas
    con paquetes y algunos de ellos no eran tan triviales de
    resolver.

    Aquí algunas ideas de las medidas de precaución básicas para
    asegurar una recuperación rápida y fácil de los fallos en los
    paquetes Debian.

      * Make the rescue system available by following Sección 3.2,
        “Rescue system”.

      * Hacer el sistema de arranque dual instalando la suite stable
        del sistema Debian en otra partición.
   
      * Considera instalar apt-listbugs para comprobar la información
        del Sistema de seguimiento de errores de Debian (BTS) antes
        de la actualización.

      * Aprender la infraestructura del sistema de los paquetes lo
        suficiente como para solucionar un problema

    Atención
   
    Si no puede tomar ninguna de estas precauciones, probablemente no
    estés listo para las versiones de prueba e inestables.

2.1.5. Fundamentos del archivo de Debian

    Sugerencia

    Las directrices oficiales del archivo de Debian están definidas
    en el Manual de Directrices Debian, Capítulo 2 - El archivo de
    Debian.

    Examinemos el archivo de Debian desde el punto de vista de un
    usuario del sistema.

    Para un usuario del sistema, se accede al archivo de Debian
    usando el sistema APT.

    El sistema APT especifica tu fuente de datos como la lista de
    fuentes y se describe en sources.list(5).

    For the trixie system with the typical HTTP access, the source
    list is provided in the modern deb822-style in "/etc/apt/
    sources.list.d/debian.sources" as the following:

    Types: deb deb-src
    URIs: http://deb.debian.org/debian/
    Suites: trixie
    Components: main non-free-firmware contrib non-free
   
    Types: deb deb-src
    URIs: http://security.debian.org/debian-security/
    Suites: trixie-security
    Components: main non-free-firmware contrib non-free

    Sugerencia

    If the source list is provided in the older deprecated
    one-line-style in "/etc/apt/sources.list" or "/etc/apt/
    sources.list.d/*.list" files, update them with:

     $ sudo apt modernize-sources

    Los puntos clave de las listas de fuentes en estilo deb822 son
    los siguientes.

      * Sus definiciones se encuentran en los archivos "/etc/apt/
        sources.list.d/*.sources".

      * Cada bloque de líneas separado por una línea en blanco define
        la fuente de los datos para el sistema APT.

      * "Types:" define la lista de tipos como "deb" y "deb-src".
   
      * "URIs:" define la lista de URIs raíz del archivo de Debian.

      * "Suites:" define la lista de los nombres de la distribución
        utilizando el nombre de la suite o el nombre en clave.

      * "Components:" define la lista de los nombres del área de los
        archivos válidos de Debian.

    La definición para "deb-src" puede omitirse con seguridad si es
    sólo para aptitude que no accede a los metadatos relacionados con
    la fuente. Acelera las actualizaciones de los metadatos del
    archivo.

    La dirección URL puede ser "https://", "http://", "ftp://",
    "file://", ....

    Las líneas que empiezan por "#" son comentarios y se ignoran.

    Aquí, tiendo a usar el nombre de código "trixie" o "forky" en
    lugar del nombre de la suite "stable" (estable) o "testing"
    (pruebas) para evitar sorpresas cuando se publique la siguiente
    stable (estable).

    Sugerencia

    Si se utiliza "sid" en el ejemplo anterior en lugar de "trixie",
    la línea "deb: http://security.debian.org/ …" o su contenido
    equivalente en deb822 para las actualizaciones de seguridad en la
    lista de fuentes no es necesaria. Esto se debe a que no existe un
    archivo de actualizaciones de seguridad para "sid" (inestable).

    Aquí está la lista de direcciones URL de las páginas del archivo
    de Debian y el nombre de la suite o nombre del código usado en el
    fichero de configuración después de la publicación de trixie.

    Tabla 2.2. Relación de sitios de archivo de Debian

    +-------------------------------------------------------------------------------------------+
    |  URL del archivo  |  nombre del paquete   | nombre de publicación |     finalidad del     |
    |                   |                       |                       |      repositorio      |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |https://           |                       |                       |Liberación stable      |
    |deb.debian.org/    |stable                 |trixie                 |cuasiestática tras     |
    |debian/            |                       |                       |exhaustivas            |
    |                   |                       |                       |comprobaciones         |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |https://           |                       |                       |Liberación dinámica de |
    |deb.debian.org/    |testing                |forky                  |testing tras           |
    |debian/            |                       |                       |comprobaciones decentes|
    |                   |                       |                       |y cortas esperas       |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |https://           |                       |                       |Liberación dinámica    |
    |deb.debian.org/    |unstable               |sid                    |unstable tras          |
    |debian/            |                       |                       |comprobaciones mínimas |
    |                   |                       |                       |y sin esperas          |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |                   |                       |                       |Experimentos previos al|
    |https://           |                       |                       |lanzamiento por parte  |
    |deb.debian.org/    |experimental           |N/A                    |de los desarrolladores |
    |debian/            |                       |                       |(opcional, sólo para   |
    |                   |                       |                       |desarrolladores)       |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |https://           |                       |                       |Actualizaciones para la|
    |deb.debian.org/    |stable-proposed-updates|trixie-proposed-updates|próxima versión stable |
    |debian/            |                       |                       |(opcional)             |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |                   |                       |                       |Subconjunto del        |
    |                   |                       |                       |conjunto               |
    |https://           |                       |                       |stable-proposed-updates|
    |deb.debian.org/    |stable-updates         |trixie-updates         |que necesita           |
    |debian/            |                       |                       |actualizaciones        |
    |                   |                       |                       |urgentes, como los     |
    |                   |                       |                       |datos de la zona       |
    |                   |                       |                       |horaria (opcional)     |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |                   |                       |                       |Colección aleatoria de |
    |https://           |                       |                       |paquetes recompilados, |
    |deb.debian.org/    |stable-backports       |trixie-backports       |principalmente de la   |
    |debian/            |                       |                       |versión testing        |
    |                   |                       |                       |(opcional)             |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |http://            |                       |                       |Actualizaciones de     |
    |security.debian.org|stable-security        |trixie-security        |seguridad para la      |
    |/debian-security/  |                       |                       |versión stable         |
    |                   |                       |                       |(importante)           |
    |-------------------+-----------------------+-----------------------+-----------------------|
    |http://            |                       |                       |El equipo de seguridad |
    |security.debian.org|testing-security       |forky-security         |no lo utiliza ni lo    |
    |/debian-security/  |                       |                       |apoya activamente      |
    +-------------------------------------------------------------------------------------------+


    Atención

    Sólo la versión stable (estable) pura con actualizaciones de
    seguridad proporciona la mejor estabilidad. Ejecutar
    principalmente la versión stable (estable) mezclada con algunos
    paquetes de testing (pruebas) o unstable (inestable) es más
    arriesgado que ejecutar la versión unstable (inestable) pura por
    desajuste de versiones de librerías, etc. Si realmente necesita
    la última versión de algunos programas de la versión stable
    (estable), utilice los paquetes de los servicios stable-updates y
    backports (consulte Sección 2.7.4, “Actualizaciones y Backports”
    ). Estos servicios deben utilizarse con especial cuidado.

    Atención

    Por defecto debería tener únicamente una de las distribuciones
    stable (estable), testing (pruebas) o unstable (inestable) en la
    línea «deb». Si se tiene en línea «deb» una combinación de las
    distribuciones stable (estable), testing (pruebas) e unstable
    (inestable) los programas APT son más lentos y sólo la última
    distribución es útil. El uso de múltiples distribuciones requiere
    utilizar el archivo «/etc/apt/preferences» con un fin específico
    (consulte Sección 2.7.7, “Ajustar la versión candidata con 
    apt-pinning”).

    Sugerencia

    Para el sistema Debian con la suite stable (estable), es una
    buena idea incluir el contenido con "http://security.debian.org/"
    en la lista de las fuentes para habilitar las actualizaciones de
    seguridad como en el ejemplo anterior.

    Nota

    El equipo de seguridad de Debian ha corregido los errores de
    seguridad del archivo estable . Esta actividad ha sido bastante
    rigurosa y confiable. Los errores del archivo de pruebas pueden
    ser corregidos por el equipo de seguridad de pruebas de Debian.
    Por varias razones , esta actividad no es tan rigurosa como
    aquella para estable y es posible que deba esperar la migración
    de los paquetes inestables corregidos al archivo de prueba . Los
    errores del archivo inestable son corregidos por el mantenedor
    individual. Los paquetes inestables mantenidos activamente suelen
    estar en bastante buen estado gracias a las últimas correcciones
    de seguridad ascendentes. Consulte las Preguntas frecuentes sobre
    seguridad de Debian para saber cómo Debian maneja los errores de
    seguridad.

    Tabla 2.3. Relación de áreas de archivo Debian

    +---------------------------------------------------------------+
    |                 | número |                                    |
    |      área       |   de   | criterio de componente del paquete |
    |                 |paquetes|                                    |
    |-----------------+--------+------------------------------------|
    |main             |75525   |Compatible con DFSG y sin           |
    |                 |        |dependencia de non-free             |
    |-----------------+--------+------------------------------------|
    |                 |        |no compatible con DFSG, firmware    |
    |non-free-firmware|74      |necesario para una experiencia      |
    |                 |        |razonable de la instalación del     |
    |                 |        |sistema                             |
    |-----------------+--------+------------------------------------|
    |contrib          |360     |cumplen con DFSG pero con           |
    |                 |        |dependencias con non-free           |
    |-----------------+--------+------------------------------------|
    |                 |        |No cumple con las Directrices de    |
    |non-free         |1044    |software libre de Debian (DFSG) y no|
    |                 |        |está en non-free-firmware           |
    +---------------------------------------------------------------+


    El número de paquetes que se indica es para la arquitectura
    amd64. El área main proporciona el sistema Debian (ver
    Sección 2.1.6, “Debian es 100% software libre”).

    Al navegar por cada URL junto a dists o pool conocerá mejor la
    organización del archivo de Debian.

    Se puede nombrar una distribución de dos formas, por la
    distribución o nombre de publicación. La palabra distribución se
    usa alternativamente como sinónimo de la suite en muchas
    documentaciones. La relación entre la suite y el nombre en clave
    se puede resumir de la siguiente manera.

    Tabla 2.4. Relación entre los nombres de publicación y
    distribución

    +---------------------------------------------------------------+
    |                |distribución =|distribución =| distribución = |
    | Temporización  |    stable    |   testing    |    unstable    |
    |                |  (estable)   |   (prueba)   |  (inestable)   |
    |----------------+--------------+--------------+----------------|
    |después de la   |nombre de     |nombre de     |nombre de       |
    |publicación de  |publicación = |publicación = |publicación =   |
    |trixie          |trixie        |forky         |sid             |
    |----------------+--------------+--------------+----------------|
    |después de la   |nombre de     |nombre de     |nombre de       |
    |publicación de  |publicación = |publicación = |publicación =   |
    |forky           |forky         |duke          |sid             |
    +---------------------------------------------------------------+


    La historia de los nombres de publicación se cuenta en ¿Debian
    FAQ: 6.2.1 Qué otros nombres clave se han usado en el pasado?

    En la terminología de archivo de Debian de forma estricta, se usa
    la palabra «sección» en concreto para la categorización de
    paquetes por el tipo de aplicación. (Sin embargo las palabras
    «sección principal» algunas veces se usa para describir el área
    del archivo Debian llamado «main».)

    Cada vez que un desarrollador Debian (DD) realiza una nueva
    entrega a la distribución «inestable» (a través del procesamiento
    de entrada), se le pide que se asegure que la entrega de paquetes
    sea compatible con el último conjunto de paquetes de la
    distribución «inestable».

    Si un desarrollador de Debian con su actualización rompe la
    compatibilidad de alguna biblioteca importante de forma
    intencionada etc, normalmente se anuncia en la lista de correo de
    desarrollo (debian-devel mailing list) etc.

    Después de que un conjunto de paquetes se han movido de forma
    automática desde la distribución «inestable» a la distribución
    «en pruebas» el archivo de órdenes de mantenimiento que lo movió
    comprueba su madurez (más de 2-10 días de antigüedad), el estado
    RC de los informes de errores de los paquetes y comprueba su
    compatibilidad con el último conjunto de paquetes de la
    distribución «en pruebas». Este proceso hace que la distribución
    «en pruebas» este actualizada y se pueda utilizar.

    A través del proceso gradual de congelación de archivos dirigido
    por el equipo de lanzamiento, el archivo prueba se madura hasta
    hacerlo completamente consistente y libre de errores con algunas
    intervenciones manuales. A continuación, se crea la nueva versión
    estable asignando el nombre en clave del antiguo archivo prueba
    al nuevo archivo estable y creando el nuevo nombre en clave para
    el nuevo archivo prueba. El contenido inicial del nuevo archivo
    prueba es exactamente el mismo que el del nuevo archivo estable.

    Tanto los repositorios unstable (inestable) como los testing
    (prueba) pueden sufrir fallos temporales causados por varios
    factores.

      * Los paquetes rotos se suben al repositorio (ver unstable
        (inestable) )

      * Retrasos en la recepción de nuevos paquetes para archivar
        (principalmente para unstable (inestable))
   
      * Problemas con el tiempo de sincronización de los archivos
        (tanto para testing (pruebas) como los unstable (inestable))

      * Acciones manuales sobre el archivo como la eliminación de
        paquetes (generalmente para testing (pruebas)) etc.

    Así que si decide usar esos archivos, debe ser capaz de arreglar
    o indagar sobre este tipo de problemas.

    Atención

    Durante unos pocos meses después de una nueva versión stable, la
    mayoría de los usuarios de escritorio deberían usar el archivo
    stable con sus actualizaciones de seguridad incluso si
    normalmente usan los archivos unstable o testing. Para este
    periodo de transición, tanto los archivos unstable como los
    archivos testing no son buenos para la mayoría de la gente. Es
    difícil mantener su sistema en buenas condiciones de
    funcionamiento con el archivo unstable ya que sufre oleadas de
    actualizaciones importantes para los paquetes principales. El
    archivo testing tampoco es útil ya que contiene casi el mismo
    contenido que el archivo stable sin su soporte de seguridad
    (Debian testing-security-announce 2008-12). Después de un mes más
    o menos, los archivos unstable o testing pueden llegar a ser
    útiles si se tiene cuidado.

    Sugerencia

    Al utilizar la distribución testing «en pruebas» el problema
    causado por la eliminación de un paquete normalmente se soluciona
    temporalmente instalando el paquete correspondiente de la
    distribución unstable «inestable» que se carga para corregir el
    error.

    Ver el Manual de Directrices Debian para obtener más información
    sobre las definiciones del archivo.

      * «Secciones»

      * «Prioridades»
   
      * «Sistema base»

      * «Paquetes esenciales»

2.1.6. Debian es 100% software libre

    Debian es 100% software libre ya que:

      * Debian instala por defecto únicamente software libre para
        respetar las libertades del usuario.

      * Debian proporciona únicamente software libre en el área main.
   
      * Debian recomienda ejecutar únicamente el software libre del
        área main.

      * Ningún paquete en main depende ni recomienda paquetes en
        non-free ni non-free-firmware ni contrib.

    Alguien se pregunta si los dos hechos siguientes se contradicen
    entre sí.

      * «Debian se mantendrá 100% libre». (Primera clausula del
        Contrato Social de Debian)
   
      * Los servidores Debian alojan algunos paquetes
        non-free-firmware, non-free y contrib.

    Esto no resulta contradictorio, por lo siguiente.

      * El sistema Debian es 100% libre y sus paquetes están
        albergados en los servidores Debian en main
   
      * Los paquetes fuera del sistema Debian están alojados en los
        servidores de Debian en las áreas non-free, non-free-firmware
        y contrib.

    Se explica de forma precisa en las clausulas cuarta y quinta del
    Contrato Social de Debian:

      * Nuestra prioridad son nuestros usuarios y el software libre

          + Nos guiaremos por las necesidades de nuestros usuarios y
            de la comunidad del software libre. Sus intereses serán
            una prioridad para nosotros. Daremos soporte a las
            necesidades de nuestros usuarios para que puedan trabajar
            en muchos tipos distintos de entornos de trabajo. No
            pondremos objeciones al software no libre que vaya a
            ejecutarse sobre Debian ni cobraremos a las personas que
            quieran desarrollar o usar ese tipo de software (no
            libre). Permitiremos a otros crear distribuciones de
            valor añadido basadas en Debian sin cobrarles nada por
            ello. Es más, entregaremos un sistema integrado de alta
            calidad sin restricciones legales que pudieran prevenir
            este tipo de uso.

      * Trabajos que no siguen nuestros estándares de software libre
   
          + Reconocemos que algunos de nuestros usuarios requieren el
            uso de trabajos que no se ajustan a las Directrices de
            Software Libre de Debian. Hemos creado las áreas
            "non-free", "non-free-firmware" y "contrib" en nuestro
            archivo para estos trabajos. Los paquetes de estas áreas
            no forman parte del sistema Debian, aunque han sido
            configurados para su uso con Debian. Animamos a los
            fabricantes de CDs a que lean las licencias de los
            paquetes en estas áreas y determinen si pueden distribuir
            los paquetes en sus CDs. Así, aunque los trabajos que no
            son libres no forman parte de Debian, apoyamos su uso y
            proporcionamos infraestructura para los paquetes que no
            son libres (como nuestro sistema de seguimiento de fallos
            y listas de correo). Los medios oficiales de Debian
            pueden incluir firmware que no forma parte del sistema
            Debian para permitir el uso de Debian con hardware que
            requiera dicho firmware.

    Nota

    El texto actual del 5º término en el actual Contrato Social
    Debian 1.2 es ligeramente diferente del texto anterior. Esta
    desviación editorial es intencionada para hacer consistente este
    documento de usuario sin cambiar el contenido real del Contrato
    Social.

    Los usuarios deben ser conscientes de los riesgos de utilizar
    paquetes de las zonas non-free, non-free-firmware y contrib:

      * restricciones a la libertad con dichos paquetes

      * falta de soporte de Debian para dichos paquetes (Debian no
        puede ayudar al software propietario por no tener acceso a su
        código fuente)

      * contagio al 100% del sistema libre Debian

    Las Directrices de Software Libre Debian son los estándares del
    software libre de Debian. Debian entiende «software» en un ámbito
    amplio, incluidos los documentos, firmware, logotipos y materia
    gráfico de los paquetes. Esto hace que el estándar de software
    libre de Debian sea uno de los más estrictos.

    Los paquetes típicos non-free, non-free-firmware y contrib
    incluyen paquetes de libre distribución de los siguientes tipos:

      * Paquetes de documentación que cumplen la Licencia de
        Documentación Libre GNU con secciones fijas como las de GCC y
        Make (la mayor parte se encuentran en la secciónnon-free/
        doc.)

      * Paquetes de firmware que contienen datos binarios sin fuente
        como los listados en Sección 9.10.5, “Controladores y firware
        del hardware” como non-free-firmware. (La mayoría se
        encuentran en la sección non-free-firmware/kernel).

      * Paquetes de juegos y tipos de letra con restricciones para su
        uso comercial y/o modificación de su contenido

    Por favor, ten en cuenta que el número de paquetes non-free,
    non-free-firmware y contrib es inferior al 2% de los paquetes
    main. Permitir el acceso a las áreas non-free, non-free-firmware
    y contrib no oculta el origen de los paquetes. El uso interactivo
    a pantalla completa de aptitude(8) le proporciona visibilidad
    completa y control sobre qué paquetes se instalan y desde qué
    área lo hacen. Para mantener tu sistema tan libre como desees.

2.1.7. Dependencias de paquetes

    El sistema Debian proporciona un conjunto consistente de paquetes
    binarios a través de un mecanismo de declaración de dependencia
    binaria versionada en sus campos de archivo de control. Aquí hay
    algunas definiciones simples de ellos.

      * "Depende"

          + Declara una dependencia obligatoria y es obligatorio que
            todos los paquetes enumerados sean instalados al mismo
            tiempo o que estén instalados previamente.

      * «Predepende» (Pre-depends)

          + Son como las dependencias, con la excepción de que es
            obligatorio que estén instalados completamente con
            anterioridad.

      * «Recomendado» (Recommends)

          + Determina una dependencia fuerte, pero no obligatoria. La
            mayoría de los usuarios no querrán instalar el paquete al
            menos que todos los paquetes enumerados en este campo
            estén instalados.

      * «Sugiere»

          + Esto declara una dependencia débil. Muchos usuarios de
            este paquete pueden beneficiarse de la instalación de
            paquetes listados en este campo, aunque pueden funcionar
            bien sin ellos.

      * «Mejora» (Enhances)

          + Declara una dependencia débil como Sugerida pero va en la
            dirección contraria.

      * «Rompe» (Breaks)

          + Declara una incompatibilidad, generalmente con una
            versión concreta. La solución más común es actualizar
            todos los paquetes que se encuentran enumerados en este
            campo.

      * «Incompatibles» (Conflicts)

          + Declara su total incompatibilidad. Todos los paquetes
            enumerados en este campo deben ser eliminados para
            conseguir instalar el paquete.

      * «Sustituye» (Replaces)

          + Se declara cuando los archivos instalados por el paquete
            sustituyen a los archivos de los paquetes que se
            enumeran.

      * «Proporciona» (Provides)

          + Se declara cuando el paquete proporciona todos los
            archivos y funcionalidades de los paquetes enumerados.

    Nota

    Tener en cuenta, que lo correcto es definir «Proporciona»,
    «Incompatible» y «Sustituye» a la vez en el caso de un paquete
    virtual. Esto asegura que solo un paquete real que proporciona el
    virtual puede ser instalado a la vez.

    La definición «oficial», incluyendo la dependencia del código
    fuente, está en Manual de directrices de Debian: Capítulo 7 -
    Declaración de relaciones entre paquetes.

2.1.8. El flujo de eventos de la gestión de paquetes

    A continuación se muestra un resumen del flujo de eventos
    simplificado de la gestión de paquetes por parte de APT.

      * «Update» («apt update», «aptitude update» o «apt-get
        update»):

         1. Recupera los metadatos del archivo remoto

         2. Reconstruye y actualiza la copia local de los metadatos
            del archivo que utiliza APT

      * «Upgrade» («apt upgrade» y «apt full-upgrade» o «aptitude
        safe-upgrade» y «aptitude full-upgrade» o «apt-get upgrade» y
        «apt-get dist-upgrade»):

         1. Seleccione una versión candidata, que instala paquetes
            que suelen ser las últimas versiones disponibles
            (consulte Sección 2.7.7, “Ajustar la versión candidata
            con apt-pinning” para conocer las excepciones)

         2. Realiza la resolución de dependencias del paquete

         3. Recupera del archivo remoto los paquetes binarios que se
            han seleccionado si la versión candidata es diferente de
            la versión instalada

         4. Desempaqueta los paquetes binarios recuperados

         5. Ejecuta el archivo de órdenes preinst

         6. Instala los archivos binarios

         7. Ejecute el script postinst.

      * «Install» («apt install …», «aptitude install …» o «apt-get
        install …»):

         1. Selecciona los paquetes enumerados en la línea de comando

         2. Realiza la resolución de dependencias del paquete
   
         3. Recupera del repositorio remoto los archivos binarios que
            se han seleccionado

         4. Desempaqueta los paquetes binarios recuperados

         5. Ejecuta el archivo de órdenes preinst

         6. Instala los archivos binarios

         7. Ejecute el script postinst.

      * «Remove» («apt remove …», «aptitude remove …» o «apt-get
        remove …»):

         1. Selecciona los paquetes enumerados en la línea de comando

         2. Realiza la resolución de dependencias del paquete

         3. Ejecuta el archivo de órdenes prerm

         4. Elimina los archivos instalados excepto los archivos de
            configuración

         5. Ejecuta el archivo de órdenes postrm

      * «Purge» («apt purge …», «aptitude purge …» o «apt-get purge
        …»):

         1. Selecciona los paquetes enumerados en la línea de comando

         2. Realiza la resolución de dependencias del paquete

         3. Ejecuta el archivo de órdenes prerm

         4. Elimina los archivos instalados incluidos los archivos de
            configuración

         5. Ejecuta el archivo de órdenes postrm

    Aquí, se han omitido de forma intencionada los detalles técnicos
    por el bien del panorama general.

2.1.9. Soluciones a problemas básicos en la gestión de paquetes

    Se debe leer la excelente documentación oficial. El primer
    documento a leer es el específico de Debian "/usr/share/doc/
    package_name/README.Debian". También otra documentación en "/usr/
    share/doc/package_name/". Si se configura el shell en
    Sección 1.4.2, “Personalización de bash”, ingresar los siguientes
    comandos.

    $ cd package_name
    $ pager README.Debian
    $ mc

    Para obtener información especifica puede que necesite instalar
    el paquete de documentación correspondiente con el sufijo «-doc».

    Si tiene problemas con un paquete concreto, asegúrese de
    comprobar primero el sistema de seguimiento de errores Debian
    (BTS).

    Tabla 2.5. Relación de los principales sitios web para resolver
    problemas de un paquete concreto

    +---------------------------------------------------------------+
    |            sitio web             |           orden            |
    |----------------------------------+----------------------------|
    |Página principal de el sistema de |sensible-browser "https://  |
    |seguimiento de errores Debian     |bugs.debian.org/"           |
    |(BTS)                             |                            |
    |----------------------------------+----------------------------|
    |El informe de errores con el      |sensible-browser "https://  |
    |nombre de un paquete              |bugs.debian.org/package_name|
    |                                  |"                           |
    |----------------------------------+----------------------------|
    |El informe del error, si se conoce|sensible-browser "https://  |
    |su número de error                |bugs.debian.org/bug_number" |
    +---------------------------------------------------------------+


    Búsqueda en Google incluyendo alguno de los siguientes criterios
    de búsqueda «site:debian.org», «site:wiki.debian.org»,
    «site:lists.debian.org», etc.

    Cuando presente un informe de error, por favor utilice la orden
    reportbug(1).

2.1.10. Como seleccionar paquetes Debian

    Cuando encuentre más de 2 paquetes similares y se pregunte cuál
    instalar sin el esfuerzo de "prueba y error", hay que aplicar el
    sentido común. Creo que los siguientes puntos son las
    características que debe tener el paquete preferido.

      * Esencial: si > no

      * Área: main > contrib > non-free

      * Prioridad: required > important > standard > optional > extra

      * Tareas: paquetes enumerados como tareas como «Entorno de
        escritorio«

      * Packages selected by the dependency package (e.g., gcc-15 by
        gcc)

      * Estadísticas: a mayor número de votos e instalaciones
   
      * Registro de cambios: actualizaciones regulares del
        desarrollador

      * BTS: sin errores RC (ni críticos, ni graves, ni errores
        leves)

      * BTS: atención ofrecida por el desarrollador a los informes de
        errores

      * BTS: mayor número de errores solucionados recientemente

      * BTS: menor número de errores que no sean nuevas
        funcionalidades

    Debian comenzó como un proyecto voluntario con un modelo de
    desarrollo distribuido, sus repositorios contienen muchos
    paquetes con diferentes objetivos y calidad. Se deben tomar las
    propias decisiones de qué hacer con ellos.

2.1.11. Cómo hacer frente a requisitos contradictorios

    Cualquiera que sea la suite del sistema Debian que decidas usar,
    puede que aún desees ejecutar las versiones de los programas que
    no están disponibles en esa suite. Incluso si encuentras paquetes
    de dichos programas en otras suites de Debian o en otros recursos
    no Debian, sus requisitos pueden entrar en conflicto con tu
    sistema Debian actual.

    Aunque puedes modificar el sistema de gestión de los paquetes con
    la técnica apt-pinning, etc., tal y como se describe en
    Sección 2.7.7, “Ajustar la versión candidata con apt-pinning”
    para instalar estos paquetes binarios no sincronizados, estos
    métodos de modificación sólo tienen un uso limitado, ya que
    pueden romper estos programas y tu sistema.

    Antes de instalar a la fuerza estos paquetes no sincronizados,
    deberías buscar todas las soluciones alternativas más seguras
    disponibles que sean compatibles con tu sistema Debian actual.

      * Instala estos programas utilizando los correspondientes
        paquetes binarios "sandboxed" (ver Sección 7.7, “Sandbox”).

          + Muchos programas, en su mayoría GUI, como LibreOffice y
            las aplicaciones GNOME, están disponibles como paquetes
            Flatpak, Snap, o AppImage.

      * Crea un entorno chroot o similar y ejecuta dichos programas
        en él (consulta Sección 9.11, “Sistemas virtualizados”).

          + Los comandos CLI se pueden ejecutar fácilmente bajo
            chroot compatible (ver Sección 9.11.4, “Sistemas chroot”
            ).

          + Se pueden probar fácilmente múltiples entornos de
            escritorio y completos sin reiniciar (ver Sección 9.11.5,
            “Varios sistemas de escritorio”).

      * Construye tu mismo las versiones que deseas de los paquetes
        binarios que sean compatibles con tu sistema Debian actual.

          + Se trata de una tarea no trivial (ver Sección 2.7.13,
            “Portar un paquete a un sistema estable”).

2.2. Operaciones básicas de la gestión de paquetes

    Las operaciones de gestión de paquetes basadas en repositorios en
    el sistema Debian pueden realizarse mediante muchas herramientas
    de gestión de paquetes basadas en APT disponibles en el sistema
    Debian. Aquí, explicamos tres herramientas básicas para la
    gestión de paquetes: apt, apt-get / apt-cache y aptitude.

    Para realizar las operaciones de gestión de paquetes que incluyen
    su instalación o la actualización de su metainformación
    necesitará privilegios de superusuario.

2.2.1. apt vs. apt-get / apt-cache vs. aptitude

    A pesar de que aptitude es una herramienta interactiva muy
    amigable que utilizo personalmente por defecto, debe tener en
    cuenta algunas advertencias:

      * la orden aptitude no es recomendable para actualizaciones del
        sistema entre distribuciones del sistema Debian stable
        (estable) tras la publicación de una distribución nueva .

          + Está recomendado la utilización de «apt full-upgrade» o
            «apt-get dist-upgrade». Ver el Error #411280.

      * La orden aptitude algunas veces recomienda la eliminación
        masiva de paquetes para la actualización del sistema Debian
        testing (pruebas) o unstable (inestable).
   
          + Esta situación ha aterrado a muchos administradores de
            sistema. No se asuste.

          + Parece causado principalmente por la distorsión de
            dependencias o recomendaciones de paquetes por
            metapaquetes como gnome-core.

          + Se resuelve eligiendo «Cancel pending actions» en el menú
            de órdenes de aptitude, saliendo de aptitude y utilizando
            «apt full-upgrade».

    Las órdenes apt-get y apt-cache son las herramientas más básicas
    basadas en APT para la gestión de paquetes .

      * apt-get y apt-cache ofrecen únicamente interfaz de usuario
        por línea de órdenes.

      * apt-get es más adecuado para la actualización principal del
        sistema entre distribuciones, etc.

      * apt-get tiene un motor robusto para la resolución de
        dependencias entre los paquetes.

      * apt-get necesita menos recursos hardware. Utiliza menos
        memoria y se ejecuta más rápido.

      * apt-cache tiene un sistema estándar de búsqueda que utiliza
        expresiones regulares sobre el nombre y la descripción del
        paquete.

      * apt-get y apt-cache permiten gestionar varias versiones de
        mismo paquete utilizando /etc/apt/preferences aunque es
        bastante difícil de manejar.

    La orden apt es un interfaz de alto nivel para la gestión de
    paquetes desde la línea de órdenes. Es un recubrimiento de
    apt-get, apt-cache y órdenes parecidas ideado para que las
    utilice el usuario final y mejorar por defecto algunas opciones
    de uso interactivo.

      * apt tiene una barra de progreso cuando se instalan paquetes
        mediante apt install.
   
      * por defecto apt borra los paquetes .deb descargados en la
        caché después de instalarlos con éxito

    Sugerencia

    Se recomienda la utilización de la nueva orden apt(8) para el uso
    interactivo y utilizar apt-get(8) y apt-cache(8) para los
    archivos de órdenes.

    La orden aptitude es la herramienta de gestión de paquetes basada
    en APT más flexible.

      * aptitude tiene un interfaz de usuario interactivo a pantalla
        completa.

      * aptitude también posee un interfaz de usuario por línea de
        órdenes.

      * aptitude esta más pensado para operaciones de la gestión
        diaria interactiva de paquetes como examinar los paquetes
        instalados y buscar entre los paquetes disponibles.

      * aptitude necesita más recursos hardware. Utiliza más memoria
        y es más lenta en ejecución.

      * aptitude tiene un sistema de búsqueda mejorado basado en
        expresiones regulares sobre metainformación de paquetes.

      * aptitude permite gestionar múltiples versiones de paquetes
        sin utilizar /etc/apt/preferences y es muy intuitivo.

2.2.2. Operaciones básicas de gestión de paquetes utilizando la línea
de órdenes

    Aquí están algunas operaciones básicas para la gestión de
    paquetes por medio de la línea de órdenes utilizando apt(8),
    aptitude(8) y apt-get(8) /apt-cache(8).

    Tabla 2.6. Operaciones básicas de gestión de paquetes utilizando
    la línea de órdenes apt(8), aptitude(8) y apt-get(8)/apt-cache(8)

    +---------------------------------------------------------------+
    |                  |Sintaxis de |Sintaxis de |                  |
    | Sintaxis de apt  |  aptitude  |  apt-get/  |   descripción    |
    |                  |            | apt-cache  |                  |
    |------------------+------------+------------+------------------|
    |                  |aptitude    |apt-get     |actualiza la      |
    |apt update        |update      |update      |metainformación de|
    |                  |            |            |los paquetes      |
    |------------------+------------+------------+------------------|
    |                  |            |            |instala la versión|
    |apt install foo   |aptitude    |apt-get     |candidata del     |
    |                  |install foo |install foo |paquete «foo» y   |
    |                  |            |            |sus dependencias  |
    |------------------+------------+------------+------------------|
    |                  |            |            |actualiza los     |
    |                  |            |            |paquetes ya       |
    |                  |aptitude    |apt-get     |instalados a las  |
    |apt upgrade       |safe-upgrade|upgrade     |nuevas versiones  |
    |                  |            |            |candidatas sin    |
    |                  |            |            |eliminar ningún   |
    |                  |            |            |paquete           |
    |------------------+------------+------------+------------------|
    |                  |            |            |instala nuevas    |
    |                  |            |            |versiones         |
    |                  |            |            |candidatas de     |
    |apt full-upgrade  |aptitude    |apt-get     |paquetes          |
    |                  |full-upgrade|dist-upgrade|instalados        |
    |                  |            |            |mientras elimina  |
    |                  |            |            |los paquetes si es|
    |                  |            |            |necesario         |
    |------------------+------------+------------+------------------|
    |                  |            |            |elimina el paquete|
    |apt remove foo    |aptitude    |apt-get     |«foo» sin eliminar|
    |                  |remove foo  |remove foo  |sus archivos de   |
    |                  |            |            |configuración     |
    |------------------+------------+------------+------------------|
    |                  |            |            |elimina los       |
    |                  |            |apt-get     |paquetes          |
    |apt autoremove    |N/A         |autoremove  |autoinstalados que|
    |                  |            |            |ya no son         |
    |                  |            |            |necesarios        |
    |------------------+------------+------------+------------------|
    |                  |            |            |elimina el paquete|
    |apt purge foo     |aptitude    |apt-get     |«foo» y sus       |
    |                  |purge foo   |purge foo   |archivos de       |
    |                  |            |            |configuración     |
    |------------------+------------+------------+------------------|
    |                  |            |            |limpia por        |
    |                  |            |            |completo el       |
    |apt clean         |aptitude    |apt-get     |repositorio local |
    |                  |clean       |clean       |de los archivos de|
    |                  |            |            |paquetes          |
    |                  |            |            |descargados       |
    |------------------+------------+------------+------------------|
    |                  |            |            |limpia el         |
    |                  |            |            |repositorio local |
    |apt autoclean     |aptitude    |apt-get     |de los archivos de|
    |                  |autoclean   |autoclean   |paquetes          |
    |                  |            |            |descargados que   |
    |                  |            |            |son obsoletos     |
    |------------------+------------+------------+------------------|
    |                  |            |            |muestra           |
    |apt show foo      |aptitude    |apt-cache   |información       |
    |                  |show foo    |show foo    |detallada sobre el|
    |                  |            |            |paquete «foo»     |
    |------------------+------------+------------+------------------|
    |                  |aptitude    |apt-cache   |busca paquetes que|
    |apt search regex  |search regex|search regex|concuerden con    |
    |                  |            |            |expresión_regular |
    |------------------+------------+------------+------------------|
    |                  |            |            |argumenta la razón|
    |                  |            |            |por la que el     |
    |N/A               |aptitude why|N/A         |paquete que       |
    |                  |regex       |            |concuerda con la  |
    |                  |            |            |expresión_regular |
    |                  |            |            |debe instalarse   |
    |------------------+------------+------------+------------------|
    |                  |            |            |argumenta la razón|
    |                  |aptitude    |            |por la que el     |
    |N/A               |why-not     |N/A         |paquete que       |
    |                  |regex       |            |concuerda con la  |
    |                  |            |            |expresión_regular |
    |                  |            |            |no debe instalarse|
    |------------------+------------+------------+------------------|
    |apt list          |aptitude    |apt-mark    |lista los paquetes|
    |--manual-installed|search '~i! |showmanual  |instalados        |
    |                  |~M'         |            |manualmente       |
    +---------------------------------------------------------------+


    apt / apt-get y aptitude se pueden mezclar sin más problemas.

    La orden «aptitude why expresión_regular» puede mostrar mas
    información si se utiliza «aptitude -v why expresión_regular».
    Utilizando «apt rdepends paquete» o «apt-cache rdepends paquete»
    se puede obtener información parecida.

    Cuando se ejecuta la orden aptitude en modo de línea de órdenes y
    aparece algún problema como un conflicto entre paquetes, si pulsa
    la tecla «e» como respuesta al cursor puede cambiar al modo
    interactivo a pantalla completa.

    Nota

    Aunque la orden aptitude proporciona funcionalidades sofisticadas
    como un mejor motor de resolución de dependencias de paquetes, su
    complejidad ha causado (y todavía puede causar) algunos problemas
    como el Error #411123, el Error #514930 y el Error #570377. En
    caso de duda, por favor, utilice las órdenes apt, apt-get y
    apt-cache en vez de la orden aptitude.

    Puede añadir opciones después de la orden «aptitude».

    Tabla 2.7. Opciones más importantes de la orden aptitude(8)

    +---------------------------------------------------------------+
    |opción de la|                   descripción                    |
    |   orden    |                                                  |
    |------------+--------------------------------------------------|
    |-s          |simula el resultado de la orden                   |
    |------------+--------------------------------------------------|
    |-d          |descarga únicamente pero no instala o actualiza   |
    |------------+--------------------------------------------------|
    |-D          |muestra aclaraciones breves antes de la           |
    |            |instalación o eliminación automáticos             |
    +---------------------------------------------------------------+


    Para más información consulte aptitude(8) y «aptitude user's
    manual» en «/usr/share/doc/aptitude/README».

2.2.3. Uso interactivo de aptitude

    Para la administración de paquetes interactivos, inicia aptitude
    en modo interactivo desde el indicador de shell de la consola de
    la siguiente manera.

    $ sudo aptitude -u
    Password:

    Con esto actualiza la copia local del archivo y muestra la
    relación de paquetes en un menú a pantalla completa. La
    configuración de aptitude está en «~/.aptitude/config».

    Sugerencia

    Si deseas utilizar la configuración de root en lugar de la de
    usuario, utiliza "sudo -H aptitude ..." en lugar de "sudo
    aptitude ..." en la expresión anterior.

    Sugerencia

    Aptitude automáticamente ejecuta las acciones pendientes como si
    hubiera empezado en modo interactivo. Si esto no le gusta, puede
    inicializarlo desde el menú: «Acción» → «Cancelar las acciones
    pendientes».

2.2.4. Combinaciones de teclado en aptitude

    Las pulsaciones de teclas notables para examinar el estado de los
    paquetes y establecer la "acción planificada" en ellos en este
    modo de pantalla completa son las siguientes.

    Tabla 2.8. Relación de combinaciones de teclado de aptitude

    +---------------------------------------------------------------+
    |      tecla       |                  función                   |
    |------------------+--------------------------------------------|
    |F10 o Ctrl-t      |menú                                        |
    |------------------+--------------------------------------------|
    |?                 |muestra la ayuda de las combinaciones de    |
    |                  |teclas (una relación más completa)          |
    |------------------+--------------------------------------------|
    |F10 → Ayuda →     |muestra el Manual de Usuario                |
    |Manual de usuario |                                            |
    |------------------+--------------------------------------------|
    |u                 |actualiza la información de archivo del     |
    |                  |paquete                                     |
    |------------------+--------------------------------------------|
    |+                 |marca el paquete para que se actualice o    |
    |                  |instale                                     |
    |------------------+--------------------------------------------|
    |-                 |marca el paquete para que se elimine        |
    |                  |(mantiene los archivos de configuración)    |
    |------------------+--------------------------------------------|
    |_                 |marca el paquete para purgarlo (borra los   |
    |                  |archivos de configuración)                  |
    |------------------+--------------------------------------------|
    |=                 |coloque el paquete en hold                  |
    |------------------+--------------------------------------------|
    |U                 |marca todos los paquetes actualizables      |
    |                  |(funciona como full-upgrade)                |
    |------------------+--------------------------------------------|
    |g                 |comienza la descarga y la instalación de los|
    |                  |paquetes seleccionados                      |
    |------------------+--------------------------------------------|
    |q                 |sale de la pantalla actual y guarda los     |
    |                  |cambios                                     |
    |------------------+--------------------------------------------|
    |x                 |sale de la pantalla actual sin guardar los  |
    |                  |cambios                                     |
    |------------------+--------------------------------------------|
    |Enter             |muestra la información de un paquete        |
    |------------------+--------------------------------------------|
    |C                 |muestra el registro de cambios del paquete  |
    |------------------+--------------------------------------------|
    |l                 |cambia el número de paquetes que se muestran|
    |------------------+--------------------------------------------|
    |/                 |busca el primer encaje                      |
    |------------------+--------------------------------------------|
    |\                 |repite la última búsqueda                   |
    +---------------------------------------------------------------+


    La especificación del nombre de archivo de la línea de comandos y
    el mensaje del menú después de presionar "l " y "// " toman la
    expresión regular de aptitude como se describe a continuación.
    Aptitude regex puede hacer coincidir explícitamente un nombre de
    paquete utilizando una cadena iniciada por " ~n" y seguida del
    nombre del paquete.

    Sugerencia

    Necesita pulsar «U» para hacer que todos los paquetes se
    actualicen a la versión candidata en el interfaz visual. De otra
    manera solo los paquetes seleccionados y otros que son
    dependencias de versiones de estos son actualizados a la versión
    candidata.

2.2.5. Visualización de paquetes en aptitude

    En el modo interactivo de pantalla completa de aptitude(8), se
    muestran los paquetes en la lista de paquetes como en el
    siguiente ejemplo.

    idA   libsmbclient                             -2220kB 3.0.25a-1  3.0.25a-2

    El significado de izquierda a derecha de la fila es el siguiente.

      * La bandera del «estado actual« (primera letra)

      * La bandera de la «acción planeada« (segunda letra)

      * La bandera «automática« (tercera letra)

      * El nombre del paquete

      * La variación del espacio de disco usado según la «acción
        planeada«

      * La versión actual del paquete

      * La versión candidata del paquete

    Sugerencia
   
    La lista completa de indicadores aparece en la parte inferior de
    la pantalla Ayuda que se muestra pulsando "?".

    La versión candidata se elige de acuerdo a la configuración local
    del equipo (ver apt_preferences(5) y Sección 2.7.7, “Ajustar la
    versión candidata con apt-pinning”).

    Existen diferentes formas de mostrar los paquetes en la opción de
    menú «Vistas».

    Tabla 2.9. Relación de vistas en aptitude

    +---------------------------------------------------------------+
    |     vista     |            descripción de la vista            |
    |---------------+-----------------------------------------------|
    |Package View   |ver Tabla 2.10, “La clasificación de la vista  |
    |               |de paquetes estándar” (por defecto)            |
    |---------------+-----------------------------------------------|
    |Audit          |relación de paquete que se recomiendan por     |
    |Recommendations|algún paquete marcado para instalación pero sin|
    |               |instalar por el momento                        |
    |---------------+-----------------------------------------------|
    |Flat Package   |relación de paquetes sin clasificar (para usar |
    |List           |con expresiones regulares)                     |
    |---------------+-----------------------------------------------|
    |Debtags Browser|relación de paquetes clasificados de acuerdo a |
    |               |sus etiquetas Debian (debtags)                 |
    |---------------+-----------------------------------------------|
    |Source Package |lista de paquetes agrupados por paquetes fuente|
    |View           |                                               |
    +---------------------------------------------------------------+


    Nota
   
    Por favor, ¡ayúdenos mejorando el marcado de paquetes con
    debtags!

    La vista estándar «Vista de paquetes» los clasifica en cierto
    modo como dselect con algunas funcionalidades extra.

    Tabla 2.10. La clasificación de la vista de paquetes estándar

    +---------------------------------------------------------------+
    |    categoría     |          descripción de la vista           |
    |------------------+--------------------------------------------|
    |Upgradable        |la relación organizada de paquetes según    |
    |Packages          |sección → área → paquete                    |
    |------------------+--------------------------------------------|
    |New Packages      |, ,                                         |
    |------------------+--------------------------------------------|
    |Installed Packages|, ,                                         |
    |------------------+--------------------------------------------|
    |Not Installed     |, ,                                         |
    |Packages          |                                            |
    |------------------+--------------------------------------------|
    |Obsolete and      |                                            |
    |Locally Created   |, ,                                         |
    |Packages          |                                            |
    |------------------+--------------------------------------------|
    |Virtual Packages  |relación de paquetes con la misma función   |
    |------------------+--------------------------------------------|
    |                  |relación de paquetes con diferentes         |
    |Tasks             |funciones que normalmente son necesarios    |
    |                  |para una tarea                              |
    +---------------------------------------------------------------+


    Sugerencia
   
    La vista de tareas puede usarse para realizar una selección de
    paquetes para sus tareas.

2.2.6. Opciones del método de búsqueda con aptitude

    Aptitude ofrece varias opciones para la búsqueda de paquetes
    usando su fórmula de expresiones regulares.

      * Línea de órdenes del intérprete de órdenes:

          + «aptitude search 'expresión_regular_de_aptitude'» enumera
            el estado de instalación, nombre del paquete y
            descripción corta de los paquetes que encajan

          + «aptitude show 'nombre_del_paquete'» muestra la
            descripción detallada del paquete

      * Modo interactivo de pantalla completa:
   
          + "l" para limitar la vista de los paquetes a los paquetes
            coincidentes

          + «/» para buscar los paquetes que encajan

          + «\» busca hacia atrás el paquete que encaja

          + «n» para encontrar el siguiente

          + «N» para buscar el siguiente (hacia atrás)

    Sugerencia

    La cadena nombre_del_paquete se trata como el encaje exacto del
    nombre del paquete al menos que empiece explícitamente con «~»
    que la convierte en una fórmula de expresión regular.

2.2.7. La fórmula de la expresión regular de aptitude

    La fórmula de expresiones regulares de aptitud es ERE extendida
    similar a mutt (ver Sección 1.6.2, “Expresiones regulares”) y los
    significados de la coincidencia especial específica aptitude Las
    extensiones de regla son las siguientes.

    Tabla 2.11. Relación de fórmulas de expresiones regulares de aptitute

    +-------------------------------------------------------------------+
    | descripción de |                                                  |
    |   las reglas   |         fórmula de la expresión regular          |
    | extendidas de  |                                                  |
    |     encaje     |                                                  |
    |----------------+--------------------------------------------------|
    |nombre del      |                                                  |
    |paquete que     |~nregex_name                                      |
    |encaja          |                                                  |
    |----------------+--------------------------------------------------|
    |encaja en la    |~dregex_description                               |
    |descripción     |                                                  |
    |----------------+--------------------------------------------------|
    |nombre de la    |~tregex_task                                      |
    |tarea que encaja|                                                  |
    |----------------+--------------------------------------------------|
    |encaja con las  |~Gregex_debtag                                    |
    |debtag          |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con el   |~mregex_maintainer                                |
    |desarrollador   |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con la   |                                                  |
    |sección del     |~sregex_section                                   |
    |paquete         |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con la   |                                                  |
    |versión del     |~Vregex_version                                   |
    |paquete         |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con la   |~A{trixie,forky,sid}                              |
    |distribución    |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con el   |~O{debian,…}                                      |
    |origen          |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con la   |~p{extra,important,optional,required,standard}    |
    |prioridad       |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con los  |                                                  |
    |paquetes        |~E                                                |
    |esenciales      |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con      |                                                  |
    |paquetes        |~v                                                |
    |virtuales       |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con      |~N                                                |
    |nuevos paquetes |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con      |~a                                                |
    |acciones        |{install,upgrade,downgrade,remove,purge,hold,keep}|
    |pendientes      |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con      |                                                  |
    |paquetes        |~i                                                |
    |instalados      |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con      |                                                  |
    |paquetes        |                                                  |
    |marcados con A  |~M                                                |
    |-mark (paquetes |                                                  |
    |auto-instalados)|                                                  |
    |----------------+--------------------------------------------------|
    |encaja con      |                                                  |
    |paquetes        |                                                  |
    |instalados sin  |                                                  |
    |la marca A      |~i!~M                                             |
    |(paquetes       |                                                  |
    |seleccionados   |                                                  |
    |por el          |                                                  |
    |administrador)  |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con      |                                                  |
    |paquetes        |                                                  |
    |instalados y que|~U                                                |
    |se pueden       |                                                  |
    |actualizar      |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con      |                                                  |
    |paquetes        |~c                                                |
    |eliminados pero |                                                  |
    |no purgados     |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con      |                                                  |
    |paquete         |                                                  |
    |eliminados y    |~g                                                |
    |purgados o que  |                                                  |
    |se pueden       |                                                  |
    |eliminar        |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con      |                                                  |
    |paquetes que    |~b                                                |
    |declaran una    |                                                  |
    |dependencia rota|                                                  |
    |----------------+--------------------------------------------------|
    |encaja con      |                                                  |
    |paquetes que    |                                                  |
    |declaran una    |~Btype                                            |
    |dependencia rota|                                                  |
    |de un tipo      |                                                  |
    |----------------+--------------------------------------------------|
    |encaja el patrón|                                                  |
    |sobre paquetes  |~D[type:]pattern                                  |
    |que tienen una  |                                                  |
    |dependencia tipo|                                                  |
    |----------------+--------------------------------------------------|
    |encaja el patrón|                                                  |
    |con paquetes que|                                                  |
    |tienen una      |~DB[type:]pattern                                 |
    |dependencia rota|                                                  |
    |de tipo         |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con      |                                                  |
    |paquetes en los |                                                  |
    |cuales el patrón|                                                  |
    |encaja con      |~R[type:]pattern                                  |
    |paquetes que    |                                                  |
    |declaran una    |                                                  |
    |dependencia tipo|                                                  |
    |----------------+--------------------------------------------------|
    |coinciden con   |                                                  |
    |paquetes a los  |                                                  |
    |que el paquete  |                                                  |
    |coincidente     |~RB[type:]pattern                                 |
    |patrón declara  |                                                  |
    |dependencia rota|                                                  |
    |tipo            |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con los  |                                                  |
    |paquetes con los|                                                  |
    |que los paquetes|~R~i                                              |
    |instalados      |                                                  |
    |tienen          |                                                  |
    |dependencias    |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con los  |                                                  |
    |paquetes que no |                                                  |
    |dependen de     |!~R~i                                             |
    |ningún paquete  |                                                  |
    |instalado       |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con los  |                                                  |
    |paquete que     |                                                  |
    |dependen o son  |~R~i|~Rrecommends:~i                              |
    |recomendados por|                                                  |
    |otros paquetes  |                                                  |
    |instalados      |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con los  |                                                  |
    |paquetes según  |                                                  |
    |el patrón       |~S filter pattern                                 |
    |filtrados por la|                                                  |
    |versión         |                                                  |
    |----------------+--------------------------------------------------|
    |encaja con todos|                                                  |
    |los paquetes    |~T                                                |
    |(verdad)        |                                                  |
    |----------------+--------------------------------------------------|
    |no encaja con   |                                                  |
    |ningún paquete  |~F                                                |
    |(falso)         |                                                  |
    +-------------------------------------------------------------------+


      * La parte regex es la misma ERE que la utilizada en las
        típicas herramientas de texto tipo Unix utilizando "^", ".
        *", "$" etc. como en egrep(1), awk(1) y perl(1).

      * La dependencia tipo es una de (depende, predepende,
        recomienda, sugiere, entra en conflicto, reemplaza,
        proporciona) especificando la interrelación del paquete.

      * El tipo de dependencia por defecto es «depends«.

    Sugerencia
   
    Cuando el patrón_de_la_expresión_regular es la cadena «null«,
    coloca inmediatamente después de la orden «~T».

    Aquí hay algunos atajos.

      * «~Pterm» == «~Dprovides:term»

      * «~Ctérmino» == «~Dconflicts:término»

      * «…~W término» == «(…|término)»

    Los usuarios familiarizados con mutt se adaptan rápidamente, ya
    que mutt fue la inspiración para la sintaxis de las expresiones.
    Consulte "BÚSQUEDA, LIMITACIÓN Y EXPRESIONES" en el "Manual del
    usuario" "/usr/share/doc/aptitude/README.".

    Nota

    Con la versión de lenny de aptitude(8), la nueva sintaxis en
    formato largo como «?broken» se puede usar de forma equivalente
    para el uso de expresiones regulares en lugar de la anterior 
    formato corto «~b». Ahora se considera el carácter de espacio « »
    como uno de los caracteres de finalización de la expresión
    regular al igual que la tilde «~». Ver el «Manual de Usuario«
    para la nueva sintaxis de formato largo.

2.2.8. Resolución de dependencias en aptitude

    La selección de un paquete con aptitude no marca únicamente los
    paquetes definidos en su relación de «dependencias:» sino también
    aquellos en la relación de «Recomendados:» si la opción «F10 →
    Options → Preferences → Dependency handling« esta configurada de
    esa manera. Estos paquetes instalados de forma automática se
    eliminan de forma automatizada por aptitude si no se van a
    necesitar en el futuro.

    La bandera que controla la "autoinstalación" del comando aptitude
    también puede manipularse utilizando el comando apt-mark(8) del
    paquete apt.

2.2.9. Registro de la actividad de los paquetes

    Puede comprobar el historial de actividad del paquete en los
    archivos de registro.

    Tabla 2.12. Los archivos de registro de acciones sobre paquetes

    +---------------------------------------------------------------+
    |   archivo   |                    contenido                    |
    |-------------+-------------------------------------------------|
    |/var/log/    |Registra la actividad a nivel de dpkg para todas |
    |dpkg.log     |las acciones sobre paquetes                      |
    |-------------+-------------------------------------------------|
    |/var/log/apt/|Registro de acciones genéricas APT               |
    |term.log     |                                                 |
    |-------------+-------------------------------------------------|
    |/var/log/    |Registro de acciones de la orden aptitude        |
    |aptitude     |                                                 |
    +---------------------------------------------------------------+


    En realidad, no es fácil conseguir una comprensión rápida de
    estos registros. La manera más fácil se explica en Sección 9.3.9,
    “Guardando cambios en los archivos de configuración”.

2.3. Ejemplos de operaciones con aptitude

    A continuación se muestran algunos ejemplos de aptitude(8) en
    acción.

2.3.1. Buscando paquetes interesantes

    Se pueden buscar los paquetes que cumplan sus requisitos con
    aptitude bien en base a la descripción del paquete o con la
    relación de «Tareas«.

2.3.2. Enumera los paquetes cuyos nombres encajan con la expresión
regular

    Las órdenes siguientes enumeran los paquetes cuyos nombres
    encajan con la expresión regular.

    $ aptitude search '~n(pam|nss).*ldap'
    p libnss-ldap - NSS module for using LDAP as a naming service
    p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces

    Es bastante útil para encontrar el nombre exacto de un paquete.

2.3.3. Navega por la relación de paquetes que encajan con la
expresión regular

    La expresión regular "~dipv6" en la vista "Nueva lista plana de
    paquetes" con la indicación "l", limita la vista a los paquetes
    con la descripción coincidente y permite examinar su información
    de forma interactiva.

2.3.4. Purga los paquetes eliminados definitivamente

    Se pueden borrar todos los archivos de configuración de los
    paquetes eliminados.

    Compruebe los resultados del siguiente comando.

    # aptitude search '~c'

    Si estás seguro de que los paquetes enumerados deben eliminarse
    por completo, ejecuta el siguiente comando.

    # aptitude purge '~c'

    Puede hacer lo mismo en modo interactivo para tener un control
    más detallado.

    En la «Nueva Vista de Paquetes«, puede añadir una expresión
    regular a «~c» con el cursor «|». Esto limita los paquetes que se
    visualizan a únicamente los que encajan con la expresión regular,
    esto es, «eliminado pero no purgado«. Todos estos paquetes que
    encajan con la expresión regular se mostrarán al presionar «[» en
    la cabecera de más alto nivel.

    Entonces, pulse «_» en la cabecera de mayor nivel como «Paquetes
    no instalados«. Solo los paquetes que encajan con el patrón de la
    expresión regular bajo dicho encabezado se marcarán para ser
    purgados. Usted puede no incluir algunos paquetes de la purga
    presionando «=» de forma manual sobre cada uno de ellos.

    Esta técnica es bastante útil y funciona para muchas teclas de
    órdenes.

2.3.5. Estado de instalación ordenado de forma automática/manual

    A continuación mostraremos como mantenemos en orden el estado de
    instalación de los paquetes (después de realizar instalaciones
    sin usar aptitude etc.).

     1. Lance aptitude en modo interactivo como «root«.

     2. Pulse «u», «U», «f» y «g» para actualizar la relación de
        paquetes y los paquetes.

     3. Pulse «l» para acceder a la pantalla de los paquetes
        limitandolos a «~i(~R~i|~Rrecommends:~i)» y pulse «M» sobre
        «Paquetes I» como auto instalados.

     4. Pulse «l» para acceder a la pantalla de paquetes limitados
        como «~prequired|~pimportant|~pstandard|~E» y pulse «m» sobre
        «Paquetes Instalados» como instalados de forma manual.

     5. Escribe "l" para entrar en el límite de la visualización de
        los paquetes como "~i!~M" y elimina los paquetes no
        utilizados escribiendo "-" sobre cada uno de ellos después de
        exponerlos escribiendo "[" sobre los "Paquetes instalados".
   
     6. Pulse «|», para entrar en la pantalla de paquetes limitada
        por «~i»; entonces pulse «m» sobre Tareas», para marcar
        aquellos paquetes instalados manualmente.

     7. Salir de aptitude.

     8. Ejecute «apt-get -s autoremove|less» como superusuario para
        comprobar lo que no usa.

     9. Reinicie aptitude en modo interactivo y marque los paquetes
        que necesite con «m».

    10. Volver a ejecutar «apt-get -s autoremove|less» como
        superusuario para volver a comprobar que solo ha ELIMINADO
        los paquetes que deseaba.

    11. Ejecute «apt-get autoremove|less» como superusuario para
        eliminar los paquetes sin uso.

    La acción «m» sobre «Tasks» es opcional y se usa para evitar la
    situación de eliminar paquetes de forma masiva en el futuro.

2.3.6. Actualización mayor del sistema

    Nota

    Cuando se cambia a una nueva distribución etc, se debe considerar
    implantar una instalación limpia del nuevo sistema incluso cuando
    Debian es actualizable como se describe a continuación.
    Proporciona la oportunidad de eliminar la basura almacenada y
    acceder a las mejores combinaciones de las últimas versiones de
    los paquetes. Sin dudarlo, debería realizar una copia de respaldo
    completa del sistema a un lugar seguro (ver Sección 10.2,
    “Respaldo y recuperación”) antes de hacerlo. Nosotros
    recomendamos crear un arranque dual en una partición diferente
    para realizar una transición suave.

    Puedes realizar una actualización de todo el sistema a una
    versión más reciente cambiando el contenido de la lista de
    fuentes apuntando a una nueva versión y ejecutando el comando
    "apt update; apt dist-upgrade".

    Para actualizar de stable (estable) a testing (pruebas) o
    unstable (inestable) durante el ciclo de publicación de
    trixie-como-estable, debes sustituir "trixie " en la lista de
    fuentes por ejemplo de Sección 2.1.5, “Fundamentos del archivo de
    Debian” con "forky" o "sid".

    De hecho, se puede encontrar con algunas complicaciones debido a
    alguna transición entre paquetes, la mayor parte debido a
    dependencias. Cuanto mayores es la actualización, más problemas
    importantes se puede encontrar. Para la transición desde una
    distribución antigua de stable (estable) a la nueva stable
    (estable) después de su publicación, puede leer las nuevas
    «Release Notes« y seguir el procedimiento concreto que se
    describe para minimizar los problemas.

    Cuando decide migrar de stable (estable) a testing (pruebas)
    después de una publicación formal, no existen «Release Notes« de
    ayuda. La diferencia entre stable (estable) y testing (pruebas)
    puede ser bastante mayor después de la liberación de una nueva
    distribución stable (estable) y la actualización se puede
    convertir en una situación complicada.

    Debería ser precavido cuando realiza un actualización completa y
    consultar la información actualizada sobre ello y usar el sentido
    común.

     1. Lea las anterior «Release Notes«.

     2. Realice una copia de respaldo (o de seguridad) completa
        (especialmente los datos y las configuraciones).

     3. Disponga de un medio alternativo de arranque por si falla el
        cargador de arranque.

     4. Informe con anterioridad y de forma correcta a los usuarios.

     5. Registre las operaciones de la actualización con script(1).

     6. Para evitar su eliminación marque los paquetes que lo
        requieran como «sin marcado automático» (unmarkauto), p. ej.,
        «aptitude unmarkauto vim».

     7. Minimize los paquetes instalados con el de minimizar la
        posibilidad de conflictos, p. ej., elimine los paquetes de la
        tarea «Escritorio«.

     8. Elimina el archivo "/etc/apt/preferences" (desactiva 
        apt-pinning).

     9. Realice actualizaciones siguiendo los pasos de forma sensata:
        oldstable (vieja_estable) → stable (estable) → testing
        (pruebas) → unstable (inestable).

    10. Actualiza la lista de fuentes para que apunte sólo al nuevo
        archivo y ejecuta "aptitude update".

    11. Instale, opcionalmente, primero los nuevos paquetes
        fundamentales , p. ej., «aptitude install perl».

    12. Ejecute la orden «apt-get -s dist-upgrade» para comprobar su
        efecto.

    13. Finalmente , ejecute la orden «apt-get dist-upgrade».

    Atención
   
    No es aconsejable omitir la distribución principal de Debian, la
    stable (estable), cuando se actualiza entre distribuciones.

    Atención

    En «Release Notes« anteriores, GCC, el núcleo de Linux ,
    initrd-tools, Glibc, Perl, las herramientas APT, etc. han
    necesitado una atención especial para la actualización mayor del
    sistema.

    Atención

    "Release Notes" may not cover all possible cases. If you change
    low level configurations, your next upgrade may fail badly as
    "... segfault after upgrade ...".

    Para actualizar de forma diaria la versión unstable, ver
    Sección 2.4.3, “Protección frente a problemas con paquetes”.

2.4. Operaciones avanzadas de gestión de paquetes

2.4.1. Operaciones avanzadas de gestión de paquetes desde la línea de
órdenes

    A continuación puede encontrar otras operaciones de gestión de
    paquetes para las cuales aptitude es demasiada abstracta o no
    posee la funcionalidad que se necesita.

    Tabla 2.13. Relación de operaciones avanzadas con paquetes

    +---------------------------------------------------------------+
    |                    orden                    |     acción      |
    |---------------------------------------------+-----------------|
    |                                             |enumera el estado|
    |                                             |de los paquetes  |
    |COLUMNS=120 dpkg -l package_name_pattern     |instalados para  |
    |                                             |el informe de    |
    |                                             |errores          |
    |---------------------------------------------+-----------------|
    |                                             |enumera el       |
    |dpkg -L package_name                         |contenido de un  |
    |                                             |paquete instalado|
    |---------------------------------------------+-----------------|
    |                                             |relación las     |
    |dpkg -L package_name | egrep '/usr/share/man/|páginas del      |
    |man.*/.+'                                    |manual para un   |
    |                                             |paquete instalado|
    |---------------------------------------------+-----------------|
    |                                             |enumera los      |
    |                                             |paquetes         |
    |dpkg -S file_name_pattern                    |instalados que   |
    |                                             |tienen un archivo|
    |                                             |que encaja con el|
    |                                             |patrón           |
    |---------------------------------------------+-----------------|
    |                                             |enumera los      |
    |                                             |paquetes en el   |
    |apt-file search file_name_pattern            |repositorio que  |
    |                                             |encajan con el   |
    |                                             |nombre de archivo|
    |---------------------------------------------+-----------------|
    |                                             |enumera el       |
    |                                             |contenido de los |
    |apt-file list package_name_pattern           |paquetes del     |
    |                                             |repositorio que  |
    |                                             |encajan          |
    |---------------------------------------------+-----------------|
    |dpkg-reconfigure package_name                |reconfigura el   |
    |                                             |paquete dado     |
    |---------------------------------------------+-----------------|
    |                                             |reconfigura el   |
    |                                             |paquete dado     |
    |dpkg-reconfigure -plow package_name          |realizando el    |
    |                                             |mayor número de  |
    |                                             |preguntas        |
    |---------------------------------------------+-----------------|
    |                                             |reconfigura los  |
    |configure-debian                             |paquetes desde el|
    |                                             |menú de pantalla |
    |                                             |completa         |
    |---------------------------------------------+-----------------|
    |                                             |auditoría del    |
    |                                             |sistema referente|
    |dpkg --audit                                 |a paquete        |
    |                                             |instalados       |
    |                                             |parcialmente     |
    |---------------------------------------------+-----------------|
    |                                             |configura todos  |
    |dpkg --configure -a                          |los paquetes     |
    |                                             |instalados       |
    |                                             |parcialmente     |
    |---------------------------------------------+-----------------|
    |                                             |muestra la       |
    |                                             |versión, la      |
    |apt-cache policy binary_package_name         |prioridad y la   |
    |                                             |información del  |
    |                                             |repositorio de un|
    |                                             |paquete binario  |
    |---------------------------------------------+-----------------|
    |                                             |muestra la       |
    |                                             |versión          |
    |apt-cache madison package_name               |disponible y la  |
    |                                             |información del  |
    |                                             |repositorio de un|
    |                                             |paquete          |
    |---------------------------------------------+-----------------|
    |                                             |muestra la       |
    |                                             |información del  |
    |apt-cache showsrc binary_package_name        |paquete fuente   |
    |                                             |que corresponde  |
    |                                             |con el paquete   |
    |                                             |binario          |
    |---------------------------------------------+-----------------|
    |                                             |instala los      |
    |                                             |paquetes         |
    |apt-get build-dep package_name               |requeridos para  |
    |                                             |construir el     |
    |                                             |paquete          |
    |---------------------------------------------+-----------------|
    |                                             |instala los      |
    |                                             |paquetes         |
    |aptitude build-dep package_name              |requeridos para  |
    |                                             |construir el     |
    |                                             |paquete          |
    |---------------------------------------------+-----------------|
    |                                             |descarga la      |
    |apt-get source package_name                  |fuente (desde el |
    |                                             |repositorio      |
    |                                             |estándar)        |
    |---------------------------------------------+-----------------|
    |                                             |descarga el      |
    |dget URL for dsc file                        |código del       |
    |                                             |paquete (desde   |
    |                                             |otro repositorio)|
    |---------------------------------------------+-----------------|
    |                                             |construye el     |
    |                                             |árbol de las     |
    |                                             |fuentes para un  |
    |dpkg-source -x package_name_version-         |conjunto de      |
    |debian.revision.dsc                          |paquetes fuente  |
    |                                             |(«orig.tar.gz» y |
    |                                             |«debian.tar.gz»/ |
    |                                             |«*.diff.gz»)     |
    |---------------------------------------------+-----------------|
    |                                             |construye el/los |
    |debuild binary                               |paquete(s) desde |
    |                                             |un árbol de      |
    |                                             |fuentes locales  |
    |---------------------------------------------+-----------------|
    |                                             |construye el     |
    |                                             |paquete del      |
    |make-kpkg kernel_image                       |núcleo desde el  |
    |                                             |árbol fuente del |
    |                                             |kernel           |
    |---------------------------------------------+-----------------|
    |                                             |construye el     |
    |                                             |paquete del      |
    |                                             |núcleo desde el  |
    |make-kpkg --initrd kernel_image              |árbol fuente de  |
    |                                             |este con         |
    |                                             |initramfs        |
    |                                             |activado         |
    |---------------------------------------------+-----------------|
    |dpkg -i package_name_version-debian.revision_|instala un       |
    |arch.deb                                     |paquete local en |
    |                                             |el sistema       |
    |---------------------------------------------+-----------------|
    |                                             |instala un       |
    |                                             |paquete local en |
    |                                             |el sistema y     |
    |apt install /path/to/package_filename.deb    |trata de resolver|
    |                                             |de forma         |
    |                                             |automática sus   |
    |                                             |dependencias     |
    |---------------------------------------------+-----------------|
    |                                             |instala el(los)  |
    |debi package_name_version-debian.revision_   |paquete(s)       |
    |arch.dsc                                     |locales en el    |
    |                                             |sistema          |
    |---------------------------------------------+-----------------|
    |                                             |guardar          |
    |                                             |información de   |
    |dpkg --get-selections '*' >selection.txt     |estado de        |
    |                                             |selección de     |
    |                                             |nivel de paquete |
    |                                             |dpkg             |
    |---------------------------------------------+-----------------|
    |                                             |asigna la        |
    |                                             |información de   |
    |dpkg --set-selections <selection.txt         |estado de        |
    |                                             |selección de     |
    |                                             |nivel del paquete|
    |                                             |dpkg             |
    |---------------------------------------------+-----------------|
    |                                             |establecer el    |
    |                                             |estado de        |
    |                                             |selección del    |
    |echo package_name hold | dpkg                |paquete a nivel  |
    |--set-selections                             |dpkg para un     |
    |                                             |paquete hold     |
    |                                             |(equivalente a   |
    |                                             |"aptitude hold   |
    |                                             |package_name")   |
    +---------------------------------------------------------------+


    Nota

    Para paquetes que sean multi-arch, puede necesitar especificar el
    nombre de la arquitectura para algunas órdenes. Por ejemplo, use
    «dpkg -L libglib2.0-0:amd64» para enumerar el contenido del
    paquete libglib2.0-0 para la arquitectura amd64.

    Atención

    Las herramientas de bajo nivel como «dpkg -i …» y «debi …» deben
    usarse con cuidado por el administrador del sistema. No tienen en
    cuenta de forma automática las dependencias entre paquetes. La
    opción de la línea de órdenes «--force-all» y parecidas (ver dpkg
    (1)) están hechas para que las usen únicamente usuarios expertos.
    Usarlas sin entender plenamente sus consecuencias puede corromper
    el sistema entero.

    Ten en cuenta lo siguiente.

      * Todas las órdenes de configuración e instalación necesitan
        ser ejecutadas por el superusuario.

      * A diferencia de aptitude que usa expresiones regulares (ver
        Sección 1.6.2, “Expresiones regulares”), otras órdenes para
        la gestión de paquetes usan patrones como el intérprete de
        órdenes glob (ver Sección 1.5.6, “Expansión de un patrón en
        el intérprete de órdenes”).

      * apt-file(1) que está en el paquete apt-file necesita ejecutar
        previamente «apt-file update».

      * configure-debian(8) que está en el paquete configure-debian
        usa como su motor dpkg-reconfigure(8).

      * dpkg-reconfigure(8) ejecuta los archivos de órdenes de los
        paquetes usando como su motordebconf(1).

      * Los comandos "apt-get build-dep", "apt-get source" y
        "apt-cache showsrc" requieren la entrada "deb-src" en la
        lista de fuentes.

      * dget(1), debuild(1) y debi(1) necesitan el paquete
        devscripts.

      * Consulte el procedimiento de (re)empaquetado mediante
        «apt-get source» en Sección 2.7.13, “Portar un paquete a un
        sistema estable”.

      * La orden make-kpkg necesita el paquete kernel-package (ver
        Sección 9.10, “El núcleo”).

      * Para el empaquetado general ver Sección 12.9, “Haciendo un
        paquete Debian”.

2.4.2. Verificación de los archivos de un paquete instalado

    La instalación de debsums permite de la verificación de los
    archivos de los paquetes instalados comparando los valores MD5sum
    en el archivo «/var/lib/dpkg/info/*.md5sums» con debsums(1). Para
    saber como funciona MD5sum verSección 10.3.5, “El resumen MD5”.

    Nota

    Ya que la base de datos de MD5sum la puede alterar un intruso,
    debsums(1) su uso como herramienta de seguridad es limitada. Solo
    es aceptable para que el administrador compruebe modificaciones
    locales o daños producidos por errores del medio de
    almacenamiento.

2.4.3. Protección frente a problemas con paquetes

    Muchos usuarios prefieren seguir las versiones testing (pruebas)
    (o unstable (inestable)) del sistema Debian por sus nuevas
    características y paquetes. Esto hace que el sistema sea más
    propenso a sufrir fallos críticos en los paquetes.

    La instalación del paquete apt-listbugs protege el sistema contra
    errores críticos comprobando estos de forma automática BTS de
    Debian cuando se actualiza mediante el sistema APT.

    La instalación del paquete apt-listchanger aporta noticias
    importantes en «NEWS.Debian» cuando se actualiza mediante el
    sistema APT.

2.4.4. Buscando metadatos en los paquetes

    Aunque al visitar la página de Debian https://packages.debian.org
    / facilita formas fáciles de buscar en los metadatos del paquete
    en estos días, veamos otras formas más tradicionales.

    Las órdenes grep-dctrl(1), grep-status(1) y grep-available(1) se
    pueden usar para buscar cualquier archivo que tenga el formato
    general de un archivo de control de paquetes de Debian.

    «dpkg -S patrón_de_archivo_de_nombres» se puede usar para buscar
    nombres de paquetes que contengan archivos que coincidan con el
    nombre instalado por dpkg. Pero pasa por alto los archivos
    creados por los scripts de mantenimiento.

    Si necesita realizar búsquedas más elaboradas de metadatos de
    dpkg , necesita ejecutar la orden «grep -e regex_pattern *» en el
    directorio «/var/lib/dpkg/info/». Esto realiza búsquedas de las
    palabras mencionadas en los archivos de órdenes de los paquetes y
    textos de preguntas de la instalación.

    Si desea realizar búsquedas recursivas en dependencias de
    paquetes , debería usar apt-rdepends(8).

2.5. Gestión interna de los paquetes Debian

    Aprendamos como funciona internamente el sistema de paquetes
    Debian. Esto puede ayudar a encontrar su propia solución en
    algunos problemas con paquetes.

2.5.1. Metadatos de archivos

    Los metadatos de archivos para cada distribución se almacenan en
    «dist/codename» en cada sitio espejo de Debian , p. ej., «http://
    deb.debian.org/debian/». La estructura del repositorio se puede
    navegar con un navegador web. Existen seis tipos de metadatos
    clave.

    Tabla 2.14. El contenido de metadatos del repositorio Debian

    +---------------------------------------------------------------+
    |       archivo       |     ubicación      |     contenido      |
    |---------------------+--------------------+--------------------|
    |                     |                    |descripción del     |
    |Release              |Alto de la          |archivo e           |
    |                     |distribución        |información de      |
    |                     |                    |integridad          |
    |---------------------+--------------------+--------------------|
    |                     |                    |archivo de firma    |
    |Release.gpg          |Alto de la          |para el archivo     |
    |                     |distribución        |firmado «Release»   |
    |                     |                    |con el archivo llave|
    |---------------------+--------------------+--------------------|
    |                     |                    |relación de todos   |
    |                     |Alto de la          |los archivos para   |
    |Contents-architecture|distribución        |todos los paquetes  |
    |                     |                    |en el repositorio   |
    |                     |                    |pertinente          |
    |---------------------+--------------------+--------------------|
    |                     |raíz de cada        |descripción de      |
    |Release              |combinación de      |archivo usado para  |
    |                     |distribución/área/  |la regla de         |
    |                     |arquitectura        |apt_preferences(5)  |
    |---------------------+--------------------+--------------------|
    |                     |raíz de cada        |concatenado de      |
    |Packages             |combinación         |debian/control para |
    |                     |distribución/área/  |paquetes binarios   |
    |                     |arquitectura-binaria|                    |
    |---------------------+--------------------+--------------------|
    |                     |raíz de cada        |concatenado de      |
    |Sources              |combinación         |debian/control para |
    |                     |distribución/área/  |paquetes fuente     |
    |                     |fuente              |                    |
    +---------------------------------------------------------------+


    En el archivo reciente, estos metadatos se almacenan como los
    archivos comprimidos y diferencial para reducir tráfico de red.

2.5.2. Archivo «Release» del nivel superior y autenticación

    Sugerencia
   
    El archivo de la raíz «Release» se usa para firmar el repositorio
    del sistema seguro APT.

    Cada versión del archivo de Debian tiene un fichero de nivel
    superior "Release", por ejemplo, "http://deb.debian.org/debian/
    dists/unstable/Release", como sigue.

    Origin: Debian
    Label: Debian
    Suite: unstable
    Codename: sid
    Date: Sat, 14 May 2011 08:20:50 UTC
    Valid-Until: Sat, 21 May 2011 08:20:50 UTC
    Architectures: alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
    Components: main contrib non-free
    Description: Debian x.y Unstable - Not Released
    MD5Sum:
     bdc8fa4b3f5e4a715dd0d56d176fc789 18876880 Contents-alpha.gz
     9469a03c94b85e010d116aeeab9614c0 19441880 Contents-amd64.gz
     3d68e206d7faa3aded660dc0996054fe 19203165 Contents-armel.gz
    ...

    Nota

    Aquí, puede encontrar la razón de ser entre la «versión« y el
    «nombre en clave« en Sección 2.1.5, “Fundamentos del archivo de
    Debian”. «Distribución« se utiliza cuando se refiere a la
    «versión« y «nombre en clave«. Todos los nombres de "áreas" de
    archivo que ofrece el archivo se enumeran en "Componentes".

    La integridad del archivo de nivel superior "Release" se verifica
    mediante una infraestructura criptográfica denominada secure apt,
    tal y como se describe en apt-secure(8).

      * El archivo de firma criptográfica «Release.gpg» se crea desde
        el auténtico archivo «Release» de la raíz y el archivo de la
        clave secreta Debian.

      * Las claves del archivo público de Debian se instalan
        localmente mediante el último paquete debian-archive-keyring.

      * El sistema secure APT verifica automáticamente la integridad
        del fichero descargado de nivel superior "Release"
        criptográficamente mediante este fichero "Release.gpg" y las
        claves públicas del archivo de Debian instaladas localmente.

      * La integridad de todos los archivos «Packages» y «Sources» se
        verifican usando valores MD5sum del archivo raíz «Release».
        La integridad de todos los archivos de paquetes se comprueban
        usando los valores de MD5sum en los archivos«Packages» and
        «Sources». Ver debsums(1) y Sección 2.4.2, “Verificación de
        los archivos de un paquete instalado”.

      * Ya que la verificación de la firma criptográfica es un
        proceso intensivo en uso de la CPU, el uso del valor MD5sum
        para cada paquete mientras se usa el archivo de firma
        criptográfica de la raíz «Release» proporciona buena
        seguridad y eficiencia (ver Sección 10.3, “Infraestructura de
        seguridad de la información”).

    Si la entrada lista de fuentes especifica la opción "firmado
    por", la integridad del archivo de nivel superior "Release"
    descargado se verifica utilizando la clave pública especificada.
    Esto es útil cuando la lista de fuentes contiene archivos que no
    son Debian.

    Sugerencia
   
    El uso del comando apt-key(8) para la gestión de claves APT está
    obsoleto.

    También puedes verificar manualmente la integridad del fichero
    "Release" con el fichero "Release.gpg" y la clave pública del
    archivo Debian publicada en ftp-master.debian.org usando gpg.

2.5.3. Archivos «Release» a nivel de archivo

    Sugerencia
   
    Los archivos “Release” a nivel de fichero se usan para la regla
    apt_preferences(5).

    Existen ficheros a nivel del archivo "Release" para todas las
    ubicaciones del archivo especificadas por la lista de fuentes,
    como "http://deb.debian.org/debian/dists/unstable/main/
    binary-amd64/Release" o "http://deb.debian.org/debian/dists/sid/
    main/binary-amd64/Release", como se indica a continuación.

    Archive: unstable
    Origin: Debian
    Label: Debian
    Component: main
    Architecture: amd64

    Atención

    Para la etiqueta «Archive:» , los nombres de distribución (stable
    (estable), testing (pruebas), unstable (inestable), …) se
    utilizan en el repositorio Debian mientras que los nombres de
    publicación («trusty», «xenial», «artful», …) se utilizan en el
    repositorio Ubuntu.

    Para algunos archivos, como experimental, y trixie-backports, que
    contienen paquetes que no deben instalarse automáticamente, hay
    una línea extra, por ejemplo, "http://deb.debian.org/debian/dists
    /experimental/main/binary-amd64/Release" como sigue.

    Archive: experimental
    Origin: Debian
    Label: Debian
    NotAutomatic: yes
    Component: main
    Architecture: amd64

    Tenga en cuenta que los repositorios normales sin «NotAutomatic:
    yes», el valor por defecto de la prioridad de instalación
    (Pin-Priority) es 500, mientras que en los repositorios
    especiales con «NotAutomatic: yes», el valor por defecto de la
    prioridad de instalación (Pin-Priority) es 1 (ver apt_preferences
    (5) y Sección 2.7.7, “Ajustar la versión candidata con 
    apt-pinning”).

2.5.4. Actualizando la meta información de los paquetes

    Cuando se usan herramientas APT, como aptitude, apt-get,
    synaptic, apt-file, auto-apt, ..., necesitamos actualizar las
    copias locales de los metadatos que contienen la información del
    archivo Debian. Estas copias locales tienen los siguientes
    nombres que corresponden a los nombres especificados para:
    distribución, área y arquitectura en la lista de fuentes (ver
    Sección 2.1.5, “Fundamentos del archivo de Debian”).

      * «/var/lib/apt/lists/deb.debian.org_debian_dists_distribution
        _Release»

      * «/var/lib/apt/lists/deb.debian.org_debian_dists_distribution
        _Release.gpg»

      * «/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area
        _binary-architecture_Packages»

      * «/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area
        _source_Sources»

      * «/var/cache/apt/apt-file/deb.debian.org_debian_dists_distribution
        _Contents-architecture.gz» (para apt-file)

    Los 4 primeros tipos de archivos son compartidos por todos los
    comandos APT pertinentes y actualizados desde la línea de
    comandos mediante "apt-get update" o "aptitude update". Los
    metadatos "Paquetes" se actualizan si se especifica "deb" en la
    lista de fuentes. Los metadatos "Fuentes" se actualizan si se
    especifica "deb-src" en la lista de fuentes.

    La metainformación de los «paquetes» y de las «fuentes» contienen
    el campo «Filename:» que apunta a la ubicación del archivo de los
    paquetes fuente y binarios. En este momento, estos paquetes se
    ubican en el subárbol del directorio «pool/» para mejorar la
    transición entre distribuciones.

    Se pueden realizar búsquedas interactivas en las copias locales
    de la metainformación de los «paquetes» mediante la orden
    aptitude. La orden de búsqueda especializada grep-dctrl(1) puede
    buscar metainformación en las copias locales de los «paquetes» y
    las «fuentes».

    La copia local de los metadatos "Contents-architecture" se puede
    actualizar con "apt-file update" y su ubicación es diferente de
    las otras 4 . Ver apt-file(1). (El auto-apt usa una ubicación
    diferente para la copia local de "Contents-architecture.gz" por
    defecto)

2.5.5. Estado del paquete para APT

    Además de acceder de forma remota a la metainformación, desde
    lenny, la herramienta APT almacena la información local referente
    al estado de la instalación en «/var/lib/apt/extended_states» el
    cual usan el resto de herramientas APT para realizar el
    seguimiento de todos los paquetes autoinstalados.

2.5.6. El estado del paquete en aptitude

    Además de acceder de forma remota a la metainformación, la orden
    aptitude almacena el estado de la instalación de forma local en «
    /var/lib/aptitude/pkgstates» y este es usado únicamente por
    aptitude.

2.5.7. Copias locales de los paquetes descargados

    Todos los paquetes descargados de forma remota mediante APT se
    almacenan en «/var/cache/apt/archives» hasta que se limpia.

    Esta política de limpieza de los archivos de la caché para
    aptitude se puede configurar en "Opciones" → "Preferencias" y se
    puede forzar por su menú "Limpiar caché de los paquetes" o
    "Limpiar los archivos obsoletos" en "Acciones".

2.5.8. Nombres de archivos de paquetes Debian

    Los archivos que son paquetes Debian tienen una estructura para
    nombrarlos determinada.

    Tabla 2.15. La estructura del nombre de los paquetes Debian

    +-----------------------------------------------------------------------------+
    |   tipo de   |                     estructura del nombre                     |
    |   paquete   |                                                               |
    |-------------+---------------------------------------------------------------|
    |El paquete   |                                                               |
    |binario      |package-name_upstream-version-debian.revision_architecture.deb |
    |(apodado deb)|                                                               |
    |-------------+---------------------------------------------------------------|
    |El paquete   |                                                               |
    |binario para |                                                               |
    |el instalador|package-name_upstream-version-debian.revision_architecture.udeb|
    |de debian    |                                                               |
    |(apodado     |                                                               |
    |udeb)        |                                                               |
    |-------------+---------------------------------------------------------------|
    |Paquete de   |                                                               |
    |código fuente|                                                               |
    |(código      |package-name_upstream-version-debian.revision.orig.tar.gz      |
    |fuente       |                                                               |
    |ascendente)  |                                                               |
    |-------------+---------------------------------------------------------------|
    |El paquete   |                                                               |
    |fuente 1.0   |package-name_upstream-version-debian.revision.diff.gz          |
    |(cambios     |                                                               |
    |Debian)      |                                                               |
    |-------------+---------------------------------------------------------------|
    |El paquete   |                                                               |
    |fuente 3.0   |                                                               |
    |(quilt)      |package-name_upstream-version-debian.revision.debian.tar.gz    |
    |(cambios de  |                                                               |
    |Debian)      |                                                               |
    |-------------+---------------------------------------------------------------|
    |El paquete   |                                                               |
    |fuente       |package-name_upstream-version-debian.revision.dsc              |
    |(descripción)|                                                               |
    +-----------------------------------------------------------------------------+


    Sugerencia
   
    Únicamente describiremos aquí el formato del paquete fuente. Para
    obtener mayor información consulte dpkg-source(1).

    Tabla 2.16. Los caracteres permitidos en cada campo del nombre
    del paquete en Debian

    +---------------------------------------------------------------+
    |nombre del campo|Caracteres disponibles (expresión |existencia |
    |                |             regular)             |           |
    |----------------+----------------------------------+-----------|
    |package-name    |[a-z0-9][-a-z0-9.+]+              |obligatorio|
    |----------------+----------------------------------+-----------|
    |epoch:          |[0-9]+:                           |opcional   |
    |----------------+----------------------------------+-----------|
    |upstream-version|[-a-zA-Z0-9.+:]+                  |obligatorio|
    |----------------+----------------------------------+-----------|
    |debian.revision |[a-zA-Z0-9.+~]+                   |opcional   |
    +---------------------------------------------------------------+


    Nota

    Se puede comprobar el orden de las versiones de los paquetes con
    la ordendpkg(1), p. ej., «dpkg --compare-versions 7.0 gt 7.~pre1
    ; echo $?» .

    Nota

    El instalador debian (d-i) usa la extensión de archivo udeb para
    sus paquetes binarios en vez de la normal deb. Un paquete udeb es
    una versión reducida de un paquete deb a la cual se le han
    eliminado los contenidos no esenciales como la documentación con
    el fin de ahorrar espacio mientras se relajan los requisitos de
    la directriz de los paquetes. Ambos paquetes, deb y udeb,
    comparten la misma estructura de paquetes. La «u» tiene el
    significado de micro.

2.5.9. La orden dpkg

    dpkg(1) es la herramienta de más bajo nivel para la gestión de
    paquetes Debian. Es una herramienta muy poderosa y por tanto es
    necesario usarla con cuidado.

    Al instalar el paquete llamado "package_name", dpkg lo procesa en
    el siguiente orden.

     1. Desempaqueta el archivo deb (equivale a «ar -x»)

     2. Ejecuta «nombre_del_paquete.preinst» usando debconf(1)
   
     3. Instala el paquete en el sistema (equivalente a "tar -x")

     4. Ejecuta «nombre_del_paquete.postinst» usando debconf(1)

    El sistema debconf proporciona una interacción de usuario
    estandarizada con compatibilidad con I18N y L10N (Capítulo 8, 
    I18N y L10N).

    Tabla 2.17. Los archivos destacados creados por dpkg

    +---------------------------------------------------------------+
    |       archivo        |       descripción del contenido        |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |relación de archivos de configuración   |
    |package_name.conffiles|(modificables por el usuario)           |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |relación de archivos y directorios      |
    |package_name.list     |instalados por el paquete               |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |relación de resumen criptográfico MD5 de|
    |package_name.md5sums  |los archivos instalados por el paquete  |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |archivos de órdenes del paquete que se  |
    |package_name.preinst  |ejecutan antes de su instalación        |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |archivo de órdenes que se ejecutan      |
    |package_name.postinst |después de la instalación del paquete   |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |archivo de órdenes del paquete que se   |
    |package_name.prerm    |ejecuta antes de la eliminación del     |
    |                      |paquete                                 |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |archivo de órdenes del paquete para ser |
    |package_name.postrm   |ejecutada después de la eliminación del |
    |                      |paquete                                 |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/info/   |archivo de órdenes para el sistema      |
    |package_name.config   |debconf                                 |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/        |la información alternativa usada por la |
    |alternatives/         |orden update-alternatives               |
    |package_name          |                                        |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/        |la información disponible para todo el  |
    |available             |paquete                                 |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/        |la información de la ubicación          |
    |diversions            |alternativa usada por dpkg(1) y asignada|
    |                      |por dpkg-divert(8)                      |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/        |la información estadística manual       |
    |statoverride          |utilizada por dpkg(1) y asignada por    |
    |                      |dpkg-statoverride(8)                    |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/status  |la información del estado de todos los  |
    |                      |paquetes                                |
    |----------------------+----------------------------------------|
    |/var/lib/dpkg/        |la copia de seguridad de la primera     |
    |status-old            |generación del archivo "var/lib/dpkg/   |
    |                      |status"                                 |
    |----------------------+----------------------------------------|
    |/var/backups/         |el segundo juego de copias de respaldo y|
    |dpkg.status*          |anteriores del archivo «var/lib/dpkg/   |
    |                      |status»                                 |
    +---------------------------------------------------------------+


    El archivo «status» además lo utilizan herramientas como dpkg(1),
    «dselect update» y «apt-get -u dselect-upgrade».

    El comando de la búsqueda especializada grep-dctrl(1) puede
    buscar las copias locales de los metadatos "status" y
    "disponible".

    Sugerencia

    En el entorno del instalador de debian, la orden udpkg se usa
    para abrir los paquetes udeb. La orden udpkg es una versión
    reducida de la orden dpkg.

2.5.10. La orden update-alternatives

    En sistema Debian existe un mecanismo para tener instalados a la
    vez varios programas que realizan la misma función sin problemas
    usando update-alternatives(1). Por ejemplo, se pueden hacer que
    la orden vi seleccione vim cuando se tienen instalados los
    paquetes tanto vim y nvi.

    $ ls -l $(type -p vi)
    lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi
    $ sudo update-alternatives --display vi
    ...
    $ sudo update-alternatives --config vi
      Selection    Command
     ----------------------------------------------
          1        /usr/bin/vim
    *+    2        /usr/bin/nvi

    Enter to keep the default[*], or type selection number: 1

    El sistema «alternatives« de Debian mantiene un conjunto de
    enlaces simbólicos en «/etc/alternatives/». El uso del proceso de
    selección se encuentran en los archivos de «/var/lib/dpkg/
    alternatives/».

2.5.11. La orden dpkg-statoverride

    El cambio de permisos (Stat overrides) que se realiza mediante la
    orden dpkg-statoverride(8) es una manera de conseguir quedpkg(1)
    use un propietario o unos permisos de uso diferentes para un 
    archivo cuando se instala un paquete. Si se especifica «--update»
    y el archivo existe , los nuevos permisos y propietario se
    cambian al instante.

    Atención

    El cambio directo del propietario o modo de un archivo propiedad
    del paquete mediante los comandos chmod o chown por parte del
    administrador del sistema se restablece en la siguiente
    actualización del paquete.

    Nota

    Hemos usado la palabra archivo en los párrafos anteriores, pero
    realmente estos cambios se pueden ser realizar sobre cualquier
    objeto del sistema de archivos que gestione dpkg, incluidos
    directorios, dispositivos, etc.

2.5.12. La orden dpkg-divert

    Las ubicaciones alternativas de un archivo que se realizan
    mediante la orden dpkg-divert(8) son una forma de obligar a dpkg
    (1) de instalar un archivo en una ubicación alternativa y no en
    su ubicación por defecto. Los archivos de órdenes de
    mantenimiento del paquete son los encargados del uso de
    dpkg-divert. Es una práctica en desuso su utilización por el
    administrador del sistema.

2.6. Recuperación de un sistema

    Cuando se ejecuta el sistema testing (pruebas) o unstable
    (inestable), se espera que el administrador recupere la situación
    de administración de paquetes rotos.

    Atención
   
    Algunos métodos descritos conllevan acciones muy peligrosas.
    ¡Está avisado!

2.6.1. Incompatibilidad con la configuración antigua del usuario

    Si un programa de GUI de escritorio experimentó inestabilidad
    después de una actualización significativa de la versión
    anterior, debe sospechar una interferencia con los archivos de
    configuración locales antiguos creados por él. Si es estable bajo
    una cuenta de usuario recién creada, se confirma esta hipótesis.
    (Este es un error de empaque y generalmente lo evita el
    empaquetador)

    Para recuperar la estabilidad, se deben mover los archivos de la
    configuración local correspondientes y reiniciar el interfaz
    gráfico. Puede que necesite leer los archivos de configuración
    antiguos para recuperar información de configuración
    posteriormente. ( No los borre antes de tiempo).

2.6.2. Errores de almacenamiento en la caché de los datos del paquete

    Los errores de la caché de datos del paquete de software pueden
    causar errores extraños, como "Error de GPG: ... no válido:
    BADSIG ..." de APT.

    Debes eliminar todos los datos almacenados en caché mediante
    "sudo rm -rf /var/lib/apt/* " y volver a intentarlo. (Si se
    utiliza apt-cacher-ng, también debes ejecutar "sudo rm -rf /var/
    cache/apt-cacher-ng/* ")

2.6.3. Recuperación con la orden dpkg

    Al ser una herramienta de muy bajo nivel, dpkg funciona sin
    conexión a la red.

    Imaginemos que el paquete foo se rompió y debe ser arreglado.

    Se pueden encontrar versiones antiguas del paquete foo libres de
    errores en las copias locales (cachés) en el directorio de caché
    de paquetes: «/var/cache/apt/archives/». (Si no, se pueden
    descargar del repositorio de https://snapshot.debian.org/ or
    copiar desde la caché de paquetes de un equipo en
    funcionamiento).

    Si puedes iniciar el sistema, puedes instalarlo con el siguiente
    comando.

    # dpkg -i /path/to/foo_old_version_arch.deb

    Si trata de instalar de esta manera un paquete y dicha
    instalación falla debido a la violación de alguna dependencia y
    es la única manera de solucionarlo, se puede ignorar la
    dependencia utilizando dpkg's «--ignore-depends»,
    «--force-depends» y otras opciones. Si lo hace así, será
    necesario un gran esfuerzo para más tarde restaurar la propia
    dependencia. Consulte para más detalles dpkg(8).

    Nota

    Si su sistema esta inoperativo por errores graves, debería
    realizar una copia de respaldo del sistema a un lugar seguro (ver
    Sección 10.2, “Respaldo y recuperación”) y realizar una
    instalación limpia. Esto le llevará menos tiempo y al final
    tendrá un mejor resultado.

    Sugerencia

    Si el sistema tiene un error menor, otra alternativa es realizar
    un actualización del sistema completo a una versión anterior
    (downgrade) como en Sección 2.7.11, “Volver al estado anterior
    por emergencia” por medio de las herramientas de alto nivel del
    sistema APT.

2.6.4. Instalación fallida debido a dependencias incumplidas

    Si fuerza la instalación de un paquete mediante "sudo dpkg -i
    ..." en un sistema sin todas las dependencias instaladas, la
    instalación del paquete fallará porque está incompleta.

    Debería instalar todos los paquetes de dependencia utilizando
    "sudo dpkg -i ..." o:

    # apt --fix-broken install

    Luego, use los siguientes comandos para configurar todos los
    paquetes parcialmente instalados.

    # dpkg --configure -a

2.6.5. Superposición de archivos por diferentes paquetes

    Los sistemas de gestión de paquetes, al nivel de archivo, como
    aptitude(8) o apt-get(1), ni siquiera tratan de instalar paquetes
    con archivos superpuestos usando las dependencias de los paquetes
    (ver Sección 2.1.7, “Dependencias de paquetes”).

    Los errores de los mantenedores de paquetes o la inconsistencia
    en el despliegue de archivos de fuentes mezclados (ver
    Sección 2.7.6, “Paquetes de origen mixto de archivos sin 
    apt-pinning”) por parte del administrador del sistema puede crear
    situaciones con una definición incorrecta de las dependencias del
    paquete. Cuando se instala un paquete que superpone archivos
    usando aptitude(8) o apt-get(1), dpkg(1) se encarga de devolver
    un error al programa que lo llamó sin sobreescribir los archivos
    existentes.

    Atención

    El uso de paquetes de terceras partes añade riesgos
    significativos para el sistema a través de los archivos de
    órdenes de mantenimiento, ya que son ejecutados con los
    privilegios de superusuario y pueden realizar cualquier cosa en
    su sistema. La orden dpkg(1) solo ofrece protección contra la
    sobreescritura en el desempaquetado.

    Se puede arreglar una instalación deficiente eliminando en primer
    lugar el paquete incompatible anterior old-package.

    $ sudo dpkg -P old-package

2.6.6. Arreglando un archivo de órdenes de un paquete roto

    Cuando una orden en un archivo de órdenes de un paquete devuelve
    un error y el archivo de órdenes finaliza con el error, el
    sistema de gestión de paquetes cancela sus acciones y finaliza
    con paquetes instalados parcialmente. Cuando un paquete contiene
    un error en los archivos de órdenes de eliminación, el paquete
    puede volverse imposible de eliminar y bastante molesto.

    Para el problema del script del paquete de "package_name", debe
    buscar los siguientes scripts del paquete.

      * «/var/lib/dpkg/info/nombre_del_paquete.preinst»

      * «/var/lib/dpkg/info/nombre_del_paquete.postinst»
   
      * «/var/lib/dpkg/info/nombre_del_paquete.prerm»

      * «/var/lib/dpkg/info/nombre_del_paquete.postrm»

    Editar el script del paquete problemático con la cuenta de
    administrador utilizando las siguientes técnicas.

      * deshabilitar la línea incorrecta anteponiéndole el carácter «
        #»
   
      * forzar a devolver el éxito agregando la línea incorrecta «||
        true»

    Luego, use los siguientes comandos para configurar todos los
    paquetes parcialmente instalados.

    # dpkg --configure -a

2.6.7. Recuperando datos de la selección de paquetes

    Si por alguna razón estuviera dañado el archivo «/var/lib/dpkg/
    status», el sistema Debian perdería la información de la
    selección de los paquetes y quedaría seriamente dañado. Busque un
    archivo antiguo «/var/lib/dpkg/status» en «/var/lib/dpkg/
    status-old» o «/var/backups/dpkg.status.*».

    Mantener «/var/backups/» en una partición separada puede ser una
    buena idea ya que dicho directorio contiene gran cantidad de
    información importante del sistema.

    Cuando los daños son serios, recomiendo realizar una
    reinstalación limpia del sistema haciendo una copia de respaldo
    del sistema anterior. Incluso si ha desaparecido todo lo que
    había en «/var/», todavía puede recuperar alguna información de
    los directorios en «/usr/share/doc/» que le ayudarán en su nueva
    instalación.

    Reinstalando un sistema mínimo (de escritorio).

    # mkdir -p /path/to/old/system

    Monte el sistema antiguo en "/path/to/old/system/".

    # cd /path/to/old/system/usr/share/doc
    # ls -1 >~/ls1.txt
    # cd /usr/share/doc
    # ls -1 >>~/ls1.txt
    # cd
    # sort ls1.txt | uniq | less

    A continuación se enumerarían los nombres de los paquetes a
    instalar. (Puede haber algunos nombres que no correspondan a
    paquetes como «texmf».)

2.7. Consejos para la gestión de paquetes

    Para simplificar, los ejemplos de lista de fuentes de esta
    sección se presentan como "/etc/apt/sources.list" en estilo de
    una línea después de la versión trixie.

2.7.1. ¿Quién sube los paquetes?

    Aunque el nombre del desarrollador que aparece en «/var/lib/dpkg/
    available» y «/usr/share/doc/package_name/changelog» aporta
    alguna información sobre «quién esta detrás del desarrollo del
    paquete«, la persona real que actualmente lo actualiza es algo
    oscuro. who-uploads(1) en el paquete devscripts identifica quién
    es el actualizador real en este momento del paquete fuente
    Debian.

2.7.2. Limitar el ancho de banda de descarga para APT

    Si deseas limitar el ancho de banda de descarga del APT a 800 Kib
    /s (= 100 KiB/s), debes establecer los parámetros de
    configuración del APT como se indica a continuación.

    APT::Acquire::http::Dl-Limit "800";

2.7.3. Descarga y actualización automática de paquetes

    El paquete apt incluye su propio archivo de órdenes cron «/etc/
    cron.daily/apt» que se encarga de la descarga automática de
    paquetes. Este archivo de órdenes se puede mejorar para la
    actualización automática de paquetes mediante la instalación del
    paquete unattended-upgrades. Se puede personalizar mediante los
    parámetros de los archivos «/etc/apt/apt.conf.d/02backup» y «/etc
    /apt/apt.conf.d/50unattended-upgrades» según se describe en «/usr
    /share/doc/unattended-upgrades/README».

    El paquete unattended-upgrades se usa principalmente para
    actualizaciones de seguridad en sistemas stables (estable). Si el
    riesgo de que las actualizaciones automáticas dañen un sistema
    stable (estable) es menor que el riesgo de que un intruso explote
    un agujero de seguridad que se solucionó con una actualización de
    seguridad, debería considerar usar la actualización automática
    con la siguiente configuración parámetros

    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Download-Upgradeable-Packages "1";
    APT::Periodic::Unattended-Upgrade "1";

    Si estás ejecutando un sistema testing (pruebas) o unstable
    (inestable), no querrás usar la actualización automática ya que
    seguramente romperá el sistema algún día. Incluso en estos casos
    de testing (pruebas) o unstable (inestable), puede que quieras
    descargar los paquetes por adelantado para ahorrar tiempo en la
    actualización interactiva con los parámetros de la configuración
    como los siguientes.

    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Download-Upgradeable-Packages "1";
    APT::Periodic::Unattended-Upgrade "0";

2.7.4. Actualizaciones y Backports

    Existen stable-updates ("trixie-updates" durante el ciclo de
    publicación de trixie-as-stable) y backports. debian.org que
    proporcionan los paquetes de actualización para stable (estable).

    Para utilizar estos archivos, enumera todos los archivos
    necesarios en el archivo "/etc/apt/sources.list" de la siguiente
    manera.

    deb http://deb.debian.org/debian/ trixie main non-free-firmware contrib non-free
    deb http://security.debian.org/debian-security trixie-security main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-updates main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-backports main non-free-firmware contrib non-free

    No es necesario asignar un valor explícito Pin-Priority en el
    archivo «/etc/apt/preferences». Cuando hay nuevos paquetes
    disponibles, la configuración por defecto proporciona las
    actualizaciones más sensatas (ver Sección 2.5.3, “Archivos
    «Release» a nivel de archivo”).

      * Todos los paquetes viejos se actualizan a los nuevos con
        origen en trixie-updates.
   
      * Solo los paquetes antiguos instalados de forma manual desde
        trixie-backports se actualizan a los nuevos de
        trixie-backports.

    En el caso de que se desee instalar manualmente un paquete
    llamado «nombre_del_paquete» con su dependencia del repositorio
    trixie-backports, se usa la siguiente orden mientras se cambia la
    distribución objetivo con la opción «-t».

    $ sudo apt-get install -t trixie-backports package-name

    Aviso

    No instales demasiados paquetes de los archivos
    backports.debian.org. Puede causar complicaciones en la
    dependencia de los paquetes. Ver Sección 2.1.11, “Cómo hacer
    frente a requisitos contradictorios” para las soluciones
    alternativas.

2.7.5. Archivos externos de los paquetes

    Aviso

    Debes tener en cuenta que el paquete externo obtiene el
    privilegio root en tu sistema. Sólo debes utilizar el archivo de
    los paquetes externos en sitios de confianza. Mira
    Sección 2.1.11, “Cómo hacer frente a requisitos contradictorios”
    para soluciones alternativas.

    Puedes usar un APT seguro con un archivo de paquetes externo
    compatible con Debian añadiéndolo a la lista de fuentes y tu
    fichero de claves del archivo en el directorio "/etc/apt/
    trusted.gpg.d/". Ver sources.list(5), apt-secure(8) y apt-key(8).

2.7.6. Paquetes de origen mixto de archivos sin apt-pinning

    Atención

    La distribución oficial de Debian no soporta la instalación de
    paquetes desde las fuentes mixtas de los archivos excepto para
    las combinaciones particulares de los archivos soportados
    oficialmente como stable (estable) con actualizaciones de
    seguridad y actualizaciones-estables.

    Aquí hay un ejemplo, en el escenario original donde solo se
    realiza un seguimiento de testing (pruebas), la operación incluye
    la nueva versión del paquete ascendente que se encuentra en
    unstable (inestable).

     1. Cambie el archivo «/etc/apt/sources.list» de forma temporal a
        una entrada única «unstable» (inestable).

     2. Ejecute «aptitude update».

     3. Ejecute «aptitude install nombre_del_paquete».

     4. Recupere la versión original de«/etc/apt/sources.list» para
        testing (pruebas).

     5. Ejecute «aptitude update».

    No crees el archivo "/etc/apt/preferences" ni necesitas
    preocuparte por apt-pinning con este enfoque manual. Pero esto es
    muy engorroso.

    Atención

    Cuando se usan archivos de múltiples fuentes, debe de asegurarse
    la compatibilidad de los paquetes por su cuenta, ya que Debian no
    lo garantiza. Si existe incompatibilidad entre paquetes, se puede
    romper el sistema. Ha de ser capaz de decidir dichos requisitos
    técnicos. El uso de archivos de múltiples fuentes desconocidas es
    una operación completamente opcional y su uso es algo que se
    desaconseja encarecidamente.

    Las reglas generales para instalar paquetes de diferentes
    archivos son las siguientes.

      * Los paquetes no binarios («Arquitectura: todas») son seguros 
        de instalar.

          + paquetes de documentación: no tienen requisitos
            especiales

          + paquetes de intérpretes: los intérpretes compatibles
            deben estar disponibles

      * Los paquetes binarios (no «arquitecturas: todas»)
        generalmente se encuentran con bloqueos y son inseguros de
        instalar.

          + compatibilidad de las versiones de biblioteca (incluida
            «libc»)

          + relacionados con la compatibilidad de versiones de los
            programas de utilidad

          + Núcleo ABI de compatibilidad

          + C++ ABI de compatibilidad

          + …

    Nota

    Para asegurar la instalación segura de un paquete, algunos
    paquetes binarios comerciales «non-free« pueden incluir
    bibliotecas enlazadas estáticamente. Se debe comprobar su
    compatibilidad ABI.

    Nota

    Excepto para evitar los paquetes rotos a corto plazo, instalar
    paquetes binarios desde archivos no Debian es generalmente una
    mala idea. Deberías buscar todas las soluciones técnicas
    alternativas más seguras que sean compatibles con tu sistema
    Debian actual (consulta Sección 2.1.11, “Cómo hacer frente a
    requisitos contradictorios”).

2.7.7. Ajustar la versión candidata con apt-pinning

    Aviso

    El uso de la técnica apt-pinning por parte de un usuario novicio
    seguramente causará problemas importantes. Debes evitar utilizar
    esta técnica excepto cuando sea absolutamente necesario.

    Sin el archivo «/etc/apt/preferences», el sistema APT elige la 
    versión candidata como la última versión disponible utilizando la
    versión de la cadena de caracteres. Este es el proceso normal y
    recomendado para el uso del sistema APT. Todas las combinaciones
    de repositorios con soporte oficial no necesitan el archivo «/etc
    /apt/preferences» ya que algunos repositorios no deberían usarse
    para realizar actualizaciones y para que el funcionamiento sea el
    correcto se marcan como NotAutomatic.

    Sugerencia

    La comparación de cadenas de caracteres de las versiones se puede
    verificar mediante, p. ej., «dpkg --compare-versions ver1.1 gt
    ver1.1~1; echo $?» (consulte dpkg(1)).

    Cuando instala paquetes de fuentes mixtas de archivos (consulte
    Sección 2.7.6, “Paquetes de origen mixto de archivos sin 
    apt-pinning” ) regularmente, puede automatizar estas operaciones
    complicadas creando el archivo " /etc/apt/preferences " con las
    entradas adecuadas y ajustando la regla de selección de paquetes
    para la versión candidata como se describe en apt_preferences
    (5). Esto se llama apt-pinning .

    Cuando uses apt-pinning, debes asegurarte de la compatibilidad de
    los paquetes ya que Debian no los garantiza. apt-pinning es una
    operación completamente opcional y su uso no te lo recomendamos.

    Los ficheros de la distribución a nivel del archivo (ver
    Sección 2.5.3, “Archivos «Release» a nivel de archivo”) se usan
    para la regla de apt_preferences(5). Así apt-pinning funciona
    sólo con el nombre "suite" para archivos Debian normales y
    archivos Debian de seguridad. (Esto es diferente de los archivos
    Ubuntu.) Por ejemplo, puede hacer "Pin: release a=unstable" pero
    no puede hacer "Pin: release a=sid" en el archivo "/etc/apt/
    preferences".

    Cuando uses archivos que no sean de Debian como parte de 
    apt-pinning, deberías comprobar para qué están pensados y también
    comprobar su credibilidad. Por ejemplo, Ubuntu y Debian no están
    pensados para mezclarse.

    Nota

    Incluso si no creas el archivo "/etc/apt/preferences", puedes
    realizar operaciones de sistema bastante complejas (ver
    Sección 2.6.3, “Recuperación con la orden dpkg” y Sección 2.7.6,
    “Paquetes de origen mixto de archivos sin apt-pinning”) sin 
    apt-pinning.

    He aquí una explicación simplificada de la técnica apt-pinning.

    El sistema APT elige el valor de la prioridad de pin
    (Pin-Priority) mayor actualizando el paquete desde la fuente
    disponible indicado en el archivo «/etc/apt/sources.list» como el
    paquete de la versión candidata. Si la «pin-priority« del paquete
    es mayor que 1000, esta restricción de la versión para la 
    actualización se descarta para permitir realizar un «downgrading«
    (consulte Sección 2.7.11, “Volver al estado anterior por
    emergencia”).

    El valor Pin-Priority de cada paquete se define por las entradas
    de «Pin-Priority« en el archivo «/etc/apt/preferences» o usa su
    valor por defecto.

    Tabla 2.18. Relación de valores Pin-Priority importantes para la
    técnica apt-pinning.

    +---------------------------------------------------------------+
    |Pin-Priority|        efectos de apt-pinning al paquete         |
    |------------+--------------------------------------------------|
    |1001        |instala el paquete incluso si esto significa una  |
    |            |desactualización del paquete                      |
    |------------+--------------------------------------------------|
    |990         |se usa como valor por defecto para la distribución|
    |            |objetivo del repositorio                          |
    |------------+--------------------------------------------------|
    |500         |se usa como valor por defecto para el repositorio |
    |            |normal                                            |
    |------------+--------------------------------------------------|
    |100         |utilizado por defecto para el archivo NotAutomatic|
    |            |y ButAutomaticUpgrades                            |
    |------------+--------------------------------------------------|
    |100         |usada para el paquete instalado                   |
    |------------+--------------------------------------------------|
    |1           |usado como el valor por defecto para repositorios |
    |            |«NotAutomatic«                                    |
    |------------+--------------------------------------------------|
    |-1          |no instalar nunca el paquete aunque se recomiende |
    +---------------------------------------------------------------+


    El archivo target release se puede establecer mediante la opción
    de la línea de comandos, por ejemplo, "apt-get install -t testing
    some-package"

    Los repositorios «NotAutomatic« y «ButAutomaticUpgrades« lo
    asigna el servidor teniendo su archivo de nivel «Release« (ver
    Sección 2.5.3, “Archivos «Release» a nivel de archivo”) contiene
    tanto «NotAutomatic: yes» como «ButAutomaticUpgrades: yes». El
    repositorio «NotAutomatic« lo asigna el servidor teniendo su
    archivo de nivel «Release« «NotAutomatic: yes».

    La apt-pinning situation del paquete de múltiples fuentes de
    archivo se muestra por "apt-cache policy package".

      * Una línea que empieza por «Package pin:» muestra la versión
        del paquete de pin si la asociación se define solo con 
        package p. ej., «Package pin:0.190».

      * No existirá la línea !Package pin:» si no se ha definido
        ninguna asociación con el paquete.

      * El valor de «Pin-Priority« asociado con el paquete se muestra
        en el lado derecho de todas las cadenas de caracteres de las
        versiones, p. ej. 0.181 700».

      * «0» se muestra a la derecha de todas las cadenas de
        caracteres de las versiones si esta definida la asociación
        con el paquete p. ej., «0.181 0».

      * Los valores de la Pin-Priority de los repositorios (definido
        como «Package: *» en el archivo «/etc/apt/preferences» ) se
        muestra a la izquierda de todas las rutas de archivo, p.ej.,
        «100 http://deb.debian.org/debian/ trixie-backports/main
        Packages».

2.7.8. Bloqueo de la instalación de paquetes recomendados
(«Recommends«)

    Aviso

    El uso de la técnica apt-pinning por parte de un usuario novicio
    seguramente causará problemas importantes. Debes evitar utilizar
    esta técnica excepto cuando sea absolutamente necesario.

    Si no deseas importar los paquetes específicos que se
    recomiendan, debes crear el archivo "/etc/apt/preferences" y
    enumerar esos paquetes explícitamente en la parte superior del
    archivo como se muestra a continuación.

    Package: package-1
    Pin: version *
    Pin-Priority: -1
   
    Package: package-2
    Pin: version *
    Pin-Priority: -1

2.7.9. Seguimiento «en pruebas» con algunos paquetes de «inestable»

    Aviso

    El uso de la técnica apt-pinning por parte de un usuario novicio
    seguramente causará problemas importantes. Debes evitar utilizar
    esta técnica excepto cuando sea absolutamente necesario.

    Este es un ejemplo de la técnica de apt-pinning para incluir
    paquetes específicos de versiones anteriores más recientes que se
    encuentran en unstable que se actualizan periódicamente durante
    el seguimiento de testing . Enumera todos los archivos necesarios
    en el archivo "/etc/apt/sources.list" de la siguiente manera.

    deb http://deb.debian.org/debian/ testing main contrib non-free
    deb http://deb.debian.org/debian/ unstable main contrib non-free
    deb http://security.debian.org/debian-security testing-security main contrib

    Establezca el archivo "/etc/apt/preferences" de la siguiente
    manera.

    Package: *
    Pin: release a=unstable
    Pin-Priority: 100

    Cuando desee instalar un paquete llamado «nombre_del_paquete» con
    sus dependencias desde el respositorio «inestable» con esta
    configuración, debe ejecutar la orden siguiente que cambia la
    distribución del repositorio con la opción «-t» (Pin-Priority of
    «inestable» con el valor 990).

    $ sudo apt-get install -t unstable package-name

    Con esta configuración la actualización de paquetes «apt-get
    upgrade» y «apt-get dist-upgrade» (o «aptitude safe-upgrade» y
    «aptitude full-upgrade») se realiza de la siguiente manera: los
    paquetes que han sido instalados desde el repositorio «en
    pruebas» usan su correspondiente repositorio «en pruebas» y los
    paquetes instalados desde la distribución «inestable» usan su
    correspondiente repositorio «inestable».

    Atención

    Tenga cuidado con eliminar la entrada «testing» del archivo «/etc
    /apt/sources.list». Sin dicha entrada «testing» en él, el sistema
    APT actualizará los paquetes usando la nueva distribución
    «inestable».

    Sugerencia

    Yo suelo editar el fichero "/etc/apt/sources.list" para comentar
    la entrada del archivo "unstable" justo después de la operación
    anterior. Esto evita el lento proceso de actualización de tener
    demasiadas entradas en el archivo "/etc/apt/sources.list" aunque
    esto impide actualizar paquetes que fueron instalados desde el
    archivo unstable usando el archivo unstable actual.

    Sugerencia

    Si se utiliza «Pin-Priority: 1 « en vez de «Pin-Priority: 100» en
    el archivo« / etc/apt/preferences «, los paquetes instalados con
    anterioridad que tienen un valor de Pin-Priority de 100 no se
    actualizarán del repositorio «inestable» incluso si se elimina la
    entrada ««en pruebas»» del archivo «/etc/apt/sources.list».

    Si deseas realizar un seguimiento de determinados paquetes en
    inestables de forma automática sin la instalación inicial de "-t
    inestables", debes crear el archivo "/etc/apt/preferences" y
    enumerar explícitamente todos esos paquetes en la parte superior
    del mismo como se indica a continuación.

    Package: package-1
    Pin: release a=unstable
    Pin-Priority: 700
   
    Package: package-2
    Pin: release a=unstable
    Pin-Priority: 700

    Esto realiza un ajuste del valor de «Pin-Priority« para cada
    paquete. Por ejemplo, con el fin de mantener la última versión de
    «inestable» de esta «Referencia de Debian« en inglés, usted debe
    tener la siguiente entrada en el archivo «/ etc/apt/preferences».

    Package: debian-reference-en
    Pin: release a=unstable
    Pin-Priority: 700
   
    Package: debian-reference-common
    Pin: release a=unstable
    Pin-Priority: 700

    Sugerencia

    Esta técnica de apt-pinning es válida incluso cuando se está
    rastreando el archivo stable (estable). Los paquetes de
    documentación han sido siempre seguros de instalar desde unstable
    (inestable) archivo en mi experiencia, hasta ahora.

2.7.10. Mantener unstable (inestable) con algunos paquetes de
experimental

    Aviso

    El uso de la técnica apt-pinning por parte de un usuario novicio
    seguramente causará problemas importantes. Debes evitar utilizar
    esta técnica excepto cuando sea absolutamente necesario.

    He aquí otro ejemplo de la técnica apt-pinning para incluir
    paquetes específicos de versiones upstream más recientes
    encontrados en experimental mientras se rastrea unstable
    (inestable). Tu enumeras todos los archivos requeridos en el "/
    etc/apt/sources.list" como el siguiente.

    deb http://deb.debian.org/debian/ unstable main contrib non-free
    deb http://deb.debian.org/debian/ experimental main contrib non-free
    deb http://security.debian.org/ testing-security main contrib

    El valor por defecto de «Pin-Priority« para el repositorio
    experimental es siempre 1(<<100) ya que es un repositorio «
    NotAutomatic« (ver Sección 2.5.3, “Archivos «Release» a nivel de
    archivo”). No es necesario asignar de forma explícita un valor
    «Pin-Priority« en el archivo «/etc/apt/preferences» para usar el
    repositorio experimental a menos que quieras mantener
    determinados paquetes de forma automática en la siguiente
    actualización.

2.7.11. Volver al estado anterior por emergencia

    Aviso

    El uso de la técnica apt-pinning por parte de un usuario novicio
    seguramente causará problemas importantes. Debes evitar utilizar
    esta técnica excepto cuando sea absolutamente necesario.

    Atención

    El hecho de volver a un estado anterior no esta soportado
    oficialmente por el diseño de Debian. Debe ser hecho únicamente
    como parte de un proceso de recuperación de emergencia. Aparte de
    esta situación, es una técnica que funciona muy bien para muchos
    problemas. En sistemas críticos debe realizar una copia de
    respaldo de todos los datos del sistema antes de realizar una
    operación de recuperación y reinstalar el sistema desde el
    principio.

    Puede tener suerte en volver de una versión nueva de un
    repositorio a una vieja al recuperarse de una actualización que
    rompa el sistema manipulando la versión_candidata (see
    Sección 2.7.7, “Ajustar la versión candidata con apt-pinning”).
    Esta es una posibilidad lenta a realizar la tediosa acción de
    ejecutar muchas órdenes «dpkg -i paquete_roto_versión_antigua
    .deb» (consulte Sección 2.6.3, “Recuperación con la orden dpkg”).

    Busca en el archivo "/etc/apt/sources.list" las líneas que usan
    inestable como se muestra a continuación.

    deb http://deb.debian.org/debian/ sid main contrib non-free

    Sustitúyalo por lo siguiente para mantener «en pruebas».

    deb http://deb.debian.org/debian/ forky main contrib non-free

    Establezca el archivo "/etc/apt/preferences" de la siguiente
    manera.

    Package: *
    Pin: release a=testing
    Pin-Priority: 1010

    Ejecute «apt-get update; apt-get dist-upgrade» para forzar la
    vuelta al estado anterior del sistema completo.

    Elimine es fichero particular «/etc/apt/preferences» después de
    la vuelta atrás de emergencia.

    Sugerencia

    Es una buena idea eliminar (¡que no purgar!) tantos paquetes como
    sea posible para minimizar los problemas de dependencias. Puede
    necesitar eliminar de forma manual e instalar algunos paquetes
    para tener un sistema restaurado. El núcleo de Linux, bootloader,
    udev, PAM, APT y los paquetes de red y sus archivos de
    configuración pueden necesitar atención especial.

2.7.12. El paquete «equivs«

    Si ha compilado un programa fuente para sustituir a un paquete
    Debian, la mejor forma de hacerlo es crear un paquete local
    «debianizado« (*.deb) y usar un repositorio privado.

    Si en lugar de ello elige compilar un programa desde su código
    fuente e instalarlo en «/usr/local» , puede que necesite equivs
    para al menos satisfacer las dependencias ausentes del paquete.

    Package: equivs
    Priority: optional
    Section: admin
    Description: Circumventing Debian package dependencies
     This package provides a tool to create trivial Debian packages.
     Typically these packages contain only dependency information, but they
     can also include normal installed files like other packages do.
     .
     One use for this is to create a metapackage: a package whose sole
     purpose is to declare dependencies and conflicts on other packages so
     that these will be automatically installed, upgraded, or removed.
     .
     Another use is to circumvent dependency checking: by letting dpkg
     think a particular package name and version is installed when it
     isn't, you can work around bugs in other packages' dependencies.
     (Please do still file such bugs, though.)

2.7.13. Portar un paquete a un sistema estable

    Atención

    No hay garantía de que el procedimiento descrito aquí funcione
    sin esfuerzos manuales adicionales para las diferencias del
    sistema.

    Para actualizaciones parciales de un sistema stable (estable), es
    deseable reconstruir un paquete con su entorno usando el paquete
    fuente. Esto evita las actualizaciones masivas de paquetes
    necesarias por sus dependencias.

    Añada las siguientes entradas al archivo «/etc/apt/sources.list»
    de un sistema stable (estable).

    deb-src http://deb.debian.org/debian unstable  main contrib non-free

    Instala los paquetes necesarios para la compilación y descarga
    los paquetes de las fuente de la siguiente manera.

    # apt-get update
    # apt-get dist-upgrade
    # apt-get install fakeroot devscripts build-essential
    # apt-get build-dep foo
    $ apt-get source foo
    $ cd foo*

    Actualice los paquetes de herramientas como dpkg y debhelper de
    los paquetes «backport« si son necesarios para portarlo hacia
    atrás.

    Ejecuta lo siguiente.

    $ dch -i

    Cambie la versión del paquete, p. ej. concatenado con «+bp1» en
    «debian/changelog»

    Crea los paquetes e instálalos en el sistema de la siguiente
    manera.

    $ debuild
    $ cd ..
    # debi foo*.changes

2.7.14. Servidor proxy para APT

    Debido a que duplicar toda la subsección del archivo Debian
    desperdicia ancho de banda del disco duro y de la red, es una
    buena idea implementar un servidor proxy local para APT cuando
    administra muchos sistemas en una LAN . APT se puede configurar
    para usar servidores proxy web genéricos (http) como squid (ver
    Sección 6.5, “Servidores de aplicaciones en otras redes”), ver
    apt.conf(5 ) y "/usr/share/doc/apt/examples/configure-index.gz".
    La variable de entorno "$http_proxy anula el servidor proxy
    establecido en el archivo "/etc/apt/apt.conf".

    Existen herramientas especiales proxy para repositorios Debian.
    Compruebe BTS antes de usarlos.

    Tabla 2.19. Relación de herramientas de proxy especificas para el
    repositorio Debian

    +---------------------------------------------------------------+
    |   paquete   |popularidad|tamaño|         descripción          |
    |-------------+-----------+------+------------------------------|
    |             |V:0.31,    |      |Proxy caché para archivos de  |
    |apt-cacher   |I:0.37     |267   |código fuente y paquetes      |
    |             |           |      |Debian (programa Perl)        |
    |-------------+-----------+------+------------------------------|
    |             |           |      |Proxy caché para la           |
    |apt-cacher-ng|V:4.0,     |1968  |distribución de paquetes de   |
    |             |I:4.1      |      |software (programa compilado  |
    |             |           |      |en C++)                       |
    +---------------------------------------------------------------+


    Atención

    Cuando Debian reorganiza la estructura del repositorio, estas
    herramientas proxy especializadas necesitan la reescritura de su
    código por parte del desarrollador Debian y pueden no ser
    operativas durante cierto tiempo. Por otro lado, los servidores
    proxy genéricos web (http) son más robustos y es más fácil hacer
    frente a esos cambios.

2.7.15. Más información acerca de la gestión de paquetes

    Puedes obtener más información sobre la gestión de los paquetes
    en los siguientes documentos.

      * Documentación principal de la gestión de paquetes:

          + aptitude(8), dpkg(1), tasksel(8), apt(8), apt-get(8),
            apt-config(8), apt-key(8), sources.list(5), apt.conf(5),
            and apt_preferences(5);

          + «/usr/share/doc/apt-doc/guide.html/index.html» y «/usr/
            share/doc/apt-doc/offline.html/index.html» del paquete
            apt-doc; y

          + «/usr/share/doc/aptitude/html/en/index.html» para el
            paquete aptitude-doc-en.

      * Documentación oficial y detallada del repositorio Debian:
   
          + «Capítulo 2 del Manual de Directrices Debian - El
            repositorio Debian«,

          + «Capítulo 4 de la Referencia del Desarrollador Debian -
            Recursos para desarrolladores Debian 4.6 El repositorio
            Debian« y

          + «Capítulo 6 de las Preguntas frecuentes de Debian GNU/
            Linux - El repositorio FTP Debian«.

      * Tutorial para la construcción de paquetes Debian por usuarios
        de Debian:

          + «Guía para desarrolladores Debian».

Capítulo 3. La inicialización del sistema

    Es inteligente por su parte como administrador de sistemas
    conocer profundamente como el sistema Debian comienza y se
    configura. Aunque los detalles concretos están en el código
    fuente de los paquetes instalados y su documentación, es un poco
    abrumador para la mayoría de nosotros.

    Lo siguiente es una descripción general de los puntos principales
    de la inicialización de un sistema Debian. Dado que el sistema
    Debian evoluciona constantemente, debe consultar la documentación
    más reciente.

      * El Manual del kernel de Debian Linux es la principal fuente
        de información sobre el kernel de Debian.

      * bootup(7) describe el proceso de arranque del sistema basado
        en systemd . (Debian reciente)

      * boot(7) describe el proceso de arranque del sistema basado en
        UNIX System V Release 4. (Older Debian)

3.1. Un resumen del proceso de arranque

    Un sistema informático pasa por diferentes fases en el proceso de
    arranque desde el encendido hasta que le ofrece al usuario la
    funcionalidad completa del sistema operativo (SO).

    Por simplicidad, limité la discusión a la de una típica
    plataforma PC con la instalación por defecto.

    El proceso normal de arranque es como un cohete de cuatro fases.
    Cada fase del cohete cede el control del sistema a la siguiente.

      * Sección 3.1.1, “Fase 1: UEFI”

      * Sección 3.1.2, “Fase 2: el cargador de arranque”
   
      * Sección 3.1.3, “Fase 3: el sistema mini-Debian”

      * Sección 3.1.4, “Fase 4: el sistema normal Debian”

    Desde luego, esto puede ser configurado de otra manera. Por
    ejemplo, si compila su propio núcleo, puede saltar el paso del
    sistema mini-Debian. Así que, por favor, no asuma cuál es el caso
    de su sistema hasta que no lo compruebe por si mismo.

3.1.1. Fase 1: UEFI

    La Interfaz del firmware extensible unificada (UEFI) define un
    administrador de arranque como parte de la especificación UEFI.
    Cuando se enciende un ordenador, el administrador de inicio es la
    primera etapa del proceso de inicio que verifica la configuración
    de inicio y, según su configuración, luego ejecuta el cargador de
    inicio del sistema operativo o el kernel del sistema operativo
    especificado (generalmente el cargador de inicio). La
    configuración de arranque está definida por variables almacenadas
    en la NVRAM, incluidas las variables que indican las rutas del
    sistema de archivos a los cargadores o kernels del sistema
    operativo.

    Una partición de sistema EFI (ESP) es una partición de
    dispositivo de almacenamiento de datos que se usa en ordenadores
    que se adhieren a la especificación UEFI. Accedido por el
    firmware UEFI cuando se enciende un ordeandor, almacena
    aplicaciones UEFI y los archivos que estas aplicaciones necesitan
    para ejecutarse, incluidos los cargadores de arranque del sistema
    operativo. (En el sistema de PC heredado, se puede usar la BIOS
    almacenada en el MBR)

3.1.2. Fase 2: el cargador de arranque

    El cargador de arranque es la segunda fase del proceso de
    arranque que comienza con la UEFI. Carga la imagen del núcleo del
    sistema y la imagen de initrd en memoria y pasa el control a
    estos. La imagen de initrd es la imagen del sistema de archivos
    raíz y su compatibilidad depende del cargador usado.

    El sistema Debian normalmente usa el kernel Linux como el kernel
    del sistema predeterminado. La imagen initrd para el kernel Linux
    5.x actual es técnicamente la imagen initramfs (sistema de
    archivos RAM inicial).

    Hay disponibles muchos cargadores de arranque y opciones de
    configuración.

    Tabla 3.1. Relación de cargadores de arranque

    +---------------------------------------------------------------------+
    |               |           |      |         |cargador|               |
    |    paquete    |popularidad|tamaño| initrd  |   de   |  descripción  |
    |               |           |      |         |arranque|               |
    |---------------+-----------+------+---------+--------+---------------|
    |               |           |      |         |        |Esto es lo     |
    |               |           |      |         |        |bastante       |
    |               |           |      |         |        |inteligente    |
    |               |           |      |         |        |como para      |
    |               |           |      |         |GRUB    |comprender las |
    |grub-efi-amd64 |I:451      |142   |Soporte  |UEFI    |particiones de |
    |               |           |      |         |        |disco y los    |
    |               |           |      |         |        |sistemas de    |
    |               |           |      |         |        |archivos como  |
    |               |           |      |         |        |vfat, ext4, …. |
    |               |           |      |         |        |(UEFI)         |
    |---------------+-----------+------+---------+--------+---------------|
    |               |           |      |         |        |Es lo bastante |
    |               |           |      |         |        |inteligente    |
    |               |           |      |         |        |para comprender|
    |               |           |      |         |        |las particiones|
    |grub-pc        |V:17, I:525|479   |Soporte  |GRUB 2  |de disco y los |
    |               |           |      |         |        |sistemas de    |
    |               |           |      |         |        |archivos como  |
    |               |           |      |         |        |vfat, ext4, …. |
    |               |           |      |         |        |(BIOS)         |
    |---------------+-----------+------+---------+--------+---------------|
    |               |           |      |         |        |Imagen de      |
    |               |           |      |         |        |rescate de     |
    |               |V:0.06,    |      |         |        |inicio GRUB 2  |
    |grub-rescue-pc |I:0.59     |7273  |Soporte  |GRUB 2  |(CD and        |
    |               |           |      |         |        |disquete)      |
    |               |           |      |         |        |(versión PC/   |
    |               |           |      |         |        |BIOS)          |
    |---------------+-----------+------+---------+--------+---------------|
    |               |           |      |         |        |grml-rescueboot|
    |               |V:0.1,     |      |         |GRUB 2  |adds live Linux|
    |grml-rescueboot|I:1.1      |36    |N/A      |plug-in |ISO images to  |
    |               |           |      |         |        |the grub2 boot |
    |               |           |      |         |        |menu           |
    |---------------+-----------+------+---------+--------+---------------|
    |               |           |      |         |        |Entiende el    |
    |               |           |      |         |        |sistema de     |
    |syslinux       |V:3, I:32  |325   |Soporte  |Isolinux|archivos       |
    |               |           |      |         |        |ISO9660. Es    |
    |               |           |      |         |        |usado por      |
    |               |           |      |         |        |arranque de CD.|
    |---------------+-----------+------+---------+--------+---------------|
    |               |           |      |         |        |Entiende el    |
    |               |           |      |         |        |sistema de     |
    |               |           |      |         |        |archivos MSDOS |
    |syslinux       |V:3, I:32  |325   |Soporte  |Syslinux|(FAT). Es usado|
    |               |           |      |         |        |para el        |
    |               |           |      |         |        |arranque de    |
    |               |           |      |         |        |disquete.      |
    |---------------+-----------+------+---------+--------+---------------|
    |               |           |      |         |        |Nuevo sistema  |
    |               |V:0.03,    |      |         |        |para el        |
    |loadlin        |I:0.40     |87    |Soporte  |Loadlin |arranque del   |
    |               |           |      |         |        |sistema FreeDOS|
    |               |           |      |         |        |/MSDOS.        |
    |---------------+-----------+------+---------+--------+---------------|
    |               |           |      |         |        |Este el        |
    |               |           |      |         |        |software libre |
    |               |V:0.3,     |      |No       |MBR por |que sustituye  |
    |mbr            |I:2.9      |47    |soportado|Neil    |MBR de MSDOS.  |
    |               |           |      |         |Turton  |Solo comprende |
    |               |           |      |         |        |particiones de |
    |               |           |      |         |        |disco.         |
    +---------------------------------------------------------------------+


    Para el sistema UEFI, GRUB2 primero lee la partición ESP y usa el
    UUID especificado para search.fs_uuid en "/boot/efi/EFI/debian/
    grub.cfg" para determinar el partición del archivo de
    configuración del menú GRUB2 "/boot/grub/grub.cfg".

    Las secciones clave del archivo de configuración del menú de
    GRUB2 se ven así:

    menuentry 'Debian GNU/Linux' ... {
            load_video
            insmod gzio
            insmod part_gpt
            insmod ext2
            search --no-floppy --fs-uuid --set=root fe3e1db5-6454-46d6-a14c-071208ebe4b1
            echo    'Loading Linux 5.10.0-6-amd64 ...'
            linux   /boot/vmlinuz-5.10.0-6-amd64 root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 ro quiet
            echo    'Loading initial ramdisk ...'
            initrd  /boot/initrd.img-5.10.0-6-amd64
    }

    Para esta parte de /boot/grub/grub.cfg, esta entrada de menú
    significa lo siguiente.

    Tabla 3.2. El significado de la entrada del menú de la parte
    anterior de /boot/grub/grub.cfg

    +---------------------------------------------------------------+
    |      configuración       |               valor                |
    |--------------------------+------------------------------------|
    |Módulos GRUB2 cargados    |gzio, part_gpt, ext2                |
    |--------------------------+------------------------------------|
    |usada la partición del    |partición identificada por UUID=    |
    |sistema de archivos raíz  |fe3e1db5-6454-46d6-a14c-071208ebe4b1|
    |--------------------------+------------------------------------|
    |ruta de la imagen del     |                                    |
    |núcleo en el sistema de   |/boot/vmlinuz-5.10.0-6-amd64        |
    |archivos raíz             |                                    |
    |--------------------------+------------------------------------|
    |parámetro de arranque del |"root=UUID=                         |
    |núcleo utilizado          |fe3e1db5-6454-46d6-a14c-071208ebe4b1|
    |                          |ro quiet"                           |
    |--------------------------+------------------------------------|
    |ruta de la imagen initrd  |                                    |
    |en el sistema de archivos |/boot/initrd.img-5.10.0-6-amd64     |
    |raíz                      |                                    |
    +---------------------------------------------------------------+


    On Debian system, "/boot/grub/grub.cfg" is managed by the
    installed GRUB package (e.g. grub-efi-amd64) and direct user
    modification to this file is deprecated. You should customize
    configuration files in "/etc/grub.d/" and "/etc/default/grub",
    instead. Then configure the GRUB configuration files and update
    NVRAM variables to automatically boot into Debian by:

    # dpkg-reconfigure grub-efi-amd64

    Sugerencia

    Puedes habilitar la visualización de los mensajes del registro de
    arranque del kernel eliminando "quiet" del valor
    "GRUB_CMDLINE_LINUX_DEFAULT" en "/etc/default/grub".

    Sugerencia
   
    You can add GRUB splash background by placing its image file in "
    /boot/grub/".

    Consulte «info grub», grub-install(8) y grub-mkconfig(8).

3.1.3. Fase 3: el sistema mini-Debian

    El sistema mini-Debian es la fase 3 del proceso de arranque que
    comienza con el cargador de arranque. Este ejecuta el núcleo del
    sistema con el sistema de archivos raíz en memoria. Esta es una
    fase preparatoria opcional del proceso de arranque.

    Nota

    En este documento el término «el sistema mini-Debian« es como el
    autor describe la tercera fase del proceso de arranque. El
    sistema se conoce como initrd o sistema initramfs. El instalador
    de Debian usa un sistema parecido en memoria.

    El primer programa que se ejecuta en el sistema de archivo raíz
    en memoria es /init». Es un programa que inicia el núcleo en el
    espacio de usuario y entrega el control para la próxima fase.
    Este sistema mini-Debian ofrece flexibilidad al módulo al proceso
    de arranque, como agregar módulos del núcleo antes de que el
    proceso principal de arranque o el montaje de un sistema de
    archivos raíz cifrado.

      * El programa /inites una secuencia de códigos si initramfs ha
        sido creado por initramfs-tools.

          + Puede interrumpir esta parte del proceso de arranque para
            obtener un intérprete de órdenes de supuerusuario dándole
            al arranque del núcleo el parámetro «break=init» etc.
            Consulte el archivo de órdenes /init» para conocer más
            formas de interacción. Este entorno del intérprete de
            órdenes es suficientemente complejo para realizar una
            reconocimiento avanzado del hardware de su equipo.

          + Las órdenes disponibles en este sistema mini-Debian son
            básicas y las funciones principales las aporta la
            herramienta GNU llamada busybox(1).

      * El programa /init es un programa binario systemd si initramfs
        fue creado por dracut.

          + Los comandos disponibles en este sistema mini-Debian son
            básicamente el ambiente systemd(1).

    Atención

    Necesita utilizar el parámetro «-n» en la orden mount cuando
    interaccione con el sistema de solo lectura del sistema de
    archivos raíz.

3.1.4. Fase 4: el sistema normal Debian

    The normal Debian system is the 4th stage of the boot process
    which is started by the mini-Debian system. The system kernel for
    the mini-Debian system continues to run in this environment. The
    root filesystem is switched from the one on the memory to the one
    on the physical storage device.

    El programa init se ejecuta en primer lugar con el PID=1
    preparando el proceso de arranque principal para el comienzo de
    muchos programas. La ruta de archivo por defecto para el programa
    init es «/usr/sbin/init» pero se puede modificar por un parámetro
    de arranque del núcleo como «init=/path/to/init_program».

    "/usr/sbin/init" tiene un enlace simbólico a "/lib/systemd/
    systemd" después de Debian 8 Jessie (lanzado en 2015).

    Sugerencia
   
    Puede comprobar cual es el sistema init real que usa su equipo
    mediante la orden «ps --pid 1 -f».

    Tabla 3.3. Relación de sistemas de arranque en el sistema Debian

    +---------------------------------------------------------------+
    |      paquete      |popularidad|tamaño|      descripción       |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |Demonio init(8) basado  |
    |systemd            |V:919,     |11764 |en actos con            |
    |                   |I:979      |      |concurrencia (opción a  |
    |                   |           |      |sysvinit)               |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |sistema de              |
    |                   |V:4.3,     |      |inicialización para     |
    |cloud-init         |I:6.8      |3240  |instancias de la        |
    |                   |           |      |infraestructura en la   |
    |                   |           |      |nube                    |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |las páginas de manual y |
    |systemd-sysv       |V:909,     |68    |los enlaces necesarios  |
    |                   |I:980      |      |para que systemd        |
    |                   |           |      |reemplace a sysvinit    |
    |-------------------+-----------+------+------------------------|
    |                   |V:594,     |      |herramientas de ayuda   |
    |init-system-helpers|I:987      |133   |para cambiar entre      |
    |                   |           |      |sysvinit y systemd      |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |archivos de órdenes de  |
    |initscripts        |V:17, I:62 |197   |inicio y parada del     |
    |                   |           |      |sistema                 |
    |-------------------+-----------+------+------------------------|
    |sysvinit-core      |V:3.4,     |365   |Programa estilo System-V|
    |                   |I:3.9      |      |init(8)                 |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |Mecanismo de cambio del |
    |sysv-rc            |V:33, I:66 |85    |nivel de ejecución      |
    |                   |           |      |estilo System-V         |
    |-------------------+-----------+------+------------------------|
    |                   |V:726,     |      |Programas estilo        |
    |sysvinit-utils     |I:1000     |100   |System-V (startpar(8),  |
    |                   |           |      |bootlogd(8), …)         |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |Funcionalidad de        |
    |lsb-base           |V:227,     |12    |secuencia de órdenes    |
    |                   |I:332      |      |«Linux Standard Base«   |
    |                   |           |      |init 3.2                |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |herramientas para       |
    |                   |           |      |organizar la secuencia  |
    |insserv            |V:40, I:65 |132   |de arranque usando las  |
    |                   |           |      |dependencias del archivo|
    |                   |           |      |de órdenes init.d LSB   |
    |-------------------+-----------+------+------------------------|
    |                   |V:1.4,     |      |Reinicio (reinicio      |
    |kexec-tools        |I:5.3      |320   |caliente) kexec(8) de la|
    |                   |           |      |herramienta kexec       |
    |-------------------+-----------+------+------------------------|
    |systemd-bootchart  |V:0.16,    |131   |analizador de desempeño |
    |                   |I:0.55     |      |del proceso de arranque |
    |-------------------+-----------+------+------------------------|
    |mingetty           |V:0.1,     |36    |únicamente para consola |
    |                   |I:2.6      |      |getty(8)                |
    |-------------------+-----------+------+------------------------|
    |mgetty             |V:0.13,    |318   |sustituto de «modem«    |
    |                   |I:0.48     |      |inteligente getty(8)    |
    +---------------------------------------------------------------+


    Sugerencia
   
    See Debian wiki: BootProcessSpeedup for the latest tips to speed
    up the boot process.

3.2. Rescue system

    Aviso
   
    Do not perform system administration tasks around the boot strap
    process without having a rescue system.

    Availability of a rescue system enables us to perform challenging
    tasks such as:

      * Booting a system from a broken boot loader installation

      * Fixing a broken boot loader installation
   
      * Extracting data from a broken unbootable system

      * Editing filesystems, disk partitions, and LVM volumes
        involving the root filesystem

    Typically, a rescue system is provided as a ISO image file and
    written to a removable storage media such as:

      * dispositivo USB flash preparado como se explica en
        Sección 9.7.2, “Escribiendo directamente en el disco”
   
      * CD / DVD prepared as Sección 9.7.7, “Escritura directa al CD/
        DVD-R/RW”

    For simplicity, USB flash drive cases are mentioned as examples
    below but CD or DVD may be used as well.

    Sugerencia
   
    You may need to change some UEFI NVRAM variables to boot
    arbitrary boot loaders on the removable storage media.

3.2.1. GRUB UEFI rescue system on USB

    The GRUB UEFI rescue system with menu can be started by turning
    on system power with the "GRUB UEFI rescue system on USB"
    inserted.

    This "GRUB UEFI rescue system on USB" is prepared by writing the
    Super Grub2 Disk ISO image to USB flash drive in advance.

    In case of broken boot loader configuration by the installation
    of another operating system etc., you can fix this by:

      * Start the GRUB UEFI rescue system to discover bootable
        installed systems automatically.

      * Start the installed Debian system from the GRUB menu.

      * At Linux root shell prompt:

        # dpkg-reconfigure grub-efi-amd64

    Nota

    The bootable GRUB rescue ISO image can be generated by following
    "info grub-mkrescue", too. It offers a CLI GRUB shell prompt but
    doesn't offer automatic discovery of bootable installed systems.

3.2.2. Linux live rescue system on USB

    The Linux live rescue system can be started by turning on system
    power with the "Linux live rescue system on USB" inserted.

    This "Linux live rescue system on USB" can be prepared by writing
    one of Linux live ISO images based on Debian to a USB flash drive
    in advance. Here are some examples of such Linux live images.

      * Debian Live images

      * Kali Linux Live

      * Grml Live Linux

    Here are some use cases of this Linux live rescue system:

      * Fix the broken boot loader configuration caused by the
        installation of another operating system etc.:

          + Start the Linux live rescue system.

          + Mount the partition containing the root filesystem of the
            unbootable installed Debian system to "/mnt".

          + At Linux root shell prompt:

            # chroot /mnt; dpkg-reconfigure grub-efi-amd64

      * Fix the broken dpkg package:
   
          + Start the Linux live rescue system.

          + Mount the partition containing the root filesystem of the
            installed Debian system with the broken dpkg package to "/
            mnt".

          + At Linux root shell prompt:

            # dpkg --root /mnt -i /mnt/var/cache/apt/archives/dpkg_old_version_amd64.deb

      * Perform normally prohibited changes such as filesystem operations
        to the installed system (see Sección 9.6, “Trucos del
        almacenamiento de datos”).

    Aviso
   
    Your GUI screen of the Linux live system may be locked after the
    inactivity.

    Sugerencia

      * It's a good idea to set your password as soon as you start a
        Linux live system.

      * You may set your password for example by "sudo passwd user"
        from the user's shell prompt on the Linux virtual consoles
        (see Sección 1.1.6, “Consolas virtuales”).

      * Some Linux live systems may set their default "user/password
        ": "Debian Live" = "user/live", "Kali Linux Live" = "kali/
        kali"

3.2.3. Linux live rescue system from GRUB

    The Linux live rescue system can be started from the GRUB menu
    entry. The GRUB configuration for this is prepared by the
    following:

      * Instale el paquete grml-rescueboot

      * Find a Linux live ISO image which has "/boot/grub/
        loopback.cfg" in its image.

          + ISO images mentioned in Sección 3.2.2, “Linux live rescue
            system on USB” have "/boot/grub/loopback.cfg" in their
            image.

      * Copy some of these Linux live ISO images to the "/boot/grml/"
        directory.

      * Update GRUB menu by:

        # dpkg-reconfigure grub-efi-amd64

    Upon turning on system power, the GRUB displays menu with
    candidates for Linux live rescue systems.

3.3. Systemd

3.3.1. Arranque de systemd

    Cuando se inicia el sistema Debian, /usr/sbin/init enlazado a /
    usr/lib/systemd se inicia como el proceso init del sistema (PID=
    1) propiedad de root (UID=0). Ver systemd(1).

    El proceso de inicio de systemd genera procesos en paralelo en
    función de los archivos de configuración de la unidad (ver
    systemd.unit(5)) que están escritos en estilo declarativo en
    lugar de un estilo de procedimiento similar a SysV .

    Los procesos generados se colocan en grupos de control de Linux
    individuales con el nombre de la unidad a la que pertenecen en la
    jerarquía privada de systemd (ver cgroups y Sección 4.7.5,
    “Características de seguridad de Linux”).

    Las unidades para el modo sistema se cargan desde la "Ruta de la
    búsqueda de las unidades del sistema" descrita en systemd.unit
    (5). Las principales por prioridad son las siguientes:

      * "/etc/systemd/system/*": Unidades del sistema creadas por el
        administrador

      * "/run/systemd/system/*": Unidades de tiempo de ejecución

      * "/lib/systemd/system/*": Unidades del sistema instaladas por
        el gestor de paquetes de la distribución

    Las interdependencias se describen mediante directivas «Wants=»,
    «Requires=», «Before=», «After=», … (ver "MAPPING OF UNIT
    PROPERTIES TO THEIR INVERSES" en systemd.unit(5)). El control de
    recursos también se define (ver systemd.resource-control(5)).

    El sufijo del archivo de configuración de la unidad codifica sus
    tipos como:

      * *.service describe el proceso que está controlado y
        supervisado por systemd. Consulte systemd.service(5).

      * *.device describe el dispositivo utilizado por sysfs(5) como
        el árbol de dispositivos udev(7). Consulte systemd.device(5).

      * *.mount describe el punto de montaje del sistema de archivos
        que está controlado y supervisado por systemd. Consulte
        systemd.mount(5).

      * *.automount describe puntos de automontaje de sistemas de
        archivos que están controlados y supervisados por systemd.
        Consulte systemd.automount(5).

      * *.swap describe dispositivos o archivos de intercambio
        controlado y supervisado por systemd. Ver systemd.swap(5).

      * *.path describe rutas supervisadas por systemd para la
        activación basada en la ruta. Consulte systemd.path(5).

      * *.socket describe conexiones controladas y supervisadas por
        systemd para la activación basada en conexiones. Consulte
        systemd.socket(5).

      * *.timer describe el temporizador controlado y supervisado por
        systemd para la activación en función de temporizadores.
        Consulte systemd.timer(5).

      * *.slice gestiona recursos mediante cgroups(7). Consulte
        systemd.slice(5).

      * *.scope se crean de forma programada utilizando los
        interfaces del bus de systemd para gestionar un conjunto de
        procesos del sistema. Ver systemd.scope(5).

      * Los grupos *.target y otros archivos de configuración de unit
        se usan para crear puntos de sincronización durante el
        arranque. Consulte systemd.target(5).

    Tras el arranque del sistema (esencialmente init), el proceso
    systemd intenta iniciar /lib/systemd/system/default.target
    (normalmente enlazado simbólicamente a "graphical.target".
    Primero, algunas unidades objetivo especiales (ver
    systemd.special(7) como "local-fs.target", "swap.target" y
    "cryptsetup.target" son llamadas a montar el sistema de archivos.
    Luego, otras unidades objetivo son llamadas por las dependencias
    de la unidad objetivo. Para más detalles, lea bootup(7).

    Systemd ofrece características de compatibilidad con versiones
    anteriores. Los archivos de órdenes de inicio de estilo SysV en «
    /etc/init.d/rc[0123456S].d/[KS] name» son también analizados y
    telinit(8) se traduce a peticiones de activación de systemd.

    Atención
   
    Los niveles de inicio emulados del dos al cuatro son enlaces
    simbólicos al mismo «multi-user.target».

3.3.2. Inicio de sesión en Systemd

    Cuando un usuario se conecta al sistema Debian a través de gdm3
    (8), sshd(8), etc., /lib/systemd/system --user se inicia como el
    proceso de gestor de servicios del usuario propiedad del usuario
    correspondiente. Ver systemd(1).

    El proceso de gestor de servicios del usuario systemd genera
    procesos en paralelo basándose en los archivos declarativos de la
    configuración de unidades (ver systemd.unit(5) y user@.service
    (5)).

    Las unidades para el modo de usuario se cargan desde la "Ruta de
    búsqueda de unidades del usuario" descrita en systemd.unit(5).
    Las principales son las siguientes en orden de prioridad:

      * "~/.config/systemd/user/*": Unidades de configuración del
        usuario

      * "/etc/systemd/user/*": Unidades de usuario creadas por el
        administrador

      * "/run/systemd/user/*": Unidades de tiempo de ejecución

      * "/lib/systemd/user/*": Unidades del usuario instaladas por el
        gestor de paquetes de la distribución

    Se gestionan del mismo modo que Sección 3.3.1, “Arranque de
    systemd”.

3.4. Los mensajes del núcleo

    El mensaje de error que se muestra en la consola se determina
    mediante la configuración de su nivel de umbral.

    # dmesg -n3

    Tabla 3.4. Lista de niveles de error del núcleo

    +---------------------------------------------------------------+
    |valor del nivel |nombre del nivel |        significado         |
    |    de error    |    de error     |                            |
    |----------------+-----------------+----------------------------|
    |0               |KERN_EMERG       |sistema no usable           |
    |----------------+-----------------+----------------------------|
    |1               |KERN_ALERT       |se deben tomar medidas de   |
    |                |                 |forma inmediata             |
    |----------------+-----------------+----------------------------|
    |2               |KERN_CRIT        |estado crítico              |
    |----------------+-----------------+----------------------------|
    |3               |KERN_ERR         |estado de error             |
    |----------------+-----------------+----------------------------|
    |4               |KERN_WARNING     |estado de aviso             |
    |----------------+-----------------+----------------------------|
    |5               |KERN_NOTICE      |estado normal pero          |
    |                |                 |significativo               |
    |----------------+-----------------+----------------------------|
    |6               |KERN_INFO        |información                 |
    |----------------+-----------------+----------------------------|
    |7               |KERN_DEBUG       |mensajes de depuración      |
    +---------------------------------------------------------------+


3.5. El sistema de mensajes

    En systemd, se registran diariamente tanto los mensajes del
    núcleo como los del sistema por el servicio
    systemd-journald.service (también conocido como journald) ya sea
    en un archivo binario persistente debajo de "/var/log/journal" o
    en datos binarios volátiles debajo de "/run/log/journal/". Se
    accede a estos datos de registro binario mediante el comando
    journalctl(1). Por ejemplo, puede mostrar el registro desde el
    último arranque como:

    $ journalctl -b

    Tabla 3.5. Lista de fragmentos de comando típicos de journalctl

    +---------------------------------------------------------------+
    |                   Operación                   | nombre de la  |
    |                                               |    orden,     |
    |-----------------------------------------------+---------------|
    |Ver el registro de los servicios del sistema y |"journalctl -b |
    |el kernel desde el último arranque             |--system"      |
    |-----------------------------------------------+---------------|
    |Ver el registro de los servicios del usuario   |"journalctl -b |
    |actual desde el último arranque                |--user"        |
    |-----------------------------------------------+---------------|
    |Ver el registro de las tareas de "$unit" del   |"journalctl -b |
    |último arranque                                |-u $unit"      |
    |-----------------------------------------------+---------------|
    |Ver el registro de trabajos de "$unit" (estilo |"journalctl -b |
    |"tail -f") desde el último arranque.           |-u $unit -f"   |
    +---------------------------------------------------------------+


    En systemd, la utilidad de registro del sistema rsyslogd(8) puede
    estar desinstalada. Si está instalada, cambia su comportamiento
    para leer los datos de registro binarios volátiles (en lugar del
    valor predeterminado anterior al sistema "/dev/log") y para crear
    datos de registro permanentes tradicionales del sistema ASCII.
    Esto se puede personalizar mediante "/etc/default/rsyslog" y "/
    etc/rsyslog.conf" tanto para el archivo de registro como para la
    visualización en pantalla. Ver rsyslogd(8) y rsyslog.conf(5). Ver
    también Sección 9.3.2, “Analizador de registros”.

3.6. Gestión del sistema

    systemd ofrece no solo init system sino también operaciones
    genéricas de administración del sistema con el comando systemctl
    (1).

    Tabla 3.6. Lista de típicos snippets de comandos systemctl

    +---------------------------------------------------------------+
    |               Operación               |  nombre de la orden,  |
    |---------------------------------------+-----------------------|
    |Lista de todos los tipos de unidades   |"systemctl list-units  |
    |disponibles                            |--type=help"           |
    |---------------------------------------+-----------------------|
    |Lista de todas las unidades de destino |"systemctl list-units  |
    |en memoria                             |--type=target"         |
    |---------------------------------------+-----------------------|
    |Lista de todas las unidades de servicio|"systemctl list-units  |
    |en memoria                             |--type=service"        |
    |---------------------------------------+-----------------------|
    |Listar todas las unidades de           |"systemctl list-units  |
    |dispositivo en memoria                 |--type=device"         |
    |---------------------------------------+-----------------------|
    |Listar todas las unidades de montaje en|"systemctl list-units  |
    |memoria                                |--type=mount"          |
    |---------------------------------------+-----------------------|
    |Listar todas las unidades socket en    |"systemctl             |
    |memoria                                |list-sockets"          |
    |---------------------------------------+-----------------------|
    |Listar todas las unidades de           |"systemctl list-timers"|
    |temporizador en memoria                |                       |
    |---------------------------------------+-----------------------|
    |Iniciar "$unit"                        |"systemctl start $unit"|
    |---------------------------------------+-----------------------|
    |Detener "$unit"                        |"systemctl stop $unit" |
    |---------------------------------------+-----------------------|
    |Recargar la configuración específica   |"systemctl reload      |
    |del servicio                           |$unit"                 |
    |---------------------------------------+-----------------------|
    |Parar y arrancar todo "$unit"          |"systemctl restart     |
    |                                       |$unit"                 |
    |---------------------------------------+-----------------------|
    |Iniciar "$unit" y detener todas las    |"systemctl isolate     |
    |demás                                  |$unit"                 |
    |---------------------------------------+-----------------------|
    |cambiar a "graphical" (sistema de      |"systemctl isolate     |
    |interfaz gráfica)                      |graphical"             |
    |---------------------------------------+-----------------------|
    |Cambiar a "multiusuario" (sistema de   |"systemctl isolate     |
    |línea de comandos)                     |multi-user"            |
    |---------------------------------------+-----------------------|
    |Cambiar a "rescate" (sistema CLI de    |"systemctl isolate     |
    |usuario único)                         |rescue"                |
    |---------------------------------------+-----------------------|
    |Enviar kill a "$unit"                  |"systemctl kill $unit" |
    |---------------------------------------+-----------------------|
    |Ver si el servicio "$unit" está        |"systemctl is-active   |
    |activado                               |$unit"                 |
    |---------------------------------------+-----------------------|
    |Ver si el servicio "$unit" ha fallado  |"systemctl is-failed   |
    |                                       |$unit"                 |
    |---------------------------------------+-----------------------|
    |Comprobar el estado de "$unit|$PID|    |"systemctl status $unit|
    |device"                                ||$PID|$device"         |
    |---------------------------------------+-----------------------|
    |Mostrar las propiedades de"$unit|$job" |"systemctl show $unit| |
    |                                       |$job"                  |
    |---------------------------------------+-----------------------|
    |Fallo en el reset "$unit"              |"systemctl reset-failed|
    |                                       |$unit"                 |
    |---------------------------------------+-----------------------|
    |Listar la dependencia de todos los     |"systemctl             |
    |servicios de la unidad                 |list-dependencies      |
    |                                       |--all"                 |
    |---------------------------------------+-----------------------|
    |Lista de archivos de unidad instalados |"systemctl             |
    |en el sistema                          |list-unit-files"       |
    |---------------------------------------+-----------------------|
    |Habilitar "$unit" (añadir symlink)     |"systemctl enable      |
    |                                       |$unit"                 |
    |---------------------------------------+-----------------------|
    |Desactivar "$unit" (eliminar enlace    |"systemctl disable     |
    |simbólico)                             |$unit"                 |
    |---------------------------------------+-----------------------|
    |desbloquear "$unit" (eliminar el enlace|"systemctl unmask      |
    |simbólico a "/dev/null")               |$unit"                 |
    |---------------------------------------+-----------------------|
    |Máscara "$unidad" (enlace simbólico    |"systemctl mask $unit" |
    |agregado a "/dev/null")                |                       |
    |---------------------------------------+-----------------------|
    |Obtener la configuración del destino   |"systemctl get-default"|
    |predeterminado                         |                       |
    |---------------------------------------+-----------------------|
    |Establece el objetivo predeterminado en|"systemctl set-default |
    |"graphical" (sistema gráfico)          |graphical"             |
    |---------------------------------------+-----------------------|
    |Establece el objetivo predeterminado en|"systemctl set-default |
    |"multiusuario" (sistema CLI)           |multi-user"            |
    |---------------------------------------+-----------------------|
    |Mostrar el entorno de trabajo          |"systemctl             |
    |                                       |show-environment"      |
    |---------------------------------------+-----------------------|
    |Establecer entorno de trabajo          |"systemctl             |
    |"variable" a "value"                   |set-environment        |
    |                                       |variable=value"        |
    |---------------------------------------+-----------------------|
    |Entorno de trabajo no fijado           |"systemctl             |
    |en"variable"                           |unset-environment      |
    |                                       |variable"              |
    |---------------------------------------+-----------------------|
    |Recargar todos los archivos de unidades|"systemctl             |
    |y demonios                             |daemon-reload"         |
    |---------------------------------------+-----------------------|
    |Apagar el sistema                      |"systemctl poweroff"   |
    |---------------------------------------+-----------------------|
    |Apagar y reinicio del sistema          |"systemctl reboot"     |
    |---------------------------------------+-----------------------|
    |Suspender el sistema                   |"systemctl suspend"    |
    |---------------------------------------+-----------------------|
    |Hibernar el sistema                    |"systemctl hibernate"  |
    +---------------------------------------------------------------+


    Aquí, "$unit" en los ejemplos anteriores puede que sea solo
    nombre de unidad (los sufijos como .service y .target son
    opcionales) o , en muchos casos, especificaciones de unidades
    múltiples (shell-style globs "*", "?", "[]" usando fnmatch(3) que
    se comparará con los nombres principales de todas las unidades
    actualmente en memoria).

    Los comandos de cambio de estado del sistema en los ejemplos
    anteriores suelen estar precedidos por "sudo" para tener el
    privilegio administrativo necesario.

    La salida de "systemctl status $unit|$PID|$device" usa puntos de
    colores ("●") para resumir el estado de la unidad de un vistazo.

      * Un "●" blanco indica un estado "inactivo" o en estado de
        "desactivación".

      * Un "●" rojo indica un estado de "fallo" o "error".

      * Un "●" verde indica el estado "Activo", "Recargando" o
        "Activando".

3.7. Otros monitores del sistema

    Aquí hay una lista de otros comandos de monitoreo impares bajo
    systemd. Lee las páginas más relevantes, incluidas cgroups(7).

    Tabla 3.7. Lista de otros fragmentos de comandos de supervisión
    en systemd

    +---------------------------------------------------------------+
    |                Operación                | nombre de la orden, |
    |-----------------------------------------+---------------------|
    |Mostrar el tiempo dedicado a cada paso de|"systemd-analyze     |
    |la inicialización                        |time"                |
    |-----------------------------------------+---------------------|
    |Lista de todas las unidades en el momento|"systemd-analyze     |
    |de inicializar                           |blame"               |
    |-----------------------------------------+---------------------|
    |Cargar y detectar errores en el archivo  |"systemd-analyze     |
    |"$unit"                                  |verify $unit"        |
    |-----------------------------------------+---------------------|
    |Mostrar breve información del estado de  |"loginctl            |
    |tiempo de ejecución del usuario que llama|user-status"         |
    |-----------------------------------------+---------------------|
    |Mostrar breve información del estado de  |"loginctl            |
    |tiempo de ejecución del usuario que llama|session-status"      |
    |-----------------------------------------+---------------------|
    |Seguimiento del proceso de arranque por  |"systemd-cgls"       |
    |el cgroups                               |                     |
    |-----------------------------------------+---------------------|
    |Seguimiento del proceso de arranque por  |"ps xawf -eo         |
    |el cgroups                               |pid,user,cgroup,args"|
    |-----------------------------------------+---------------------|
    |Seguimiento del proceso de arranque por  |Leer sysfs bajo "/sys|
    |el cgroups                               |/fs/cgroup/"         |
    +---------------------------------------------------------------+


3.8. Configuración del sistema

3.8.1. El nombre del equipo (hostname)

    El núcleo mantiene el nombre de host del sistema . La unidad del
    sistema iniciada por systemd-hostnamed.service establece el
    nombre de host del sistema en el momento del arranque con el
    nombre almacenado en " /etc/hostname ". Este archivo debe
    contener solo el nombre de host del sistema, no un nombre de
    dominio completo.

    Para obtener el nombre del equipo actual ejecute hostname(1) sin
    ningún parámetro.

3.8.2. El sistema de archivos

    Las opciones de montaje de discos normales y de sistemas de
    archivos en red se configuran en «/etc/fstab». Ver fstab(5) y
    Sección 9.6.7, “Optimización de los sistemas de archivos a través
    de las opciones de montaje”.

    Los sistemas de archivos cifrados se configuran en «/etc/
    crypttab». Ver crypttab(5)

    La configuración de RAID mediante software con mdadm(8) está en «
    /etc/mdadm/mdadm.conf». Ver mdadm.conf(5).

    Aviso

    Una vez montados todos los sistemas de archivos , los archivos
    temporales en «/tmp», «/var/lock» y «/var/run» se borran en cada
    inicio.

3.8.3. Inicialización del interfaz de red

    Comunmente el interfaz lo se inicializa mediante
    «networking.service» y el resto de interfaces de un sistema de
    escritorio moderno Debian que use systemd mediante
    «NetworkManager.service».

    Para configurarlos consulte Capítulo 5, Configuración de red.

3.8.4. Inicialización del sistema en la nube

    La instancia del sistema en la nube puede lanzarse como un clon
    de "Imágenes oficiales de la nube de Debian" o imágenes
    similares. Para dicha instancia del sistema, personalidades como
    el nombre de host, el sistema de archivos, la red, la
    configuración regional, las claves SSH, los usuarios y los grupos
    pueden configurarse utilizando funcionalidades proporcionadas por
    los paquetes cloud-init y netplan.io con múltiples fuentes de
    datos como archivos colocados en la imagen original del sistema y
    datos externos proporcionados durante su lanzamiento. Estos
    paquetes permiten la configuración declarativa del sistema
    utilizando datos YAML.

    Más información en "Computación en nube con Debian y sus
    descendientes", "Documentación de Cloud-init" y Sección 5.4, “La
    moderna configuración de la red para la nube”.

3.8.5. Ejemplo de personalización para ajustar el servicio sshd

    Con la instalación predeterminada, muchos servicios de red (ver
    Capítulo 6, Aplicaciones de red) se inician como procesos
    demonios después de network.target en el arranque por systemd. No
    es una excepción "sshd". Cambiemos esto a inicio bajo demanda de
    "sshd" como ejemplo de personalización.

    Primero, deshabilite la unidad de servicio instalada en el
    sistema.

     $ sudo systemctl stop sshd.service
     $ sudo systemctl mask sshd.service

    El sistema de activación de sockets bajo demanda de los clásicos
    servicios de Unix era a través del superservidor inetd (o
    xinetd). Bajo systemd, se puede habilitar el equivalente
    añadiendo *.socket y *.service archivos de configuración de la
    unidad.

    sshd.socket para especificar un socket de escucha

    [Unit]
    Description=SSH Socket for Per-Connection Servers

    [Socket]
    ListenStream=22
    Accept=yes

    [Install]
    WantedBy=sockets.target

    sshd@.service como el archivo de servicio de sshd.socket

    [Unit]
    Description=SSH Per-Connection Server
   
    [Service]
    ExecStart=-/usr/sbin/sshd -i
    StandardInput=socket

    Entonces, vuelve a cargar.

     $ sudo systemctl daemon-reload

3.9. El sistema udev

    Desde el núcleo de Linux 2.6 en adelante, udev system > aporta
    mecanismos automáticos de descubrimiento e inicialización (ver
    udev(7)). Después del descubrimiento de cada dispositivo por
    parte del núcleo, el sistema udev comienza un proceso de usuario
    el cual usa la información del sistema de archivos sysfs
    filesystem (ver Sección 1.2.12, “procfs y sysfs”), carga los
    módulos necesarios para el núcleo mediante el programa modprobe
    (8) (ver Sección 3.10, “La inicialización del módulo del núcleo”)
    y crea los nodos de dispositivo correspondientes.

    Sugerencia

    Si por cualquier motivo «/lib/modules/núcleo-version/modules.dep»
    no fue generado correctamente por depmod(8) , los módulos no
    pueden ser cargados por el sistema udev como se debería. Para
    solucionarlo ejecute «depmod -a».

    Para las reglas de montaje de «/etc/fstab», los nodos de
    dispositivos no necesitan nombres estáticos. Se puede usar UUID
    para los dispositivos montados en lugar de los nombres de los
    dispositivos como «/dev/sda». Ver Sección 9.6.3, “Acceso al
    particionado utilizando UUID”.

    Ya que udev es un sistema en evolución, dejaré los detalles para
    otra documentación y se describirá de forma mínima aquí.

    Aviso

    No intente ejecutar programas de larga duración como el script de
    copia de seguridad con RUN en las reglas udev como se menciona en
    udev(7). Por favor, cree un archivo systemd.service(5) apropiado
    y actívelo en su lugar. Ver Sección 10.2.3.2, “Montar la copia de
    seguridad activada por el acto”.

3.10. La inicialización del módulo del núcleo

    El programa modprobe(8) nos permite configurar el núcleo de Linux
    en ejecución desde el proceso de usuario añadiendo o eliminando
    módulos al núcleo. El sistema udev (ver Sección 3.9, “El sistema
    udev”) automatiza su llamada para ayudar a la inicialización de
    módulos en el núcleo.

    No existen módulos que no correspondan a hardware ni módulos
    controladores de hardware especiales como los que necesitan ser
    precargados al estar enumerados en el archivo «/etc/modules» (ver
    modules(5)).

      * Los módulos TUN/TAP aportan el dispositivo virtual de red
        punto a punto (TUN) y el dispositivo virtual de red ethernet
        (TAP),
   
      * Los módulos netfilter aportan capacidades de cortafuego
        (iptables(8), Sección 5.7, “Infraestructura Netfilter”) y

      * los módulos del controlador watchdog timer.

    Los archivos de configuración del programa modprobe(8) están
    ubicados en el árbol bajo el directorio «/etc/modprobes.d/» como
    se detalla en modprobe.conf(5). (Si quiere evitar que algunos
    módulos del núcleo se carguen de forma automática, inclúyalos en
    la lista negra que es el archivo «/etc/modprobes.d/blacklist».)

    El archivo «/lib/modules/version/modules.dep» creado por el
    programa depmod(8) describe las dependencias de los módulos
    usados por el programa modprobe(8).

    Nota

    Si tiene problemas en la carga de módulos cuando se inicia su
    carga de módulos o con modprobe(8), «depmod -a» puede
    solucionarlo reconstruyendo «modules.dep».

    El programa modinfo(8) muestra información acerca de los módulos
    del núcleo de Linux.

    El programa lsmod(8) da formato al contenido de «/proc/modules»,
    mostrando los módulos del núcleo que están cargados en este
    momento.

    Sugerencia

    Puede determinar cual es el hardware de su sistema. Ver
    Sección 9.5.3, “Identificación del hardware”.

    Puede configurar su hardware en tiempo de arranque y activar las
    funcionalidades del hardware conocidas. Ver Sección 9.5.4,
    “Configuración del hardware”.

    Seguramente pueda añadir soporte a sus dispositivos especiales
    recompilando el núcleo. Ver Sección 9.10, “El núcleo”.

Capítulo 4. Autenticación y controles de acceso

    Cuando una persona (o programa) necesita acceso al sistema, la
    acreditación confirma que la identidad es confiable.

    Aviso

    Una configuración errónea de PAM puede bloquearlo en su propio
    sistema. Debe tener un CD de rescate a mano o configurar una
    partición de arranque alternativa. Para recuperarlo inicie el
    sistema con uno de estos y corrija los errores cometidos.

4.1. Acreditación normal de Unix

    La autenticación Unix normal la proporciona el módulo pam_unix(8)
    bajo PAM (Módulos de autenticación conectables). Sus 3 archivos
    de configuración importantes, con entradas separadas ":", son los
    siguientes.

    Tabla 4.1. los tres archivos importantes de configuración de
    pam_unix(8)

    +---------------------------------------------------------------+
    |archivo| permisos |usuario|grupo |         descripción         |
    |-------+----------+-------+------+-----------------------------|
    |/etc/  |-rw-r--r--|root   |root  |(limpia) información de la   |
    |passwd |          |       |      |cuenta de usuario            |
    |-------+----------+-------+------+-----------------------------|
    |/etc/  |-rw-r-----|root   |shadow|información de seguridad de  |
    |shadow |          |       |      |la cuenta de usuario         |
    |-------+----------+-------+------+-----------------------------|
    |/etc/  |-rw-r--r--|root   |root  |información de grupo         |
    |group  |          |       |      |                             |
    +---------------------------------------------------------------+


    "/etc/passwd" contiene lo siguiente.

     ...
    user1:x:1000:1000:User1 Name,,,:/home/user1:/bin/bash
    user2:x:1001:1001:User2 Name,,,:/home/user2:/bin/bash
     ...

    Como se explica en contraseña(5), cada entrada separada ":" de
    este archivo significa lo siguiente.

      * Nombre de acceso

      * Entrada de especificación de contraseña

      * ID de usuario numérico

      * ID numérico de grupo

      * Nombre de usuario o comentario

      * Directorio raíz del usuario

      * Intérprete de órdenes opcional de usuario

    La segunda entrada de «/etc/passwd» se usaba para guardar la
    contraseña cifrada. Después de la introducción de «/etc/shadow»,
    esta entrada se usa para especificar la entrada de la contraseña.

    Tabla 4.2. El contenido de la segunda entrada de «/etc/passwd»

    +-----------------------------------------------------+
    |contenido|                significado                |
    |---------+-------------------------------------------|
    |(vacio)  |cuenta sin contraseña                      |
    |---------+-------------------------------------------|
    |x        |la contraseña cifrada esta en «/etc/shadow»|
    +-----------------------------------------------------+


    "/etc/shadow" contiene lo siguiente.

     ...
    user1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7:::
    user2:$1$vXGZLVbS$ElyErNf/agUDsm1DehJMS/:13261:0:99999:7:::
     ...

    Como se explica en shadow(5), cada entrada separada ":" de este
    archivo significa lo siguiente.

      * Nombre de acceso

      * Contraseña cifrada (El «$1$» inicial indica el uso del
        cifrado MD5. El carácter "*" indica sin acceso a la cuenta.)

      * Fecha del último cambio de contraseña, expresado en el número
        de días desde el 1 de Enero de 1970

      * Número de días que el usuario tiene que esperar antes de que
        se le permita cambiar la contraseña de nuevo

      * Número de días después del cual el usuario puede cambiar su
        contraseña

      * Número de días antes de que la contraseña deje de ser válida
        durante los cuales se avisará al usuario de ello

      * Número de días después de que una contraseña ha dejado de ser
        válida en los cuales la contraseña todavía será aceptada

      * Fecha de expiración de la cuenta, expresada en el número de
        días desde 1 de Enero de 1970

      * …

    "/etc/group" contiene lo siguiente.

    group1:x:20:user1,user2

    Como se explica en grupos(5), cada entrada separada ":" de este
    archivo significa lo siguiente.

      * Nombre del grupo

      * Contraseña cifrada (no usado)
   
      * ID numérico de grupo

      * relación de los nombres de usuario separados por ","

    Nota
   
    «/etc/gshadow» aporta la misma funcionalidad que «/etc/shadow»
    para «/etc/group» pero no se usa en realidad.

    Nota

    La pertenencia real a un grupo por parte de un usuario puede ser
    añadido de forma dinámica si la línea «auth optional
    pam_group.so» esta añadida en «/etc/pam.d/common-auth» y activada
    en «/etc/security/group.conf». Ver pam_group(8).

    Nota

    El paquete base-passwd contiene una relación de acreditaciones de
    usuarios y grupos: «/usr/share/doc/base-passwd/
    users-and-groups.html».

4.2. Gestionando información de cuentas y contraseñas

    Aquí están algunas órdenes relevantes para la gestión de
    información de cuentas.

    Tabla 4.3. Relación de órdenes para la gestión de información de
    las cuentas

    +---------------------------------------------------------------+
    |     orden      |                   función                    |
    |----------------+----------------------------------------------|
    |getent passwd   |navega por la información de la cuenta de «   |
    |user_name       |nombre_de_usuario»                            |
    |----------------+----------------------------------------------|
    |getent shadow   |navega por la información de cuenta «oculta«  |
    |user_name       |de «nombre_de_usuario»                        |
    |----------------+----------------------------------------------|
    |getent group    |navega por la información del grupo «         |
    |group_name      |nombre_del_grupo»                             |
    |----------------+----------------------------------------------|
    |passwd          |gestiona la contraseña de la cuenta           |
    |----------------+----------------------------------------------|
    |passwd -e       |asigna una contraseña de un solo uso para la  |
    |                |activación de la cuenta                       |
    |----------------+----------------------------------------------|
    |chage           |gestión de la información de la vejez de la   |
    |                |contraseña                                    |
    +---------------------------------------------------------------+


    Puede necesitar privilegios de superusuario para que funcionen
    alguna operación. Ver crypt(3) sobre el cifrado de la contraseña
    y datos.

    Nota

    En un sistema configurado con PAM y NSS como el equipo Debian
    salsa, el contenido local de «/etc/passwd», «/etc/group» y «/etc/
    shadow» pueden no estar activados en el sistema. Incluso bajo
    estas circunstancias las órdenes son válidas.

4.3. Buenas contraseñas

    Cuando se crea una cuenta durante la instalación de su sistema o
    con la orden passwd(1), puede elegir una buena contraseña la cual
    consiste al menos de 6 a 8 caracteres incluyendo uno o más
    caracteres de cada uno de los conjuntos siguientes de acuerdo a
    passwd(1).

      * letras en minúscula

      * Dígitos de 0 hasta 9

      * Signos de puntuación

    Aviso

    No elija para la contraseña palabras fáciles de adivinar. Nombre
    de la cuenta, número de la Seguridad Social, nombre del teléfono,
    dirección, fecha de nacimiento, nombre de los miembros de su
    familia o mascotas, palabras del diccionario, secuencias simples
    de caracteres como «12345« o «qwerty«, son una mala elección para
    la contraseña.

4.4. Creando una contraseña cifrada

    Existen herramientas independientes para generar contraseñas
    cifradas con una semilla.

    Tabla 4.4. Relación de herramientas para generar contraseñas

    +---------------------------------------------------------------+
    |paquete|popularidad|tamaño| orden  |          función          |
    |-------+-----------+------+--------+---------------------------|
    |       |           |      |        |interfaz con múltiples     |
    |whois  |V:23, I:208|384   |mkpasswd|funcionalidades de la      |
    |       |           |      |        |biblioteca crypt(3)        |
    |-------+-----------+------+--------+---------------------------|
    |       |V:847,     |      |openssl |resúmenes criptográficos de|
    |openssl|I:996      |2532  |passwd  |las contraseñas (OpenSSL). |
    |       |           |      |        |passwd(1ssl)               |
    +---------------------------------------------------------------+


4.5. PAM y NSS

    Los sistemas modernos similares a Unix (como los sistemas Debian)
    proporcionan PAM (módulos de autenticación conectables, módulos
    de autenticación conectables) y NSS (Cambio de servicio de
    nombres, Cambio de servicio de nombres) mecanismo para
    administradores de sistemas locales, que les permite configurar
    sus propios sistemas. Sus funciones se pueden resumir en los
    siguientes puntos.

      * PAM ofrece mecanismos flexibles de acreditación que los usan
        las aplicaciones software mediante el intercambio de datos de
        contraseñas.
   
      * NSS ofrece un mecanismo de servicios de nombre flexible el
        cual se usa de forma habitual por la biblioteca C estándar
        para obtener el nombre del usuario y el grupo para programas
        como ls(1) e id(1).

    Estos sistemas PAM y NSS necesitan configurarse de forma
    coherente.

    Los paquetes importantes en los sistemas PAM y NSS son los
    siguientes.

    Tabla 4.5. Relación de sistemas PAM y NSS relevantes

    +---------------------------------------------------------------+
    |      paquete      |popularidad|tamaño|      descripción       |
    |-------------------+-----------+------+------------------------|
    |                   |V:941,     |      |Módulos de acreditación |
    |libpam-modules     |I:1000     |891   |conectables (servicios  |
    |                   |           |      |básicos)                |
    |-------------------+-----------+------+------------------------|
    |libpam-ldapd       |V:7, I:14  |79    |PAM permite conectar con|
    |                   |           |      |servicios LDAP          |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |Módulo de autenticación |
    |libpam-systemd     |V:738,     |777   |conectable (PAM) para   |
    |                   |I:966      |      |logind para registrar   |
    |                   |           |      |sesiones de usuario     |
    |-------------------+-----------+------+------------------------|
    |libpam-doc         |I:7.1      |1491  |PAM (documentación en   |
    |                   |           |      |html y texto)           |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |Biblioteca GNU C:       |
    |                   |V:940,     |      |bibliotecas compartidas |
    |libc6              |I:999      |5355  |que ofrecen también el  |
    |                   |           |      |intercambio del servicio|
    |                   |           |      |de nombres              |
    |-------------------+-----------+------+------------------------|
    |glibc-doc          |I:5.5      |3836  |Biblioteca GNU C:       |
    |                   |           |      |Manpages                |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |Biblioteca GNU C: Manual|
    |glibc-doc-reference|I:3.3      |14261 |de Referencia en info,  |
    |                   |           |      |formatos pdf y html     |
    |                   |           |      |(«non-free«)            |
    |-------------------+-----------+------+------------------------|
    |                   |V:271,     |      |Módulo NSS para         |
    |libnss-mdns        |I:505      |142   |resolución de nombres   |
    |                   |           |      |DNS sin servidor DNS    |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |Módulo NSS para su      |
    |libnss-ldapd       |V:8, I:17  |131   |integración con el      |
    |                   |           |      |servicio de nombres por |
    |                   |           |      |LDAP                    |
    +---------------------------------------------------------------+


      * Es esencial para aprender a configurar PAM «The Linux-PAM
        System Administrators' Guide« en libpam-doc.
   
      * El documento principal para aprender a configurar NSS es
        «System Databases and Name Service Switch« section en
        glibc-doc-reference.

    Nota

    Puede obtener una relación más completa y actualizada mediante la
    orden «aptitude search 'libpam-|libnss-'». El acrónimo NSS
    también tiene el significado de «Servicio de Seguridad de Red
    (Network Security Service) que es diferente de «Intercambio del
    Servicio de Nombres« (Name Service Switch).

    Nota

    PAM es la forma fundamental para la inicialización de las
    variables de entorno para cada programa con un valor diferente al
    que ofrece el sistema por defecto.

    En systemd , se instala el paquete libpam-systemd para
    administrar los inicios de sesión de los usuarios registrando las
    sesiones de usuario en la jerarquía del grupo de control systemd
    para logind . Consulte systemd-logind (8), logind.conf (5) y
    pam_systemd (8).

4.5.1. Archivos de configuración utilizados por PAM y NSS

    Aquí están algunos de los archivos de configuración más
    importantes usados por PAM y NSS.

    Tabla 4.6. Relación de archivos de configuración utilizados por
    PAM y NSS

    +---------------------------------------------------------------+
    | archivo de  |                     función                     |
    |configuración|                                                 |
    |-------------+-------------------------------------------------|
    |/etc/pam.d/  |Realice la configuraciñon de PAM para el programa|
    |program_name |«nombre_del_programa»; consulte pam(7) y pam.d(5)|
    |-------------+-------------------------------------------------|
    |/etc/        |Realice la configuración NSS con una registro    |
    |nsswitch.conf|para cada servicio. Consulte nsswitch.conf(5)    |
    |-------------+-------------------------------------------------|
    |/etc/nologin |Acote los usuario con permisos de inicio por     |
    |             |medio del módulo pam_nologin(8)                  |
    |-------------+-------------------------------------------------|
    |/etc/        |acote el acceso a tty para el superusuario por   |
    |securetty    |medio del módulo pam_securetty(8)                |
    |-------------+-------------------------------------------------|
    |/etc/security|acote los permisos de acceso mediante el módulo  |
    |/access.conf |pam_access(8)                                    |
    |-------------+-------------------------------------------------|
    |/etc/security|restrinja los grupos básicos por medio del módulo|
    |/group.conf  |pam_group(8)                                     |
    |-------------+-------------------------------------------------|
    |/etc/security|asigne variables de entorno mediante el módulo   |
    |/pam_env.conf|pam_env(8)                                       |
    |-------------+-------------------------------------------------|
    |/etc/        |asigne más variables de entorno mediante el      |
    |environment  |módulo pam_env(8) con el parámetro «readenv=1»   |
    |-------------+-------------------------------------------------|
    |/etc/default/|establecer la configuración regional mediante el |
    |locale       |módulo pam_env(8) con el argumento "readenv=1    |
    |             |envfile=/etc/default/locale" (Debian)            |
    |-------------+-------------------------------------------------|
    |/etc/security|establecer la restricción de los recursos        |
    |/limits.conf |(ulimit, core, ...) mediante el módulo pam_linits|
    |             |(8)                                              |
    |-------------+-------------------------------------------------|
    |/etc/security|establecer la restricción de tiempo mediante el  |
    |/time.conf   |módulo pam_time(8)                               |
    |-------------+-------------------------------------------------|
    |/etc/systemd/|Establece la configuración del administrador de  |
    |logind.conf  |inicio de sesión para systemd (ver logind.conf(5)|
    |             |y systemd-logind.service(8))                     |
    +---------------------------------------------------------------+


    Las normas para la selección de contraseñas se desarrolla en los
    módulos PAM, pam_unix(8) y pam_cracklib(8). Se pueden configurar
    por sus parámetros.

    Sugerencia
   
    Los nombres de archivos de los módulos de PAM usan el sufijo
    «.so».

4.5.2. La actual gestión centralizada de sistemas

    La gestión moderna de sistemas centralizados puede desplegarse
    empleando un servidor central LDAP (Protocolo Ligero de Acceso a
    Directorios) que administre los sistemas en la red, sean estos
    tipo Unix o de otro tipo. La implementación de código libre de
    este protocolo es el software OpenLDAP.

    El servidor LDAP proporciona información de la cuenta mediante
    PAM y NSS con los paquetes libpam-ldapd y libnss-ldapd del
    sistema Debian. Se necesitan distintas acciones para activarlo
    (La siguiente configuración no está comprobada y es información
    totalmente secundaria. Por favor léala en este contexto).

      * Puede configurar un servidor centralizado LDAP ejecutando un
        programa como el demonio LDAP centralizado, slapd(8).

      * Cambie los archivos de configuración PAM en el directorio «/
        etc/pam.d/» para usar «pam_ldap.so» en vez de la opción por
        defecto «pam_unix.so».

      * Cambie la configuración NSS en el archivo «/etc/
        nsswitch.conf» para usar ldap en vez de la opción por defecto
        («compat» o «file»).

      * Una contraseña segura necesita que libpam-ldapd use
        conexiones SSL (o TLS).

      * La integridad de los datos necesita que libnss-ldapd utilice
        conexiones SSL (o TLS) con la sobrecarga de red de LDAP.

      * Debería ejecutar nscd(8) para que la caché almacene cualquier
        resultado de una búsqueda de LDAP con el fin de reducir el
        tráfico de red de LDAP.

    Consulte los documentos nsswitch.conf(5), pam.conf(5), ldap.conf
    (5) y «/usr/share/doc/libpam-doc/html/» que contiene el paquete
    libpam-doc, e «info libc 'Name Service Switch'» que contiene el
    paquete glibc-doc.

    De forma parecida, se pueden instalar sistemas centralizados para
    otro métodos.

      * Integración de usuarios y grupos con sistemas Windows.

          + Se accede a servicios de dominio Windows por medio de los
            paquetes winbind y libpam_winbind.

          + Consulte winbindd(8) y Integración de redes MS Windows
            con Samba.
   
      * Integración de usuarios y grupos con sistemas tipo Unix
        antiguos.

          + Acceso a NIS (originalmente llamado páginas amarillas
            (YP) o NIS+ mediante el paquete nis.

          + Consulte «The Linux NIS(YP)/NYS/NIS+ HOWTO«.

4.5.3. «Razones por las que GNU no tienen la funcionalidad del grupo
wheel«

    Esta frase famosa al final de la página antigua de «info su» de
    Richard M. Stallman. Para no preocuparse: la orden actual su en
    Debian usa PAM, así este puede limitar el uso de su al grupo root
    habilitando la línea «pam_wheel.so» en «/etc/pam.d/su».

4.5.4. Regla estricta para contraseñas

    Instale el paquete libpam-cracklib y podrá aplicar estrictas
    reglas de contraseña.

    En un sistema GNOME típico, donde se instalaría
    libpam-gnome-keyring, "/etc/pam.d/common-password" se vería así:

    # here are the per-package modules (the "Primary" block)
    password        requisite                       pam_cracklib.so retry=3 minlen=8 difok=3
    password        [success=1 default=ignore]      pam_unix.so obscure use_authtok try_first_pass yescrypt
    # here's the fallback if no module succeeds
    password        requisite                       pam_deny.so
    # prime the stack with a positive return value if there isn't one already;
    # this avoids us returning an error just because nothing sets a success code
    # since the modules above will each just jump around
    password        required                        pam_permit.so
    # and here are more per-package modules (the "Additional" block)
    password        optional        pam_gnome_keyring.so
    # end of pam-auth-update config

4.6. Acreditación de seguridad

    Nota
   
    La información que se facilita aquí puede no ser suficiente para
    la seguridad que necesita pero puede ser un buen comienzo.

4.6.1. Contraseñas seguras en Internet

    Los servicios de la capa de transporte más usados usan mensajes
    que incluyen la acreditación mediante contraseñas en texto plano.
    Es una mala idea emitir contraseñas en texto plano en una red
    descentralizada donde se pueden interceptar. Puede ejecutar estos
    servicios sobre la «Capa de Transporte Segura« (TLS) o su
    predecesor «Secure Sockets Layer« (SSL) para asegurar por medio
    del cifrado todas las comunicaciones incluidas las contraseñas.

    Tabla 4.7. Relación de servicios y puertos seguros e inseguros

    +---------------------------------------------------------------+
    |   Nombre del servicio   |puerto|  nombre del servicio  |puerto|
    |        inseguro         |      |        seguro         |      |
    |-------------------------+------+-----------------------+------|
    |www (http)               |80    |https                  |443   |
    |-------------------------+------+-----------------------+------|
    |smtp (mail)              |25    |ssmtp (smtps)          |465   |
    |-------------------------+------+-----------------------+------|
    |ftp-data                 |20    |ftps-data              |989   |
    |-------------------------+------+-----------------------+------|
    |ftp                      |21    |ftps                   |990   |
    |-------------------------+------+-----------------------+------|
    |telnet                   |23    |telnets                |992   |
    |-------------------------+------+-----------------------+------|
    |imap2                    |143   |imaps                  |993   |
    |-------------------------+------+-----------------------+------|
    |pop3                     |110   |pop3s                  |995   |
    |-------------------------+------+-----------------------+------|
    |ldap                     |389   |ldaps                  |636   |
    +---------------------------------------------------------------+


    El coste de tiempo de CPU del cifrado. Como alternativa más
    eficiente para la CPU, se pueden mantener las comunicaciones en
    texto plano y securizando la contraseña con el protocolo de
    acreditación como «Protocolo de Acreditación de Oficina de
    Correos (Authenticated Post Office Protocol, APOP )« para POP y
    «Mecanismo de acreditación reto-respuesta MD5(Challenge-Response
    Authentication Mechanism MD5, CRAM-MD5)« para SMTP e IMAP. (Para
    el envío de mensajes de correo en Internet a su servidor de
    correo desde su cliente de correo, se ha vuelto usual el uso del
    puerto 587 para la recepción de mensajes en vez del tradicional
    puerto 25 SMTP para evitar el bloqueo del puerto 25 por el
    proveedor de red mientras se acredita con CRAM-MD5.)

4.6.2. «Secure Shell«

    El programa Secure Shell (SSH) ofrece comunicaciones cifradas
    seguras entre dos equipos no confiables sobre una red insegura
    con acreditación segura. Consiste en el cliente OpenSSH, ssh(1) y
    el demonio OpenSSH, sshd(8). Este SSH se puede usar para realizar
    un túnel de un protocolo de comunicación inseguro como es POP y
    asegurar X sobre Internet con la funcionalidad de reenvío de
    puerto (port forwarding).

    El cliente intenta acreditarse a si mismo usando la acreditación
    basada en equipos, acreditación de clave pública, acreditación
    reto-respuesta, o acreditación por contraseña. El uso de
    acreditación por clave pública permite acceso remoto sin
    contraseña. Consulte Sección 6.3, “Servidor de acceso remoto
    (SSH) y utilidades”.

4.6.3. Medidas extraordinarias de seguridad en Internet

    Incluso si ejecutas servicios de seguridad como Secure Shell
    (SSH) y protocolo de tunelización punto a punto (PPTP), En
    Internet, todavía existe la oportunidad de obtener acceso
    mediante ataques de adivinación de contraseñas de fuerza bruta.
    El uso de una política de firewall (ver Sección 5.7,
    “Infraestructura Netfilter”), junto con las siguientes
    herramientas de seguridad, puede mejorar la situación de
    seguridad.

    Tabla 4.8. Relación de herramientas que aportan medidas extra de
    seguridad

    +---------------------------------------------------------------+
    |   paquete   |popularidad|tamaño|         descripción          |
    |-------------+-----------+------+------------------------------|
    |knockd       |V:0.7,     |110   |Pequeño demónio port-knock    |
    |             |I:1.7      |      |knockd(1) y cliente knock(1)  |
    |-------------+-----------+------+------------------------------|
    |             |V:101,     |      |prohibición de las IPs con    |
    |fail2ban     |I:111      |2192  |múltiples errores de          |
    |             |           |      |acreditación                  |
    |-------------+-----------+------+------------------------------|
    |libpam-shield|V:0.05,    |115   |bloquea atacantes remotos que |
    |             |I:0.06     |      |intentan adivinar contraseñas |
    +---------------------------------------------------------------+


4.6.4. Asegurando la contraseña de root

    Para evitar que las personas accedan a tu máquina con privilegios
    de root, debes realizar las siguientes acciones.

      * Prevent physical access to the system storage device (HDD /
        SSD / ...)

      * Bloquee UEFI/BIOS y evita el arranque desde los medios
        extraíbles

      * Asigne una contraseña a las sesiones interactivas de GRUB

      * Bloquee la edición del menú de GRUB

    With physical access to the system storage device, resetting the
    password is relatively easy with following steps.

     1. Move the system storage device to a PC with USB bootable UEFI
        /BIOS.

     2. Boot system with a rescue media (see Sección 3.2.2, “Linux
        live rescue system on USB”).

     3. Monte la partición raíz con permisos de lectura/escritura.

     4. Edita "/etc/passwd" en la partición root y haz que la segunda
        entrada para la cuenta root esté vacía.

    Si tienes acceso de edición a la entrada del menú del GRUB
    (consulta Sección 3.1.2, “Fase 2: el cargador de arranque”) para
    grub-rescue-pc en el momento del arranque, es aún más fácil con
    los siguientes pasos.

     1. Arranque el sistema con el argumento del núcleo cambiado a
        algo como «root=/dev/sda6 rw init=/bin/sh».

     2. Edite «/etc/passwd» y cree una segundo registro para una
        cuenta de root vacía.

     3. Reinicie el sistema.

    El intérprete de órdenes del superusuario del sistema es
    accesible sin contraseña.

    Nota

    Una vez que tiene acceso al intérprete de órdenes del
    superusuario, tiene acceso a todo en el sistema y puede cambiar
    cualquier contraseña del sistema. Incluso, se pueden comprometer
    las contraseñas de todos los usuarios por medio de herramientas
    de «cracking« de fuerza bruta como los paquetes john y crack
    packages (ver Sección 9.5.10, “Sistema de seguridad y de
    comprobación de la integridad”). Estas contraseñas pirateadas
    pueden servir para comprometer otros sistemas.

    La única solución software razonable es evitar lo anterior con la
    utilización de software que cifra la partición raíz (o la
    partición «/etc») usando dm-crypt e initramfs (ver Sección 9.9,
    “Trucos para cifrar información”). Sin embargo, siempre
    necesitará la contraseña para arrancar el sistema.

4.7. Otros controles de acceso

    Existen controles de acceso al sistema además de la autenticación
    basada en contraseña y los permisos de archivo.

    Nota
   
    Ver Sección 9.4.16, “Tecla Alt-SysRq” como limitar la
    funcionalidad clave de atención segura (SAK) del núcleo.

4.7.1. Listas de control de acceso (ACL)

    Las ACL son un superconjunto de los permisos normales, como se
    explica en Sección 1.2.3, “Permisos del sistema de archivos”.

    En los entornos de escritorio modernos, las ACL entran en acción.
    Cuando un dispositivo de almacenamiento USB formateado se monta
    automáticamente como, por ejemplo, "/media/penguin/USBSTICK", un
    usuario normal penguin puede ejecutarlo:

     $ cd /media/penguin
     $ ls -la
    total 16
    drwxr-x---+ 1 root    root    16 Jan 17 22:55 .
    drwxr-xr-x  1 root    root    28 Sep 17 19:03 ..
    drwxr-xr-x  1 penguin penguin 18 Jan  6 07:05 USBSTICK

    "+" en la undécima columna indica que las ACL están en acción.
    Sin ACLs, un usuario normal pingüino no debería poder listar así
    ya que pingüino no está en el grupo root. Puedes ver ACLs como:

     $ getfacl .
    # file: .
    # owner: root
    # group: root
    user::rwx
    user:penguin:r-x
    group::---
    mask::r-x
    other::---

    Aquí:

      * "usuario::rwx", "grupo::---" y "otro::---" corresponden a los
        permisos normales de propietario, grupo y otro.

      * La ACL "user:penguin:r-x" permite que un usuario normal
        pingüino tenga permisos "r-x". Esto permite a "ls -la" listar
        el contenido del directorio.

      * La ACL "mask::r-x" establece el límite superior de los
        permisos.

    Ver "Listas de control de acceso POSIX en Linux", acl(5), getfacl
    (1) y setfacl(1) para más información.

4.7.2. sudo

    sudo(8) es un programa diseñado para permitir que el
    administrador de sistemas conceda ciertos privilegios de
    superusuario a los usuarios y registre su actividad. sudo
    necesita únicamente la contraseña del usuario normal. Una vez
    instalado el paquete sudo la configuración se realiza en el
    archivo «/etc/sudoers». Ver una configuración de ejemplo en «/usr
    /share/doc/sudo/examples/sudoers» y Sección 1.1.12,
    “Configuración de sudo”.

    En un sistema monousuario, el uso que yo realizo de sudo (ver
    Sección 1.1.12, “Configuración de sudo”) pretende evitar mi
    propia estupidez. Personalmente, considero el uso de sudo como la
    mejor alternativa al uso de la cuenta de superusuario de forma
    constante. Por ejemplo, lo siguiente cambia el dueño de «
    un_archivo» a «mi_nombre».

    $ sudo chown my_name some_file

    Desde luego si conoce la contraseña de «root« (como la conoce
    cualquier usuario que se instala Debian), cualquier orden puede
    ser ejecutada por «root« desde cualquier cuenta de usuario
    utilizando «su -c».

4.7.3. PolicyKit

    PolicyKit es un componente del sistema operativo con el fin de
    controlar los privilegios del sistema en toda su extensión para
    sistemas operativos tipo Unix.

    Los nuevas aplicaciones de interfaz gráfico de usuario no están
    diseñadas para ejecutarse como procesos privilegiados. Se
    comunican con los procesos privilegiados a través de PolicyKit
    realizando de forma eficiente las operaciones administrativas.

    PolicyKit restringe cada operación a cuentas de usuario que
    pertenecer al grupo sudo en el sistema Debian.

    Ver polkit(8).

4.7.4. Restricción de acceso a algunos servicios del servidor

    Para la seguridad del sistema, es una buena idea deshabilitar
    tantos programas del servidor como sea posible. Esto es crítico
    en servidores en red. Tener servidores sin utilidad, ejecutándose
    como demonios o por medio de un programa super servidor, se
    considera un riesgo de seguridad.

    Muchos programas, como sshd(8), utilizan PAM como control de
    acceso. Existen muchas maneras de limitar el acceso a algunos
    servicios de servidor.

      * archivos de configuración: «/etc/default/nombre_programa»

      * Configuración de la unidad de servicio Systemd para demonio

      * PAM (Módulos de Autenticación Insertables (Pluggable
        Authentication Modules))

      * «/etc/inetd.conf» para el super servidor

      * «/etc/hosts.deny» y «/etc/hosts.allow» para TCP wrapper, tcpd
        (8)

      * «/etc/rpc.conf» para Sun RPC

      * «/etc/at.allow» y «/etc/at.deny» para atd(8)

      * «/etc/cron.allow» y «/etc/cron.deny» para crontab(1)

      * Cortafuegos de red de la infraestructura netfilter

    Ver Sección 3.6, “Gestión del sistema”, Sección 4.5.1, “Archivos
    de configuración utilizados por PAM y NSS”, y Sección 5.7,
    “Infraestructura Netfilter”.

    Sugerencia
   
    Los servicios Sun RPC necesitan estar activos para NFS y otros
    programas basados en RPC.

    Sugerencia

    Si tiene problemas de acceso remoto en sistemas Debian recientes,
    comente las configuraciones que lo restringen como «ALL:
    PARANOID« en «/etc/hosts.deny» si existe. (Pero debe tener
    cuidado con los riesgos de seguridad que este tipo de acciones
    tienen.)

4.7.5. Características de seguridad de Linux

    El kernel de Linux ha evolucionado y admite características de
    seguridad que no se encuentran en las implementaciones
    tradicionales de UNIX.

    Linux soporta atributos extendidos que amplían los atributos
    tradicionales de UNIX (ver xattr(7)).

    Linux divide los privilegios tradicionalmente asociados con el
    superusuario en distintas partes, conocidas como capacidades(7),
    que se puede habilitar y deshabilitar de forma independiente. Las
    capacidades son un atributo por subproceso desde la versión 2.2
    del kernel.

    La infraestructura Linux Security Module (LSM proporciona un
    mecanismo para varias pruebas de seguridad para que sean unidas
    por nuevas extensiones del kernel. Por ejemplo:

      * AppArmor

      * Security-Enhanced Linux (SELinux)
   
      * Smack (Kernel de control de acceso obligatorio simplificado)

      * Tomoyo Linux

    Dado que estas extensiones pueden endurecer el tipo de privilegio
    más estricto que las políticas ordinarias de tipo de seguridad
    similares a las de Unix, incluso se puede restringir el poder de
    root. Recomendamos leer el documento marco de Linux Security
    Module (LSM) en kernel.org.

    Linux namespaces empaqueta un recurso del sistema global en una
    abstracción que hace aparecer a los procesos dentro del espacio
    de nombres que tienen su propia instancia aislada del recurso
    global. Los cambios en el recurso global son visibles a otros
    procesos que son miembros del espacio de nombres, pero son
    invisibles a otros procesos. Desde el kernel 5.6, hay 8 tipos de
    espacios de nombres (ver namespaces(7), unshare(1), nsenter(1)).

    A partir de Debian 11 Bullseye (2021), Debian utiliza jerarquía
    de grupos unificados (a.k.a. cgroups-v2).

    Ejemplos de uso de namespaces con cgroups para aislar sus
    procesos y permitir el control de recursos son:

      * Systemd. Ver Sección 3.3.1, “Arranque de systemd”.

      * Sandbox environment. Ver Sección 7.7, “Sandbox”.

      * Contenedores Linux tales como Docker, LXC. Ver Sección 9.11,
        “Sistemas virtualizados”.

    Estas funcionalidades no se pueden realizar por Sección 4.1,
    “Acreditación normal de Unix”. Estos temas avanzados están fuera
    del alcance de este documento introductorio.

Capítulo 5. Configuración de red

    Sugerencia
   
    Como guía de especifica de red moderna de Debian, lea Manual del
    Administrador de Debian - Configuración de red.

    Sugerencia
   
    Con systemd, networkd se puede usar para la gestión de redes. Ver
    systemd-networkd(8).

5.1. La infraestructura de red básica

    Revisemos la infraestructura de red básica de un moderno sistema
    Debian.

    Tabla 5.1. Relación de herramientas de configuración de red

    +-----------------------------------------------------------------------------+
    |      paquetes       |popularidad|tamaño|       tipo        |  descripción   |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |NetworkManager  |
    |network-manager      |V:423,     |6996  |config::NM         |(demonio):      |
    |                     |I:470      |      |                   |gestión de red  |
    |                     |           |      |                   |automatizada    |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |NetworkManager  |
    |network-manager-gnome|V:43, I:167|18    |config::NM         |(interfaz de    |
    |                     |           |      |                   |usuario GNOME)  |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |Netplan         |
    |                     |           |      |                   |(generador):    |
    |                     |           |      |                   |Interfaz        |
    |netplan.io           |V:2.2,     |340   |config::NM+networkd|unificada y     |
    |                     |I:8.5      |      |                   |declarativa para|
    |                     |           |      |                   |los backends    |
    |                     |           |      |                   |NetworkManager y|
    |                     |           |      |                   |systemd-networkd|
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |herramienta     |
    |                     |V:641,     |      |                   |estándar para   |
    |ifupdown             |I:972      |201   |config::ifupdown   |subir o bajar la|
    |                     |           |      |                   |red (específico |
    |                     |           |      |                   |de Debian)      |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |ayudante de     |
    |pppoeconf            |V:0.2,     |176   |config::helper     |configuración   |
    |                     |I:4.1      |      |                   |para conexiones |
    |                     |           |      |                   |PPPoE           |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |cliente que     |
    |wpasupplicant        |V:409,     |3896  |config::helper     |soporta WPA y   |
    |                     |I:514      |      |                   |WPA2 (IEEE      |
    |                     |           |      |                   |802.11i)        |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |cliente Qt de   |
    |wpagui               |V:0.2,     |779   |config::helper     |interfaz de     |
    |                     |I:1.3      |      |                   |usuario para    |
    |                     |           |      |                   |«wpa_supplicant«|
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |herramientas    |
    |                     |           |      |                   |para manejar las|
    |                     |V:191,     |      |                   |Extensiones     |
    |wireless-tools       |I:257      |225   |config::helper     |Inalámbricas    |
    |                     |           |      |                   |Linux («Linux   |
    |                     |           |      |                   |Wireless        |
    |                     |           |      |                   |Extensions«)    |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |herramienta para|
    |                     |           |      |                   |configurar      |
    |iw                   |V:37, I:473|332   |config::helper     |dispositivos    |
    |                     |           |      |                   |inalámbricos en |
    |                     |           |      |                   |Linux           |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |iproute2, IPv6 y|
    |                     |           |      |                   |otras           |
    |iproute2             |V:776,     |4123  |config::iproute2   |configuraciones |
    |                     |I:986      |      |                   |de red          |
    |                     |           |      |                   |avanzadas: ip   |
    |                     |           |      |                   |(8), tc(8), etc |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |herramientas de |
    |                     |V:376,     |      |                   |administración  |
    |iptables             |I:638      |2408  |config::Netfilter  |para el filtrado|
    |                     |           |      |                   |de paquetes y   |
    |                     |           |      |                   |NAT (Netfilter) |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |herramientas de |
    |                     |           |      |                   |administración  |
    |                     |           |      |                   |para filtrado de|
    |nftables             |V:246,     |189   |config::Netfilter  |paquetes y NAT  |
    |                     |I:866      |      |                   |(Netfilter)     |
    |                     |           |      |                   |(sucesor de     |
    |                     |           |      |                   |{ip,ip6,arp,eb} |
    |                     |           |      |                   |tables)         |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |prueba la       |
    |                     |           |      |                   |accesibilidad a |
    |                     |           |      |                   |un equipo remoto|
    |iputils-ping         |V:198,     |188   |prueba             |a través de la  |
    |                     |I:997      |      |                   |red por su      |
    |                     |           |      |                   |nombre de equipo|
    |                     |           |      |                   |o dirección IP  |
    |                     |           |      |                   |(iproute2)      |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |prueba la       |
    |                     |           |      |                   |accesibilidad   |
    |                     |           |      |                   |por red de un   |
    |iputils-arping       |V:2, I:18  |53    |prueba             |equipo remoto   |
    |                     |           |      |                   |específico      |
    |                     |           |      |                   |mediante la     |
    |                     |           |      |                   |dirección ARP   |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |determina la    |
    |iputils-tracepath    |V:2, I:20  |50    |prueba             |ruta de red a un|
    |                     |           |      |                   |equipo remoto   |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |muestra o cambia|
    |ethtool              |V:96, I:254|1088  |prueba             |la configuración|
    |                     |           |      |                   |de dispositivos |
    |                     |           |      |                   |Ethernet        |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |determina la    |
    |mtr-tiny             |V:4, I:39  |181   |test::low-level    |ruta de red a un|
    |                     |           |      |                   |equipo remoto   |
    |                     |           |      |                   |(curses)        |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |determina la    |
    |mtr                  |V:4, I:41  |230   |test::low-level    |ruta de red a un|
    |                     |           |      |                   |equipo remoto   |
    |                     |           |      |                   |(curses y GTK)  |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |herramientas    |
    |                     |V:0.5,     |      |                   |para operaciones|
    |gnome-nettool        |I:9.0      |2480  |test::low-level    |de información  |
    |                     |           |      |                   |de red comunes  |
    |                     |           |      |                   |(GNOME)         |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |descubridor de  |
    |nmap                 |V:25, I:184|4766  |test::low-level    |red / escáner de|
    |                     |           |      |                   |puertos (Nmap,  |
    |                     |           |      |                   |consola)        |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |analizador de   |
    |tcpdump              |V:18, I:174|1346  |test::low-level    |tráfico de red  |
    |                     |           |      |                   |(Tcpdump,       |
    |                     |           |      |                   |consola)        |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |analizador de   |
    |wireshark            |V:4, I:39  |17068 |test::low-level    |tráfico de red  |
    |                     |           |      |                   |(Wireshark, GTK)|
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |analizador de   |
    |tshark               |V:2, I:23  |433   |test::low-level    |tráfico de red  |
    |                     |           |      |                   |(consola)       |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |produce un      |
    |                     |V:0.2,     |      |                   |resumen de las  |
    |tcptrace             |I:1.6      |407   |test::low-level    |conexiones de   |
    |                     |           |      |                   |salida con      |
    |                     |           |      |                   |tcpdump         |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |clientes de red |
    |                     |           |      |                   |proporcionado   |
    |dnsutils             |V:5, I:161 |23    |test::low-level    |con BIND:       |
    |                     |           |      |                   |nslookup(8),    |
    |                     |           |      |                   |nsupdate(8), dig|
    |                     |           |      |                   |(8)             |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |comprueba la    |
    |                     |           |      |                   |información de  |
    |                     |V:0.1,     |      |                   |zona DNS        |
    |dlint                |I:2.2      |52    |test::low-level    |mediante        |
    |                     |           |      |                   |consultas al    |
    |                     |           |      |                   |servidor de     |
    |                     |           |      |                   |nombres         |
    |---------------------+-----------+------+-------------------+----------------|
    |                     |           |      |                   |determina una   |
    |dnstracer            |V:0.1,     |59    |test::low-level    |cadena de       |
    |                     |I:1.2      |      |                   |servidores DNS a|
    |                     |           |      |                   |la fuente       |
    +-----------------------------------------------------------------------------+


5.1.1. La resolución del nombre del equipo

    La resolución de nombres de host actualmente es compatible con el
    mecanismo NSS (Name Service Switch). El flujo de este análisis es
    el siguiente.

     1. El archivo «/etc/nsswitch.conf» con la entrada como «hosts:
        files dns» determina el orden de la resolución del nombre de
        equipos. (Esto sustituye la vieja funcionalidad del «orden»
        de la entrada en «/etc/host.conf».)

     2. El método files se llama en primer lugar. Si el nombre del
        equipo se encuentra en el archivo «/etc/hosts», devuelve
        todas las direcciones válidas de esta y finaliza. (El archivo
        «/etc/host.conf» contiene «múltiples posibilidades».)

     3. Se llama al método dns. Si el nombre del equipo se encuentra
        por la pregunta al Sistema de Internet de Nombres de Dominio
        (DNS) que se identifican por el archivo «/etc/resolv.conf»,
        devuelve todas las direcciones correctas para él si existen.

    Una estación de trabajo típica puede instalarse con su nombre de
    host establecido, por ejemplo, en "host_name" y su nombre de
    dominio opcional establecido en una cadena vacía. Entonces, "/etc
    /hosts" tiene el siguiente aspecto.

    127.0.0.1 localhost
    127.0.1.1 host_name

    # The following lines are desirable for IPv6 capable hosts
    ::1     localhost ip6-localhost ip6-loopback
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters

    Cada línea comienza con una dirección IP y es seguido por su
    nombre de equipo asociada.

    La dirección IP 127.0.1.1 de la segunda línea del ejemplo puede
    no aparecer en otros sistemas tipo Unix. El Instalador Debian
    crea esta entrada para un sistemas sin una dirección IP
    permanente como una solución temporal para algunos software (p.
    ej. GNOME) como se documenta en el error #719621.

    El nombre_host coincide con el nombre de host definido en "/etc/
    hostname" (ver Sección 3.8.1, “El nombre del equipo (hostname)”).

    En sistemas que tienen un dirección IP permanente, la dirección
    permanente se podría usar aquí en vez de 127.01.1.

    En sistemas con una IP permanente y un nombre cualificado
    completo de dominio (FQDN) provisto por el Sistema de Nombre de
    Dominio (DNS), ese canónico nombre_del_equipo.nombre_del_dominio
    se podría usar en lugar de solo el nombre_del_equipo.

    Si el paquete resolvconf no está instalado, "/etc/resolv.conf" es
    un archivo estático. Si está instalado, es un enlace simbólico.
    Además, contiene información de inicialización para la estrategia
    de análisis. Si la DNS es IP="192.168.11.1", incluye lo
    siguiente.

    nameserver 192.168.11.1

    El paquete resolvconf hace que «/etc/resolv.conf» sea un enlace
    simbólico y gestiona su contenido por su archivo de órdenes
    «hook« automáticamente.

    Para PC en el típico entorno LAN adhoc, el nombre del host puede
    resolverse a través de Multicast DNS (mDNS) además de los métodos
    básicos files y dns.

      * Avahi ofrece un marco para el Servicio de Descubrimiento DNS
        «Multicast« en Debian.

      * Es similar a Apple Bonjour / Apple Rendezvous.

      * El paquete conector libnss-mdns aporta la resolución de
        nombres de equipo por medio de mDNS para la funcionalidad del
        Intercambio del Servicio de Nombres GNU (NSS) de la
        biblioteca GNU C (glibc).
   
      * El fichero "/etc/nsswitch.conf" debería tener una estrofa
        como "hosts: files mdns4_minimal [NOTFOUND=return] dns" (ver
        /usr/share/doc/libnss-mdns/README.Debian para otras
        configuraciones).

      * Un nombre del host con el sufijo ".local" pseudominio de
        nivel superior se resuelve enviando un mensaje de consulta
        mDNS en un paquete UDP multidifusión utilizando la dirección
        IPv4 "224.0.0.251" o la dirección IPv6 "FF02::FB".

    Nota

    La expansión de los dominios genérico de alto nivel (gTLD) en el
    Sistema de Nombres de Dominio está en desarrollo. Tenga cuidado
    con la colisión de nombres cuando elige un nombre de dominio
    utilizado únicamente en la LAN.

    Nota

    El uso de paquetes como libnss-resolve junto con
    systemd-resolved, o libnss-myhostname, o libnss-mymachine, con
    listados corespondientes en la línea "hosts" en el fichero "/etc/
    nsswitch. conf" puede anular la configuración de la red
    tradicional comentada anteriormente. Para más información, ver
    nss-resolve(8), systemd-resolved(8), nss-myhostname(8) y
    nss-mymachines(8).

5.1.2. El nombre del interfaz de red

    El systemd utiliza "Predictable Network Interface Names" como
    "enp0s25".

5.1.3. EL rango de direcciones de red para una LAN

    Recordemos que los rangos de direcciones de IPv4 de 32 bits
    reservadas para cada clase de las redes de áreas locales (LANs)
    del rfc1918. Estas direcciones garantizan que no existan
    conflictos con las direcciones propias de Internet.

    Nota
   
    Las direcciones IP escritas con dos puntos son dirección IPv6,
    por ejemplo, "::1" para localhost.

    Tabla 5.2. Relación de rangos de direcciones de red

    +---------------------------------------------------------------+
    |Clase|direcciones de | máscara de  |  bits de la  | número de  |
    |     |      red      |     red     |máscara de red|las subredes|
    |-----+---------------+-------------+--------------+------------|
    |A    |10.x.x.x       |255.0.0.0    |/8            |1           |
    |-----+---------------+-------------+--------------+------------|
    |B    |172.16.x.x —   |255.255.0.0  |/16           |16          |
    |     |172.31.x.x     |             |              |            |
    |-----+---------------+-------------+--------------+------------|
    |C    |192.168.0.x —  |255.255.255.0|/24           |256         |
    |     |192.168.255.x  |             |              |            |
    +---------------------------------------------------------------+


    Nota

    Si una de estas direcciones se asigna a un equipo, entonces ese
    equipo no puede acceder a Internet de forma directa si no a
    través de una pasarela que actúa como «proxy« para servicios
    individuales o realiza Traducción de Direcciones de Red (NAT). El
    enrutador de banda ancha normalmente realiza NAT para los
    entornos LAN del cliente.

5.1.4. El mantenimiento de los dispositivos de red

    Aunque la mayoría de los dispositivos «hardware« son admitidos
    por el sistema Debian, existen algunos dispositivos de red que
    necesitan DFSG firmware propietario para su uso. Por favor
    consulte Sección 9.10.5, “Controladores y firware del hardware”.

5.2. La configuración moderna de red en el escritorio

    Comunmente el interfaz lo se inicializa mediante
    «networking.service» y el resto de interfaces de un sistema de
    escritorio moderno Debian que use systemd mediante
    «NetworkManager.service».

    Debian puede gestionar la conexión de red mediante el software de
    gestión daemon como NetworkManager (NM) (network-manager y
    paquetes asociados).

      * Ellos tienen sus propios interfaz gráfico de usuarios y
        programas de línea de órdenes como interfaces de usuario.

      * Tienen su propio demonio así como su motor de sistema.

      * Permiten la conexión sencilla entre su sistema e Internet.

      * Permiten la gestión sencilla de la configuración inalámbrica
        y cableada.

      * Nos permiten configurar la red de forma independiente del
        histórico paquete ifupdown.

    Nota

    No use las herramientas de configuración de red automática para
    servidores. Estos están pensados para escritorios móviles y
    portátiles.

    Estas herramientas modernas de red necesitan configurarse
    adecuadamente para evitar conflictos con el histórico paquete
    ifupdown y su archivo de configuración «/etc/network/interfaces».

5.2.1. Herramientas de interfaz gráfico de usuario para la
configuración de red

    La documentación oficial de NM en Debian se encuentra en "/usr/
    share/doc/network-manager/README.Debian".

    Basicamente, la configuración de red para escritorios se hace
    como sigue.

     1. Haga que el usuario de escritorio, p. ej. foo, pertenezca al
        grupo «netdev» como sigue (de otra forma, se puede hacer de
        forma automática mediante D-bus en entornos de escritorio
        modernos como GNOME y KDE).

        $ sudo usermod -a -G netdev foo

     2. Mantenga la configuración de «/etc/network/interfaces» tan
        simple como sigue.

        auto lo
        iface lo inet loopback

     3. Reinicia NM de la siguiente manera.

        $ sudo systemctl restart NetworkManager

     4. Configure al red por medio del interfaz gráfico de usuario.

    Nota

    Sólo las interfaces que están no listadas en "/etc/network/
    interfaces" son gestionadas por NM para evitar conflictos con
    ifupdown.

    Sugerencia

    Si deseas ampliar las capacidades de configuración de la red de
    NM, busque los módulos complementarios y paquetes suplementarios
    adecuados, como network-manager-openconnect,
    network-manager-openvpn-gnome, network-manager-pptp-gnome,
    mobile-broadband-provider-info, gnome-bluetooth, etc.

5.3. La moderna configuración de la red sin GUI

    Con systemd, la red puede configurarse en su lugar en /etc/
    systemd/network/. Consulte systemd-resolved(8), resolved.conf(5)
    y systemd-networkd(8).

    Esto permite la configuración moderna de la red sin GUI.

    Se puede establecer una configuración de cliente DHCP creando "/
    etc/systemd/network/dhcp.network". Por ejemplo:

    [Match]
    Name=en*
   
    [Network]
    DHCP=yes

    Se puede establecer una configuración de red estática creando "/
    etc/systemd/network/static.network". Por ejemplo:

    [Match]
    Name=en*
   
    [Network]
    Address=192.168.0.15/24
    Gateway=192.168.0.1

5.4. La moderna configuración de la red para la nube

    La configuración de red moderna para la nube puede utilizar los
    paquetes cloud-init y netplan.io (véase Sección 3.8.4,
    “Inicialización del sistema en la nube”).

    El paquete netplan.io soporta systemd-networkd y NetworkManager
    como backends de la configuración de la red, y permite la
    configuración de la red utilizando los datos YAML. Cuando se
    modifica YAML:

      * Ejecute el comando "netplan generate" para generar toda la
        configuración backend necesaria desde YAML.
   
      * Ejecute el comando "netplan apply" para aplicar la
        configuración generada a los backends.

    Ver "Documentación de Netplan", netplan(5), netplan-generate(8) y
    netplan-apply(8).

    Ver también "Documentación de Cloud-init" (especialmente sobre
    "Fuentes de configuración" y "Netplan Passthrough") para saber
    cómo cloud-init puede integrar la configuración de netplan.io con
    las fuentes de datos alternativas.

5.4.1. La moderna configuración de red para la nube con DHCP

    Se puede establecer una configuración de un cliente DHCP creando
    un fichero con el origen de los datos "/etc/netplan/
    50-dhcp.yaml":

    network:
      version: 2
      ethernets:
        all-en:
          match:
            name: "en*"
          dhcp4: true
          dhcp6: true

5.4.2. La moderna configuración de red para la nube con una IP
estática

    Se puede establecer una configuración de red estática creando un
    archivo fuente de datos "/etc/netplan/50-static.yaml":

    network:
      version: 2
      ethernets:
        eth0:
          addresses:
            - 192.168.0.15/24
          routes:
            - to: default
              via: 192.168.0.1

5.4.3. La configuración de red moderna para la nube con Network
Manager

    La configuración del cliente de red mediante la infraestructura
    de Network Manager se puede configurar creando un archivo de
    fuente de datos "/etc/netplan/00-network-manager.yaml":

    network:
      version: 2
      renderer: NetworkManager

5.5. La configuración de red de bajo nivel

    Para la configuración de red de bajo nivel en Linux, utilizar los
    programas iproute2 (ip(8), ...) .

5.5.1. Órdenes iproute2

    Las órdenes Iproute2 proporcionan un conjunto completo de
    funcionalidades de configuración de red a nivel bajo. Aquí hay
    una tabla de correspondencia entre las órdenes en desuso de
    net-tools y las nuevas órdenes de iproute2 etc.

    Tabla 5.3. Tabla de correspondencia entre las órdenes en desuso
    de net-tools y las nuevas órdenes de iproute2

    +---------------------------------------------------------------+
    |net-tools en |   nuevas    |              empleo               |
    |   desuso    |iproute2 etc.|                                   |
    |-------------+-------------+-----------------------------------|
    |ifconfig(8)  |ip addr      |dispositivo con un dirección de    |
    |             |             |protocolo (IP o IPv6)              |
    |-------------+-------------+-----------------------------------|
    |route(8)     |ip route     |entrada de tabla de rutas          |
    |-------------+-------------+-----------------------------------|
    |arp(8)       |ip neigh     |entrada cache de ARP o NDISC       |
    |-------------+-------------+-----------------------------------|
    |ipmaddr      |ip maddr     |dirección multicast                |
    |-------------+-------------+-----------------------------------|
    |iptunnel     |ip tunnel    |túnel sobre IP                     |
    |-------------+-------------+-----------------------------------|
    |nameif(8)    |ifrename(8)  |nombre de interfaz de red basado en|
    |             |             |la dirección MAC                   |
    |-------------+-------------+-----------------------------------|
    |mii-tool(8)  |ethtool(8)   |configuración de dispositivo       |
    |             |             |Ethernet                           |
    +---------------------------------------------------------------+


    Ver ip(8) y Enrutamiento avanzado de Linux & Control de tráfico.

5.5.2. Operaciones seguras de red a nivel bajo

    Puede usar las órdenes de red de nivel bajo de forma segura de la
    forma siguiente ya que no cambian la configuración de red.

    Tabla 5.4. Relación de órdenes de red de bajo nivel

    +---------------------------------------------------------------+
    |       orden        |               descripción                |
    |--------------------+------------------------------------------|
    |ip addr show        |muestra el enlace y el estado de la       |
    |                    |dirección de los interfaces activos       |
    |--------------------+------------------------------------------|
    |route -n            |muestra la tabla de encaminamiento al     |
    |                    |completo en direcciones numéricas         |
    |--------------------+------------------------------------------|
    |ip route show       |muestra la tabla de encaminamiento al     |
    |                    |completo en direcciones numéricas         |
    |--------------------+------------------------------------------|
    |arp                 |muestra el contenido actual de la tabla de|
    |                    |caché ARP                                 |
    |--------------------+------------------------------------------|
    |ip neigh            |muestra el contenido actual de la tabla de|
    |                    |caché ARP                                 |
    |--------------------+------------------------------------------|
    |plog                |display ppp daemon log                    |
    |--------------------+------------------------------------------|
    |ping yahoo.com      |comprueba la conexión de Internet con     |
    |                    |«yahoo.com»                               |
    |--------------------+------------------------------------------|
    |whois yahoo.com     |comprueba quién registro «yahoo.com» en la|
    |                    |base de datos de dominios                 |
    |--------------------+------------------------------------------|
    |traceroute yahoo.com|sigue la conexión a Internet hasta        |
    |                    |«yahoo.com»                               |
    |--------------------+------------------------------------------|
    |tracepath yahoo.com |sigue la conexión a Internet hasta        |
    |                    |«yahoo.com»                               |
    |--------------------+------------------------------------------|
    |mtr yahoo.com       |sigue la conexión a Internet hasta        |
    |                    |«yahoo.com» (de forma repetida)           |
    |--------------------+------------------------------------------|
    |dig                 |comprueba los registros DNS de            |
    |[@dns-server.com]   |«example.com» por «dns-server.com» para   |
    |example.com [{a|mx| |los registros «a», «mx», u «any»          |
    |any}]               |                                          |
    |--------------------+------------------------------------------|
    |iptables -L -n      |comprueba el filtrado de paquetes         |
    |--------------------+------------------------------------------|
    |ss -a               |encuentra todos los puertos abiertos      |
    |--------------------+------------------------------------------|
    |ss -l               |encuentra los puertos que están escuchando|
    |--------------------+------------------------------------------|
    |ss -l -t -n         |encuentra los puertos (numéricos) TCP que |
    |                    |están escuchando                          |
    |--------------------+------------------------------------------|
    |dlint example.com   |comprueba la información DNS de la zona   |
    |                    |«example.com»                             |
    +---------------------------------------------------------------+


    Sugerencia

    Algunas de estas herramientas de configuración de red a nivel
    bajo están ubicadas en «/usr/sbin/». Puede que necesite indicar
    la ruta absoluta como «/usr/sbin/ifconfig» o añadir «/usr/sbin» a
    la relación de «$PATH» en su «~/.bashrc».

5.6. Optimización de la red

    La optimización genérica de la red está fuera del alcance de este
    documento. Pasaré por encima de las materias pertinentes para una
    conexión casera.

    Tabla 5.5. Relación de herramientas de optimización de red

    +---------------------------------------------------------------+
    |paquetes |popularidad|tamaño|           descripción            |
    |---------+-----------+------+----------------------------------|
    |iftop    |V:6, I:89  |93    |muestra información del ancho de  |
    |         |           |      |banda usado por un interfaz de red|
    |---------+-----------+------+----------------------------------|
    |iperf    |V:2, I:35  |431   |herramienta para medir el ancho de|
    |         |           |      |banda del Protocolo IP            |
    |---------+-----------+------+----------------------------------|
    |ifstat   |V:0.6,     |52    |Monitor de estadísticas del       |
    |         |I:5.5      |      |interfaz                          |
    |---------+-----------+------+----------------------------------|
    |bmon     |V:2, I:20  |141   |monitor de ancho de banda portable|
    |         |           |      |y estimador de velocidad          |
    |---------+-----------+------+----------------------------------|
    |         |V:0.2,     |      |archivo de órdenes que rápidamente|
    |ethstatus|I:2.5      |41    |mide rendimiento del dispositivo  |
    |         |           |      |de red                            |
    |---------+-----------+------+----------------------------------|
    |bing     |V:0.08,    |80    |comprobador del ancho de banda    |
    |         |I:0.51     |      |estocástico empírico              |
    |---------+-----------+------+----------------------------------|
    |         |V:1.1,     |      |pequeño y sencillo monitor de     |
    |bwm-ng   |I:9.7      |95    |ancho de banda basado en la       |
    |         |           |      |consola                           |
    |---------+-----------+------+----------------------------------|
    |ethstats |V:0.05,    |21    |monitor de estadísticas Ethernet  |
    |         |I:0.39     |      |basado en la consola              |
    |---------+-----------+------+----------------------------------|
    |ipfm     |V:0.05,    |78    |herramienta de análisis de ancho  |
    |         |I:0.12     |      |de banda                          |
    +---------------------------------------------------------------+


5.6.1. Encontrando la MTU óptima

    NM normalmente establece la Unidad de transmisión máxima (MTU)
    óptima automáticamente.

    En algunos escenarios, después de experimentar con el envío de
    paquetes ICMP de varios tamaños con ping(8) con la opción "-M
    do", es posible que desee configurar la MTU manualmente. La MTU
    es el tamaño de paquete más grande que se puede lograr sin
    fragmentación de IP más 28 bytes (IPv4) o 48 bytes (IPv6). En el
    siguiente ejemplo, se encuentra que la MTU de la conexión IPv4 es
    1460 y la MTU de la conexión IPv6 es 1500.

    $ ping -4 -c 1 -s $((1500-28)) -M do www.debian.org
    PING  (149.20.4.15) 1472(1500) bytes of data.
    ping: local error: message too long, mtu=1460

    ---  ping statistics ---
    1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

    $ ping -4 -c 1 -s $((1460-28)) -M do www.debian.org
    PING  (130.89.148.77) 1432(1460) bytes of data.
    1440 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=50 time=325 ms
   
    ---  ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 325.318/325.318/325.318/0.000 ms
    $ ping -6 -c 1 -s $((1500-48)) -M do www.debian.org
    PING www.debian.org(mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e)) 1452 data bytes
    1460 bytes from mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e): icmp_seq=1 ttl=47 time=191 ms

    --- www.debian.org ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 191.332/191.332/191.332/0.000 ms

    Esto proceso se puede automatizar por descubrimiento de la ruta
    MtU (Path MTU, PMTU) (RFC1191) y la orden tracepath(8).

    Tabla 5.6. Guía básica para una MTU óptima

    +---------------------------------------------------------------+
    |            entorno de red            |MTU |   razonamiento    |
    |--------------------------------------+----+-------------------|
    |Enlace por red telefónica conmutada   |576 |estándar           |
    |(IP: PPP)                             |    |                   |
    |--------------------------------------+----+-------------------|
    |Enlace Ethernet (IP: DHCp o fijo)     |1500|estándar y por     |
    |                                      |    |defecto            |
    +---------------------------------------------------------------+


    Además de estas pautas básicas, también debe conocer la siguiente
    información.

      * El uso de cualquier método de «tunneling« (VPN etc.) puede
        reducir más la MTU óptima por la sobrecarga.

      * El valor de la MTU no debería ser mayor que el valor PMTU
        determinado de forma empírica.

      * El valor de MTU mayor es generalmente mejor cuando se cumplen
        las otras limitaciones.

    El Tamaño máximo de segmento (MSS) es otra medida del tamaño del
    paquete. La relación entre MSS y MTU es la siguiente.

      * MSS = MTU - 40 en el caso de IPv4
   
      * MSS = MTU - 60 en el caso de IPv6

    Nota

    La optimización basada en iptables(8) (ver Sección 5.7,
    “Infraestructura Netfilter”) puede fijar el tamaño del paquete
    por el MSS y puede ser útil para el encaminador. Ver «TCPMSS« en
    iptables(8).

5.6.2. Optimización TCP en redes WAN

    El rendimiento TCP puede maximizarse ajustando los parámetros del
    tamaño del buffer TCP como en "TCP tuning" para la moderna WAN de
    gran ancho de banda y alta latencia. Hasta ahora, la
    configuración actual por defecto de Debian sirve bien incluso
    para mi LAN conectada por el rápido servicio FTTP de 1G bps.

5.7. Infraestructura Netfilter

    Netfilter aporta la infraestructura de un cortafuegos con estado
    y traducción de direcciones de red (NAT) por medio de módulos del
    núcleo de Linux (Ver Sección 3.10, “La inicialización del módulo
    del núcleo”).

    Tabla 5.7. Relación de herramientas de cortafuegos

    +---------------------------------------------------------------+
    |   paquetes    |popularidad|tamaño|        descripción         |
    |---------------+-----------+------+----------------------------|
    |               |           |      |herramientas de             |
    |               |V:246,     |      |administración para filtrado|
    |nftables       |I:866      |189   |de paquetes y NAT           |
    |               |           |      |(Netfilter) (sucesor de     |
    |               |           |      |{ip,ip6,arp,eb}tables)      |
    |---------------+-----------+------+----------------------------|
    |               |           |      |herramientas de             |
    |iptables       |V:376,     |2408  |administración de netfilter |
    |               |I:638      |      |(iptables(8) para IPv4,     |
    |               |           |      |ip6tables(8) para IPv6)     |
    |---------------+-----------+------+----------------------------|
    |               |V:0.1,     |      |herramientas de             |
    |arptables      |I:1.7      |102   |administración de netfilter |
    |               |           |      |(arptables(8) para ARP)     |
    |---------------+-----------+------+----------------------------|
    |               |           |      |herramientas de             |
    |ebtables       |V:15, I:24 |276   |administración para         |
    |               |           |      |netfilter (ebtables(8) para |
    |               |           |      |puente Ethernet)            |
    |---------------+-----------+------+----------------------------|
    |               |V:0.2,     |      |Control continuo del estado |
    |iptstate       |I:1.7      |122   |de netfilter (parecido a top|
    |               |           |      |(1))                        |
    |---------------+-----------+------+----------------------------|
    |               |           |      |Cortafuegos sin             |
    |ufw            |V:79, I:105|859   |complicaciones (UFW)        |
    |               |           |      |programa de gestión del     |
    |               |           |      |firewall netfilter          |
    |---------------+-----------+------+----------------------------|
    |               |           |      |interfaz gráfica de usuario |
    |gufw           |V:6, I:11  |3663  |para cortafuegos sin        |
    |               |           |      |complicaciones (UFW)        |
    |---------------+-----------+------+----------------------------|
    |               |           |      |firewalld es un programa    |
    |firewalld      |V:15, I:23 |2558  |cortafuegos de gestión      |
    |               |           |      |dinámica con soporte para   |
    |               |           |      |zonas de red                |
    |---------------+-----------+------+----------------------------|
    |firewall-config|V:0.7,     |1096  |interfaz gráfica del usuario|
    |               |I:3.2      |      |para firewalld              |
    |---------------+-----------+------+----------------------------|
    |shorewall-init |V:0.21,    |88    |inicialización de Shoreline |
    |               |I:0.41     |      |Firewall                    |
    |---------------+-----------+------+----------------------------|
    |               |V:2.3,     |      |Shoreline Firewall,creador  |
    |shorewall      |I:5.1      |3090  |del archivo de configuración|
    |               |           |      |de netfilter                |
    |---------------+-----------+------+----------------------------|
    |               |           |      |Shoreline Firewall, creador |
    |shorewall-lite |V:0.03,    |71    |del archivo de configuración|
    |               |I:0.06     |      |de netfilter (versión       |
    |               |           |      |simplificada)               |
    |---------------+-----------+------+----------------------------|
    |               |V:0.7,     |      |Shoreline Firewall, creador |
    |shorewall6     |I:1.3      |1334  |del archivo de configuración|
    |               |           |      |de netfilter (versión IPv6) |
    |---------------+-----------+------+----------------------------|
    |               |           |      |Shoreline Firewall, creador |
    |shorewall6-lite|V:0.02,    |71    |del archivo de configuración|
    |               |I:0.03     |      |de netfilter (versión       |
    |               |           |      |simplificada para IPv6)     |
    +---------------------------------------------------------------+


    El programa principal para usuarios de netfilter es iptables(8).
    Puede configurar de forma manual netfilter de forma interactiva
    desde el intérprete de órdenes , guardando su estado con
    iptables-save(8) y restaurándolo por medio de archivo de órdenes
    init iptables-restore(8) después del reinicio del sistema.

    Shorewall es una herramienta que facilita la configuración de los
    archivos de órdenes facilitando este proceso.

    Consulte la documentación en Netfilter Documentation (o en "/usr/
    share/doc/iptables/html/").

      * CÓMO de conceptos de red en Linux

      * CÓMO Filtrar Paquetes en Linux 2.4

      * CÓMO Linux 2.4 NAT

    Sugerencia

    Aunque han sido escritor para la Linux 2.4, ambos, la orden
    iptables(8) y la función principal de netfilter se usan en los
    núcleos de Linux 2.6 y 3.x.

Capítulo 6. Aplicaciones de red

    Puede ejecutar varias aplicaciones de red una vez establecida la
    conectividad de red (ver Capítulo 5, Configuración de red).

    Sugerencia

    Puede leer una guía concreta y moderna sobre la infraestrucura de
    red de Debian en El Manual de Administración de Debian —
    Infraestructura de red.

    Sugerencia

    Si habilitó la "Verificación en dos pasos" con algún ISP,
    necesita obtener una contraseña de aplicación para acceder a los
    servicios POP y SMTP desde su programa. Es posible que deba,
    primero, aprobar su IP de host.

6.1. Navegadores web

    Existen muchos paquetes de navegadores web para acceder al
    contenido remoto por medio del Protocolo de Transferencia de
    Hipertexto (Hypertext Transfer Protocol) (HTTP).

    Tabla 6.1. Relación de navegadores web

    +---------------------------------------------------------------+
    |    paquete     |popularidad|tamaño|  tipo  | Descripción del  |
    |                |           |      |        |  navegador web   |
    |----------------+-----------+------+--------+------------------|
    |                |           |      |        |Chromium,         |
    |chromium        |V:29, I:101|302260|X       |(Navegador de     |
    |                |           |      |        |código abierto de |
    |                |           |      |        |Google)           |
    |----------------+-----------+------+--------+------------------|
    |                |           |      |        |Firefox (navegador|
    |                |           |      |        |de código abierto |
    |firefox         |V:15, I:21 |294905|, ,     |de Mozilla que    |
    |                |           |      |        |está disponible en|
    |                |           |      |        |Debian            |
    |                |           |      |        |«inestable»)      |
    |----------------+-----------+------+--------+------------------|
    |                |           |      |        |Firefox ESR,      |
    |firefox-esr     |V:190,     |265874|, ,     |(Versión de       |
    |                |I:425      |      |        |Firefox con       |
    |                |           |      |        |soporte extendido)|
    |----------------+-----------+------+--------+------------------|
    |epiphany-browser|V:2, I:11  |6666  |, ,     |conforme a GNOME, |
    |                |           |      |        |HIG , Epiphany    |
    |----------------+-----------+------+--------+------------------|
    |konqueror       |V:25, I:112|7982  |, ,     |KDE, Konqueror    |
    |----------------+-----------+------+--------+------------------|
    |                |V:0.5,     |      |        |Dillo, (navegador |
    |dillo           |I:4.1      |1585  |, ,     |ligero basado en  |
    |                |           |      |        |FLTK)             |
    |----------------+-----------+------+--------+------------------|
    |w3m             |V:11, I:137|2853  |texto   |w3m               |
    |----------------+-----------+------+--------+------------------|
    |lynx            |V:28, I:449|2031  |, ,     |Lynx              |
    |----------------+-----------+------+--------+------------------|
    |elinks          |V:3, I:16  |1789  |, ,     |ELinks            |
    |----------------+-----------+------+--------+------------------|
    |links           |V:2, I:21  |2321  |, ,     |Links (solo texto)|
    |----------------+-----------+------+--------+------------------|
    |links2          |V:1, I:10  |5466  |gráficos|Links (gráficos de|
    |                |           |      |        |consola sin X)    |
    +---------------------------------------------------------------+


6.1.1. Spoofing de la cadena User-Agent

    Para acceder a algunos sitios web demasiado restrictivos, es
    posible que deba falsificar la cadena User-Agent devuelta por el
    programa del navegador web. Ver:

      * MDN Web Docs: userAgent
      * Chrome Developers: Anular la cadena de agente de usuario
      * Cómo cambiar tu agente de usuario
      * Cómo cambiar tu agente de usuario en Chrome, Firefox, Safari,
        y más
      * Cómo Cambiar el Agente de Usuario de Su Navegador Sin
        Instalar Ninguna Extensión
      * Cómo cambiar el agente de usuario en el navegador de Gnome
        (epiphany)

6.1.2. extensión del navegador

    Todos los navegadores GUI modernos admiten extensión del
    navegador basada en código fuente y se está estandarizando como
    extensiones web.

6.2. El sistema de correo

    Esta sección se centra en las típicas estaciones de trabajo
    móviles con conexiones a Internet de consumo.

    Atención
   
    Si quiere tener un servidor de correo en Internet, debería leer
    la siguiente información básica al respecto.

6.2.1. Fundamentos de correo

    Un mensaje de correo electrónico consta de tres componentes, el
    sobre del mensaje, la cabecera del mensaje y el cuerpo del
    mensaje.

      * SMTP utiliza la información del sobre de «destino (To)« y
        «origen(From)« para entregar el correo electrónico. (La
        información del «origen(From)« también se denomina como
        dirección de retorno (bounce address), Origen_, etc.).

      * La información de la cabecera sobre el «origen(From)« y el
        «destine(To)« es la que muestra por parte del cliente de
        correo. (Generalmente será la misma que conste en el sobre
        del mensaje, pero no siempre es el caso.)

      * El formato del mensaje de correo electrónico, que abarca los
        datos de cabecera y cuerpo, se amplía mediante Extensiones de
        correo de Internet multiuso (MIME) desde el texto plano ASCII
        a otras codificaciones de caracteres, así como archivos
        adjuntos de audio, vídeo, imágenes y programas de aplicación.

    Los clientes de correo electrónico basados en GUI ofrecen todas
    las funciones siguientes mediante una configuración intuitiva
    basada en GUI.

      * Crea e interpreta los datos de la cabecera y el cuerpo del
        mensaje utilizando Extensiones de correo de Internet multiuso
        (MIME) para tratar el tipo de datos y la codificación del
        contenido.

      * Se autentica a sí mismo en los servidores SMTP e IMAP del ISP
        utilizando la antigua autenticación de acceso básica o la
        moderna OAuth 2.0. (Para OAuth 2.0, establézcalo a través de
        la configuración del entorno de escritorio. Por ejemplo,
        "Configuración" -> "Cuentas en línea")
   
      * Envía el mensaje al servidor SMTP smarthost del ISP que
        escucha en el puerto de envío de mensajes (587).

      * Recibe el mensaje almacenado en el servidor del ISP desde el
        puerto TLS/IMAP4 (993).

      * Puede filtrar correos por sus atributos.

      * Puede ofrecer funcionalidades adicionales: Contactos,
        Calendario, Tareas, Memos.

    Tabla 6.2. Relación de agentes de usuario de correo (MUA)

    +---------------------------------------------------------------+
    |  paquete  |popularidad|tamaño|              tipo              |
    |-----------+-----------+------+--------------------------------|
    |evolution  |V:26, I:228|488   |X GUI program (GNOME, groupware |
    |           |           |      |suite)                          |
    |-----------+-----------+------+--------------------------------|
    |thunderbird|V:42, I:105|274189|programa X GUI (GTK, Mozilla    |
    |           |           |      |Thunderbird)                    |
    |-----------+-----------+------+--------------------------------|
    |kmail      |V:43, I:103|25270 |programa de interfaz gráfico de |
    |           |           |      |usuario X (KDE)                 |
    |-----------+-----------+------+--------------------------------|
    |           |           |      |programa de terminales de       |
    |mutt       |V:11, I:89 |7332  |caracteres probablemente        |
    |           |           |      |utilizado con vim               |
    |-----------+-----------+------+--------------------------------|
    |mew        |V:0.02,    |2319  |programa de terminales de       |
    |           |I:0.15     |      |caracteres en (x)emacs          |
    +---------------------------------------------------------------+


6.2.2. Limitación del servicio moderno de correo

    El servicio de correo moderno tiene algunas limitaciones para
    minimizar la exposición a los problemas de spam (correo
    electrónico no deseado y no solicitado).

      * No es realista ejecutar un servidor SMTP en una red de nivel
        consumidor para enviar correo directamente a un host remoto
        de manera confiable.

      * Cualquier host puede rechazar discretamente un correo en ruta
        a menos que parezca lo más real posible.

      * No es realista esperar que un simple host inteligente envíe
        correos sin relación con direcciones de correo fuente al host
        remoto de manera confiable.

    Esto es porque:

      * Están bloqueadas las conexiones del puerto SMTP (25) de los
        hosts servidos por la red de nivel de consumidor a Internet.

      * Están bloqueadas las conexiones del puerto SMTP (25) de los
        hosts servidos por la red de nivel de consumidor a Internet.

      * Los mensajes de salida de hosts atendidos por la red de nivel
        de consumidor a Internet solo pueden enviarse a través del
        puerto de envío de mensajes (587).

      * Técnicas Anti-spam tales como DomainKeys Identified Mail
        (DKIM), Sender_Policy_Framework (SPF), y Autenticación,
        informes y conformidad de mensajes basados en dominios
        (DMARC) son muy usados para el filtrado de correos.

      * Se puede implementar el servicio de Correo identificado por
        llaves de dominio mediante el envío de su correo a través de
        un «equipo inteligente« (smarthost).

      * El host inteligente puede reescribir la dirección de correo
        de origen en el encabezado del mensaje en su cuenta de correo
        en el host inteligente para evitar la suplantación de
        direcciones de correo.

6.2.3. Expectativa histórica del servicio de correo

    Algunos programas en Debian esperan acceder al comando /usr/sbin/
    sendmail para enviar correos electrónicos como su configuración
    predeterminada o personalizada, ya que el servicio de correo en
    un sistema UNIX ha funcionado históricamente como:

      * Se crea un correo electrónico como un archivo de texto.

      * El correo electrónico se pasa al comando /usr/sbin/sendmail.

      * Para la dirección de destino en el mismo host, el comando /
        usr/sbin/sendmail realiza la entrega local del correo
        electrónico agregándolo al archivo /var/mail/$username .

          + Comandos que esperan esta función: apt-listchanges, cron,
            at, ...

      * Para la dirección de destino en el host remoto, el comando /
        usr/sbin/sendmail realiza la transferencia remota del correo
        electrónico al host de destino encontrado por el registro DNS
        MX utilizando SMTP.

          + Comandos que esperan esta función: popcon, reportbug,
            bts, ...

6.2.4. Agente de transporte de correo (Mail transport agent, MTA)

    Las estaciones de trabajo móviles de Debian pueden configurarse
    sólo con clientes de correo electrónico basados en una GUI
    completa sin agente de transferencia de correo (MTA) programa
    después de Debian 12 Bookworm.

    Debian instalaba tradicionalmente algún programa MTA para dar
    soporte a los programas que esperaban el comando /usr/sbin/
    sendmail. Tales MTA en estaciones de trabajo móviles deben hacer
    frente a Sección 6.2.2, “Limitación del servicio moderno de
    correo” y Sección 6.2.3, “Expectativa histórica del servicio de
    correo”.

    Para estaciones de trabajo móviles, la elección típica de MTA es
    exim4-daemon-light o postfix con su opción de instalación como
    "Mail sent by smarthost; received via SMTP or fetchmail"
    seleccionada. Se trata de MTA ligeros que respetan "/etc/
    aliases".

    Sugerencia

    Configurar exim4 para enviar el correo de Internet a través de
    múltiples smarthosts correspondientes para múltiples direcciones
    de correo electrónico de origen no es trivial. Si necesita tal
    capacidad para algunos programas, configúrelos para usar msmtp
    que es fácil de configurar para múltiples direcciones de correo
    electrónico de origen. Entonces deje el MTA principal sólo para
    una única dirección de correo electrónico.

    Tabla 6.3. Lista de paquetes básicos relacionados con el agente
    de transferencia de correo

    +---------------------------------------------------------------+
    |     paquete      |popularidad|tamaño|       descripción       |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |Exim4 agente de          |
    |exim4-daemon-light|V:211,     |1637  |transporte de correo     |
    |                  |I:218      |      |(MTA: por defecto en     |
    |                  |           |      |Debian)                  |
    |------------------+-----------+------+-------------------------|
    |                  |V:5.1,     |      |Agente de transferencia  |
    |exim4-daemon-heavy|I:5.2      |1802  |de correo Exim4 (MTA:    |
    |                  |           |      |reemplazo flexible)      |
    |------------------+-----------+------+-------------------------|
    |                  |V:216,     |      |Documentación de Exim4 en|
    |exim4-base        |I:224      |1634  |formato texto y archivos |
    |                  |           |      |comunes                  |
    |------------------+-----------+------+-------------------------|
    |exim4-doc-html    |I:0.96     |3798  |Documentación de Exim4 en|
    |                  |           |      |formato html             |
    |------------------+-----------+------+-------------------------|
    |exim4-doc-info    |I:0.54     |648   |Documentación de Exim4 en|
    |                  |           |      |formato info             |
    |------------------+-----------+------+-------------------------|
    |                  |V:107,     |      |Agente de transporte de  |
    |postfix           |I:112      |4224  |correo Postfix (MTA:     |
    |                  |           |      |alternativa segura)      |
    |------------------+-----------+------+-------------------------|
    |postfix-doc       |I:4.6      |5022  |Documentación de Postfix |
    |                  |           |      |en formato texto y html  |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |Implementación de la API |
    |sasl2-bin         |V:5, I:10  |381   |Cyrus SASL (complemento a|
    |                  |           |      |postfix para SMTP AUTH)  |
    |------------------+-----------+------+-------------------------|
    |cyrus-sasl2-doc   |I:0.68     |2140  |Documentación Cyrus SASL |
    |------------------+-----------+------+-------------------------|
    |msmtp             |V:8, I:14  |811   |MTA ligero               |
    |------------------+-----------+------+-------------------------|
    |                  |V:6.5,     |      |MTA ligero (extensión    |
    |msmtp-mta         |I:8.5      |136   |compatible con sendmail  |
    |                  |           |      |para msmtp)              |
    |------------------+-----------+------+-------------------------|
    |nullmailer        |V:7.9,     |483   |Elimina MTA, no hay      |
    |                  |I:8.4      |      |correo local             |
    |------------------+-----------+------+-------------------------|
    |ssmtp             |V:4.2,     |134   |Elimina MTA, no hay      |
    |                  |I:6.3      |      |correo local             |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |MTA con todas las        |
    |sendmail-bin      |V:11, I:11 |1954  |funciones (si ya está    |
    |                  |           |      |familiarizado con él)    |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |git-send-email(1)        |
    |git-email         |V:0.4,     |1204  |programa para enviar     |
    |                  |I:9.8      |      |series de correos        |
    |                  |           |      |electrónicos de parches  |
    +---------------------------------------------------------------+


6.2.4.1. Configuración de exim4

    Para configurar el correo de Internet por medio de un equipo
    inteligente, (re)configure el paquete exim4-* como se muestra a
    continuación.

    $ sudo systemctl stop exim4
    $ sudo dpkg-reconfigure exim4-config

    En «Tipo general de configuración de correo« seleccione «correo
    enviado por equipo inteligente; recibido por SMTP o fetchmail«.

    Asigne a «Nombre del sistema de correo:« a su valor por defecto
    como FQDN (ver Sección 5.1.1, “La resolución del nombre del
    equipo”).

    Asigne «Direcciones IP escuchan en las conexiones SMTP de
    entrada:« a sus valores por defecto como «127.0.0.1 ; ::1».

    Borre el contenido de «Otros destinos desde los cuales se acepta
    correo:«.

    Borre el contenido de «Máquinas para el reenvío de correo:«.

    Asigne «Direcciones de IP o nombre de equipos para correo
    inteligente de salida:« a «smtp.hostname.dom:587«.

    Selecciona "No" para "¿Ocultar el nombre del correo local en el
    correo saliente?". (Use "/etc/email-addresses" como en
    Sección 6.2.4.3, “La configuración de la dirección de correo”, en
    su lugar).

    Conteste a «Mantener el número de peticiones DNS a mínimo
    (Marcado bajo demanda) como sigue.

      * «No« si el sistema esta conectado a Internet en el arranque.
   
      * «Sí» si el sistema no esta conectado a Internet en el
        arranque.

    Asigne «Método de entrega para correo local:« a «mbox format in /
    var/mail«.

    Selecciona "Sí" para "¿Dividir la configuración en archivos
    pequeños?:".

    Crear las entradas de contraseñas para el equipo inteligente
    editando «/etc/exim4/passwd.client».

    $ sudo vim /etc/exim4/passwd.client
     ...
    $ cat /etc/exim4/passwd.client
    ^smtp.*\.hostname\.dom:username@hostname.dom:password

    Configura exim4(8) con "QUEUERUNNER='queueonly'", "QUEUERUNNER=
    'nodaemon'", etc. en " /etc/default/exim4" para minimizar el uso
    de los recursos del sistema. (opcional)

    Inicie exim4 como se muestra.

    $ sudo systemctl start exim4

    El nombre del equipo en «/etc/exim4/passwd.client» no debería ser
    un alias. Compruebe el nombre real del equipo como sigue.

    $ host smtp.hostname.dom
    smtp.hostname.dom is an alias for smtp99.hostname.dom.
    smtp99.hostname.dom has address 123.234.123.89

    Yo utilizo las expresiones regulares en «/etc/exim4/
    passwd.client» para trabajar sobre el tema de los alias. SMTP
    AUTH probablemente funciones incluso si el ISP redirige el equipo
    señalado por medio de alias.

    Puede actualiza su configuración de exim4 de forma manual como
    sigue:

      * Actualice los archivos de configuración de exim4 en «/etc/
        exim4/».

          + Creando «/etc/exim4/exim4.conf.localmacros» para asignar
            MACROS y editando «/etc/exim4/exim4.conf.template». (no
            dividir la configuración)

          + creando nuevos archivos y editando los existente en los
            subdirectorios en «/etc/exim4/exim4.conf.d». (dividir la
            configuración)

      * Ejecuta "systemctl reload exim4".

    Atención

    Iniciar exim4 tarda mucho tiempo si (valor por defecto) «No« fue
    elegido a la pregunta de denconf «Mantener el número de preguntas
    DNS al mínimo (Marcar bajo demanda)?« y el sistema no esta
    conectado a Intenet cuando se inicia.

   

    Por favor, lea la guía oficial en: «/usr/share/doc/exim4-base/
    README.Debian.gz» y update-exim4.conf(8).

    Aviso

    A efectos prácticos, utilice SMTP con STARTTLS en el puerto 587 o
    SMTPS (SMTP sobre SSL) en el puerto 465, en lugar de SMTP simple
    en el puerto 25.

6.2.4.2. Configuración de postfix con SASL

    Para el correo de Internet por medio de un equipo inteligente,
    podría leer primero postfix documentation y las páginas claves
    del manual.

    Tabla 6.4. Relación de páginas importantes del manual en postfix

    +-------------------------------------------------------------+
    |   orden    |                    función                     |
    |------------+------------------------------------------------|
    |postfix(1)  |Programa de control postfix                     |
    |------------+------------------------------------------------|
    |postconf(1) |Utilidad de configuración postfix               |
    |------------+------------------------------------------------|
    |postconf(5) |Parámetros de configuración de Postfix          |
    |------------+------------------------------------------------|
    |postmap(1)  |Mantenimiento de la tabla de búsqueda de Postfix|
    |------------+------------------------------------------------|
    |postalias(1)|Mantenimiento de base de datos de alias Postfix |
    +-------------------------------------------------------------+


    (Re)configure los paquetes postfix y sasl2-bin según se explica a
    continuación.

    $ sudo systemctl stop postfix
    $ sudo dpkg-reconfigure postfix

    Elija «Internet con equipo inteligente«.

    Asigne «equipo de reenvio SMTP (el blanco para no elegir
    ninguno):« a «[smtp.hostname.dom]:587» y configúrelo según sigue.

    $ sudo postconf -e 'smtp_sender_dependent_authentication = yes'
    $ sudo postconf -e 'smtp_sasl_auth_enable = yes'
    $ sudo postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'
    $ sudo postconf -e 'smtp_sasl_type = cyrus'
    $ sudo vim /etc/postfix/sasl_passwd

    Cree las entradas de las contraseñas para el equipo inteligente.

    $ cat /etc/postfix/sasl_passwd
    [smtp.hostname.dom]:587     username:password
    $ sudo postmap hush:/etc/postfix/sasl_passwd

    Inicie postfix con lo siguiente.

    $ sudo systemctl start postfix

    Aquí la utilización de «[» y «]» en el diálogo dpkg-reconfigure y
    «/etc/postfix/sasl_passwd» asegura que no se marque la entrada MX
    pero que se utilice directamente el nombre del equipo
    especificado. Ver «Enabling SASL authentication in the Postfix
    SMTP client« en «/usr/share/doc/postfix/html/SASL_README.html».

6.2.4.3. La configuración de la dirección de correo

    Existen algunos archivos de configuración de la dirección de
    correo para el transporte de correo, su entrega y los agentes de
    usuario.

    Tabla 6.5. Relación de los archivos relacionados con la
    configuración de la dirección de correo

    +---------------------------------------------------------------+
    |    archivo    |      función      |        aplicación         |
    |---------------+-------------------+---------------------------|
    |               |nombre del equipo  |Propio de Debian, mailname |
    |/etc/mailname  |por defecto para el|(5)                        |
    |               |correo (saliente)  |                           |
    |---------------+-------------------+---------------------------|
    |/etc/          |nombre del equipo  |propio de exim(8) ,        |
    |email-addresses|falso para correo  |exim4-config_files(5)      |
    |               |de salida          |                           |
    |---------------+-------------------+---------------------------|
    |               |nombre del equipo  |propio de postfix(1), se   |
    |/etc/postfix/  |falso para correo  |activa después de la       |
    |generic        |de salida          |ejecución de la orden      |
    |               |                   |postmap(1).                |
    |---------------+-------------------+---------------------------|
    |               |alias del nombre de|general, activado después  |
    |/etc/aliases   |la cuenta para el  |de la ejecución de la orden|
    |               |correo entrante    |newaliases(1).             |
    +---------------------------------------------------------------+


    El nombre del correo en el archivo «/etc/mailname» normalmente es
    un nombre de dominio totalmente cualificado (FQDN) que
    corresponderá a una dirección IP del equipo. Para un equipo
    ubicuo la cual no tiene un nombre asociado a una dirección IP,
    asigne este nombre de correo al valor de «hostname -f». (Esta es
    una elección segura que funciona tanto con exim4-* como con
    postfix.)

    Sugerencia

    El contenido de «/etc/mailname» se usa por muchos programas que
    no son MTA para determinar su comportamiento por defecto. En
    mutt, se asignan las variables «hostname» y «from» en el archivo
    ~/muttrc y sobreescribe el valor de mailname. Para los programas
    en el paquete devscripts, como bts(1) y dch(1), exporta las
    variables de entorno «$DEBFULLNAME» y «$DEBEMAIL» para
    sobreescribirlo.

    Sugerencia

    El paquete popularity-contest de forma habitual envia el correo
    desde la cuenta de superusuario con FQDN. Necesita asignar
    MAILFROM en /etc/popularity-contest.conf como se describe en el
    archivo /usr/share/popularity-contest/default.conf. De otra
    forma, su correo será rechazado por el servidor SMTP del equipo
    inteligente. Aunque es aburrido, esta aproximación es más segura
    que reescribir la dirección remitente de todos los correos por el
    MTA y podría ser usado por otros demonios y archivos de órdenes
    cron.

    Cuando se asigna mailname a «hostname -f», la simulación de la
    dirección de correo remitente por medio de MTA puede ser
    realizado por lo siguiente.

      * El archivo «/etc/email-addresses» para exim4(8) se explica en
        exim4-config_files(5)
   
      * El archivo «/etc/postfix/generic» para postfix(1) se explica
        en el general(5)

    Los siguientes pasos añadidos son necesarios para postfix.

    # postmap hash:/etc/postfix/generic
    # postconf -e 'smtp_generic_maps = hash:/etc/postfix/generic'
    # postfix reload

    Puede probar la configuración de la dirección de correo usando lo
    siguiente.

      * exim(8) con las opciones -brw, -bf, -bF, -bV, …
   
      * postmap(1) con la opción -q.

    Sugerencia

    Exim proporciona varias herramientas como exiqgrep(8) y exipick
    (8). Consulte «dpkg -L exim4-base|grep man8/» para las órdenes
    disponibles.

6.2.4.4. Operaciones fundamentales MTA

    Existen varias operaciones MTA fundamentales. Algunas se pueden
    realizar por medio de interfaz compatible de sendmail(1).

    Tabla 6.6. Relación de operaciones MTA fundamentales

    +---------------------------------------------------------------+
    |orden exim|  orden postfix  |           descripción            |
    |----------+-----------------+----------------------------------|
    |          |                 |lee los correos de la entrada     |
    |sendmail  |sendmail         |estándar y los organiza para la   |
    |          |                 |entrega (-bm)                     |
    |----------+-----------------+----------------------------------|
    |          |                 |enumera los correos en la cola,   |
    |mailq     |mailq            |con su estatus e identificador en |
    |          |                 |la cola (-bp)                     |
    |----------+-----------------+----------------------------------|
    |newaliases|newaliases       |inicializa la base de datos de    |
    |          |                 |alias (-l)                        |
    |----------+-----------------+----------------------------------|
    |exim4 -q  |postqueue -f     |descarga los correos en espera    |
    |          |                 |(-q)                              |
    |----------+-----------------+----------------------------------|
    |          |postsuper -r ALL |                                  |
    |exim4 -qf |deferred;        |descarga todos los correos        |
    |          |postqueue -f     |                                  |
    |----------+-----------------+----------------------------------|
    |exim4 -qff|postsuper -r ALL;|descarga incluso los correos      |
    |          |postqueue -f     |congelados                        |
    |----------+-----------------+----------------------------------|
    |exim4 -Mg |postsuper -h     |congela un mensaje por su         |
    |queue_id  |queue_id         |identificador en la cola          |
    |----------+-----------------+----------------------------------|
    |exim4 -Mrm|postsuper -d     |elimina un mensaje por su         |
    |queue_id  |queue_id         |identificador en la cola          |
    |----------+-----------------+----------------------------------|
    |N/A       |postsuper -d ALL |elimina todos los mensajes        |
    +---------------------------------------------------------------+


    Sugerencia
   
    puede ser una buena idea descargar todos los correos mediante un
    archivo de órdenes «/etc/ppp/ip-up.d/*».

6.3. Servidor de acceso remoto (SSH) y utilidades

    Secure SHell (SSH) es la manera segura de conectarse a través de
    Internet. Una versión libre de SSH es OpenSSH y esta disponible
    en Debian mediante los paquetes openssh-client y openssh-server.

    Para el usuario, ssh(1) funciona de una forma más inteligente y
    segura que telnet(1). No como la orden telnet, la orden ssh no
    para con el carácter de escape telnet (inicio por defecto
    CTRL-]).

    Tabla 6.7. Relación de servidores de acceso remoto y utilidades

    +----------------------------------------------------------------------------+
    |       paquete        |popularidad|tamaño|     herramienta      |descripción|
    |----------------------+-----------+------+----------------------+-----------|
    |                      |V:915,     |      |                      |Cliente de |
    |openssh-client        |I:996      |4210  |ssh(1)                |«Secure    |
    |                      |           |      |                      |shell«     |
    |----------------------+-----------+------+----------------------+-----------|
    |                      |V:768,     |      |                      |Servidor   |
    |openssh-server        |I:819      |3359  |sshd(8)               |Secure     |
    |                      |           |      |                      |shell      |
    |----------------------+-----------+------+----------------------+-----------|
    |                      |           |      |                      |pregunta al|
    |                      |           |      |                      |usuario por|
    |                      |           |      |                      |la         |
    |ssh-askpass           |I:16       |103   |ssh-askpass(1)        |contraseña |
    |                      |           |      |                      |para       |
    |                      |           |      |                      |ssh-add (X |
    |                      |           |      |                      |plano)     |
    |----------------------+-----------+------+----------------------+-----------|
    |                      |           |      |                      |pregunta al|
    |                      |           |      |                      |usuario la |
    |ssh-askpass-gnome     |V:0.4,     |207   |ssh-askpass-gnome(1)  |contraseña |
    |                      |I:3.0      |      |                      |para       |
    |                      |           |      |                      |ssh-add    |
    |                      |           |      |                      |(GNOME)    |
    |----------------------+-----------+------+----------------------+-----------|
    |                      |           |      |                      |pide al    |
    |                      |           |      |                      |usuario una|
    |                      |           |      |                      |contraseña |
    |ssh-askpass-fullscreen|V:0.11,    |41    |ssh-askpass-fullscreen|para       |
    |                      |I:0.45     |      |(1)                   |ssh-add    |
    |                      |           |      |                      |(GNOME) que|
    |                      |           |      |                      |le resulte |
    |                      |           |      |                      |atractiva  |
    |----------------------+-----------+------+----------------------+-----------|
    |                      |           |      |                      |servidor   |
    |                      |           |      |                      |web para   |
    |                      |           |      |                      |emulador de|
    |shellinabox           |V:0.7,     |528   |shellinaboxd(1)       |terminal   |
    |                      |I:1.1      |      |                      |VT100      |
    |                      |           |      |                      |accesible  |
    |                      |           |      |                      |mediante   |
    |                      |           |      |                      |navegador  |
    +----------------------------------------------------------------------------+


    Aunque shellinabox no es un programa SSH, se incluye aquí como
    una alternativa interesante para el acceso remoto a terminales.

    Ver también Sección 7.9, “conexión del servidor X” para
    conectarse a programas cliente X remotos.

    Atención
   
    Ver Sección 4.6.3, “Medidas extraordinarias de seguridad en
    Internet” si su SSH es accesible desde Internet.

    Sugerencia

    Por favor utilice el programa screen(1) para permitir que los
    procesos del intérprete de órdenes remotos sobrevivan a las
    caídas de la conexión (ver Sección 9.1.2, “El programa screen”).

6.3.1. Fundamentos de SSH

    El demonio OpenSSH SSH solo admite el protocolo SSH 2.

    Lea "/usr/share/doc/openssh-client/README.Debian.gz", ssh(1),
    sshd(8), ssh-keygen(1), ssh-add(1) y ssh-agent(1).

    Aviso

    «/etc/ssh/sshd_no_debe_ser_ejecutado» no debe estar presente si
    se quiere ejecutar el servidor OpenSSH.

    No habilite la autenticación basada en rhost
    (HostbasedAuthentication en /etc/ssh/sshd_config).

    Tabla 6.8. Relación de los archivos de configuración de SSH

    +---------------------------------------------------------------+
    |   archivo de   | descripción de los archivos de configuración |
    | configuración  |                                              |
    |----------------+----------------------------------------------|
    |/etc/ssh/       |Valores por defecto del cliente SSH, ver      |
    |ssh_config      |ssh_config(5)                                 |
    |----------------+----------------------------------------------|
    |/etc/ssh/       |Valores por defecto del servidor SSH, ver     |
    |sshd_config     |sshd_config(5)                                |
    |----------------+----------------------------------------------|
    |~/.ssh/         |claves ssh públicas por defecto que usan los  |
    |authorized_keys |clientes que usan para conectarse a su cuenta |
    |                |en este servidor SSH                          |
    |----------------+----------------------------------------------|
    |~/.ssh/id_rsa   |clave SSH-2 RSA privada del usuario           |
    |----------------+----------------------------------------------|
    |~/.ssh/id_      |clave secreta SSH-2 nombre-tipo-clave como    |
    |key-type-name   |ecdsa, ed25519, ... del usuario               |
    +---------------------------------------------------------------+


    Lo siguiente inicia una conexión ssh(1) desde el cliente.

    Tabla 6.9. Relación de ejemplos de inicio del clientes ssh

    +---------------------------------------------------------------+
    |            orden             |          descripción           |
    |------------------------------+--------------------------------|
    |ssh                           |conecta en el modo por defecto  |
    |username@hostname.domain.ext  |                                |
    |------------------------------+--------------------------------|
    |ssh -v                        |conecta en el modo por defecto  |
    |username@hostname.domain.ext  |con los mensajes de depuración  |
    |------------------------------+--------------------------------|
    |ssh -o                        |                                |
    |PreferredAuthentications=     |obliga la utilización de la     |
    |password                      |contraseña con SSH versión 2    |
    |username@hostname.domain.ext  |                                |
    |------------------------------+--------------------------------|
    |ssh -t                        |ejecute el programa passwd para |
    |username@hostname.domain.ext  |actualizar la contraseña en un  |
    |passwd                        |host remoto                     |
    +---------------------------------------------------------------+


6.3.2. Nombre de usuario en el host remoto

    Si usa el mismo nombre de usuario en el host local y remoto,
    puede eliminar escribir "username@".

    Incluso si utiliza un nombre de usuario distinto en el equipo
    local y remoto, puede eliminarlo usando «~/.ssh/config». Para el
    servicio Debian Salsa con el nombre de la cuenta «foo-guest»,
    haga que «~/.ssh/config» contenga lo siguiente.

    Host salsa.debian.org people.debian.org
    User foo-guest

6.3.3. Conectarse sin contraseñas del equipo remoto

    Se puede evitar recordar las contraseñas del sistema remoto
    usando «PubkeyAuthentication» (protocolo SSH-2).

    En el sistema remoto, cree las entradas respectivas,
    "PubkeyAuthentication sí", en "/etc/ssh/sshd_config".

    Genere las claves de acreditación locales e instale las claves
    públicas en el sistema remoto según se muestra.

    $ ssh-keygen -t rsa
    $ cat .ssh/id_rsa.pub | ssh user1@remote "cat - >>.ssh/authorized_keys"

    Puede añadir opciones a las entradas en «~/.ssh/authorized_keys»
    para limitar los equipos y ejecutar las órdenes concretas. Ver
    sshd(8) "AUTHORIZED_KEYS FILE FORMAT".

6.3.4. Tratando con clientes SSH extraños

    Existen algunos clientes SSH libres disponibles para otras
    plataformas.

    Tabla 6.10. Relación de clientes SSH libres en otras plataformas

    +---------------------------------------------------------------+
    |   entorno   |               programa SSH libre                |
    |-------------+-------------------------------------------------|
    |Windows      |puTTY (PuTTY: un cliente SSH y Telnet gratuito)  |
    |             |(GPL)                                            |
    |-------------+-------------------------------------------------|
    |Windows      |SSH en cygwin (Cygwin: Disfruta de Linux en      |
    |(cygwin)     |Windows) (GPL)                                   |
    |-------------+-------------------------------------------------|
    |Mac OS X     |OpenSSH; utiliza ssh en una aplicación de        |
    |             |terminal (GPL)                                   |
    +---------------------------------------------------------------+


6.3.5. Configuración ssh-agent

    Es seguro proteger su clave pública de acreditación con una
    contraseña. Si no se ha asignado una contraseña, utilice
    «ssh-keygen -p» para asignarla.

    Ubique su clave pública SSH (e.g. «~/.ssh/id_rsa.pub») en «~/.ssh
    /authorized_keys» en el equipo remoto utilizando una conexión al
    equipo remoto basada en la contraseña como se describe a
    continuación.

    $ ssh-agent bash
    $ ssh-add ~/.ssh/id_rsa
    Enter passphrase for /home/username/.ssh/id_rsa:
    Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)

    No se necesita contraseña remota desde aquí para la próxima
    orden.

    $ scp foo username@remote.host:foo

    Pulse ^D para finalizar su sesión de agente ssh.

    Para el servidor X, el archivo de órdenes de inicio de Debian
    ejecuta el ssh-agent como el proceso padre. Así solo necesita
    ejecutar ssh-add una vez. Para mayor información , lea ssh-agent
    (1) y ssh-add(1).

6.3.6. Enviar un correo desde un host remoto

    Si tiene una cuenta shell SSH en un servidor con la configuración
    de DNS adecuada, puede enviar un correo electrónico generado en
    su estación de trabajo como un correo electrónico enviado
    genuinamente desde el servidor remoto.

    $ ssh username@example.org /usr/sbin/sendmail -bm -ti -f "username@example.org" < mail_data.txt

6.3.7. Puerto de reenvío para túnel SMTP/POP3

    Para crear un tubería que conecte al puerto 25 del servidor
    remoto desde el puerto 4025 del equipo local y al puerto 110 de
    servidor remoto desde el puerto 4110 del equipo local a través de
    ssh, ejecute en el equipo local lo que sigue.

    # ssh -q -L 4025:remote-server:25 4110:remote-server:110 username@remote-server

    Esta es la forma segura de crear conexiones a un servidor SMTP/
    POP3 a través de Internet. Asigne a la entrada
    «AllowTcpForwarding» con «yes» en «/etc/ssh/sshd_config» del
    equipo remoto.

6.3.8. Apagar un sistema remoto con SSH

    Se necesita proteger el proceso que ejecuta «shutdown -h now»
    (ver Sección 1.1.8, “Cómo apagar el sistema”) de la finalización
    de ssh utilizando la orden at(1) (ver Sección 9.4.13,
    “Planificación una vez de las tareas”) como sigue.

    # echo "shutdown -h now" | at now

    Otra forma de obtener el mismo resultado es ejecutar «shutdown -h
    now» en una sesión de screen(1) (ver Sección 9.1.2, “El programa
    screen”).

6.3.9. Resolución de problemas de SSH

    Si tiene problemas, compruebe la configuración de los permisos de
    los archivos y ejecute ssh con la opción «-v».

    Si es usted superusuario y tiene problemas con el cortafuegos
    utilice la opción «-p» ; esto evita la utilización de los puertos
    del servidor entre 1 — 1023.

    Si las conexiones ssh a un sitio remoto de repente deja de
    funcionar, puede ser que lo tenga que solucionar el administrador
    de sistemas, normalmente un cambio de la «clave_de_equipo»
    durante el mantenimiento del sistema. Tras estar seguro de que
    nadie intenta suplantar al equipo remoto de algún modo
    inteligente, uno puede recuperar la conexión eliminando la
    entrada «clave_de_equipo» en «~/.ssh/known_hosts» del equipo
    local.

6.4. Servidor de impresión y utilidades

    En el antiguo sistema tipo Unix, el BSD Demonio de impresión en
    línea (lpd) era el estándar y el formato de impresión estándar
    del software libre clásico era PostScript (PS). Se utilizó algún
    sistema de filtro junto con Ghostscript para permitir la
    impresión en la impresora no PostScript. Ver Sección 11.4.1,
    “Ghostscript”.

    En el sistema Debian moderno, el Common UNIX Printing System
    (CUPS) es el estándar de facto y el formato de impresión estándar
    del software libre moderno es Portable Document Format (PDF).

    The CUPS uses Internet Printing Protocol (IPP). The IPP is the
    cross-platform de facto standard for remote printing with
    bi-directional communication capability.

    Gracias a la funcionalidad de autoconversión dependiente del
    formato del archivo del sistema CUPS, simplemente ofrecer
    cualquier dato a la orden lpr debería generar la salida de
    impresión esperada. (En CUPS, lpr se puede activar mediante la
    instalación del paquete cups-bsd).

    El sistema Debian tiene paquetes importantes de utilidades y
    servidores de impresión.

    Tabla 6.11. Relación de las utilidades y servidores de impresión

    +--------------------------------------------------------------------+
    |         paquete         |popularidad|tamaño| puerto  | descripción |
    |-------------------------+-----------+------+---------+-------------|
    |                         |           |      |         |BSD lpr/lpd  |
    |lpr                      |V:2.1,     |378   |printer  |(demonio de  |
    |                         |I:2.5      |      |(515)    |impresión en |
    |                         |           |      |         |línea)       |
    |-------------------------+-----------+------+---------+-------------|
    |                         |           |      |         |Servidor CUPS|
    |cups                     |V:98, I:446|1088  |IPP (631)|de Impresión |
    |                         |           |      |         |en Internet  |
    |-------------------------+-----------+------+---------+-------------|
    |                         |           |      |         |Órdenes de   |
    |                         |           |      |         |impresión    |
    |                         |           |      |         |System V para|
    |                         |           |      |         |CUPS: lp(1), |
    |cups-client              |V:118,     |429   |, ,      |lpstat(1),   |
    |                         |I:458      |      |         |lpoptions(1),|
    |                         |           |      |         |cancel(1),   |
    |                         |           |      |         |lpmove(8),   |
    |                         |           |      |         |lpinfo(8),   |
    |                         |           |      |         |lpadmin(8), …|
    |-------------------------+-----------+------+---------+-------------|
    |                         |           |      |         |Órdenes de   |
    |                         |           |      |         |impresión BSD|
    |cups-bsd                 |V:34, I:186|131   |, ,      |para CUPS:   |
    |                         |           |      |         |lpr(1), lpq  |
    |                         |           |      |         |(1), lprm(1),|
    |                         |           |      |         |lpc(8)       |
    |-------------------------+-----------+------+---------+-------------|
    |                         |           |      |No       |controladores|
    |printer-driver-gutenprint|V:11, I:56 |1117  |aplicable|de impresión |
    |                         |           |      |         |para CUPS    |
    +--------------------------------------------------------------------+


    Sugerencia
   
    Puede configurar su sistema CUPS accediendo mediante su navegador
    a «http://localhost:631/« .

6.5. Servidores de aplicaciones en otras redes

    Aquí hay otros servidores de aplicaciones de red.

    Tabla 6.12. Relación de los servidores de aplicaciones de red

    +---------------------------------------------------------------+
    |     paquete     |popularidad|tamaño|protocolo|  descripción   |
    |-----------------+-----------+------+---------+----------------|
    |telnetd          |V:0.3,     |55    |TELNET   |servidor TELNET |
    |                 |I:1.6      |      |         |                |
    |-----------------+-----------+------+---------+----------------|
    |nfs-kernel-server|V:47, I:55 |830   |NFS      |Compatición de  |
    |                 |           |      |         |archivos Unix   |
    |-----------------+-----------+------+---------+----------------|
    |                 |           |      |         |Compartición de |
    |samba            |V:109,     |5053  |SMB      |archivos e      |
    |                 |I:123      |      |         |impresoras en   |
    |                 |           |      |         |Windows         |
    |-----------------+-----------+------+---------+----------------|
    |                 |           |      |         |Compartición de |
    |                 |V:0.74,    |      |         |archivos e      |
    |netatalk         |I:0.97     |933   |ATP      |impresoras de   |
    |                 |           |      |         |Apple/Mac       |
    |                 |           |      |         |(AppleTalk)     |
    |-----------------+-----------+------+---------+----------------|
    |proftpd-basic    |V:3.9,     |452   |FTP      |Descarga de     |
    |                 |I:9.2      |      |         |archivo general |
    |-----------------+-----------+------+---------+----------------|
    |apache2          |V:178,     |586   |HTTP     |Servidor web    |
    |                 |I:218      |      |         |general         |
    |-----------------+-----------+------+---------+----------------|
    |squid            |V:9.3,     |9358  |, ,      |Servidor proxy  |
    |                 |I:9.9      |      |         |web general     |
    |-----------------+-----------+------+---------+----------------|
    |                 |           |      |         |Direcciones IP  |
    |bind9            |V:35, I:37 |885   |DNS      |para otros      |
    |                 |           |      |         |equipos         |
    |-----------------+-----------+------+---------+----------------|
    |kea              |I:0.57     |244   |DHCP     |Dirección IP de |
    |                 |           |      |         |el cliente mismo|
    +---------------------------------------------------------------+


    El Protocolo de Sistema de Archivo Común de Internet (Common
    Internet File System Protocol, CIFS) es el mismo protocolo que
    Servidor de Mensajes de Bloque (Server Message Block, SMB) y se
    utiliza de forma generalizada en Microsoft Windows.

    Sugerencia
   
    Ver Sección 4.5.2, “La actual gestión centralizada de sistemas”
    para la integración de los servidores de sistema.

    Sugerencia

    La resolución del nombre del equipo normalmente se realiza por
    medio del servidor de DNS. Para las direcciones IP del equipo
    asignadas de forma dinámica por DHCP, un DNS Dinámico se puede
    configurar para la resolución de nombres utilizando bind9 y kea
    como se describe en lapágina wiki de Debian sobre DDNS.

    Sugerencia

    La utilización de un servidor proxy como squid es muy eficiente
    para ahorrar ancho de banda ya que utiliza un servidor espejo
    local con todo el contenido del archivo Debian.

6.6. Otros clientes de aplicaciones de red

    Aquí están otro clientes de aplicaciones de red.

    Tabla 6.13. Relación de clientes de aplicaciones de red

    +---------------------------------------------------------------+
    |     paquete      |popularidad|tamaño|protocolo | descripción  |
    |------------------+-----------+------+----------+--------------|
    |netcat-traditional|V:50, I:904|139   |TCP/IP    |navaja suiza  |
    |                  |           |      |          |para TCP/IP   |
    |------------------+-----------+------+----------+--------------|
    |                  |           |      |          |TCP/IP swiss  |
    |                  |           |      |          |army knife    |
    |netcat-openbsd    |V:22, I:120|105   |TCP/IP    |with support  |
    |                  |           |      |          |for IPv6,     |
    |                  |           |      |          |proxies, and  |
    |                  |           |      |          |Unix sockets  |
    |------------------+-----------+------+----------+--------------|
    |                  |           |      |          |Binarios de la|
    |                  |           |      |          |capa de       |
    |                  |           |      |          |conexión      |
    |openssl           |V:847,     |2532  |SSL       |segura(SSL) y |
    |                  |I:996      |      |          |herramientas  |
    |                  |           |      |          |de            |
    |                  |           |      |          |criptografía  |
    |                  |           |      |          |asociadas     |
    |------------------+-----------+------+----------+--------------|
    |stunnel4          |V:6.2,     |24    |, ,       |recubrimiento |
    |                  |I:9.3      |      |          |universal SSL |
    |------------------+-----------+------+----------+--------------|
    |telnet            |V:11, I:215|55    |TELNET    |cliente TELNET|
    |------------------+-----------+------+----------+--------------|
    |nfs-common        |V:150,     |1139  |NFS       |Compatición de|
    |                  |I:197      |      |          |archivos Unix |
    |------------------+-----------+------+----------+--------------|
    |                  |           |      |          |Cliente para  |
    |                  |           |      |          |la            |
    |smbclient         |V:26, I:206|2088  |SMB       |compartición  |
    |                  |           |      |          |de archivos e |
    |                  |           |      |          |impresoras con|
    |                  |           |      |          |MS Windows    |
    |------------------+-----------+------+----------+--------------|
    |                  |           |      |          |Órdenes de    |
    |                  |           |      |          |montado y     |
    |cifs-utils        |V:33, I:119|351   |, ,       |desmontado de |
    |                  |           |      |          |archivos      |
    |                  |           |      |          |remotos MS    |
    |                  |           |      |          |Windows       |
    |------------------+-----------+------+----------+--------------|
    |wget              |V:185,     |3784  |HTTP y FTP|descargas web |
    |                  |I:982      |      |          |              |
    |------------------+-----------+------+----------+--------------|
    |curl              |V:244,     |512   |, ,       |, ,           |
    |                  |I:716      |      |          |              |
    |------------------+-----------+------+----------+--------------|
    |                  |           |      |          |Cliente de    |
    |transmission-gtk  |V:11, I:156|6259  |BitTorrent|BitTorrent    |
    |                  |           |      |          |(GTK)         |
    |------------------+-----------+------+----------+--------------|
    |                  |V:0.7,     |      |          |Cliente de    |
    |transmission-qt   |I:2.5      |6213  |, ,       |BitTorrent    |
    |                  |           |      |          |(Qt)          |
    |------------------+-----------+------+----------+--------------|
    |                  |V:1.4,     |      |          |Cliente de    |
    |ktorrent          |I:5.1      |5031  |, ,       |BitTorrent    |
    |                  |           |      |          |(Qt)          |
    |------------------+-----------+------+----------+--------------|
    |                  |           |      |          |Cliente de    |
    |qbittorrent       |V:8, I:22  |15261 |, ,       |BitTorrent    |
    |                  |           |      |          |(Qt)          |
    |------------------+-----------+------+----------+--------------|
    |                  |           |      |          |host(1) para  |
    |bind9-host        |V:128,     |137   |DNS       |bind9,        |
    |                  |I:940      |      |          |«Prioridad:   |
    |                  |           |      |          |estándar»     |
    |------------------+-----------+------+----------+--------------|
    |                  |           |      |          |dig(1) para   |
    |dnsutils          |V:5, I:161 |23    |, ,       |bind,         |
    |                  |           |      |          |«Prioridad:   |
    |                  |           |      |          |estándar»     |
    |------------------+-----------+------+----------+--------------|
    |                  |           |      |          |obtiene datos |
    |ldap-utils        |V:10, I:58 |782   |LDAP      |del servidor  |
    |                  |           |      |          |LDAP          |
    +---------------------------------------------------------------+


6.7. Diagnóstico de los demonios del sistema

    El programa telnet permite la conexión manual a los demonios del
    sistema para evaluarlos.

    Para probar un servicio POP3 sencillo, intente lo siguiente

    $ telnet mail.ispname.net pop3

    Para la prueba del servicio POP3 con TLS/SSL activado por parte
    de algún ISP, necesitará activar TLS/SSL en el cliente de telnet
    mediante los paquetes telnet-ssl o openssl.

    $ telnet -z ssl pop.gmail.com 995

    $ openssl s_client -connect pop.gmail.com:995

    Los siguientes RFCs aportan el conocimiento necesario sobre cada
    uno de los demonios del sistema.

    Tabla 6.14. Relación de RFCs comúnes

    +---------------------------------------------------------------+
    |      RFC      |                  descripción                  |
    |---------------+-----------------------------------------------|
    |rfc1939 y      |servicio POP3                                  |
    |rfc2449        |                                               |
    |---------------+-----------------------------------------------|
    |rfc3501        |servicio IMAP4                                 |
    |---------------+-----------------------------------------------|
    |rfc2821        |servicio SMTP                                  |
    |(rfc821)       |                                               |
    |---------------+-----------------------------------------------|
    |rfc2822        |Formato de archivo de correo                   |
    |(rfc822)       |                                               |
    |---------------+-----------------------------------------------|
    |rfc2045        |Extensión de Correo de Internet Multipropósito |
    |               |(MIME)                                         |
    |---------------+-----------------------------------------------|
    |rfc819         |servicio DNS                                   |
    |---------------+-----------------------------------------------|
    |rfc2616        |servicio HTTP                                  |
    |---------------+-----------------------------------------------|
    |rfc2396        |definición de URI                              |
    +---------------------------------------------------------------+


    La utilización de los puertos esta recogida en «/etc/services».

Capítulo 7. Sistema GUI (interfaz gráfica de usuario)

7.1. Entorno de escritorio GUI

    Hay varias opciones para el entorno de escritorio completo GUI en
    el sistema Debian.

    Tabla 7.1. Lista del entorno del escritorio

    +---------------------------------------------------------------+
    |     paquete de tareas      |popularidad|tamaño|  descripción  |
    |----------------------------+-----------+------+---------------|
    |task-gnome-desktop          |I:190      |9     |GNOME entorno  |
    |                            |           |      |del escritorio |
    |----------------------------+-----------+------+---------------|
    |task-xfce-desktop           |I:88       |9     |Entorno de     |
    |                            |           |      |escritorio Xfce|
    |----------------------------+-----------+------+---------------|
    |                            |           |      |KDE Plasma     |
    |task-kde-desktop            |I:93       |6     |entorno de     |
    |                            |           |      |escritorio     |
    |----------------------------+-----------+------+---------------|
    |task-mate-desktop           |I:32       |9     |MATE entorno de|
    |                            |           |      |escritorio     |
    |----------------------------+-----------+------+---------------|
    |                            |           |      |Cinnamon       |
    |task-cinnamon-desktop       |I:37       |9     |entorno de     |
    |                            |           |      |escritorio     |
    |----------------------------+-----------+------+---------------|
    |task-lxde-desktop           |I:20       |9     |LXDE entorno de|
    |                            |           |      |escritorio     |
    |----------------------------+-----------+------+---------------|
    |task-lxqt-desktop           |I:16       |9     |LXQt entorno de|
    |                            |           |      |escritorio     |
    |----------------------------+-----------+------+---------------|
    |                            |           |      |GNOME Flashback|
    |task-gnome-flashback-desktop|I:9.8      |6     |entorno de     |
    |                            |           |      |escritorio     |
    +---------------------------------------------------------------+


    Sugerencia

    Los paquetes de dependencia seleccionados por un metapaquete de
    tareas pueden no estar sincronizados con el último estado de
    transición del paquete en el entorno inestable/de prueba de
    Debian. Para task-gnome-desktop, es posible que deba ajustar las
    selecciones de paquetes de la siguiente manera:

      * Inicia aptitude con sudo aptitude -u (8).

      * Mueve el cursor a "Tareas" y presiona Enter.

      * Mueva el cursor a "Usuario final" y presiona "Enter".

      * Mueve el cursor a "GNOME" y presiona "Enter".
   
      * Mueve el cursor a task-gnome-desktop y presiona "Enter".

      * Mueve el cursor a "Depende" y presione "m" (selección
        manual).

      * Mueve el cursor a "Recomendado" y presiona "m" (selección
        manual).

      * Mueva el cursor a "task-gnome-desktop y presione "-".
        (soltar)

      * Ajuste los paquetes seleccionados y elimine los paquetes
        problemáticos que causan conflictos de paquetes.

      * Presiona "g" para comenzar la instalación.

    Este capítulo se centrará principalmente en el entorno de
    escritorio predeterminado de Debian: task-gnome-desktop que
    ofrece GNOME en wayland.

7.2. protocolo de comunicación GUI

    El protocolo de comunicación GUI utilizado en el escritorio GNOME
    puede ser:

      * Wayland (protocolo de visualización del lado del servidor)
        (nativo)

      * Protocolo del núcleo del sistema X Window (vía xwayland)

    Consulte el sitio freedesktop.org para ver en qué se diferencia
    la arquitectura de Wayland de la arquitectura de X Window.

    Desde la perspectiva del usuario, las diferencias se pueden
    resumir coloquialmente como:

      * Wayland es un protocolo de comunicación GUI del mismo host:
        nuevo, más simple, más rápido, sin setuid root binario.
   
      * X Window es un protocolo de comunicación GUI con capacidad de
        red: tradicional, complejo, más lento, setuid root binario

    Para aplicaciones que utilizan el protocolo Wayland, el acceso a
    su contenido de visualización desde un host remoto es compatible
    con VNC o RDP. Ver Sección 7.8, “Escritorio remoto”

    Los servidores X modernos tienen la Extensión de Memoria
    Compartida del MIT y se comunican con los clientes locales X
    utilizando memoria local compartida. Esto evita el canal de
    comunicación entre interprocesos transparentes Xlib de la red y
    mejora el rendimiento. Esta situación fue el antecedente de la
    creación de Wayland como un protocolo de comunicación GUI solo
    local.

    Usando el programa xeyes iniciado desde la terminal GNOME, puede
    verificar el protocolo de comunicación GUI utilizado por cada
    aplicación GUI.

     $ xeyes

      * Si el cursor del ratón está en una aplicación como "Terminal
        GNOME" que usa el protocolo del servidor de pantalla Wayland,
        los ojos no se mueven con el cursor del ratón.
   
      * Si el cursor del ratón está en una aplicación como "xterm",
        que usa el protocolo del núcleo de X Window System, los ojos
        se mueven con el cursor del ratón y exponen la naturaleza no
        tan aislada de la arquitectura X Window.

    A partir de abril de 2021, muchas aplicaciones GUI populares,
    como GNOME y LibreOffice (LO), han migrado al protocolo del
    servidor de visualización de Wayland. Veo xterm, gitk, chromium,
    firefox, gimp, dia, y las aplicaciones de KDE aún utilizan el
    protocolo central del sistema X Window.

    Nota

    Tanto para xwayland en Wayland como para el sistema X Window
    nativo, el antiguo archivo de configuración del servidor X "/etc/
    X11/xorg.conf" no debería existir en el sistema. Los dispositivos
    gráficos y de entrada ahora están configurados por el kernel con
    DRM, KMS y udev. El servidor X nativo se ha reescrito para
    usarlos. Ver "soporte de modo de vídeo predeterminado de modedb"
    en la documentación del kernel de Linux.

7.3. infraestructura GUI

    Estos son los conocidos paquetes del marco GUI para GNOME en el
    entorno de Wayland.

    Tabla 7.2. Lista de paquetes notables de la infraestructura GUI

    +---------------------------------------------------------------+
    |                           |           |tamaño |               |
    |          paquete          |popularidad|  del  |  descripción  |
    |                           |           |paquete|               |
    |---------------------------+-----------+-------+---------------|
    |                           |           |       |Los GNOME      |
    |mutter                     |V:1, I:24  |215    |mutter window  |
    |                           |           |       |manager [auto] |
    |---------------------------+-----------+-------+---------------|
    |                           |           |       |Un servidor X  |
    |xwayland                   |V:252,     |2540   |ejecutándose   |
    |                           |I:332      |       |sobre wayland  |
    |                           |           |       |[auto]         |
    |---------------------------+-----------+-------+---------------|
    |                           |           |       |Daemon de      |
    |                           |V:135,     |       |escritorio     |
    |gnome-remote-desktop       |I:238      |2444   |remoto para    |
    |                           |           |       |GNOME usando   |
    |                           |           |       |PipeWire [auto]|
    |---------------------------+-----------+-------+---------------|
    |                           |           |       |Ajustes        |
    |gnome-tweaks               |V:16, I:231|1145   |avanzados de la|
    |                           |           |       |configuración  |
    |                           |           |       |para GNOME     |
    |---------------------------+-----------+-------+---------------|
    |                           |           |       |Herramienta    |
    |                           |           |       |para activar / |
    |gnome-shell-extension-prefs|V:7, I:126 |72     |desactivar las |
    |                           |           |       |extensiones de |
    |                           |           |       |GNOME Shell    |
    +---------------------------------------------------------------+


    Aquí, "[auto]" significa que estos paquetes se instalan
    automáticamente cuando se instala task-gnome-desktop.

    Sugerencia

    gnome-tweaks es la utilidad de configuración indispensable. Por
    ejemplo:

      * Puede forzar la "Sobre amplificación" del volumen del sonido
        desde "General".

      * Puede hacer que "Mayúsculas" se convierta en "Esc" desde
        "Keyboard & Mouse" -> "Keyboard" -> "Additional Layout
        Option".

    Sugerencia

    Las características detalladas del entorno de escritorio de GNOME
    pueden configurarse con las utilidades que se inician escribiendo
    "configuración", "ajustes" o "extensiones" después de pulsar la
    tecla Super.

7.4. Aplicaciones GUI

    Ahora hay disponible muchas aplicaciones GUI útiles en Debian.
    Instalar software como scribus (KDE) en el entorno de escritorio
    GNOME es correcta ya que la funcionalidad correspondiente no esta
    disponible en el entorno de escritorio GNOME. Pero la instalación
    de demasiados paquetes con funcionalidades solapadas puede
    saturar su sistema..

    Aquí hay una lista de aplicaciones GUI que me llamaron la
    atención.

    Tabla 7.3. Lista de aplicaciones GUI destacadas

    +---------------------------------------------------------------+
    |                   |           |tamaño |          |            |
    |      paquete      |popularidad|  del  |   tipo   |descripción |
    |                   |           |paquete|          |            |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |Gestor de   |
    |                   |           |       |          |información |
    |                   |           |       |          |personal    |
    |evolution          |V:26, I:228|488    |GNOME     |(trabajo en |
    |                   |           |       |          |grupo y     |
    |                   |           |       |          |correo      |
    |                   |           |       |          |electrónico)|
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |Cliente de  |
    |                   |           |       |          |correo      |
    |thunderbird        |V:42, I:105|274189 |GTK       |electrónico |
    |                   |           |       |          |(Mozilla    |
    |                   |           |       |          |Thunderbird)|
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |Gestor de   |
    |                   |           |       |          |información |
    |                   |           |       |          |personal    |
    |kontact            |V:1, I:11  |2305   |KDE       |(trabajo en |
    |                   |           |       |          |grupo y     |
    |                   |           |       |          |correo      |
    |                   |           |       |          |electrónico)|
    |-------------------+-----------+-------+----------+------------|
    |libreoffice-writer |V:98, I:422|33285  |LO        |procesador  |
    |                   |           |       |          |de textos   |
    |-------------------+-----------+-------+----------+------------|
    |abiword            |V:0.9,     |3596   |GNOME     |procesador  |
    |                   |I:4.9      |       |          |de textos   |
    |-------------------+-----------+-------+----------+------------|
    |calligrawords      |V:0.3,     |6932   |KDE       |procesador  |
    |                   |I:3.1      |       |          |de textos   |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |desktop     |
    |                   |           |       |          |publishing  |
    |scribus            |V:1, I:13  |32423  |KDE       |editor para |
    |                   |           |       |          |editar      |
    |                   |           |       |          |archivos PDF|
    |-------------------+-----------+-------+----------+------------|
    |glabels            |V:0.4,     |1283   |GNOME     |editor de   |
    |                   |I:2.7      |       |          |etiquetas   |
    |-------------------+-----------+-------+----------+------------|
    |libreoffice-calc   |V:94, I:419|28299  |LO        |hoja de     |
    |                   |           |       |          |cálculo     |
    |-------------------+-----------+-------+----------+------------|
    |gnumeric           |V:3, I:11  |9958   |GNOME     |hoja de     |
    |                   |           |       |          |cálculo     |
    |-------------------+-----------+-------+----------+------------|
    |calligrasheets     |V:0.2,     |13593  |KDE       |hoja de     |
    |                   |I:2.0      |       |          |cálculo     |
    |-------------------+-----------+-------+----------+------------|
    |libreoffice-impress|V:81, I:417|2443   |LO        |presentación|
    |-------------------+-----------+-------+----------+------------|
    |calligrastage      |V:0.1,     |6011   |KDE       |presentación|
    |                   |I:1.9      |       |          |            |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |gestión de  |
    |libreoffice-base   |V:20, I:71 |4984   |LO        |bases de    |
    |                   |           |       |          |datos       |
    |-------------------+-----------+-------+----------+------------|
    |                   |V:0.05,    |       |          |gestión de  |
    |kexi               |I:0.76     |7565   |KDE       |bases de    |
    |                   |           |       |          |datos       |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |editor de   |
    |libreoffice-draw   |V:82, I:418|10995  |LO        |gráficos    |
    |                   |           |       |          |vectoriales |
    |                   |           |       |          |(dibujo)    |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |editor de   |
    |inkscape           |V:12, I:78 |112538 |GNOME     |gráficos    |
    |                   |           |       |          |vectoriales |
    |                   |           |       |          |(dibujo)    |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |editor de   |
    |karbon             |V:0.2,     |3958   |KDE       |gráficos    |
    |                   |I:2.4      |       |          |vectoriales |
    |                   |           |       |          |(dibujo)    |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |editor de   |
    |                   |           |       |          |diagramas de|
    |dia                |V:1, I:17  |3802   |GTK       |flujos y    |
    |                   |           |       |          |otros       |
    |                   |           |       |          |diagramas   |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |editor de   |
    |                   |           |       |          |gráficos de |
    |gimp               |V:44, I:216|32791  |GTK       |mapas de    |
    |                   |           |       |          |bits        |
    |                   |           |       |          |(Pintura)   |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |organizador |
    |shotwell           |V:14, I:246|6334   |GTK       |de fotos    |
    |                   |           |       |          |digitales   |
    |-------------------+-----------+-------+----------+------------|
    |                   |V:1.5,     |       |          |organizador |
    |digikam            |I:8.3      |324    |KDE       |de fotos    |
    |                   |           |       |          |digitales   |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |mesa de luz |
    |darktable          |V:4, I:11  |35876  |GTK       |y cuarto    |
    |                   |           |       |          |oscuro para |
    |                   |           |       |          |fotógrafos  |
    |-------------------+-----------+-------+----------+------------|
    |planner            |V:0.2,     |1400   |GNOME     |gestión de  |
    |                   |I:4.4      |       |          |proyectos   |
    |-------------------+-----------+-------+----------+------------|
    |calligraplan       |V:0.2,     |23545  |KDE       |gestión de  |
    |                   |I:3.0      |       |          |proyectos   |
    |-------------------+-----------+-------+----------+------------|
    |gnucash            |V:2.2,     |29455  |GNOME     |finanzas    |
    |                   |I:7.0      |       |          |personales  |
    |-------------------+-----------+-------+----------+------------|
    |homebank           |V:0.3,     |3194   |GTK       |finanzas    |
    |                   |I:1.6      |       |          |personales  |
    |-------------------+-----------+-------+----------+------------|
    |lilypond           |V:0.7,     |16924  |-         |Compositor  |
    |                   |I:5.5      |       |          |de música   |
    |-------------------+-----------+-------+----------+------------|
    |kmymoney           |V:0.5,     |18945  |KDE       |finanzas    |
    |                   |I:1.9      |       |          |personales  |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |sistema de  |
    |                   |           |       |Aplicación|diseño      |
    |librecad           |V:1, I:14  |9164   |Qt        |asistido por|
    |                   |           |       |          |ordenador   |
    |                   |           |       |          |(CAD) (2D)  |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |sistema de  |
    |                   |           |       |Aplicación|diseño      |
    |freecad            |V:1, I:21  |112    |Qt        |asistido por|
    |                   |           |       |          |ordenador   |
    |                   |           |       |          |(CAD) (3D)  |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |software de |
    |                   |           |       |          |diseño de   |
    |kicad              |V:3, I:15  |212240 |GTK       |circuitos   |
    |                   |           |       |          |impresos y  |
    |                   |           |       |          |esquemas    |
    |                   |           |       |          |electrónicos|
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |interfaz de |
    |xsane              |V:9, I:129 |1512   |GTK       |usuario de  |
    |                   |           |       |          |escáner     |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |editor      |
    |libreoffice-math   |V:76, I:421|1912   |LO        |matemático  |
    |                   |           |       |          |de fórmulas/|
    |                   |           |       |          |ecuaciones  |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |gestión de  |
    |                   |           |       |          |bibliotecas |
    |calibre            |V:7, I:24  |65193  |KDE       |y conversor |
    |                   |           |       |          |de libros   |
    |                   |           |       |          |electrónicos|
    |-------------------+-----------+-------+----------+------------|
    |                   |V:0.7,     |       |          |lector de   |
    |fbreader           |I:5.8      |3827   |GTK       |libros      |
    |                   |           |       |          |electrónicos|
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |visor de    |
    |evince             |V:72, I:285|942    |GNOME     |documentos  |
    |                   |           |       |          |(pdf)       |
    |-------------------+-----------+-------+----------+------------|
    |                   |           |       |          |visor de    |
    |okular             |V:33, I:131|4419   |KDE       |documentos  |
    |                   |           |       |          |(pdf)       |
    |-------------------+-----------+-------+----------+------------|
    |x11-apps           |V:30, I:445|2461   |Aplicación|xeyes(1),   |
    |                   |           |       |X pura    |etc.        |
    |-------------------+-----------+-------+----------+------------|
    |                   |V:225,     |       |Aplicación|xev(1),     |
    |x11-utils          |I:555      |651    |X pura    |xwininfo(1),|
    |                   |           |       |          |etc..       |
    +---------------------------------------------------------------+


7.5. Directorios de los usuarios

    Los nombres por defecto de los directorios de usuario como "~/
    Desktop", "~/Documents", ..., utilizados por el entorno Desktop
    dependen de la configuración regional utilizada para la
    instalación del sistema. Puede restablecerlas al Inglés mediante:

     $ LANGUAGE=C xdg-user-dirs-update --force

    Luego mueve manualmente todos los datos a los directorios más
    nuevos. Ver xdg-user-dirs-update(1).

    También puede asignarles cualquier nombre editando "~/.config/
    user-dirs.dirs". Ver user-dirs.dirs(5).

7.6. Tipografía

    Hay disponibles muchas útiles fuentes escalables para los
    usuarios de Debian. Es asunto del usuario evitar la redundancia y
    cómo configurar partes de las fuentes instaladas para que se
    deshabiliten. De lo contrario, las opciones de fuente inútiles
    pueden saturar los menús de su aplicación GUI.

    El sistema Debian usa la librería FreeType 2.0 para rasterizar
    muchos formatos de fuentes escalables para pantalla e impresión:

      * Fuentes Type 1 (PostScript) que usan curvas de Bézier cúbicas
        (formato casi obsoleto)

      * fuentes TrueType que usan curvas de Bézier cuadráticas
        (formato de buena elección)

      * fuentes OpenType que usan curvas de Bézier(mejor formato a
        elegir)

7.6.1. Tipos de letras fundamentales

    La siguiente tabla se ha compilado con la esperanza de ayudar a
    los usuarios a elegir las fuentes escalables apropiadas con una
    clara comprensión de la compatibilidad métrica y la cobertura de
    glifos. La mayoría de las fuentes cubren todos los caracteres
    latinos, griegos y cirílicos. La elección final de las fuentes
    activadas también puede verse afectada por su estética. Estos
    tipos de letra pueden utilizarse para mostrarse en la pantalla o
    para la imprimirlas.

    Tabla 7.4. Lista de notables fuentes TrueType y OpenType

    +--------------------------------------------------------------------------+
    |                         |           |      |    |     |    | Información |
    |         paquete         |popularidad|tamaño|sans|serif|mono|  sobre la   |
    |                         |           |      |    |     |    |   fuente    |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |V:177,     |      |    |     |    |Cantarell    |
    |fonts-cantarell          |I:290      |224   |59  |-    |-   |(GNOME 3,    |
    |                         |           |      |    |     |    |pantalla)    |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |           |      |    |     |    |Fuentes Noto |
    |fonts-noto               |I:151      |30    |61  |63   |40  |(Google,     |
    |                         |           |      |    |     |    |multilingüe  |
    |                         |           |      |    |     |    |con CJK)     |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |           |      |    |     |    |DejaVu (GNOME|
    |                         |           |      |    |     |    |2,           |
    |fonts-dejavu             |I:388      |34    |58  |68   |40  |MCM:Verdana, |
    |                         |           |      |    |     |    |extendida    |
    |                         |           |      |    |     |    |Bitstream    |
    |                         |           |      |    |     |    |Vera)        |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |           |      |    |     |    |Liberation   |
    |                         |           |      |    |     |    |fonts para   |
    |fonts-liberation2        |V:49, I:180|15    |56  |60   |40  |LibreOffice  |
    |                         |           |      |    |     |    |(Red Hat,    |
    |                         |           |      |    |     |    |MCMATC)      |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |           |      |    |     |    |Chrome OS:   |
    |                         |           |      |    |     |    |Arimo, Tinos |
    |fonts-croscore           |V:20, I:37 |5260  |56  |60   |40  |y Cousine    |
    |                         |           |      |    |     |    |(Google,     |
    |                         |           |      |    |     |    |MCMATC)      |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |           |      |    |     |    |Chrome OS:   |
    |fonts-crosextra-carlito  |V:20, I:93 |2696  |57  |-    |-   |Carlito      |
    |                         |           |      |    |     |    |(Google,     |
    |                         |           |      |    |     |    |MCM:Calibri )|
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |           |      |    |     |    |Chrome OS:   |
    |                         |           |      |    |     |    |Caladea      |
    |fonts-crosextra-caladea  |V:12, I:87 |347   |-   |55   |-   |(Google,     |
    |                         |           |      |    |     |    |MCM:Cambria )|
    |                         |           |      |    |     |    |(solo en     |
    |                         |           |      |    |     |    |latín)       |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |           |      |    |     |    |GNU FreeFont |
    |fonts-freefont-ttf       |V:78, I:204|14460 |57  |59   |40  |(extendido   |
    |                         |           |      |    |     |    |URW Nimbus)  |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |           |      |    |     |    |Debian       |
    |                         |V:207,     |      |    |     |    |task-desktop,|
    |fonts-quicksand          |I:451      |392   |56  |-    |-   |Quicksand    |
    |                         |           |      |    |     |    |(pantalla,   |
    |                         |           |      |    |     |    |sólo latín)  |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |           |      |    |     |    |Una          |
    |                         |           |      |    |     |    |tipografía   |
    |fonts-hack               |V:33, I:136|2507  |-   |-    |40 P|diseñada para|
    |                         |           |      |    |     |    |el código    |
    |                         |           |      |    |     |    |fuente Hack  |
    |                         |           |      |    |     |    |(Facebook)   |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |fonts-sil-gentiumplus    |I:29       |14345 |-   |54   |-   |Gentium SIL  |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |fonts-sil-charis         |V:1, I:28  |6704  |-   |59   |-   |Charis SIL   |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |           |      |    |     |    |URW Nimbus   |
    |                         |V:185,     |      |    |     |    |(Nimbus Sans,|
    |fonts-urw-base35         |I:531      |15558 |56  |60   |40  |Roman No. 9  |
    |                         |           |      |    |     |    |L, Mono L,   |
    |                         |           |      |    |     |    |MCAHTC)      |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |V:2.1,     |      |    |     |    |Fuentes de   |
    |fonts-ubuntu             |I:4.9      |4339  |58  |-    |33 P|Ubuntu       |
    |                         |           |      |    |     |    |(pantalla)   |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |V:0.3,     |      |    |     |    |Fuentes para |
    |fonts-terminus           |I:3.9      |451   |-   |-    |33  |terminales   |
    |                         |           |      |    |     |    |retro.       |
    |-------------------------+-----------+------+----+-----+----+-------------|
    |                         |           |      |    |     |    |Descargador  |
    |                         |           |      |    |     |    |de fuentes no|
    |ttf-mscorefonts-installer|V:1, I:41  |85    |¿56?|60   |40  |libres de    |
    |                         |           |      |    |     |    |Microsoft    |
    |                         |           |      |    |     |    |(ver más     |
    |                         |           |      |    |     |    |abajo)       |
    +--------------------------------------------------------------------------+


    Aquí:

      * "MCM" significa "métrica compatible con fuentes
        proporcionadas por Microsoft"

      * "MCMATC" significa "métrica compatible con las fuentes
        proporcionadas por Microsoft: Arial, Times New Roman, Courier
        New"

      * "MCAHTC" significa "métrica compatible con las fuentes
        proporcionadas por Adobe: Helvetica, Times, Courier"

      * Los números en las columnas de tipo de fuente representan el
        ancho "M" relativo aproximado para la fuente del mismo tamaño
        de punto.

      * La "P" en columnas de tipo de fuente mono representa su
        facilidad de uso para la programación con "0"/"O" y "1"/"I"/
        "l" claramente distinguibles.

      * El paquete ttf-mscorefonts-installer descarga Microsoft
        "fuentes Core para la Web" e instala Arial, Times New Roman,
        Courier New, Verdana, ... . Estos datos de fuentes instaladas
        son datos no libres.

    Muchas fuentes latinas libres tienen su linaje trazado hasta la
    familia URW Nimbus o Bitstream Vera.

    Sugerencia

    Si su configuración regional necesita fuentes que no están bien
    cubiertas por las anteriores, utilice aptitude para verificar los
    paquetes de tareas enumerados en "Tasks" -> "Localization". Los
    paquetes de fuentes enumerados como "Depends:" o "Recommends:" en
    la tarea de localización de paquetes son los principales
    candidatos.

7.6.2. Rasterización de fuentes

    Debian usa FreeType para rasterizar fuentes. Su infraestructura
    de selección de fuentes la proporciona la biblioteca de
    configuración de fuentes Fontconfig.

    Tabla 7.5. Lista de entornos de fuentes notables y paquetes
    relacionados

    +---------------------------------------------------------------+
    |       paquete       |popularidad|tamaño|     descripción      |
    |---------------------+-----------+------+----------------------|
    |                     |V:584,     |      |Biblioteca de         |
    |libfreetype6         |I:997      |1022  |rasterización de      |
    |                     |           |      |fuentes FreeType      |
    |---------------------+-----------+------+----------------------|
    |                     |V:575,     |      |Fontconfig biblioteca |
    |libfontconfig1       |I:815      |344   |de configuración de   |
    |                     |           |      |fuentes               |
    |---------------------+-----------+------+----------------------|
    |fontconfig           |V:467,     |415   |fc-*: comandos CLI    |
    |                     |I:696      |      |para Fontconfig       |
    |---------------------+-----------+------+----------------------|
    |font-manager         |V:2.3,     |1116  |Font Manager: comando |
    |                     |I:6.7      |      |GUI para Fontconfig   |
    |---------------------+-----------+------+----------------------|
    |nautilus-font-manager|V:0.09,    |38    |Extensión Nautilus    |
    |                     |I:0.40     |      |para Font Manager     |
    +---------------------------------------------------------------+


    Sugerencia

    Algunos paquetes de fuentes como fonts-noto* instalan demasiadas
    fuentes. También es posible que desee mantener algunos paquetes
    de fuentes instalados pero deshabilitados en una situación de uso
    normal. Se esperan múltiples glifos para algunos puntos de código
    Unicode debido a la unificación Han y los glifos no deseados
    pueden ser elegidos por la biblioteca Fontconfig no configurada.
    Uno de los casos más molestos es "U+3001 IDEOGRAPHIC COMMA" y
    "U+3002 IDEOGRAPHIC FULL STOP" entre los países CJK. Puede evitar
    esta situación problemática fácilmente configurando la
    disponibilidad de fuentes mediante la interfaz gráfica de usuario
    de Font Manager (font-manager).

    También puedes enumerar el estado de la configuración de la
    fuente desde la línea de comandos.

      * "fc-match(1)" para la fuente predeterminada de fontconfig
   
      * "fc-list(1)" para las fuentes fontconfig disponibles

    Puede configurar el estado de la configuración de la fuente desde
    el editor de texto, pero esto no es trivial. Ver fonts.conf(5).

7.7. Sandbox

    Muchas aplicaciones en Linux, en su mayoría GUI, están
    disponibles en formatos binarios de fuentes que no son de Debian.

      * AppImage: aplicaciones de Linux que se ejecutan en cualquier
        lugar
   
      * FLATHUB -- Aplicaciones para Linux, aquí

      * snapcraft -- El repositorio de aplicaciones para Linux

    Aviso
   
    Los archivos binarios de estos sitios pueden incluir paquetes
    propietarios de software no libre.

    Hay alguna razón de ser para estas distribuciones de formato
    binario para los aficionados al Software Libre que usan Debian,
    ya que pueden acomodar un conjunto limpio de bibliotecas
    utilizadas para cada aplicación por el respectivo desarrollador,
    independiente de las suministradas por Debian.

    El riesgo inherente de ejecutar archivos binarios externos se
    puede reducir mediante el uso del entorno sandbox que aprovecha
    las modernas funciones de seguridad de Linux (ver Sección 4.7.5,
    “Características de seguridad de Linux”).

      * Para binarios de AppImage y algunos sitios upstream,
        ejecútelos en firejail con manual de configuración.

      * Para binarios de FLATHUB, ejecútelos en Flatpak . (No
        requiere configuración manual.)

      * Para archivos binarios de Snapcraft, ejecutarlos en Snap .
        (No requiere configuración manual. Compatible con programas
        daemon.)

    El paquete xdg-desktop-portal proporciona una API estandarizada
    para funciones comunes de escritorio. Ver portal de escritorio
    xdg (flatpack) y portal de escritorio xdg (snap) .

    Tabla 7.6. Lista de entornos sandbox notables y paquetes asociados

    +-------------------------------------------------------------------+
    |           paquete           |popularidad|tamaño|   descripción    |
    |-----------------------------+-----------+------+------------------|
    |                             |           |      |Marco de          |
    |                             |           |      |implementación de |
    |flatpak                      |V:105,     |9080  |aplicaciones      |
    |                             |I:111      |      |Flatpak para      |
    |                             |           |      |aplicaciones de   |
    |                             |           |      |escritorio        |
    |-----------------------------+-----------+------+------------------|
    |                             |           |      |Compatibilidad con|
    |gnome-software-plugin-flatpak|V:29, I:41 |283   |Flatpak para el   |
    |                             |           |      |software GNOME    |
    |-----------------------------+-----------+------+------------------|
    |                             |           |      |Daemon y          |
    |snapd                        |V:61, I:65 |76444 |herramientas que  |
    |                             |           |      |habilitan paquetes|
    |                             |           |      |snap              |
    |-----------------------------+-----------+------+------------------|
    |                             |V:1.5,     |      |Compatibilidad con|
    |gnome-software-plugin-snap   |I:2.3      |145   |Snap para el      |
    |                             |           |      |software GNOME    |
    |-----------------------------+-----------+------+------------------|
    |                             |           |      |portal de         |
    |xdg-desktop-portal           |V:366,     |2291  |integración del   |
    |                             |I:436      |      |escritorio para   |
    |                             |           |      |Flatpak y Snap    |
    |-----------------------------+-----------+------+------------------|
    |                             |V:332,     |      |xdg-desktop-portal|
    |xdg-desktop-portal-gtk       |I:434      |715   |backend para gtk  |
    |                             |           |      |(GNOME)           |
    |-----------------------------+-----------+------+------------------|
    |                             |           |      |xdg-desktop-portal|
    |xdg-desktop-portal-kde       |V:79, I:110|3027  |backend para Qt   |
    |                             |           |      |(KDE)             |
    |-----------------------------+-----------+------+------------------|
    |                             |V:2.1,     |      |xdg-desktop-portal|
    |xdg-desktop-portal-wlr       |I:6.3      |159   |backend para      |
    |                             |           |      |wlroots (Wayland) |
    |-----------------------------+-----------+------+------------------|
    |                             |           |      |un programa de    |
    |                             |V:1.2,     |      |espacio aislado de|
    |firejail                     |I:4.4      |1827  |seguridad SUID    |
    |                             |           |      |firejail para usar|
    |                             |           |      |con AppImage      |
    +-------------------------------------------------------------------+


    Esta tecnología de entorno de espacio aislado es muy parecida a
    las apps en el SO de los teléfonos inteligentes, donde las apps
    se ejecutan bajo accesos de recursos controlados.

    Algunas grandes aplicaciones GUI, como los navegadores web en
    Debian, también usan tecnología de entorno de espacio aislado
    internamente para hacerlas más seguras.

7.8. Escritorio remoto

    Tabla 7.7. Lista de servidores de acceso remoto notables

    El acceso al escritorio y las aplicaciones que usan el protocolo
    Wayland y se ejecutan en el host remoto es compatible con Escritorio
    Remoto GNOME en el host remoto a través de VNC o RDP al cliente
    local.

    El acceso a las capacidades de escritorio de todas las máquinas
    virtuales QEMU es compatible con el protocolo SPICE (el Protocolo
    Simple para Entornos Informáticos Independientes).

    +--------------------------------------------------------------------+
    |         paquete          |popularidad|tamaño|protocolos|descripción|
    |--------------------------+-----------+------+----------+-----------|
    |                          |           |      |          |servidor   |
    |gnome-remote-desktop      |V:135,     |2444  |RDP       |Escritorio |
    |                          |I:238      |      |          |remoto     |
    |                          |           |      |          |GNOME      |
    |--------------------------+-----------+------+----------+-----------|
    |                          |           |      |          |xrdp,      |
    |                          |           |      |          |servidor   |
    |                          |           |      |          |del        |
    |xrdp                      |V:28, I:30 |4666  |RDP       |protocolo  |
    |                          |           |      |          |de         |
    |                          |           |      |          |escritorio |
    |                          |           |      |          |remoto     |
    |                          |           |      |          |(RDP)      |
    |--------------------------+-----------+------+----------+-----------|
    |                          |           |      |          |x11vnc,    |
    |                          |           |      |          |servidor de|
    |x11vnc                    |V:8, I:45  |1863  |RFB (VNC) |protocolo  |
    |                          |           |      |          |framebuffer|
    |                          |           |      |          |remoto     |
    |                          |           |      |          |(VNC)      |
    |--------------------------+-----------+------+----------+-----------|
    |                          |           |      |          |TigerVNC,  |
    |                          |           |      |          |servidor de|
    |tigervnc-standalone-server|V:5, I:15  |2967  |RFB (VNC) |protocolo  |
    |                          |           |      |          |framebuffer|
    |                          |           |      |          |remoto     |
    |                          |           |      |          |(VNC)      |
    |--------------------------+-----------+------+----------+-----------|
    |                          |           |      |          |Cliente de |
    |gnome-connections         |V:6, I:135 |1651  |RDP, RFB  |escritorio |
    |                          |           |      |(VNC)     |remoto de  |
    |                          |           |      |          |GNOME      |
    |--------------------------+-----------+------+----------+-----------|
    |                          |           |      |          |Vinagre:   |
    |                          |           |      |RDP, RFB  |cliente de |
    |vinagre                   |V:1, I:24  |4249  |(VNC),    |escritorio |
    |                          |           |      |SPICE, SSH|remoto de  |
    |                          |           |      |          |GNOME      |
    |--------------------------+-----------+------+----------+-----------|
    |                          |           |      |RDP, RFB  |Remmina:   |
    |remmina                   |V:15, I:61 |982   |(VNC),    |cliente de |
    |                          |           |      |SPICE,    |escritorio |
    |                          |           |      |SSH, ...  |remoto GTK |
    |--------------------------+-----------+------+----------+-----------|
    |                          |           |      |          |KRDC:      |
    |krdc                      |V:2, I:16  |4144  |RDP, RFB  |cliente de |
    |                          |           |      |(VNC)     |escritorio |
    |                          |           |      |          |remoto KDE |
    |--------------------------+-----------+------+----------+-----------|
    |                          |           |      |          |Cliente de |
    |                          |           |      |          |pantalla   |
    |                          |           |      |          |GUI de     |
    |                          |           |      |RFB (VNC),|Gestor de  |
    |virt-viewer               |V:5, I:40  |1278  |SPICE     |Máquinas   |
    |                          |           |      |          |Virtuales  |
    |                          |           |      |          |del sistema|
    |                          |           |      |          |operativo  |
    |                          |           |      |          |invitado   |
    +--------------------------------------------------------------------+


7.9. conexión del servidor X

    Hay varias formas de conectarse desde una aplicación en un host
    remoto al servidor X, incluyendo xwayland en el host local.

    Tabla 7.8. Relación de los métodos de conexión al servidor X

    +---------------------------------------------------------------+
    |     paquete     |popularidad|tamaño|    orden     |descripción|
    |-----------------+-----------+------+--------------+-----------|
    |                 |V:768,     |      |sshd con la   |SSH        |
    |openssh-server   |I:819      |3359  |opción        |servidor   |
    |                 |           |      |X11-forwarding|(seguro)   |
    |-----------------+-----------+------+--------------+-----------|
    |openssh-client   |V:915,     |4210  |ssh -X        |SSH cliente|
    |                 |I:996      |      |              |(seguro)   |
    |-----------------+-----------+------+--------------+-----------|
    |                 |V:190,     |      |              |Utilidad de|
    |xauth            |I:972      |81    |xauth         |archivo de |
    |                 |           |      |              |autoridad X|
    |-----------------+-----------+------+--------------+-----------|
    |                 |           |      |              |control de |
    |x11-xserver-utils|V:309,     |559   |xhost         |acceso al  |
    |                 |I:531      |      |              |servidor   |
    |                 |           |      |              |para X     |
    +---------------------------------------------------------------+


7.9.1. Conexión local del servidor X

    El acceso al servidor X local de las aplicaciones locales que
    usan el protocolo central X se puede hacer localmente a través de
    un socket de dominio UNIX local. Esto lo puede autorizar el
    archivo de autoridad que contiene el cookie de acceso. La
    situación del archivo de autoridad se identifica mediante la
    variable de entorno "$XAUTHORITY" y la pantalla X se identifica
    mediante la variable de entorno "$DISPLAY". Dado que normalmente
    se configuran automáticamente, no se necesita ninguna acción
    especial, p. "gitk" como el que sigue.

    username $ gitk

    Nota
   
    Para xwayland, XAUTHORITY tiene valor como "/run/user/1000
    /.mutter-Xwaylandauth.YVSU30".

7.9.2. Conexión remota del servidor X

    El acceso a la pantalla del servidor X local desde las
    aplicaciones remotas que usan el protocolo central X se admite
    mediante el uso de la función de reenvío X11.

      * Abra una gnome-terminal en el host local.

      * Ejecute ssh(1) con la opción -X para establecer una conexión con
        el sitio remoto como se muestra.

        localname @ localhost $ ssh -q -X loginname@remotehost.domain
        Password:

      * Ejecute una orden de aplicación X, p. ej. «gitk», en el sitio
        remoto como se muestra.

        loginname @ remotehost $ gitk

    Este método puede mostrar la salida de un cliente remoto X como
    si se estuviera conectado localmente conectado a través de un
    «socket« de dominio UNIX local.

    Ver Sección 6.3, “Servidor de acceso remoto (SSH) y utilidades”
    para SSH/SSHD.

    Aviso

    Una conexión remota TCP/IP al servidor X está deshabilitada por
    defecto en el sistema Debian por razones de seguridad. No las
    habilites simplemente poniendo "xhost +" ni habilitando Conexión
    XDMCP, si puedes evitarlo.

7.9.3. Conexión chroot del servidor X

    El acceso al servidor X por parte de las aplicaciones que
    utilizan el protocolo X core y que se ejecutan en el mismo host
    pero en un entorno como chroot donde el fichero de autoridad no
    es accesible, puede autorizarse de forma segura con xhost
    utilizando el Acceso basado en usuario, por ejemplo "gitk" como
    el siguiente.

    username $ xhost + si:localuser:root ; sudo chroot /path/to
    # cd /src
    # gitk
    # exit
    username $ xhost -

7.10. Portapapeles

    Para recortar el texto en el portapapeles, ver Sección 1.4.4,
    “Operaciones con el ratón”.

    Para recortar gráficos al portapapeles, ver Sección 11.6,
    “Herramientas para información gráfica”.

    Algunos comandos de la línea de comandos también pueden manipular
    el portapapeles (PRIMARY y CLIPBOARD).

    Tabla 7.9. Lista de programas relacionados con la manipulación
    del portapapeles de caracteres

    +---------------------------------------------------------------+
    |            |           |tamaño |        |                     |
    |  paquete   |popularidad|  del  |objetivo|     descripción     |
    |            |           |paquete|        |                     |
    |------------+-----------+-------+--------+---------------------|
    |            |           |       |        |interfaz de la línea |
    |xsel        |V:7, I:43  |55     |X       |de comandos para X   |
    |            |           |       |        |selecciones          |
    |            |           |       |        |(portapapeles)       |
    |------------+-----------+-------+--------+---------------------|
    |            |           |       |        |interfaz de la línea |
    |xclip       |V:16, I:77 |62     |X       |de comandos para X   |
    |            |           |       |        |selecciones          |
    |            |           |       |        |(portapapeles)       |
    |------------+-----------+-------+--------+---------------------|
    |            |           |       |        |wl-copy wl-paste:    |
    |            |           |       |        |interfaz de la línea |
    |wl-clipboard|V:8, I:25  |174    |Wayland |de comandos para     |
    |            |           |       |        |Portapapeles de      |
    |            |           |       |        |Wayland              |
    |------------+-----------+-------+--------+---------------------|
    |            |           |       |        |Un servidor (Daemon) |
    |gpm         |V:8.7,     |524    |Consola |que captura acciones |
    |            |I:9.5      |       |de Linux|del ratón en la      |
    |            |           |       |        |consola de Linux     |
    +---------------------------------------------------------------+


Capítulo 8. I18N y L10N

    El Multilenguaje (M17N) o Soporte del Lenguaje Propio para el
    software de aplicaciones se realiza en dos pasos.

      * Internacionalización (I18N): para hacer que el software sea
        capaz de gestionar múltiples configuraciones dependiendo de
        la configuración regional.

      * Localización (L10N): para hacer que el software sea capaz de
        gestionar la configuración regional.

    Sugerencia

    Hay 17, 18 o 10 letras entre "m" y "n", "i" y "n", o "l" y "n" en
    multilingüalización, internacionalización y localización que
    corresponden a M17N, I18N y L10N. Véase Internacionalización y
    localización para más detalles.

8.1. Configuración regional

    El programa admite la internacionalización mediante la
    configuración de la variable de entorno "$LANG" para admitir la
    localización. La compatibilidad con la configuración regional
    real se basa en las características proporcionadas por la
    biblioteca libc y requiere que se instalen los paquetes locales o
    locales-all. El paquete locales debe inicializarse correctamente.

    Si no están instalados los paquetes locales o locales-all, se
    pierde el soporte de las características de localización y el
    sistema utiliza mensajes en inglés de EE.UU. y maneja los datos
    como ASCII. Este comportamiento es el mismo que "$LANG" es
    establecido por "LANG=", "LANG=C", o "LANG=POSIX".

    Los programas modernos como GNOME y KDE son multilingües. Se
    internacionalizan haciendo que manejen datos UTF-8 y se localizan
    proporcionando sus mensajes traducidos a través de la
    infraestructura gettext(1). Los mensajes traducidos pueden darse
    como paquetes de localización independientes.

    El sistema GUI de escritorio Debian actual normalmente establece
    la configuración local en el entorno GUI como "LANG=xx_YY.UTF-8".
    Aquí, "xx" es Códigos de idioma ISO 639 y "YY" es Códigos de
    idioma ISO 3166. Estos valores se establecen mediante el diálogo
    de la GUI de configuración del escritorio y cambian el
    comportamiento del programa. Ver Sección 1.5.2, “La variable
    «$LANG»”

8.1.1. Razón de ser de la configuración regional UTF-8

    La representación más simple de los datos de texto es ASCII que
    es suficiente para el inglés y usa menos de 127 caracteres
    (representable con 7 bits).

    Incluso texto plano en inglés puede contener caracteres que no
    perteneces a ASCII, p. ej. las comillas ligeramente inclinadas a
    izquierda y derecha no están incluidas en ASCII.

    “double quoted text” is not "double quoted ASCII"
    ‘single quoted text’ is not 'single quoted ASCII'

    Para admitir más caracteres, se han utilizado muchos conjuntos de
    caracteres y sistemas de codificación para admitir muchos idiomas
    (consulte Tabla 11.2, “Relación de valores de codificación y su
    uso”).

    EL conjunto de caracteres Unicode puede representar prácticamente
    todos los caracteres conocidos por humanos con un rango de punto
    de código de 21 bits (es decir, 0 a 10FFFF en notación
    hexadecimal).

    El sistema de codificación de texto UTF-8 ajusta los puntos de
    código Unicode en un flujo de datos sensible de 8 bits, en su
    mayoría compatible con el sistema de procesamiento de datos
    ASCII. Esto hace que UTF-8 sea la opción preferida moderna. UTF
    representa el Formato de Transformación Unicode. Cuando los datos
    de texto sin formato ASCII se convierten en uno UTF-8, tienen
    exactamente el mismo contenido y tamaño que el original ASCII.
    Así que no pierde nada utilizando la configuración regional
    UTF-8.

    En la local UTF-8 con el programa de aplicación compatible, puede
    mostrar y editar cualquier dato de texto en un idioma extranjero
    siempre que las fuentes y los métodos de entrada requeridos estén
    instalados y habilitados. Por ejemplo, en la configuración local
    "LANG=fr_FR.UTF-8", gedit(1) (editor de texto para el escritorio
    GNOME) puede mostrar y editar datos de texto de caracteres chinos
    mientras presenta menús en francés.

    Sugerencia

    Tanto la nueva configuración "en_US.UTF-8" como la antigua
    configuración local estándar "C"/"POSIX" utilizan el mensaje en
    inglés estadounidense estándar, tienen diferencias sutiles en el
    orden de clasificación, etc. Si desea manejar no solo los
    caracteres ASCII, sino también todos los caracteres codificados
    en UTF-8 con elegancia mientras mantiene el antiguo
    funcionamiento local "C", use la configuración local no estándar
    "C.UTF-8" en Debian.

    Nota

    Algunos programas utilizan más memoria después de configurarlos
    con l18N. Esto es debido a que se han escrito para utilizar
    UTF-32(UCS4) internamente para utilizar Unicode con el fin de
    optimizar la velocidad y utilizan 4 bytes por cada carácter ASCII
    con independencia de la configuración regional seleccionada.
    Nuevamente, no se pierde nada por utilizar como configuración
    regional UTF-8.

8.1.2. Reconfiguración de la configuración regional

    Para que el sistema acceda a un lugar en particular, los datos
    del lugar deben compilarse desde la base de datos del lugar.

    El paquete locales no viene con datos locales precompilados.
    Necesitas configurarlo como:

    # dpkg-reconfigure locales

    Este proceso consta de 2 pasos.

     1. Selecciona todas las configuraciones regionales que desea
        compilar al formato binario. (Asegúrate de incluir al menos
        una configuración regional UTF-8)
   
     2. Establece el valor de la configuración regional
        predeterminada para todo el sistema creando "/etc/default/
        locale" para que lo utilice PAM (consulta Sección 4.5, “PAM y
        NSS”).

    El valor de la configuración regional predeterminada para todo el
    sistema establecido en "/etc/default/locale" se puede anular por
    la configuración GUI para aplicaciones GUI.

    Nota

    El sistema de codificación tradicional real puede identificarse
    mediante "/usr/share/i18n/SUPPORTED". Así, el "LANG=en_US" es
    "LANG=en_US.ISO-8859-1".

    El paquete locales-all viene con datos de configuración regional
    precompilados para todos los datos de la configuración regional.
    Dado que no crea "/etc/default/locale", es posible que también
    necesite instalar el paquete locales.

    Sugerencia

    El paquete locales de algunas distribuciones derivadas de Debian
    viene con los datos de la configuración regional precompilados
    para todas las configuraciones regionales. Necesitas instalar
    ambos paquetes locales y locales-all en Debian para emular dicho
    entorno de sistema.

8.1.3. Codificación del nombre de archivo

    Para el intercambio de datos entre plataformas (ver
    Sección 10.1.7, “Dispositivos de almacenamiento extraíbles”),
    puede necesitar montar un sistema de archivos con una
    codificación adecuada. Por ejemplo, mount(8) para el sistemas de
    archivos vfat da por sentado CP437 si se utiliza sin opciones.
    Necesitará dar al montar una opción explícita para utilizar UTF-8
    o CP932 para los nombres de archivos.

    Nota

    When auto-mounting a hot-pluggable USB flash drive under modern
    desktop environment such as GNOME, you may provide such mount
    option by right clicking the icon on the desktop, click "Drive"
    tab, click to expand "Setting", and entering "utf8" to "Mount
    options:". The next time this USB flash drive is mounted, mount
    with UTF-8 is enabled.

    Nota

    Si esta actualizando su sistema o modificando los discos duros
    desde un sistema antiguo que no soporta UTF-8, los nombres de los
    archivos con caracteres que no son ASCII se pueden codificar con
    la histórica y obsoleta ISO-8859-1 o eucJP. Por favor busque
    ayuda entre las herramientas de conversión de texto para
    convertirlas a UTF-8. Ver Sección 11.1, “Herramientas para la
    conversión de información en formato texto”.

    Samba, por defecto, utiliza Unicode para los clientes nuevos
    (Windows NT, 200x, XP) pero utiliza CP850 para los viejos (DOS
    and Windows 9x/Me). El valor por defecto de los clientes viejos
    se puede cambiar modificando la entrada«dos charset» en el
    archivo «/etc/samba/smb.conf», p. ej. a CP932 para el japonés.

8.1.4. Configuración regional de los mensajes y documentación
traducida

    Existen traducciones para muchos de los mensajes de texto y
    documentos que el sistema Debian muestra, como los mensajes de
    error, salida estándar de los programas, menús y páginas de
    manual. El conjunto de herramientas GNU gettext(1) se usan como
    respaldo para la mayoría de las actividades relacionadas con la
    traducción.

    En «Tareas« → «Configuración regional« aptitude(8) tiene una
    relación muy completa de paquetes binarios útiles los cuales
    proporcionan mensajes según la configuración regional de las
    aplicaciones y documentación traducida.

    Por ejemplo, puede tener los mensajes según su configuración
    regional instalando el paquete manpages-LANG. Para leer la página
    de man en italiano de nombre_del_programadesde «/usr/share/man/it
    /», ejecute lo siguiente.

    LANG=it_IT.UTF-8 man programname

    GNU gettext puede acomodar una lista prioritaria de idiomas en la
    traducción con la variable del entorno $LANGUAGE. Por ejemplo:

     $ export LANGUAGE="pt:pt_BR:es:it:fr"

    Para más información, consulta info gettext y lee la sección "La
    variable LANGUAGE".

8.1.5. Efectos de la configuración regional

    El orden de los caracteres con sort(1) y ls(1) se ve afectado por
    la configuración regional. La exportación de LANG=es_US.UTF-8
    ordena en el diccionario A->a->B->b... ->Z->z, mientras que
    exportar LANG=C.UTF-8 ordena en el orden binario ASCII A->
    B->...->Z->a->b....

    El formato de fecha de la ls(1) se ve afectado por la
    configuración regional (ver Sección 9.3.4, “Personalización de la
    visualización de la fecha y hora”).

    El formato de la fecha de fecha(1) se ve afectado por la
    configuración regional. Por ejemplo:

     $ unset LC_ALL
     $ LANG=en_US.UTF-8 date
    Thu Dec 24 08:30:00 PM JST 2023
     $ LANG=en_GB.UTF-8 date
    Thu 24 Dec 20:30:10 JST 2023
     $ LANG=es_ES.UTF-8 date
    jue 24 dic 2023 20:30:20 JST
     $ LC_TIME=en_DK.UTF-8 date
    2023-12-24T20:30:30 JST

    La puntuación numérica es diferente en las diferentes
    configuraciones regionales. Por ejemplo, en la configuración
    regional en Inglés, mil punto uno se muestra como "1,000.1",
    mientras que en la configuración regional en alemán, se muestra
    como "1.000, 1". Puedes ver la diferencia en los programas de
    hojas de cálculo.

    Cada detalle de la variable del entorno "$LANG" se puede anular
    configurando las variables "$LC_*". Estas variables del entorno
    se pueden volver a anular configurando la variable $LC_ALL". Ver
    la página man locale(7) para obtener más detalles. A menos que
    tengas una razón de peso para crear configuraciones complejas,
    mantente alejado de ellas y simplemente usa la variable "$LANG"
    para establecer una configuración regional UTF-8.

8.2. La entrada por teclado

    The keyboard system can be configured at different layers of the
    system.

      * Linux kernel: keyboard(5)

      * X server: setxkbmap(1), xkeyboard-config(5), environment
        variable XMODIFIERS
   
      * GUI desktop environment: Input Method framework: ibus, fcitx5

      * Application: environment variables to set its input source:
        GTK_IM_MODULE, QT_IM_MODULE, QT_IM_MODULES, ...

    Input method framework (IM) consists of:

      * Input method engine (IME): Actual input method

      * Configuration: Handles the configuration for IBus and other
        services such as IME plugins

      * Panel: User interface such as language bar and candidate
        selection table

    Multilingual input to the application is processed roughly as:

    Keyboard        UI panel    Configuration          Application
    |                  ^ |           |                        ^  ^
    v                  | v           v                        |  |
    Linux kernel -> Input method engine (IME) -+-> Gtk, Qt ---+  |
                       | ^                     |                 |
                       | |                     +-> X11, Wayland -+
                       v |
                    IME plugin (ibus-mozc, ...)

8.2.1. Teclado de entrada para la consola Linux y X Window

    The Debian system can be configured to work with many
    international keyboard arrangements using the
    keyboard-configuration package.

    # dpkg-reconfigure keyboard-configuration

    For the Linux console and the X Window system, this updates
    configuration parameters in "/etc/default/keyboard". Many
    non-ASCII characters including accented characters used by many
    European languages can be made available with dead key, AltGr
    key, and compose key.

    Nota

    Si ibus está activo, la configuración de su teclado X clásico por
    setxkbmap se puede anular por ibus incluso en un entorno de
    escritorio clásico basado en X. Puede deshabilitar ibus instalado
    usando im-config para establecer el método de entrada en "None".
    Para más información, ver Wiki de Debian en el teclado.

8.2.2. La entrada por teclado para Wayland

    Unlike the X Window protocol, the Wayland core protocol doesn't
    even support the input of accented characters. Popular Wayland
    Compositors, such as Mutter for GNOME or KWin for KDE, implement
    extension protocols such as the text-input-unstable-v3 for the
    text input (see "current Wayland protocols and their support
    status").

    The text-input-unstable-v3 protocol works well with Input methods
    for Wayland (see "Wayland input method project post-mortem").

      * Most GUI applications are built with GUI libraries such as
        GTK or Qt which support this text-input-unstable-v3.

      * Popular Input Method Engines (IME), such as IBus or Fcitx
        (version 5), can work with this text-input-unstable-v3.
   
      * IMEs support text input for many languages with plugins.

      * Recent IMEs integrate "X Keyboard Extension (XKB)"
        functionalities such as setxkbmap previously provided by the
        X Window to support accented character text input for
        European languages for Wayland.

8.2.3. El soporte al método de entrada con lBus

    For GNOME, "ibus" is the default IME which is automatically
    installed via its package dependency.

      * Most multilingualized keyboard input features can be
        configured from "GNOME Settings" or "GNOME Tweaks".

      * Some multilingualized keyboard input features may need to be
        configured from the ibus-setup(1) command.

      * The emoji keyboard input is available by typing "SUPER-."
        (Simultaneously type Windows and period keys) followed by a
        keyword for each emoji and SPACE-keys.

    The list of IBus and its plugin packages are the following.

    Tabla 8.1. List of IBus and its plugin packages

    +---------------------------------------------------------------+
    |    paquete    |popularidad|tamaño|soporte de la configuración |
    |               |           |      |          regional          |
    |---------------+-----------+------+----------------------------|
    |ibus           |V:213,     |1828  |infraestructura de método de|
    |               |I:252      |      |entrada utilizando dbus     |
    |---------------+-----------+------+----------------------------|
    |ibus-mozc      |V:2.1,     |978   |Japonés                     |
    |               |I:3.8      |      |                            |
    |---------------+-----------+------+----------------------------|
    |ibus-anthy     |V:0.5,     |8958  |Japonés                     |
    |               |I:1.2      |      |                            |
    |---------------+-----------+------+----------------------------|
    |ibus-skk       |V:0.04,    |242   |Japonés                     |
    |               |I:0.14     |      |                            |
    |---------------+-----------+------+----------------------------|
    |ibus-kkc       |V:0.03,    |211   |Japonés                     |
    |               |I:0.18     |      |                            |
    |---------------+-----------+------+----------------------------|
    |ibus-libpinyin |V:1.2,     |2767  |Chino (para zh_CN)          |
    |               |I:5.1      |      |                            |
    |---------------+-----------+------+----------------------------|
    |ibus-chewing   |V:0.19,    |288   |Chinese (for zh_TW)         |
    |               |I:0.90     |      |                            |
    |---------------+-----------+------+----------------------------|
    |ibus-libzhuyin |V:0.00,    |41009 |Chinese (for zh_TW)         |
    |               |I:0.11     |      |                            |
    |---------------+-----------+------+----------------------------|
    |ibus-rime      |V:0.26,    |78    |Chinese (for zh_CN/zh_TW)   |
    |               |I:0.49     |      |                            |
    |---------------+-----------+------+----------------------------|
    |ibus-cangjie   |V:0.02,    |235   |Chinese (for zh_HK)         |
    |               |I:0.12     |      |                            |
    |---------------+-----------+------+----------------------------|
    |ibus-hangul    |V:0.3,     |264   |Coreano                     |
    |               |I:2.0      |      |                            |
    |---------------+-----------+------+----------------------------|
    |ibus-libthai   |V:0.00,    |84    |Tailandés                   |
    |               |I:0.05     |      |                            |
    |---------------+-----------+------+----------------------------|
    |ibus-table-thai|I:0.05     |59    |Tailandés                   |
    |---------------+-----------+------+----------------------------|
    |ibus-unikey    |V:0.20,    |286   |vietnamita                  |
    |               |I:0.43     |      |                            |
    |---------------+-----------+------+----------------------------|
    |keyman         |I:0.10     |507   |Multilingual: Keyman plugin |
    |               |           |      |for over 2000 languages     |
    |---------------+-----------+------+----------------------------|
    |ibus-table     |V:0.08,    |2271  |table plugin for IBus       |
    |               |I:1.00     |      |                            |
    |---------------+-----------+------+----------------------------|
    |ibus-m17n      |V:0.3,     |373   |Multilenguaje: Indo, Árabe y|
    |               |I:2.0      |      |otros                       |
    +---------------------------------------------------------------+


8.2.4. The input method support with Fcitx

    The Fcitx (version 5) input method framework is popular with
    Chinese users and compatible with "ibus".

    The list of "fcitx5" and its plugin packages are the following.

    Tabla 8.2. List of Fcitx5 and its plugin packages

    +---------------------------------------------------------------+
    |                          |           |      |  soporte de la  |
    |         paquete          |popularidad|tamaño|  configuración  |
    |                          |           |      |    regional     |
    |--------------------------+-----------+------+-----------------|
    |                          |           |      |input method     |
    |fcitx5                    |V:7, I:12  |761   |framework        |
    |                          |           |      |compatible with  |
    |                          |           |      |"ibus"           |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-mozc               |V:1.0,     |1260  |Japonés          |
    |                          |I:1.6      |      |                 |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-anthy              |V:0.06,    |808   |Japonés          |
    |                          |I:0.20     |      |                 |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-skk                |V:0.05,    |369   |Japonés          |
    |                          |I:0.14     |      |                 |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-kkc                |V:0.00,    |416   |Japonés          |
    |                          |I:0.06     |      |                 |
    |--------------------------+-----------+------+-----------------|
    |                          |           |      |Chinese          |
    |fcitx5-chinese-addons     |I:9.0      |17    |(metapackage for |
    |                          |           |      |zh_*)            |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-pinyin             |V:3.8,     |1044  |Chino (para      |
    |                          |I:9.4      |      |zh_CN)           |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-chewing            |V:0.2,     |217   |Chinese (for     |
    |                          |I:1.0      |      |zh_TW)           |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-zhuyin             |I:0.06     |41051 |Chinese (for     |
    |                          |           |      |zh_TW)           |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-rime               |V:0.44,    |371   |Chinese (for     |
    |                          |I:0.84     |      |zh_CN/zh_TW)     |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-table-cangjie-large|I:0.12     |1292  |Chinese (for     |
    |                          |           |      |zh_HK)           |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-hangul             |V:0.09,    |235   |Coreano          |
    |                          |I:0.23     |      |                 |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-libthai            |I:0.05     |119   |Tailandés        |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-table-thai         |I:0.08     |34    |Tailandés        |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-unikey             |V:0.08,    |588   |vietnamita       |
    |                          |I:0.20     |      |                 |
    |--------------------------+-----------+------+-----------------|
    |                          |V:0.12,    |      |Multilenguaje:   |
    |fcitx5-m17n               |I:0.51     |259   |Indo, Árabe y    |
    |                          |           |      |otros            |
    |--------------------------+-----------+------+-----------------|
    |fcitx5-table              |V:0.4,     |520   |table plugin for |
    |                          |I:9.2      |      |fcitx5           |
    |--------------------------+-----------+------+-----------------|
    |                          |           |      |Multilingual:    |
    |fcitx5-keyman             |V:0.03,    |235   |Keyman plugin for|
    |                          |I:0.04     |      |over 2000        |
    |                          |           |      |languages        |
    +---------------------------------------------------------------+


8.2.5. Ejemplo para el japonés

    I find the Japanese input method started under English
    environment ("en_US.UTF-8") very useful. Here is how I did this
    with IBus:

     1. Install the Japanese input tool package ibus-mozc (or
        ibus-anthy).

     2.
          + Generic: Execute ibus-setup(1) → select "Input Method" →
            click "Add" → "Japanese" → "Mozc (or Anthy)" → click
            "Add"

          + GNOME: Select "Settings" → "Keyboard" → "Input Sources" →
            click "+" in "Input Sources" → "Japanese" → "Mozc (or
            Anthy)" → click "Add"

     3. Puede elegir tantas fuentes de entrada como desee.

     4. Volver a entrar con su cuenta de usuario.

     5. Configure la fuente de entrada pulsado el botón derecho en el
        icono de la barra de herramientas del interfaz gráfico de
        usuario.

     6. Cambie entre fuentes de entrada con el SUPER-ESPACIO
        (habitualmente la tecla de Windows).

    Sugerencia

    Si desea tener acceso al entorno de teclado solo alfabético con
    el teclado japonés físico en el que shift-2 tiene grabado "
    (comillas dobles), seleccione "Japonés" en el procedimiento
    anterior. Puede ingresar japonés usando "Mozc japonés (o anthy)"
    con un teclado físico "EE. UU." en el que shift-2 tiene @ (marca
    de arroba) grabado.

      * For Wayland:

          + The im-config package does nothing and can be removed
            safely.

          + You probably don't need to set environment variables
            except for the backward compatibility etc.

          + If you need to set environment variables, create a file
            such as "~/.config/environment.d/50-input-method.conf "to
            set them.

      * For X Window:
   
          + Install the im-config package.

          + La entrada del menú del interfaz gráfico de usuario de
            im-config(8) es "método de entrada".

          + Alternativamente, ejecute "im-config" desde el shell del
            usuario.

          + im-config(8) se comporta de forma diferente si la orden
            se ejecuta como superusuario o no.

          + im-config(8) activa el mejor método de entrada en el
            sistema por defecto sin la intervención del usuario.

8.3. La salida por pantalla

    La consola de Linux solo puede mostrar un número limitado de
    caracteres. (Necesita un programa de terminal especial como
    ifbterm(1) para visualizar lenguajes no europeos en una consola
    que no sea X).

    El entorno GUI (Capítulo 7, Sistema GUI (interfaz gráfica de
    usuario)) puede mostrar cualquier carácter en UTF-8 siempre que
    las fuentes requeridas estén instaladas y habilitadas. (La
    codificación de los datos de la fuente original se cuida y es
    transparente para el usuario).

8.3.1. La configuración de la terminal

    The Debian system can be configured to work with many
    international console arrangements using the console-setup
    package.

    # dpkg-reconfigure console-setup

    For the Linux console and the X Window system, this updates
    configuration parameters in "/etc/default/console-setup" to
    display many non-ASCII characters including accented characters
    used by many European languages can be made available.

    Existen diferentes componentes para configura la consola de
    caracteres y las funcionalidades del sistema ncurses(3) system
    features.

      * El archivo «/etc/terminfo/*/*» (terminfo(5))

      * La variable de entorno «$TERM» (term(7))

      * setterm(1), stty(1), tic(1) y toe(1)

    Si la entrada terminfo de xterm no funciona con una xterm que no
    es de Debian, cambie el tipo de terminal cambiando «$TERM» de
    «xterm» a una versión con funcionalidades limitadas como
    «xterm-r6» al autenticarse en el sistema Debian de forma remota.
    Para mayor información ver «/usr/share/doc/libncurses5/FAQ».
    «dumb» es el mínimo común denominador para «$TERM».

8.3.2. Ancho de los caracteres ambiguos de Asia oriental

    Under the East Asian locale, the box drawing, Greek, and Cyrillic
    characters may be displayed wider than your desired width to
    cause the unaligned terminal output (see Unicode Standard Annex #
    11, 4.2 Ambiguous Characters).

    Puede solucionar este problema:

      * gnome-terminal: Preferencias → Archivos de configuración → 
        Nombre de configuración → Compatibilidad → Caracteres con
        ancho ambiguo → Estrecho

      * ncurses: asigne en el entorno export NCURSES_NO_UTF8_ACS=0.

Capítulo 9. Trucos del sistema

    Aquí, describo los trucos fundamentales para configurar y
    gestionar sistemas, principalmente desde la consola.

9.1. Consejos para la consola

    Existen algunas utilidades que te ayudarán en tu interacción con
    la consola.

    Tabla 9.1. Lista de programas de apoyo a las actividades de la
    consola

    +---------------------------------------------------------------+
    |paquete |popularidad|tamaño|            descripción            |
    |--------+-----------+------+-----------------------------------|
    |mc      |V:41, I:182|1590  |Ver Sección 1.3, “Midnight         |
    |        |           |      |Commander (MC)”                    |
    |--------+-----------+------+-----------------------------------|
    |        |V:443,     |      |script(1) comando para hacer       |
    |bsdutils|I:999      |334   |typescript de la sesión del        |
    |        |           |      |terminal                           |
    |--------+-----------+------+-----------------------------------|
    |screen  |V:52, I:200|991   |Multiplexador de terminal con      |
    |        |           |      |emulación de terminal VT100/ANSI   |
    |--------+-----------+------+-----------------------------------|
    |        |           |      |alternativa al multiplexor de      |
    |tmux    |V:94, I:162|1291  |terminales (utiliza "Control-B" en |
    |        |           |      |su lugar)                          |
    |--------+-----------+------+-----------------------------------|
    |        |           |      |búsqueda rápida de las cadenas     |
    |ripgrep |V:14, I:42 |5294  |recursivas en el árbol del código  |
    |        |           |      |fuente con el filtrado automático  |
    |--------+-----------+------+-----------------------------------|
    |fzf     |V:8, I:35  |4983  |buscador de texto borroso          |
    |--------+-----------+------+-----------------------------------|
    |fzy     |V:0.08,    |59    |buscador de texto borroso          |
    |        |I:0.36     |      |                                   |
    |--------+-----------+------+-----------------------------------|
    |rlwrap  |V:1, I:12  |328   |envoltorio de la línea de comando  |
    |        |           |      |de la función readline             |
    |--------+-----------+------+-----------------------------------|
    |ledit   |V:0.5,     |375   |envoltorio de la línea de comando  |
    |        |I:7.7      |      |de la función readline             |
    |--------+-----------+------+-----------------------------------|
    |rlfe    |V:0.04,    |45    |envoltorio de la línea de comando  |
    |        |I:0.49     |      |de la función readline             |
    +---------------------------------------------------------------+


9.1.1. Registro correcto de las actividades del intérprete de órdenes

    La utilización para el registro de la actividad del intérprete de
    órdenes, sin más, de script(1) (ver Sección 1.4.9, “Grabación de
    las actividades del intérprete de órdenes”) produce un archivo
    con caracteres de control. Esto se puede evitar con la
    utilización de col(1) como se muestra.

    $ script
    Script started, file is typescript

    Haga lo que quiera ... y pulse Ctrl-D para finalizar script.

    $ col -bx < typescript > cleanedfile
    $ vim cleanedfile

    Existen métodos alternativos para registrar las actividades de
    shell :

      * Utiliza tee (solo se puede usar durante el proceso de
        arranque en initramfs):

        $ sh -i 2>&1 | tee typescript

      * Utiliza gnome-terminal con el búfer de línea extendida para
        el scrollback.

      * Utilice pantalla con "^A H" (ver Sección 9.1.2, “El programa
        screen”) para realizar la grabación de la consola.

      * Utiliza vim con ":terminal" para entrar en el modo terminal.
        Utiliza "Ctrl-W N" para salir del modo terminal al modo
        normal. Utiliza ":w typescript" para escribir en el búfer de
        un archivo.

      * Usa emacs con "Mx shell", "M-x eshell" o "M-x term" para
        ingresar a la consola de grabación . Utiliza "C-x C-w" para
        escribir en el búfer de un archivo.

9.1.2. El programa screen

    Screen(1) no solo permite trabajar con múltiples procesos en un
    único terminal, si no que también que el proceso del intérprete
    de órdenes remoto sobreviva a la interrupción de las conexiones.
    Aquí está un escenario típico de utilización de screen(1).

     1. Acceda a un equipo remoto.

     2. Iniciar screen en una única consola.

     3. Ejecute múltiples programas en la ventana de screen con ^A c
        («Control-A« seguido por «c«).

     4. Puede cambiar entre las múltiples ventanas de screen con ^A n
        («Control-A« seguido de «n»).

     5. Si repentinamente necesita dejar su terminal, pero no quiere
        perder su trabajo activo por la mantener la conexión.

     6. Se puede separar la sesión screen por cualquier método.

          + Desconexión forzada de su conexión de red

          + Pulse ^A d («Control-A« seguido de «d«) y cierre
            manualmente la conexión remota

          + Pulse ^A DD («Control-A» seguido de «DD») para que screen
            separe y cierre su sesión

     7. Si inicia la sesión otra vez al mismo equipo remoto (incluso
        desde un terminal diferente).

     8. Inicie screen con «screen -r».

     9. Screen mágicamente reconecta con todas las ventanas
        anteriores de screen con todos los programas activos
        ejecutándose.

    Sugerencia

    Puede guardar la entrada de la conexión con screen para la
    conexión de red a medida como de marcado y de paquete, ya que
    puede dejar el proceso activo mientras esta desconectado, y
    entonces recuperarlo más tarde cuando se conecte de nuevo.

    En una sesión de screen, todas las entradas de teclado se envían
    a la ventana actual excepto las que son combinaciones de teclado
    de órdenes. Todas las combinaciones de teclas de órdenes screen
    se inician pulsando ^A («Control-A«) más otra tecla [más algunos
    parámetros]. He aquí algunos importantes para recordar.

    Tabla 9.2. Relación de los atajos de teclado para screen

    +---------------------------------------------------------------+
    |función|                      significado                      |
    |-------+-------------------------------------------------------|
    |^A ?   |muestra la ayuda de screen (muestra los atajos de      |
    |       |teclado)                                               |
    |-------+-------------------------------------------------------|
    |^A c   |crea una nueva ventana y cambia a ella                 |
    |-------+-------------------------------------------------------|
    |^A n   |ir a la siguiente ventana                              |
    |-------+-------------------------------------------------------|
    |^A p   |ir a la ventana anterior                               |
    |-------+-------------------------------------------------------|
    |^A 0   |va a la ventana 0                                      |
    |-------+-------------------------------------------------------|
    |^A 1   |ir a la ventana número 1                               |
    |-------+-------------------------------------------------------|
    |^A w   |muestra una relación de las ventanas                   |
    |-------+-------------------------------------------------------|
    |^A a   |envía un Ctrl-A a la ventana actual como entrada de    |
    |       |teclado                                                |
    |-------+-------------------------------------------------------|
    |^A h   |escribe una copia de la ventana actual a un archivo    |
    |-------+-------------------------------------------------------|
    |^A H   |inicia/finaliza la grabación de la ventana actual a un |
    |       |archivo                                                |
    |-------+-------------------------------------------------------|
    |^A ^X  |bloquea la terminal (protegido por contraseña)         |
    |-------+-------------------------------------------------------|
    |^A d   |separa la sesión de screen de la terminal              |
    |-------+-------------------------------------------------------|
    |^A DD  |separa la sesión de screen y sal                       |
    +---------------------------------------------------------------+


    Para más detalles ver screen(1).

    Ver tmux(1) para saber las funcionalidades del comando
    alternativo.

9.1.3. Navegando por los directorios

    En Sección 1.4.2, “Personalización de bash”, se describen 2
    sugerencias para permitir una navegación rápida por los
    directorios: $CDPATH y mc.

    Si utiliza el programa de fuzzy text filter, puede hacerlo sin
    escribir la ruta exacta. Para fzf, incluya lo siguiente en ~
    /.bashrc.

    FZF_KEYBINDINGS_PATH=/usr/share/doc/fzf/examples/key-bindings.bash
    if [ -f $FZF_KEYBINDINGS_PATH ]; then
      . $FZF_KEYBINDINGS_PATH
    fi

    Por ejemplo:

      * Puedes saltar a un subdirectorio muy profundo con un mínimo
        esfuerzo. Primero escribe "cd **" y pulsa Tab. A
        continuación, pedirá las rutas candidatas. Si escribe cadenas
        de rutas parciales, por ejemplo, s/d/b foo, se reducirán las
        rutas candidatas. Seleccione la ruta que va a usar cd con las
        teclas de cursor y retorno.
   
      * Puede seleccionar un comando del historial de comandos de
        manera más eficiente con un esfuerzo mínimo. Presione Ctrl-R
        en el símbolo del sistema. Luego le pedirá los comandos
        candidatos. Escribir cadenas de comandos parciales, por
        ejemplo, vim d, reducirá los candidatos. Seleccione el que se
        utilizará con las teclas de cursor y retorno.

9.1.4. Readline wrapper

    Algunos comandos, como /usr/bin/dash, que carecen de la capacidad
    de edición del historial en la línea de comandos, pueden agregar
    dicha funcionalidad de forma transparente si se ejecutan bajo
    rlwrap o sus equivalentes.

     $ rlwrap dash -i

    Esto proporciona una plataforma conveniente para probar puntos
    sutiles para dash con un entorno amigable similar a bash.

9.1.5. Escaneando el árbol del código fuente

    El comando rg(1) en el paquete ripgrep ofrece una alternativa más
    rápida al comando grep(1) para escanear el árbol de código fuente
    en busca para situaciones típicas. Aprovecha las modernas CPU
    multinúcleo y aplica automáticamente filtros razonables para
    omitir algunos archivos.

9.2. Personalización de vim

    Después de aprender los conceptos básicos de vim(1) a través de
    Sección 1.4.8, “Usando vim”, ver "Siete hábitos de edición de
    texto efectiva (2000) "de Bram Moolenaar, para entender cómo se
    debe usar vim.

9.2.1. Personalizando vim con características internas

    Se puede cambiar el comportamiento de vim significativamente
    habilitando sus características internas a través de los comandos
    del modo Ex como "set ..." para establecer opciones de vim.

    Estos comandos en modo Ex se pueden incluir en el archivo vimrc
    del usuario, en el tradicional "~/.vimrc" o en el compatible con
    git "~/.vim/vimrc". He aquí un ejemplo muy simple ^[2]:

    """ Generic baseline Vim and Neovim configuration (~/.vimrc)
    """   - For NeoVim, use "nvim -u ~/.vimrc [filename]"
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    let mapleader = ' '             " :h mapleader
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    set nocompatible                " :h 'cp -- sensible (n)vim mode
    syntax on                       " :h :syn-on
    filetype plugin indent on       " :h :filetype-overview
    set encoding=utf-8              " :h 'enc (default: latin1) -- sensible encoding
    """ current vim option value can be verified by :set encoding?
    set backspace=indent,eol,start  " :h 'bs (default: nobs) -- sensible BS
    set statusline=%<%f%m%r%h%w%=%y[U+%04B]%2l/%2L=%P,%2c%V
    set listchars=eol:¶,tab:⇄\ ,extends:↦,precedes:↤,nbsp:␣
    set viminfo=!,'100,<5000,s100,h " :h 'vi -- bigger copy buffer etc.
    """ Pick "colorscheme" from blue darkblue default delek desert elflord evening
    """ habamax industry koehler lunaperche morning murphy pablo peachpuff quiet ron
    """ shine slate torte zellner
    colorscheme industry
    """ don't pick "colorscheme" as "default" which may kill SpellUnderline settings
    set scrolloff=5                 " :h 'scr -- show 5 lines around cursor
    set laststatus=2                " :h 'ls (default 1)  k
    """ boolean options can be unset by prefixing "no"
    set ignorecase                  " :h 'ic
    set smartcase                   " :h 'scs
    set autoindent                  " :h 'ai
    set smartindent                 " :h 'si
    set nowrap                      " :h 'wrap
    "set list                        " :h 'list (default nolist)
    set noerrorbells                " :h 'eb
    set novisualbell                " :h 'vb
    set t_vb=                       " :h 't_vb -- termcap visual bell
    set spell                       " :h 'spell
    set spelllang=en_us,cjk         " :h 'spl -- english spell, ignore CJK
    set clipboard=unnamedplus       " :h 'cb -- cut/copy/paste with other app
    set hidden                      " :h 'hid
    set autowrite                   " :h 'aw
    set timeoutlen=300              " :h 'tm

    El mapa de teclas de vim puede cambiarse en el fichero vimrc del
    usuario. Por ejemplo:

    Atención
   
    No intente cambiar las combinaciones de teclas predeterminadas
    sin muy buenas razones.

    """ Popular mappings (imitating LazyVim etc.)
    """ Window moves without using CTRL-W which is dangerous in INSERT mode
    nnoremap <C-H> <C-W>h
    nnoremap <C-J> <C-W>j
    nnoremap <C-K> <C-W>k
    silent! nnoremap <C-L> <C-W>l
    """ Window resize
    nnoremap <C-LEFT> <CMD>vertical resize -2<CR>
    nnoremap <C-DOWN> <CMD>resize -2<CR>
    nnoremap <C-UP> <CMD>resize +2<CR>
    nnoremap <C-RIGHT> <CMD>vertical resize +2<CR>
    """ Clear hlsearch with <ESC> (<C-L> is mapped as above)
    nnoremap <ESC> <CMD>noh<CR><ESC>
    inoremap <ESC> <CMD>noh<CR><ESC>
    """ center after jump next
    nnoremap n nzz
    nnoremap N Nzz
    """ fast "jk" to get out of INSERT mode (<ESC>)
    inoremap  jk <CMD>noh<CR><ESC>
    """ fast "<ESC><ESC>" to get out of TERM mode (CTRL-\ CTRL-N)
    tnoremap <ESC><ESC> <C-\><C-N>
    """ fast "jk" to get out of TERM mode (CTRL-\ CTRL-N)
    tnoremap jk <C-\><C-N>
    """ previous/next trouble/quickfix item
    nnoremap [q <CMD>cprevious<CR>
    nnoremap ]q <CMD>cnext<CR>
    """ buffers
    nnoremap <S-H> <CMD>bprevious<CR>
    nnoremap <S-L> <CMD>bnext<CR>
    nnoremap [b <CMD>bprevious<CR>
    nnoremap ]b <CMD>bnext<CR>
    """ Add undo break-points
    inoremap  , ,<C-G>u
    inoremap  . .<C-G>u
    inoremap  ; ;<C-G>u
    """ save file
    inoremap <C-S> <CMD>w<CR><ESC>
    xnoremap <C-S> <CMD>w<CR><ESC>
    nnoremap <C-S> <CMD>w<CR><ESC>
    snoremap <C-S> <CMD>w<CR><ESC>
    """ better indenting
    vnoremap < <gv
    vnoremap > >gv
    """ terminal (Somehow under Linux, <C-/> becomes <C-_> in Vim)
    nnoremap <C-_> <CMD>terminal<CR>
    "nnoremap <C-/> <CMD>terminal<CR>
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    if ! has('nvim')
    """ Toggle paste mode with <SPACE>p for Vim (no need for Nvim)
    set pastetoggle=<leader>p
    """ nvim default mappings for Vim.  See :h default-mappings in nvim
    """ copy to EOL (no delete) like D for d
    noremap Y y$
    """ sets a new undo point before deleting
    inoremap <C-U> <C-G>u<C-U>
    inoremap <C-W> <C-G>u<C-W>
    """ <C-L> is re-purposed as above
    """ execute the previous macro recorded with Q
    nnoremap Q @@
    """ repeat last substitute and *KEEP* flags
    nnoremap & :&&<CR>
    """ search visual selected string for visual mode
    xnoremap * y/\V<C-R>"<CR>
    xnoremap # y?\V<C-R>"<CR>
    endif

    Para que las combinaciones de teclas anteriores funcionen
    correctamente, el programa de terminal ha de configurarse para
    generar "ASCII DEL" para la teclaBackspace y "Secuencia de
    escape" para la tecla Delete.

    También se pueden cambiar otras configuraciones en el archivo
    vimrc del usuario. Por ejemplo:

    """ Use faster 'rg' (ripgrep package) for :grep
    if executable("rg")
      set grepprg=rg\ --vimgrep\ --smart-case
      set grepformat=%f:%l:%c:%m
    endif
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    """ Retain last cursor position :h '"
    augroup RetainLastCursorPosition
      autocmd!
      autocmd BufReadPost *
        \ if line("'\"") > 0 && line ("'\"") <= line("$") |
        \   exe "normal! g'\"" |
        \ endif
    augroup END
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    """ Force to use underline for spell check results
    augroup SpellUnderline
      autocmd!
      autocmd ColorScheme * highlight SpellBad term=Underline gui=Undercurl
      autocmd ColorScheme * highlight SpellCap term=Underline gui=Undercurl
      autocmd ColorScheme * highlight SpellLocal term=Underline gui=Undercurl
      autocmd ColorScheme * highlight SpellRare term=Underline gui=Undercurl
    augroup END
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    """ highlight tailing spaces except when typing as red (set after colorscheme)
    highlight TailingWhitespaces ctermbg=red guibg=red
    """ \s\+     1 or more whitespace character: <Space> and <Tab>
    """ \%#\@<!  Matches with zero width if the cursor position does NOT match.
    match TailingWhitespaces /\s\+\%#\@<!$/

9.2.2. Personalizando vim con paquetes externos

    Se pueden encontrar interesantes paquetes de complementos
    externos:

      * Vim - el editor de texto extendido -- El sitio web oficial de
        Vim y vim scripts

      * VimAwsome -- La lista de plugins de Vim

      * vim-scripts -- Paquete Debian: una colección de scripts de
        vim

    Los paquetes del plugins en el paquete vim-scripts se pueden
    habilitar usando el archivo vimrc del usuario. Ej:

    packadd! secure-modelines
    packadd! winmanager
    " IDE-like UI for files and buffers with <space>w
    nnoremap <leader>w         :WMToggle<CR>

    El nuevo sistema de paquetes nativo de Vim funciona bien con
    "git" y "git submodule". Puede encontrar un ejemplo de
    configuración en my git repository: dot-vim. Esto hace
    esencialmente:

      * Al usar "git" y "git submodule", los últimos paquetes
        externos, como "name", se sitúan en ~/.vim/pack/*/opt/name y
        similares.

      * Agregando la línea :packadd! name al archivo vimrc del
        usuario, estos paquetes se colocan en runtimepath.

      * Vim carga estos paquetes en runtimepath durante su
        inicialización.

      * Al final de su inicialización, se actualizan las etiquetas de
        los documentos instalados con "helptags ALL".

    Para más información, inicie vim con "vim --startuptime
    vimstart.log" para comprobar la secuencia de ejecución real y el
    tiempo usado en cada paso.

    Es bastante confuso ver demasiadas formas ^[3] de administrar y
    cargar estos paquetes externos en vim. Verificar la información
    original es la mejor cura.

    Tabla 9.3. Información de la inicialización de vim

    +---------------------------------------------------------------+
    |entradas con|                   información                    |
    | el teclado |                                                  |
    |------------+--------------------------------------------------|
    |:help       |explicación sobre el mecanismo del paquete vim    |
    |package     |                                                  |
    |------------+--------------------------------------------------|
    |:help       |explicación sobre el mecanismo de runtimepath     |
    |runtimepath |                                                  |
    |------------+--------------------------------------------------|
    |:version    |condiciones internas incluyen candidatos para el  |
    |            |archivo vimrc                                     |
    |------------+--------------------------------------------------|
    |:echo $VIM  |la variable de entorno "$VIM" utilizada para      |
    |            |situar el archivo vimrc                           |
    |------------+--------------------------------------------------|
    |:set        |lista de directorios en los que se buscarán todos |
    |runtimepath?|los archivos del soporte del tiempo de ejecución  |
    |------------+--------------------------------------------------|
    |:echo       |la variable del entorno "$VIMRUNTIME" utilizada   |
    |$VIMRUNTIME |para ubicar varios archivos del soporte de tiempo |
    |            |de ejecución proporcionados por el sistema        |
    +---------------------------------------------------------------+


9.3. Registro de datos y presentación

9.3.1. El demonio de registro

    Muchos programas tradicionales registran tus actividades en el
    formato de un archivo de texto en el directorio "/var/log/".

    logrotate(8) se utiliza para simplificar la administración de los
    archivos del registro en un sistema que genera muchos archivos de
    registro.

    Muchos programas nuevos registran sus actividades en formato de
    archivo binario utilizando el servicio Journalsystemd-journald
    (8) en el directorio "/var/log/journal ".

    Puedes registrar los datos en el registro systemd-journald(8)
    desde un script de shell, usando el comando systemd-cat(1).

    Consulte Sección 3.5, “El sistema de mensajes” y Sección 3.4,
    “Los mensajes del núcleo”.

9.3.2. Analizador de registros

    Aquí están los analizadores de registro más importantes
    («~Gsecurity::log-analyzer» en aptitude(8)).

    Tabla 9.4. Relación de analizadores de registro del sistema

    +---------------------------------------------------------------+
    | paquete  |popularidad|tamaño|           descripción           |
    |----------+-----------+------+---------------------------------|
    |fail2ban  |V:101,     |2192  |prohibición de las IPs con       |
    |          |I:111      |      |múltiples errores de acreditación|
    |----------+-----------+------+---------------------------------|
    |logwatch  |V:9, I:11  |2436  |analizador de registro con una   |
    |          |           |      |buena salida escrito en Perl     |
    |----------+-----------+------+---------------------------------|
    |awstats   |V:5.5,     |6934  |analizador de registro de        |
    |          |I:8.5      |      |servidor web potente y funcional |
    |----------+-----------+------+---------------------------------|
    |analog    |V:3, I:85  |3739  |analizador de registro para      |
    |          |           |      |servidores web                   |
    |----------+-----------+------+---------------------------------|
    |sarg      |V:0.74,    |863   |generador de informes de análisis|
    |          |I:0.81     |      |de squid                         |
    |----------+-----------+------+---------------------------------|
    |pflogsumm |V:1.5,     |173   |Resumidor de entradas de registro|
    |          |I:3.8      |      |Postfix                          |
    |----------+-----------+------+---------------------------------|
    |fwlogwatch|V:0.11,    |487   |analizador de registros de       |
    |          |I:0.17     |      |cortafuegos                      |
    |----------+-----------+------+---------------------------------|
    |squidview |V:0.03,    |224   |controla y analiza los archivos  |
    |          |I:0.46     |      |access.log de squid              |
    |----------+-----------+------+---------------------------------|
    |          |           |      |visor de archivos de registros   |
    |swatch    |V:0.09,    |99    |con combinación de expresiones   |
    |          |I:0.30     |      |regulares, hechos relevantes y   |
    |          |           |      |reglas                           |
    |----------+-----------+------+---------------------------------|
    |          |V:0.07,    |      |Filtro de spam y filtro mediante |
    |crm114    |I:0.34     |1371  |expresiones regulares            |
    |          |           |      |programables (CRM114)            |
    |----------+-----------+------+---------------------------------|
    |icmpinfo  |V:0.01,    |42    |intérprete de mensajes ICMP      |
    |          |I:0.33     |      |                                 |
    +---------------------------------------------------------------+


    Nota

    CRM114 tiene un lenguaje que permite escribir borrosos filtros
    con la biblioteca de expresiones regulares TRE . Su uso más común
    es como filtro de correos no deseados pero se puede utilizar
    también como analizador de registros.

9.3.3. Personalizar la visualización de información en formato texto

    Aunque las herramientas de paginación como more(1) y less(1) (ver
    Sección 1.4.5, “El paginador”) y las herramientas personalizadas
    para marcar y dar formato (ver Sección 11.1.8, “Resaltando y
    dándole formato a información en texto plano”) pueden visualizar
    la información en formato texto de la forma correcta, los
    editores de propósito general (ver Sección 1.4.6, “El editor de
    texto”) son más versátiles y personalizables.

    Sugerencia
   
    En vim(1) y su modo de paginación conocido como view(1), «:set
    hls» permite la búsqueda de textos resaltados.

9.3.4. Personalización de la visualización de la fecha y hora

    El formato predeterminado de visualización de la hora y la fecha
    mediante el comando "ls -l" depende de la localidad (ver
    Sección 1.2.6, “Marcas de tiempo” para conocer el valor). La
    variable "$LANG" es la primera a la que se hace referencia y se
    puede anular con las variables de entorno exportadas "$LC_TIME" o
    "$LC_ALL".

    El formato de visualización predeterminado real para cada
    configuración regional depende de la versión de la biblioteca C
    estándar (el paquete libc6) utilizada. Es decir, diferentes
    versiones de Debian tienen diferentes valores por defecto. Para
    los formatos iso, ver ISO 8601.

    Si de verdad quiere personalizar el formato de visualización de
    la hora y la fecha independientemente de la configuración
    regional, debería asignar el valor de estilo de tiempo por el
    parámetro «--time-style» o por el valor de «$TIME_STYLE» (ver ls
    (1), date(1), «info coreutils 'ls invocation'»).

    Tabla 9.5. Mostrar los ejemplos de la hora y la fecha para el
    comando "ls -l" con el time style value.

    +---------------------------------------------------------------+
    |valor del estilo de | configuración  |visualización de la hora |
    |      la hora       |    regional    |       y la fecha        |
    |--------------------+----------------+-------------------------|
    |iso                 |cualquiera      |01-19 00:15              |
    |--------------------+----------------+-------------------------|
    |long-iso            |cualquiera      |2009-01-19 00:15         |
    |--------------------+----------------+-------------------------|
    |full-iso            |cualquiera      |2009-01-19               |
    |                    |                |00:15:16.000000000 +0900 |
    |--------------------+----------------+-------------------------|
    |locale              |C               |Jan 19 00:15             |
    |--------------------+----------------+-------------------------|
    |locale              |en_US.UTF-8     |Jan 19 00:15             |
    |--------------------+----------------+-------------------------|
    |locale              |es_ES.UTF-8     |ene 19 00:15             |
    |--------------------+----------------+-------------------------|
    |+%d.%m.%y %H:%M     |cualquiera      |19.01.09 00:15           |
    |--------------------+----------------+-------------------------|
    |+%d.%b.%y %H:%M     |C o en_US.UTF-8 |19.Jan.09 00:15          |
    |--------------------+----------------+-------------------------|
    |+%d.%b.%y %H:%M     |es_ES.UTF-8     |19.ene.09 00:15          |
    +---------------------------------------------------------------+


    Sugerencia

    Puedes eliminar escribir la opción larga en la línea de comandos
    usando el alias de comando (ver Sección 1.5.9, “Alias de órdenes”
    ):

    alias ls='ls --time-style=+%d.%m.%y %H:%M'

9.3.5. Intérprete de órdenes en color

    En los terminales más modernos se pueden utilizar colores
    utilizando secuencias de escape ANSI (ver «/usr/share/doc/xterm/
    ctlseqs.txt.gz»).

    Por ejemplo, intente lo siguiente

    $ RED=$(printf "\x1b[31m")
    $ NORMAL=$(printf "\x1b[0m")
    $ REVERSE=$(printf "\x1b[7m")
    $ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"

9.3.6. Órdenes coloreadas

    Las ordenes de colores son útiles para la comprobación visual de
    la salida en entornos interactivos. Yo añado lo siguiente en mi
    «~/.bashrc».

    if [ "$TERM" != "dumb" ]; then
        eval "`dircolors -b`"
        alias ls='ls --color=always'
        alias ll='ls --color=always -l'
        alias la='ls --color=always -A'
        alias less='less -R'
        alias ls='ls --color=always'
        alias grep='grep --color=always'
        alias egrep='egrep --color=always'
        alias fgrep='fgrep --color=always'
        alias zgrep='zgrep --color=always'
    else
        alias ll='ls -l'
        alias la='ls -A'
    fi

    La utilización de alias limita los efectos del color en el uso de
    órdenes interactivas. Tiene ventajas sobre las variables de
    entorno exportadas «export GREP_OPTIONS='--color=auto'» ya que el
    color puede verse en los programas de paginación como less(1). Si
    quiere eliminar el color cuando usa tuberías con otros programas,
    utilice «--color=auto» en su lugar en los ejemplos anteriores «~
    /.bashrc».

    Sugerencia
   
    Puede deshabilitar los alias de color en un entorno interactivo
    llamando al intérprete de órdenes con «TERM=dumb bash».

9.3.7. Grabación de las actividades del editor con repeticiones
complejas

    Puede guardar las actividades del editor con repeticiones
    complejas.

    Para Vim, como sigue.

      * «qa»: comienza a grabar los caracteres escritos en un
        registro llamado «a».

      * … actividades del editor

      * «q»: finaliza la grabación de los caracteres escritos.

      * «@a»: ejecuta el contenido del registro «a».

    Para Emacs, como sigue.

      * «C-x (»: comienza a definir una macro de teclado.

      * … actividades del editor
   
      * «C-x )»: termina definir una macro de teclado.

      * «C-x e»: ejecuta una macro de teclado.

9.3.8. Capturar una imagen gráfica en un aplicación X

    Existen varias maneras de grabar una imagen gráfica de una
    aplicación X, incluida una pantalla de xterm.

    Tabla 9.6. Relación de herramientas de manipulación de imágenes

    +---------------------------------------------------------------+
    |    paquete     |popularidad|tamaño|pantalla|      orden       |
    |----------------+-----------+------+--------+------------------|
    |                |           |      |        |aplicación de     |
    |gnome-screenshot|V:12, I:101|1115  |Wayland |captura de        |
    |                |           |      |        |pantalla para     |
    |                |           |      |        |GNOME             |
    |----------------+-----------+------+--------+------------------|
    |                |           |      |        |aplicación de     |
    |flameshot       |V:8, I:18  |3534  |Wayland |capturas de       |
    |                |           |      |        |pantalla con      |
    |                |           |      |        |esteroides        |
    |----------------+-----------+------+--------+------------------|
    |                |           |      |Wayland |captura de        |
    |gimp            |V:44, I:216|32791 |+ X     |pantalla en el    |
    |                |           |      |        |menú GUI          |
    |----------------+-----------+------+--------+------------------|
    |x11-apps        |V:30, I:445|2461  |X       |xwd(1)            |
    |----------------+-----------+------+--------+------------------|
    |imagemagick     |V:9, I:278 |79    |X       |import(1)         |
    |----------------+-----------+------+--------+------------------|
    |scrot           |V:4, I:50  |144   |X       |scrot(1)          |
    +---------------------------------------------------------------+


9.3.9. Guardando cambios en los archivos de configuración

    Existen herramientas especializadas para guardar los cambios de
    los archivos de configuración con la ayuda de DVCS y para hacer
    instantáneas del sistema en Btrfs.

    Tabla 9.7. Relación de paquetes que pueden guardar el histórico
    de configuración

    +---------------------------------------------------------------+
    | paquete |popularidad|tamaño|           descripción            |
    |---------+-----------+------+----------------------------------|
    |         |           |      |almacenar los archivos de         |
    |etckeeper|V:24, I:27 |157   |configuración y sus metadatos con |
    |         |           |      |Git (por defecto), Mercurial, o   |
    |         |           |      |GNU Bazaar                        |
    |---------+-----------+------+----------------------------------|
    |         |           |      |utilidad de restauración del      |
    |timeshift|V:8, I:13  |4481  |sistema usando rsync o            |
    |         |           |      |instantáneas BTRFS                |
    |---------+-----------+------+----------------------------------|
    |         |V:6.1,     |      |Herramienta de gestión de         |
    |snapper  |I:8.1      |2396  |instantáneas de sistemas de       |
    |         |           |      |archivos Linux                    |
    +---------------------------------------------------------------+


    También puedes pensar en el enfoque de los script locales
    Sección 10.2.3, “Consejos para copias de seguridad”.

9.4. Monitoreando, controlando e iniciando lo que hacer los programas

    Las actividades de los programas pueden ser monitoreados y
    controlados utilizando herramientas especializadas.

    Tabla 9.8. Relación de las herramientas de monitorización y
    control de las actividades de los programas

    +---------------------------------------------------------------+
    | paquete |popularidad|tamaño|           descripción            |
    |---------+-----------+------+----------------------------------|
    |         |V:911,     |      |nice(1): ejecuta un programa      |
    |coreutils|I:1000     |17994 |modificando su prioridad de       |
    |         |           |      |planificación                     |
    |---------+-----------+------+----------------------------------|
    |         |V:443,     |      |renice(1): cambia la prioridad de |
    |bsdutils |I:999      |334   |planificación de un proceso en    |
    |         |           |      |ejecución                         |
    |---------+-----------+------+----------------------------------|
    |         |V:834,     |      |«/proc» utilidades del sistema de |
    |procps   |I:997      |2389  |archivos: ps(1), top(1), kill(1), |
    |         |           |      |watch(1), …                       |
    |---------+-----------+------+----------------------------------|
    |         |V:404,     |      |«/proc» utilidades del sistema de |
    |psmisc   |I:727      |950   |archivos: killall(1), fuser(1),   |
    |         |           |      |peekfd(1), pstree(1)              |
    |---------+-----------+------+----------------------------------|
    |         |           |      |time(1): ejecuta un programa para |
    |time     |V:6, I:81  |148   |crear un informe de los recursos  |
    |         |           |      |del sistema utilizados a lo largo |
    |         |           |      |del tiempo                        |
    |---------+-----------+------+----------------------------------|
    |         |V:120,     |      |sar(1), iostat(1), mpstat(1), …:  |
    |sysstat  |I:166      |1904  |herramientas de optimización del  |
    |         |           |      |sistema en Linux                  |
    |---------+-----------+------+----------------------------------|
    |isag     |V:0.1,     |109   |Graficador Interactivo de la      |
    |         |I:3.3      |      |Actividad del Sistema para sysstat|
    |---------+-----------+------+----------------------------------|
    |         |           |      |lsof(8): enumera la relación de   |
    |lsof     |V:445,     |492   |archivos abiertos por un proceso  |
    |         |I:949      |      |en ejecución utilizando la opción |
    |         |           |      |«-p»                              |
    |---------+-----------+------+----------------------------------|
    |strace   |V:10, I:102|4393  |strace(1): registro de las        |
    |         |           |      |llamadas del sistema y señales    |
    |---------+-----------+------+----------------------------------|
    |ltrace   |V:1, I:12  |420   |ltrace(1): registro a las         |
    |         |           |      |bibliotecas invocadas             |
    |---------+-----------+------+----------------------------------|
    |         |V:0.04,    |      |xtrace(1): registra las           |
    |xtrace   |I:0.70     |342   |comunicaciones entre el cliente y |
    |         |           |      |el servidor en X11                |
    |---------+-----------+------+----------------------------------|
    |         |           |      |powertop(1): información sobre el |
    |powertop |V:33, I:224|696   |uso de la potencia por parte del  |
    |         |           |      |sistema                           |
    |---------+-----------+------+----------------------------------|
    |         |V:922,     |      |ejecuta procesos en segundo plano |
    |cron     |I:997      |247   |de acuerdo a su planificación     |
    |         |           |      |desde el dominio cron(8)          |
    |---------+-----------+------+----------------------------------|
    |         |V:419,     |      |planificador de tareas similar a  |
    |anacron  |I:476      |110   |cron para los sistemas que no     |
    |         |           |      |están activos 24 horas al día     |
    |---------+-----------+------+----------------------------------|
    |         |           |      |at(1) o batch(1): ejecuta un      |
    |at       |V:73, I:98 |158   |trabajo en un momento determinado |
    |         |           |      |o debajo de cierto nivel de carga |
    +---------------------------------------------------------------+


    Sugerencia

    El paquete procps provee lo fundamental para la monitorización,
    control e inicio de las actividades de los programas. Podría
    aprender sobre todo ello.

9.4.1. Temporización de un proceso

    Muestra el tiempo utilizado por un proceso llamado por una orden.

    # time some_command >/dev/null
    real    0m0.035s       # time on wall clock (elapsed real time)
    user    0m0.000s       # time in user mode
    sys     0m0.020s       # time in kernel mode

9.4.2. La prioridad de planificación

    Se usa un buen valor para determinar la prioridad de
    planificación de los procesos.

    Tabla 9.9. Relación de buenos valores para la prioridad de
    planificación

    +---------------------------------------------------------------+
    |  buen   |             prioridad de planificación              |
    |  valor  |                                                     |
    |---------+-----------------------------------------------------|
    |19       |proceso de menor prioridad (buen)                    |
    |---------+-----------------------------------------------------|
    |0        |proceso de muy alta prioridad para el usuario        |
    |---------+-----------------------------------------------------|
    |-20      |proceso de superusuario (no bueno) de muy alta       |
    |         |prioridad                                            |
    +---------------------------------------------------------------+


    # nice  -19 top                                      # very nice
    # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # very fast

    Algunas veces un buen valor extremo produce más mal que bien al
    sistema. Utilice esta orden con cuidado.

9.4.3. La orden ps

    La orden ps(1) en un sistema Debian aportan tanto las
    funcionalidades de SystemV y BSD y ayuda a identificar la
    actividad estática del proceso.

    Tabla 9.10. Lista de estilo de la orden ps

    +---------------------------------------+
    | estilo |orden típica|  funcionalidad  |
    |--------+------------+-----------------|
    |BSD     |ps aux      |muestra %CPU %MEM|
    |--------+------------+-----------------|
    |System V|ps -efH     |visualiza PPID   |
    +---------------------------------------+


    Para los procesos hijos zombies (muertos) , los puede eliminar
    mediante el identificador del proceso padre que corresponde al
    campo «PPID».

    La orden pstree(1) muestra el árbol de procesos.

9.4.4. La orden top

    top(1) en el sistema Debian es rico desde el punto de vista
    funcional y ayuda a identificar que procesos actúan de forma
    extraña puntualmente.

    Es un programa a pantalla completa interactivo. Puede obtener
    ayuda pulsando la tecla «h« y salir pulsando la tecla «q«.

9.4.5. Relación de los archivos abiertos por un proceso

    Puede enumerar los archivos abiertos por un proceso con el
    identificador de proceso (PID), p. ej. 1, con lo siguiente.

    $ sudo lsof -p 1

    PID=1 generalmente es del programa init.

9.4.6. Trazando la actividad de un programa

    Puede trazar la actividad de un programa con strace(1), ltrace
    (1), o xtrace(1) para llamadas y señales del sistema, llamadas a
    bibliotecas o comunicación entre el cliente X11 y el servidor..

    Puede seguir las invocaciones del sistema de la orden ls como se
    muestra.

    $ sudo strace ls

    Sugerencia
   
    Usar el script strace-graph ubicado en /usr/share/doc/strace/
    examples/ para armar una vista de árbol agradable

9.4.7. Identificación de procesos utilizando archivos o conexiones
(sockets)

    También puede identificar procesos utilizando archivos mediante
    fuser(1), p. ej. para «/var/log/mail.log» como se muestra.

    $ sudo fuser -v /var/log/mail.log
                         USER        PID ACCESS COMMAND
    /var/log/mail.log:   root       2946 F.... rsyslogd

    Puede ver que el archivo «/var/log/mail.log» esta abierto en
    escritura por la orden rsyslogd(8).

    También puede identificar un proceso por la utilización de sus
    conexiones (sockets) mediante fuser(1), p. ej. para «smtp/tcp»
    como sigue.

    $ sudo fuser -v smtp/tcp
                         USER        PID ACCESS COMMAND
    smtp/tcp:            Debian-exim   3379 F.... exim4

    Ahora sabe que su sistema ejecuta exim4(8) para gestionar las
    conexiones TCP del puerto SMTP (25).

9.4.8. Repetición de una orden a intervalos constantes

    watch(1) ejecuta un programa de forma reiterada a un intervalo
    constante mientras muestra la salida del programa a pantalla
    completa.

    $ watch w

    Esto muestra quién está acreditado en el sistema y lo actualiza
    cada 2 segundos.

9.4.9. Repetición de una orden sobre archivos

    Existen varias formas de repetir una orden sobre los archivos que
    cumplan una condición, p. ej, encajan en un patrón «*.ext».

      * Método del bucle for del intérprete de órdenes (ver
        Sección 12.1.4, “Bucles del intérprete de órdenes”):

    for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done

      * Combinación de find(1) y xargs(1):

    find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command

      * find(1) con la opción «-exec» y una orden:

    find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;

      * find(1) con la opción «-exec» con un archivo de órdenes
        pequeño:

    find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;

    Los ejemplos anteriores están escritos para garantizar el manejo
    adecuado de nombres de archivo graciosos, como los que contienen
    espacios. Véase Sección 10.1.5, “Formas de selección de archivos”
    para usos más avanzados de find(1).

9.4.10. Iniciar un programa desde el interfaz gráfico de usuario

    Para el interfaz de órdenes en línea (CLI), el programa ejecutado
    será el primero que encaja el nombre en el directorio
    especificado por la variable de entorno $PATH. Ver Sección 1.5.3,
    “La variable «$PATH»”.

    Para el interfaz gráfico de usuario (GUI) que cumple con el
    estándar de freedesktop.org, los archivos *.desktop en el
    directorio /usr/share/applications/ proporcionan los atributos
    necesarios para la visualización de cada programa en el menú del
    interfaz gráfico de usuario. Cada paquete que cumple con el
    sistema de menú xdg de Freedesktop.org instala sus datos de menú
    proporcionados por "*. desktop" en "/usr/share/applications/".
    Los modernos entornos de escritorio que cumplen con el estándar
    Freedesktop.org utilizan estos datos para generar su menú
    utilizando el paquete xdg-utils. Ver "/usr/share/doc/xdg-utils/
    README".

    Por ejemplo, el archivo chromium.desktop define los atributos
    para el «Navegador Web Chromium« como «Name« para el nombre del
    programa, «Exec« para la ruta de ejecución del programa y
    parámetros, «Icon« para el icono utilizado, etc. (consulte la
    Especificación de Entradas del Escritorio (Desktop Entry
    Specification)) como sigue:

    [Desktop Entry]
    Version=1.0
    Name=Chromium Web Browser
    GenericName=Web Browser
    Comment=Access the Internet
    Comment[fr]=Explorer le Web
    Exec=/usr/bin/chromium %U
    Terminal=false
    X-MultipleArgs=false
    Type=Application
    Icon=chromium
    Categories=Network;WebBrowser;
    MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https;
    StartupWMClass=Chromium
    StartupNotify=true

    Esta es una descripción muy simplificada. Los archivos *.desktop
    se revisan como sigue.

    The desktop environment sets $XDG_DATA_HOME and $XDG_DATA_DIR
    environment variables. For example, under the GNOME:

      * $XDG_DATA_HOME esta sin asignar. (El valor por defecto que se
        utiliza es $HOME/.local/share.)
   
      * $XDG_DATA_DIRS se le asigna el valor /usr/share/gnome:/usr/
        local/share/:/usr/share/.

    Así los directorios base (ver XDG Base Directory Specification) y
    los directorios de aplicaciones quedan como sigue.

      * $HOME/.local/share/ → $HOME/.local/share/applications/

      * /usr/share/gnome/ → /usr/share/gnome/applications/
   
      * /usr/local/share/ → /usr/local/share/applications/

      * /usr/share/ → /usr/share/applications/

    Los archivos *.desktop se comprueban en estos directorios de
    aplicaciones siguiendo este orden.

    Sugerencia

    Se puede crear una entrada personalizada al menú del interfaz
    gráfico de usuario (GUI) añadiendo un archivo *.desktop al
    directorio $HOME/.local/share/applications/.

    Sugerencia
   
    La línea "Exec=..." no es analizada por el shell. Utilice el
    comando env(1) si necesita establecer variables de entorno.

    Sugerencia

    Igualmente, si se crea un archivo *.desktop en el directorio
    autostart por debajo de estos directorios base, el programa que
    se especifique en el archivo *.desktop se ejecuta automáticamente
    cuando el entorno de escritorio se inicia. Ver Especificación de
    Inicio Automático de Aplicaciones de Escritorio.

    Sugerencia

    De igual manera, si un archivo *.desktop se crea en el directorio
    $HOME/Desktop y se ha configurado el entorno de escritorio con la
    funcionalidad del lanzador del icono, el programa especificado en
    el se ejecutará cuando se pulse sobre el icono. Tenga en cuenta
    que el nombre real del directorio $HOME/Desktop depende de la
    configuración regional. Consulte xdg-user-dirs-update(1).

9.4.11. Personalizando el inicio de un programa

    Algunos programas inician otros programa de forma automática.
    Aquí están los puntos a comprobar para la personalización de este
    proceso.

      * Menú de configuración de aplicaciones:

          + GNOME desktop: "Settings" → "Apps" → "Default Apps"

          + KDE desktop: "Application Launcher" → "System Settings" →
            "Default Applications"

          + Navegador Iceweasel: «Editar→ «Preferencias« →
            «Aplicaciones«

          + mc(1): «/etc/mc/mc.ext»

      * Variables de entorno como «$BROWSER», «$EDITOR», «$VISUAL» y
        «$PAGER» (ver eviron(7))

      * El sistema update-alternatives(1) para los programas como
        «editor», «view», «x-www-browser», «gnome-www-browser», y
        «www-browser» (ver Sección 1.4.7, “Configuración del editor
        de texto por defecto”)

      * El contenido de los archivos «~/.mailcap» y «/etc/mailcap»
        que asocia los tiposMIME con los programas (ver mailcap(5))

      * El contenido de los archivos «~/.mime.types» y «/etc/
        mime.types» el cual se asocia con la extensión del nombre del
        archivo con los tipos MIME (ver run-mailcap(1))

    Sugerencia
   
    update-mime(8) actualiza el archivo «/etc/mailcap» utilizando el
    archivo «/etc/mailcap.order» (ver mailcap.order(5)).

    Sugerencia

    El paquete debianutils aporta sensible-browser(1),
    sensible-editor(1) y sensible-pager(1) que elige de forma sensata
    el editor, paginador y navegador web que se lanzará,
    respectivamente. Le recomiendo leer estos archivos de órdenes.

    Sugerencia

    Con el fin de ejecutar una aplicación de consola como mutt como
    la preferida en GuI, podría crear una aplicación GUI de la forma
    siguiente y asignar «/usr/local/bin/mutt-term» como su aplicación
    preferida al inicio como se describe.

    # cat /usr/local/bin/mutt-term <<EOF
    #!/bin/sh
    gnome-terminal -e "mutt \$@"
    EOF
    # chmod 755 /usr/local/bin/mutt-term

9.4.12. Matando un proceso

    Utilice kill(1) para matar (o enviar una señal a) un proceso
    mediante su identificador de proceso.

    Utilice killall(1) o pkill(1) para hacer lo mismo mediante otros
    atributos como el nombre de la orden del proceso.

    Tabla 9.11. Relación de las señales más usadas con la orden kill

    +---------------------------------------------------------------+
    |valor de |nombre de|       acción       |         nota         |
    |la señal |la señal |                    |                      |
    |---------+---------+--------------------+----------------------|
    |         |         |no se envía ninguna |comprobar si el       |
    |0        |---      |señal (ver matar(2))|proceso se está       |
    |         |         |                    |ejecutando            |
    |---------+---------+--------------------+----------------------|
    |1        |SIGHUP   |terminar el proceso |terminal desconectado |
    |         |         |                    |(señal bloqueada)     |
    |---------+---------+--------------------+----------------------|
    |2        |SIGINT   |terminar el proceso |interrumpir desde el  |
    |         |         |                    |teclado (CTRL-C)      |
    |---------+---------+--------------------+----------------------|
    |3        |SIGQUIT  |terminar el proceso |salir desde el teclado|
    |         |         |y dump core         |(CTRL-\)              |
    |---------+---------+--------------------+----------------------|
    |9        |SIGKILL  |terminar el proceso |Señal de apagado      |
    |         |         |                    |desbloqueable         |
    |---------+---------+--------------------+----------------------|
    |15       |SIGTERM  |terminar el proceso |Señal de apagado      |
    |         |         |                    |bloqueable            |
    +---------------------------------------------------------------+


9.4.13. Planificación una vez de las tareas

    Ejecute al orden at(1) para planificar una única ejecución de un
    trabajo mediante lo siguiente.

    $ echo 'command -args'| at 3:40 monday

9.4.14. Planificación regular de tareas

    Utilice cron(8) para planificar las tareas de forma regular. Ver
    crontab(1) y crontab(5).

    Puede planificar la ejecución de procesos como un usuario normal,
    p. ej. foo creando un archivo crontab(5) como «/var/spool/cron/
    crontabs/foo» con la orden «crontab -e».

    He aquí un ejemplo de un archivo crontab(5).

    # use /usr/bin/sh to run commands, no matter what /etc/passwd says
    SHELL=/bin/sh
    # mail any output to paul, no matter whose crontab this is
    MAILTO=paul
    # Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
    # run at 00:05, every day
    5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
    # run at 14:15 on the first of every month -- output mailed to paul
    15 14 1  * *   $HOME/bin/monthly
    # run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc:
    0 22 *   * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%%
    23 */2 1 2 *   echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1"
    5  4 *   * sun echo "run at 04:05 every Sunday"
    # run at 03:40 on the first Monday of each month
    40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args

    Sugerencia

    En los sistemas que no están en funcionamiento ininterrumpido,
    instale el paquete anacron para planificar órdenes periódicas en
    los intervalos deseados tan pronto como el equipo activo lo
    permita. Ver anacron(8) y anacrontab(5).

    Sugerencia

    Para los archivos de órdenes de mantenimiento del sistema, puede
    ejecutarlos de forma periódica desde la cuenta de superusuario
    ubicando esos archivos de órdenes en «/etc/cron.hourly/», «/etc/
    cron.daily/», «/etc/cron.weekly/», o «/etc/cron.monthly/». La
    temporización de la ejecución de los archivos de órdenes puede
    personalizarse mediante «/etc/crontab» y «/etc/anacrontab».

    Systemd tiene capacidad de bajo nivel para programar programas
    para que se ejecuten de fondo cron. Por ejemplo, /lib/systemd/
    system/apt-daily.timer y /lib/systemd/system/apt-daily.service
    configuran actividades diarias de descarga de apt. Ver
    systemd.timer(5) .

9.4.15. Programación de tareas en un suceso

    Systemd puede programar el programa no sólo en timer sino también
    en mount. Como ejemplos ver Sección 10.2.3.3, “Copia de seguridad
    activada por acción del temporizador” y Sección 10.2.3.2, “Montar
    la copia de seguridad activada por el acto”.

9.4.16. Tecla Alt-SysRq

    Presionar Alt-SysRq (PrtScr) seguido de una tecla hace la magia
    de rescatar el control del sistema.

    Tabla 9.12. Lista de teclas notables del comando SAK

    +---------------------------------------------------------------+
    | tecla seguida |           descripción de la acción            |
    | de Alt-SysRq  |                                               |
    |---------------+-----------------------------------------------|
    |k              |kill (mata) todos los procesos de la consola   |
    |               |virtual actual (SAK)                           |
    |---------------+-----------------------------------------------|
    |s              |sincroniza todos los sistemas de archivos      |
    |               |montados para evitar la corrupción de datos    |
    |---------------+-----------------------------------------------|
    |u              |remonta todos los sistemas de archivos montados|
    |               |como de solo lectura (desmonta)                |
    |---------------+-----------------------------------------------|
    |r              |recupera el teclado del modo rudo después de   |
    |               |que X falle                                    |
    +---------------------------------------------------------------+


    Más información en Guía del administrador y del usuario del
    kernel de Linux » Linux Magic System Request Key Hacks

    Sugerencia

    Desde terminales SSH etc., puede utilizar la funcionalidad
    Alt-SysRq resribiendo «/proc/sysrq-trigger». Por ejemplo, «echo s
    > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger» desde el
    cursor del intérprete de órdenes del superusuario syncs y umount
    todos los sistemas de archivos.

    El kernel de Debian amd64 Linux actual (2021) tiene /proc/sys/
    kernel/sysrq=438=0b110110110:

      * 2 = 0x2: habilita el control del nivel del registro de la
        consola (ON)

      * 4 = 0x4 - permiti el control del teclado (SAK, unraw) (ON)

      * 8 = 0x8 - habilita dumps de depuración de procesos etc. (OFF)

      * 16 = 0x10 - habilita sync command (ON)
   
      * 32 = 0x20 - habilita volver a montar solo lectura (ON)

      * 64 = 0x40 - permite la señalización de procesos (term, kill,
        oom-kill) (OFF)

      * 128 = 0x80 - permite reboot/poweroff (ON)

      * 256 = 0x100 - permite el inicio de todas las tareas RT (ON)

9.5. Trucos para el mantenimiento del sistema

9.5.1. ¿Quién está en el sistema?

    Puede comprobar quién esta en el sistema así.

      * who(1) muestra quién está acreditado.

      * w(1) muestra quién esta acreditado y que está haciendo.
   
      * last(1) muestra una lista del último usuario conectado.

      * lastb(1) muestra una relación de los últimos intentos
        fallidos de acceso a una sesión.

    Sugerencia
   
    «/var/run/utmp» y «/var/log/wtmp» mantiene esa información de
    usuario. Ver login(1) y utmp(5).

9.5.2. Avisos para todos

    Puede enviar mensajes a cualquiera que esté acreditado en el
    sistema con wall(1) así.

    $ echo "We are shutting down in 1 hour" | wall

9.5.3. Identificación del hardware

    El punto de inicio para la identificación de los dispositivos
    tipo PCI (AGP, PCI-Express, CardBus, ExpressCard, etc.) es la
    orden lspci(8) (preferentemente con la opción «-nn»).

    Otra forma en la que puede identificar el hardware es leyendo el
    contenido de «/proc/bus/pci/devices» o navegando por el árbol de
    directorios que cuelga de «/sys/bus/pci» (ver Sección 1.2.12,
    “procfs y sysfs”).

    Tabla 9.13. Relación de las herramientas para la identificación
    de hardware

    +---------------------------------------------------------------+
    |  paquete  |popularidad|tamaño|          descripción           |
    |-----------+-----------+------+--------------------------------|
    |pciutils   |V:258,     |289   |Utilidades de Linux para PCI:   |
    |           |I:993      |      |lspci(8)                        |
    |-----------+-----------+------+--------------------------------|
    |usbutils   |V:83, I:887|322   |Utilidades de Linux para USB:   |
    |           |           |      |lsusb(8)                        |
    |-----------+-----------+------+--------------------------------|
    |nvme-cli   |V:24, I:34 |2222  |Utilidades NVMe para Linux: nvme|
    |           |           |      |(1)                             |
    |-----------+-----------+------+--------------------------------|
    |pcmciautils|V:4.1,     |92    |Utilidades Linux para PCMCIA:   |
    |           |I:6.4      |      |pccardctl(8)                    |
    |-----------+-----------+------+--------------------------------|
    |           |V:0.2,     |      |colección de herramientas para  |
    |scsitools  |I:2.3      |261   |la gestión de hardware SCSI:    |
    |           |           |      |lsscsi(8)                       |
    |-----------+-----------+------+--------------------------------|
    |procinfo   |V:0.4,     |149   |información del sistema obtenida|
    |           |I:6.2      |      |de «/proc»: lsdev(8)            |
    |-----------+-----------+------+--------------------------------|
    |lshw       |V:13, I:90 |971   |información sobre la            |
    |           |           |      |configuración hardware: lshw(1) |
    |-----------+-----------+------+--------------------------------|
    |discover   |V:26, I:620|81    |sistema de identificación       |
    |           |           |      |hardware: discover(8)           |
    +---------------------------------------------------------------+


9.5.4. Configuración del hardware

    Aunque la mayor parte de la configuración del hardware en los
    sistemas de escritorio con interfaz gráfico de usuario como GNOME
    y KDE se puede realizar mediante herramientas de configuración
    con interfaz gráfico de usuario, es una buena idea conocer
    algunos métodos básicos para su configuración.

    For the keyboard and terminal configuration, see Sección 8.2, “La
    entrada por teclado” and Sección 8.3, “La salida por pantalla”.

    Tabla 9.14. Relación de herramientas de configuración hardware

    +---------------------------------------------------------------+
    |        paquete        |popularidad|tamaño|    descripción     |
    |-----------------------+-----------+------+--------------------|
    |                       |           |      |Utilidades de       |
    |console-setup          |V:81, I:974|422   |teclado y tipos de  |
    |                       |           |      |letra para consolas |
    |-----------------------+-----------+------+--------------------|
    |                       |           |      |keyboard key        |
    |                       |V:1.1,     |      |remapping daemon    |
    |keyd                   |I:1.3      |1437  |using kernel level  |
    |                       |           |      |input primitives    |
    |                       |           |      |(evdev, uinput)     |
    |-----------------------+-----------+------+--------------------|
    |                       |           |      |keyboard key        |
    |keyd-application-mapper|V:0.00,    |34    |remapping daemon -  |
    |                       |I:0.09     |      |application-specific|
    |                       |           |      |remapper            |
    |-----------------------+-----------+------+--------------------|
    |                       |V:309,     |      |Utilidades de       |
    |x11-xserver-utils      |I:531      |559   |servidor X: xset(1),|
    |                       |           |      |xmodmap(1)          |
    |-----------------------+-----------+------+--------------------|
    |                       |           |      |demonio que gestiona|
    |                       |           |      |lo que llegan del   |
    |                       |           |      |Interfaz de Potencia|
    |acpid                  |V:55, I:85 |158   |y Configuración     |
    |                       |           |      |Avanzada (Advanced  |
    |                       |           |      |Configuration and   |
    |                       |           |      |Power Interface,    |
    |                       |           |      |ACPI)               |
    |-----------------------+-----------+------+--------------------|
    |                       |           |      |utilidad para       |
    |acpi                   |V:7, I:79  |49    |visualizar          |
    |                       |           |      |información de      |
    |                       |           |      |dispositivos ACPI   |
    |-----------------------+-----------+------+--------------------|
    |                       |V:0.08,    |      |demonio que «duerme«|
    |sleepd                 |I:0.11     |84    |el portátil si deja |
    |                       |           |      |de tener actividad  |
    |-----------------------+-----------+------+--------------------|
    |                       |           |      |optimización de     |
    |                       |V:117,     |      |acceso al disco duro|
    |hdparm                 |I:213      |246   |(ver Sección 9.6.9, |
    |                       |           |      |“Optimización del   |
    |                       |           |      |disco duro”)        |
    |-----------------------+-----------+------+--------------------|
    |                       |           |      |control y monitoreo |
    |                       |V:235,     |      |de sistemas de      |
    |smartmontools          |I:265      |2455  |almacenamiento      |
    |                       |           |      |utilizando          |
    |                       |           |      |S.M.A.R.T.          |
    |-----------------------+-----------+------+--------------------|
    |                       |           |      |colección de        |
    |setserial              |V:3.2,     |104   |herramientas para la|
    |                       |I:5.2      |      |gestión del puerto  |
    |                       |           |      |serie               |
    |-----------------------+-----------+------+--------------------|
    |                       |           |      |colección de        |
    |memtest86+             |V:1, I:19  |12483 |herramientas para la|
    |                       |           |      |gestión de la       |
    |                       |           |      |memoria hardware    |
    |-----------------------+-----------+------+--------------------|
    |                       |           |      |colección de        |
    |scsitools              |V:0.2,     |261   |herramientas para la|
    |                       |I:2.3      |      |gestión de hardware |
    |                       |           |      |SCSI                |
    |-----------------------+-----------+------+--------------------|
    |                       |V:0.06,    |      |optimización de     |
    |setcd                  |I:0.66     |33    |acceso a la unidad  |
    |                       |           |      |de discos compactos |
    |-----------------------+-----------+------+--------------------|
    |big-cursor             |I:0.64     |26    |cursores grandes del|
    |                       |           |      |ratón para X        |
    +---------------------------------------------------------------+


    Aquí, ACPI es un marco más nuevo para el sistema de gestión de
    fuerza que APM.

    Sugerencia

    La frecuencia de funcionamiento de la CPU de los sistemas
    modernos esta gestionada por módulos en el núcleo como
    acpi_cpufreq.

9.5.5. Hora del sistema y del hardware

    Lo siguiente asigna al sistema y hardware la hora y fecha a MM/DD
    hh:mm CCYY.

    # date MMDDhhmmCCYY
    # hwclock --utc --systohc
    # hwclock --show

    La hora habitualmente se visualiza en la hora local en el sistema
    Debian pero el hardware y el sistema usa generalmente la hora en
    UTC(GMT).

    Si la hora del hardware está establecida en UTC, cambia la
    configuración a "UTC=yes" en "/etc/default/rcS".

    Lo siguiente reconfigura la zona horaria utilizada por el sistema
    Debian.

    # dpkg-reconfigure tzdata

    Si desea actualizar el tiempo del sistema a través de la red,
    piense en utilizar el servicio NTP con paquetes como ntp, ntpdate
    y chrony.

    Sugerencia
   
    En systemd para la sincronización de la hora a través de la red
    utilice systemd-timesyncd. Ver systemd-timesyncd(8).

    Ver lo siguiente.

      * Manual Cómo Gestionar la Precisión de la Fecha y Hora

      * Proyecto de Servicio NTP Público (NTP Public Services
        Project)

      * El paquete ntp-doc

    Sugerencia
   
    ntptrace(8) del paquete ntp puede trazar una cadena de vuelta de
    los servidores NTP a la fuente primigenia.

9.5.6. La infraestructura de sonido

    La Arquitectura Avanzada de Sonido para Linux (Advanced Linux
    Sound Architecture, ALSA) proporciona los controladores de
    dispositivos de tarjetas de sonido en el actual Linux. ALSA tiene
    un modo de emulación para ser compatible con el anterior Open
    Sound System (OSS).

    El software de aplicación se puede configurar no solo para
    acceder directamente a los dispositivos de sonido, sino también
    para acceder a ellos a través de algún sistema de servidor de
    sonido estandarizado. Actualmente, PulseAudio, JACK y PipeWire se
    utilizan como sistema de servidor de sonido. Ver la Página Wiki
    de Debian sobre sonido para estar actualizado.

    Generalmente existe un motor de sonido común para los entorno de
    escritorio más populares. Cada motor de sonido utilizado por la
    aplicación puede elegir conectarse a diferentes servidores de
    sonido.

    Sugerencia
   
    Para comprobar el altavoz (speaker) utilice «cat /dev/urandom > /
    dev/audio» o speaker-test(1) (^C para finalizar).

    Sugerencia

    Si no obtiene sonido, su altavoz puede estar conectado a una
    salida en silencio. Alsamixer(1) en el paquete alsa-utils le será
    útil para la configuración del volumen y el silencio.

    Tabla 9.15. Relación de paquetes de sonido

    +---------------------------------------------------------------+
    |    paquete    |popularidad|tamaño|        descripción         |
    |---------------+-----------+------+----------------------------|
    |alsa-utils     |V:340,     |2696  |utilidades para configurar y|
    |               |I:459      |      |usar ALSA                   |
    |---------------+-----------+------+----------------------------|
    |               |V:0.6,     |      |La compatibilidad de ALSA   |
    |oss-compat     |I:9.7      |21    |con OSS evita errores como «|
    |               |           |      |/dev/dsp no se encuentra»   |
    |---------------+-----------+------+----------------------------|
    |               |V:321,     |      |servidor multimedia del     |
    |pipewire       |I:365      |135   |motor de procesamiento de   |
    |               |           |      |audio y vídeo - metapaquete |
    |---------------+-----------+------+----------------------------|
    |               |           |      |servidor multimedia del     |
    |pipewire-bin   |V:328,     |2219  |motor de procesamiento del  |
    |               |I:365      |      |audio y vídeo - servidor de |
    |               |           |      |audio y programas CLI       |
    |---------------+-----------+------+----------------------------|
    |               |           |      |servidor multimedia del     |
    |pipewire-alsa  |V:169,     |190   |motor de procesamiento del  |
    |               |I:234      |      |audio y vídeo - servidor de |
    |               |           |      |audio para reemplazar ALSA  |
    |---------------+-----------+------+----------------------------|
    |               |           |      |servidor multimedia del     |
    |               |V:289,     |      |motor de procesamiento del  |
    |pipewire-pulse |I:337      |53    |audio y vídeo - servidor de |
    |               |           |      |audio para reemplazar       |
    |               |           |      |PulseAudio                  |
    |---------------+-----------+------+----------------------------|
    |pulseaudio     |V:156,     |6602  |PulseAudio servidor         |
    |               |I:182      |      |                            |
    |---------------+-----------+------+----------------------------|
    |libpulse0      |V:440,     |969   |biblioteca del cliente para |
    |               |I:577      |      |PulseAudio                  |
    |---------------+-----------+------+----------------------------|
    |               |           |      |JACK Audio Connection Kit.  |
    |jackd          |V:2, I:14  |8     |(JACK) servidor (baja       |
    |               |           |      |latencia)                   |
    |---------------+-----------+------+----------------------------|
    |               |V:1.8,     |      |Kit de conexión de audio    |
    |libjack0       |I:8.8      |329   |JACK. (JACK) biblioteca     |
    |               |           |      |(baja latencia)             |
    |---------------+-----------+------+----------------------------|
    |libphonon4qt5-4|V:22, I:50 |572   |Phonon: motor de sonido KDE |
    +---------------------------------------------------------------+


9.5.7. Deshabilitar el salvapantallas

    Para deshabilitar el salvapantallas, utilice las siguientes
    órdenes.

    Tabla 9.16. Relación de las órdenes para deshabilitar el
    salvapantallas

    +---------------------------------------------------------------+
    |                 entorno                  |       orden        |
    |------------------------------------------+--------------------|
    |La consola de Linux                       |setterm -powersave  |
    |                                          |off                 |
    |------------------------------------------+--------------------|
    |Las Ventanas X (deshabilitando el         |xset s off          |
    |salvapantallas)                           |                    |
    |------------------------------------------+--------------------|
    |Las Ventanas X (deshabilitando dpms)      |xset -dpms          |
    |------------------------------------------+--------------------|
    |Las Ventanas X (configuración por GUI del |xscreensaver-command|
    |salvapantallas)                           |-prefs              |
    +---------------------------------------------------------------+


9.5.8. Deshabilitando los pitidos

    Siempre puede desenchufar el altavoz del PC para deshabilitar los
    pitidos. Eliminando el módulo del núcleo pcspkr realiza ese
    trabajo por usted.

    Lo siguiente impide que el programa readline(3) utilizado por
    bash(1) pite cuando encuentre un carácter de alerta (ASCII=7).

    $ echo "set bell-style none">> ~/.inputrc

9.5.9. Utilización de memoria

    Existen dos recursos disponibles para determinar el uso de la
    memoria.

      * El mensaje de arranque del núcleo en «/var/log/dmesg»
        contiene el tamaño exacto de memoria disponible.
   
      * free(1) y top(1) visualiza la información de los recursos de
        memoria en el sistema en ejecución.

    Aquí hay un ejemplo.

    # grep '\] Memory' /var/log/dmesg
    [    0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init)
    $ free -k
                 total       used       free     shared    buffers     cached
    Mem:        997184     976928      20256          0     129592     171932
    -/+ buffers/cache:     675404     321780
    Swap:      4545576          4    4545572

    Te puede sorprender que «dmesg diga que existen 990 MB libres y
    free -k dice que solo hay 320 MB libres. Más de 600 MB de
    diferencia …».

    No se preocupe por el gran tamaño de memoria «utilizada» y el
    pequeño tamaño de memoria «libre» en la línea «Mem:», pero lea lo
    que hay debajo (675404 y 321780 en el ejemplo anterior) y
    relájese.

    Para mi MacBook con 1GB=1048576k DRAM (el sistema de vídeo usa
    algo de esto), tengo lo siguiente.

    Tabla 9.17. Relación de informes de tamaño de la memoria

    +---------------------------------------------------------------+
    |          informe           |              tamaño              |
    |----------------------------+----------------------------------|
    |Tamaño total en dmesg       |1016784k = 1GB - 31792k           |
    |----------------------------+----------------------------------|
    |Memoria libre en dmesg      |990528k                           |
    |----------------------------+----------------------------------|
    |Total en el intérprete de   |997184k                           |
    |órdenes                     |                                  |
    |----------------------------+----------------------------------|
    |Libre en el intérprete de   |20256k (pero de forma efectiva    |
    |órdenes                     |321780k)                          |
    +---------------------------------------------------------------+


9.5.10. Sistema de seguridad y de comprobación de la integridad

    Un mantenimiento inadecuado del sistema puede exponerlo a sufrir
    un ataque del exterior.

    Para la seguridad y las comprobaciones de integridad, debe
    comenzar con lo que se muestra.

      * Para el paquete debsums, ver debsums(1) y Sección 2.5.2,
        “Archivo «Release» del nivel superior y autenticación”.

      * Para el paquete chkrootkit ver chkrootkit(1).

      * Para la familia de paquetes clamav ver clamscan(1) y
        freshclam(1).

      * FAQ de Seguridad Debian.

      * Manual de Seguridad Debian.

    Tabla 9.18. Relación de las herramientas de seguridad del sistema
    y comprobación de la integridad

    +---------------------------------------------------------------+
    | paquete  |popularidad|tamaño|           descripción           |
    |----------+-----------+------+---------------------------------|
    |          |V:4.8,     |      |demonio que envía por correo     |
    |logcheck  |I:5.9      |120   |anomalías en los registros del   |
    |          |           |      |sistema al administrador         |
    |----------+-----------+------+---------------------------------|
    |          |           |      |utilidad para verificar los      |
    |debsums   |V:4, I:30  |108   |archivos de los paquetes         |
    |          |           |      |instalado mediante sumas MD5     |
    |----------+-----------+------+---------------------------------|
    |chkrootkit|V:9, I:14  |987   |detector de rootkit              |
    |----------+-----------+------+---------------------------------|
    |clamav    |V:9, I:39  |39204 |utilidad anti-virus para Unix -  |
    |          |           |      |interfaz de línea de órdenes     |
    |----------+-----------+------+---------------------------------|
    |tiger     |V:1.2,     |7800  |informa de vulnerabilidades de   |
    |          |I:1.5      |      |seguridad del sistema            |
    |----------+-----------+------+---------------------------------|
    |tripwire  |V:1.3,     |5060  |comprobador de integridad de     |
    |          |I:1.6      |      |archivos y directorios           |
    |----------+-----------+------+---------------------------------|
    |john      |V:1.1,     |469   |herramienta para descifrar       |
    |          |I:7.3      |      |contraseñas                      |
    |----------+-----------+------+---------------------------------|
    |aide      |V:2.0,     |324   |Entorno de Detección Avanzado de |
    |          |I:2.4      |      |Intrusión - binario estático     |
    |----------+-----------+------+---------------------------------|
    |integrit  |V:0.10,    |2771  |programa de verificación de la   |
    |          |I:0.18     |      |integridad del archivo           |
    |----------+-----------+------+---------------------------------|
    |crack     |V:0.09,    |153   |programa que adivina contraseñas |
    |          |I:0.57     |      |                                 |
    +---------------------------------------------------------------+


    He aquí un archivo de órdenes para comprobar el permiso de
    escritura incorrecto para todos.

    # find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)

    Atención

    Ya que el paquete debsums utiliza la comprobación mediante MD5
    almacenado en local, no se puede confiar plenamente en él como
    herramienta de auditoría de seguridad del sistema contra ataques
    maliciosos.

9.6. Trucos del almacenamiento de datos

    Booting your system as the Linux live system (see Sección 3.2.2,
    “Linux live rescue system on USB” and Sección 3.2.3, “Linux live
    rescue system from GRUB”) makes it easy for you to reconfigure
    data storage on the installed system.

    Nota

    Statements on hard disk (HDD) are applicable to other storage
    devices such as SSD / USB flash drive / Memory card / ... .
    Replace device names in examples such as /dev/sda with applicable
    device names /dev/nvme0, /dev/mmcblk0, ... .

    Es posible que debas desmontar(8) algunos dispositivos
    manualmente desde la línea de comandos antes de operar en ellos
    si el sistema del escritorio GUI los monta automáticamente.

9.6.1. Uso de espacio de disco

    El uso de espacio en disco lo pueden evaluar los programas
    proporcionados por los paquetes mount, coreutils y xdu:

      * mount(8) muestra todos los sistemas de archivos (=discos)
        montados.

      * df(1) muestra el espacio de disco utilizado por el sistema de
        archivos.

      * du(1) informa del espacio de disco utilizado por el árbol de
        un directorio.

    Sugerencia

    Puede utilizar la salida de du(8) como entrada de xdu(1) para
    tener una presentación gráfica e interactiva con «du -k . |xdu»,
    «sudo du -k -x / |xdu», etc.

9.6.2. Configuración del particionado de disco

    Para la configuración de la partición del disco , a pesar de que
    fdisk(8) fue considerado en el pasado el estándar, parted(8)
    merece nuestra atención. Las expresiones «datos del particionado
    del disco«, «tabla de partición«, «mapa de particiones« y
    «marcado del disco« son todas ellas sinónimos.

    Los ordenadores más antiguos usan el esquema clásico Master Boot
    Record (MBR) para almacenar datos del particionamiento del disco
    en el primer sector, es decir, LBA sector 0 (512 bytes).

    Algunos ordenadores modernos con Interfaz de firmware extensible
    unificada (UEFI), incluidas los Mac basados en Intel, usan
    Identificar la tabla de particiones única globalmente (partición
    GUID Table, GPT) esquema, partición del disco duro los datos no
    se guardan en el primer sector.

    Aunque fdisk(8) fue la herramienta estándar para el particionado
    del disco, se ha sustituido por parted(8).

    Tabla 9.19. Relación de paquetes para la gestión del particionado
    del disco

    +---------------------------------------------------------------+
    | paquete  |popularidad|tamaño|           descripción           |
    |----------+-----------+------+---------------------------------|
    |util-linux|V:917,     |4658  |las utilidades varias del sistema|
    |          |I:1000     |      |incluyen fdisk(8) y cfdisk(8)    |
    |----------+-----------+------+---------------------------------|
    |          |V:449,     |      |Programa de modificación del     |
    |parted    |I:568      |122   |tamaño de las particiones de     |
    |          |           |      |disco GNU Parted                 |
    |----------+-----------+------+---------------------------------|
    |gparted   |V:12, I:87 |2313  |Editor GNOME del particionado    |
    |          |           |      |basado en libparted              |
    |----------+-----------+------+---------------------------------|
    |gdisk     |V:19, I:277|967   |editor de particiones para el    |
    |          |           |      |disco híbrido GPT/MBR            |
    |----------+-----------+------+---------------------------------|
    |kpartx    |V:17, I:26 |76    |programa para crear mapeos entre |
    |          |           |      |dispositivos y particiones       |
    +---------------------------------------------------------------+


    Atención

    Aunque parted(8) afirma que crea y también modifica el tamaño de
    los sistemas de archivos, es más seguro realizar estas tareas con
    herramientas especializadas de mantenimiento como mkfs(8)
    (mkfs.msdos(8), mkfs.ext2(8), mkfs.ext3(8), mkfs.ext4(8), …) y
    resize2fs(8).

    Nota

    Para realizar el cambio entre GPT y MBR, necesita eliminar el
    contenido de unos cuantos bloques ubicados al principio (ver
    Sección 9.8.6, “Limpieza del contenido de los archivos”) y
    utilice «parted /dev/sdx mklabel gpt» o «parted /dev/sdx mklabel
    msdos» para asignarlo. Tenga en cuenta que «msdos» se utiliza
    para MBR.

9.6.3. Acceso al particionado utilizando UUID

    Aunque la reconfiguración de tu partición o el orden de
    activación de los medios del almacenamiento extraíbles puede dar
    lugar a diferentes nombres para las particiones, puede acceder a
    ellos de forma coherente. Esto también es útil si tienes varios
    discos y tu BIOS/UEFI no les da nombres de dispositivo
    consistentes.

      * mount(8) con la opción «-U» permite montar dispositivos de
        bloque utilizando UUID, en lugar de sus nombres de archivo
        como «/dev/sda3».
   
      * «/etc/fstab» (ver fstab(5)) puede utilizar UUID.

      * Los gestores de arranque (Sección 3.1.2, “Fase 2: el cargador
        de arranque”) pueden utilizar también UUID.

    Sugerencia

    Puede determinar el UUID de un dispositivo especial de bloque con
    blkid(8).

    También puedes buscar el UUID y otra información con "lsblk -f".

9.6.4. LVM2

    LVM2 es un gestor de volúmenes lógicos del núcleo de Linux. Con
    LVM2 las particiones de disco se pueden crear en volúmenes
    lógicos en vez de discos duros físicos.

    LVM necesita lo siguiente.

      * soporte de device-mapper en el núcleo Linux (por defecto en
        los núcleos de Debian)

      * el soporte de la biblioteca device-mapper en el espacio de
        usuario (paquete libdevmaper*)

      * herramientas LVM2 del espacio de usuario (paquete lvm2)

    Por favor, para saber sobre LVM2 lea las siguiente páginas de
    manual.

      * lvm(8): Fundamentos del mecanismo LVM2 (relación de todas las
        órdenes LVM2)

      * lvm.conf(5): archivo de configuración de LVM2
   
      * lvs(8): crea un informe sobre los volúmenes lógicos

      * vgs(8): crea un informe sobre los grupos de volúmenes

      * pvs(8): crea un informe sobre los volúmenes físicos

9.6.5. Configuración del sistema de archivos

    Para el sistema de archivos ext4, el paquete e2fsprogs aporta lo
    siguiente.

      * mkfs.ext4(8) para crear un nuevo de sistema de archivos ext4

      * fsck.ext4(8) para comprobar y reparar un sistema de archivos
        ext4 preexistente
   
      * tune2fs(8) para configurar el superbloque de ext4 filesystem

      * debugfs(8) para depurar en modo interactivo el sistema de
        archivos ext4. (Existe la orden undel para recuperar los
        archivos borrados.)

    Las órdenes mkfs(8) y fsck(8) esta en el paquete e2fsprogs como
    interfaz de varios programas específicos del sistema de archivos
    (mkfs.fstype y fsck.fstype). Para el sistema de archivos ext4
    existen mkfs.ext4(8) y fsck.ext4(8) (esta enlazado a mke2fs(8) y
    e2fsck(8)).

    Las siguientes órdenes están disponibles para cada sistema de
    archivos que soporta Linux.

    Tabla 9.20. Relación de paquetes para la gestión del sistema de
    archivos

    +---------------------------------------------------------------+
    |   paquete    |popularidad|tamaño|         descripción         |
    |--------------+-----------+------+-----------------------------|
    |e2fsprogs     |V:822,     |1543  |utilidades para el sistema de|
    |              |I:997      |      |archivos ext2/ext3/ext4      |
    |--------------+-----------+------+-----------------------------|
    |btrfs-progs   |V:51, I:78 |5250  |utilidades para el sistema de|
    |              |           |      |archivos Btrfs               |
    |--------------+-----------+------+-----------------------------|
    |reiserfsprogs |V:11, I:22 |473   |utilidades para el sistema de|
    |              |           |      |archivos Reiserfs            |
    |--------------+-----------+------+-----------------------------|
    |zfsutils-linux|V:33, I:33 |1895  |utilidades para el sistema de|
    |              |           |      |archivos OpenZFS             |
    |--------------+-----------+------+-----------------------------|
    |              |V:257,     |      |utilidades para el sistema de|
    |dosfstools    |I:564      |310   |archivos FAT. (Microsoft:    |
    |              |           |      |MS-DOS, Windows)             |
    |--------------+-----------+------+-----------------------------|
    |              |           |      |utilidades para el sistema de|
    |exfatprogs    |V:34, I:459|558   |archivos exFAT mantenido por |
    |              |           |      |Samsung.                     |
    |--------------+-----------+------+-----------------------------|
    |              |           |      |lectura/escritura exFAT      |
    |exfat-fuse    |V:2, I:45  |73    |controlador del sistema de   |
    |              |           |      |archivos (Microsoft) para    |
    |              |           |      |FUSE.                        |
    |--------------+-----------+------+-----------------------------|
    |xfsprogs      |V:41, I:87 |4382  |utilidades para el sistema de|
    |              |           |      |archivos XFS. (SGI: IRIX)    |
    |--------------+-----------+------+-----------------------------|
    |              |           |      |lectura/escritura NTFS       |
    |ntfs-3g       |V:201,     |1501  |controlador del sistema de   |
    |              |I:512      |      |archivos (Microsoft: Windows |
    |              |           |      |NT, ...) para FUSE.          |
    |--------------+-----------+------+-----------------------------|
    |              |V:0.4,     |      |utilidades para el sistema de|
    |jfsutils      |I:6.9      |1104  |archivos JFS. (IBM: AIX, OS/ |
    |              |           |      |2)                           |
    |--------------+-----------+------+-----------------------------|
    |              |           |      |utilities for the ISO-9660   |
    |xorriso       |V:14, I:64 |378   |filesystem and CD/DVD writing|
    |              |           |      |from libburnia               |
    |--------------+-----------+------+-----------------------------|
    |wodim         |V:7, I:89  |898   |command line CD/DVD writing  |
    |              |           |      |tool from cdrkit             |
    |--------------+-----------+------+-----------------------------|
    |genisoimage   |V:17, I:160|1567  |command line ISO-9660        |
    |              |           |      |filesystem tool from cdrkit  |
    |--------------+-----------+------+-----------------------------|
    |reiser4progs  |V:0.1,     |1367  |utilidades para el sistema de|
    |              |I:1.2      |      |archivos Reiser4             |
    |--------------+-----------+------+-----------------------------|
    |              |V:0.3,     |      |utilidades para el sistema de|
    |hfsprogs      |I:3.2      |394   |archivos HFS y HFS Plus.     |
    |              |           |      |(Apple: Mac OS)              |
    |--------------+-----------+------+-----------------------------|
    |              |           |      |programa de cero bloques     |
    |zerofree      |V:7, I:120 |30    |libres para sistemas de      |
    |              |           |      |archivos ext2/3/4            |
    +---------------------------------------------------------------+


    Sugerencia

    Ext4 es el sistema de archivos por defecto para el sistema Linux
    y es muy recomendable su uso a menos que tenga una razón concreta
    para no hacerlo.

    El estado de Btrfs se puede encontrar en La wiki de Debian en
    btrfs y la wiki kernel.org wiki en btrfs. Se espera que sea el
    siguiente sistema de archivos por defecto después del sistema de
    archivos ext4.

    Algunas herramientas permiten el acceso al sistema de archivos
    sin soporte del núcleo de Linux (ver Sección 9.8.2, “Manipular
    archivos sin el montaje de discos”).

9.6.6. Comprobación de la integridad y creación del sistema de
archivos

    La orden mkfs(8) crea el sistema de archivos en el sistema Linux.
    La orden fsck(8) aporta la comprobación de integridad al sistema
    de archivos y la capacidad de reparación al sistema Linux.

    El Debian actual no ejecuta periódicamente fsck después de la
    creación del sistema de archivos.

    Atención
   
    Normalmente no es seguro ejecutar fsck en sistemas de archivos
    montados.

    Sugerencia

    Puede ejecutar la orden fsck(8) de forma segura en todos los
    sistemas de archivos incluido el sistema de archivos raíz en el
    arranque activando «enable_periodic_fsck» en «/etc/mke2fs.conf» y
    el contador de montajes máximo a 0 utilizando «tune2fs -c0 /dev/
    nombre_de_la_partición». Ver mke2fs.conf(5) y tune2fs(8).

    Para comprobar la ejecución de la orden fsck(8) del archivo de
    órdenes del arranque compruebe los archivos en «/var/log/fsck/».

9.6.7. Optimización de los sistemas de archivos a través de las
opciones de montaje

    La configuración estática básica del sistema de archivos se
    realizan en «/etc/fstab». Por ejemplo,

    «file system»                   «mount point» «type» «options»    «dump» «pass»
    proc                                      /proc proc   defaults          0 0
    UUID=709cbe4c-80c1-56db-8ab1-dbce3146d2f7 /     ext4   errors=remount-ro 0 1
    UUID=817bae6b-45d2-5aca-4d2a-1267ab46ac23 none  swap   sw                0 0
    /dev/scd0                        /media/cdrom0  udf,iso9660 user,noauto  0 0

    Sugerencia

    UUID (ver Sección 9.6.3, “Acceso al particionado utilizando UUID”
    ) puede utilizarse para identificar los dispositivos de bloque en
    lugar de los nombres de los dispositivos de bloque como «/dev/
    sda1», «/dev/sda2», …

    Desde Linux 2.6.30, el kernel utiliza por defecto el
    comportamiento proporcionado por la opción "relatime".

    Ver fstab(5) y mount(8).

9.6.8. Optimización del sistema de archivo a través del superbloque

    La caracterización del sistema de archivos se puede optimizar a
    través de su superbloque utilizando la orden tune2fs(8).

      * La ejecución de «sudo tune2fs -l /dev/sda1» muestra el
        contenido del sistema de archivos del superbloque de «/dev/
        sda1».

      * La ejecución de «sudo tune2fs -c 50 /dev/sda1» cambia la
        frecuencia de comprobaciones del sistema de archivos (fsck
        durante el arranque) cada 50 arranques en «/dev/sda1».

      * La ejecución de «sudo tune2fs -j /dev/sda1» añade la
        capacidad del registro de operaciones al sistema archivos, a
        saber conversión del sistema de archivos de ext2 a ext3 en «/
        dev/sda1». (Para ello se necesita que el sistema de archivos
        este desmontado.)

      * La ejecución de «sudo tune2fs -O extents,uninit_bg,dir_index
        /dev/sda1 && fsck -pf /dev/sda1» lo convierte de ext3 a ext4
        en «/dev/sda1». (Realice esto con el sistema de archivos
        desmontado.)

    Sugerencia

    A pesar de su nombre, tune2fs(8) trabaja no solo con el sistema
    de archivos ext2 pero también con los sistemas de archivos ext3 y
    ext4.

9.6.9. Optimización del disco duro

    Aviso

    Por favor, compruebe su hardware y lea las páginas de manual de
    hdparm(8) antes de probar las configuraciones del disco duro ya
    que puede ser peligroso para la integridad de los datos.

    Puede comprobar la velocidad de acceso al disco duro, p. ej. «/
    dev/sda» con «hdparm -tT /dev/sda». Algunos discos conectados
    mediante (E)IDE se puede mejorar su velocidad con «hdparm -q -c3
    -d1 -u1 -m16 /dev/sda» activando el «soporte I/O (E)IDE 32-bit«,
    activando la «bandera using_dma«, asignando la «bandera
    interrupt-unmask» y activando «multiple 16 sector I/O»
    (¡peligroso!).

    Puede comprobar la funcionalidad de la escritura de caché del
    disco duro , p. ej. «/dev/sda», con «hdparm -W /dev/sda». Para
    deshabilitar esta funcionalidad ejecute «hdparm -W 0 /dev/sda».

    Puede intentar leer CDROMs dañados en dispositivos de lectura de
    alta velocidad modernos haciendo que funcionen a menor velocidad
    con «setcd -x 2».

9.6.10. Optimización de un disco de estado sólido (SSD)

    La unidad de estado sólido (SSD) ahora se detecta
    automáticamente.

    Reducir los accesos innecesarios al disco para evitar el desgaste
    del disco montando "tmpfs" en la trayectoria de datos volátil en
    /etc/fstab.

9.6.11. Utilice SMART para predecir fallos en su disco duro

    Puede monitorear y registrar el cumplimiento de su disco duro con
    SMART con el demonio smartd(8).

     1. Active la funcionalidad SMART en la BIOS.

     2. Instale el paquete smartmontools.

     3. Identifique los dispositivos que son discos duros
        enumerándolos con df(1).

          + Asumamos que el dispositivo de disco duro a controlar es
            «/dev/sda».

     4. Compruebe la salida de «smartctl -a /dev/sda» para verificar
        que la funcionalidad SMART está activada realmente.

          + Si no es así, actívelo con «smartctl -s on -a /dev/sda».

     5. Active el demonio smartd(8) ejecutando lo siguiente.

          + descomente «start_smartd=yes» en el archivo «/etc/default
            /smartmontools».

          + reiniciar el demonio smartd(8) mediante «sudo /etc/init.d
            /smartmontools restart».

    Sugerencia

    El demonio smartd(8) se puede personalizar mediante el archivo /
    etc/smartd.conf que incluye el modo de notificación de las
    alertas.

9.6.12. Determine el directorio de almacenamiento temporal por medio
de $TMPDIR

    Las aplicaciones habitualmente crean los archivos temporales en
    el directorio de almacenamiento temporal «/tmp». Si «/tmp» no
    proporciona suficiente espacio, puede especificar el directorio
    de almacenamiento temporal por medio de la variable $TMPDIR para
    obtener el comportamiento adecuado de las aplicaciones.

9.6.13. Expansión del espacio de almacenamiento utilizable mediante
LVM

    Las particiones creadas mediante el Gestor de Volúmenes Lógicos
    (Logical Volume Manager, LVM) (funcionalidad de Linux) en el
    momento de la instalación, se pueden redimensionar de forma
    sencilla mediante la concatenación o la extensión de estas sobre
    varios dispositivos de almacenamiento sin necesitar otras
    reconfiguraciones del sistema.

9.6.14. Expansión del espacio de almacenamiento útil mediante el
montaje de otra partición

    Si tiene una partición vacía (p. ej. «/dev/sdx»), puede darle
    formato con mkfs.ext4(1) y montarlo(8) en un directorio donde
    necesite más espacio. (Necesitará copiar el contenido de los
    datos originales.)

    $ sudo mv work-dir old-dir
    $ sudo mkfs.ext4 /dev/sdx
    $ sudo mount -t ext4 /dev/sdx work-dir
    $ sudo cp -a old-dir/* work-dir
    $ sudo rm -rf old-dir

    Sugerencia

    También puede montar un archivo de imagen de disco vacío (ver
    Sección 9.7.5, “Haciendo un archivo de imagen de disco vacío”)
    como un dispositivo «loop« (ver Sección 9.7.3, “Montaje del
    archivo imagen del disco”). El uso actual del disco crece con los
    datos reales almacenados.

9.6.15. Expansión del espacio de almacenamiento por el enlace
mediante el montaje en otro directorio

    Si tiene un directorio vacío (p. ej. «/path/to/emp-dir») en otra
    partición con espacio utilizable, puede montar(8)lo con la opción
    «--bind» a un directorio (p. ej., «work-dir») donde necesite más
    espacio.

    $ sudo mount --bind /path/to/emp-dir work-dir

9.6.16. Expansión del espacio de almacenamiento utilizable por
superposición-montaje de otro directorio

    Si tiene espacio útil en otras particiones (p. ej. «/path/to/
    empty» y «/path/to/work»), puede crear un directorio en él y
    juntarlo con el antiguo directorio (p. ej., «/path/to/old») donde
    necesita espacio usando el OverlayFS para el kernel de Linux 3.18
    o posterior (Debian Stretch 9.0 o nuevas).

    $ sudo mount -t overlay overlay \
      -olowerdir=/path/to/old-dir,upperdir=/path/to/empty,workdir=/path/to/work

    Aquí, «/path/to/empty» y «/path/to/work» deben ser una partición
    con permiso RW para escribir en "/path/to/old"..

9.6.17. Expansión del espacio de almacenamiento útil utilizando un
enlace simbólico

    Atención

    Este es un método obsoleto. Algún software puede no funcionar
    bien con "enlace simbólico a un directorio". En su lugar, utilice
    los enfoques de "montaje" ya descritos.

    Si tiene un directorio vacío (p. ej., «/path/to/emp-dir») en otra
    partición con espacio utilizable, puede crear un enlace simbólico
    a el directorio con ln(8).

    $ sudo mv work-dir old-dir
    $ sudo mkdir -p /path/to/emp-dir
    $ sudo ln -sf /path/to/emp-dir work-dir
    $ sudo cp -a old-dir/* work-dir
    $ sudo rm -rf old-dir

    Aviso

    No utilice «enlaces simbólicos a directorios« que gestionen el
    sistema como «/opt». Como enlace simbólico se puede sobreescribir
    cuando se actualice el sistema.

9.7. La imagen de disco

    Aquí hablaremos de la manipulación de imágenes de disco.

9.7.1. Creando un archivo de imagen de disco

    The disk image file, "disk.img", of an unmounted device, e.g.,
    the second SCSI or serial ATA drive "/dev/sdb", can be made by
    one of the following.

    # dd if=/dev/sdb of=disk.img; sync

    # cp /dev/sdb disk.img ; sync

    # cat /dev/sdb > disk.img ; sync

    La imagen de disco de un PC tradicional Registro de Arranque
    Maestro(MBR) (ver Sección 9.6.2, “Configuración del particionado
    de disco”) que está en el primer sector del disco primario IDE
    puede hacerse mediante dd(1) lo siguiente.

    # dd if=/dev/sda of=mbr.img bs=512 count=1
    # dd if=/dev/sda of=mbr-nopart.img bs=446 count=1
    # dd if=/dev/sda of=mbr-part.img skip=446 bs=1 count=66

      * «mbr.img»: MBR con la tabla de particiones

      * «mbr-nopart.img»: MBR sin la tabla de particiones

      * «mbr-part.img»: Únicamente la tabla de particiones MBR

    Si ha hecho una imagen del disco de la partición del disco
    original, cambie «/dev/sda» por «/dev/sda1» etc.

9.7.2. Escribiendo directamente en el disco

    The disk image file, "disk.img" can be written to an unmounted
    device, e.g., the second SCSI drive "/dev/sdb" with matching
    size, by one of the following.

    # dd if=disk.img of=/dev/sdb ; sync

    # cp disk.img /dev/sdb ; sync

    # cat disk.img >/dev/sdb ; sync

    De forma parecida, el archivo imagen de la partición del disco,
    «partition.img» se puede escribir a una partición desmontada, p.
    ej., la primera partición del segundo dispositivo SCSI «/dev/
    sdb1» con el tamaño correcto, como se muestra.

    # dd if=partition.img of=/dev/sdb1 ; sync

9.7.3. Montaje del archivo imagen del disco

    La imagen del disco «partition.img» que contiene la imagen de una
    única partición se puede montar y desmontar utilizándolo como
    dispositivo «loop« como aparece.

    # losetup --show -f partition.img
    /dev/loop0
    # mkdir -p /mnt/loop0
    # mount -t auto /dev/loop0 /mnt/loop0
    ...hack...hack...hack
    # umount /dev/loop0
    # losetup -d /dev/loop0

    Este se puede simplificar como se muestra.

    # mkdir -p /mnt/loop0
    # mount -t auto -o loop partition.img /mnt/loop0
    ...hack...hack...hack
    # umount partition.img

    Cada partición de una imagen de disco «disk.img» que contiene
    varias particiones se pueden montar utilizando los dispositivos
    «loop«.

    # losetup --show -f -P disk.img
    /dev/loop0
    # ls -l /dev/loop0*
    brw-rw---- 1 root disk   7,  0 Apr  2 22:51 /dev/loop0
    brw-rw---- 1 root disk 259, 12 Apr  2 22:51 /dev/loop0p1
    brw-rw---- 1 root disk 259, 13 Apr  2 22:51 /dev/loop0p14
    brw-rw---- 1 root disk 259, 14 Apr  2 22:51 /dev/loop0p15
    # fdisk -l /dev/loop0
    Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1

    Device         Start     End Sectors  Size Type
    /dev/loop0p1  262144 4192255 3930112  1.9G Linux root (x86-64)
    /dev/loop0p14   2048    8191    6144    3M BIOS boot
    /dev/loop0p15   8192  262143  253952  124M EFI System

    Partition table entries are not in disk order.
    # mkdir -p /mnt/loop0p1
    # mkdir -p /mnt/loop0p15
    # mount -t auto /dev/loop0p1 /mnt/loop0p1
    # mount -t auto /dev/loop0p15 /mnt/loop0p15
    # mount |grep loop
    /dev/loop0p1 on /mnt/loop0p1 type ext4 (rw,relatime)
    /dev/loop0p15 on /mnt/loop0p15 type vfat (rw,relatime,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
    ...hack...hack...hack
    # umount /dev/loop0p1
    # umount /dev/loop0p15
    # losetup -d /dev/loop0

    De forma alternativa, se pueden conseguir los mismos efectos
    utilizando el mapeo de dispositivos de los dispositivos creados
    por kpartx(8) del paquete kpartx como sigue.

    # kpartx -a -v disk.img
    add map loop0p1 (253:0): 0 3930112 linear 7:0 262144
    add map loop0p14 (253:1): 0 6144 linear 7:0 2048
    add map loop0p15 (253:2): 0 253952 linear 7:0 8192
    # fdisk -l /dev/loop0
    Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1

    Device         Start     End Sectors  Size Type
    /dev/loop0p1  262144 4192255 3930112  1.9G Linux root (x86-64)
    /dev/loop0p14   2048    8191    6144    3M BIOS boot
    /dev/loop0p15   8192  262143  253952  124M EFI System

    Partition table entries are not in disk order.
    # ls -l /dev/mapper/
    total 0
    crw------- 1 root root 10, 236 Apr  2 22:45 control
    lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p1 -> ../dm-0
    lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p14 -> ../dm-1
    lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p15 -> ../dm-2
    # mkdir -p /mnt/loop0p1
    # mkdir -p /mnt/loop0p15
    # mount -t auto /dev/mapper/loop0p1 /mnt/loop0p1
    # mount -t auto /dev/mapper/loop0p15 /mnt/loop0p15
    # mount |grep loop
    /dev/loop0p1 on /mnt/loop0p1 type ext4 (rw,relatime)
    /dev/loop0p15 on /mnt/loop0p15 type vfat (rw,relatime,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
    ...hack...hack...hack
    # umount /dev/mapper/loop0p1
    # umount /dev/mapper/loop0p15
    # kpartx -d disk.img

9.7.4. Limpiando un archivo de imagen de disco

    Un archivo de imagen de disco, «disk.img» se puede limpiar de
    archivos borrados en una imagen dispersa limpia «new.img» así.

    # mkdir old; mkdir new
    # mount -t auto -o loop disk.img old
    # dd bs=1 count=0 if=/dev/zero of=new.img seek=5G
    # mount -t auto -o loop new.img new
    # cd old
    # cp -a --sparse=always ./ ../new/
    # cd ..
    # umount new.img
    # umount disk.img

    Si «disk.img» es ext2, ext3 o ext4, también puede utilizar
    zerofree(8) del paquete zerofree como se muestra.

    # losetup --show -f disk.img
    /dev/loop0
    # zerofree /dev/loop0
    # cp --sparse=always disk.img new.img
    # losetup -d /dev/loop0

9.7.5. Haciendo un archivo de imagen de disco vacío

    La imagen de disco vacío «disk.img» el cual puede crecer hasta
    5GiB, pude hacerse mediante dd(1) como se muestra.

    $ dd bs=1 count=0 if=/dev/zero of=disk.img seek=5G

    En lugar de usar dd(1), se puede usar aquí fallocate(8)
    especializado.

    Puede crear un sistema de archivos ext4 en la imagen de disco
    «disk.img» utilizando el dispositivo «loop« como se muestra.

    # losetup --show -f disk.img
    /dev/loop0
    # mkfs.ext4 /dev/loop0
    ...hack...hack...hack
    # losetup -d /dev/loop0
    $ du  --apparent-size -h disk.img
    5.0G  disk.img
    $ du -h disk.img
    83M disk.img

    Para «disk.img», su tamaño de archivo es 5.0 GiB y su utilización
    real de disco es de sólo 83MiB. Esta discrepancia es posible ya
    que ext4 se puede representar mediante un archivo disperso.

    Sugerencia
   
    La utilización real de discos que utiliza un archivo disperso
    crece con los datos que son escritos en el.

    Utilizando la misma operación en dispositivos creados por el
    dispositivo «loop« o el mapeador de dispositivos como
    Sección 9.7.3, “Montaje del archivo imagen del disco”, puede
    particionar esta imagen de disco «disk.img» utilizando parted(8)
    o fdisk(8) y puede crear el archivo de sistemas en el utilizando
    mkfs.ext4(8), mkswap(8), etc.

9.7.6. Haciendo un archivo de imagen ISO9660

    Sugerencia

    Both genisoimage(1) provided by cdrkit and xorrisofs(1) provided
    by Libburnia share the same command syntax except for the command
    name.

    El archivo de imagen ISO9660, «cd.iso», utilizando como origen el
    árbol de directorios de «source_directory» se puede hacer
    utilizando genisoimage(1) aportado por cdrkit como se muestra.

    #  genisoimage -r -J -T -V volume_id -o cd.iso source_directory

    De igual manera, el archivo imagen ISO9660 arrancable,
    «cdboot.iso», se puede realizar desde el debian-installer como el
    árbol de directorios del «source_directory» como se muestra.

    #  genisoimage -r -o cdboot.iso -V volume_id \
       -b isolinux/isolinux.bin -c isolinux/boot.cat \
       -no-emul-boot -boot-load-size 4 -boot-info-table source_directory

    Aquí el cargador de arranque Isolinux (ver Sección 3.1.2, “Fase
    2: el cargador de arranque”) se utiliza para el arranque.

    Puede calcular el valor md5sum y hace la imagen ISO9660
    directamente desde el dispositivo CD-ROM como se muestra.

    $ isoinfo -d -i /dev/cdrom
    CD-ROM is in ISO 9660 format
    ...
    Logical block size is: 2048
    Volume size is: 23150592
    ...
    # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror | md5sum
    # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror > cd.iso

    Aviso

    Debe evitar cuidadosamente el sistema de archivos ISO9660 debido
    al problema de lectura adelantada de Linux para obtener el
    resultado correcto.

9.7.7. Escritura directa al CD/DVD-R/RW

    Sugerencia

    DVD is only a large CD to wodim(1) provided by cdrkit and
    xorrecord(1) provided by Libburnia. These commands share the same
    command syntax except for the command name.

    Puede encontrar un dispositivo utilizable como se muestra.

    # wodim --devices

    Entonces se inserta el CD-R vacío en el dispositivo CD, y el
    archivo de imagen ISO9660 , «cd.iso» se escribe en el
    dispositivo, p. ej. «/dev/sda», utilizando wodim(1) como se
    muestra.

    # wodim -v -eject dev=/dev/sda cd.iso

    Si se utiliza un CR-RW en lugar de un CD-R, hago lo siguiente en
    su lugar.

    # wodim -v -eject blank=fast dev=/dev/sda cd.iso

    Sugerencia

    Si su sistema de escritorio monta automáticamente los CD,
    desmóntalo con «sudo umount /dev/sda» desde la consola antes de
    utilizar wodim(1).

9.7.8. Montando un archivo imagen ISO9660

    Si «cd.iso» contiene una imagen ISO9660, entonces lo siguiente
    sirve para montarlo de forma manual en «/cdrom».

    # mount -t iso9660 -o ro,loop cd.iso /cdrom

    Sugerencia

    Los sistemas de escritorio modernos pueden montar los medios
    extraíbles como un CD con formato ISO9660 de forma automática
    (ver Sección 10.1.7, “Dispositivos de almacenamiento extraíbles”
    ).

9.8. Datos binarios

    Aquí discutiremos la manipulación directa de datos binarios en
    medios de almacenamiento.

9.8.1. Viendo y editando datos binarios

    El método más básico de visualización de datos binarios es la
    orden «od -t x1».

    Tabla 9.21. Relación de paquetes para la visualización y edición
    de datos binarios

    +---------------------------------------------------------------+
    |    paquete    |popularidad|tamaño|        descripción         |
    |---------------+-----------+------+----------------------------|
    |               |V:911,     |      |paquete básico que tiene od |
    |coreutils      |I:1000     |17994 |(1) para volcar archivos    |
    |               |           |      |(HEX, ASCII, OCTAL, …)      |
    |---------------+-----------+------+----------------------------|
    |               |           |      |paquete de utilidades que   |
    |bsdmainutils   |V:4, I:136 |17    |tiene hd(1) para volcar     |
    |               |           |      |archivos (HEX, ASCII, OCTAL,|
    |               |           |      |…)                          |
    |---------------+-----------+------+----------------------------|
    |hexedit        |V:0.8,     |70    |visor y editor binario (HEX,|
    |               |I:7.9      |      |ASCII)                      |
    |---------------+-----------+------+----------------------------|
    |               |V:0.2,     |      |editor hexadecimal con      |
    |bless          |I:1.4      |924   |funcionalidad completa      |
    |               |           |      |(GNOME)                     |
    |---------------+-----------+------+----------------------------|
    |               |           |      |editor hexadecimal con      |
    |okteta         |V:1, I:12  |1589  |funcionalidad completa      |
    |               |           |      |(KDE4)                      |
    |---------------+-----------+------+----------------------------|
    |ncurses-hexedit|V:0.1,     |130   |visor y editor binario (HEX,|
    |               |I:1.2      |      |ASCII, EBCDIC)              |
    |---------------+-----------+------+----------------------------|
    |beav           |V:0.04,    |137   |visor y editor binario (HEX,|
    |               |I:0.32     |      |ASCII, EBCDIC, OCTAL, …)    |
    +---------------------------------------------------------------+


    Sugerencia

    HEX es un acrónimo del formato hexadecimal con radix 16. OCTAL se
    utiliza para formato octal con radix 8. ASCII se utiliza para
    Codificación Americana Estándar para el Intercambio de
    Información (American Standard Code for Information Interchange),
    a saber, codificación del inglés normal. EBCDIC es para Extended
    Binary Coded Decimal Interchange Code utilizado en sistemas
    operativos de IBM mainframe.

9.8.2. Manipular archivos sin el montaje de discos

    Existen herramientas para leer y escribir archivos sin montar el
    disco.

    Tabla 9.22. Relación de paquetes para manipular archivos sin
    montar el disco

    +---------------------------------------------------------------+
    |paquete |popularidad|tamaño|            descripción            |
    |--------+-----------+------+-----------------------------------|
    |mtools  |V:7, I:53  |400   |utilidades para archivos MSDOS sin |
    |        |           |      |montarlos                          |
    |--------+-----------+------+-----------------------------------|
    |hfsutils|V:0.2,     |178   |utilidades para archivos HFS y HFS+|
    |        |I:2.7      |      |sin montarlos                      |
    +---------------------------------------------------------------+


9.8.3. Redundancia de datos

    Los sistemas de software RAID del núcleo Linux aportan
    redundancia en el nivel del sistema de archivos de datos del
    núcleo con la finalidad de alcanzar alta fiabilidad en el
    almacenamiento.

    Existen herramientas para añadir datos redundados a archivos al
    nivel de aplicación de programas para conseguir también alta
    fiabilidad en el almacenamiento.

    Tabla 9.23. Relación de herramientas para añadir redundancia de
    datos a los archivos

    +---------------------------------------------------------------+
    | paquete  |popularidad|tamaño|           descripción           |
    |----------+-----------+------+---------------------------------|
    |          |           |      |Paridad del conjunto de volúmenes|
    |par2      |V:9, I:116 |297   |de archivo, para comprobar y     |
    |          |           |      |reparar archivos                 |
    |----------+-----------+------+---------------------------------|
    |dvdisaster|V:0.1,     |1422  |Protección contra pérdida/rotura/|
    |          |I:1.2      |      |vejez de medios CD/DVD           |
    |----------+-----------+------+---------------------------------|
    |          |V:0.01,    |      |herramienta de copia de seguridad|
    |dvbackup  |I:0.03     |413   |para MiniDV (aportada por rsbep  |
    |          |           |      |(1))                             |
    +---------------------------------------------------------------+


9.8.4. Recuperación de datos de archivos y análisis forense

    Existen herramientas para la recuperación de archivos y análisis
    forense.

    Tabla 9.24. Relación de paquetes para la recuperación de archivos
    y análisis forense

    +---------------------------------------------------------------+
    |   paquete   |popularidad|tamaño|         descripción          |
    |-------------+-----------+------+------------------------------|
    |             |           |      |utilidades para el escaneado  |
    |testdisk     |V:2, I:25  |2275  |de particiones y              |
    |             |           |      |recuperaciones de disco       |
    |-------------+-----------+------+------------------------------|
    |             |V:0.2,     |      |utilidades para la            |
    |magicrescue  |I:1.7      |257   |recuperación de archivos y    |
    |             |           |      |búsqueda de bytes mágicos     |
    |-------------+-----------+------+------------------------------|
    |scalpel      |V:0.2,     |89    |Divisor de archivos ligero y  |
    |             |I:2.2      |      |alto rendimiento              |
    |-------------+-----------+------+------------------------------|
    |myrescue     |V:0.2,     |81    |recuperación de datos de      |
    |             |I:1.8      |      |discos duros dañados          |
    |-------------+-----------+------+------------------------------|
    |             |V:0.5,     |      |utilidad para recuperar       |
    |extundelete  |I:7.3      |152   |archivos borrados en sistemas |
    |             |           |      |de archivos ext3/4            |
    |-------------+-----------+------+------------------------------|
    |             |V:0.3,     |      |utilidad para recuperar       |
    |ext4magic    |I:3.4      |235   |archivos borrados en sistemas |
    |             |           |      |de archivos ext3/4            |
    |-------------+-----------+------+------------------------------|
    |             |           |      |herramienta de ayuda a la     |
    |ext3grep     |V:0.2,     |299   |recuperación de archivos      |
    |             |I:1.8      |      |borrados en sistemas de       |
    |             |           |      |archivos ext3                 |
    |-------------+-----------+------+------------------------------|
    |             |V:0.2,     |      |programa de recuperación de   |
    |scrounge-ntfs|I:1.5      |49    |datos en sistemas de archivos |
    |             |           |      |NTFS                          |
    |-------------+-----------+------+------------------------------|
    |gzrt         |V:0.03,    |34    |conjunto de herramientas de   |
    |             |I:0.47     |      |recuperación gzip             |
    |-------------+-----------+------+------------------------------|
    |sleuthkit    |V:2, I:25  |1119  |herramientas de análisis      |
    |             |           |      |forense (Sleuthkit)           |
    |-------------+-----------+------+------------------------------|
    |autopsy      |V:0.2,     |1026  |interfaz gráfico para         |
    |             |I:1.1      |      |SleuthKit                     |
    |-------------+-----------+------+------------------------------|
    |foremost     |V:0.4,     |102   |aplicación forense para la    |
    |             |I:4.0      |      |recuperación de datos         |
    |-------------+-----------+------+------------------------------|
    |             |V:0.13,    |      |herramienta para el análisis  |
    |guymager     |I:0.75     |1049  |forense de imágenes basado en |
    |             |           |      |Qt                            |
    |-------------+-----------+------+------------------------------|
    |dcfldd       |V:0.3,     |113   |versión mejorada de dd para   |
    |             |I:2.7      |      |análisis forense y seguridad  |
    +---------------------------------------------------------------+


    Sugerencia

    Puede recuperar archivos borrados en sistemas de archivos ext2
    utilizando la relación_de_inodos_borrados y la orden undel de
    debugfs(8) en el paquete e2fsprogs.

9.8.5. División de un archivo grande en archivos de tamaño menor

    Cuando los datos son demasiado grandes para guardarlos en un
    único archivo, puede obtener una copia de seguridad de su
    contenido dividiéndolo en, p. ej. trozos de 2000MiB y juntarlos
    más tarde para obtener el archivo original.

    $ split -b 2000m large_file
    $ cat x* >large_file

    Atención
   
    Por favor, asegúrese que no tiene ningún archivo que comience por
    «x» para evitar fallos de nombrado.

9.8.6. Limpieza del contenido de los archivos

    Para limpiar el contenido de los archivos como los archivos de
    registro, no utilice rm(1) para borrarlo y crear uno nuevo vacío,
    ya que puede intentar ser accedido entre ambas operaciones. La
    forma segura de limpiar el contenido de un archivo es la que se
    muestra.

    $ :>file_to_be_cleared

9.8.7. Archivos «vacíos»

    Las órdenes siguientes crean archivos «vacíos».

    $ dd if=/dev/zero    of=5kb.file bs=1k count=5
    $ dd if=/dev/urandom of=7mb.file bs=1M count=7
    $ touch zero.file
    $ : > alwayszero.file

    Encontrará lo siguiente tras ejecutar lo anterior.

      * «5kb.file» que contiene 5KB de ceros.

      * «7mb.file» que contiene 7MB de datos aleatorios.

      * «zero.file» puede tener 0 bytes. Si existiera con
        anterioridad, su mtime es actualizado y su contenido y su
        longitud permanecen sin cambios.

      * «alwayszero.file» es siempre un archivo de 0 bytes. Si
        existía con anterioridad, su mtime es actualizado y su
        contenido borrado.

9.8.8. Borrando completo de un disco duro

    There are several ways to completely erase data from an entire
    hard disk like device, e.g., USB flash drive at "/dev/sda".

    Atención

    Check your USB flash drive location with mount(8) first before
    executing commands here. The device pointed by "/dev/sda" may be
    SCSI hard disk or serial-ATA hard disk where your entire system
    resides.

    Borre todo el contenido del disco poniendo a 0 toda la
    información como se muestra.

    # dd if=/dev/zero of=/dev/sda

    Bórrelo todo escribiendo datos aleatorios como sigue.

    # dd if=/dev/urandom of=/dev/sda

    Bórrelo todo sobrescribiendo datos aleatorios de forma eficiente
    como se muestra.

    # shred -v -n 1 /dev/sda

    También puede usar la opción badblocks(8) con la opción -t
    random.

    Ya que dd(1) esta disponible en el intérprete de órdenes de
    muchos CDs de Linux arrancables como el CD instalador de Debian,
    puede borrar el sistema instalado completamente ejecutando una de
    las órdenes anteriores desde dicho medio sobre el disco duro del
    sistema, p. ej.«/dev/sda», «/dev/sda», etc.

9.8.9. Borrar áreas de disco duro no utilizadas

    Unused area on an hard disk (or USB flash drive), e.g. "/dev/
    sdb1" may still contain erased data themselves since they are
    only unlinked from the filesystem. These can be cleaned by
    overwriting them.

    # mount -t auto /dev/sdb1 /mnt/foo
    # cd /mnt/foo
    # dd if=/dev/zero of=junk
    dd: writing to `junk': No space left on device
    ...
    # sync
    # umount /dev/sdb1

    Aviso

    This is usually good enough for your USB flash drive. But this is
    not perfect. Most parts of erased filenames and their attributes
    may be hidden and remain in the filesystem.

9.8.10. Recuperando archivos borrados pero todavía abiertos

    Incluso en el caso de que accidentalmente haya borrado un
    archivo, mientras que ese archivo sea utilizado por alguna
    aplicación (en modo lectura o escritura), es posible recuperar
    dicho archivo.

    Por ejemplo, intente lo siguiente

    $ echo foo > bar
    $ less bar
    $ ps aux | grep ' less[ ]'
    bozo    4775  0.0  0.0  92200   884 pts/8    S+   00:18   0:00 less bar
    $ rm bar
    $ ls -l /proc/4775/fd | grep bar
    lr-x------ 1 bozo bozo 64 2008-05-09 00:19 4 -> /home/bozo/bar (deleted)
    $ cat /proc/4775/fd/4 >bar
    $ ls -l
    -rw-r--r-- 1 bozo bozo 4 2008-05-09 00:25 bar
    $ cat bar
    foo

    Ejecute en otro terminal (cuando tenga el paquete lsof instalado)
    como se muestra.

    $ ls -li bar
    2228329 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:02 bar
    $ lsof |grep bar|grep less
    less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar
    $ rm bar
    $ lsof |grep bar|grep less
    less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar (deleted)
    $ cat /proc/4775/fd/4 >bar
    $ ls -li bar
    2228302 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:05 bar
    $ cat bar
    foo

9.8.11. Buscando todos los enlaces duros

    Los archivos con enlaces duros pueden identificarse mediante «ls
    -li».

    $ ls -li
    total 0
    2738405 -rw-r--r-- 1 root root 0 2008-09-15 20:21 bar
    2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 baz
    2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 foo

    Tanto «baz» como «foo» tiene una cuenta de «2« (>1) de forma que
    tiene enlaces duros. Sus números de inodos son comunes «2738404«.
    Esto significa que son el mismo archivo mediante un archivo duro.
    Si no se encuentra todos los enlaces duros por casualidad, puede
    buscarlos mediante el inodo, p. ej. «2738404« como sigue.

    # find /path/to/mount/point -xdev -inum 2738404

9.8.12. Consumo invisible de espacio de disco

    Todos los archivos borrados pero abiertos consumen espacio de
    disco aunque no son visibles para el du(1) normal. Estos pueden
    ser enumerados junto con su tamaño como se muestra.

    # lsof -s -X / |grep deleted

9.9. Trucos para cifrar información

    Con acceso físico a su PC, cualquiera puede acceder como
    superusuario y acceder a todos los archivos en él (ver
    Sección 4.6.4, “Asegurando la contraseña de root”). Esto
    significa que el sistema de acceso por contraseña puede no
    asegurar sus datos delicados y privados contra posibles ladrones
    de su PC. Para hacerlo debe desplegar alguna tecnología de
    cifrado de información. Aunque GNU privacy guard (ver
    Sección 10.3, “Infraestructura de seguridad de la información”)
    puede cifrar archivos , necesita de los esfuerzos del usuario.

    Dm-crypt ayuda al cifrado automático de la información de forma
    nativa por medio de módulos del núcleo Linux con el mínimo
    esfuerzo por parte del usuario usando device-mapper.

    Tabla 9.25. Relación de utilidades para el cifrado de información

    +---------------------------------------------------------------+
    |   paquete    |popularidad|tamaño|         descripción         |
    |--------------+-----------+------+-----------------------------|
    |              |           |      |utilidades para cifrar       |
    |cryptsetup    |V:35, I:78 |462   |dispositivos de bloque       |
    |              |           |      |(dm-crypt / LUKS)            |
    |--------------+-----------+------+-----------------------------|
    |              |           |      |utilidades para cifrar       |
    |              |V:1.9,     |      |dispositivos de bloque       |
    |cryptmount    |I:2.5      |236   |(dm-crypt / LUKS) centrado en|
    |              |           |      |el montaje/desmontaje por    |
    |              |           |      |usuarios normales            |
    |--------------+-----------+------+-----------------------------|
    |              |V:0.4,     |      |utilidades para el cifrado   |
    |fscrypt       |I:1.1      |6545  |del sistema de archivos de   |
    |              |           |      |Linux (fscrypt)              |
    |--------------+-----------+------+-----------------------------|
    |              |V:0.27,    |      |Módulo PAM para el cifrado   |
    |libpam-fscrypt|I:0.34     |6594  |del sistema de archivos de   |
    |              |           |      |Linux (fscrypt)              |
    +---------------------------------------------------------------+


    Atención

    El cifrado de datos gasta recursos de la CPU, etc. Los datos
    encriptados se vuelven inaccesibles si se pierde su contraseña.
    Sopesa sus ventajas y sus costes.

    Nota

    El sistema Debian entero puede instalarse en el disco cifrado por
    el instalador debian (lenny o más nuevo) utilizando dm-crypt/LUKS
    y initramfs.

    Sugerencia

    Ver Sección 10.3, “Infraestructura de seguridad de la
    información” para la utilización del cifrado del espacio de
    usuario: GNU Privacy Guard.

9.9.1. Cifrado de discos externos con dm-crypt/LUKS

    You can encrypt contents of removable mass devices, e.g. USB
    flash drive on "/dev/sdx", using dm-crypt/LUKS. You simply format
    it as the following.

    # fdisk /dev/sdx
    ... "n" "p" "1" "return" "return" "w"
    # cryptsetup luksFormat /dev/sdx1
    ...
    # cryptsetup open /dev/sdx1 secret
    ...
    # ls -l /dev/mapper/
    total 0
    crw-rw---- 1 root root  10, 60 2021-10-04 18:44 control
    lrwxrwxrwx 1 root root       7 2021-10-04 23:55 secret -> ../dm-0
    # mkfs.vfat /dev/mapper/secret
    ...
    # cryptsetup close secret

    Entonces, se puede montar igual que uno normal en "/media/
    nombre_usuario/etiqueta_disco", excepto para pedir la contraseña
    (ver Sección 10.1.7, “Dispositivos de almacenamiento extraíbles”)
    bajo el entorno de un escritorio moderno usando el paquete
    udisks2. La diferencia es que todos los datos que se escriben en
    él están cifrados. La introducción de la contraseña puede
    automatizarse utilizando llaveros (véase Sección 10.3.6, “Llavero
    de contraseña”).

    Alternativamente, puedes formatear los medios en un sistema de
    archivos diferente, por ejemplo, ext4 con "mkfs.ext4 /dev/mapper/
    sdx1". Si se utiliza btrfs en su lugar, es necesario instalar el
    paquete udisks2-btrfs. Para estos sistemas de archivos, puede ser
    necesario configurar la propiedad y los permisos de los archivos.

9.9.2. Montaje de disco cifrado con dm-crypt/LUCKS

    Por ejemplo, una partición de disco cifrada creada con dm-crypt/
    LUKS en "/dev/sdc5" por el instalador de Debian puede montarse en
    "/mnt" de la siguiente forma:

    $ sudo cryptsetup open /dev/sdc5 ninja --type luks
    Enter passphrase for /dev/sdc5: ****
    $ sudo lvm
    lvm> lvscan
      inactive          '/dev/ninja-vg/root' [13.52 GiB] inherit
      inactive          '/dev/ninja-vg/swap_1' [640.00 MiB] inherit
      ACTIVE            '/dev/goofy/root' [180.00 GiB] inherit
      ACTIVE            '/dev/goofy/swap' [9.70 GiB] inherit
    lvm> lvchange -a y /dev/ninja-vg/root
    lvm> exit
      Exiting.
    $ sudo mount /dev/ninja-vg/root /mnt

9.10. El núcleo

    Debian distribuye el núcleo de Linux modularizado en paquetes
    para soportar las arquitecturas.

    Si estás leyendo esta documentación, probablemente no necesites
    compilar el kernel de Linux por ti mismo.

9.10.1. Parámetros del núcleo

    Muchas funcionalidades de Linux son configurables por medio de
    parámetros del núcleo como se muestra.

      * Los parámetros del núcleo las inicializa el cargador de
        arranque (ver Sección 3.1.2, “Fase 2: el cargador de
        arranque”)

      * Los parámetros del núcleo cambian mediante sysctl(8) en
        tiempo de ejecución por aquellos accesibles por medio de
        sysfs (consulte Sección 1.2.12, “procfs y sysfs”)

      * Los parámetros de modprobe(8) se asignan como parámetros del
        módulo cuando se activa el módulo (ver Sección 9.7.3,
        “Montaje del archivo imagen del disco”)

    Consulta la "Guía del usuario y administrador del kernel de Linux
    " Parámetros de la línea de comandos del kernel" para obtener más
    información.

9.10.2. Cabeceras del núcleo

    La mayor parte de los programas normales no necesitan las
    cabeceras del núcleo y de hecho puede producir errores si se
    utiliza directamente para compilar. Estos se deben compilar con
    las cabeceras en «/usr/include/linux» y «/usr/include/asm» que
    están en el paquete libc6-dev (creado por el paquete fuente
    glibc) en el sistema Debian.

    Nota

    Para compilar algunos programas específicos del kernel, como los
    módulos del kernel de la fuente externa y el contador automático
    de daemon (amd), debe incluir la ruta a las cabeceras del kernel
    correspondientes, por ejemplo, "-I/usr/src/
    linux-particular-version/include/", en tu línea de comandos.

9.10.3. Compilar el núcleo y los módulos asociados

    Debian tiene su propio método para compilar el núcleo y los
    módulos asociados.

    Tabla 9.26. Relación de los paquetes fundamentales para la
    recompilación del núcleo en los sistemas Debian

    +---------------------------------------------------------------+
    |    paquete     |popularidad|tamaño|        descripción        |
    |----------------+-----------+------+---------------------------|
    |                |           |      |paquetes fundamentales para|
    |build-essential |V:16, I:511|17    |la construcción de paquetes|
    |                |           |      |Debian: make, gcc, …       |
    |----------------+-----------+------+---------------------------|
    |                |V:163,     |      |utilidades de compresión y |
    |bzip2           |I:972      |113   |descompresión de archivos  |
    |                |           |      |bz2                        |
    |----------------+-----------+------+---------------------------|
    |libncurses5-dev |I:36       |6     |bibliotecas de desarrollo y|
    |                |           |      |documentación de ncurses   |
    |----------------+-----------+------+---------------------------|
    |                |           |      |git: sistema de control de |
    |git             |V:406,     |50972 |versiones distribuido      |
    |                |I:616      |      |utilizado por el núcleo de |
    |                |           |      |Linux                      |
    |----------------+-----------+------+---------------------------|
    |                |           |      |aporta el entorno fakeroot |
    |fakeroot        |V:31, I:513|224   |para la construcción de    |
    |                |           |      |paquetes sin ser «root«    |
    |----------------+-----------+------+---------------------------|
    |                |V:465,     |      |herramienta para construir |
    |initramfs-tools |I:988      |49    |initramfs (propio de       |
    |                |           |      |Debian)                    |
    |----------------+-----------+------+---------------------------|
    |                |           |      |soporte del núcleo para    |
    |dkms            |V:79, I:147|235   |módulos dinámico (DKMS,    |
    |                |           |      |dynamic kernel module      |
    |                |           |      |support) (genérico)        |
    |----------------+-----------+------+---------------------------|
    |                |           |      |herramienta de ayuda para  |
    |module-assistant|V:1, I:13  |395   |crear los paquetes de los  |
    |                |           |      |módulos (específico de     |
    |                |           |      |Debian)                    |
    |----------------+-----------+------+---------------------------|
    |                |           |      |archivos de órdenes para el|
    |devscripts      |V:5, I:32  |2763  |mantenimiento de Paquetes  |
    |                |           |      |Debian (específico de      |
    |                |           |      |Debian)                    |
    +---------------------------------------------------------------+


    Si utiliza initrd en Sección 3.1.2, “Fase 2: el cargador de
    arranque”, asegurese de leer la documentación asociada en
    initramfs-tools(8), update-initramfs(8), mkinitramfs(8) y
    initramfs.conf(5).

    Aviso

    No cree enlaces simbólicos en el árbol de directorios del código
    fuente (p. ej. «/usr/src/linux*») de «/usr/include/linux» y «/usr
    /include/asm» cuando compile código fuente del núcleo de Linux.
    (Algunos documentos sin actualizar lo sugieren.)

    Nota

    Cuando compile el núcleo de Linux en el sistema Debian stable
    (estable), la utilización las últimas herramientas retroportadas
    de Debian unstable (inestable) pueden ser necesarias.

    module-assistant(8) (o su forma abreviada m-a) ayuda a los
    usuarios a construir e instalar fácilmente los paquetes de los
    módulos para uno o más núcleos personalizados.

    El soporte del núcleo a módulos dinámicos (dynamic kernel module
    support, DKMS) es un marco nuevo de distribución independiente
    diseñado para permitir la actualización de módulos sueltos sin
    cambiar el núcleo completo. Esto es utilizado para mantener
    módulos externos. Esto también facilita la reconstrucción de
    módulos cuando actualice su núcleo.

9.10.4. Compilando el código fuente del núcleo: recomendaciones del
Equipo Debian del Núcleo

    Para la construcción de paquetes binarios personalizados del
    núcleo desde el código fuente del núcleo, podría utilizar el
    objetivo «deb-pkg» que se proporciona para ello.

    $ sudo apt-get build-dep linux
    $ cd /usr/src
    $ wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-version.tar.xz
    $ tar --xz -xvf linux-version.tar.xz
    $ cd linux-version
    $ cp /boot/config-version .config
    $ make menuconfig
     ...
    $ make deb-pkg

    Sugerencia

    El paquete linux-source-version contiene el código fuente del
    núcleo de Linux con los parches de Debian como «/usr/src/linux-
    version.tar.bz2».

    Para la construcción de paquetes binarios concretos desde el
    paquete de código fuente del núcleo de Debian, puede utilizar los
    objetivos «binary-arch_architecture_featureset_flavour» en
    «debian/rules.gen».

    $ sudo apt-get build-dep linux
    $ apt-get source linux
    $ cd linux-3.*
    $ fakeroot make -f debian/rules.gen binary-arch_i386_none_686

    Compruebe la información adicional:

      * Debian Wiki: KernelFAQ

      * Debian Wiki: DebianKernel

      * Debian Linux Kernel Handbook: https://
        kernel-handbook.debian.net

9.10.5. Controladores y firware del hardware

    El controlador de hardware es el código que se ejecuta en las CPU
    principales del sistema de destino.. La mayor parte de los
    controladores de hardware están disponibles como software libre
    actualmente se incluyen en los paquetes normales del núcleo de
    Debian en el apartado main.

      * controlador de GPU

          + Controlador de Intel GPU (main)

          + Controladores AMD/ATI GPU (main)

          + Controlador NVIDIA GPU (main para el controlador nouveau
            y non-free para los controladores binarios aportado por
            el vendedor.)

    El firmware es el código o los datos ubicados en el propio
    dispositivo (p. ej. CPU microcode, código ejecutable para el
    «rendering« en GPU, o los datos FPGA / CPLD , …). Algunos
    paquetes con firmware están disponibles como software libre pero
    no la mayoría ya que contienen información binaria sin su código
    fuente. La instalación de estos datos de firmware es esencial
    para que el dispositivo funcione como se espera.

      * Paquetes de datos de firmware que contienen datos cargados en
        la memoria volátil en el dispositivo de destino.

          + firmware-linux-free (main)

          + firmware-linux-nonfree (non-free-firmware)

          + firmware-linux-* (non-free-firmware)

          + *-firmware (non-free-firmware)

          + intel-microcode (non-free-firmware)

          + amd64-microcode (non-free-firmware)

      * El programa de actualización de firmware empaqueta los datos
        de actualización en la memoria no volátil en el dispositivo
        de destino.

          + fwupd (main): Demonio de actualización de firmware que
            descarga datos de firmware de Linux Vendor Firmware
            Service.

          + gnome-firmware (principal): interfaz GTK para fwupd

          + plasma-discover-backend-fwupd (principal): interfaz Qt
            para fwupd

    Ten en cuenta que el acceso a los paquetes de non-free-firmware
    lo proporcionan los medios de instalación oficiales para ofrecer
    una experiencia de instalación funcional al usuario desde Debian
    12 Bookworm. El área de firmware no libre se describe en
    Sección 2.1.5, “Fundamentos del archivo de Debian”.

    Ten en cuenta también que los datos del firmware descargados por
    fwupd del Servicio de firmware del proveedor de Linux y cargados
    en el kernel de Linux en la ejecución pueden ser no libre.

9.11. Sistemas virtualizados

    La utilización de sistemas virtualizados nos permite la ejecución
    de varias instancias del sistema a la vez sobre un único
    hardware.

    Sugerencia
   
    Ver Debian wiki en SystemVirtualization.

9.11.1. Herramientas de virtualización y emulación

    Hay varias plataformas de virtualización y emulación.

      * Completa los paquetes del hardware de emulación como los
        instalados por el metapaquete games-emulator

      * Principalmente la emulación a nivel de la CPU con algunas
        emulaciones de dispositivos de E/S como QEMU

      * Principalmente la virtualización a nivel de CPU con algunas
        emulaciones de dispositivos de E/S como Máquina virtual
        basada en kernel (KVM)

      * Virtualización de los contenedores a nivel del sistema
        operativo con soporte a nivel de kernel como LXC (Linux
        Containers), Docker, systemd-nspawn(1), ....
   
      * Virtualización del acceso al sistema de archivos a nivel del
        sistema operativo con la anulación de la llamada a la
        biblioteca del sistema en la ruta del archivo, como chroot

      * Virtualización del acceso al sistema de archivos a nivel del
        sistema operativo con la anulación de las llamada a la
        biblioteca del sistema sobre la propiedad del archivo, como
        fakeroot

      * Emulación de API de SO como Wine

      * Virtualización a nivel del intérprete, además de la selección
        de la ejecución y anulaciones de las bibliotecas en el tiempo
        de ejecución, como virtualenv y venv de Python

    La virtualización de los contenedores utiliza Sección 4.7.5,
    “Características de seguridad de Linux” y es la tecnología
    backend de Sección 7.7, “Sandbox”.

    Aquí tienes algunos paquetes que te ayudarán a configurar el
    sistema virtualizado.

    Tabla 9.27. Relación de herramientas de virtualización

    +---------------------------------------------------------------+
    |     paquete      |popularidad|tamaño|       descripción       |
    |------------------+-----------+------+-------------------------|
    |coreutils         |V:911,     |17994 |Utilidades básicas de GNU|
    |                  |I:1000     |      |que contienen chroot(8)  |
    |------------------+-----------+------+-------------------------|
    |                  |V:917,     |      |miscellaneous system     |
    |util-linux        |I:1000     |4658  |utilities which contain  |
    |                  |           |      |unshare(1)               |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |herramientas systemd     |
    |systemd-container |V:73, I:76 |2710  |container/nspawn que     |
    |                  |           |      |contienen systemd-nspawn |
    |                  |           |      |(1)                      |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |herramientas             |
    |schroot           |V:6.8,     |2222  |especializadas para la   |
    |                  |I:8.8      |      |ejecución de paquetes    |
    |                  |           |      |binarios en «chroot«     |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |herramientas para la     |
    |sbuild            |V:1.3,     |154   |construcción de paquetes |
    |                  |I:6.4      |      |binarios desde el código |
    |                  |           |      |fuente de Debian         |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |sistema de arranque como |
    |debootstrap       |V:5, I:45  |331   |sistema Debian mínimo    |
    |                  |           |      |(escrito en sh)          |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |sistema de arranque de un|
    |mmdebstrap        |V:7, I:12  |574   |sistema Debian (escrito  |
    |                  |           |      |en Perl)                 |
    |------------------+-----------+------+-------------------------|
    |                  |V:0.1,     |      |sistema de arranque de un|
    |cdebootstrap      |I:1.3      |114   |sistema Debian (escrito  |
    |                  |           |      |en C)                    |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |utilidades para la       |
    |cloud-image-utils |V:1, I:14  |66    |gestión de las imágenes  |
    |                  |           |      |en la nube               |
    |------------------+-----------+------+-------------------------|
    |cloud-guest-utils |V:5, I:22  |71    |utilidades para invitados|
    |                  |           |      |en la nube               |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |Gestor de Máquinas       |
    |                  |           |      |Virtuales: aplicación de |
    |virt-manager      |V:12, I:48 |2310  |escritorio para la       |
    |                  |           |      |gestión de máquinas      |
    |                  |           |      |virtuales                |
    |------------------+-----------+------+-------------------------|
    |libvirt-clients   |V:49, I:71 |1159  |programas para la        |
    |                  |           |      |biblioteca libvirt       |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |docker: Tiempo de        |
    |docker.io         |V:48, I:50 |81426 |ejecución de contenedores|
    |                  |           |      |Linux                    |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |podman: motor para       |
    |podman            |V:31, I:34 |84758 |ejecutar contenedores    |
    |                  |           |      |basados en OCI en Pods   |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |motor para ejecutar      |
    |podman-docker     |V:2.8,     |270   |contenedores basados en  |
    |                  |I:3.3      |      |OCI en Pods - wrapper    |
    |                  |           |      |para docker              |
    |------------------+-----------+------+-------------------------|
    |                  |V:0.8,     |      |Incus: contenedor de los |
    |incus             |I:2.9      |23    |sistemas y gestor de     |
    |                  |           |      |máquinas virtuales       |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |games-emulator:          |
    |games-emulator    |I:0.18     |21    |emuladores de Debian para|
    |                  |           |      |juegos                   |
    |------------------+-----------+------+-------------------------|
    |bochs             |V:0.07,    |8180  |Bochs: emulador de PC    |
    |                  |I:0.64     |      |IA-32 PC                 |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |QEMU: binarios para la   |
    |qemu-system       |I:21       |61    |emulación de un sistema  |
    |                  |           |      |completo                 |
    |------------------+-----------+------+-------------------------|
    |qemu-user         |V:5.8,     |468923|QEMU: binarios para la   |
    |                  |I:9.3      |      |emulación en modo usuario|
    |------------------+-----------+------+-------------------------|
    |qemu-utils        |V:14, I:108|12175 |QEMU: utilidades         |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |KVM: virtualización      |
    |qemu-system-x86   |V:53, I:92 |68056 |completa de hardware x86 |
    |                  |           |      |con la virtualización    |
    |                  |           |      |asistida por hardware    |
    |------------------+-----------+------+-------------------------|
    |                  |V:3.4,     |      |VirtualBox: solución de  |
    |virtualbox        |I:4.1      |151566|virtualización x86 en    |
    |                  |           |      |i386 y amd64             |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |Boxes: Sencilla          |
    |gnome-boxes       |V:1.2,     |7045  |aplicación de GNOME para |
    |                  |I:6.4      |      |acceder a sistemas       |
    |                  |           |      |virtuales                |
    |------------------+-----------+------+-------------------------|
    |                  |V:0.1,     |      |herramientas para la     |
    |xen-tools         |I:1.5      |719   |gestión de debian del    |
    |                  |           |      |servidor virtual XEN     |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |Wine: Implementación de  |
    |wine              |V:13, I:55 |204   |la API Windows (suite    |
    |                  |           |      |estándar)                |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |DOSBox: emulador x86 con |
    |dosbox            |V:1, I:12  |2697  |gráficos Tandy/Herc/CGA/ |
    |                  |           |      |EGA/VGA/SVGA , sonido y  |
    |                  |           |      |DOS                      |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |Contenedores Linux       |
    |lxc               |V:10, I:13 |1629  |herramientas del espacio |
    |                  |           |      |de usuario               |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |venv para crear entornos |
    |python3-venv      |V:8, I:147 |6     |virtuales python         |
    |                  |           |      |(biblioteca del sistema) |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |virtualenv para crear    |
    |python3-virtualenv|V:7, I:39  |374   |entornos python virtuales|
    |                  |           |      |aislados                 |
    |------------------+-----------+------+-------------------------|
    |                  |           |      |pipx para instalar       |
    |pipx              |V:7, I:47  |4409  |aplicaciones python en   |
    |                  |           |      |entornos aislados        |
    +---------------------------------------------------------------+


    Consulte el artículo de Wikipedia Comparison of platform virtual
    machines para obtener detalles de la comparación entre diferentes
    plataformas y soluciones de virtualización.

9.11.2. Flujo de trabajo de la virtualización

    Nota
   
    El núcleo de Debian por defecto soporta KVM desde lenny.

    El flujo de trabajo de la virtualización conlleva varios pasos.

      * Crear un sistema de archivos vacío (un árbol de directorios o
        una imagen de disco).

          + El árbol de directorios puede ser creado mediante «mkdir
            -p /ruta/al/entorno//chroot».

          + El archivo de la imagen de disco en crudo puede ser
            creado con dd(1) (ver Sección 9.7.1, “Creando un archivo
            de imagen de disco” y Sección 9.7.5, “Haciendo un archivo
            de imagen de disco vacío”).

          + qemu-img(1) se puede utilizar para crear y convertir
            archivos de imagen de disco utilizados por QEMU.

          + Los formatos de archivo crudos y VMDK se pueden utilizar
            como formato común entre diferentes herramientas de
            virtualización.

      * Monte la imagen de disco con mount(8) en el sistema de
        archivos (opcional).

          + Para el archivo de imagen de disco crudo, móntelo como un
            dispositivo «loop« o mapeo de dispositivo (ver
            Sección 9.7.3, “Montaje del archivo imagen del disco”).

          + Para el soporte de imágenes de disco por QEMU, móntelos
            como dispositivo de bloque de red (ver Sección 9.11.3,
            “Montando el archivo de imagen de disco virtual”).

      * Llene el sistema de archivos objetivo con la información del
        sistema.

          + La utilización de programas como debootstrap y
            cdebootstrap ayudan en este proceso (ver Sección 9.11.4,
            “Sistemas chroot”).

          + Utilización de instaladores de los sistemas operativos en
            la emulación del sistema completo.

      * Ejecute un programa en un entorno virtualizado.

          + chroot ofrece un entorno de virtualización básico para
            compilar programas , ejecutar aplicaciones de consola y
            ejecutar demonios en él.

          + QEMU ofrece emulación de CPU independiente de la
            plataforma.

          + QEMU con KVM ofrece un sistema de emulación completo por
            medio de la virtualización asistida por hardware.

          + VirtualBox ofrece un sistema completo de emulación en
            i386 y amd64 con o sin la virtualización asistida por
            hardware.

9.11.3. Montando el archivo de imagen de disco virtual

    Para un archivo de imagen de disco crudo, ver Sección 9.7, “La
    imagen de disco”.

    Para otros archivos de imágenes de disco virtuales, puede
    utilizar qemu-nbd(8) para exportarlos utilizando el protocolo de
    dispositivos de bloque de red y montarlos utilizando el módulo
    del núcleo nbd.

    qemu-nbd(8) admite formatos de disco compatibles con QEMU: crudo,
    qcow2, qcow, vmdk, vdi, bochs, cow (copia al escribir en modo
    usuario de Linux), parallels, dmg, cloop, vpc, vvfat (virtual
    VFAT) y «host_device«.

    Los dispositivos de bloque de red pueden soportar particiones de
    la misma manera que los dispositivos «loop« (ver Sección 9.7.3,
    “Montaje del archivo imagen del disco”). Puede montar la primera
    partición de «disk.img» como se muestra.

    # modprobe nbd max_part=16
    # qemu-nbd -v -c /dev/nbd0 disk.img
    ...
    # mkdir /mnt/part1
    # mount /dev/nbd0p1 /mnt/part1

    Sugerencia
   
    Puede exportar únicamente la primera partición de «disk.img»
    utilizando la opción «-P 1» de qemu-nbd(8).

9.11.4. Sistemas chroot

    Si deseas probar un nuevo entorno Debian desde una consola de
    terminal, te recomiendo que uses chroot. Esto te permite ejecutar
    aplicaciones de la consola de Debian inestable y prueba sin los
    riesgos habituales asociados y sin reiniciar. chroot(8) es la
    forma más básica.

    Atención
   
    Los ejemplos de abajo asumen que tanto el sistema padre como el
    sistema chroot comparten la misma arquitectura de CPU amd64.

    Aunque puedes crear manualmente un entorno chroot(8) usando
    debootstrap(1), esto requiere esfuerzos no triviales.

    El paquete sbuild para crear paquetes Debian desde el código
    fuente utiliza el entorno chroot administrado por el paquete
    schroot. Viene con una secuencia de comandos auxiliar
    sbuild-createchroot(1). Aprendamos cómo funciona ejecutándolo de
    la siguiente manera.

    $ sudo mkdir -p /srv/chroot
    $ sudo sbuild-createchroot -v --include=eatmydata,ccache unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian
     ...

    Puedes ver como debootstrap(8) rellena los datos del sistema para
    el entorno unstable bajo "/srv/chroot/unstable-amd64-sbuild" para
    un sistema de construcción mínimo.

    Puedes acceder a este entorno utilizando schroot(1).

    $ sudo schroot -v -c chroot:unstable-amd64-sbuild

    Verás cómo se crea un shell de sistema que se ejecuta en un
    entorno inestable.

    Nota

    El fichero "/usr/sbin/policy-rc.d" que siempre sale con 101
    impide que los programas demonio se inicien automáticamente en el
    sistema Debian. Consulta "/usr/share/doc/init-system-helpers/
    README.policy-rc.d.gz".

    Nota

    Algunos programas en chroot pueden requerir acceso a más archivos
    del sistema principal para funcionar que los que proporciona
    sbuild-createchroot como se indicó anteriormente. Por ejemplo, "/
    sys", "/etc/passwd", "/etc/group", "/var/ run/utmp", "/var/log/
    wtmp", etc. pueden necesitar ser montados o copiados.

    Sugerencia

    El paquete sbuild ayuda a construir un sistema chroot y construye
    un paquete dentro del chroot usando schroot como su backend. Es
    un sistema ideal para verificar las dependencias de compilación.
    Vea más en sbuild en Debian wiki y ejemplo de configuración de
    sbuild en la "Guía para administradores de Debian".

    Sugerencia

    El comando systemd-nspawn(1) ayuda a ejecutar un comando o SO en
    un contenedor ligero de forma similar a chroot. Es más potente ya
    que utiliza espacios de nombres para virtualizar completamente el
    árbol de procesos, IPC, nombre de host, nombre de dominio y,
    opcionalmente, bases de datos de red y de usuario. Ver
    systemd-nspawn.

9.11.5. Varios sistemas de escritorio

    Si deseas probar un nuevo entorno de escritorio GUI de cualquier
    sistema operativo, te recomiendo que uses QEMU o KVM en un
    sistema Debian stable (estable) para ejecutar múltiples sistemas
    de escritorio de forma segura usando la virtualización. Esto te
    permite ejecutar cualquier aplicación de escritorio incluyendo
    las de Debian unstable (inestable) y testing (pruebas) sin los
    riesgos habituales asociados a ellas y sin reiniciar.

    Dado que QEMU puro es muy lento, se recomienda acelerarlo con KVM
    cuando el sistema anfitrión lo soporte.

    Gestor de máquinas virtuales también conocido como virt-manager
    es una práctica herramienta GUI para gestionar las máquinas
    virtuales KVM a través de libvirt.

    La imagen de disco virtual «virtdisk.qcow2» que contiene una
    imagen del sistema Debian para QEMU se puede crear utilizando el
    instalador debian: en pequeños CDs como se muestra.

    $ wget https://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso
    $ qemu-img create -f qcow2 virtdisk.qcow2 5G
    $ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256
    ...

    Sugerencia

    Ejecutar otra distribución GNU/Linux como Ubuntu y Fedora de
    forma virtualizada es un gran manera de aprender formas de
    configuración. También se pueden ejecutar correctamente SS.OO.
    propietarios virtualializado sobre GNU/Linux.

    Ver más consejos en La Wikipedia de Debian: Virtualización del
    sistema.


---------------------------------------------------------------------

    ^[2] Ejemplos de personalización más elaborados: "Vim Galore",
    "sensible.vim", ...

    ^[3] vim-pathogen fue popular.

Capítulo 10. Gestión de información

    Se describen las herramientas y operaciones para la gestión de
    información en formato binarios y texto.

10.1. Compartición, copia y archivo

    Aviso

    El acceso de escritura sin coordinación a los dispositivos
    disponibles y a los archivos desde varios procesos no debe
    realizarse sin evitar la condición de carrera. Para evitarla se
    puede utilizar el mecanismo de bloqueo del archivo (file locking)
    flock(1).

    La seguridad de la información y el control de su compartición
    tiene varios aspectos.

      * La creación de un repositorio de información

      * El acceso al almacenamiento remoto

      * La duplicación

      * El seguimiento del histórico de modificaciones

      * Las facilidades de la compartición de la información

      * Evitar el acceso no autorizado a archivos

      * La detección de modificaciones no autorizadas de archivos

    Esto se puede llevar a cabo por la combinación de algunas
    herramientas.

      * Herramientas de repositorios y compresión

      * Herramientas de sincronización y copia

      * Sistemas de archivos en red

      * Medios de almacenamiento extraíbles
   
      * El intérprete de órdenes seguro

      * El sistema de autenticación

      * Herramientas de sistemas de control de versiones

      * Herramientas de criptográficas de cifrado y resumen

10.1.1. Herramientas de repositorios y compresión

    Aquí esta un resumen de las herramientas de repositorio y
    compresión disponibles en un sistema Debian.

    Tabla 10.1. Relación de las herramientas de repositorios y
    compresión

    +----------------------------------------------------------------+
    | paquete  |popularidad|tamaño|extensión| orden |   comentario   |
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |       |herramienta     |
    |tar       |V:908,     |3085  |.tar     |tar(1) |estándar del    |
    |          |I:1000     |      |         |       |archivo         |
    |          |           |      |         |       |(predeterminada)|
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |       |Archivador      |
    |          |V:352,     |      |         |       |estilo Unix     |
    |cpio      |I:999      |1201  |.cpio    |cpio(1)|System V,       |
    |          |           |      |         |       |utilizado con   |
    |          |           |      |         |       |find(1)         |
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |       |archivador para |
    |binutils  |V:190,     |1119  |.ar      |ar(1)  |la creación de  |
    |          |I:640      |      |         |       |bibliotecas     |
    |          |           |      |         |       |estáticas       |
    |----------+-----------+------+---------+-------+----------------|
    |          |V:1.0,     |      |         |fastjar|archivador para |
    |fastjar   |I:9.6      |182   |.jar     |(1)    |Java (similar a |
    |          |           |      |         |       |zip)            |
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |       |nuevo archivador|
    |pax       |V:5.5,     |167   |.pax     |pax(1) |estándar POSIX, |
    |          |I:9.6      |      |         |       |comprometido    |
    |          |           |      |         |       |entre tar y cpio|
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |gzip   |Utilidad de     |
    |gzip      |V:904,     |256   |.gz      |(1),   |compresión GNU  |
    |          |I:1000     |      |         |zcat   |LZ77 (estándar  |
    |          |           |      |         |(1), … |de facto)       |
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |       |La utilidad de  |
    |          |           |      |         |       |compresión por  |
    |          |           |      |         |       |ordenamiento de |
    |          |           |      |         |       |bloques         |
    |          |           |      |         |bzip2  |Burrows-Wheeler |
    |bzip2     |V:163,     |113   |.bz2     |(1),   |tiene el índice |
    |          |I:972      |      |         |bzcat  |de compresión   |
    |          |           |      |         |(1), … |mayor que gzip  |
    |          |           |      |         |       |(1) (más lento  |
    |          |           |      |         |       |que gzip con una|
    |          |           |      |         |       |sintaxis        |
    |          |           |      |         |       |similar)        |
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |       |Utilidad de     |
    |          |           |      |         |       |compresión LZMA |
    |lzma      |V:1, I:10  |349   |.lzma    |lzma(1)|con mayor ratio |
    |          |           |      |         |       |de compresión   |
    |          |           |      |         |       |que gzip(1)     |
    |          |           |      |         |       |(obsoleto)      |
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |       |La utilidad de  |
    |          |           |      |         |       |compresión XZ   |
    |          |           |      |         |       |tiene un índice |
    |          |           |      |         |       |de compresión   |
    |          |           |      |         |xz(1), |mayor que bzip2 |
    |xz-utils  |V:318,     |1520  |.xz      |xzdec  |(1) (más lento  |
    |          |I:982      |      |         |(1), … |que gzip pero   |
    |          |           |      |         |       |más rápido que  |
    |          |           |      |         |       |bzip2; es el    |
    |          |           |      |         |       |sustituyo del la|
    |          |           |      |         |       |utilidad de     |
    |          |           |      |         |       |compresión LZMA)|
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |zstd   |Utilidad de     |
    |          |V:318,     |      |         |(1),   |compresión      |
    |zstd      |I:803      |2309  |.zstd    |zstdcat|rápida sin      |
    |          |           |      |         |(1), … |pérdidas        |
    |          |           |      |         |       |Zstandard       |
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |       |7-Zip archivador|
    |          |           |      |         |7zr(1),|de archivos con |
    |p7zip     |V:6, I:198 |8     |.7z      |p7zip  |alto índice de  |
    |          |           |      |         |(1)    |compresión      |
    |          |           |      |         |       |(compresión     |
    |          |           |      |         |       |LZMA).          |
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |       |7-Zip archivador|
    |          |           |      |         |       |de archivos con |
    |p7zip-full|V:20, I:222|12    |.7z      |7z(1), |alto ratio de   |
    |          |           |      |         |7za(1) |compresión      |
    |          |           |      |         |       |(compresión LZMA|
    |          |           |      |         |       |y otros).       |
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |       |La utilidad de  |
    |          |           |      |         |       |compresión LZO  |
    |          |           |      |         |       |tiene una       |
    |          |           |      |         |       |velocidad de    |
    |          |           |      |         |       |compresión y    |
    |          |           |      |         |       |descompresión   |
    |lzop      |V:12, I:134|164   |.lzo     |lzop(1)|más alta que    |
    |          |           |      |         |       |gzip(1) (menor  |
    |          |           |      |         |       |índice de       |
    |          |           |      |         |       |compresión que  |
    |          |           |      |         |       |gzip con una    |
    |          |           |      |         |       |sintaxis        |
    |          |           |      |         |       |parecida)       |
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |       |InfoZIP:        |
    |zip       |V:49, I:361|627   |.zip     |zip(1) |herramienta de  |
    |          |           |      |         |       |archivo y       |
    |          |           |      |         |       |compresión DOS  |
    |----------+-----------+------+---------+-------+----------------|
    |          |           |      |         |       |InfoZIP:        |
    |          |V:110,     |      |         |unzip  |herramienta de  |
    |unzip     |I:749      |387   |.zip     |(1)    |desarchivo y    |
    |          |           |      |         |       |descompresión   |
    |          |           |      |         |       |DOS             |
    +----------------------------------------------------------------+


    Aviso
   
    No asigne la variable «$TAPE» a menos que sepa sus consecuencias.
    Esta cambia el comportamiento tar(1).

      * Cuando se realiza una compresión gzip de un archivo tar(1) se
        utiliza la extensión de archivo «.tgz» o «.tar.gz».

      * La compresión xz de un archivo tar(1) utiliza la extensión de
        archivo «.txz» o «.tar.xz».

      * Los métodos de compresión más populares entre las
        herramientas FOSS como tar(1) ha evolucionado como se
        muestra: gzip → bzip2 → xz

      * cp(1), scp(1) y tar(1) puede tener alguna limitación con
        archivos especiales. Cpio(1) es más versátil.
   
      * cpio(1) esta diseñado para ser utilizado con find(1) y otras
        órdenes y archivos de órdenes para la creación de copias de
        respaldo ya que la parte de selección de archivo del archivo
        de órdenes puede ser probado de forma independiente.

      * La estructura interna de los archivos de información de
        Libreoffice son archivos «.jar» los cuales pueden incluso
        abrirse con unzip.

      * La herramienta de archivo multiplataforma de facto es zip.
        Para conseguir la máxima compatibilidad utilícela mediante
        «zip -rX». Si el tamaño del fichero es importante añada
        también la opción «-s».

10.1.2. Herramientas de sincronización y copia

    Aquí hay un resumen de las herramientas de copia y respaldo
    disponibles en el sistema Debian.

    Tabla 10.2. Relación de las herramientas de copia y
    sincronización

    +---------------------------------------------------------------+
    |   paquete    |popularidad|tamaño|herramienta|     función     |
    |--------------+-----------+------+-----------+-----------------|
    |              |           |      |           |copia archivos y |
    |              |V:911,     |      |           |directorios      |
    |coreutils     |I:1000     |17994 |GNU cp     |localmente («-a« |
    |              |           |      |           |para hacerlo     |
    |              |           |      |           |recursivo)       |
    |--------------+-----------+------+-----------+-----------------|
    |              |           |      |           |copia archivos y |
    |              |           |      |           |directorios de   |
    |openssh-client|V:915,     |4210  |scp        |forma remota     |
    |              |I:996      |      |           |(cliente, -r»    |
    |              |           |      |           |para hacerlo     |
    |              |           |      |           |recursivo)       |
    |--------------+-----------+------+-----------+-----------------|
    |              |           |      |           |copia archivos y |
    |openssh-server|V:768,     |3359  |sshd       |directorios de   |
    |              |I:819      |      |           |forma remota     |
    |              |           |      |           |(servidor remoto)|
    |--------------+-----------+------+-----------+-----------------|
    |              |V:195,     |      |           |sincronización y |
    |rsync         |I:541      |835   |           |respaldo remoto  |
    |              |           |      |           |en un sentido    |
    |--------------+-----------+------+-----------+-----------------|
    |              |           |      |           |sincronización y |
    |unison        |V:3, I:12  |14    |           |respaldo remoto  |
    |              |           |      |           |en dos           |
    |              |           |      |           |direcciones      |
    +---------------------------------------------------------------+


    La copia de archivos con rsync(8) aporta muchas más
    funcionalidades que otros.

      * el algoritmo de transferencia delta envía únicamente las
        diferencias entre los archivos de origen y los archivos que
        hay en el destino

      * el algoritmo de comprobación rápido (quick check algorithm)
        (por omisión) busca los archivos que han cambiado su tamaño o
        su fecha de última modificación

      * las opciones «--exclude» y «--exclude-from» son parecidas a
        las de tar(1)

      * la sintáxis de «una barra «/« en el directorio origen« evita
        la creación de un nivel de directorios adicional en el
        destino

    Sugerencia

    Las herramientas de sistemas de control de versiones (VCS) en
    Tabla 10.14, “Lista de otras herramientas del sistema del control
    de las versiones” pueden operar como herramientas de
    sincronización y copia en múltiples sentidos.

10.1.3. Formas de archivado

    Aquí están algunas formas de archivar y desarchivar el contenido
    entero de un directorio «./origen» utilizando diferentes
    herramientas.

    GNU tar(1):

    $ tar -cvJf archive.tar.xz ./source
    $ tar -xvJf archive.tar.xz

    Otra forma es como se muestra.

    $ find ./source -xdev -print0 | tar -cvJf archive.tar.xz --null -T -

    cpio(1):

    $ find ./source -xdev -print0 | cpio -ov --null > archive.cpio; xz archive.cpio
    $ zcat archive.cpio.xz | cpio -i

10.1.4. Formas de copia

    Aquí hay diferentes maneras de copiar el contenido completo de un
    directorio «./source» utilizando diferentes herramientas.

      * Copia local: directorio «./origen» → directorio «/destino»
   
      * Copia remota: directorio «./origen» en el equipo local →
        directorio «/destino» en el equipo «usuario@equipo.dom»

    rsync(8):

    # cd ./source; rsync -aHAXSv . /dest
    # cd ./source; rsync -aHAXSv . user@host.dom:/dest

    Puede utilizar la sintaxis de «barra «/« en el directorio
    origen«.

    # rsync -aHAXSv ./source/ /dest
    # rsync -aHAXSv ./source/ user@host.dom:/dest

    Otra forma es como se muestra.

    # cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest
    # cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest

    cp(1) de GNU y scp(1) de openSSH:

    # cd ./source; cp -a . /dest
    # cd ./source; scp -pr . user@host.dom:/dest

    GNU tar(1):

    # (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
    # (cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'

    cpio(1):

    # cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest

    Puede sustituir «.» por «foo» para todos los ejemplos que
    contienen «.» para copiar archivos desde el directorio «./origen/
    foo» al directorio «/destino/foo».

    Puede sustituir «.» por la ruta absoluta «/ruta/al/origen/foo»
    para todos los ejemplos que contienen «.» para eliminar «cd ./
    source;». La copia de estos archivos a diferentes ubicaciones
    depende de las herramientas utilizadas como se muestra.

      * «/destino/foo»: rsync(8), GNU cp(1) y scp(1)
   
      * «/destino/ruta/al/origen/foo»: GNU tar(1) y cpio(1)

    Sugerencia
   
    Rsync(8) y GNU cp(1) tiene la opción «-u» para no tener en cuenta
    los archivos que son más nuevos que los recibidos.

10.1.5. Formas de selección de archivos

    La orden find(1) se utiliza para la selección de archivos en
    combinación con las órdenes de archivado y copia (consulte
    Sección 10.1.3, “Formas de archivado” y Sección 10.1.4, “Formas
    de copia”) o por xargs(1) (ver Sección 9.4.9, “Repetición de una
    orden sobre archivos”). Esto se puede mejorar con la utilización
    de los parámetros de la orden.

    La sintaxis básica de find(1) se puede resumir en lo que se
    muestra.

      * los parámetros condicionales son evaluados de izquierda a
        derecha

      * Esta evaluación se para una vez que se ha determinado la
        salida.

      * El «OR lógico« (que se escribe «-o» entre condiciones) tiene
        menor precedencia que el «AND lógico« (que se escribe «-a» o
        vacio entre condiciones).

      * El «NOT lógico« (que se escribe «!» antes de la condición)
        tiene mayor precedencia que el «AND lógico«.

      * La expresión «-prune» devuelve siempre un TRUE lógico y, si
        es un directorio, la búsqueda del archivos se detiene al
        llegar a este punto.

      * La expresión «-name» encaja con los nombres de archivos con
        el mismo tipo de expresiones regulares que se usan en el
        intérprete de órdenes (glob) (ver Sección 1.5.6, “Expansión
        de un patrón en el intérprete de órdenes”) pero también
        encaja su «.» inicial con metacaracteres como «*» y «?».
        (Nueva funcionalidad de POSIX)

      * La expresión «-regex» encaja con rutas absolutas al estilo de
        emacs BRE (ver Sección 1.6.2, “Expresiones regulares”) por
        defecto.

      * La expresión «-size» encaja con los archivos en base a su
        tamaño (el valor precedido de «+» para mayor y precedido de
        «-» para menor)

      * La expresión «-newer» encaja con archivos más recientes que
        el que consta como parámetro.

      * La expresión «-print0» devuelve siempre un VERDADERO lógico e
        imprime el nombre de archivo completo (finalizado con un
        null) por la salida estándar..

    La orden find(1) se utiliza frecuentemente con el estilo que se
    muestra a continuación.

    # find /path/to \
        -xdev -regextype posix-extended \
        -type f -regex ".*\.cpio|.*~" -prune -o \
        -type d -regex ".*/\.git" -prune -o \
        -type f -size +99M -prune -o \
        -type f -newer /path/to/timestamp -print0

    Lo que se traduce en las acciones siguientes.

     1. Busca todo los archivos que comienzan con «/ruta/a»

     2. Limita la búsqueda globalmente al comienzo de su sistema de
        archivos y en su lugar utiliza ERE (ver Sección 1.6.2,
        “Expresiones regulares”)

     3. Excluye los archivos que encajan con las expresiones
        regulares «.*\.cpio» o «.*~» de la búsqueda sin procesarlos
   
     4. Excluye los directorios que encajan con la expresión regular
        de «.*/\.git» de la búsqueda sin procesarlas

     5. Excluye los archivos cuyo tamaño es mayor de 99 Megabytes (en
        bytes 1048576 ) de la búsqueda sin procesarla

     6. Imprime los nombres de los archivos que cumplen los criterios
        de búsqueda anteriores y son más nuevos que «/path/to/
        timestamp»

    Por favor, tenga el cuenta la forma en que se utiliza «-prune
    -o»para excluir los archivos en los ejemplos anteriores.

    Nota

    Para sistemas no Debian tipo Unix, algunas opciones de find(1)
    pueden no estar disponibles. En ese caso, por favor, considere
    ajustar los métodos de encaje y sustituya «-print0» con «-print».
    Puede que también necesite ajustar las órdenes parecidas.

10.1.6. Medios de archivo

    Cuando elija los medios de almacenamiento de información para el
    archivo de información importante, debe tener cuidado con sus
    limitaciones. Para el respaldo de pequeñas cantidades de
    información personal, yo utilizo CD-R y DVD-R de una compañía
    conocida y los almaceno en un lugar fresco, sin luz, seco y
    limpio. (El medio de archivo en cinta parece una opción común en
    entornos profesionales).

    Nota

    Un lugar resistente al fuego tiene sentido para documentos en
    papel. La mayor parte de los medios de almacenamiento de
    información tienen menor tolerancia a la temperatura que el
    papel. Yo normalmente mantengo almacenadas varias copias cifradas
    en diferentes ubicaciones seguras.

    Tiempo de vida optimista de los medios de archivo (la mayor parte
    proveniente de los proveedores del medio).

      * Más de 100 años: papel libre de ácido con tinta

      * 100 años : almacenamiento óptico (CD/DVD, CD/DVD-R)
   
      * 30 años: almacenamiento magnético (cinta, disquete)

      * 20 años: almacenamiento óptico con cambio de fase (CD-RW)

    Esto no tiene en cuenta los errores mecánicos debido al manejo
    etc.

    Ciclo de escritura de medios de archivos optimista visto en
    internet (proveniente de la información aportada por el
    vendedor).

      * Más de 250,000 ciclos : discos duros

      * Más de 10,000 ciclos : memoria flash
   
      * 1,000 ciclos : CD/DVD-RW

      * 1 ciclo : CD/DVD-R, papel

    Atención

    Los datos que vida de los medios de almacenamiento y de los
    ciclos de escritura que hemos comentado no se deben tener en
    cuenta para la toma de decisiones sobre almacenamiento de datos
    críticos. Por favor, consulte la información especifica del
    producto que proporciona el fabricante.

    Sugerencia

    Ya que los CD/DVD-R y el papel tienen únicamente un ciclo de
    escritura, impide de informa intrínseca la pérdida de datos por
    sobreescritura. ¡Esto es una ventaja!

    Sugerencia

    Si necesita copias de respaldo rápidas, frecuentes y de grandes
    cantidades de información, un disco duro en un equipo remoto con
    una conexión de red rápida, puede ser la única opción real.

    Sugerencia

    Si usas medios regrabables para tus copias de seguridad, usa un
    sistema de archivos como btrfs o zfs que admite solo la lectura
    de las instantáneas pueden ser una buena idea.

10.1.7. Dispositivos de almacenamiento extraíbles

    Los dispositivos de almacenamiento extraíbles pueden ser
    cualquiera de los siguientes.

      * dispositivo USB flash

      * disco duro

      * disco óptico

      * Cámara digital

      * reproductor digital de música

    Se pueden conectar de las siguientes maneras.

      * USB

      * IEEE 1394 / FireWire

      * PC Card

    Los entornos de escritorio modernos como GNOME y KDE pueden
    montar automáticamente estos dispositivos extraíbles sin su
    entrada correspondiente en «/etc/fstab».

      * El paquete udisks2 proporciona un daemon (servicio) y
        utilidades asociadas para montar y desmontar estos
        dispositivos.
   
      * D-bus crea los actos para iniciar automáticamente dicho
        proceso.

      * PolicyKit aporta los permisos necesarios.

    Sugerencia
   
    Los dispositivos que se montan de forma automática pueden tener
    la opción de montaje «uhelper=» que lo utiliza umount(8).

    Sugerencia

    En los entornos de escritorio modernos el automontaje ocurre
    únicamente cuando el dispositivo no posee una entrada en «/etc/
    fstab».

    El punto de montaje en el entorno de escritorio moderno se elige
    como "/media/username/disk_label" que se puede personalizar de la
    siguiente manera.

      * mlabel(1) para el sistema de archivos FAT

      * genisoimage(1) con la opción «-V» para el sistema de archivos
        ISO9660

      * tune2fs(1) con la opción «-L» para los sistemas de archivos
        ext2/ext3/ext4

    Sugerencia

    Puede que necesite dar el tipo de codificación como una opción a
    la hora del montaje (ver Sección 8.1.3, “Codificación del nombre
    de archivo”).

    Sugerencia

    Si utiliza el menú del interfaz gráfico de usuario para desmontar
    un sistema de archivos puede eliminar su nodo de dispositivo
    generado dinámicamente como «/dev/sdc». Si quiere mantener el
    node del dispositivo, desmóntelo con la orden umount(8) desde el
    cursor del intérprete de órdenes.

10.1.8. Selección del sistema de archivos para compartir datos

    Cuando comparte información con otro sistema por medio de un
    dispositivo de almacenamiento extraíble, podría formatearlo en un
    sistema de archivos que tenga soporte en ambos sistemas. Aquí
    esta una relación de posibles candidatos.

    Nota

    Statements on hard disk (HDD) are applicable to other storage
    devices such as SSD / USB flash drive / Memory card / ... .
    Replace device names in examples such as /dev/sda with applicable
    device names /dev/nvme0, /dev/mmcblk0, ... .

    Tabla 10.3. Relación de posibles sistemas de archivos para
    dispositivos de almacenamiento extraíbles con sus casos de uso
    normales

    +---------------------------------------------------------------+
    |nombre del |                                                   |
    |sistema de |              escenario típico de uso              |
    | archivos  |                                                   |
    |-----------+---------------------------------------------------|
    |FAT12      |compartición de información entre diferentes       |
    |           |plataformas mediante disquete (<32MiB)             |
    |-----------+---------------------------------------------------|
    |           |compartición de información entre plataformas con  |
    |FAT16      |el uso de dispositivos como pequeños discos duros  |
    |           |(<2GiB)                                            |
    |-----------+---------------------------------------------------|
    |           |compartición de información entre plaaformas       |
    |FAT32      |mediante dispositivos como un gran disco duro      |
    |           |(<8TiB, soportados por MS Windows95 OSR2 y         |
    |           |posteriores)                                       |
    |-----------+---------------------------------------------------|
    |           |Intercambio de datos multiplataforma en            |
    |exFAT      |dispositivos de disco duro grandes (<512TiB,       |
    |           |compatible con Windows XP, Mac OS X Snow Leopard   |
    |           |10.6.5 y Linux kernel versión 5.4 y superior)      |
    |-----------+---------------------------------------------------|
    |           |compartición de información entre plataformas      |
    |           |mediante un dispositivo como un gran disco duro    |
    |NTFS       |(soporte nativo en MS Windows NT y versiones       |
    |           |posteriores y soportado porNTFS-3G por medio de    |
    |           |FUSE en Linux)                                     |
    |-----------+---------------------------------------------------|
    |ISO9660    |compartición de información entre plataformas de   |
    |           |datos no volátiles en CD-R y DVD+/-R               |
    |-----------+---------------------------------------------------|
    |UDF        |escritura incremental de información en CD-R y DVD+|
    |           |/+R (nuevo)                                        |
    |-----------+---------------------------------------------------|
    |MINIX      |almacenamiento de información en archivos unix     |
    |           |eficiente en disquete                              |
    |-----------+---------------------------------------------------|
    |ext2       |almacenamiento de información en dispositivos como |
    |           |discos duro para sistemas Linux antiguos           |
    |-----------+---------------------------------------------------|
    |ext3       |almacenamiento de información en dispositivos como |
    |           |discos duro para sistemas Linux antiguos           |
    |-----------+---------------------------------------------------|
    |ext4       |compartición de datos en un dispositivo como un    |
    |           |disco duro para sistemas Linux actuales            |
    |-----------+---------------------------------------------------|
    |           |uso compartido de datos en el disco duro como      |
    |btrfs      |dispositivo con sistemas Linux actuales con        |
    |           |instantáneas de solo lectura                       |
    +---------------------------------------------------------------+


    Sugerencia

    Consulte Sección 9.9.1, “Cifrado de discos externos con dm-crypt/
    LUKS” para la compartición de información entre plataformas
    utilizando cifrado a nivel de dispositivo.

    El sistema de archivos FAT esta soportado por casi todos los
    sistemas operativos modernos y es bastante útil para el
    intercambio de información por medio de un disco duro externo.

    Cuando se formatea un disco duro externo con el sistemas de
    archivos FAT para compartir información entre diferentes
    plataformas, lo siguiente podrían ser las opciones más seguras.

      * Se particiona con fdisk(8), cfdisk(8) o parted(8) (ver
        Sección 9.6.2, “Configuración del particionado de disco”) en
        una única partición primaria y la marcamos como se muestra.

          + Tipo «6« para FAT15 para dispositivos menores de 2 GB.

          + Tipo «c« para FAT32 (LBA) para dispositivos grandes.
   
      * Formateemos la partición primaria con mkfs.vfat(8) como se
        muestra.

          + Si el nombre del dispositivo fuera, p. ej. «/dev/sda1»
            para FAT16

          + La opción explícita para FAT32 y su nombre de
            dispositivo, p.ej. «-F 32 /dev/sda1»

    Cuando se utiliza el sistema de archivos FAT o ISO9660 para
    compartir los datos, los siguientes son los problemas de
    seguridad a los que se debe prestar atención.

      * El archivo de archivos se recomienda utilizar primero tar(1),
        o cpio(1) par mantener los nombres de archivos largos, los
        enlaces blandos, los permisos originales de Unix y la
        información del propietario.
   
      * Para protegerlo de las limitaciones de tamaño divida el
        archivo en trozos menores de 2GiB con la orden split(1).

      * Cifre el archivo para asegurar que no existirán accesos no
        autorizados.

    Nota

    En sistemas de archivos FAT debido a su diseño, el tamaño máximo
    de un archivo es (2^32 - 1) bytes = (4GiB - 1 byte). Para algunas
    aplicaciones antiguas en SSOO de 32 bits, el tamaño máximo de
    archivo es todavía menor (2^31 - 1) bytes = (2GiB - 1 byte).
    Debian no tiene este último problema.

    Nota

    La propia compañía Microsoft no recomienda el uso de FAT para
    dispositivos o particiones menores de 200 MB. Microsoft resalta
    en su «Visión de conjunto de los sistemas de archivos FAT, HPFS y
    NTFS« su uso ineficiente del espacio de disco. Sin duda en Linux
    habitualmente usaremos el sistema de archivos ext4.

    Sugerencia
   
    Para más información acerca de sistemas de archivos y su uso, por
    favor lea «Cómo Sistemas de Archivos«.

10.1.9. Compartir información a través de la red

    Para compartir información con otros sistemas a través de
    internet, debería utilizar un servicio común. He aquí algunas
    pistas.

    Tabla 10.4. Relación de los servicios de red disponibles con el
    escenario típico de utilización

    +---------------------------------------------------------------+
    |  servicio de red  |    descripción del caso de uso normal     |
    |-------------------+-------------------------------------------|
    |SMB/CIFS sistema de|compartición de archivos por medio         |
    |archivos en red    |de«Microsoft Windows Network«, consulte    |
    |montado con Samba  |smb.conf(5) y Cómo Oficial y Guía de       |
    |                   |Referencia de 3.x.x o el paquete samba-doc |
    |-------------------+-------------------------------------------|
    |Sistema de archivos|compartir archivos mediante una «Red Unix/ |
    |montado NFS con el |Linux«, ver exports(5) y Linux NFS-HOWTO   |
    |núcleo de Linux    |                                           |
    |-------------------+-------------------------------------------|
    |servicio HTTP      |compartiendo archivos entre cliente/       |
    |                   |servidor web                               |
    |-------------------+-------------------------------------------|
    |                   |compartiendo archivos entre servidor web/  |
    |servicio HTTPS     |cliente con cifrado con «Secure Sockets    |
    |                   |Layer« (SSL) o «Transport Layer Security«  |
    |                   |(TLS)                                      |
    |-------------------+-------------------------------------------|
    |servicio FTP       |compartiendo archivos entre servidor FTP/  |
    |                   |cliente                                    |
    +---------------------------------------------------------------+


    Aunque los sistemas de archivos montados a través de la red
    pueden ser útiles, estos pueden ser inseguros. Sus conexiones de
    red deben ser securos como se muestra.

      * Cifrado con SSL/TLS

      * Con túnel con SSH
   
      * Con túnel por medio de VPN

      * Limitando al área interna cubierto por un cortafuegos

    Consulte además Sección 6.5, “Servidores de aplicaciones en otras
    redes” y Sección 6.6, “Otros clientes de aplicaciones de red”.

10.2. Respaldo y recuperación

    Todos sabemos que los equipos fallan algunas veces o los errores
    humanos producen daños en el sistema o la información. Las
    operaciones de copia de seguridad y respaldo son una parte
    esencial de la administración de sistemas. Todos los errores
    posible ocurrirán alguna vez.

    Sugerencia

    Mantenga su sistema de respaldo simple y cree copias de seguridad
    con frecuencia. El hecho de tener copias de seguridad de la
    información es más importante que la forma en las que las
    realice.

10.2.1. Política de respaldo y recuperación

    Existen tres factores que determinan la directriz de copia de
    seguridad y recuperación real.

     1. Saber lo qué hay que respaldar y recuperar.

          + Los archivos creados por usted: información en «~/»

          + Archivos de información creados por las aplicaciones que
            utiliza: la información en «/var/» (excepto «/var/cache/
            », «/var/run/» y «/var/tmp/»)

          + Archivos de configuración del sistema: información en «/
            etc/»

          + Programas locales: datos en «/usr/local/» o «/opt/»

          + Información de la instalación del sistema: un resumen en
            texto plano de los pasos fundamentales (particionado,
            ...)

          + Probar el conjunto de datos: confirmarlo mediante la
            ejecución de operaciones de recuperación

              o Un trabajo cron como un proceso de usuario, los
                archivos en el directorio «/var/spool/cron/crontabs»
                y reinicie cron(8). Ver Sección 9.4.14,
                “Planificación regular de tareas” para cron(8) y
                crontab(1).

              o Trabajos del temporizador del sistema como procesos
                de usuario: archivos en el directorio "~/.config/
                systemd/user". Ver systemd.timer(5) y systemd.service
                (5).

              o Tareas de inicio automático como procesos de usuario:
                archivos en el directorio "~/.config/autostart". Ver
                Desktop Application Autostart Specification.

     2. Saber como respaldar y recuperar datos.

          + Seguridad de la información almacenada: protegerlo de la
            sobreescritura y del fallo del sistema

          + Frecuencia de respaldo: planificación del respaldo

          + Redundancia de respaldo: copias de la información

          + Proceso a prueba de fallos: una única y sencilla orden
            para crear la copia de respaldo

     3. Evaluación de riesgos y costes implícitos.

          + Peligro de pérdida de datos

              o Los datos deben estar al menos en diferentes
                particiones del disco, preferiblemente en diferentes
                discos y máquinas para resistir la corrupción del
                sistema de archivos. Los datos importantes se
                almacenan mejor en un sistema de archivos de solo
                lectura. ^[4]

          + Riesgo de violación de datos

              o Datos de identidad confidenciales, como "/etc/ssh/
                ssh_host_*_key", "~/.gnupg/*", "~/.ssh/*", "~/.local/
                share/keyrings/*", "/etc/passwd", "/etc/shadow",
                "popularity-contest.conf", "/etc/ppp/pap-secrets", y
                "/etc/exim4/passwd.client" se debe hacer una copia de
                seguridad cifrada. ^[5] (Ver Sección 9.9, “Trucos
                para cifrar información”.)

              o Nunca codifique la contraseña de inicio de sesión del
                sistema ni la frase de contraseña de descifrado en
                ningún script, incluso en cualquier sistema
                confiable. (Ver Sección 10.3.6, “Llavero de
                contraseña”.)

          + Modo de error en la recuperación y sus posibilidades

              o El hardware (especialmente el disco duro) se romperá

              o El sistema de archivos puede estar dañado y los datos
                que contiene pueden perderse

              o No se puede confiar en los sistemas de almacenamiento
                remoto para las brechas de seguridad

              o La protección de la contraseña débil puede verse
                fácilmente comprometida

              o El sistema de permisos de los archivos puede estar
                comprometido

          + Uso de recursos para el respaldo: humanos, hardware,
            software, …

              o Copia de seguridad automática programada con cron job
                o systemd timer job

    Sugerencia

    Puede recuperar la información de configuración debconf con
    «debconf-set-selections debconf-selections» y la selección de
    información de dpkg con «dpkg --set-selection
    <dpkg-selections.list».

    Nota

    No respalde el contenido de los pseudo sistemas de archivos
    ubicados en /proc, /sys, /tmp y /run (consulte Sección 1.2.12,
    “procfs y sysfs” y Sección 1.2.13, “tmpfs”). A menos que sepa
    exactamente que está haciendo, estas ubicaciones contienen
    grandes cantidades de información poco relevantes.

    Nota

    Puede que quiera parar algunos demonios como MTA (ver
    Sección 6.2.4, “Agente de transporte de correo (Mail transport
    agent, MTA)”) mientras respalda su información.

10.2.2. Suites de utilidades de copias de seguridad

    He aquí una relación de las suites de copias de seguridad más
    importantes en un sistema Debian.

    Tabla 10.5. Relación de suites de utilidades de copias de
    respaldo

    +---------------------------------------------------------------+
    |   paquete    |popularidad|tamaño|         descripción         |
    |--------------+-----------+------+-----------------------------|
    |              |           |      |Bacula: copia de respaldo en |
    |bacula-common |V:6.3,     |2501  |red, recuperación y          |
    |              |I:7.2      |      |verificación - archivos de   |
    |              |           |      |apoyo comunes                |
    |--------------+-----------+------+-----------------------------|
    |              |           |      |Bacula: copia de seguridad en|
    |bacula-client |V:0.3,     |199   |red, recuperación y          |
    |              |I:1.9      |      |verificación - metapaquete   |
    |              |           |      |cliente                      |
    |--------------+-----------+------+-----------------------------|
    |              |           |      |Bacula: copia de seguridad en|
    |bacula-console|V:0.7,     |112   |red, recuperación y          |
    |              |I:2.1      |      |verificación - consola de    |
    |              |           |      |texto                        |
    |--------------+-----------+------+-----------------------------|
    |              |           |      |Bacula: copia de seguridad en|
    |bacula-server |I:0.60     |199   |red, recuperación y          |
    |              |           |      |verificación - metapaquete   |
    |              |           |      |del servidor                 |
    |--------------+-----------+------+-----------------------------|
    |              |V:0.6,     |      |Amanda: Archivador Automático|
    |amanda-common |I:2.2      |9851  |de Discos en Red Avanzado    |
    |              |           |      |Maryland (Bibliotecas)       |
    |--------------+-----------+------+-----------------------------|
    |              |V:0.6,     |      |Amanda: Archivador Automático|
    |amanda-client |I:2.2      |1099  |de Discos en Red Avanzado    |
    |              |           |      |Maryland (Cliente)           |
    |--------------+-----------+------+-----------------------------|
    |              |V:0.11,    |      |Amanda: Archivador Automático|
    |amanda-server |I:0.23     |1093  |de Discos en Red Avanzado    |
    |              |           |      |Maryland (Servidor)          |
    |--------------+-----------+------+-----------------------------|
    |              |           |      |BackupPC sistema de copia de |
    |backuppc      |V:1.4,     |3088  |respaldo de PCs( basado en   |
    |              |I:1.7      |      |disco) de alto rendimiento y |
    |              |           |      |ámbito empresarial           |
    |--------------+-----------+------+-----------------------------|
    |duplicity     |V:6, I:47  |2670  |respaldo incremental (remoto)|
    |--------------+-----------+------+-----------------------------|
    |deja-dup      |V:29, I:43 |5274  |Interfaz gráfica de usuario  |
    |              |           |      |para duplicity               |
    |--------------+-----------+------+-----------------------------|
    |borgbackup    |V:13, I:28 |3485  |copia de seguridad           |
    |              |           |      |deduplicada (remota)         |
    |--------------+-----------+------+-----------------------------|
    |borgmatic     |V:3.2,     |946   |ayudante borgbackup          |
    |              |I:4.4      |      |                             |
    |--------------+-----------+------+-----------------------------|
    |rdiff-backup  |V:2.3,     |1207  |respaldo incremental (remoto)|
    |              |I:6.6      |      |                             |
    |--------------+-----------+------+-----------------------------|
    |restic        |V:6, I:12  |41560 |respaldo incremental (remoto)|
    |--------------+-----------+------+-----------------------------|
    |backupninja   |V:2.2,     |360   |sistema meta-backup          |
    |              |I:2.6      |      |extensible y ligero          |
    |--------------+-----------+------+-----------------------------|
    |slbackup      |V:0.11,    |147   |respaldo incremental (remoto)|
    |              |I:0.13     |      |                             |
    |--------------+-----------+------+-----------------------------|
    |backup-manager|V:0.43,    |573   |herramienta de copia de      |
    |              |I:0.77     |      |seguridad en línea de órdenes|
    |--------------+-----------+------+-----------------------------|
    |              |           |      |herramienta para medios      |
    |              |V:0.38,    |      |externos para su copia/      |
    |backup2l      |I:0.53     |110   |restauración con bajo        |
    |              |           |      |mantenimiento (basado en     |
    |              |           |      |discos)                      |
    +---------------------------------------------------------------+


    Las herramientas de copias de seguridad están especializadas en
    diferentes aspectos.

      * Mondo Rescue es un sistema de copias de seguridad centrado en
        realizar la restauración completa de un sistema rápidamente
        desde una copia en CD/DVD etc. sin seguir el proceso normal
        de instalación del sistema.

      * Bacula, Amanda, y BackupPC son suites de utilidades de copia
        de respaldo con funcionalidad completa centradas en la copias
        de seguridad regulares a través de la red.

      * Duplicity, y Borg son utilidades de copia de seguridad más
        sencillas para estaciones de trabajo típicas.

10.2.3. Consejos para copias de seguridad

    Para una estación de trabajo personal, las utilidades completas
    de la suite de copia de seguridad diseñadas para el entorno de
    servidor pueden no servir bien. Al mismo tiempo, las utilidades
    de copia de seguridad existentes para estaciones de trabajo
    pueden presentar algunas deficiencias.

    He aquí algunos consejos para facilitar las copias de seguridad
    con el mínimo esfuerzo por parte del usuario. Estas técnicas
    pueden utilizarse con cualquier utilidad de copia de seguridad.

    Con propósito demostrativo, vamos a suponer que el usuario
    principal y el nombre de grupo es pingüino y crear un ejemplo de
    script de copia de seguridad e instantánea "/usr/local/bin/
    bkss.sh" como:

    #!/bin/sh -e
    SRC="$1" # source data path
    DSTFS="$2" # backup destination filesystem path
    DSTSV="$3" # backup destination subvolume name
    DSTSS="${DSTFS}/${DSTSV}-snapshot" # snapshot destination path
    if [ "$(stat -f -c %T "$DSTFS")" != "btrfs" ]; then
      echo "E: $DESTFS needs to be formatted to btrfs" >&2 ; exit 1
    fi
    MSGID=$(notify-send -p "bkup.sh $DSTSV" "in progress ...")
    if [ ! -d "$DSTFS/$DSTSV" ]; then
      btrfs subvolume create "$DSTFS/$DSTSV"
      mkdir -p "$DSTSS"
    fi
    rsync -aHxS --delete --mkpath "${SRC}/" "${DSTFS}/${DSTSV}"
    btrfs subvolume snapshot -r "${DSTFS}/${DSTSV}" ${DSTSS}/$(date -u --iso=min)
    notify-send -r "$MSGID" "bkup.sh $DSTSV" "finished!"

    Aquí, sólo se utiliza la herramienta básica rsync(1) para
    facilitar la copia de seguridad del sistema y el espacio de
    almacenamiento lo utiliza eficientemente Btrfs.

    Sugerencia

    Para su información: Este autor utiliza su propio script de shell
    similar "bss: Btrfs Subvolume Snapshot Utility" para su estación
    de trabajo.

10.2.3.1. Copia de seguridad de la GUI

    A continuación se muestra un ejemplo para configurar la copia de
    seguridad con un solo clic de GUI.

      * Prepare un dispositivo de almacenamiento USB para utilizarlo como
        copia de seguridad.

          + Formatea un dispositivo de almacenamiento USB con una
            partición en btrfs con su nombre de etiqueta como "BKUP".
            Esto se puede cifrar (ver Sección 9.9.1, “Cifrado de discos
            externos con dm-crypt/LUKS”).

          + Conéctalo al sistema. El sistema de escritorio debería
            montarlo automáticamente como "/media/penguin/BKUP".

          + Ejecute "sudo chown penguin:penguin /media/penguin/BKUP" para
            que el usuario pueda escribir en él.

      * Crear "~/.local/share/applications/BKUP.desktop" siguiendo las
        técnicas escritas en Sección 9.4.10, “Iniciar un programa desde
        el interfaz gráfico de usuario” como:

        [Desktop Entry]
        Name=bkss
        Comment=Backup and snapshot of ~/Documents
        Exec=/usr/local/bin/bkss.sh /home/penguin/Documents /media/penguin/BKUP Documents
        Type=Application

    Por cada clic en la GUI, se realiza una copia de seguridad de sus
    datos desde "~/Documents" a un dispositivo de almacenamiento USB
    y se crea una instantánea de sólo lectura.

10.2.3.2. Montar la copia de seguridad activada por el acto

    A continuación se muestra un ejemplo de configuración para la
    copia de seguridad automática activada por el hecho de montar.

      * Prepara un dispositivo de almacenamiento USB que se utilizará
        para la copia de seguridad como en Sección 10.2.3.1, “Copia de
        seguridad de la GUI”.

      * Crear un archivo de la unidad de servicio systemd "~/.config/
        systemd/user/back-BKUP.service" como:

        [Unit]
        Description=USB Disk backup
        Requires=media-%u-BKUP.mount
        After=media-%u-BKUP.mount
   
        [Service]
        ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents
        StandardOutput=append:%h/.cache/systemd-snap.log
        StandardError=append:%h/.cache/systemd-snap.log

        [Install]
        WantedBy=media-%u-BKUP.mount

      * Habilite esta configuración de unidad systemd con lo siguiente:

         $ systemctl --user enable bkup-BKUP.service

    Para cada acto de montar, se realiza una copia de seguridad de
    los datos desde "~/Documents" a un dispositivo de almacenamiento
    USB y se crea una instantánea de sólo lectura.

    Aquí, los nombres de las unidades de montaje systemd que systemd
    tiene actualmente en memoria se pueden pedir al gestor de
    servicios del usuario que llama con "systemctl --user list-units
    --type=mount".

10.2.3.3. Copia de seguridad activada por acción del temporizador

    A continuación se muestra un ejemplo de configuración para la
    copia de seguridad automática activada por la acción del
    temporizador.

      * Prepara un dispositivo de almacenamiento USB que se utilizará
        para la copia de seguridad como en Sección 10.2.3.1, “Copia de
        seguridad de la GUI”.

      * Crear un archivo de unidad de temporizador systemd "~/.config/
        systemd/user/snap-Documents.timer" como:

        [Unit]
        Description=Run btrfs subvolume snapshot on timer
        Documentation=man:btrfs(1)

        [Timer]
        OnStartupSec=30
        OnUnitInactiveSec=900

        [Install]
        WantedBy=timers.target

      * Crear un archivo de unidad de servicio systemd "~/.config/systemd
        /user/snap-Documents.service" como:

        [Unit]
        Description=Run btrfs subvolume snapshot
        Documentation=man:btrfs(1)

        [Service]
        Type=oneshot
        Nice=15
        ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents
        IOSchedulingClass=idle
        CPUSchedulingPolicy=idle
        StandardOutput=append:%h/.cache/systemd-snap.log
        StandardError=append:%h/.cache/systemd-snap.log

      * Habilite esta configuración de unidad systemd con lo siguiente:

         $ systemctl --user enable snap-Documents.timer

    Para cada acción del temporizador, se realiza una copia de
    seguridad de sus datos desde "~/Documents" a un dispositivo de
    almacenamiento USB y se crea una instantánea de sólo lectura.

    Aquí, los nombres de las unidades de usuario del temporizador
    systemd que systemd tiene actualmente en memoria se pueden pedir
    al gestor de servicios del usuario llamante con "systemctl --user
    list-units --type=timer".

    Para el sistema de escritorio moderno, este enfoque systemd puede
    ofrecer un control más fino que los tradicionales de Unix usando
    at(1), cron(8), o anacron(8).

10.3. Infraestructura de seguridad de la información

    La infraestructura de seguridad de la información es una
    combinación de herramientas de cifrado de datos, herramientas de
    resúmenes de mensajes y herramientas de firma.

    Tabla 10.6. Relación de herramientas de infraestructura de
    seguridad de la información

    +---------------------------------------------------------------+
    |    paquete    |popularidad|tamaño|   orden   |  descripción   |
    |---------------+-----------+------+-----------+----------------|
    |               |           |      |           |GNU Privacy     |
    |               |V:398,     |      |           |Guard -         |
    |gnupg          |I:867      |464   |gpg(1)     |herramienta de  |
    |               |           |      |           |firma y cifrado |
    |               |           |      |           |OpenPGP         |
    |---------------+-----------+------+-----------+----------------|
    |               |           |      |           |GNU Privacy     |
    |               |V:234,     |      |           |Guard -         |
    |gpgv           |I:939      |555   |gpgv(1)    |herramienta de  |
    |               |           |      |           |verificación de |
    |               |           |      |           |firma OpenPGP   |
    |---------------+-----------+------+-----------+----------------|
    |               |           |      |           |Sequoia-PGP -   |
    |sq             |V:1, I:27  |23948 |sq(1)      |herramienta de  |
    |               |           |      |           |firma y cifrado |
    |               |           |      |           |OpenPGP         |
    |---------------+-----------+------+-----------+----------------|
    |               |           |      |           |Sequoia-PGP -   |
    |sqv            |V:416,     |1702  |sqv(1)     |herramienta de  |
    |               |I:487      |      |           |verificación de |
    |               |           |      |           |firma OpenPGP   |
    |---------------+-----------+------+-----------+----------------|
    |               |           |      |           |extracción      |
    |               |           |      |           |únicamente de la|
    |               |           |      |           |información     |
    |paperkey       |V:1, I:13  |58    |paperkey(1)|secreta sin     |
    |               |           |      |           |considerar las  |
    |               |           |      |           |claves secretas |
    |               |           |      |           |OpenPGP         |
    |---------------+-----------+------+-----------+----------------|
    |               |           |      |           |utilidades para |
    |               |           |      |           |dm-crypt cifrado|
    |cryptsetup     |V:35, I:78 |462   |cryptsetup |de dispositivos |
    |               |           |      |(8), …     |de bloque       |
    |               |           |      |           |compatibles con |
    |               |           |      |           |LUKS            |
    |---------------+-----------+------+-----------+----------------|
    |               |V:911,     |      |           |crea y comprueba|
    |coreutils      |I:1000     |17994 |md5sum(1)  |el resumen MD5  |
    |               |           |      |           |de un mensaje   |
    |---------------+-----------+------+-----------+----------------|
    |               |V:911,     |      |           |crea y comprueba|
    |coreutils      |I:1000     |17994 |sha1sum(1) |el resumen SHA1 |
    |               |           |      |           |de un mensaje   |
    |---------------+-----------+------+-----------+----------------|
    |               |           |      |           |crea el resumen |
    |openssl        |V:847,     |2532  |openssl    |de un mensaje   |
    |               |I:996      |      |(1ssl)     |con «openssl    |
    |               |           |      |           |dgst» (OpenSSL) |
    |---------------+-----------+------+-----------+----------------|
    |               |           |      |           |almacenar y     |
    |libsecret-tools|V:1, I:11  |45    |secret-tool|recuperar las   |
    |               |           |      |(1)        |contraseñas     |
    |               |           |      |           |(CLI)           |
    |---------------+-----------+------+-----------+----------------|
    |               |           |      |           |herramienta de  |
    |seahorse       |V:75, I:261|7971  |seahorse(1)|gestión de      |
    |               |           |      |           |claves (GNOME)  |
    +---------------------------------------------------------------+


    Ver Sección 9.9, “Trucos para cifrar información” en dm-crypt y
    fscrypt que implementan una infraestructura de cifrado automático
    de datos a través de módulos del núcleo de Linux.

10.3.1. Gestión de claves con GnuPG

    He aquí las órdenes GNU Privacy Guard para la gestión básica de
    claves.

    Tabla 10.7. Relación de las órdenes GNU Privacy Guard par la
    gestión de claves

    +---------------------------------------------------------------+
    |       orden        |               descripción                |
    |--------------------+------------------------------------------|
    |gpg --gen-key       |genera una nueva clave                    |
    |--------------------+------------------------------------------|
    |gpg --gen-revoke    |provoca la revocación de la clave para    |
    |my_user_ID          |mi_ID_de_usuario                          |
    |--------------------+------------------------------------------|
    |gpg --edit-key      |edición interactiva de la clave, «help«   |
    |user_ID             |para obtener ayuda                        |
    |--------------------+------------------------------------------|
    |gpg -o file --export|export all public keys to file            |
    |--------------------+------------------------------------------|
    |gpg -o file         |export all private key to file            |
    |--export-secret-keys|                                          |
    |--------------------+------------------------------------------|
    |gpg --import file   |importa todas las claves desde un archivo |
    |--------------------+------------------------------------------|
    |gpg --send-keys     |envía la clave de un ID_de_usuario al     |
    |user_ID             |servidor de claves                        |
    |--------------------+------------------------------------------|
    |gpg --recv-keys     |recibe claves del usuario ID_de_usuario   |
    |user_ID             |desde el servidor de claves               |
    |--------------------+------------------------------------------|
    |gpg --list-keys     |relación de las claves de ID_de_usuario   |
    |user_ID             |                                          |
    |--------------------+------------------------------------------|
    |gpg --list-sigs     |relación de las firmas de ID_de_usuarios  |
    |user_ID             |                                          |
    |--------------------+------------------------------------------|
    |gpg --check-sigs    |comprueba la firma de ID_de_usuario       |
    |user_ID             |                                          |
    |--------------------+------------------------------------------|
    |gpg --fingerprint   |comprueba la huella del ID_de_usuario     |
    |user_ID             |                                          |
    |--------------------+------------------------------------------|
    |gpg --refresh-keys  |actualiza el círculo de claves local      |
    +---------------------------------------------------------------+


    Aquí esta el significado de un código seguro.

    Tabla 10.8. Relación del significado del código de confianza

    +---------------------------------------------------------------+
    |código|              descripción de la confianza               |
    |------+--------------------------------------------------------|
    |-     |sin asignación del dueño de la confianza /no calculado  |
    |      |todavía                                                 |
    |------+--------------------------------------------------------|
    |e     |cálculo de confianza fallido                            |
    |------+--------------------------------------------------------|
    |q     |falta de información suficiente para el cálculo         |
    |------+--------------------------------------------------------|
    |n     |no confíe nunca en esta clave                           |
    |------+--------------------------------------------------------|
    |m     |confianza marginal                                      |
    |------+--------------------------------------------------------|
    |f     |confianza total                                         |
    |------+--------------------------------------------------------|
    |u     |confianza básica                                        |
    +---------------------------------------------------------------+


    The following generates my key
    "9563FC29932C409F1A77F9C1AB8A1522D8234C6A".

    $ gpg --gen-key
    gpg (GnuPG) 2.4.7; Copyright (C) 2024 g10 Code GmbH
    ...
    GnuPG needs to construct a user ID to identify your key.

    Real name: Osamu Aoki
    Email address: osamu@debian.org
    You selected this USER-ID:
        "Osamu Aoki <osamu@debian.org>"
   
    Change (N)ame, (E)mail, or (O)kay/(Q)uit? o
    ...
    public and secret key created and signed.

    pub   ed25519 2026-02-14 [SC] [expires: 2029-02-13]
          9563FC29932C409F1A77F9C1AB8A1522D8234C6A
    uid                      Osamu Aoki <osamu@debian.org>
    sub   cv25519 2026-02-14 [E] [expires: 2029-02-13]


    Lo siguiente carga mi clave
    «9563FC29932C409F1A77F9C1AB8A1522D8234C6A» a un popular servidor
    de claves «hkp://keys.gnupg.net».

    $ gpg --keyserver hkp://keys.gnupg.net --send-keys 9563FC29932C409F1A77F9C1AB8A1522D8234C6A

    Un buen servidor de claves por defecto configurado en «~/.gnupg/
    gpg.conf» (o su ubicación antigua «~/.gnupg/options») contiene lo
    siguiente.

    keyserver hkp://keys.gnupg.net

    Lo siguiente obtiene las claves desconocidas del servidor de
    claves.

    $ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\
              cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys

    Existió un error en el Servidor de Claves Públicas OpenPGP (pre
    versión 0.9.6) el cual corrompía las claves con más de dos
    subclaves. El nuevo paquete gnupg (>1.2.1-2) pueden gestionar
    estas subclaves corruptas. Consulte gpg(1) bajo la opción
    «--repair-pks-subkey-bug».

    Use of SHA-1 for hash has been deprecated. If your old RSA based
    openPGP key uses SHA-1 for hash, fix it using FixKeyWithSha1.

    Sugerencia

    The sq(1) and sqv(1) commands are an alternative set of openPGP
    commands. See sq user documentation and A Practical Introduction
    to using sq, Sequoia PGP’s CLI.

10.3.2. Usando GnuPG en archivos

    Aquí están los ejemplos de utilización de las órdenes GNU Privacy
    Guard sobre archivos.

    Tabla 10.9. Relación de órdenes GNU Privacy Guard sobre archivos

    +---------------------------------------------------------------+
    |        orden        |               descripción               |
    |---------------------+-----------------------------------------|
    |gpg -a -s file       |archivo de firma en ASCII del archivo.asc|
    |                     |blindado                                 |
    |---------------------+-----------------------------------------|
    |gpg --armor --sign   |, ,                                      |
    |file                 |                                         |
    |---------------------+-----------------------------------------|
    |gpg --clearsign file |mensaje sin firmar                       |
    |---------------------+-----------------------------------------|
    |gpg --clearsign file||envía un mensaje de correo sin firmar a  |
    |mail foo@example.org |foo@example.org                          |
    |---------------------+-----------------------------------------|
    |gpg --clearsign      |                                         |
    |--not-dash-escaped   |parche sin firmar                        |
    |patchfile            |                                         |
    |---------------------+-----------------------------------------|
    |gpg --verify file    |comprueba un archivo sin firmar          |
    |---------------------+-----------------------------------------|
    |gpg -o file.sig -b   |crea un firma objetivo                   |
    |file                 |                                         |
    |---------------------+-----------------------------------------|
    |gpg -o file.sig      |, ,                                      |
    |--detach-sign file   |                                         |
    |---------------------+-----------------------------------------|
    |gpg --verify file.sig|comprueba el archivo con archivo.sig     |
    |file                 |                                         |
    |---------------------+-----------------------------------------|
    |gpg -o crypt_file.gpg|intento de cifrado con clave pública para|
    |-r name -e file      |el nombre del archivo al arhivo binario  |
    |                     |archivo_cifrado.gpg                      |
    |---------------------+-----------------------------------------|
    |gpg -o crypt_file.gpg|                                         |
    |--recipient name     |, ,                                      |
    |--encrypt file       |                                         |
    |---------------------+-----------------------------------------|
    |gpg -o crypt_file.asc|intento de cifrado con clave pública para|
    |-a -r name -e file   |el nombre del archivo al archivo blindado|
    |                     |ASCII archivo_cifrado.asc                |
    |---------------------+-----------------------------------------|
    |gpg -o crypt_file.gpg|cifrado simétrico de archivo a           |
    |-c file              |archivo_cifrado_gpg                      |
    |---------------------+-----------------------------------------|
    |gpg -o crypt_file.gpg|, ,                                      |
    |--symmetric file     |                                         |
    |---------------------+-----------------------------------------|
    |gpg -o crypt_file.asc|intento del cifrado simétrico para el    |
    |-a -c file           |nombre desde el archivo fuente al archivo|
    |                     |blindado en ASCII archivo_cifrado.asc    |
    |---------------------+-----------------------------------------|
    |gpg -o file -d       |                                         |
    |crypt_file.gpg -r    |Descifrado                               |
    |name                 |                                         |
    |---------------------+-----------------------------------------|
    |gpg -o file --decrypt|, ,                                      |
    |crypt_file.gpg       |                                         |
    +---------------------------------------------------------------+


10.3.3. Uso de Mutt con GnuPG

    Añada lo siguiente a «~/.muttrc» para mantener el lento el inicio
    automático de GnuPG, mientras permite usarlo pulsado «S» del menú
    principal.

    macro index S ":toggle pgp_verify_sig\n"
    set pgp_verify_sig=no

10.3.4. Utilizando Vim con GnuPG

    El plugin gnupg permite ejecutar GnuPG de forma transparente para
    los archivos con extensiones ".gpg", ".asc", y ".pgp".^[6]

    $ sudo aptitude install vim-scripts
    $ echo "packadd! gnupg" >> ~/.vim/vimrc

10.3.5. El resumen MD5

    md5sum(1) proporciona la funcionalidad de hacer resúmenes de un
    archivo utilizando el método descrito en rfc1321 y verificar cada
    archivo con él.

    $ md5sum foo bar >baz.md5
    $ cat baz.md5
    d3b07384d113edec49eaa6238ad5ff00  foo
    c157a79031e1c40f85931829bc5fc552  bar
    $ md5sum -c baz.md5
    foo: OK
    bar: OK

    Nota

    La computación de la suma MD5 es menos intensiva en CPU que la de
    firma criptográfica de GNU Privacy Guard (GnuPG). Normalmente,
    solo los archivos resumen de alto nivel están firmados
    criptologicamente para asegurar la integridad de la información.

10.3.6. Llavero de contraseña

    En el sistema GNOME, la herramienta GUI seahorse(1) gestiona las
    contraseñas y las almacena de forma segura en el llavero ~/.local
    /share/keyrings/*.

    secret-tool(1) puede almacenar la contraseña en el llavero desde
    la línea de comandos.

    Almacenemos la frase de la contraseña utilizada para la imagen
    del disco encriptada LUKS/dm-crypt

    $ secret-tool store --label='LUKS passphrase for disk.img' LUKS my_disk.img
    Password: ********

    Esta contraseña almacenada puede ser recuperada y cedida a otros
    programas, por ejemplo, cryptsetup(8).

    $ secret-tool lookup LUKS my_disk.img | \
      cryptsetup open disk.img disk_img --type luks --keyring -
    $ sudo mount /dev/mapper/disk_img /mnt

    Sugerencia

    Siempre que necesites dar una contraseña en un script, utiliza
    secret-tool y evita codificar directamente la frase de la
    contraseña en él..

10.4. Herramientas para mezclar código fuente

    Existen múltiples herramientas para el código fuente. Las
    siguientes órdenes llamaron mi atención.

    Tabla 10.10. Relación de las herramientas para mezclar código
    fuente

    +---------------------------------------------------------------+
    | paquete  |popularidad|tamaño|   orden   |     descripción     |
    |----------+-----------+------+-----------+---------------------|
    |patch     |V:103,     |242   |patch(1)   |aplica un archivo    |
    |          |I:726      |      |           |diff al original     |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |           |compare dos archivos |
    |vim       |V:85, I:347|4135  |vimdiff(1) |en vim uno contra    |
    |          |           |      |           |otro                 |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |           |herramienta          |
    |imediff   |V:0.03,    |329   |imediff(1) |interactiva de fusión|
    |          |I:0.26     |      |           |2/3 a pantalla       |
    |          |           |      |           |completa             |
    |----------+-----------+------+-----------+---------------------|
    |meld      |V:5, I:24  |3992  |meld(1)    |compara y mezcla     |
    |          |           |      |           |archivos (GTK)       |
    |----------+-----------+------+-----------+---------------------|
    |wiggle    |V:0.01,    |175   |wiggle(1)  |aplica parches       |
    |          |I:0.12     |      |           |rechazados           |
    |----------+-----------+------+-----------+---------------------|
    |diffutils |V:896,     |1768  |diff(1)    |compara archivos     |
    |          |I:998      |      |           |línea a línea        |
    |----------+-----------+------+-----------+---------------------|
    |          |V:896,     |      |           |compara y mezcla tres|
    |diffutils |I:998      |1768  |diff3(1)   |archivos línea a     |
    |          |           |      |           |línea                |
    |----------+-----------+------+-----------+---------------------|
    |quilt     |V:2, I:17  |880   |quilt(1)   |gestiona un conjunto |
    |          |           |      |           |de parches           |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |           |muestra las palabras |
    |wdiff     |V:6, I:40  |651   |wdiff(1)   |diferentes en dos    |
    |          |           |      |           |archivos de textos   |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |           |produce un histograma|
    |diffstat  |V:9, I:98  |79    |diffstat(1)|de los cambios de    |
    |          |           |      |           |diff                 |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |combinediff|crea un parche       |
    |patchutils|V:11, I:97 |269   |(1)        |acumulativo con dos  |
    |          |           |      |           |parches incrementales|
    |----------+-----------+------+-----------+---------------------|
    |patchutils|V:11, I:97 |269   |dehtmldiff |extrae un diff de un |
    |          |           |      |(1)        |página HTML          |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |filterdiff |extrae o excluye     |
    |patchutils|V:11, I:97 |269   |(1)        |diffs de un archivo  |
    |          |           |      |           |diff                 |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |           |repara archivos diff |
    |patchutils|V:11, I:97 |269   |fixcvsdiff |creados por CVS que  |
    |          |           |      |(1)        |son malinterpretados |
    |          |           |      |           |por patch(1)         |
    |----------+-----------+------+-----------+---------------------|
    |patchutils|V:11, I:97 |269   |flipdiff(1)|intercambia el orden |
    |          |           |      |           |de dos parches       |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |           |muestra que archivos |
    |          |           |      |           |son modificados por  |
    |patchutils|V:11, I:97 |269   |grepdiff(1)|un parche de acuerdo |
    |          |           |      |           |a una expresión      |
    |          |           |      |           |regular              |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |           |muestra las          |
    |patchutils|V:11, I:97 |269   |interdiff  |diferencias entre dos|
    |          |           |      |(1)        |archivos diff        |
    |          |           |      |           |unificados           |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |           |muestra los archivos |
    |patchutils|V:11, I:97 |269   |lsdiff(1)  |modificados por un   |
    |          |           |      |           |parche               |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |           |recalcula las cuentas|
    |patchutils|V:11, I:97 |269   |recountdiff|y desplazamientos en |
    |          |           |      |(1)        |un contexto diff     |
    |          |           |      |           |unificado            |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |           |repara los           |
    |          |           |      |           |desplazamientos y    |
    |patchutils|V:11, I:97 |269   |rediff(1)  |cuentas en un diff   |
    |          |           |      |           |editado de forma     |
    |          |           |      |           |manual               |
    |----------+-----------+------+-----------+---------------------|
    |patchutils|V:11, I:97 |269   |splitdiff  |selecciona parches   |
    |          |           |      |(1)        |incrementales        |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |unwrapdiff |deshace los parches  |
    |patchutils|V:11, I:97 |269   |(1)        |que han sido         |
    |          |           |      |           |mezclados            |
    |----------+-----------+------+-----------+---------------------|
    |          |           |      |           |muestra las          |
    |dirdiff   |V:0.1,     |167   |dirdiff(1) |diferencias y mezcla |
    |          |I:1.4      |      |           |los cambios entre    |
    |          |           |      |           |árboles de directorio|
    |----------+-----------+------+-----------+---------------------|
    |          |V:0.03,    |      |           |compara dos archivos |
    |docdiff   |I:0.25     |554   |docdiff(1) |palabra a palabra /  |
    |          |           |      |           |carácter a carácter  |
    |----------+-----------+------+-----------+---------------------|
    |makepatch |V:0.02,    |99    |makepatch  |genera archivos de   |
    |          |I:0.16     |      |(1)        |parches extendidos   |
    |----------+-----------+------+-----------+---------------------|
    |makepatch |V:0.02,    |99    |applypatch |aplica archivos de   |
    |          |I:0.16     |      |(1)        |parches extendidos   |
    +---------------------------------------------------------------+


10.4.1. extrae las diferencias entre dos archivos fuente

    Los procedimientos siguientes extraen las diferencias entre dos
    archivos de código fuente y crea los archivos diff unificados
    «archivo.patch0» o «archivo.patch1» dependiendo de la ubicación
    del archivo.

    $ diff -u file.old file.new > file.patch0
    $ diff -u old/file new/file > file.patch1

10.4.2. Mezcla actualizaciones del archivos de código fuente

    Un archivo diff (también llamado un parche o un archivo de
    parche) se utiliza para enviar una actualización de un programa.
    Quien lo recibe aplica esta actualización a otro archivo como se
    muestra.

    $ patch -p0 file < file.patch0
    $ patch -p1 file < file.patch1

10.4.3. Integración interactiva

    Si tienes dos versiones de un código fuente, puede realizar la
    fusión bidireccional de forma interactiva utilizando imediff(1)
    de la siguiente forma.

    $ imediff -o file.merged file.old file.new

    Si tiene tres versiones de un código fuente, puede realizar la
    fusión a tres bandas de forma interactiva utilizando imediff(1)
    de la siguiente forma.

    $ imediff -o file.merged file.yours file.base file.theirs

10.5. Git

    Git es la herramienta de elección en estos días para el sistema
    de control de versiones (VCS) ya que Git puede hacerlo todo tanto
    para la gestión local como remota del código fuente.

    Debian proporciona servicios Git gratuitos a través de Servicio
    Debian Salsa. Su documentación puede encontrarse en https://
    wiki.debian.org/Salsa .

    Aquí hay algunos paquetes relacionados con Git.

    Tabla 10.11. Relación de paquetes y órdenes relacionados con git

    +----------------------------------------------------------------------+
    |    paquete     |popularidad|tamaño|     orden      |   descripción   |
    |----------------+-----------+------+----------------+-----------------|
    |                |           |      |                |Git, el sistema  |
    |                |V:406,     |      |                |de control de    |
    |git             |I:616      |50972 |git(7)          |versiones rápido,|
    |                |           |      |                |escalable y      |
    |                |           |      |                |distribuido      |
    |----------------+-----------+------+----------------+-----------------|
    |                |           |      |                |Navegador de     |
    |gitk            |V:4, I:27  |2022  |gitk(1)         |repositorios Git |
    |                |           |      |                |GUI con          |
    |                |           |      |                |históricos       |
    |----------------+-----------+------+----------------+-----------------|
    |                |           |      |                |Navegador de     |
    |qgit            |V:0.2,     |1431  |qgit(1)         |repositorios Git |
    |                |I:2.0      |      |                |GUI con          |
    |                |           |      |                |históricos       |
    |----------------+-----------+------+----------------+-----------------|
    |                |           |      |                |Navegador de     |
    |git-cola        |V:0.7,     |5005  |git-cola(1)     |repositorios Git |
    |                |I:4.6      |      |                |GUI con          |
    |                |           |      |                |históricos       |
    |----------------+-----------+------+----------------+-----------------|
    |                |           |      |                |console Git      |
    |tig             |V:2, I:12  |1243  |tig(1)          |repository       |
    |                |           |      |                |browser with     |
    |                |           |      |                |history          |
    |----------------+-----------+------+----------------+-----------------|
    |                |           |      |                |console Git      |
    |lazygit         |V:0.9,     |24167 |lazygit(1)      |repository       |
    |                |I:3.6      |      |                |browser with     |
    |                |           |      |                |history          |
    |----------------+-----------+------+----------------+-----------------|
    |git-gui         |V:1, I:17  |2525  |git-gui(1)      |GUI para Git (sin|
    |                |           |      |                |históricos)      |
    |----------------+-----------+------+----------------+-----------------|
    |                |           |      |                |Git envía un     |
    |git-email       |V:0.4,     |1204  |git-send-email  |conjunto de      |
    |                |I:9.8      |      |(1)             |parches como un  |
    |                |           |      |                |correo           |
    |----------------+-----------+------+----------------+-----------------|
    |                |           |      |                |automatiza la    |
    |git-buildpackage|V:1.2,     |2027  |git-buildpackage|creación de      |
    |                |I:7.1      |      |(1)             |paquetes Debian  |
    |                |           |      |                |con Git          |
    |----------------+-----------+------+----------------+-----------------|
    |                |V:0.2,     |      |                |interoperabilidad|
    |dgit            |I:1.0      |738   |dgit(1)         |de git con el    |
    |                |           |      |                |archivo de Debian|
    |----------------+-----------+------+----------------+-----------------|
    |                |           |      |                |herramienta de   |
    |                |V:0.03,    |      |                |ayuda interactiva|
    |imediff         |I:0.26     |329   |git-ime(1)      |para             |
    |                |           |      |                |confirmaciones de|
    |                |           |      |                |git separadas    |
    |----------------+-----------+------+----------------+-----------------|
    |stgit           |V:0.08,    |6181  |stg(1)          |quilt sobre git  |
    |                |I:0.50     |      |                |(Python)         |
    |----------------+-----------+------+----------------+-----------------|
    |git-doc         |I:11       |14896 |N/A             |documentación    |
    |                |           |      |                |oficial de Git   |
    |----------------+-----------+------+----------------+-----------------|
    |                |           |      |                |«Git Mágico«, una|
    |gitmagic        |I:0.52     |721   |N/A             |guía de Git fácil|
    |                |           |      |                |de entender      |
    +----------------------------------------------------------------------+


10.5.1. Configuración del cliente Git

    Puede que quiera guardar parte de la configuración global en «~
    /.gitconfig» como su nombre y la dirección de correo electrónico
    que utiliza Git como se muestra.

    $ git config --global user.name "Name Surname"
    $ git config --global user.email yourname@example.com

    También puedes personalizar el comportamiento predeterminado de
    Git de la siguiente manera.

    $ git config --global init.defaultBranch main
    $ git config --global pull.rebase true
    $ git config --global push.default current

    Si esta acostumbrado a utilizar órdenes Subversion o CVS, puede
    que quiera crear algunos alias de orden como se muestra.

    $ git config --global alias.ci "commit -a"
    $ git config --global alias.co checkout

    Puede comprobar la configuración global como se muestra.

    $ git config --global --list

10.5.2. Comandos Git básicos

    La operación Git involucra varios datos.

      * El árbol de trabajo que contiene los archivos del usuario y
        en el que se realizan los cambios.

          + Los cambios a registrar deben ser explícitamente
            seleccionados y puestos en escena en el índice. Se trata
            de los comandos git add y git rm.

      * El índice mantiene los archivos organizados.

          + Los archivos almacenados se enviarán al repositorio local
            en las solicitudes posteriores. Este es el comando git
            commit.

      * El repositorio local mantiene los archivos confirmados.

          + Git realiza un seguimiento del historial vinculado de los
            datos comprometidos y lo administra como una bifurcación
            en el repositorio.

          + El repositorio local puede enviar datos al repositorio
            remoto con el comando git push.

          + El repositorio local puede recibir datos del repositorio
            remoto mediante los comandos git fetch y git pull.

              o El comando git pull ejecuta el comando git merge o
                git rebase después del comando git fetch.

              o Aquí, git merge combina los extremos de las historias
                de dos ramas separadas en un solo punto. (A falta de
                un git pull personalizado, este es el valor
                predeterminado, y también es bueno para que los
                autores anteriores publiquen ramas para muchas
                personas)

              o Aquí, git rebase crea una única rama del historial
                secuencial de la rama remota, seguida de la rama
                local. (Este es el caso de la personalización
                pull.rebase true y esto puede ser válido para el
                resto de nosotros.)

      * El repositorio remoto que contiene los archivos confirmados.

          + La comunicación con el repositorio remoto utiliza
            protocolos de comunicación seguros como SSH o HTTPS.

    El árbol de trabajo son los archivos fuera del directorio .git/.
    Los archivos dentro del directorio .git/ contienen el índice, los
    datos del repositorio local y algunos archivos de texto de
    configuración de git.

    Aquí hay una descripción general de los principales comandos de
    Git.

    Tabla 10.12. Principales comandos de Git

    +---------------------------------------------------------------+
    | Comandos Git |                    función                     |
    |--------------+------------------------------------------------|
    |git init      |crea un repositorio (local)                     |
    |--------------+------------------------------------------------|
    |git clone URL |clonar el repositorio remoto en un repositorio  |
    |              |local con el árbol de trabajo                   |
    |--------------+------------------------------------------------|
    |git pull      |actualizar la rama local principal por el       |
    |origin main   |repositorio remoto origen                       |
    |--------------+------------------------------------------------|
    |              |añadir archivo(s) en el árbol de trabajo al     |
    |git add .     |índice sólo para archivos preexistentes en el   |
    |              |índice                                          |
    |--------------+------------------------------------------------|
    |              |añadir archivo(s) en el árbol de trabajo al     |
    |git add -A .  |índice para todos los archivos, incluidas las   |
    |              |eliminaciones                                   |
    |--------------+------------------------------------------------|
    |git rm        |eliminar archivo(s) del árbol de trabajo y del  |
    |filename      |índice                                          |
    |--------------+------------------------------------------------|
    |git commit    |confirmar los cambios por etapas en el índice al|
    |              |repositorio local                               |
    |--------------+------------------------------------------------|
    |              |agrega todos los cambios en el árbol de trabajo |
    |git commit -a |al índice y los envía al repositorio local      |
    |              |(agregar + confirmar)                           |
    |--------------+------------------------------------------------|
    |git push -u   |actualizar el repositorio remoto origin por la  |
    |origin        |rama local branch_name (invocación inicial)     |
    |branch_name   |                                                |
    |--------------+------------------------------------------------|
    |git push      |actualizar el repositorio remoto origin por la  |
    |origin        |rama local branch_name (invocación posterior)   |
    |branch_name   |                                                |
    |--------------+------------------------------------------------|
    |git diff      |Muestra la diferencia entre la confirmación     |
    |treeish1      |treeish1 y la confirmación treeish2             |
    |treeish2      |                                                |
    |--------------+------------------------------------------------|
    |gitk          |Visualización GUI del árbol histórico de ramas  |
    |              |del repositorio VCS                             |
    +---------------------------------------------------------------+


10.5.3. Consejos para Git

    Aquí hay algunos consejos para Git.

    Tabla 10.13. Consejos para Git

    +---------------------------------------------------------------+
    | Línea de comandos Git |                función                |
    |-----------------------+---------------------------------------|
    |                       |ver el historial completo de Git y     |
    |gitk --all             |operar en ellos, como restablecer HEAD |
    |                       |a otro compromiso, seleccionar un      |
    |                       |parche, crear etiquetas y ramas...     |
    |-----------------------+---------------------------------------|
    |git stash              |recuperar el árbol de trabajo limpio   |
    |                       |sin pérdida de datos                   |
    |-----------------------+---------------------------------------|
    |git remote -v          |verifica la configuración del control  |
    |                       |remoto                                 |
    |-----------------------+---------------------------------------|
    |git branch -vv         |verifica la configuración de la rama   |
    |                       |del repositorio                        |
    |-----------------------+---------------------------------------|
    |git status             |mostrar el estado del árbol de trabajo |
    |-----------------------+---------------------------------------|
    |git config -l          |listar la configuración de git         |
    |-----------------------+---------------------------------------|
    |git reset --hard HEAD; |revertir todos los cambios en el árbol |
    |git clean -x -d -f     |de trabajo y limpiarlos por completo   |
    |-----------------------+---------------------------------------|
    |git rm --cached        |revertir índice por pasos cambiado por |
    |filename               |git add filename                       |
    |-----------------------+---------------------------------------|
    |                       |obtener el registro de referencia (útil|
    |git reflog             |para recuperar confirmaciones de la    |
    |                       |rama eliminada)                        |
    |-----------------------+---------------------------------------|
    |git branch             |crear una nueva rama a partir de la    |
    |new_branch_name HEAD@  |información de reflog                  |
    |{6}                    |                                       |
    |-----------------------+---------------------------------------|
    |git remote add         |añadir un repositorio remoto new_remote|
    |new_remote URL         |apuntado por URL                       |
    |-----------------------+---------------------------------------|
    |git remote rename      |cambiar el nombre del repositorio      |
    |origin upstream        |remoto de origin a upstream            |
    |-----------------------+---------------------------------------|
    |git branch -u upstream/|establecer el seguimiento remoto en el |
    |branch_name            |repositorio remoto upstream y su nombre|
    |                       |de rama branch_name.                   |
    |-----------------------+---------------------------------------|
    |git remote set-url     |                                       |
    |origin https://foo/    |cambiar la URL de origin               |
    |bar.git                |                                       |
    |-----------------------+---------------------------------------|
    |git remote set-url     |deshabilitar pulsar para upstream      |
    |--push upstream        |(Editar .git/config para volver a      |
    |DISABLED               |habilitar)                             |
    |-----------------------+---------------------------------------|
    |git remote update      |Obtener actualizaciones de todas las   |
    |upstream               |ramas remotas en el repositorio        |
    |                       |upstream                               |
    |-----------------------+---------------------------------------|
    |git fetch upstream     |crear una rama local (posiblemente     |
    |foo:upstream-foo       |huérfana) upstream-foo como copia de la|
    |                       |rama foo en el repositorio upstream    |
    |-----------------------+---------------------------------------|
    |git checkout -b        |hacer un nuevo topic_branch y llevarlo |
    |topic_branch ; git push|a origin                               |
    |-u topic_branch origin |                                       |
    |-----------------------+---------------------------------------|
    |git branch -m oldname  |cambiar el nombre del nombre de la     |
    |newname                |sucursal local                         |
    |-----------------------+---------------------------------------|
    |git push -d origin     |eliminar una rama remota (nuevo método)|
    |branch_to_be_removed   |                                       |
    |-----------------------+---------------------------------------|
    |git push origin        |eliminar la rama remota (método        |
    |:branch_to_be_removed  |antiguo)                               |
    |-----------------------+---------------------------------------|
    |git checkout --orphan  |crear una rama desconectada nueva      |
    |unconnected            |                                       |
    |-----------------------+---------------------------------------|
    |git rebase -i origin/  |reorder/drop/squish commits desde      |
    |main                   |origin/main para limpiar el historial  |
    |                       |de la rama                             |
    |-----------------------+---------------------------------------|
    |git reset HEAD^; git   |squash los últimos 2 commits en uno    |
    |commit --amend         |                                       |
    |-----------------------+---------------------------------------|
    |git checkout           |                                       |
    |topic_branch ; git     |squash todo topic_branch en un commit  |
    |merge --squash         |                                       |
    |topic_branch           |                                       |
    |-----------------------+---------------------------------------|
    |git fetch --unshallow  |                                       |
    |--update-head-ok origin|convertir un clon superficial en un    |
    |'+refs/heads/*:refs/   |clon completo de todas las ramas       |
    |heads/*'               |                                       |
    |-----------------------+---------------------------------------|
    |                       |dividir el último commit en una serie  |
    |git ime                |commits de archivos por archivos más   |
    |                       |pequeños, etc. (se requiere el paquete |
    |                       |imediff)                               |
    |-----------------------+---------------------------------------|
    |                       |Vuelve a empaquetar el repositorio     |
    |git repack -a -d; git  |local en un paquete separado (esto     |
    |prune                  |puede limitar las oportunidades de     |
    |                       |recuperar los datos perdidos de ramas  |
    |                       |eliminadas, etc.)                      |
    +---------------------------------------------------------------+


    Aviso

    No utilice etiquetas con caracteres blancos a pesar de que
    algunas herramientas permiten su utilización como gitk(1). Puede
    provocar errores en otras órdenes git.

    Atención

    Si una rama local que se ha enviado a un repositorio remoto se
    reubica o aplasta, enviar esta rama tiene riesgos y requiere la
    opción --force. Por lo general, esto no es aceptable para la rama
    main, pero puede ser aceptable para una rama temática antes de
    fusionarse con la rama main.

    Atención

    Llamar una suborden git directamente como «git-xyz» desde la
    línea de órdenes se ha declarado obsoleto desde principios de
    2006.

    Sugerencia

    Si existe un archivo ejecutable git-foo en la ruta determinada
    por $PATH, al escribir «git foo» sin guión en la línea de órdenes
    llama a git-foo. Esto es una funcionalidad de la orden git.

10.5.4. Algunas referencias sobre Git

    Ver lo siguiente.

      * manpage: git(1) (/usr/share/doc/git-doc/git.html)

      * Manual de Usuario (/usr/share/doc/git-doc/user-manual.html)

      * Un tutorial de introducción a git (/usr/share/doc/git-doc/
        gittutorial.html)
   
      * Un tutorial inicial a git: parte dos (/usr/share/doc/git-doc/
        gittutorial-2.html)

      * «20 órdenes GIT para todos los días (/usr/share/doc/git-doc/
        everyday.html)

      * Git Mágico (/usr/share/doc/gitmagic/html/index.html)

10.5.5. Otros sistemas de control de versiones

    Los Sistemas de control de versiones (VCS) a veces se denominan
    Sistemas de control de revisiones (RCS) o Administradores de
    configuración de software (SCM).

    Aquí hay un resumen de otros VCS notables que no son Git en
    sistemas Debian.

    Tabla 10.14. Lista de otras herramientas del sistema del control de
    las versiones

    +--------------------------------------------------------------------+
    | paquete  |popularidad|tamaño|herramienta|Tipo de CVS|  comentario  |
    |----------+-----------+------+-----------+-----------+--------------|
    |          |           |      |           |           |DCVS escrito  |
    |mercurial |V:3, I:26  |2575  |Mercurial  |distribuido|en Python y   |
    |          |           |      |           |           |algo en C     |
    |----------+-----------+------+-----------+-----------+--------------|
    |          |           |      |           |           |DCVS con      |
    |          |V:0.2,     |      |           |           |notación      |
    |darcs     |I:3.3      |38856 |Darcs      |distribuido|algebraica    |
    |          |           |      |           |           |inteligente   |
    |          |           |      |           |           |(lento)       |
    |----------+-----------+------+-----------+-----------+--------------|
    |          |           |      |           |           |DVCS          |
    |tla       |V:0.04,    |1022  |GNU arch   |distribuido|principalmente|
    |          |I:0.72     |      |           |           |por Tom Lord  |
    |          |           |      |           |           |(histórico)   |
    |----------+-----------+------+-----------+-----------+--------------|
    |          |           |      |           |           |DVCS          |
    |          |           |      |           |           |influenciado  |
    |bzr       |V:0.1,     |28    |GNU Bazaar |distribuido|por tla,      |
    |          |I:4.3      |      |           |           |escrito en    |
    |          |           |      |           |           |Python        |
    |          |           |      |           |           |(historic)    |
    |----------+-----------+------+-----------+-----------+--------------|
    |          |           |      |           |           |«CVS bien     |
    |          |           |      |           |           |hecho«, nuevo |
    |subversion|V:10, I:57 |4849  |Subversion |remoto     |estándar CVS  |
    |          |           |      |           |           |remoto        |
    |          |           |      |           |           |(histórico)   |
    |----------+-----------+------+-----------+-----------+--------------|
    |          |           |      |           |           |estándar      |
    |cvs       |V:3, I:25  |4835  |CVS        |remoto     |remoto        |
    |          |           |      |           |           |anterior VCS  |
    |          |           |      |           |           |(histórico)   |
    |----------+-----------+------+-----------+-----------+--------------|
    |          |           |      |           |           |Visualización |
    |          |           |      |           |           |GUI del árbol |
    |          |V:0.12,    |      |           |           |de            |
    |tkcvs     |I:0.88     |34    |CVS, …     |remoto     |repositorios  |
    |          |           |      |           |           |VCS (CVS,     |
    |          |           |      |           |           |Subversion,   |
    |          |           |      |           |           |RCS)          |
    |----------+-----------+------+-----------+-----------+--------------|
    |          |V:1.7,     |      |           |           |«Unix SCCS    |
    |rcs       |I:9.5      |578   |RCS        |local      |bien hecho«   |
    |          |           |      |           |           |(histórico)   |
    |----------+-----------+------+-----------+-----------+--------------|
    |          |V:0.01,    |      |           |           |clon de Unix  |
    |cssc      |I:0.35     |2044  |CSSC       |local      |SCCS          |
    |          |           |      |           |           |(histórico)   |
    +--------------------------------------------------------------------+



---------------------------------------------------------------------

    ^[4] Un medio de escritura única, como CD / DVD-R, puede evitar
    accidentes de sobrescritura. (Ver Sección 9.8, “Datos binarios”
    para saber cómo escribir en el medio de almacenamiento desde la
    línea de comandos del shell. El entorno GUI de escritorio GNOME
    le brinda fácil acceso a través del menú: "Lugares→Creador de CD/
    DVD".)

    ^[5] Algunos de estos datos no se pueden regenerar introduciendo
    la misma cadena de entrada en el sistema.

    ^[6] Si utilizas "~/.vimrc" en lugar de "~/.vim/vimrc", sustituye
    lo según corresponda.

Capítulo 11. Conversión de datos

    Se describen herramientas y métodos para convertir formatos de
    datos en el sistema Debian.

    Las herramientas para formatos estándar son muy buenas pero para
    formatos propietarios son limitadas.

11.1. Herramientas para la conversión de información en formato texto

    Los siguientes paquetes para la conversión de información en
    formato texto llamaron mi atención.

    Tabla 11.1. Relación de herramientas de conversión de información
    en formato texto

    +---------------------------------------------------------------+
    |paquete |popularidad|tamaño|palabra clave |    descripción     |
    |--------+-----------+------+--------------+--------------------|
    |        |           |      |              |conversor de la     |
    |        |           |      |              |codificación de     |
    |        |V:940,     |      |conjunto de   |texto entre         |
    |libc6   |I:999      |5355  |caracteres    |configuraciones     |
    |        |           |      |              |locales mediante    |
    |        |           |      |              |iconv(1)            |
    |        |           |      |              |(fundamental)       |
    |--------+-----------+------+--------------+--------------------|
    |        |           |      |              |conversor de        |
    |        |           |      |              |codificaciones de   |
    |        |           |      |              |texto entre         |
    |recode  |V:2, I:13  |528   |conjunto de   |configuraciones     |
    |        |           |      |caracteres+eol|locales (versátil,  |
    |        |           |      |              |con más             |
    |        |           |      |              |funcionalidades y   |
    |        |           |      |              |alias)              |
    |--------+-----------+------+--------------+--------------------|
    |        |           |      |              |conversor de        |
    |        |           |      |              |codificaciones de   |
    |konwert |V:2, I:42  |137   |conjunto de   |texto entre         |
    |        |           |      |caracteres    |configuraciones     |
    |        |           |      |              |locales             |
    |        |           |      |              |(sofisticado)       |
    |--------+-----------+------+--------------+--------------------|
    |        |           |      |              |traductor del       |
    |nkf     |V:0.4,     |359   |conjunto de   |conjunto de         |
    |        |I:8.5      |      |caracteres    |caracteres para el  |
    |        |           |      |              |japonés             |
    |--------+-----------+------+--------------+--------------------|
    |        |V:0.01,    |      |conjunto de   |traductor de        |
    |tcs     |I:0.14     |518   |caracteres    |conjunto de         |
    |        |           |      |              |caracteres          |
    |--------+-----------+------+--------------+--------------------|
    |        |           |      |              |cambia las letras   |
    |unaccent|V:0.03,    |35    |conjunto de   |acentuadas por su   |
    |        |I:0.30     |      |caracteres    |equivalente sin     |
    |        |           |      |              |acentuar            |
    |--------+-----------+------+--------------+--------------------|
    |        |           |      |              |conversor entre     |
    |        |           |      |              |formatos de texto   |
    |tofrodos|V:1, I:13  |50    |eol           |entre DOS y Unix:   |
    |        |           |      |              |fromdos(1) y todos  |
    |        |           |      |              |(1)                 |
    |--------+-----------+------+--------------+--------------------|
    |        |           |      |              |conversor de        |
    |        |V:0.04,    |      |              |formatos de texto   |
    |macutils|I:0.45     |319   |eol           |entre Macintosh y   |
    |        |           |      |              |Unix: frommac(1) y  |
    |        |           |      |              |tomac(1)            |
    +---------------------------------------------------------------+


11.1.1. Convirtiendo un archivo de texto con iconv

    Sugerencia

    iconv(1) es parte del paquete libc6 y esta siempre disponible en
    prácticamente el cualquier sistema tipo Unix para la conversión
    de codificaciones de caracteres.

    Puede convertir las codificaciones de los archivos de texto con
    iconv(1)como se muestra.

    $ iconv -f encoding1 -t encoding2 input.txt >output.txt

    Los valores de codificaciones para el encaje distinguen entre
    mayúsculas y minúsculas y pasan por alto «-» y «_». Puede obtener
    una relación de las codificaciones reconocidas mediante la orden
    «iconv -l».

    Tabla 11.2. Relación de valores de codificación y su uso

    +---------------------------------------------------------------+
    |valor de la |                       uso                        |
    |codificación|                                                  |
    |------------+--------------------------------------------------|
    |            |Código Estándar Americano para el Intercambio de  |
    |ASCII       |Información, código de 7 bits sin caracteres      |
    |            |acentuados                                        |
    |------------+--------------------------------------------------|
    |UTF-8       |estándar multilenguaje actual en los sistemas     |
    |            |operativos modernos                               |
    |------------+--------------------------------------------------|
    |ISO-8859-1  |estándar antiguo de las lenguas occidentales,     |
    |            |ASCII+ caracteres acentuados                      |
    |------------+--------------------------------------------------|
    |ISO-8859-2  |antiguo estándar de las lenguas occidentales,     |
    |            |ASCII + caracteres acentuados                     |
    |------------+--------------------------------------------------|
    |ISO-8859-15 |antiguo estándar de las lenguas occidentales,     |
    |            |ISO-8859-1 con el símbolo del euro                |
    |------------+--------------------------------------------------|
    |            |página de códigos 850, caracteres de Microsoft DOS|
    |CP850       |con gráficos para los lenguajes de la Europa      |
    |            |occidental, variante de ISO-8859-1                |
    |------------+--------------------------------------------------|
    |CP932       |página de código 932, variante del japonés de     |
    |            |Shift-JIS al estilo Microsoft Windows             |
    |------------+--------------------------------------------------|
    |            |página de códigos 936,GB2312, GBK o GB18030       |
    |CP936       |variante para chino simplificado al estilo        |
    |            |Microsoft Windows                                 |
    |------------+--------------------------------------------------|
    |CP949       |página de código 949, EUC-KR o Código Unificado   |
    |            |Hangul par coreano al estilo Microsoft Windows    |
    |------------+--------------------------------------------------|
    |CP950       |código de página 950, Big5 variante par chino     |
    |            |tradicional al estilo Microsoft Windows           |
    |------------+--------------------------------------------------|
    |CP1251      |código de página 1251, codificación del alfabeto  |
    |            |cirílico al estilo Microsoft Windows              |
    |------------+--------------------------------------------------|
    |            |código de página 1252, ISO-8859-15 para las       |
    |CP1252      |lenguas de Europa occidental al estilo Microsoft  |
    |            |Windows                                           |
    |------------+--------------------------------------------------|
    |KOI8-R      |antiguo estándar ruso UNIX para el alfabeto       |
    |            |cirílico                                          |
    |------------+--------------------------------------------------|
    |ISO-2022-JP |estándar de codificación japones para el correo   |
    |            |electrónico que solo utiliza códigos de 7 bit     |
    |------------+--------------------------------------------------|
    |eucJP       |código de 8 bit del antiguo estándar japonés de   |
    |            |UNIX, completamente diferente de Shift-JIS        |
    |------------+--------------------------------------------------|
    |Shift-JIS   |Apéndice 1 para el japonés JIS X 0208 (consulte   |
    |            |CP932)                                            |
    +---------------------------------------------------------------+


    Nota

    Algunas codificaciones son únicamente usadas para la conversión
    de información y no son usables como valores locales (
    Sección 8.1, “Configuración regional”).

    Para los conjuntos de caracteres que caben en un único byte como
    ASCII y ISO-8859, la codificación de caracteres es casi lo mismo
    que el conjunto de caracteres.

    Para los conjuntos de caracteres con muchos elementos como JIS X
    0213 en el japonés o Conjunto de Caracteres Universal (UCS,
    Unicode, ISO-10646-1) en prácticamente cualquier lenguaje,
    existen muchos esquemas de codificación y encajan como secuencias
    de bytes de datos.

      * EUC e ISO/IEC 2022 (también conocido como JIS X 0202) para el
        japonés

      * UTF-8, UTF-16/UCS-2 y UTF-32/UCS-4 para Unicode

    En este caso existe un diferenciación clara entre el conjunto de
    caracteres y la codificación de caracteres

    Algunos proveedores en algunos casos utilizan la página de
    códigos como sinónimo de la tabla de codificación de caracteres.

    Nota

    Tener en cuenta que la mayor parte de los sistemas de
    codificación comparten los mismos códigos con ASCII de 7 bits.
    Pero existen algunas excepciones. Si se convierten programas
    antiguos japoneses en C y datos URL de la codificación conocida
    como formato shift-JIS a formato UTF-8, usar «CP932» como nombre
    de la codificación en lugar de «shift-JIS» para obtener los
    resultados correctos: 0x5C → «\» y 0x7E → «~». De otro modo se
    convertirán a los caracteres incorrectos.

    Sugerencia

    recode(1) se puede también usar y aporta mayor funcionalidad que
    la combinación de iconv(1), fromdos(1), todos(1), frommac(1) y
    tomac(1). Para más información, ver «info recode».

11.1.2. Comprobando que un archivo es UTF-8 con iconv

    Puede comprobar si un archivo de texto está codificado en UTF-8
    con iconv(1) como se muestra.

    $ iconv -f utf8 -t utf8 input.txt >/dev/null || echo "non-UTF-8 found"

    Sugerencia
   
    Utilizar la opción «--verbose» en el ejemplo anterior para
    determinar el primer carácter que no pertenece a UTF-8.

11.1.3. Convirtiendo los nombres de archivos con iconv

    Aquí hay un archivo de órdenes de ejemplo de conversión de los
    nombres de archivos creados en un sistema operativo antiguo a
    otro moderno UTF-8 en un único directorio.

    #!/bin/sh
    ENCDN=iso-8859-1
    for x in *;
     do
     mv "$x" "$(echo "$x" | iconv -f $ENCDN -t utf-8)"
    done

    La variable «$ENCDN» contiene la codificación original utilizada
    por el nombre de archivo en el sistema operativo antiguo como en
    Tabla 11.2, “Relación de valores de codificación y su uso”.

    Para escenarios más complicados, por favor, monte el sistema de
    archivos (p. ej. la partición del disco) que contiene los nombres
    de archivos con la codificación adecuada mediante la opción
    correspondiente de mount(8) (consulte Sección 8.1.3,
    “Codificación del nombre de archivo”) y copie el contenido
    completo a otro sistema de archivos montado como UTF-8 con la
    orden «cp -a».

11.1.4. Conversión EOL

    El formato de archivo de texto, concretamente el código de final
    de línea (EOL) depende de la plataforma.

    Tabla 11.3. Relación de estilos EOL para las diferentes
    plataformas

    +---------------------------------------------------------------+
    |  plataforma   |codificación de EOL|control|decimal|hexadecimal|
    |---------------+-------------------+-------+-------+-----------|
    |Debian (unix)  |LF                 |^J     |10     |0A         |
    |---------------+-------------------+-------+-------+-----------|
    |MSDOS y Windows|CR-LF              |^M^J   |13 10  |0D 0A      |
    |---------------+-------------------+-------+-------+-----------|
    |Macintosh      |CR                 |^M     |13     |0D         |
    +---------------------------------------------------------------+


    ,Los programas de conversión del formato EOL fromdos(1), todos
    (1), frommac(1) y tomac(1), son muy útiles. Recode(1) también es
    muy útil.

    Nota

    Algunos datos del sistema Debian, como las páginas wiki del
    paquete python-moinmoin utilizan el estilo de MSDOS usando como
    EOL la combinación CR-LF. Así es que lo anterior es solo una
    regla general.

    Nota
   
    La mayor parte de los editores (p ej.vim, emacs, gedit, …)
    gestionan de forma transparente el estilo EOL de MSDOS.

    Sugerencia

    La utilización de «sed -e '/\r$/!s/$/\r/'» en lugar de todos(1)
    es mejor si quiere unificar el uso de EOL de los estilos MSDOS y
    Unix. (p. ej. tras mezclar dos archivos MSDOS con diff3(1).) Esto
    se debe a que todos añade CR a todas las líneas.

11.1.5. Conversión de tabuladores

    Existen algunos programas especializados en convertir los códigos
    de tabulación.

    Tabla 11.4. Relación de las órdenes de conversión de tabuladores
    de los paquetes bsdmainutils y coreutils

    +-------------------------------------------------------------+
    |               función                |bsdmainutils|coreutils|
    |--------------------------------------+------------+---------|
    |cambia los tabuladores a espacios     |«col -x»    |expand   |
    |--------------------------------------+------------+---------|
    |no cambia los tabuladores por espacios|«col -h»    |unexpand |
    +-------------------------------------------------------------+


    indent(1) perteneciente al paquete indent reformatea
    completamente a un programa en C..

    Los programas de edición como vim y emacs pueden también utilizar
    la conversión de tabuladores. Por ejemplo con vim, puede expandir
    los tabuladores con la secuencia de órdenes «:set expandtab» y
    «:%retab». Puede deshacer estos cambios con la secuencia de
    órdenes «:set noexpandtab» y «:%retab!».

11.1.6. Editores con conversión automática

    Los editores modernos inteligentes como el programa vim son lo
    bastante inteligentes y trabajan bien con cualquier sistema de
    codificación y formato de archivo. Para mejorar la compatibilidad
    debería usar la configuración local UTF-8 en una consola con esta
    posibilidad.

    Un antiguo archivo de texto Unix de Europa occidental
    «u-file.txt» almacenado con la codificación latin1 (iso-8859-1)
    se puede editar con vim como se muestra.

    $ vim u-file.txt

    Esto es debido al mecanismo de autodetección de la codificación
    del archivo en vim que asume por defecto UTF-8 y si falla asume
    que será latin1.

    Un antiguo archivo de texto polaco en Unix, «pu-file.txt»,
    almacenado en la codificación latin2 (iso-8859-2) se puede editar
    con vim como se muestra.

    $ vim '+e ++enc=latin2 pu-file.txt'

    Un antiguo fichero de texto Unix en japonés, «ju-file.txt»,
    almacenado con la codificación eucJP se puede editar con vim como
    se muestra.

    $ vim '+e ++enc=eucJP ju-file.txt'

    Un archivo de texto MS-Windows antiguo en japonés, «jw-file.txt»,
    almacenado con la codificación shift-JIS (concretamente: CP932)
    se puede editar con vim como se muestra.

    $ vim '+e ++enc=CP932 ++ff=dos jw-file.txt'

    Cuando se abre un archivo con las opciones «++enc» y «++ff» , la
    orden de Vim «:w» lo almacena en su formato original
    sobreescribiendo el archivo original. También puede guardarlo con
    un formato y nombre de archivo específico con la orden de Vim
    correspondiente, p. ej. , «:w ++enc=utf8 new.txt».

    Por favor para más información sobre el «soporte de texto
    multibyte« consulte mbyte.txt en la ayuda de vim y Tabla 11.2,
    “Relación de valores de codificación y su uso” para los valores
    de configuraciones de la ubicación utilizados por «++enc».

    En los programas de la familia de emacs existen funcionalidades
    equivalentes a las anteriormente descritas.

11.1.7. Extracción de texto plano

    Los siguiente lee un página web y la convierte en un archivo de
    texto. Es muy útil copiando configuraciones de la Web o para
    aplicarle las herramientas de texto de Unix a la página web como
    grep(1).

    $ w3m -dump https://www.remote-site.com/help-info.html >textfile

    De igual forma, puede extraer información en texto plano desde
    otros formatos como se muestra.

    Tabla 11.5. Relación de las herramientas para extraer información
    en texto plano

    +---------------------------------------------------------------+
    | paquete |popularidad|tamaño| palabra clave |     función      |
    |---------+-----------+------+---------------+------------------|
    |         |           |      |               |conversor de HTML |
    |w3m      |V:11, I:137|2853  |html→text      |a texto con la    |
    |         |           |      |               |orden «w3m -dump» |
    |---------+-----------+------+---------------+------------------|
    |         |           |      |               |conversor avanzado|
    |html2text|V:3, I:68  |298   |html→text      |de HTML a texto   |
    |         |           |      |               |(ISO 8859-1)      |
    |---------+-----------+------+---------------+------------------|
    |         |           |      |               |conversor de HTML |
    |lynx     |V:28, I:449|2031  |html→text      |a texto con la    |
    |         |           |      |               |orden «lynx -dump»|
    |---------+-----------+------+---------------+------------------|
    |         |           |      |               |conversor de HTML |
    |elinks   |V:3, I:16  |1789  |html→text      |a texto con la    |
    |         |           |      |               |orden «elinks     |
    |         |           |      |               |-dump»            |
    |---------+-----------+------+---------------+------------------|
    |         |           |      |               |Conversor de HTML |
    |links    |V:2, I:21  |2321  |html→text      |a texto con la    |
    |         |           |      |               |orden «links      |
    |         |           |      |               |-dump»            |
    |---------+-----------+------+---------------+------------------|
    |         |           |      |               |conversor de HTML |
    |links2   |V:1, I:10  |5466  |html→text      |a texto con la    |
    |         |           |      |               |orden «links2     |
    |         |           |      |               |-dump»            |
    |---------+-----------+------+---------------+------------------|
    |         |           |      |               |convierte archivos|
    |catdoc   |V:15, I:171|682   |MSWord→text,TeX|MSWord a texto    |
    |         |           |      |               |plano o TeX       |
    |---------+-----------+------+---------------+------------------|
    |         |V:0.9,     |      |               |convierte archivos|
    |antiword |I:6.5      |587   |MSWord→text,ps |MSWord a texto    |
    |         |           |      |               |plano o ps        |
    |---------+-----------+------+---------------+------------------|
    |         |           |      |               |borra las         |
    |unhtml   |V:0.04,    |40    |html→text      |etiquetas de      |
    |         |I:0.50     |      |               |marcado de un     |
    |         |           |      |               |archivo HTML      |
    |---------+-----------+------+---------------+------------------|
    |         |           |      |               |conversor de Texto|
    |odt2txt  |V:1, I:21  |60    |odt→texto      |OpenDocument a    |
    |         |           |      |               |texto             |
    +---------------------------------------------------------------+


11.1.8. Resaltando y dándole formato a información en texto plano

    Puede resaltar y dar formato a información en texto plano como se
    muestra.

    Tabla 11.6. Relación de herramientas para resaltar información en
    texto plano

    +-----------------------------------------------------------------+
    |    paquete     |popularidad|tamaño| palabra clave | descripción |
    |----------------+-----------+------+---------------+-------------|
    |                |           |      |               |Vim MACRO    |
    |                |           |      |               |para         |
    |                |           |      |               |convertir    |
    |                |           |      |               |código fuente|
    |vim-runtime     |V:17, I:365|38706 |highlight      |a HTML con   |
    |                |           |      |               |«:source     |
    |                |           |      |               |$VIMRUNTIME/ |
    |                |           |      |               |syntax/      |
    |                |           |      |               |html.vim»    |
    |----------------+-----------+------+---------------+-------------|
    |                |           |      |               |convierte un |
    |cxref           |V:0.03,    |1191  |c→html         |programa en  |
    |                |I:0.23     |      |               |lenguaje C a |
    |                |           |      |               |latext y HTML|
    |----------------+-----------+------+---------------+-------------|
    |                |           |      |               |convierte    |
    |                |V:0.02,    |      |               |varios       |
    |src2tex         |I:0.18     |1799  |highlight      |códigos      |
    |                |           |      |               |fuentes a TeX|
    |                |           |      |               |(lenguaje C) |
    |----------------+-----------+------+---------------+-------------|
    |                |           |      |               |convierte    |
    |                |           |      |               |varias       |
    |                |           |      |               |códigos      |
    |                |           |      |               |fuente a     |
    |                |           |      |               |HTML, XHTML, |
    |                |           |      |               |LaTeX,       |
    |source-highlight|V:0.5,     |2131  |highlight      |Texinfo,     |
    |                |I:3.2      |      |               |secuencias de|
    |                |           |      |               |escape de    |
    |                |           |      |               |color ANSI y |
    |                |           |      |               |archivos     |
    |                |           |      |               |DocBook con  |
    |                |           |      |               |resaltado    |
    |                |           |      |               |(C++)        |
    |----------------+-----------+------+---------------+-------------|
    |                |           |      |               |convierte    |
    |                |           |      |               |varios       |
    |                |           |      |               |códigos      |
    |                |           |      |               |fuente a     |
    |highlight       |V:0.4,     |1411  |highlight      |archivos     |
    |                |I:3.1      |      |               |HTML, XHTML, |
    |                |           |      |               |RTF, LaTeX,  |
    |                |           |      |               |TeX o XSL-FO |
    |                |           |      |               |con resaltado|
    |                |           |      |               |(C++)        |
    |----------------+-----------+------+---------------+-------------|
    |                |V:1.0,     |      |               |coloreado    |
    |grc             |I:6.0      |208   |texto→color    |genérico para|
    |                |           |      |               |todo (Python)|
    |----------------+-----------+------+---------------+-------------|
    |                |           |      |               |conversor    |
    |pandoc          |V:10, I:47 |208068|texto→cualquier|general      |
    |                |           |      |cosa           |«markup«     |
    |                |           |      |               |(Haskell)    |
    |----------------+-----------+------+---------------+-------------|
    |                |           |      |               |formateador  |
    |                |           |      |               |de documentos|
    |python3-docutils|V:12, I:52 |2009  |texto→cualquier|de Texto     |
    |                |           |      |cosa           |ReStructurado|
    |                |           |      |               |a XML        |
    |                |           |      |               |(Python)     |
    |----------------+-----------+------+---------------+-------------|
    |                |           |      |               |Formateador  |
    |                |           |      |               |de documentos|
    |markdown        |V:0.5,     |56    |texto→html     |de texto     |
    |                |I:5.9      |      |               |Markdown en  |
    |                |           |      |               |(X)HTML      |
    |                |           |      |               |(Perl)       |
    |----------------+-----------+------+---------------+-------------|
    |                |           |      |               |formateador  |
    |                |           |      |               |de documentos|
    |asciidoctor     |V:0.4,     |101   |texto→cualquier|de texto     |
    |                |I:4.8      |      |cosa           |AsciiDoc a   |
    |                |           |      |               |XML/HTML     |
    |                |           |      |               |(Ruby)       |
    |----------------+-----------+------+---------------+-------------|
    |                |           |      |               |Sistema de   |
    |                |           |      |               |publicación  |
    |python3-sphinx  |V:6, I:27  |3235  |texto→cualquier|de documentos|
    |                |           |      |cosa           |basado en    |
    |                |           |      |               |ReStructured |
    |                |           |      |               |Text (Python)|
    |----------------+-----------+------+---------------+-------------|
    |                |           |      |               |Sistema de   |
    |                |           |      |               |publicación  |
    |hugo            |V:0.8,     |66608 |texto→html     |de sitios    |
    |                |I:5.1      |      |               |estáticos    |
    |                |           |      |               |basado en    |
    |                |           |      |               |Markdown (Go)|
    +-----------------------------------------------------------------+


11.2. datos XML

    El Lenguaje de Marcado Extensible (XML) es un lenguaje de marcado
    para documentos que tengan la información estructurada.

    Consulte la información introductoria en XML.COM.

      * «¿Qué es XML?«

      * «¿Qué es XSLT?«
   
      * «¿Qué es XSL-FO?«

      * «¿Qué es XLink?«

11.2.1. Conceptos básicos de XML

    El código XML tiene la apariencia de HTML. Nos permite obtener
    diferentes formatos de un documento. Un sistema sencillo de XML
    es el paquete docbook-xsl, que utilizamos aquí.

    Todo archivo XML comienza con una declaración estándar XML como
    se muestra.

    <?xml version="1.0" encoding="UTF-8"?>

    La sintaxis fundamental de un elemento XML se marca como se
    muestra.

    <name attribute="value">content</name>

    Un elemento XML sin contenido se marca de forma resumida como se
    muestra.

    <name attribute="value" />

    El «atributo=«valor«» de los ejemplos anteriores son opcionales.

    Un comentario en XML se marca como se muestra.

    <!-- comment -->

    Mientras que otros añaden marcas, XML necesita cambios menores al
    utilizar entidades predefinidas para los siguientes caracteres.

    Tabla 11.7. Relación de entidades predefinidas para XML

    +---------------------------------------------+
    |entidad predefinida|carácter a ser convertido|
    |-------------------+-------------------------|
    |&quot;             |« : comillas             |
    |-------------------+-------------------------|
    |&apos;             |' : apóstrofe            |
    |-------------------+-------------------------|
    |&lt;               |< : menor que            |
    |-------------------+-------------------------|
    |&gt;               |> : mayor que            |
    |-------------------+-------------------------|
    |&amp;              |& : signo &              |
    +---------------------------------------------+


    Atención
   
    «<» o «&» no se pueden utilizar en los atributos y elementos.

    Nota

    Cuando se utilizan entidades definidas por el usuario, p. ej. «&
    alguna_etiqueta:», la primera definición prevalece sobre las
    demás. La definición de la entidad se realiza como «<!ENTITY
    alguna-etiqueta «valor de la entidad«>».

    Nota

    Ya que las marcas XML se realizan de forma coherente con un
    cierto conjunto de etiquetas (y alguna información en su
    contenido y atributos), la conversión a otro XML es un
    procedimiento trivial utilizando Transformaciones del Lenguaje de
    Estilo Extensibles (XSLT, Extensible Stylesheet Language
    Transformations).

11.2.2. Procesamiento XML

    Existen muchas herramientas para procesar archivos XML como el
    Lenguaje de Estilos Extensible (XSL, the Extensible Stylesheet
    Language).

    Principalmente, una vez que tenga un archivo XML bien formado,
    puede convertirlo en cualquier otro formato utilizando el
    Lenguaje de Transformación de Estilos Extensible (XSLT,
    Extensible Stylesheet Language Transformations .

    El Lenguaje de Estilo Extensible para dar Formato a Objetos
    (XSL-FO, Extensible Stylesheet Language for Formatting Objects)
    se supone que es la solución en lo referente a dar formato. El
    paquete fop es nuevo en el archivo main de Debian debido a su
    dependencia del lenguaje de programación Java. Así que el código
    LaTeX se genera normalmente partiendo de XML y utilizando XSLT y
    el sistema LaTeX se utiliza para crear los formatos de archivo
    imprimibles como DVI, PostScript y PDF.

    Tabla 11.8. Relación de herramientas XML

    +---------------------------------------------------------------+
    |  paquete  |popularidad|tamaño|palabra|      descripción       |
    |           |           |      | clave |                        |
    |-----------+-----------+------+-------+------------------------|
    |           |           |      |       |Documento de definición |
    |docbook-xml|V:15, I:408|2126  |xml    |de XML (DTD) para       |
    |           |           |      |       |DocBook                 |
    |-----------+-----------+------+-------+------------------------|
    |           |           |      |       |Hojas de estilos XSL    |
    |           |           |      |xml/   |para procesar documentos|
    |docbook-xsl|V:14, I:145|14823 |xslt   |XML DocBook a diferentes|
    |           |           |      |       |formatos de salida con  |
    |           |           |      |       |XSLT                    |
    |-----------+-----------+------+-------+------------------------|
    |           |           |      |       |procesador de línea de  |
    |xsltproc   |V:15, I:73 |83    |xslt   |órdenes XSLT (XML → XML,|
    |           |           |      |       |HTML, texto plano, etc.)|
    |-----------+-----------+------+-------+------------------------|
    |xmlto      |V:0.5,     |124   |xml/   |conversor de XML a      |
    |           |I:8.6      |      |xslt   |cualquier cosa con XSLT |
    |-----------+-----------+------+-------+------------------------|
    |fop        |V:0.7,     |281   |xml/   |convierte archivos XML  |
    |           |I:8.1      |      |xsl-fo |Docbook a PDF           |
    |-----------+-----------+------+-------+------------------------|
    |           |           |      |       |convierte archivos      |
    |dblatex    |V:0.9,     |4636  |xml/   |Docbook a documentos    |
    |           |I:5.8      |      |xslt   |DVI, PostScript, PDF con|
    |           |           |      |       |XSLT                    |
    |-----------+-----------+------+-------+------------------------|
    |dbtoepub   |V:0.05,    |37    |xml/   |conversor DocBook XML a |
    |           |I:0.50     |      |xslt   |.epub                   |
    +---------------------------------------------------------------+


    Ya que XML es un subconjunto del Lenguaje Estándar de Marcas
    Generalizado (SGML), puede ser procesado por cualquier
    herramienta para SGML, como Lenguaje de Especificación y
    Semántica de Documentos de Estilo (DSSSL, Document Style
    Semantics and Specification Language).

    Tabla 11.9. Relación de herramientas DSSSL

    +---------------------------------------------------------------+
    |   paquete   |popularidad|tamaño|palabra|     descripción      |
    |             |           |      | clave |                      |
    |-------------+-----------+------+-------+----------------------|
    |             |           |      |       |ISO/IEC 10179:1996    |
    |openjade     |V:1, I:22  |1066  |dsssl  |procesador de estándar|
    |             |           |      |       |DSSSL (más            |
    |             |           |      |       |actualizado)          |
    |-------------+-----------+------+-------+----------------------|
    |             |           |      |       |Hojas de estilo DSSSL |
    |             |           |      |       |para el procesamiento |
    |docbook-dsssl|V:0.5,     |2594  |xml/   |de documentos XML     |
    |             |I:7.9      |      |dsssl  |DocBook a diferentes  |
    |             |           |      |       |formatos de salida con|
    |             |           |      |       |DSSSL                 |
    |-------------+-----------+------+-------+----------------------|
    |             |           |      |       |utilidades para       |
    |             |           |      |       |archivos DocBook      |
    |             |           |      |       |incluyendo la         |
    |docbook-utils|V:0.4,     |287   |xml/   |conversión a otros    |
    |             |I:5.6      |      |dsssl  |formatos (HTML, RTF,  |
    |             |           |      |       |PS, man, PDF) con las |
    |             |           |      |       |órdenes docbook2* con |
    |             |           |      |       |DSSSL                 |
    +---------------------------------------------------------------+


    Sugerencia

    Algunas veces es práctico leer directamente archivos XML DocBook
    con yelp de GNOME ya que tiene una representación de imágenes en
    X decente.

11.2.3. La extracción de información XML

    Puedes extraer los datos HTML o XML de otros formatos utilizando
    los siguientes.

    Tabla 11.10. Relación de herramientas de extracción de
    información XML

    +---------------------------------------------------------------+
    | paquete |popularidad|tamaño|    palabra clave     |descripción|
    |---------+-----------+------+----------------------+-----------|
    |         |           |      |                      |conversor  |
    |         |V:0.1,     |      |                      |de páginas |
    |man2html |I:1.3      |142   |páginas man→html      |man a HTML |
    |         |           |      |                      |(soporte   |
    |         |           |      |                      |CGI)       |
    |---------+-----------+------+----------------------+-----------|
    |         |V:0.01,    |      |                      |conversor  |
    |doclifter|I:0.05     |487   |troff→xml             |de troff a |
    |         |           |      |                      |DocBook XML|
    |---------+-----------+------+----------------------+-----------|
    |         |V:0.2,     |      |                      |conversor  |
    |texi2html|I:3.0      |1847  |texi→html             |de Texinfo |
    |         |           |      |                      |a HTML     |
    |---------+-----------+------+----------------------+-----------|
    |         |           |      |                      |conversor  |
    |         |V:0.9,     |      |                      |de GNU info|
    |info2www |I:1.5      |76    |info→html             |a HTML     |
    |         |           |      |                      |(soporte   |
    |         |           |      |                      |CGI)       |
    |---------+-----------+------+----------------------+-----------|
    |         |           |      |                      |conversor  |
    |         |           |      |                      |de         |
    |         |           |      |                      |documentos |
    |wv       |V:0.2,     |733   |MSWord→cualquiera     |de         |
    |         |I:2.5      |      |                      |Microsoft  |
    |         |           |      |                      |Word a     |
    |         |           |      |                      |HTML,      |
    |         |           |      |                      |LaTeX, etc.|
    |---------+-----------+------+----------------------+-----------|
    |         |           |      |                      |conversor  |
    |         |V:0.3,     |      |                      |de         |
    |unrtf    |I:2.9      |159   |rtf→html              |documentos |
    |         |           |      |                      |de RTF a   |
    |         |           |      |                      |HTML, etc  |
    |---------+-----------+------+----------------------+-----------|
    |         |           |      |                      |archivos   |
    |         |           |      |                      |WordPerfect|
    |wp2x     |V:0.01,    |200   |WordPerfect→cualquiera|5.0 y 5.1 a|
    |         |I:0.09     |      |                      |TeX, LaTeX,|
    |         |           |      |                      |troff, GML |
    |         |           |      |                      |y HTML     |
    +---------------------------------------------------------------+


11.2.4. Análisis de datos XML

    Para archivos HTML que no son XML, puede convertirlos a XHTML el
    cual es una ocurrencia de XML bien formado. XHTML puede ser
    procesado por las herramientas XML.

    Se puede comprobar la sintaxis de los archivos XML y la bondad de
    las URL encontradas en ellos.

    Tabla 11.11. Relación de las herramientas de impresión de calidad
    de XML

    +---------------------------------------------------------------+
    |   paquete   |popularidad|tamaño|   función    |  descripción  |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |herramienta XML|
    |             |           |      |              |en línea de    |
    |             |           |      |              |órdenes xmllint|
    |libxml2-utils|V:62, I:209|211   |xml↔html↔xhtml|(1)            |
    |             |           |      |              |(comprobación  |
    |             |           |      |              |de sintaxis,   |
    |             |           |      |              |reformateo,    |
    |             |           |      |              |filtrado, …)   |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |comprobador de |
    |tidy         |V:0.9,     |79    |xml↔html↔xhtml|la sintaxis    |
    |             |I:7.3      |      |              |HTML y         |
    |             |           |      |              |reformateador  |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |comprobador de |
    |weblint-perl |V:0.06,    |32    |lint          |estilo mínimo y|
    |             |I:0.91     |      |              |sintáctico para|
    |             |           |      |              |HTML           |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |herramientas de|
    |             |V:0.06,    |      |Comprobar el  |mantenimiento  |
    |linklint     |I:0.47     |343   |enlace        |de sitios web y|
    |             |           |      |              |comprobador de |
    |             |           |      |              |enlaces rápido |
    +---------------------------------------------------------------+


    Una vez que se genera el apropiado XML, puede utilizar la
    tecnología XSLT para extraer información basándose el contexto de
    marcas, etc.

11.3. Configuración tipográfica

    El programa Unix troff, creado por AT&T puede utilizarse para la
    composición tipográfica simple. Las páginas de man son
    generalmente creadas con él.

    TeX fue creado por Donald Knuth y es una herramienta de
    composición tipográfica muy poderoso y el estándar de facto LaTeX
    fue creado por Leslie Lamport y permite un acceso a nivel alto a
    todas la potencia de TeX.

    Tabla 11.12. Relación de las herramientas de composición
    tipográfica

    +---------------------------------------------------------------+
    |paquete|popularidad|tamaño|palabra|        descripción         |
    |       |           |      | clave |                            |
    |-------+-----------+------+-------+----------------------------|
    |       |           |      |       |El sistema de composición   |
    |texlive|V:1, I:28  |55    |(La)TeX|tipográfica TeX, para       |
    |       |           |      |       |previsualización e impresión|
    |-------+-----------+------+-------+----------------------------|
    |groff  |V:2, I:24  |16514 |troff  |sistema para dar formato al |
    |       |           |      |       |texto GNU troff             |
    +---------------------------------------------------------------+


11.3.1. composición tipográfica roff

    Tradicionalmente, roff es el sistema principal de Unix para la
    composición tipográfica. Consulte roff(7), groff(7), groff(1),
    grotty(1), troff(1), groff_mdoc(7), groff_man(7), groff_ms(7),
    groff_me(7), groff_mm(7) y «info groff».

    Puede leer o imprimir un buen tutorial y referencia en "-me"
    macro en "/usr/share/doc/groff/" instalando el paquete groff.

    Sugerencia

    Con «groff -Tascii -me -» se obtiene una salida en texto plano
    con códigos de escape ANSI. Si lo que quiere son páginas man con
    muchos «^H« y «_«, utilice en su lugar«GROFF_NO_SGR=1 groff
    -Tascii -me -».

    Sugerencia
   
    Para eliminar los «^H« y «_« del archivo de texto que groff ha
    generado, fíltrelo con «col -b -x».

11.3.2. TeX/LaTeX

    El software TeX Live contiene un sistema completo del sistema
    TeX. El metapaquete texlive aporta un selección apropiada de
    paquetes TeX Live que cumplirá decentemente la mayor parte de las
    tareas.

    Hay disponibles numerosas referencias a TeX y LaTeX.

      * Cómo teTeX: La Guía Local de Linux-teTeX

      * tex(1)

      * latex(1)

      * texdoc(1)

      * texdoctk(1)

      * «El libro de TeX«, de Donald E. Knuth, (Addison-Wesley)

      * «LaTeX - Un Sistema para Preparar un Documento«, de Leslie
        Lamport, (Addison-Wesley)

      * «El Compendio de LaTeX», de Goossens, Mittelbach, Samarin,
        (Addison-Wesley)

    Este es el entorno de composición tipográfica más potente. Muchos
    procesadores de SGML lo utilizan como motor para el procesamiento
    de texto. Lyx que está en el paquete lyx y GNU TeXmacs que se
    encuentra en el paquete texmacs ofrecen un entorno de edición
    LaTeX agradable WYSIWYG mientras que muchos utilizan Emacs y Vim
    como su preferencia como editor.

    Existen multitud de recursos disponibles en la red.

      * La Guía de TEX Live - TEX Live 2007 («/usr/share/doc/
        texlive-doc-base/english/texlive-en/live.html») (del paquete
        texlive-doc-base)
   
      * Una Guía Sencilla de Latex/Lyx

      * Procesando Texto con LaTeX

    Cuando los documentos se vuelven grandes, algunas veces TeX puede
    fallar. Debe incrementar el tamaño de los recursos compartidos en
    «/etc/texmf/texmf.cnf» (o más concretamente editar «/etc/texmf/
    texmf.d/95NonPath» y ejecutar update-texmf(8)) con el fin de
    solucionarlo.

    Nota

    La fuente TeX de "The TeXbook" está disponible en www.ctan.org
    sitio tex-archivo para texbook.tex. Este archivo contiene la
    mayoría de las macros necesarias. He oído que puedes procesar
    este documento con tex(1) después de comentar las líneas 7 a 10 y
    añadir "input manmac \proofmodefalse". Se recomienda
    encarecidamente comprar este libro (y todos los demás libros de
    Donald E. Knuth) en lugar de usar la versión en línea, ¡pero la
    fuente es un gran ejemplo de entrada TeX!

11.3.3. Impresión de una página de manual

    Puede imprimir una página manual en PostScript con una de las
    órdenes que se muestran.

    $ man -Tps some_manpage | lpr

11.3.4. Crear una página de man

    Aunque es posible escribir una página de man en formato troff
    plano, existen algunos paquetes que ayudan a crearla.

    Tabla 11.13. Relación de paquetes que ayudan a crear páginas man

    +---------------------------------------------------------------+
    |   paquete    |popularidad|tamaño|  palabra  |   descripción   |
    |              |           |      |   clave   |                 |
    |--------------+-----------+------+-----------+-----------------|
    |              |V:0.6,     |      |SGML→página|conversor de SGML|
    |docbook-to-man|I:5.7      |189   |man        |DocBook en macros|
    |              |           |      |           |man roff         |
    |--------------+-----------+------+-----------+-----------------|
    |              |           |      |           |generador de     |
    |help2man      |V:0.6,     |542   |text→página|página man       |
    |              |I:6.3      |      |man        |automático con   |
    |              |           |      |           |--help           |
    |--------------+-----------+------+-----------+-----------------|
    |              |V:0.01,    |      |info→página|conversor de GNU |
    |info2man      |I:0.19     |134   |man        |info a POD o     |
    |              |           |      |           |páginas man      |
    |--------------+-----------+------+-----------+-----------------|
    |              |           |      |           |conversor de     |
    |txt2man       |V:0.06,    |112   |text→página|texto ASCII plano|
    |              |I:0.64     |      |man        |a formato de     |
    |              |           |      |           |página man       |
    +---------------------------------------------------------------+


11.4. Información imprimible

    En el sistema Debian la información imprimible se realizan en
    formato PostScript. El Sistema de Impresión Común de Unix (CUPS)
    utiliza Ghostscript como motor de representación para impresoras
    que no reconocen PostScript.

    Los datos imprimibles también pueden expresarse en formato PDF en
    el reciente sistema Debian.

    Los archivos PDF pueden visualizarse y las entradas de sus
    formularios pueden rellenarse utilizando herramientas de
    visualización GUI como Evince y Okular (ver Sección 7.4,
    “Aplicaciones GUI”); y navegadores modernos como Chromium.

    Los archivos PDF pueden editarse con algunas herramientas
    gráficas como LibreOffice, Scribus y Inkscape (ver Sección 11.6,
    “Herramientas para información gráfica”).

    Sugerencia

    Puede leer un archivo PDF con GIMP y convertirlo a formato PNG
    utilizando una resolución superior a 300 ppp. Esto se puede
    utilizar como una imagen de fondo para LibreOffice para producir
    una impresión alterada deseable con el mínimo esfuerzo.

11.4.1. Ghostscript

    El núcleo de la manipulación es el intérprete de Ghostscript
    PostScript (PS) el cual genera imágenes de representación.

    Tabla 11.14. Relación de intérpretes Ghostscript de PostScript

    +---------------------------------------------------------------+
    |      paquete      |popularidad|tamaño|      descripción       |
    |-------------------+-----------+------+------------------------|
    |                   |V:142,     |      |El intérprete GPL       |
    |ghostscript        |I:563      |177   |Ghostscript de          |
    |                   |           |      |PostScript/PDF          |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |Intérprete Ghostscript  |
    |ghostscript-x      |V:0, I:15  |88    |de PostScript/PDF GPL - |
    |                   |           |      |soporte para entornos X |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |biblioteca de           |
    |libpoppler156      |V:9, I:16  |4989  |representación de PDF   |
    |                   |           |      |bifurcado del visor PDF |
    |                   |           |      |xpdf                    |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |biblioteca de           |
    |libpoppler-glib8t64|V:68, I:297|576   |representación PDF      |
    |                   |           |      |(biblioteca compartida  |
    |                   |           |      |basada en Glib)         |
    |-------------------+-----------+------+------------------------|
    |                   |           |      |biblioteca de           |
    |poppler-data       |V:150,     |13086 |representación CMaps    |
    |                   |I:585      |      |para PDF (con soporte   |
    |                   |           |      |CJK: Adobe-*)           |
    +---------------------------------------------------------------+


    Sugerencia
   
    «gs -h» puede mostrar la configuración de Ghostscript.

11.4.2. Mezcla de dos archivos PS o PDF

    Puede mezclar dos archivos PostScript (PS) o Formato de
    Documentos Portable (PDF, Portable Document Format ) utilizando
    la orden gs(1) de Ghostscript.

    $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=bla.ps -f foo1.ps foo2.ps
    $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf

    Nota

    El formato PDF, el cual se usa de forma habitual como un formato
    de impresión multiplatafoma, es en su esencia un formato PS
    comprimido con algunas funcionalidades y extensiones adicionales.

    Sugerencia

    Para la manipulación de documentos PostScript desde la línea de
    órdenes existen órdenes como psmerge(1) y otras que pertenecen al
    paquete psutils package. pdftk(1) del paquete pdftk se utiliza
    para la manipulación de documentos PDF.

11.4.3. Utilidades de impresión

    Los siguientes paquetes contienen utilidades para la impresión
    que considero importantes.

    Tabla 11.15. Relación de utilidades para la impresión

    +---------------------------------------------------------------+
    |   paquete   |popularidad|tamaño|palabra clave |  descripción  |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |Utilidades PDF |
    |             |           |      |              |: pdftops,     |
    |poppler-utils|V:106,     |756   |pdf→ps,texto,…|pdfinfo,       |
    |             |I:474      |      |              |pdfimages,     |
    |             |           |      |              |pdftotext,     |
    |             |           |      |              |pdffonts       |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |herramientas de|
    |psutils      |V:4, I:51  |34    |ps→ps         |conversión de  |
    |             |           |      |              |documentos     |
    |             |           |      |              |PostScript     |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |crea póster    |
    |poster       |V:0.1,     |57    |ps→ps         |grandes de     |
    |             |I:1.7      |      |              |páginas        |
    |             |           |      |              |PostScript     |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |convierte texto|
    |             |           |      |              |ASCII a        |
    |enscript     |V:1, I:11  |2138  |texto→ps,     |PostScript,    |
    |             |           |      |html, rtf     |HTML, RTF o una|
    |             |           |      |              |impresión      |
    |             |           |      |              |bonita         |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |conversor de   |
    |             |           |      |              |«cualquier     |
    |a2ps         |V:0.7,     |4109  |texto→ps      |formato a      |
    |             |I:7.1      |      |              |PostScript« e  |
    |             |           |      |              |impresión      |
    |             |           |      |              |bonita         |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |herramienta de |
    |pdftk        |V:1, I:22  |28    |pdf→pdf       |conversión de  |
    |             |           |      |              |documentos PDF:|
    |             |           |      |              |pdftk          |
    |-------------+-----------+------+--------------+---------------|
    |             |V:0.1,     |      |              |conversor de   |
    |html2ps      |I:1.7      |256   |html→ps       |HTML a         |
    |             |           |      |              |PostScript     |
    |-------------+-----------+------+--------------+---------------|
    |gnuhtml2latex|V:0.05,    |26    |html→latex    |conversor de   |
    |             |I:0.58     |      |              |html a latex   |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |conversor de   |
    |             |           |      |              |documentos     |
    |latex2rtf    |V:0.1,     |495   |latex→rtf     |LaTeX a RTF la |
    |             |I:2.1      |      |              |cual puede ser |
    |             |           |      |              |leído por MS   |
    |             |           |      |              |Word           |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |conversor de   |
    |ps2eps       |V:2, I:33  |95    |ps→eps        |PostScript a   |
    |             |           |      |              |EPS (PostScript|
    |             |           |      |              |encapsulado)   |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |conversor de   |
    |             |           |      |              |texto a        |
    |e2ps         |V:0.01,    |104   |texto→ps      |PostScript con |
    |             |I:0.11     |      |              |soporte a la   |
    |             |           |      |              |codificación   |
    |             |           |      |              |japonés        |
    |-------------+-----------+------+--------------+---------------|
    |impose+      |V:0.1,     |118   |ps→ps         |utilidades     |
    |             |I:1.5      |      |              |PostScript     |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |imprime bien   |
    |             |           |      |              |muchos códigos |
    |             |           |      |              |fuente (C, C++,|
    |trueprint    |V:0.01,    |148   |texto→ps      |Java, Pascal,  |
    |             |I:0.09     |      |              |Perl, Pike, Sh |
    |             |           |      |              |y Verilog) a   |
    |             |           |      |              |PostScript     |
    |             |           |      |              |(lenguaje C).  |
    |-------------+-----------+------+--------------+---------------|
    |             |           |      |              |conversor de   |
    |             |           |      |              |PDF al formato |
    |             |           |      |              |gráficos de    |
    |pdf2svg      |V:0.2,     |33    |pdf→svg       |vector         |
    |             |I:3.0      |      |              |escalable      |
    |             |           |      |              |(Scalable      |
    |             |           |      |              |vector         |
    |             |           |      |              |graphics)      |
    |-------------+-----------+------+--------------+---------------|
    |             |V:0.01,    |      |              |conversor de   |
    |pdftoipe     |I:0.46     |70    |pdf→ipe       |PDF a formato  |
    |             |           |      |              |XML IPE        |
    +---------------------------------------------------------------+


11.4.4. Imprimiendo con CUPS

    Tanto las órdenes de lp(1) y lpr(1) existen en Sistema de
    Impresión Común de Unix (CUPS) que proporciona opciones
    personalizadas para la impresión.

    Puede imprimir tres copias del archivo correspondiente utilizando
    las siguientes órdenes.

    $ lp -n 3 -o Collate=True filename

    $ lpr -#3 -o Collate=True filename

    Puede personalizar las impresiones mediante opciones como «-o
    number-up=2», «-o page-set=even», «-o page-set=odd», «-o scaling=
    200», «-o natural-scaling=200», etc., según consta en Impresión
    con línea de órdenes y sus opciones.

11.5. La conversión de los datos de correo

    Considero importantes los siguientes paquetes de conversión de
    datos de correo.

    Tabla 11.16. Relación de paquetes que ayudan a la conversión de
    datos de correo

    +---------------------------------------------------------------+
    | paquete |popularidad|tamaño|palabra|       descripción        |
    |         |           |      | clave |                          |
    |---------+-----------+------+-------+--------------------------|
    |sharutils|V:3, I:28  |1436  |mail   |shar(1), unshar(1),       |
    |         |           |      |       |uuencode(1), uudecode(1)  |
    |---------+-----------+------+-------+--------------------------|
    |         |V:0.9,     |      |       |codifica y decodifica los |
    |mpack    |I:8.0      |109   |MIME   |mensajes MIME: mpack(1) y |
    |         |           |      |       |munpack(1)                |
    |---------+-----------+------+-------+--------------------------|
    |         |           |      |       |desempaca los archivos    |
    |         |V:0.4,     |      |       |adjuntos MIME del tipo    |
    |tnef     |I:4.1      |103   |ms-tnef|«application/ms-tnef« que |
    |         |           |      |       |es un formato propio de   |
    |         |           |      |       |Microsoft                 |
    |---------+-----------+------+-------+--------------------------|
    |         |           |      |       |codifica y decodifica los |
    |         |V:0.2,     |      |       |siguientes formatos:      |
    |uudeview |I:1.8      |105   |mail   |uuencode, xxencode,       |
    |         |           |      |       |BASE64, quoted printable y|
    |         |           |      |       |BinHex                    |
    +---------------------------------------------------------------+


    Sugerencia

    Se puede utilizar un servidor del Protocolo de Acceso a Mensajes
    de Internet versión 4 (IMAP4) para obtener los correos de un
    sistema de correo propietario siempre que el cliente permita
    configurar el servidor de correo IMAP4.

11.5.1. Fundamentos de información de correo

    La información de correo (SMTP) deben utilizar 7 bits. Así los
    datos binarios y los de texto de 8 bits se codifican en formato
    de 7 bits con Multipurpose Internet Mail Extensions (MIME) y la
    selección del juego de caracteres (ver Tabla 11.2, “Relación de
    valores de codificación y su uso”).

    El formato de almacenamiento estándar de correo es mbox según
    RFC2822 (actualizado por el RFC822). Consulte mbox(5) (es
    proporcionado por el paquete mutt).

    En las lenguas europeas normalmente se utiliza en el correo la
    «Content-Transfer-Encoding: quoted-printable» con el juego de
    caracteres ISO-8859-1 ya que no existen muchos de los caracteres
    de 8 bits. SI el texto europeo esta codificado en UTF-8,
    «Content-Transfer-Encoding: quoted-printable» se usa como la
    mayor parte de la información en 7 bits.

    En japonés el tradicional «Content-Type: text/plain; charset=
    ISO-2022-JP» es normalmente utilizado en el correo ya que
    mantiene el texto en 7 bits. Pero los antiguos sistemas Microsoft
    puede enviar información en Shift-JIS sin la declaración
    correspondiente. Si el texto japonés esta codificado en UTF-8
    Base64 es como utilizar información de 8 bits. Lo que ocurre en
    otros lenguajes asiáticos es parecido.

    Nota

    Si su información de correo no Unix se accede desde un cliente
    que no es de Debian, con soporte de IMAP4, puede moverlo
    desplegando su propio servidor IMAP4.

    Nota

    Si utiliza otros formatos de almacenamiento de correo, moverlos
    al formato mbox es un buen comienzo. Un cliente versátil como
    mutt(1) puede ser útil para ello.

    Puede partir el contenido del buzón de correo en mensajes
    utilizando procmail(1) y formail(1).

    Cada mensaje de correo se puede desempaquetar utilizando munpack
    (1) del paquete mpack (u otra herramienta especializada) para
    obtener el contenido codificado con MIME.

11.6. Herramientas para información gráfica

    Aunque existen programas GUI muy potentes como gimp(1), las
    herramientas en línea de órdenes como imagemagick(1) son muy
    útiles para automatizar la manipulación de imágenes por medio de
    archivos de órdenes.

    El formato de facto de los archivos de imágenes en cámaras
    digitales es Formato de Archivo de Imagen Intercambiable (EXIF,
    Exchangeable Image File Format) que se corresponde con el formato
    de archivo de imágenes JPEGcon etiquetas de metainformación
    adicionales. Puede contener información como la fecha, la hora y
    la configuración de la cámara.

    La patente de compresión de datos sin pérdida Lempel-Ziv-Welch
    (LZW) ha expirado. Las utilidades del Formato de Intercambio de
    Gráficos (GIF, Graphics Interchange Format), que utiliza el
    método de compresión LZW, están ahora disponibles libremente en
    el sistema Debian.

    Sugerencia

    Cualquier cámara digital o escáner con un medio de grabación
    extraible interactua con Linux a través de lectores de
    almacenamiento USB ya que cumple con el las reglas del Sistema de
    archivos para Cámaras y utiliza el sistema de archivos FAT.
    Consulte Sección 10.1.7, “Dispositivos de almacenamiento
    extraíbles”.

11.6.1. Herramientas gráficas de datos (meta paquete)

    Los siguientes meta paquetes son buenos puntos de partida para
    buscar herramientas de datos gráficos utilizando aptitude(8).
    "Resumen de paquetes para los mantenedores de Debian PhotoTools"
    puede ser otro punto de partida.

    Tabla 11.17. Lista de herramientas de datos gráficos (meta
    paquete)

    +---------------------------------------------------------------+
    |        paquete         |popularidad|tamaño|palabra|descripción|
    |                        |           |      | clave |           |
    |------------------------+-----------+------+-------+-----------|
    |                        |           |      |       |meta       |
    |                        |           |      |       |paquete    |
    |                        |           |      |svg,   |para la    |
    |education-graphics      |I:0.35     |25    |jpeg, …|enseñanza  |
    |                        |           |      |       |de gráficos|
    |                        |           |      |       |y arte     |
    |                        |           |      |       |pictórico. |
    |------------------------+-----------+------+-------+-----------|
    |                        |           |      |       |metapaquete|
    |                        |           |      |       |para el    |
    |open-font-design-toolkit|I:0.04     |9     |ttf,   |diseño de  |
    |                        |           |      |ps, …  |tipos de   |
    |                        |           |      |       |letra      |
    |                        |           |      |       |abiertos   |
    +---------------------------------------------------------------+


    Sugerencia

    Busque más herramientas de imágenes utilizando aptitude(8) con la
    expresión regular «~Gworks-with::image» (consulte Sección 2.2.6,
    “Opciones del método de búsqueda con aptitude”).

11.6.2. Herramientas de datos gráficos (GUI)

    Me llamaron la atención los siguientes paquetes para las
    herramientas de organización, edición y conversión de datos
    gráficos GUI.

    Tabla 11.18. Lista de herramientas de datos gráficos (GUI)

    +---------------------------------------------------------------+
    |    paquete     |popularidad|tamaño|  palabra   | descripción  |
    |                |           |      |   clave    |              |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |GNU GIMP      |
    |gimp            |V:44, I:216|32791 |imagen      |Programa de   |
    |                |           |      |(bitmap)    |Manipulación  |
    |                |           |      |            |de Imágenes   |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |Interfaz      |
    |                |           |      |            |GTKbasado en  |
    |                |           |      |imagen      |X11 para SANE |
    |xsane           |V:9, I:129 |1512  |(bitmap)    |(Acceso       |
    |                |           |      |            |inmediato y   |
    |                |           |      |            |fácil a       |
    |                |           |      |            |escáner)      |
    |----------------+-----------+------+------------+--------------|
    |scribus         |V:1, I:13  |32423 |ps/pdf/SVG/…|Scribus editor|
    |                |           |      |            |de documentos |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |imagen      |LibreOffice   |
    |libreoffice-draw|V:82, I:418|10995 |(vector)    |office suite -|
    |                |           |      |            |dibujo        |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |editor SVG    |
    |inkscape        |V:12, I:78 |112538|imagen      |(Scalable     |
    |                |           |      |(vector)    |Vector        |
    |                |           |      |            |Graphics)     |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |imagen      |editor de     |
    |dia             |V:1, I:17  |3802  |(vector)    |diagramas     |
    |                |           |      |            |(Gtk)         |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |facilidad para|
    |xfig            |V:0.6,     |7951  |imagen      |la creación   |
    |                |I:8.9      |      |(vector)    |interactiva de|
    |                |           |      |            |figuras en X11|
    |----------------+-----------+------+------------+--------------|
    |gocr            |V:0.5,     |549   |imagen→texto|software libre|
    |                |I:3.9      |      |            |OCR           |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |programa visor|
    |eog             |V:26, I:143|10524 |imagen(Exif)|de gráficos   |
    |                |           |      |            |«Eye of GNOME«|
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |visor y       |
    |gthumb          |V:3, I:12  |5162  |imagen(Exif)|navegador de  |
    |                |           |      |            |imágenes      |
    |                |           |      |            |(GNOME)       |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |visor de      |
    |geeqie          |V:3, I:11  |2903  |imagen(Exif)|imágenes      |
    |                |           |      |            |utilizando GTK|
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |organizador de|
    |shotwell        |V:14, I:246|6334  |imagen(Exif)|fotos digital |
    |                |           |      |            |(GNOME)       |
    |----------------+-----------+------+------------+--------------|
    |gwenview        |V:40, I:115|6000  |imagen(Exif)|visor de      |
    |                |           |      |            |imágenes (KDE)|
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |aplicaciones  |
    |                |           |      |            |KDE para      |
    |kamera          |I:114      |992   |imagen(Exif)|soporte de    |
    |                |           |      |            |cámaras       |
    |                |           |      |            |digitales     |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |aplicación    |
    |                |           |      |            |para la       |
    |digikam         |V:1.5,     |324   |imagen(Exif)|gestión de    |
    |                |I:8.3      |      |            |fotos         |
    |                |           |      |            |digitales para|
    |                |           |      |            |KDE           |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |mesa de luz y |
    |darktable       |V:4, I:11  |35876 |imagen(Exif)|cuarto oscuro |
    |                |           |      |            |virtuales para|
    |                |           |      |            |fotógrafos    |
    |----------------+-----------+------+------------+--------------|
    |                |V:0.5,     |      |            |agrupador de  |
    |hugin           |I:5.6      |6476  |imagen(Exif)|fotografías   |
    |                |           |      |            |panorámicas   |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |Editor de     |
    |librecad        |V:1, I:14  |9164  |DXF, ...    |datos CAD en  |
    |                |           |      |            |2D            |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |Editor de     |
    |freecad         |V:1, I:21  |112   |DXF, ...    |datos CAD en  |
    |                |           |      |            |3D            |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |blend, TIFF,|editor de     |
    |blender         |V:2, I:20  |92911 |VRML, …     |animaciones 3D|
    |                |           |      |            |etc           |
    |----------------+-----------+------+------------+--------------|
    |mm3d            |V:0.02,    |4123  |ms3d, obj,  |editor OpenGL |
    |                |I:0.21     |      |dxf, …      |de modelado 3D|
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |editor de     |
    |fontforge       |V:0.6,     |4054  |ttf, ps, …  |tipos de letra|
    |                |I:5.6      |      |            |PS, TrueType y|
    |                |           |      |            |OpenType      |
    |----------------+-----------+------+------------+--------------|
    |                |           |      |            |programas para|
    |                |           |      |            |la ajuste e   |
    |                |V:0.01,    |      |            |interpolación |
    |xgridfit        |I:0.08     |878   |ttf         |(gridfitting y|
    |                |           |      |            |hinting) de   |
    |                |           |      |            |tipos de letra|
    |                |           |      |            |TrueType      |
    +---------------------------------------------------------------+


11.6.3. Herramientas de datos gráficos (CLI)

    Me llamaron la atención los siguientes paquetes para las
    herramientas de conversión, edición y organización de datos
    gráficos CLI.

    Tabla 11.19. Lista de herramientas de datos gráficos (CLI)

    +------------------------------------------------------------------+
    |     paquete     |popularidad|tamaño|palabra clave|  descripción  |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |imagen       |programa de    |
    |imagemagick      |V:9, I:278 |79    |(bitmap)     |manipulación de|
    |                 |           |      |             |imágenes       |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |programas de   |
    |                 |V:1.0,     |      |imagen       |manipulación de|
    |graphicsmagick   |I:8.6      |5816  |(bitmap)     |imágenes       |
    |                 |           |      |             |(bifurcaciones |
    |                 |           |      |             |de imagemagick)|
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |imagen       |herramienta de |
    |netpbm           |V:27, I:288|8435  |(bitmap)     |conversión de  |
    |                 |           |      |             |gráficos       |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |convertir      |
    |                 |           |      |             |Formato de     |
    |                 |           |      |             |archivo de     |
    |                 |           |      |             |imagen de alta |
    |libheif-examples |V:0.3,     |438   |heif→jpeg    |eficiencia     |
    |                 |I:3.5      |      |(bitmap)     |(HEIF) a       |
    |                 |           |      |             |formatos JPEG, |
    |                 |           |      |             |PNG o Y4M con  |
    |                 |           |      |             |el comando     |
    |                 |           |      |             |heif-convert(1)|
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |convierte      |
    |                 |           |      |             |iconos y       |
    |                 |           |      |png↔ico      |cursores MS    |
    |icoutils         |V:3, I:34  |221   |(bitmap)     |Windows a y    |
    |                 |           |      |             |desde formatos |
    |                 |           |      |             |PNG            |
    |                 |           |      |             |(favicon.ico)  |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |conversor de   |
    |pstoedit         |V:2, I:39  |1075  |ps/pdf→image |archivos       |
    |                 |           |      |(vector)     |PostScript y   |
    |                 |           |      |             |PDF a SVG      |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |herramientas de|
    |                 |           |      |             |conversión de  |
    |                 |           |      |             |archivos con   |
    |                 |           |      |Windows/     |formato        |
    |libwmf-bin       |V:5, I:83  |149   |imágen       |metafile de    |
    |                 |           |      |(vector)     |Windows        |
    |                 |           |      |             |(formato de    |
    |                 |           |      |             |gráficos       |
    |                 |           |      |             |vectoriales)   |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |convierte      |
    |fig2sxd          |V:0.03,    |158   |fig→sxd      |archivos XFig a|
    |                 |I:0.18     |      |(vector)     |formato Draw de|
    |                 |           |      |             |OpenOffice.org |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |herramienta    |
    |                 |           |      |             |para el        |
    |                 |           |      |             |procesado      |
    |unpaper          |V:2, I:16  |417   |imagen→imagen|posterior de   |
    |                 |           |      |             |páginas        |
    |                 |           |      |             |escaneadas para|
    |                 |           |      |             |OCR            |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |software libre |
    |tesseract-ocr    |V:8, I:33  |2209  |imagen→texto |OCR basado en  |
    |                 |           |      |             |el motor OCR   |
    |                 |           |      |             |comercial de HP|
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |motor de       |
    |                 |           |      |             |información    |
    |                 |           |      |             |OCR: archivo en|
    |tesseract-ocr-eng|V:8, I:33  |4032  |imagen→texto |inglés         |
    |                 |           |      |             |tesseact-ocr   |
    |                 |           |      |             |para textos    |
    |                 |           |      |             |ingleses       |
    |-----------------+-----------+------+-------------+---------------|
    |ocrad            |V:0.3,     |608   |imagen→texto |software libre |
    |                 |I:2.4      |      |             |OCR            |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |utilidad de    |
    |                 |           |      |             |línea de       |
    |                 |           |      |             |órdenes para   |
    |exif             |V:3, I:51  |335   |imagen(Exif) |mostrar        |
    |                 |           |      |             |información    |
    |                 |           |      |             |EXIF de        |
    |                 |           |      |             |archivos JPEG  |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |herramienta de |
    |exiv2            |V:2, I:19  |429   |imagen(Exif) |manipulación de|
    |                 |           |      |             |metainformación|
    |                 |           |      |             |EXIF/IPTC      |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |transforma     |
    |exiftran         |V:1, I:11  |81    |imagen(Exif) |imágenes de    |
    |                 |           |      |             |cámaras        |
    |                 |           |      |             |digitales jpeg |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |utilidad para  |
    |                 |           |      |             |leer etiquetas |
    |exiftags         |V:0.3,     |309   |imagen(Exif) |Exif de        |
    |                 |I:2.7      |      |             |archivos JPEG  |
    |                 |           |      |             |de cámaras     |
    |                 |           |      |             |digitales      |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |lee            |
    |exifprobe        |V:0.2,     |506   |imagen(Exif) |metainformación|
    |                 |I:2.1      |      |             |de imágenes    |
    |                 |           |      |             |digitales      |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |decodifica     |
    |                 |V:0.8,     |      |imagen       |imágenes en    |
    |dcraw            |I:7.3      |428   |(crudo)→ppm  |crudo de       |
    |                 |           |      |             |cámaras        |
    |                 |           |      |             |digitales      |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |busca imágenes |
    |findimagedupes   |V:0.1,     |75    |imagen→huella|duplicadas o   |
    |                 |I:1.1      |      |             |parecidas      |
    |                 |           |      |             |visualmente    |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |fusiona        |
    |                 |V:0.02,    |      |             |imágenes para  |
    |ale              |I:0.16     |850   |imagen→imagen|aumentar su    |
    |                 |           |      |             |integridad o   |
    |                 |           |      |             |crea mosaicos  |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |genera galerías|
    |                 |V:0.2,     |      |imagen(Exif) |HTML estáticos |
    |imageindex       |I:1.2      |143   |→html        |partiendo un   |
    |                 |           |      |             |grupo de       |
    |                 |           |      |             |imágenes       |
    |-----------------+-----------+------+-------------+---------------|
    |                 |V:0.11,    |      |             |herramienta    |
    |outguess         |I:0.99     |230   |jpeg,png     |universal      |
    |                 |           |      |             |esteanográfica |
    |-----------------+-----------+------+-------------+---------------|
    |jpegoptim        |V:0.6,     |59    |jpeg         |optimizar los  |
    |                 |I:6.0      |      |             |archivos JPEG  |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |optimizar      |
    |optipng          |V:2, I:40  |187   |png          |archivos PNG,  |
    |                 |           |      |             |compresión sin |
    |                 |           |      |             |pérdidas       |
    |-----------------+-----------+------+-------------+---------------|
    |                 |           |      |             |optimizar los  |
    |pngquant         |V:1, I:10  |62    |png          |archivos PNG,  |
    |                 |           |      |             |compresión con |
    |                 |           |      |             |pérdida        |
    +------------------------------------------------------------------+


11.7. Conversiones de información variadas

    Existen otros programas para la conversión entre datos. Los
    siguientes paquetes llamaron mi atención al usar aptitude(8) con
    la expresión regular «~Guse::converting» (consulte Sección 2.2.6,
    “Opciones del método de búsqueda con aptitude”).

    Tabla 11.20. Relación de herramientas varias para la conversión
    de información

    +---------------------------------------------------------------+
    | paquete |popularidad|tamaño| palabra clave |   descripción    |
    |---------+-----------+------+---------------+------------------|
    |         |           |      |               |conversor entre   |
    |alien    |V:1, I:13  |150   |rpm/tgz→deb    |paquetes externos |
    |         |           |      |               |en paquetes Debian|
    |---------+-----------+------+---------------+------------------|
    |         |           |      |               |conversor de      |
    |         |           |      |               |«Libro            |
    |         |           |      |               |Electrónico«      |
    |freepwing|V:0.00,    |447   |EB→EPWING      |(común en Japón) a|
    |         |I:0.02     |      |               |uno único con     |
    |         |           |      |               |formato JIS X 4081|
    |         |           |      |               |(un subconjunto de|
    |         |           |      |               |EPWING V1)        |
    |---------+-----------+------+---------------+------------------|
    |         |           |      |               |gestión de        |
    |         |           |      |               |bibliotecas y     |
    |calibre  |V:7, I:24  |65193 |cualquiera→EPUB|conversor de      |
    |         |           |      |               |libros            |
    |         |           |      |               |electrónicos      |
    +---------------------------------------------------------------+


    Puede extraer la información de formato RPM como se muestra.

    $ rpm2cpio file.src.rpm | cpio --extract

Capítulo 12. Programación

    Algunos consejos para quién quiera aprender a programar en el
    sistema Debian para trazar el código fuente. Aquí están los
    paquetes más importantes y los paquetes de documentación más
    importantes para la programación.

    Las referencia en línea está disponible escribiendo «man nombre»
    tras instalar los paquetes manpages y manpages-dev. La referencia
    en línea para las herramientas GNU están disponibles escribiendo
    «info nombre_de_programa» después de instalar los paquetes
    correspondientes de documentación. Pude necesitar incluir los
    repositorios contrib y non-free además del repositorio main ya
    que una parte de la documentación GFDL no se considera que cumple
    con DFSG.

    Por favor, considera la posibilidad de utilizar las herramientas
    del sistema de control de versiones. Ver Sección 10.5, “Git”.

    Aviso
   
    No use«test» como nombre de un archivo ejecutable. «test» es una
    orden interna del intérprete de órdenes.

    Atención

    Puede instalar programas de software directametne compilado de la
    fuente en «/usr/local» o «/opt» para evitar la colisión con los
    programas del sistema.

    Sugerencia

    Los ejemplos de código para crear «La canción de 99 botellas de
    Cerveza« le aportará buenas ideas para prácticamente cualquier
    lenguaje de programación.

12.1. Los archivos de órdenes

    Un archivo de órdenes es un archivo de texto con el bit de
    ejecución activado y contiene órdenes con el formato siguiente.

    #!/bin/sh
     ... command lines

    La primera línea determina cuál es el intérprete de órdenes que
    se encarga de leer y ejecutar el contenido del archivo.

    La lectura de archivos de órdenes es la mejor manera de entender
    como funciona un sistema tipo Unix. Aquí, doy algunos apuntes
    para la programación de archivos de órdenes. Consulte «Errores
    con el intérprete de órdenes« (https://www.greenend.org.uk/rjk/
    2001/04/shell.html) para aprender los errores más comunes.

    A diferencia del uso interactivo del intérprete de órdenes
    (consulte Sección 1.5, “Órdenes simples para el intérprete de
    órdenes” y Sección 1.6, “Operaciones de texto al estilo de Unix”)
    en los archivos de órdenes se usan generalmente parámetros,
    condiciones y bucles.

12.1.1. Compatibilidad del intérprete de órdenes POSIX

    Muchos scripts en el sistema se pueden ejecutar por cualquier
    shell POSIX (ver Tabla 1.13, “Relación de intérpretes de órdenes”
    ).

      * El shell POSIX no interactivo por defecto "/usr/bin/sh" es un
        enlace simbólico que apunta a /usr/bin/dash y lo utiliza
        muchos programas del sistema.

      * El shell POSIX interactivo predeterminado es /usr/bin/bash.

    Evite escribir archivos de órdenes con particularidades de bash o
    zs para hacerlo portable entre intérpretes de órdenes POSIX.
    Puede comprobarlo utilizando checkbashisms(1).

    Tabla 12.1. Relación de particularidades de bash

    +---------------------------------------------------------------+
    |          Bien: POSIX          |         Mal: bashism          |
    |-------------------------------+-------------------------------|
    |if [ "$foo" = "$bar" ] ; then …|if [ "$foo" == "$bar" ] ; then |
    |                               |…                              |
    |-------------------------------+-------------------------------|
    |diff -u file.c.orig file.c     |diff -u file.c{.orig,}         |
    |-------------------------------+-------------------------------|
    |mkdir /foobar /foobaz          |mkdir /foo{bar,baz}            |
    |-------------------------------+-------------------------------|
    |funcname() { … }               |function funcname() { … }      |
    |-------------------------------+-------------------------------|
    |formato octal: «\377»          |formato hexadecimal: «\xff»    |
    +---------------------------------------------------------------+


    La orden «echo» debe utilizarse con cuidado ya que su
    implementación cambia entre la orden interna y la externa.

      * Evite utilizar cualquier opción excepto -n».
   
      * Evite utilizar secuencias de escape en una cadena ya que su
        tratamiento varia.

    Nota
   
    Ya que la opción «-n» no pertenece realmente a la sintaxis POSIXm
    se acepta normalmente.

    Sugerencia

    Utilice la orden «printf» en vez de la orden «echo» si necesita
    incluir secuencias de caracteres en las cadenas de caracteres de
    salida.

12.1.2. Parámetros del intérprete de órdenes

    Frecuentemente son utilizados por el intérprete de órdenes
    parámetros especiales

    Tabla 12.2. Relación de los parámetros de intérprete de órdenes

    +---------------------------------------------------------------+
    |    parámetro del    |                  valor                  |
    |intérprete de órdenes|                                         |
    |---------------------+-----------------------------------------|
    |$0                   |nombre del archivo de órdenes            |
    |---------------------+-----------------------------------------|
    |$1                   |primer parámetro del archivo de órdenes  |
    |---------------------+-----------------------------------------|
    |$9                   |noveno parámetro del archivo de órdenes  |
    |---------------------+-----------------------------------------|
    |$#                   |parámetro posicionado en el número       |
    |---------------------+-----------------------------------------|
    |"$*"                 |"$1 $2 $3 $4 … "                         |
    |---------------------+-----------------------------------------|
    |"$@"                 |"$1" "$2" "$3" "$4" …                    |
    |---------------------+-----------------------------------------|
    |$?                   |estado de finalización de la orden más   |
    |                     |reciente                                 |
    |---------------------+-----------------------------------------|
    |$$                   |PID de este archivo de órdenes           |
    |---------------------+-----------------------------------------|
    |$!                   |PID del trabajo en segundo plano que se  |
    |                     |ha iniciado más recientemente            |
    +---------------------------------------------------------------+


    Lasexpansiones de parámetros fundamentales que debe recordar son
    las que se muestran.

    Tabla 12.3. Relación de expansiones de parámetros del intérprete
    de órdenes

    +---------------------------------------------------------------+
    |forma de expresión | valor si var  |   valor si var no está    |
    |   del parámetro   | esta activado |         asignado          |
    |-------------------+---------------+---------------------------|
    |${var:-string}     |«$var»         |«string»                   |
    |-------------------+---------------+---------------------------|
    |${var:+string}     |«string»       |«null»                     |
    |-------------------+---------------+---------------------------|
    |${var:=string}     |«$var»         |«string» (y ejecuta «var=  |
    |                   |               |string»)                   |
    |-------------------+---------------+---------------------------|
    |${var:?string}     |«$var»         |echo «string» a stderr (y  |
    |                   |               |finalizar con error)       |
    +---------------------------------------------------------------+


    Aquí, el símbolo «:» en todos estos operadores es realmente
    opcional.

      * con «:» el operador = comprueba que existe y no es null
   
      * sin «:» el operador = comprueba únicamente si existe

    Tabla 12.4. Relación de las sustituciones clave de parámetros del
    intérprete de órdenes

    +---------------------------------------------------------------+
    |formulario de sustitución del |           resultado            |
    |          parámetro           |                                |
    |------------------------------+--------------------------------|
    |${var%suffix}                 |elimina patrón del sufijo más   |
    |                              |pequeño                         |
    |------------------------------+--------------------------------|
    |${var%%suffix}                |elimina el patrón del sufijo más|
    |                              |largo                           |
    |------------------------------+--------------------------------|
    |${var#prefix}                 |elimina el patrón del prefijo   |
    |                              |más pequeño                     |
    |------------------------------+--------------------------------|
    |${var##prefix}                |elimina el patrón del prefijo   |
    |                              |más largo                       |
    +---------------------------------------------------------------+


12.1.3. Condiciones del intérprete de órdenes

    Cada comando devuelve un estado de salida que puede usarse para
    expresiones condicionales.

      * Éxito: 0 («Verdadero«)
   
      * Error: no 0 («Falso«)

    Nota

    En el contexto del intérprete de órdenes «0« es equivalente a
    «verdadero«, mientras que en contexto de una condición en C «0«
    significa «falso«.

    Nota
   
    «[» es el equivalente a la orden test, la cual determina la
    expresión condicional de sus parámetros hasta«]».

    Algunas expresiones condicionales que es importante recordar son
    las que se muestran.

      * «orden && si_éxito_ejecuta_esta_orden_además || true»

      * «orden || si_no_tiene_éxito_ejecuta_esta_orden_además ||
        true»

      * Un pequeño archivo de órdenes de varias líneas como se
        muestra

    if [ conditional_expression ]; then
     if_success_run_this_command
    else
     if_not_success_run_this_command
    fi

    Aquí se añade «|| true» para asegurarnos de que el archivo de
    órdenes no finaliza en esta línea si el intérprete de órdenes se
    llama con la bandera «-e».

    Tabla 12.5. Relación de operadores para comparar archivos en la
    expresión condicional

    +---------------------------------------------------------------+
    | ecuación |     condición que devuelve un verdadero lógico     |
    |----------+----------------------------------------------------|
    |-e file   |archivo existe                                      |
    |----------+----------------------------------------------------|
    |-d file   |archivo existe y es un directorio                   |
    |----------+----------------------------------------------------|
    |-f file   |archivo existe y es un archivo normal               |
    |----------+----------------------------------------------------|
    |-w file   |archivo existe y se puede modificar                 |
    |----------+----------------------------------------------------|
    |-x file   |archivo existe y es ejecutable                      |
    |----------+----------------------------------------------------|
    |file1 -nt |archivo es más nuevo quearchivo2 (respecto de la    |
    |file2     |modificación)                                       |
    |----------+----------------------------------------------------|
    |file1 -ot |archivo1 es más viejo que archivo2 (modificación)   |
    |file2     |                                                    |
    |----------+----------------------------------------------------|
    |file1 -ef |archivo1 y archivo2 están en el mismo dispositivo y |
    |file2     |tienen el mismo número de inodo                     |
    +---------------------------------------------------------------+


    Tabla 12.6. Relación de operadores de comparación de cadenas en
    expresiones condicionales

    +---------------------------------------------------------------+
    | ecuación |     condición que devuelve un verdadero lógico     |
    |----------+----------------------------------------------------|
    |-z str    |la longitud de str es cero                          |
    |----------+----------------------------------------------------|
    |-n str    |la longitud de str no es cero                       |
    |----------+----------------------------------------------------|
    |str1 =    |str1 y str2 son iguales                             |
    |str2      |                                                    |
    |----------+----------------------------------------------------|
    |str1 !=   |str1 y str2 no son iguales                          |
    |str2      |                                                    |
    |----------+----------------------------------------------------|
    |str1 <    |str1 está antes que str2 (depende de la             |
    |str2      |configuración regional)                             |
    |----------+----------------------------------------------------|
    |str1 >    |str1 está después de la str2 (depende de la         |
    |str2      |configuración local)                                |
    +---------------------------------------------------------------+


    Los operadores aritméticos de comparación de enteros en la
    expresión original son «-eq», «-ne», «-lt», «-le», «-gt» y «-ge».

12.1.4. Bucles del intérprete de órdenes

    Existen diferentes bucles en el intérprete de órdenes POSIX.

      * «for x in foo1 foo2 … ; do comand0 ; done» asigna
        secuencialmente elementos de la relación «foo1 foo2 …» a la
        variable «x» y ejecuta «comando».

      * «while condition ; do command ; done» repite «command»
        mientras «condition» sea verdadero.
   
      * «until condition ; do command ; done» repite «command»
        mientras «condition» no sea verdadero.

      * «break» permite salir del bucle.

      * «continue» permite continuar con la próxima iteración del
        bucle.

    Sugerencia

    La iteración sobre números como la del lenguaje C puede
    realizarse con la utilización de seq(1) como un generador de
    «foo1 foo2 …».

    Sugerencia
   
    Ver Sección 9.4.9, “Repetición de una orden sobre archivos”.

12.1.5. Variables del entorno de shell

    Algunas variables del entorno populares para el símbolo del
    sistema del shell normal pueden no estar disponibles en el
    entorno de ejecución de su script.

      * Para "$USER", usar "$(id -un)"

      * Para "$UID", usa "$(id -u)"
   
      * Para "$HOME", utiliza "$(getent passwd "$(id -u)"|cut -d ":"
        -f 6)" (esto también funciona en Sección 4.5.2, “La actual
        gestión centralizada de sistemas”)

12.1.6. La secuencia de procesamiento de la línea de órdenes

    El shell procesa un script aproximadamente como la siguiente
    secuencia.

      * el intérprete de órdenes lee la línea

      * El intérprete de órdenes agrupa como un único elemento la
        parte de la línea incluida entre «…« o '…'.

      * el intérprete de órdenes divide el resto de la línea en 
        elementos como se muestra.

          + Espacios en blanco: space tab newline

          + Metacaracteres: < > | ; & ( )

      * El intérprete de órdenes comprueba si cada elemento es una 
        palabra reservada para adaptar su comportamiento si no esta
        incluida entre «…« o '…'.

          + palabras reservadas: si entonces elif else fi para in
            while a menos que se haga caso esac

      * el intérprete de órdenes expande los alias si no están
        incluidos entre «…« o '…'

      * El intérprete de órdenes expande las tilde si no están
        incluidas entre «…« o '…'.

          + «~» → el directorio home del usuario actual

          + «~user» → el directorio home de usuario

      * el intérprete de órdenes expande los parámetros a sus valores
        si no están incluidos entre '…'

          + parámetro: «$PARAMETER» o «${PARAMETER}»

      * el intérprete de órdenes expande la sustitución de órdenes si
        no está incluida entre '…'

          + «$( comando )» → la salida de «comando»

          + «` command `» → la salida de «command»

      * el intérprete de órdenes expande las rutas de nombres que
        encajan con nombres de archivos si no están incluidas entre
        «…« o '…'

          + * → cualquier carácter

          + ? → un carácter

          + […] → cualquiera de los caracteres en «…»

      * el intérprete de órdenes busca las órdenes como se muestra y
        los ejecuta

          + definición de lafunción

          + orden interna

          + archivo ejecutable en «$PATH»

      * el intérprete de órdenes va a la siguiente línea y repite
        este proceso de nuevo desde el inicio de la secuencia

    Las comillas simples no tienen efecto dentro de comillas dobles.

    Si ejecuta «set -x» en el intérprete de órdenes o lo llama con la
    opción «-x» hace que se impriman todas las órdenes ejecutadas.
    Esto puede ser muy útil para la depuración.

12.1.7. Programas útiles para los archivos de órdenes

    Para hacer los archivos de órdenes tan portables como sea posible
    entre sistemas Debian, es una buena idea limitar las utilidades a
    aquellos que son proporcionados por los paquetes esenciales.

      * «aptitude search ~E» relación de paquetes esenciales.
   
      * «dpkg -L package_name | grep '/man/man.*/'» relación de
        páginas del manual de órdenes del paquete package_name.

    Tabla 12.7. Relación de paquetes que contienen pequeñas
    utilidades para los archivos de órdenes

    +---------------------------------------------------------------+
    |   paquete   |popularidad|tamaño|         descripción          |
    |-------------+-----------+------+------------------------------|
    |dash         |V:928,     |207   |Shell compatible con POSIX    |
    |             |I:998      |      |pequeño y rápido para sh      |
    |-------------+-----------+------+------------------------------|
    |coreutils    |V:911,     |17994 |Utilidades fundamentales GNU  |
    |             |I:1000     |      |                              |
    |-------------+-----------+------+------------------------------|
    |grep         |V:783,     |1297  |GNU grep, egrep y fgrep       |
    |             |I:1000     |      |                              |
    |-------------+-----------+------+------------------------------|
    |sed          |V:753,     |987   |GNU sed                       |
    |             |I:1000     |      |                              |
    |-------------+-----------+------+------------------------------|
    |mawk         |V:484,     |295   |pequeño y rápido awk          |
    |             |I:998      |      |                              |
    |-------------+-----------+------+------------------------------|
    |debianutils  |V:935,     |225   |utilidades varias específicas |
    |             |I:996      |      |de Debian                     |
    |-------------+-----------+------+------------------------------|
    |bsdutils     |V:443,     |334   |utilidades básicas de BSD-Lite|
    |             |I:999      |      |4.4                           |
    |-------------+-----------+------+------------------------------|
    |bsdextrautils|V:753,     |378   |Herramientas adicionales de   |
    |             |I:859      |      |4.4BSD-Lite                   |
    |-------------+-----------+------+------------------------------|
    |moreutils    |V:17, I:39 |232   |utilidades adicionales de Unix|
    +---------------------------------------------------------------+


    Sugerencia

    Aunque moreutils puede no existir fuera de Debian, proporciona
    algunos pequeños programas interesantes. El más notable es sponge
    (8), que es muy útil cuando desea sobrescribir el archivo
    original.

    Ver un ejemplo en Sección 1.6, “Operaciones de texto al estilo de
    Unix”.

12.2. Programación en lenguajes interpretados

    Tabla 12.8. Lista de paquetes relacionados con el intérprete

    +---------------------------------------------------------------+
    |         paquete         |popularidad|tamaño|  documentación   |
    |-------------------------+-----------+------+------------------|
    |                         |           |      |sh: shell pequeño |
    |dash                     |V:928,     |207   |y rápido          |
    |                         |I:998      |      |compatible con    |
    |                         |           |      |POSIX para sh     |
    |-------------------------+-----------+------+------------------|
    |                         |           |      |sh: "info bash"   |
    |bash                     |V:888,     |7276  |proporcionado por |
    |                         |I:999      |      |el paquete        |
    |                         |           |      |bash-doc          |
    |-------------------------+-----------+------+------------------|
    |mawk                     |V:484,     |295   |AWK: pequeño y    |
    |                         |I:998      |      |rápido awk        |
    |-------------------------+-----------+------+------------------|
    |                         |V:252,     |      |AWK: "info gawk"  |
    |gawk                     |I:303      |3289  |proporcionado por |
    |                         |           |      |gawk-doc          |
    |-------------------------+-----------+------+------------------|
    |                         |           |      |Perl: perl(1) y   |
    |                         |V:668,     |      |páginas html      |
    |perl                     |I:992      |838   |proporcionadas por|
    |                         |           |      |perl-doc y        |
    |                         |           |      |perl-doc-html     |
    |-------------------------+-----------+------+------------------|
    |                         |           |      |Extensión de Perl |
    |                         |           |      |para la biblioteca|
    |libterm-readline-gnu-perl|V:2, I:28  |439   |GNU ReadLine/     |
    |                         |           |      |History Library:  |
    |                         |           |      |perlsh(1)         |
    |-------------------------+-----------+------+------------------|
    |libreply-perl            |V:0.00,    |171   |REPL para Perl:   |
    |                         |I:0.09     |      |reply(1)          |
    |-------------------------+-----------+------+------------------|
    |libdevel-repl-perl       |V:0.03,    |237   |REPL para Perl:   |
    |                         |I:0.54     |      |re.pl(1)          |
    |-------------------------+-----------+------+------------------|
    |                         |           |      |Python: python3(1)|
    |python3                  |V:721,     |81    |y páginas html    |
    |                         |I:973      |      |proporcionadas por|
    |                         |           |      |python3-doc       |
    |-------------------------+-----------+------+------------------|
    |                         |           |      |Tcl: tcl(3)       |
    |                         |           |      |páginas de manual |
    |tcl                      |V:23, I:178|20    |detalladas        |
    |                         |           |      |proporcionadas por|
    |                         |           |      |tcl-doc           |
    |-------------------------+-----------+------+------------------|
    |                         |           |      |Tk: tk(3) y       |
    |                         |           |      |páginas detalladas|
    |tk                       |V:18, I:172|20    |del manual        |
    |                         |           |      |proporcionadas por|
    |                         |           |      |tk-doc            |
    |-------------------------+-----------+------+------------------|
    |                         |           |      |Ruby: ruby(1), erb|
    |ruby                     |V:71, I:160|32    |(1), irb(1), rdoc |
    |                         |           |      |(1), ri(1)        |
    +---------------------------------------------------------------+


    Cuando deseas automatizar una tarea en Debian, deberías
    programarla primero con un lenguaje interpretado. La línea guía
    para la elección del lenguaje interpretado es:

      * Utilizadash, si la tarea es sencilla y combina programas CLI
        con un programa shell.

      * Utiliza python3, si la tarea no es sencilla y la estás
        escribiendo desde cero.

      * Usa perl, tcl, ruby, ... si hay un código existente usando
        uno de estos lenguajes en Debian que necesita ser retocado
        para hacer la tarea.

    Si el código resultante es demasiado lento, puede reescribir sólo
    la parte crítica para la velocidad de ejecución en un lenguaje
    compilado y llamarlo desde el lenguaje interpretado.

12.2.1. Depuración de los códigos del lenguaje interpretado

    La mayoría de los intérpretes ofrecen funciones básicas de
    comprobación sintáctica y rastreo de código.

      * “dash -n script.sh” - Comprobación de sintaxis de un script
        de Shell

      * “dash -x script.sh” - Trazar un script de Shell

      * "python -m py_compile script.py" - Comprobación sintáctica de
        un script Python
   
      * "python -mtrace --trace script.py" - Rastrear un script de
        Python

      * "perl -I ../libpath -c script.pl" - Comprobación sintáctica
        de un script Perl

      * “perl -d:Trace script.pl” - Trazar un script de Perl

    Para probar el código para dash, prueba Sección 9.1.4, “Readline
    wrapper” que se acomoda a un entorno interactivo tipo bash.

    Para probar código para perl, prueba el entorno REPL para Perl
    que acomoda Python-like REPL (=READ + EVAL + PRINT + LOOP)
    entorno para Perl.

12.2.2. Programa GUI con el script de shell

    El script de shell se puede mejorar para crear un programa GUI
    atractivo. El truco es usar uno de los llamados programas de
    diálogo en lugar de una interacción ligera usando los
    comandosecho y read.

    Tabla 12.9. Lista de programas de diálogo

    +---------------------------------------------------------------+
    | paquete |popularidad|tamaño|           descripción            |
    |---------+-----------+------+----------------------------------|
    |         |V:225,     |      |xmessage(1): muestra un mensaje o |
    |x11-utils|I:555      |651   |realiza un pregunta en una ventana|
    |         |           |      |(X)                               |
    |---------+-----------+------+----------------------------------|
    |         |V:307,     |      |muestra cuadros de diálogo de     |
    |whiptail |I:997      |61    |fácil uso para los archivos de    |
    |         |           |      |órdenes (newt)                    |
    |---------+-----------+------+----------------------------------|
    |         |           |      |muestra cuadros de diálogo de     |
    |dialog   |V:8, I:80  |520   |fácil uso para los archivos de    |
    |         |           |      |órdenes (ncurses)                 |
    |---------+-----------+------+----------------------------------|
    |         |           |      |mostrar cuadros de diálogo        |
    |zenity   |V:77, I:342|193   |gráficos a partir de scripts de   |
    |         |           |      |shell (GTK)                       |
    |---------+-----------+------+----------------------------------|
    |         |V:0.01,    |      |Herramienta de interfaz de archivo|
    |ssft     |I:0.15     |75    |de órdenes (cubierto con zenity,  |
    |         |           |      |kdialog y dialog con gettext)     |
    |---------+-----------+------+----------------------------------|
    |gettext  |V:51, I:219|20468 |«/usr/bin/gettext.sh»: traduce un |
    |         |           |      |mensajes                          |
    +---------------------------------------------------------------+


    Aquí hay un ejemplo del programa GUI para demostrar lo fácil que
    es sólo con un script de shell.

    Este script usa zenity para seleccionar un archivo
    (predeterminado /etc/motd) y mostrarlo.

    El lanzador GUI para este script se puede crear siguiendo
    Sección 9.4.10, “Iniciar un programa desde el interfaz gráfico de
    usuario”.

    #!/bin/sh -e
    # Copyright (C) 2021 Osamu Aoki <osamu@debian.org>, Public Domain
    # vim:set sw=2 sts=2 et:
    DATA_FILE=$(zenity --file-selection --filename="/etc/motd" --title="Select a file to check") || \
      ( echo "E: File selection error" >&2 ; exit 1 )
    # Check size of archive
    if ( file -ib "$DATA_FILE" | grep -qe '^text/' ) ; then
      zenity --info --title="Check file: $DATA_FILE" --width 640  --height 400 \
        --text="$(head -n 20 "$DATA_FILE")"
    else
      zenity --info --title="Check file: $DATA_FILE" --width 640  --height 400 \
        --text="The data is MIME=$(file -ib "$DATA_FILE")"
    fi

    Este tipo de aproximación al programa GUI con el shell script es
    útil sólo para casos de elección simple. Si va a escribir
    cualquier programa con complejidades, por favor considera
    escribirlo en una plataforma más capaz.

12.2.3. Acciones personalizadas para el archivador GUI

    Los programas archivadores GUI pueden ampliarse para realizar
    algunas acciones populares en archivos seleccionados utilizando
    paquetes de extensión adicionales. También pueden realizar
    acciones personalizadas muy específicas añadiendo sus scripts
    específicos.

      * Para GNOME, ver NautilusScriptsHowto.

      * Para KDE, ver Creación de menús de servicio Dolphin.
   
      * Para Xfce, ver Thunar - Acciones personalizadas y https://
        help.ubuntu.com/community/ThunarCustomActions.

      * Para LXDE, ver Acciones personalizadas.

12.2.4. Locura de pequeños archivos de órdenes en Perl

    Para procesar los datos, sh necesita generar subprocesos que
    ejecuten cut, grep, sed, etc., es lento. Por otro lado, perl
    tiene capacidades internas para procesar datos, y es rápido. Así
    que muchos scripts de mantenimiento del sistema en Debian usan
    perl.

    Pensemos en seguir un fragmento de la secuencia de comandos AWK
    de una sola línea y sus equivalentes en Perl.

    awk '($2=="1957") { print $3 }' |

    Esto es equivalente a cualquiera de las siguientes líneas.

    perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' |

    perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' |

    perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' |

    perl -lane 'print $F[2] if $F[1] eq "1957"' |

    perl -lane 'print$F[2]if$F[1]eq+1957' |

    El último es retorcido. Utiliza algunas de las funcionalidades
    avanzadas de Perl.

      * El espacio en blanco es opcional.

      * La conversión entre números y cadenas se realiza de forma
        automática.
   
      * Trucos de ejecución de Perl mediante las opciones de la línea
        de comandos: perlrun(1)

      * Variables especiales de Perl: perlvar(1)

    Esta flexibilidad es el punto fuerte de Perl. Al mismo tiempo,
    esto nos permite crear códigos crípticos y enredados. Así que ten
    cuidado.

12.3. Codificación en lenguajes compilados

    Tabla 12.10. Lista de paquetes relacionados con el compilador

    +---------------------------------------------------------------+
    |    paquete     |popularidad|tamaño|        descripción        |
    |----------------+-----------+------+---------------------------|
    |gcc             |V:157,     |36    |Compilador de GNU C        |
    |                |I:565      |      |                           |
    |----------------+-----------+------+---------------------------|
    |                |V:268,     |      |Biblioteca C de GNU:       |
    |libc6-dev       |I:584      |12676 |Bibliotecas de desarrollo y|
    |                |           |      |archivos de cabecera       |
    |----------------+-----------+------+---------------------------|
    |g++             |V:59, I:531|13    |Compilador GNU C++         |
    |----------------+-----------+------+---------------------------|
    |libstdc++-15-dev|V:5, I:23  |25228 |GNU Standard C++ Library v3|
    |                |           |      |(archivos de desarrollo)   |
    |----------------+-----------+------+---------------------------|
    |cpp             |V:338,     |18    |Preprocesador GNU C        |
    |                |I:721      |      |                           |
    |----------------+-----------+------+---------------------------|
    |gettext         |V:51, I:219|20468 |Utilidades de              |
    |                |           |      |internacionalización GNU   |
    |----------------+-----------+------+---------------------------|
    |glade           |V:0.2,     |1613  |Desarrollador de interfaces|
    |                |I:2.8      |      |de usuario GTK             |
    |----------------+-----------+------+---------------------------|
    |valac           |V:0.3,     |533   |Lenguaje similar a C# para |
    |                |I:3.0      |      |el sistema GObject         |
    |----------------+-----------+------+---------------------------|
    |flex            |V:6, I:68  |1247  |LEX-compatible generador   |
    |                |           |      |analizador de léxico rápido|
    |----------------+-----------+------+---------------------------|
    |bison           |V:7, I:72  |3122  |YACC-compatible generador  |
    |                |           |      |de analizador              |
    |----------------+-----------+------+---------------------------|
    |susv2           |I:0.03     |16    |cumple «La Especificación  |
    |                |           |      |Única de UNIX v2«          |
    |----------------+-----------+------+---------------------------|
    |susv3           |I:0.05     |16    |cumple «La Especificación  |
    |                |           |      |Única de UNIX v3«          |
    |----------------+-----------+------+---------------------------|
    |                |           |      |buscar "Las                |
    |susv4           |I:0.04     |16    |especificaciones únicas de |
    |                |           |      |UNIX v4"                   |
    |----------------+-----------+------+---------------------------|
    |golang          |I:21       |12    |Compilador del lenguaje de |
    |                |           |      |programación Go            |
    |----------------+-----------+------+---------------------------|
    |rustc           |V:5, I:19  |13061 |Lenguaje de programación de|
    |                |           |      |sistemas Rust              |
    |----------------+-----------+------+---------------------------|
    |gfortran        |V:5, I:50  |15    |Compilador de GNU Fortran  |
    |                |           |      |95                         |
    |----------------+-----------+------+---------------------------|
    |fpc             |I:2.3      |101   |Pascal libre               |
    +---------------------------------------------------------------+


    Aquí, Sección 12.3.3, “Flex — una mejora de Lex” y
    Sección 12.3.4, “Bison — una mejora de Yacc” se incluyen para
    indicar cómo se puede escribir un programa similar a un
    compilador en lenguaje C compilando una descripción de nivel
    superior en lenguaje C.

12.3.1. C

    Puede configurar su entorno para la compilación de programas
    escritos en el lenguaje de programación C como se muestra.

    # apt-get install glibc-doc manpages-dev libc6-dev gcc build-essential

    El paquete libc6-dev, a saber, la biblioteca GNU C, aporta la
    biblioteca estándar de C que es un conjunto de archivos de
    cabecera y rutinas de biblioteca utilizadas por el lenguaje de
    programación C.

    Consulte las referencias siguientes sobre C.

      * «info libc» (referencia de las funciones de la biblioteca de
        C)

      * gcc(1) y «info gcc»
   
      * nombre_de_cada_función_de_la_biblioteca_de_C(3)

      * Kernighan & Ritchie, «The C Programming Language«, 2nd
        edición (Prentice Hall)

12.3.2. Programa sencillo en C (gcc)

    Un ejemplo simple " example.c " se puede compilar con una
    biblioteca " libm " en un ejecutable " run_example " de la
    siguiente manera.

    $ cat > example.c << EOF
    #include <stdio.h>
    #include <math.h>
    #include <string.h>

    int main(int argc, char **argv, char **envp){
            double x;
            char y[11];
            x=sqrt(argc+7.5);
            strncpy(y, argv[0], 10); /* prevent buffer overflow */
            y[10] = '\0'; /* fill to make sure string ends with '\0' */
            printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]);
            return 0;
    }
    EOF
    $ gcc -Wall -g -o run_example example.c -lm
    $ ./run_example
            1, 2.915, ./run_exam,     (null)
    $ ./run_example 1234567890qwerty
            2, 3.082, ./run_exam, 1234567890qwerty

    Aquí, se necesita «-lm» para enlazar la biblioteca «/usr/lib/
    libm.so» del paquete libc6 para utilizar la función sqrt(3). La
    biblioteca real está ubicada en «/lib/» con el nombre de archivo
    «libm.so.6», el cual es un enlace simbólico a «libm-2.7.so».

    Mire el último elemento de la salida. Tiene incluso más de 10
    caracteres a pesar de tener «%10s».

    La utilización de operaciones de punteros sin comprobar los
    límites, como ocurre con sprintf(3) y strcpy(3), no se utilizan
    para evitar el desbordamiento del buffer que puede provocar
    problemas desconocidos. En su lugar se utilizan snprintf(3) y
    strncpy(3).

12.3.3. Flex — una mejora de Lex

    Flex es un generador rápido de analizadores léxicos compatible
    con Lex.

    Puede encontrar un tutorial de flex(1) en «info flex».

    Se pueden encontrar muchos ejemplos sencillos en "/usr/share/doc/
    flex/examples/". ^[7]

12.3.4. Bison — una mejora de Yacc

    Los paquetes que proporcionan un mejor y compatible Yacc son el
    analizador sintáctico LR o el analizador sintáctico LALR de
    Debian.

    Tabla 12.11. Relación de analizadores sintácticos LALR
    compatibles con Yacc

    +---------------------------------------------------------------+
    |paquete|popularidad|tamaño|            descripción             |
    |-------+-----------+------+------------------------------------|
    |bison  |V:7, I:72  |3122  |Analizador sintáctico GNU LALR      |
    |-------+-----------+------+------------------------------------|
    |byacc  |V:0.2,     |263   |Analizador sintáctico LALR Berkeley |
    |       |I:3.1      |      |                                    |
    |-------+-----------+------+------------------------------------|
    |btyacc |V:0.01,    |247   |analizador sintáctico hacia atrás   |
    |       |I:0.06     |      |basado en byacc                     |
    +---------------------------------------------------------------+


    Puede encontrar un tutorial de bison(1) en «info bison».

    Puede que sea necesario que proporcione su propio «main()» y
    «yyerror()». El método «main()» invoca «yyparse()» el cual invoca
    «yylex()», que normalmente se crea con Flex.

    He aquí un ejemplo para crear un sencillo programa de calculadora
    de terminal.

    Vamos a crear example.y:

    /* calculator source for bison */
    %{
    #include <stdio.h>
    extern int yylex(void);
    extern int yyerror(char *);
    %}

    /* declare tokens */
    %token NUMBER
    %token OP_ADD OP_SUB OP_MUL OP_RGT OP_LFT OP_EQU

    %%
    calc:
     | calc exp OP_EQU    { printf("Y: RESULT = %d\n", $2); }
     ;

    exp: factor
     | exp OP_ADD factor  { $$ = $1 + $3; }
     | exp OP_SUB factor  { $$ = $1 - $3; }
     ;

    factor: term
     | factor OP_MUL term { $$ = $1 * $3; }
     ;

    term: NUMBER
     | OP_LFT exp OP_RGT  { $$ = $2; }
      ;
    %%

    int main(int argc, char **argv)
    {
      yyparse();
    }

    int yyerror(char *s)
    {
      fprintf(stderr, "error: '%s'\n", s);
    }


    Vamos a crear example.l:

    /* calculator source for flex */
    %{
    #include "example.tab.h"
    %}

    %%
    [0-9]+ { printf("L: NUMBER = %s\n", yytext); yylval = atoi(yytext); return NUMBER; }
    "+"    { printf("L: OP_ADD\n"); return OP_ADD; }
    "-"    { printf("L: OP_SUB\n"); return OP_SUB; }
    "*"    { printf("L: OP_MUL\n"); return OP_MUL; }
    "("    { printf("L: OP_LFT\n"); return OP_LFT; }
    ")"    { printf("L: OP_RGT\n"); return OP_RGT; }
    "="    { printf("L: OP_EQU\n"); return OP_EQU; }
    "exit" { printf("L: exit\n");   return YYEOF; } /* YYEOF = 0 */
    .      { /* ignore all other */ }
    %%

    A continuación, ejecute lo siguiente desde el símbolo del sistema
    para probar esto:

    $ bison -d example.y
    $ flex example.l
    $ gcc -lfl example.tab.c lex.yy.c -o example
    $ ./example
    1 + 2 * ( 3 + 1 ) =
    L: NUMBER = 1
    L: OP_ADD
    L: NUMBER = 2
    L: OP_MUL
    L: OP_LFT
    L: NUMBER = 3
    L: OP_ADD
    L: NUMBER = 1
    L: OP_RGT
    L: OP_EQU
    Y: RESULT = 9

    exit
    L: exit

12.4. Herramientas de análisis estático de memoria

    Lint herramientas similares pueden ayudar a análisis de código
    estático automático.

    Indent como herramientas pueden ayudar a las revisiones humanas
    de código reformateando los códigos fuente de forma coherente.

    Ctags como herramientas pueden ayudar a las revisiones humanas de
    código mediante la generación de un archivo de índice (o
    etiqueta) de los nombres que se encuentran en los códigos fuente.

    Sugerencia

    Configurar tu editor favorito (emacs o vim) para usar plugins
    asíncronos del motor lint ayuda a tu escritura de código. Estos
    plugins se están volviendo muy potentes aprovechando Protocolo de
    servidor de idiomas. Dado que se están moviendo rápidamente, usar
    su código upstream en lugar del paquete Debian puede ser una
    buena opción.

    Tabla 12.12. Relación de las herramientas para el análisis de
    código estático

    +---------------------------------------------------------------+
    |    paquete    |popularidad|tamaño|        descripción         |
    |---------------+-----------+------+----------------------------|
    |vim-ale        |I:0.78     |2833  |Motor asíncrono Lint para   |
    |               |           |      |Vim 8 y NeoVim              |
    |---------------+-----------+------+----------------------------|
    |vim-syntastic  |I:2.0      |1379  |Trucos de comprobación      |
    |               |           |      |sintáctica para vim         |
    |---------------+-----------+------+----------------------------|
    |               |V:0.1,     |      |moderna comprobación        |
    |elpa-flycheck  |I:1.6      |815   |sintáctica sobre la marcha  |
    |               |           |      |para Emacs                  |
    |---------------+-----------+------+----------------------------|
    |elpa-relint    |V:0.01,    |150   |Buscador de errores regexp  |
    |               |I:0.05     |      |de Emacs Lisp               |
    |---------------+-----------+------+----------------------------|
    |cppcheck-gui   |V:0.11,    |7722  |herramienta para el análisis|
    |               |I:0.99     |      |de código C/C++ (GUI)       |
    |---------------+-----------+------+----------------------------|
    |shellcheck     |V:3, I:16  |22860 |herramienta útil para       |
    |               |           |      |scripts de shell            |
    |---------------+-----------+------+----------------------------|
    |pyflakes3      |V:1, I:14  |20    |Verificado pasivo de        |
    |               |           |      |programas Python 3          |
    |---------------+-----------+------+----------------------------|
    |pylint         |V:3, I:20  |2089  |comprobador de código       |
    |               |           |      |estático Python             |
    |---------------+-----------+------+----------------------------|
    |               |V:668,     |      |intérprete con comprobador  |
    |perl           |I:992      |838   |de código estático interno: |
    |               |           |      |B::Lint(3perl)              |
    |---------------+-----------+------+----------------------------|
    |rubocop        |V:0.07,    |4157  |Analizador de código        |
    |               |I:1.00     |      |estático Ruby               |
    |---------------+-----------+------+----------------------------|
    |               |           |      |Herramienta de verificación |
    |clang-tidy     |V:2, I:11  |21    |de formato de regla C++     |
    |               |           |      |basada en Clang             |
    |---------------+-----------+------+----------------------------|
    |               |V:0.06,    |      |herramienta para la         |
    |splint         |I:0.94     |2325  |comprobación estática de    |
    |               |           |      |errores de programación en C|
    |---------------+-----------+------+----------------------------|
    |               |           |      |herramienta que examina     |
    |flawfinder     |V:0.07,    |205   |código fuente en C/C++ para |
    |               |I:0.44     |      |encontrar debilidades de    |
    |               |           |      |seguridad                   |
    |---------------+-----------+------+----------------------------|
    |black          |V:3, I:16  |10057 |Formateador de código Python|
    |               |           |      |agresivo                    |
    |---------------+-----------+------+----------------------------|
    |perltidy       |V:0.4,     |3086  |Indentador y reformateador  |
    |               |I:3.0      |      |de scripts de Perl          |
    |---------------+-----------+------+----------------------------|
    |indent         |V:0.3,     |438   |Programa de formateo del    |
    |               |I:5.1      |      |código fuente en lenguaje C |
    |---------------+-----------+------+----------------------------|
    |               |V:0.2,     |      |Indentador de código fuente |
    |astyle         |I:2.5      |770   |para C, C++, Objective-C, C#|
    |               |           |      |y Java                      |
    |---------------+-----------+------+----------------------------|
    |bcpp           |V:0.02,    |114   |Embellecer C(++)            |
    |               |I:0.25     |      |                            |
    |---------------+-----------+------+----------------------------|
    |xmlindent      |V:0.08,    |52    |reformateador del flujo XML |
    |               |I:0.77     |      |                            |
    |---------------+-----------+------+----------------------------|
    |global         |V:0.2,     |1923  |Herramientas de búsqueda y  |
    |               |I:1.6      |      |exploración de código fuente|
    |---------------+-----------+------+----------------------------|
    |               |           |      |Crea un índice de archivo de|
    |exuberant-ctags|V:2, I:13  |341   |etiquetas de definiciones   |
    |               |           |      |del código fuente           |
    |---------------+-----------+------+----------------------------|
    |               |           |      |Crea un índice de archivo de|
    |universal-ctags|V:1, I:12  |4238  |etiquetas de definiciones   |
    |               |           |      |del código fuente           |
    +---------------------------------------------------------------+


12.5. Depuración

    La depuración es una parte importante de las actividades de
    programación. Saber cómo depurar programas lo convierte en un
    buen usuario de Debian que puede producir informes de errores
    significativos.

    Tabla 12.13. Lista de paquetes de la depuración

    +---------------------------------------------------------------+
    |paquete|popularidad |tamaño|           documentación           |
    |-------+------------+------+-----------------------------------|
    |gdb    |V:87, I:159 |12456 |«info gdb» proporcionado por       |
    |       |            |      |gdb-doc                            |
    |-------+------------+------+-----------------------------------|
    |ddd    |V:0.3, I:5.2|4210  |«info ddd» proporcionado por       |
    |       |            |      |ddd-doc                            |
    +---------------------------------------------------------------+


12.5.1. Fundamentos de gdb

    El principal depurador en Debian es gdb(1) el cual permite
    inspeccionar un programa mientras se ejecuta.

    Instalamos gdb y otros programas relevantes como se muestra.

    # apt-get install gdb gdb-doc build-essential devscripts

    Se puede encontrar un buen tutorial de gdb:

      * “info gdb”

      * “Depuración con GDB” en /usr/share/doc/gdb-doc/html/gdb/
        index.html

      * “tutorial en la web”

    Aquí hay un ejemplo simple del uso de gdb(1) en un "programa"
    compilado con la opción "-g" para generar información de
    depuración.

    $ gdb program
    (gdb) b 1                # set break point at line 1
    (gdb) run args           # run program with args
    (gdb) next               # next line
    ...
    (gdb) step               # step forward
    ...
    (gdb) p parm             # print parm
    ...
    (gdb) p parm=12          # set value to 12
    ...
    (gdb) quit

    Sugerencia

    Existen abreviaturas para la mayor parte de las órdenes de gdb
    (1). La expansión del tabulador funciona de la misma manera que
    en el intérprete de órdenes.

12.5.2. Depurando un paquete Debian

    Dado que todos los archivos binarios instalados deben eliminarse
    en el sistema Debian de forma predeterminada, la mayoría de los
    símbolos de depuración se eliminan en el paquete normal. Para
    depurar paquetes Debian con gdb(1), se deben instalar paquetes
    *-dbgsym (p. ej., coreutils-dbgsym en el caso de coreutils). Los
    paquetes fuente generan automáticamente paquetes *-dbgsym junto
    con paquetes binarios normales y esos paquetes de depuración se
    colocan por separado en el archivo debian-debug. Consulte los
    artículos en Debian Wiki para obtener más información.

    Si un paquete que se va a depurar no proporciona su paquete
    *-dbgsym, debe instalarlo después de reconstruirlo de la
    siguiente manera.

    $ mkdir /path/new ; cd /path/new
    $ sudo apt-get update
    $ sudo apt-get dist-upgrade
    $ sudo apt-get install fakeroot devscripts build-essential
    $ apt-get source package_name
    $ cd package_name*
    $ sudo apt-get build-dep ./

    Si lo necesita corrija los errores.

    Cuando recompile la publicación de un paquete ya existente elija
    una que no exista en Debian, p. ej. añadiéndole «+debug1» o
    añadiéndole «~pre1» como se muestra.

    $ dch -i

    Compila o instala los paquetes con los símbolos de depuración de
    la siguiente manera.

    $ export DEB_BUILD_OPTIONS="nostrip noopt"
    $ debuild
    $ cd ..
    $ sudo debi package_name*.changes

    Necesita comprobar que los archivos de órdenes del paquete y
    utilizar «CFLAGS=-g -Wall» para la compilación de binarios.

12.5.3. Obteniendo trazas

    Cuando encuentre un programas que no funciona, es una buena idea
    al informar del error añadir información sobre las trazas de su
    ejecución.

    El backtrace se puede obtener mediante gdb(1) usando uno de los
    siguientes enfoques:

      * Enfoque de los errores en GDB:

          + Ejecuta el programa desde GDB.

          + Bloquea el programa.

          + Escriba "bt" en el indicador de GDB.

      * Primer enfoque de los errores:

          + Actualiza el archivo “/etc/security/limits.conf” para
            incluir lo siguiente:
   
            * soft core unlimited

          + Escribe "ulimit -c ilimitado" en el indicador de shell.

          + Ejecuta el programa desde este indicador de shell

          + Bloquea el programa para generar un archivo core dump.

          + Cargar el archivo core dump a GDB como "gdb gdb ./
            program_binary core" .

          + Escriba "bt" en el indicador de GDB.

    Para un bucle infinito o una situación de teclado congelado,
    puede forzar el bloqueo del programa pulsando Ctrl-\ o Ctrl-C o
    ejecutando “kill -ABRT PID”. (Ver Sección 9.4.12, “Matando un
    proceso”)

    Sugerencia

    Frecuentemente encontrará en primeras líneas «malloc()» o
    «g_malloc()». Cuando esto ocurre disminuyen las posibilidades de
    que las trazas sean útiles. La forma más fácil de encontrar
    alguna información útil es asignado a la variable de entorno
    «$MALLOC_CHECK_» el valor de 2 (malloc(3)). Puede hacer esto a la
    vez que se ejecuta gdb como se muestra.

     $ MALLOC_CHECK_=2 gdb hello

12.5.4. Órdenes avanzadas de gdb

    Tabla 12.14. Relación de órdenes avanzadas gdb

    +---------------------------------------------------------------+
    |     orden      | descripción de la funcionalidad de la orden  |
    |----------------+----------------------------------------------|
    |(gdb) thread    |recogen trazas de todos los hilos para        |
    |apply all bt    |programas multihilo                           |
    |----------------+----------------------------------------------|
    |(gdb) bt full   |recoge los parámetros de la pila de las       |
    |                |llamadas de función                           |
    |----------------+----------------------------------------------|
    |(gdb) thread    |recoge trazas y parámetros como una           |
    |apply all bt    |combinación de las opciones anteriores        |
    |full            |                                              |
    |----------------+----------------------------------------------|
    |(gdb) thread    |recoge trazas y parámetros de las 10 llamadas |
    |apply all bt    |más recientes para eliminar información no    |
    |full 10         |relevante                                     |
    |----------------+----------------------------------------------|
    |(gdb) set       |escribe la salida del registro de gdb a un    |
    |logging on      |archivo (por defecto «gdb.txt»)               |
    +---------------------------------------------------------------+


12.5.5. Comprobar las dependencias de las bibliotecas

    Utilice como se muestra ldd(1) para determinar las bibliotecas de
    las que depende un programa.

    $ ldd /usr/bin/ls
            librt.so.1 => /lib/librt.so.1 (0x4001e000)
            libc.so.6 => /lib/libc.so.6 (0x40030000)
            libpthread.so.0 => /lib/libpthread.so.0 (0x40153000)
            /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

    Para que ls(1) funcione en un entorno `chroot` las bibliotecas
    siguientes deben estar disponibles en dicho entorno.

    Consulte Sección 9.4.6, “Trazando la actividad de un programa”.

12.5.6. Herramientas de rastreo dinámico de llamadas

    Hay varias herramientas de rastreo dinámico de llamadas
    disponibles en Debian. Consulta Sección 9.4, “Monitoreando,
    controlando e iniciando lo que hacer los programas”.

12.5.7. Errores de depuración X

    Si el programa GNOME preview1 ha recibido un error de las X se
    puede ver el mensaje como se muestra.

    The program 'preview1' received an X Window System error.

    En este caso, puede intentar ejecutar el programa con «--sync», y
    poner un punto de ruptura en la función «gdk_x_error» con el fin
    de obtener trazas.

12.5.8. Herramientas de detección de fugas de memoria

    Existen varias herramientas de detección de fugas de memoria en
    Debian.

    Tabla 12.15. Relación de herramientas de detección de fugas de
    memoria

    +---------------------------------------------------------------+
    |   paquete    |popularidad|tamaño|         descripción         |
    |--------------+-----------+------+-----------------------------|
    |libc6-dev     |V:268,     |12676 |mtrace(1): funcionalidad de  |
    |              |I:584      |      |depuración de malloc en glibc|
    |--------------+-----------+------+-----------------------------|
    |valgrind      |V:5, I:33  |87847 |depurador y analizador de    |
    |              |           |      |memoria                      |
    |--------------+-----------+------+-----------------------------|
    |electric-fence|V:0.2,     |69    |depurador malloc(3)          |
    |              |I:2.4      |      |                             |
    |--------------+-----------+------+-----------------------------|
    |libdmalloc5   |V:0.01,    |373   |biblioteca de depuración de  |
    |              |I:0.66     |      |la asignación de memoria     |
    |--------------+-----------+------+-----------------------------|
    |              |           |      |biblioteca para detectar     |
    |duma          |V:0.01,    |297   |desbordamientos y            |
    |              |I:0.06     |      |subdesbordamientos de búfer  |
    |              |           |      |en programas C y C++         |
    |--------------+-----------+------+-----------------------------|
    |leaktracer    |I:0.39     |56    |programas C++ para trazar    |
    |              |           |      |fugas de memoria             |
    +---------------------------------------------------------------+


12.5.9. Desemsamblado de binarios

    Usted puede desemsamblar código binario con objdump(1) como se
    muestra.

    $  objdump -m i386 -b binary -D /usr/lib/grub/x86_64-pc/stage1

    Nota
   
    gdb(1) puede ser utilizado para desemsamblar el código de forma
    interactiva.

12.6. Herramientas de construcción

    Tabla 12.16. Lista de paquetes de herramientas de compilación

    +---------------------------------------------------------------+
    |  paquete  |popularidad|tamaño|         documentación          |
    |-----------+-----------+------+--------------------------------|
    |make       |V:152,     |1762  |«info make» proporcionado por   |
    |           |I:567      |      |make-doc                        |
    |-----------+-----------+------+--------------------------------|
    |autoconf   |V:27, I:199|2244  |«info autoconf» proporcionado   |
    |           |           |      |con autoconf-doc                |
    |-----------+-----------+------+--------------------------------|
    |automake   |V:27, I:199|1932  |«info automake» proporcionado   |
    |           |           |      |con automake1.10-doc            |
    |-----------+-----------+------+--------------------------------|
    |libtool    |V:23, I:182|1245  |"info libtool" proporcionado por|
    |           |           |      |libtool-doc                     |
    |-----------+-----------+------+--------------------------------|
    |           |           |      |cmake(1) sistema make           |
    |cmake      |V:19, I:122|59735 |multiplataforma de código       |
    |           |           |      |abierto                         |
    |-----------+-----------+------+--------------------------------|
    |           |           |      |ninja(1) pequeño sistema de     |
    |ninja-build|V:8, I:53  |456   |construcción más cercano en     |
    |           |           |      |espíritu a Make                 |
    |-----------+-----------+------+--------------------------------|
    |           |           |      |meson(1) sistema de compilación |
    |meson      |V:6, I:28  |4277  |de alta productividad sobre     |
    |           |           |      |ninja                           |
    |-----------+-----------+------+--------------------------------|
    |xutils-dev |V:0.5,     |1495  |imake(1), xmkmf(1), etc.        |
    |           |I:6.9      |      |                                |
    +---------------------------------------------------------------+


12.6.1. Make

    Make es una utilidad para mantener grupos de programas. La
    ejecución de make(1) consiste en, la lectura del archivo de
    reglas «Makefile» por parte de make y la actualización de un
    objetivo si los archivos que son necesarios han sido modificados
    desde la última vez o si el objetivo no existe. La ejecución de
    estas actualizaciones pueden suceder de concurrentemente.

    La sintaxis del archivo de reglas es la que se muestra.

    target: [ prerequisites ... ]
     [TAB]  command1
     [TAB]  -command2 # ignore errors
     [TAB]  @command3 # suppress echoing

    Aquí «[TAB]» es un código TAB. Cada línea es interpretada por el
    intérprete de órdenes después de la sustitución de las variables.
    Utilice «\» al final de la línea para continuar el archivo de
    órdenes. Utilice «$$» para incluir «$» par los valores del
    entorno para el archivo de órdenes.

    Las reglas implícitas y los prerequisitos para un objetivos
    pueden ser escrito, por ejemplo, como se muestra.

    %.o: %.c header.h

    Aquí, el objetivo contiene el carácter «%» (únicamente un
    carácter). El carácter %» encaja con cualquier cadena no vacía
    que corresponda a los nombres de archivo del objetivo real. Así
    mismo el prerrequisito utiliza «%» para mostrar como se
    relaciones sus nombres con los nombres del objetivo real.

    Tabla 12.17. Relación de variables automáticas de make

    +---------------------------------------------------------------+
    |variable automática|                   valor                   |
    |-------------------+-------------------------------------------|
    |$@                 |objetivo                                   |
    |-------------------+-------------------------------------------|
    |$<                 |primer prerrequisitos                      |
    |-------------------+-------------------------------------------|
    |$?                 |todos los prerrequisitos nuevos            |
    |-------------------+-------------------------------------------|
    |$^                 |todos los prerequisitos                    |
    |-------------------+-------------------------------------------|
    |$*                 |«%» encaja la raíz en el patrón del        |
    |                   |objetivo                                   |
    +---------------------------------------------------------------+


    Tabla 12.18. Relación de expansiones de variables de make

    +------------------------------------------+
    |expansión variable|      descripción      |
    |------------------+-----------------------|
    |foo1 := bar       |expansión por única vez|
    |------------------+-----------------------|
    |foo2 = bar        |expansión recursiva    |
    |------------------+-----------------------|
    |foo3 += bar       |anexar                 |
    +------------------------------------------+


    Ejecute «make -p -f/dev/null»para ver las reglas internas
    automática.

12.6.2. Autotools (Autoherramientas) (herramientas de automatización)

    Autotools es un conjunto de herramientas de programación
    diseñadas para ayudar a que los paquetes de código fuente sean
    portables a muchos sistemas Unix-like.

      * Autoconf es una herramienta para generar scripts de shell
        "configure" desde "configure.ac".

          + "configure" se usa más adelante para producir "Makefile"
            a partir de la plantilla "Makefile.in".
   
      * Automake es una herramienta para producir "Makefile.in" a
        partir de "Makefile.am".

      * Libtool es un script de shell para abordar el problema de la
        portabilidad del software al compilar bibliotecas compartidas
        a partir del código fuente.

12.6.2.1. Compilando e instalando un programa

    Aviso
   
    Cuando compile programas y los instale no sobreescriba los
    archivos del sistema.

    Debian no modifica los archivos en «/usr/local/» o «/opt». Así
    que si compila un programa desde el código fuente, instalarlo en
    «/usr/local/» para que no interfiera con Debian.

    $ cd src
    $ ./configure --prefix=/usr/local
    $ make # this compiles program
    $ sudo make install # this installs the files in the system

12.6.2.2. Desinstalando programas

    Si se tiene el código original, se utiliza autoconf(1)/automake
    (1) y se recuerda como se configuró, ejecute lo siguiente para
    realizar la desinstalación del programa.

    $ ./configure all-of-the-options-you-gave-it
    $ sudo make uninstall

    Otra manera, si está totalmente seguro de que la instalación solo
    únicamente archivos en «/usr/local/» y no hay nada importante
    allí, puede borrar todo su contenido como se muestra.

    # find /usr/local -type f -print0 | xargs -0 rm -f

    Si no está seguro de dónde se instalaron los archivos, puede
    considerar usar checkinstall(8) del paquete checkinstall, que
    dará una ruta de desinstalación clara. Ahora admite la creación
    de paquetes Debian con la opción "-D".

12.6.3. Meson

    El sistema de creación del software ha ido evolucionando:

      * Autotools en la parte superior de Make ha sido el estándar de
        facto para la infraestructura de compilación portátil desde
        1990. Esto es extremadamente lento.

      * CMake lanzado inicialmente en el 2000 mejoró la velocidad
        significativamente pero fue construido originalmente sobre el
        inherentemente lento Make. (Ahora Ninja puede ser tu
        backend).
   
      * Ninja, lanzado inicialmente en 2012, está destinado a
        sustituir a Make para mejorar aún más la velocidad de la
        compilación y está diseñado para que tus archivos sean
        generados por un sistema de compilación de nivel superior.

      * Meson lanzado inicialmente en 2013 es el nuevo, popular y
        rápido sistema de compilación de nivel superior que utiliza
        Ninja como backend.

    Consulta los documentos que se encuentran en "El sistema de
    construcción Meson" y "El sistema de construcción Ninja".

12.7. Web

    Se pueden crear páginas web dinámicas básicas como se muestra.

      * Las consultas se presentan al navegador del usuario
        utilizando formularios HTML.

      * Rellenando y pulsado sobre las entradas del formulario se
        envía la cadena URL con los parámetros codificados desde el
        navegador al servidor web.

          + «https://www.foo.dom/cgi-bin/program.pl?VAR1=VAL1&VAR2=
            VAL2&VAR3=VAL3»

          + «https://www.foo.dom/cgi-bin/program.py?VAR1=VAL1&VAR2=
            VAL2&VAR3=VAL3»

          + «https://www.foo.dom/program.php?VAR1=VAL1&VAR2=VAL2&VAR3
            =VAL3»

      * «%nn» en la URL se sustituye por el carácter hexadecimal que
        tiene el valor nn.

      * Las variables de entorno se asignan como: «QUERY_STRING=«VAR1
        =VAL1 VAR2=VAL2 VAR3=VAL3«».

      * Un programa CGI (independientemente de su extensión
        «programa.*») en un servidor web se ejecuta a si mimo con la
        variable de entorno «$QUERY_STRING».

      * La salida de un programa CGI se envía al servidor web y se
        representa como una página web dinámica.

    Por seguridad es mejor no realizar de forma manual o de otras
    formas la gestión de análisis de los parámetros CGI. Existen
    módulos para ello en Perl y Python. PHP tiene dicha
    funcionalidad. Cuando se necesita almacenar información del
    usuario, se utilizan las cookies HTTP cookies. Cuando se necesita
    procesar información en el lado del cliente, normalmente se
    utiliza Javascript.

    Para mayor información, ver Interfaz de Pasarela Común (Common
    Gateway Interface), La Fundación de Software Apache (The Apache
    Software Foundation) y JavaScript.

    Buscar "tutorial CGI" en Google escribiendo la URL codificada
    https://www.google.com/search?hl=en&ie=UTF-8&q=CGI+tutorial
    directamente en la dirección del navegador es una buena forma de
    ver el script CGI en acción en el servidor de Google.

12.8. La traducción de código fuente

    Existen aplicaciones para convertir código fuente de un lenguaje
    a otro.

    Tabla 12.19. Relación de herramientas de traducción de código
    fuente

    +---------------------------------------------------------------+
    | paquete |popularidad|tamaño| palabra |      descripción       |
    |         |           |      |  clave  |                        |
    |---------+-----------+------+---------+------------------------|
    |perl     |V:668,     |838   |AWK→PERL |convertir código fuente |
    |         |I:992      |      |         |de AWK a PERL: a2p(1)   |
    |---------+-----------+------+---------+------------------------|
    |         |V:0.1,     |      |         |convierte código fuente |
    |f2c      |I:2.0      |443   |FORTRAN→C|de FORTRAN 77 a C/C++:  |
    |         |           |      |         |f2c(1)                  |
    |---------+-----------+------+---------+------------------------|
    |         |V:0.03,    |      |         |convierte de NASM       |
    |intel2gas|I:0.18     |178   |intel→gas|(formato Intel) a GAS   |
    |         |           |      |         |(Ensamblador GNU)       |
    +---------------------------------------------------------------+


12.9. Haciendo un paquete Debian

    Si quiere hacer un paquete Debian, lea lo siguiente.

      * Capítulo 2, Gestión de paquetes Debian para comprender los
        fundamentos del sistema de paquetes

      * Sección 2.7.13, “Portar un paquete a un sistema estable” para
        comprender lo fundamental del proceso de portabilidad

      * Sección 9.11.4, “Sistemas chroot” para comprender los
        fundamentos de la técnica de chroot

      * debuild(1), y sbuild(1)
   
      * Sección 12.5.2, “Depurando un paquete Debian” para la
        recompilación con la finalidad de la depuración

      * Guía de Mantenedores Debian (Guide for Debian Maintainers)
        (el paquete debmake-doc)

      * Referencia para desarrolladores Debian (el paquete
        developers-reference).

      * Manual Directrices de Debian (en el paquete debian-policy)

    Existen paquetes que ayudan al empaquetado como debmake, dh-make,
    dh-make-perl, etc.


---------------------------------------------------------------------

    ^[7] Es posible que se necesiten algunos ajustes para que
    funcionen con el sistema actual.

Apéndice A. Apéndice

    Aquí están las referencias de este documento.

A.1. Debian maze

    El sistema Debian es una plataforma de computación compleja para
    un equipo en red. Sin embargo, aprender a utilizar todas sus
    capacidades no es sencillo. Configurar una cola de impresora LPR
    con una impresora que no soporta PostScript es un buen ejemplo de
    ello. (No existen ahora problemas con ello desde que se utiliza
    el sistema CUPS).

    Es un completo y detallado mapa llamado el «CÓDIGO FUENTE«. Es
    muy preciso pero difícil de entender. Existen también referencias
    a Cómos o MiniCómos. Son más fáciles de comprender pero tienden a
    dar demasiados detalles y pierden la visión global. Algunas veces
    tengo problemas para encontrar la sección correcta en los Cómos
    largo cuando solo necesito saber como se ejecutan.

    Espero que esta "Referencia de Debian (versión 2.143)"
    (2026-07-10 14:59:15 UTC) proporciona una buena dirección de
    inicio para las personas en el laberinto de Debian.

A.2. Histórico de copyright

    La Referencia de Debian fue iniciada por mi, Osamu Aoki <osamu at
    debian punto org>, como un sistema personal de administración de
    notas. Mucho contenido proviene del conocimiento que he adquirido
    de la lista de correo de usuarios de debian y otros recursos
    Debian.

    La Referencia de Debian (versión 1, 2001-2007) fue creado como
    una sugerencia de Josip Rodin, que es muy activo en el Proyecto
    de Documentación Debian (DDP) como parte de los documentos DDP.

    Después de 6 años, me di cuenta de que la versión original de la
    «Referencia de Debian« estaba desactualizada y comencé a
    reescribir parte de su contenido. La nueva «Referencia de Debian
    (versión 2)» se publicó en 2008.

    He actualizado "Referencia Debian (versión 2)" para tratar temas
    nuevos (Systemd, Wayland, IMAP, PipeWire, núcleo Linux 5.10) y
    eliminado temas obsoletos (SysV init, CVS, Subversion, protocolo
    SSH 1, núcleos Linux anteriores a 2.5). Se han eliminado la
    mayoría de las referencias a Jessie 8 (2015-2020) release
    situation o anteriores.

    Esta "Referencia de Debian (versión 2.143)" (2026-07-10 14:59:15
    UTC) cubre principalmente Trixie (=stable) y Forky (=testing)
    Lanzamientos de Debian.

    El contenido del tutorial puede ser seguido desde su original y
    su inspiración como se muestra.

      * «Guía Linux de Usuario (Linux User's Guide)« de Larry
        Greenfield (Diciembre 1996)

          + obsoleto por el «Tutorial de Debian«

      * "Tutorial de Debian" por Havoc Pennington. (11 de diciembre,
        1998)

          + parcialmente escrito por Oliver Elphick, Ole Tetlie,
            James Treacy, Craig Sawyer e Ivan E. Moore II

          + obsoleto por la «GNU/Linux Debian: guía de instalación y
            uso«

      * «GNU/Linux Debian: guía de instalación y uso« de John Goerzen
        y Ossama Othman (1999)

          + obsoleto por la «Referencia de Debian (versión 1)«

    El paquete y la descripción del archivo puede seguir algo sobre
    sus orígenes y su inspiración en lo siguiente.

      * «FAQ Debian FAQ« (versión de marzo 2002, mantenida por Josip
        Rodin)

    Otro contenido puede seguir a sus originales y su inspiración de
    lo siguiente.

      * «Referencia de Debian (versión 1)« de Osamu Aoki (2001–2007)
   
          + obsoleto por la nueva "Referencia de Debian (versión 2)"
            en 2008.

    La versión anterior «Referencia Debian (versión 1)« fue creada
    por varios autores.

      * la mayor parte del contenido de la configuración de red fue
        escrito por Thomas Hood

      * una parte significativa del contenido de X y CSV fue escrita
        por Brian Nelson

      * la ayuda en los archivos de órdenes de construcción y la
        mayor parte de las correcciones fueron aportadas por Jens
        Seidel

      * gran parte de las correcciones fueron aportadas por David
        Sewell

      * múltiples contribuciones de los traductores, colaboradores y
        personas que descubrieron errores

    Se utilizaron muchas páginas de manual y páginas de información
    sobre el sistema Debian, así como también páginas web originales
    y documentos de Wikipedia como referencias principales para
    escribir este documento. En la medida en que Osamu Aoki los
    consideró dentro del uso justo, muchas partes de ellos,
    especialmente las definiciones de comandos, se usaron como
    fragmentos de frases después de cuidadosos esfuerzos editoriales
    para encajarlos en el estilo y la objetivo de este documento.

    La descripción de depurador gdb se amplió utilizando el contenido
    de la Wiki de Debian sobre la depuración con el consentimiento de
    Ari Pollak, Loïc Minier y Dafydd Harries.

    El contenido de la actual "Referencia de Debian (versión 2.143)"
    (2026-07-10 14:59:15 UTC) es principalmente mi propio trabajo
    excepto como se mencionó anteriormente. Estos también han sido
    actualizados por los colaboradores.

    El autor, Osamu Aoki, agradece a todos ellos su ayuda para hacer
    posible este documento.

A.3. Formato del documento

    La fuente del documento original en inglés está escrita
    actualmente en archivos DocBook XML. Esta fuente Docbook XML se
    convierten a HTML, texto sin formato, PostScript y PDF. (Algunos
    formatos pueden omitirse para su distribución)

