Guía de referencia de Debian Osamu Aoki Copyright © 2013-2024 Osamu Aoki La Guía de Referencia de Debian (version 2.125) (2024-11-15 13:32:55 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. Flujo de hechos de las órdenes de 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. Instalación fallida debido a dependencias incumplidas 2.6.2. Errores de almacenamiento en la caché de los datos del paquete 2.6.3. Incompatibilidad con la configuración antigua del usuario 2.6.4. Superposición de archivos por diferentes paquetes 2.6.5. Arreglando un archivo de órdenes de un paquete roto 2.6.6. Recuperación con la orden dpkg 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. Systemd 3.2.1. Arranque de systemd 3.2.2. Inicio de sesión en Systemd 3.3. Los mensajes del núcleo 3.4. El sistema de mensajes 3.5. Gestión del sistema 3.6. Otros monitores del sistema 3.7. Configuración del sistema 3.7.1. El nombre del equipo (hostname) 3.7.2. El sistema de archivos 3.7.3. Inicialización del interfaz de red 3.7.4. Inicialización del sistema en la nube 3.7.5. Ejemplo de personalización para ajustar el servicio sshd 3.8. El sistema udev 3.9. 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 sistemas remoto utilizando 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. Fuentes 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. Ejemplo para el japonés 8.3. La salida por pantalla 8.4. 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 configuración de la terminal 9.5.7. La infraestructura de sonido 9.5.8. Deshabilitar el salvapantallas 9.5.9. Deshabilitando los pitidos 9.5.10. Utilización de memoria 9.5.11. 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. Lista de IBus y sus paquetes 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.125) (2024-11-15 13:32:55 UTC) pretende proporcionar una visión general amplia de la administración del sistema Debian como una guía del usuario posterior a la instalación. El lector al que va dirigido esta obra es aquel que desea aprender scripts de shell, pero que no esta preparado para entender el código fuente C que le permita 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 prueba (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 se encuentre 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 fluida 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 m deuchos 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 un visión global y omite los casos menos frecuentes (Visión General) * simplicidad y brevedad (KISS)     * No se reinventa la rueda (se usan enlaces a fuentes ya existentes) * centrado en la consola y herramientas sin interfaz gráfico de usuario. ( Usaejemplos 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, * Documentación en el directorio «/usr/share/doc nombre_del_paquete», * Las páginas de manual al estilo de Unix: «dpkg -L nombre_del_paquete|grep '/man/man.*/'», * Las páginas de información (info page) al estilo GNU: «dpkg -L nombre_de_paquete |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 órdenesbash (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 cadenas de     marcador de posición como command-in-root-account y command-in-user-account para traducirse en ejemplos de comandos. Esta es una elección intencionada 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/usuarios-y-grupos. txt.gz" y "/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 2024-03-03 11:51:37 UTC y contiene el envío total de 237734 informes sobre 198687 paquetes binarios y arquitecturas 27 . Nota     Tener en cuenta que el archivo amd64 inestable contiene solo 74165 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 que tenga un paquete es 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 «inestable» 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 PRUEBE sus cambios * tener a mano un medio alternativo de arranque (dispositivo de memoria USB, CD…) 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     * «Unix ES muy amigable ... únicamente que es muy puntilloso eligiendo a sus amigos.» --- Tollef Fog Heen     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ás en un entorno GUI, puedes ir a la consola de caracteres 3 con la tecla Ctrl-Alt-F3, es decir, presione Left Ctrl y Left     Alt al mismo tiempo tecla 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 sistemas remoto utilizando 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:50, I:209|1542 |Un gestor de archivos en modo | | | | |texto a pantalla completa | |---------+-----------+------+----------------------------------| | | | |Un programa para proporcionar | | |V:688, | |algunos privilegios de | |sudo |I:841 |6550 |superusuario a los usuarios de | | | | |acuerdo a la configuración | | | | |establecida | |---------+-----------+------+----------------------------------| | | | |Editor de texto Unix Vi IMproved |     |vim |V:95, I:369|3743 |(Vi Mejorado), un editor de texto | | | | |para programadores (versión | | | | |estándar) | |---------+-----------+------+----------------------------------| | | | |Editor de texto Unix Vi IMproved | |vim-tiny |V:58, I:975|1722 |(Vi Mejorado), un editor de texto | | | | |para programadores (versión | | | | |compacta) | |---------+-----------+------+----------------------------------| |emacs-nox|V:4, I:16 |39647 |El proyecto GNU Emacs, un editor | | | | |de texto ampliable basado en Lisp | |---------+-----------+------+----------------------------------| |w3m |V:15, I:187|2837 |Navegadores web en modo texto | |---------+-----------+------+----------------------------------| |gpm |V:10, I:12 |521 |Copiar y pegar, al estilo Unix, en| | | | |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:867 |187 |Preguntas Frecuentes | | | | |(FAQ) y otros | | | | |documentos | |--------------------+-----------+------+-----------------------| | | | |Manual de la | |debian-policy |I:14 |4659 |Directrices Debian y | | | | |documentos asociados |     |--------------------+-----------+------+-----------------------| | | | |Directrices e | |developers-reference|V:0, I:5 |2601 |información para | | | | |desarrolladores de | | | | |Debian | |--------------------+-----------+------+-----------------------| |debmake-doc |I:0 |11701 |Guía para Mantenedores | | | | |de Debian | |--------------------+-----------+------+-----------------------| |debian-history |I:0 |4692 |Historia del Proyecto | | | | |Debian | |--------------------+-----------+------+-----------------------| |debian-faq |I:865 |790 |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 proporcionar privilegios de acceso a determinados dispositivos y determinados archivos debería considerar usar grupos para proporcionar 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 proporcionar 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 significa 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     Permisos del sistema de archivos de Unix-like se definen para 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 se refieren a "mundo" y "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 indican que se     puede leer los archivos que contiene, sí no también permite ver 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 archivosal 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 realmente es. Si se fija en las primeras columnas (de la 2 a la 10) de la salida de la orden «ls     -l» y lee en binario (base 2) la representación de los permisos del archivo («-» siendo «0» y cualquiera de «rwx» un «1»), la conversión a octal (base 8) representarían 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» también puede ser utilizada. 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) + Ejecute "kill -TERM -1" y realice algunas acciones de reparación como "systemctl restart NetworkManager.service". + Cierre de sesión a través del menú GUI e inicio de sesión.     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.) En el sistema Debian los dispositivos hardware son también     archivos. Si tiene problemas para que un usuario acceda a dispositivos como el CD-ROM o dispositivos de memoria USB, podría solucionarse añadiendo el 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 series 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 | |-------+-------------------------------------------------------| |vídeo |dispositivo de vídeo | |-------+-------------------------------------------------------| |escáner|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 porví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 |ejecuta sudo sin su contraseña | |-------+-------------------------------------------------------| |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     Ver 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     «netstat -an» ofrece una visión muy útil de los «sockets» abiertos en el sistema. 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 el subárboles de directorios «/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 ordensysctl(8) o de su archivo de configuración « /etc/sysctl.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 9.5.6, “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 | |------------+--------------------------------------------------| |Insertar o |marcar el fichero para seleccionar varios para | |Ctrl-T |otra 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:838, |7175 |Sí |órdenes GNU | | |I:999 | | |Bourne Again | | | | | |SHell (estándar | | | | | |de facto) | |---------------+-----------+------+----------+-----------------| | | | | |terminación | |bash-completion|V:32, I:933|1454 |N/A |programable para | | | | | |la shell bash | |---------------+-----------+------+----------+-----------------| | | | | |Intérprete de | | |V:884, | | |órdenes Debian | |dash |I:997 |191 |Sí |Almquist, bueno | | | | | |para archivos de | | | | | |órdenes | |---------------+-----------+------+----------+-----------------| | | | | |Intérprete de | | | | | |órdenes Z: un | |zsh |V:40, I:73 |2463 |Sí |intérprete de | | | | | |órdenes con | | | | | |muchas mejoras | |---------------+-----------+------+----------+-----------------| | | | | |TENEX C Shell: | |tcsh |V:6, I:20 |1355 |No |una versión | | | | | |mejorada de | | | | | |Berkeley csh | |---------------+-----------+------+----------+-----------------|     | | | | |Versión de el | |mksh |V:6, I:11 |1579 |Sí |intérprete de | | | | | |órdenes Korn | |---------------+-----------+------+----------+-----------------| | | | | |Intérprete de | |csh |V:1, I:6 |339 |No |órdenes OpenBSD | | | | | |C, una versión de| | | | | |Berkeley csh | |---------------+-----------+------+----------+-----------------| | | | | |Intérprete de | | | | | |órdenes | | | | | |Stand-alone con | |sash |V:0, I:5 |1157 |Sí |órdenes internas | | | | | |(no es el | | | | | |estándar «/usr/ | | | | | |bin/sh») | |---------------+-----------+------+----------+-----------------| | | | | |la versión AT&T | |ksh |V:1, I:10 |61 |Sí |actual del | | | | | |intérprete de | | | | | |órdenes Korn | |---------------+-----------+------+----------+-----------------| | | | | |implementación | |rc |V:0, I:1 |178 |No |del intérprete de| | | | | |órdenes rc de AT&| | | | | |T Plan 9 | |---------------+-----------+------+----------+-----------------| | | | | |Intérprete de | | | | | |órdenes que | | | | | |cumple con las | |posh |V:0, I:0 |190 |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) | | |----------------------------+----------------------------------| |flecha arriba |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 |ayuda|solo |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 |:solamente |cierre todas las demás | | | |ventanas abiertas | |---------------+----------------+------------------------------| |NORMAL |¿establecer no |comprobar si vim está en el | | |compatible? |modo incompatible | |---------------+----------------+------------------------------|     |NORMAL |: establecer no |establecer vim en el modo | | |compatible |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 | |------------------+--------------------------------------------| |whowhoami |muestra el nombre del usuario actual | |------------------+--------------------------------------------| | |muestra la identidad del usuario actual | |id |(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| |nombre_de_la_orden|«nombre_de_la_orden» | |------------------+--------------------------------------------| |which |, , | |nombre_de_la_orden| | |------------------+--------------------------------------------| |type |muestra información de la orden « | |nombre_de_la_orden|nombre_de_la_orden» | |------------------+--------------------------------------------| |apropos |encuentra órdenes relacionadas con la « | |palabra_clave |palabra_clave» | |------------------+--------------------------------------------| |man -k |, , | |palabra_clave | | |------------------+--------------------------------------------| |whatis |muestra una descripción de una línea de la | |nombre_de_la_orden|orden «nombre_de_la_orden» | |------------------+--------------------------------------------| |man -a |muestra la descripción de la orden « | |nombre_de_la_orden|nombre_de_la_orden» (al estilo Unix) | |------------------+--------------------------------------------| |info |muestra una descripción detallada de la | |nombre_de_la_orden|orden «nombre_de_la_orden» (al estilo GNU) | |------------------+--------------------------------------------| | |relación el contenido del directorio | |ls |(excluye 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 | |ls -A |todos los archivos y directorios, a saber, | | |oculta «..» y «.») | |------------------+--------------------------------------------| |ls -la |relación todo el contenido del directorio | | |con información detallada | |------------------+--------------------------------------------| | |relación el contenido completo del | |ls -lai |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 | |cd foo |en el 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 | |------------------+--------------------------------------------| | |crea un archivo «foo» con el contenido | |foo |descomprimido de «README.gz» | |------------------+--------------------------------------------| |zcat README.gz >> |adjunta el contenido descomprimido de | |foo |«README.gz» al final del archivo «foo» (si | | |no existe, lo creará 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". * Los gestores de inicio de sesión como gdm3 pueden restablecer     las variables de entorno para la sesión de GUI por "~ /.profile". * 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 | |usuario_normal|órdenes de un usuario normal | |--------------+------------------------------------------------| |/home/ |programa ejecutándose desde el menú en el | |usuario_normal|escritorio gráfico de un usuario normal | |--------------+------------------------------------------------| |/home/ |programa ejecutándose como superusuario con | |usuario_normal|«sudo 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 | descripción | |de la orden| | |-----------+---------------------------------------------------| |orden & |ejecución en segundo plano de la orden en un | | |intérprete de órdenes hijo | |-----------+---------------------------------------------------| |orden1 | |envía a la tubería la salida estándar de la orden1 | |orden2 |a la entrada estándar de la orden2 (se ejecutan de | | |forma concurrente ) | |-----------+---------------------------------------------------| |orden1 2>&1|envía a la tubería la salida estándar y el error | || orden2 |estándar de la orden1 a la entrada estándar de la | | |orden2 (se ejecutan de forma concurrente ) | |-----------+---------------------------------------------------| |orden1 ; |ejecuta la orden1 y la orden2 de forma secuencial | |orden2 | | |-----------+---------------------------------------------------| |orden1 && |ejecuta la orden1; y si ha tenido éxito, ejecuta la| |orden2 |orden2 secuencialmente (devuelve éxito si tanto la | | |orden1 como la orden2 finalizan con éxito) | |-----------+---------------------------------------------------| |orden1 || |ejecuta la orden1; si no tiene éxito, se ejecuta la| |orden2 |orden2 de forma secuencial (devuelve éxito si | | |orden1 o orden2 se ejecutan con éxito) |     |-----------+---------------------------------------------------| |orden > foo|redirecciona la salida estándar de la orden al | | |archivo foo (y si existe lo sobreescribe) | |-----------+---------------------------------------------------| |orden 2> |redirecciona el error estándar de orden al archivo | |foo |foo (sobreescribiendolo) | |-----------+---------------------------------------------------| |orden >> |redirecciona la salida estándar de orden al | |foo |archivofoo (concatenándola) | |-----------+---------------------------------------------------| |orden 2>> |redirecciona el error estándar de orden al archivo | |foo |foo (concatenándola) | |-----------+---------------------------------------------------| |orden > foo|redirecciona salida estándar y el error estándar de| |2>&1 |orden al archivo foo | |-----------+---------------------------------------------------| |orden < foo|envía a la entrada estándar de la orden a un | | |archivo foo | |-----------+---------------------------------------------------| |orden << |envía a la entrada estándar de la orden a las | |delimitador|líneas siguientes hasta que encuentra un | | |«delimitador» (aquí el documento) | |-----------+---------------------------------------------------| | |envía a la entrada estándar de la orden a las | |orden <<- |líneas siguientes hasta que se encuentre con el | |delimitador|«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     $ foo $ exec 3bar # 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). + pcregrep(1) del paquete pcregrep 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 | | |* | | |--------+------+-----------------------------------------------| |\+ \? \(| | | |\) \{ \}|  |BRE solo «\» escapó metacaracteres | |\| | | | |--------+------+-----------------------------------------------| | |+ ? ( | | |  |) { } |ERE solo no"\ " escapó de los metacaracteres | | || | | |--------+------+-----------------------------------------------| |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| |haga coincidir una de las expresiones regulares| |\) |r2) |identificadas por «r1» o «r2» y tratela 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. De este modo, 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 tiene 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 cadena de sustitución Perl, se utiliza "$&" 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 < 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 | || xargs -n 1 orden |para 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 | |---------------------------+-----------------------------------| || grep -e |selecciona las líneas de la tubería| |patrón_de_expresión_regular|que encajan con el | | |patrón_de_expresión_regular | |---------------------------+-----------------------------------| || grep -v -e |selecciona las líneas de la tubería| |patrón_de_expresión_regular|que 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 | |---------------------------+-----------------------------------| | |selecciona el tercer campo de cada | || awk -F'\t' '{ print $3 }'|línea de la tubería utilizando como| | |separador el tabulador | |---------------------------+-----------------------------------| | |elimina los retornos de carro y | || col -bx |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: bookworm.     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/*.source". 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 74165 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:912, |6388 |paquetes de bajo nivel | | |I:999 | |para Debian (basado en | | | | |archivos) | |-------------------+-----------+------+------------------------| | | | |Front-end de APT para | |apt |V:865, |4318 |administrar paquetes con| | |I:999 | |CLI: apt/apt-get/ | | | | |apt-cache | |-------------------+-----------+------+------------------------| | | | |Front-end de APT para | | | | |gestionar paquetes de | |aptitude |V:48, I:253|4389 |forma interactiva con | | | | |consola de pantalla | | | | |completa: aptitude(8) | |-------------------+-----------+------+------------------------| | | | |Front-end de APT para | |tasksel |V:34, I:980|347 |instalar las tareas | | | | |seleccionadas: tasksel | | | | |(8) | |-------------------+-----------+------+------------------------| | | | |paquete mejorado de APT,| | |V:182, | |para permitir la | |unattended-upgrades|I:278 |301 |instalación automática | | | | |de actualizaciones de | | | | |seguridad |     |-------------------+-----------+------+------------------------| | |V:153, | |Centro de software para | |gnome-software |I:263 |3085 |GNOME (front-end GUI | | | | |APT) | |-------------------+-----------+------+------------------------| | | | |gestor de paquetes | |synaptic |V:46, I:375|7627 |gráfico (interfaz de GTK| | | | |APT) | |-------------------+-----------+------+------------------------| | | | |utilidades de APT: | |apt-utils |V:379, |1065 |apt-extracttemplates(1),| | |I:998 | |apt-ftparchive(1) y | | | | |apt-sortpkgs(1) | |-------------------+-----------+------+------------------------| | | | |herramienta de | |apt-listchanges |V:358, |398 |notificación de cambios | | |I:872 | |en el histórico de | | | | |paquetes | |-------------------+-----------+------+------------------------| | | | |relación de bugs | |apt-listbugs |V:6, I:8 |477 |críticos después de cada| | | | |instalación APT | |-------------------+-----------+------+------------------------| | | | |utilidad APT para la | |apt-file |V:17, I:67 |89 |búsqueda de paquetes — | | | | |interfaz de línea de | | | | |órdenes | |-------------------+-----------+------+------------------------| | | | |relación de dependencias| |apt-rdepends |V:0, I: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. * 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 ("trixie" durante el ciclo de publicación bookworm-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. * Hacer el sistema de arranque dual instalando la suite stable del sistema Debian en otra partición. * Ten a mano el CD de instalación para un arranque de recuperación del sistema.     * 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).     Para el sistema bookworm con el típico acceso HTTP, la lista de las fuentes al estilo de una línea como la siguiente: deb http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free deb-src http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free     deb http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free deb-src http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free     Alternativamente, la lista de fuentes equivalente en formato deb822 es la siguiente. Types: deb deb-src URIs: http://deb.debian.org/debian/ Suites: bookworm Components: main non-free-firmware contrib non-free     Types: deb deb-src URIs: http://security.debian.org/debian-security/ Suites: bookworm-security Components: main non-free-firmware contrib non-free     Los puntos clave de las listas de las fuentes son los siguientes. * Formato de una sola línea + Tus archivos con la definición se encuentran en los archivos "/etc/apt/sources.list" y "/etc/apt/ sources.list.d/*.list". + Cada línea define la fuente de los datos para el sistema APT. + La línea "deb" define el paquete binario. + La línea "deb-src" define los paquetes fuente. + El primer argumento es la URL root del archivo de Debian. + El segundo argumento es el nombre de la distribución utilizando el nombre de la suite o el nombre en clave. + el tercero y siguientes son la relación de nombres de     área válidos del archivo de Debian. * El estilo del formato es Deb822 + Tus definiciones se encuentran en los archivos "/etc/apt/ sources.list.d/*.source". + 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 "bookworm" o "trixie" 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     "bookworm", 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 bookworm. 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 |bookworm |cuasiestática tras | |debian/ | | |exhaustivas | | | | |comprobaciones | |-------------------+-----------------------+-------------------------+-----------------------| |https:// | | |Liberación dinámica de | |deb.debian.org/ |testing |trixie |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|bookworm-proposed-updates|próxima versión stable | |debian/ | | |(opcional) | |-------------------+-----------------------+-------------------------+-----------------------| | | | |Subconjunto del | | | | |conjunto | |https:// | | |stable-proposed-updates| |deb.debian.org/ |stable-updates |bookworm-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 |bookworm-backports |principalmente de la | |debian/ | | |versión testing | | | | |(opcional) | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Actualizaciones de | |security.debian.org|stable-security |bookworm-security |seguridad para la | |/debian-security/ | | |versión stable | | | | |(importante) | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |El equipo de seguridad | |security.debian.org|testing-security |trixie-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 |72806 |Compatible con DFSG y sin | | | |dependencia de non-free | |-----------------+--------+------------------------------------| | | |no compatible con DFSG, firmware |     |non-free-firmware|39 |necesario para una experiencia | | | |razonable de la instalación del | | | |sistema | |-----------------+--------+------------------------------------| |contrib |356 |cumplen con DFSG pero con | | | |dependencias con non-free | |-----------------+--------+------------------------------------| | | |No cumple con las Directrices de | |non-free |964 |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 = | |bookworm |bookworm |trixie |sid | |----------------+--------------+--------------+----------------| |después de la |nombre de |nombre de |nombre de | |publicación de |publicación = |publicación = |publicación = | |trixie |trixie |forky |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 no libre ni el firmware no libre ni contribución.     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» + Declara una dependencia débil. Muchos usuario podrían beneficiarse de su instalación si bien tendrán una funcionalidad suficiente 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», «Imcompatible» 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. Flujo de hechos de las órdenes de gestión de paquetes     Aquí hay un resumen del flujo de hechos simplificado del manejo de un paquete 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. Ejecuta el archivo de órdenes 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. Ejecuta el archivo de órdenes 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/ | | |nombre_del_paquete» | |---------------------------------+-----------------------------| |El informe del error, si se |sensible-browser «https:// | |conoce su número de error |bugs.debian.org/ | | |número_de_error» | +---------------------------------------------------------------+ 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« * Los paquetes se eligen por paquetes que dependen de ellos (por ejemplo, gcc depende de gcc-10) * 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 apt | Sintaxis de | Sintaxis de | descripción | | | aptitude |apt-get/apt-cache| | |------------------+-----------------+-----------------+-----------------| | | | |actualiza la | |apt update |aptitude update |apt-get update |metainformación | | | | |de los paquetes | |------------------+-----------------+-----------------+-----------------| | | | |instala la | | |aptitude install |apt-get install |versión candidata| |apt install foo |foo |foo |del paquete «foo»| | | | |y sus | | | | |dependencias | |------------------+-----------------+-----------------+-----------------| | | | |actualiza los | | | | |paquetes ya | | |aptitude | |instalados a las | |apt upgrade |safe-upgrade |apt-get 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 | | |aptitude remove |apt-get remove |paquete «foo» sin| |apt remove foo |foo |foo |eliminar sus | | | | |archivos de | | | | |configuración | |------------------+-----------------+-----------------+-----------------| | | | |elimina los | | | |apt-get |paquetes | |apt autoremove |N/A |autoremove |autoinstalados | | | | |que ya no son | | | | |necesarios | |------------------+-----------------+-----------------+-----------------| | | | |elimina el |     |apt purge foo |aptitude purge |apt-get purge foo|paquete «foo» y | | |foo | |sus archivos de | | | | |configuración | |------------------+-----------------+-----------------+-----------------| | | | |limpia por | | | | |completo el | |apt clean |aptitude clean |apt-get clean |repositorio local| | | | |de los archivos | | | | |de paquetes | | | | |descargados | |------------------+-----------------+-----------------+-----------------| | | | |limpia el | | | | |repositorio local| |apt autoclean |aptitude |apt-get autoclean|de los archivos | | |autoclean | |de paquetes | | | | |descargados que | | | | |son obsoletos | |------------------+-----------------+-----------------+-----------------| | | | |muestra | |apt show foo |aptitude show foo|apt-cache show |información | | | |foo |detallada sobre | | | | |el paquete «foo» | |------------------+-----------------+-----------------+-----------------| | | | |busca paquetes | |apt search |aptitude search |apt-cache search |que concuerden | |expresión_regular |expresión_regular|expresión_regular|con | | | | |expresión_regular| |------------------+-----------------+-----------------+-----------------| | | | |argumenta la | | | | |razón por la que | |N/A |aptitude why |N/A |el paquete que | | |expresión_regular| |concuerda con la | | | | |expresión_regular| | | | |debe instalarse | |------------------+-----------------+-----------------+-----------------| | | | |argumenta la | | | | |razón por la que | | |aptitude why-not | |el paquete que | |N/A |expresión_regular|N/A |concuerda con la | | | | |expresión_regular| | | | |no debe | | | | |instalarse | |------------------+-----------------+-----------------+-----------------| | | | |lista los | |apt list |aptitude search |apt-mark |paquetes | |--manual-installed|'~i!~M' |showmanual |instalados | | | | |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 | |------------------+--------------------------------------------| |Intro |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 | |---------------+-----------------------------------------------| |Vista del |ver Tabla 2.10, “La clasificación de la vista | |paquete |de paquetes estándar” (por defecto) | |---------------+-----------------------------------------------| |Recomendaciones|relación de paquete que se recomiendan por | |de auditoría |algún paquete marcado para instalación pero sin|     | |instalar por el momento | |---------------+-----------------------------------------------| |Relación plana |relación de paquetes sin clasificar (para usar | |de paquetes |con expresiones regulares) | |---------------+-----------------------------------------------| |Buscador de |relación de paquetes clasificados de acuerdo a | |etiquetas |sus etiquetas Debian (debtags) | |---------------+-----------------------------------------------| |Vista del |lista de paquetes agrupados por paquetes fuente| |Paquete Fuente | | +---------------------------------------------------------------+ 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 | |-------------------+-------------------------------------------| |Paquetes |la relación organizada de paquetes según | |actualizables |sección → área → paquete | |-------------------+-------------------------------------------| |Nuevos paquetes |, , | |-------------------+-------------------------------------------| |Paquetes instalados|, , | |-------------------+-------------------------------------------|     |Paquetes no |, , | |instalados | | |-------------------+-------------------------------------------| |Paquetes creados | | |localmente y |, , | |obsoletos | | |-------------------+-------------------------------------------| |Paquetes virtuales |relación de paquetes con la misma función | |-------------------+-------------------------------------------| | |relación de paquetes con diferentes | |Tareas (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 del nombre_del_paquete se trata como el encaje exacto de la cadena al nombre del paquete al menos que empiece explícitamente con «~» para ser un 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 |~nnombre_de_la_expresión_regula | |encaja | | |----------------+--------------------------------------------------| |encaja en la |~ddescripcion_de_la_expresión_regular | |descripción | | |----------------+--------------------------------------------------| |nombre de la |~texpresión_regular_de_tareas | |tarea que encaja| | |----------------+--------------------------------------------------| |encaja con las |~Gexpresion_regular_de_etiquetas | |debtag | | |----------------+--------------------------------------------------| |encaja con el |~mexpresión_regular_del_desarrollador | |desarrollador | | |----------------+--------------------------------------------------| |encaja con la | | |sección del |~sexpresión_regular_de_sección | |paquete | | |----------------+--------------------------------------------------| |encaja con la | | |versión del |~Vexpresión_regular_de_la_versión | |paquete | | |----------------+--------------------------------------------------| |encaja con la |~A{bookworm,trixie,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[tipo:]patrón | |que tienen una | | |dependencia tipo| | |----------------+--------------------------------------------------| |encaja el patrón| | |con paquetes que| | |tienen una |~DB[tipo:]patrón | |dependencia rota| | |de tipo | | |----------------+--------------------------------------------------| |encaja con | | |paquetes en los | | |cuales el patrón| | |encaja con |~R[tipo:]patrón | |paquetes que | | |declaran una | | |dependencia tipo| | |----------------+--------------------------------------------------| |coinciden con | | |paquetes a los | | |que el paquete | | |coincidente |~RB[escribe:]patrón | |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 filtro patrón | |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. * «~Ptérmino» == «~Dprovides:término»     * «~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     bookworm-como-estable, debes sustituir "bookworm " en la lista de fuentes por ejemplo de Sección 2.1.5, “Fundamentos del archivo de Debian” con "trixie" 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.     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 | |COLUMNS=120 dpkg -l patrón_del_nombre_del_paquete |paquetes | | |instalados para| | |el informe de | | |errores | |-------------------------------------------------------------+---------------| | |enumera el | |dpkg -L nombre_del_paquete |contenido de un| | |paquete | | |instalado | |-------------------------------------------------------------+---------------| | |relación las | | |páginas del | |dpkg -L nombre_del_paquete | egrep '/usr/share/man/man.*/.+' |manual para un | | |paquete | | |instalado | |-------------------------------------------------------------+---------------| | |enumera los | | |paquetes | | |instalados que | |dpkg -S patrón_del_nombre_de_archivo |tienen un | | |archivo que | | |encaja con el | | |patrón | |-------------------------------------------------------------+---------------| | |enumera los | | |paquetes en el | |apt-file search patrón_nombre_de_archivo |repositorio que| | |encajan con el | | |nombre de | | |archivo | |-------------------------------------------------------------+---------------| | |enumera el | | |contenido de | |apt-file list patrón_nombre_de_paquete |los paquetes | | |del repositorio| | |que encajan | |-------------------------------------------------------------+---------------| |dpkg-reconfigure nombre_del_paquete |reconfigura el | | |paquete dado | |-------------------------------------------------------------+---------------| | |reconfigura el | | |paquete dado | |dpkg-reconfigure -plow package_name |realizando el | | |mayor número de| | |preguntas | |-------------------------------------------------------------+---------------| | |reconfigura los| | |paquetes desde | |configure-debian |el menú de | | |pantalla | | |completa | |-------------------------------------------------------------+---------------| | |auditoría del | | |sistema | |dpkg --audit |referente a | | |paquete | | |instalados | | |parcialmente | |-------------------------------------------------------------+---------------| | |configura todos| |dpkg --configure -a |los paquetes | | |instalados | | |parcialmente | |-------------------------------------------------------------+---------------| | |muestra la | | |versión, la | | |prioridad y la | |apt-cache policy nombre_del_paquete_binario |información del| | |repositorio de | | |un paquete | | |binario | |-------------------------------------------------------------+---------------| | |muestra la | | |versión | |apt-cache madison nombre_del_paquete |disponible y la| | |información del| | |repositorio de | | |un paquete | |-------------------------------------------------------------+---------------| | |muestra la | | |información del| |apt-cache showsrc nombre_del_paquete_binario |paquete fuente | | |que corresponde| | |con el paquete | | |binario | |-------------------------------------------------------------+---------------| | |instala los |     | |paquetes | |apt-get build-dep nombre_del_paquete |requeridos para| | |construir el | | |paquete | |-------------------------------------------------------------+---------------| | |instala los | | |paquetes | |aptitude build-dep nombre_del_paquete |requeridos para| | |construir el | | |paquete | |-------------------------------------------------------------+---------------| | |descarga la | |apt-get source nombre_del_paquete |fuente (desde | | |el repositorio | | |estándar) | |-------------------------------------------------------------+---------------| | |descarga el | | |código del | |dget URL del archivo dsc |paquete (desde | | |otro | | |repositorio) | |-------------------------------------------------------------+---------------| | |construye el | | |árbol de las | | |fuentes para un| |dpkg-source -x nombre_del_paquete_version-versión_de_debian |conjunto de | |.dsc |paquetes fuente| | |(«orig.tar.gz» | | |y | | |«debian.tar.gz»| | |/«*.diff.gz») | |-------------------------------------------------------------+---------------| | |construye el/ | | |los paquete(s) | |debuild binary |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 nombre_del_paquete_versión-versión_de_debian_ |instala un | |arquitectura.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 nombre_del_paquete_versión-versión_de_debian_ |paquete(s) | |arquitectura.dsc |locales en el | | |sistema | |-------------------------------------------------------------+---------------| | |guardar | | |información de | |dpkg --get-selections '*' >selección.txt |estado de | | |selección de | | |nivel de | | |paquete dpkg | |-------------------------------------------------------------+---------------| | |asigna la | | |información de | |dpkg --set-selections /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. 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 APT-system o "sudo dpkg -i ...".     Luego, use los siguientes comandos para configurar todos los paquetes parcialmente instalados.     # dpkg --configure -a 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. 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.4. 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.5. 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, sigue Sección 2.6, “Recuperación de un sistema”. 2.6.6. Recuperación con la orden dpkg Ya que dpkg es una herramienta de paquetes de muy bajo nivel,     puede ser útil en situaciones críticas como un sistema que no inicia sin conexión a la red. Asumamos que el paquete foo esta roto y necesita ser sustituido. 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 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.     Si el sistema no se puede iniciar desde el disco duro, se pueden encontrar otras formas de iniciarlo. 1. Iniciar el sistema mediante un CD de instalación de Debian en modo rescate.     2. Montar el sistema que no inicia en el disco duro en «/ destino». 3. Instale la versión anterior del paquete foo de la siguiente manera.     # dpkg --root /target -i /path/to/foo_old_version_arch.deb     Este ejemplo funciona incluso si la orden dpkg del disco duro está roto. Sugerencia     Cualquier sistema GNU/Linux iniciado por otro sistema en disco duro, CD live GNU/Linux, USB arrancable, o inicio mediante red se puede usar para recuperar un sistema roto. 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. 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 bookworm. 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 ("bookworm-updates" durante el ciclo de     publicación de bookworm-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/ bookworm main non-free-firmware contrib non-free     deb http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free deb http://deb.debian.org/debian/ bookworm-updates main non-free-firmware contrib non-free deb http://deb.debian.org/debian/ bookworm-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 bookworm-updates.     * Solo los paquetes antiguos instalados de forma manual desde bookworm-backports se actualizan a los nuevos de bookworm-backports. En el caso de que se desee instalar manualmente un paquete     llamado «nombre_del_paquete» con su dependencia del repositorio bookworm-backports, se usa la siguiente orden mientras se cambia la distribución objetivo con la opción «-t».     $ sudo apt-get install -t bookworm-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 novato 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 forma en que se comparan las cadenas de caracteres de las versiones se pueden 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.6, “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/ bookworm-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 novato 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 novato 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 novato 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 novato 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.6, “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/ trixie 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 la 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 | |-------------+-----------+------+------------------------------| | | | |Servidor de caché proxy para | |approx |V:0, I:0 |7124 |archivos del repositorio | | | | |Debian (programa OCaml | | | | |compilado) |     |-------------+-----------+------+------------------------------| | | | |Proxy caché para archivos de | |apt-cacher |V:0, I:0 |266 |código fuente y paquetes | | | | |Debian (programa Perl) | |-------------+-----------+------+------------------------------| | | | |Proxy caché para la | |apt-cacher-ng|V:4, I:4 |1816 |distribución de paquetes de | | | | |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 | | | | | | |comprender | | | | | | |las | |grub-efi-amd64|I:339 |184 |Soporte |GRUB |particiones| | | | | |UEFI |de disco y | | | | | | |los | | | | | | |sistemas de| | | | | | |archivos | | | | | | |como vfat, | | | | | | |ext4, …. | | | | | | |(UEFI) | |--------------+-----------+------+---------+--------+-----------| | | | | | |Es lo | | | | | | |bastante | | | | | | |inteligente| | | | | | |para | | | | | | |comprender | | | | | | |las | |grub-pc |V:21, I:634|557 |Soporte |GRUB 2 |particiones| | | | | | |de disco y | | | | | | |los | | | | | | |sistemas de| | | | | | |archivos | | | | | | |como vfat, | | | | | | |ext4, …. | | | | | | |(BIOS) | |--------------+-----------+------+---------+--------+-----------| | | | | | |Imagen de | | | | | | |rescate de | | | | | | |inicio GRUB|     |grub-rescue-pc|V:0, I:0 |6625 |Soporte |GRUB 2 |2 (CD and | | | | | | |disquete) | | | | | | |(versión PC| | | | | | |/BIOS) | |--------------+-----------+------+---------+--------+-----------| | | | | | |Entiende el| | | | | | |sistema de | | | | | | |archivos | |syslinux |V:3, I:36 |344 |Soporte |Isolinux|ISO9660. Es| | | | | | |usado por | | | | | | |arranque de| | | | | | |CD. | |--------------+-----------+------+---------+--------+-----------| | | | | | |Entiende el| | | | | | |sistema de | | | | | | |archivos | | | | | | |MSDOS | |syslinux |V:3, I:36 |344 |Soporte |Syslinux|(FAT). Es | | | | | | |usado para | | | | | | |el arranque| | | | | | |de | | | | | | |disquete. | |--------------+-----------+------+---------+--------+-----------| | | | | | |Nuevo | | | | | | |sistema | | | | | | |para el | |loadlin |V:0, I:0 |90 |Soporte |Loadlin |arranque | | | | | | |del sistema| | | | | | |FreeDOS/ | | | | | | |MSDOS. | |--------------+-----------+------+---------+--------+-----------| | | | | | |Este el | | | | | | |software | | | | | | |libre que | | | | |No |MBR por |sustituye | |mbr |V:0, I:4 |47 |soportado|Neil |MBR de | | | | | |Turton |MSDOS. Solo| | | | | | |comprende | | | | | | |particiones| | | | | | |de disco. | +----------------------------------------------------------------+ Aviso     No pruebe cargadores de inicio sin tener un medio de inicio de rescate (USB, CD o disquete) creado de las imágenes del paquete grub-rescue-pc. Ello le permite iniciar su sistema incluso sin un cargador de inicio operativo en el disco duro. 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 | | +---------------------------------------------------------------+ Sugerencia     Puedes habilitar la visualización de los mensajes del registro de arranque del kernel eliminando quiet en "/boot/grub/grub.cfg". Para el cambio persistente, edita la línea "GRUB_CMDLINE_LINUX_DEFAULT="quiet"" en "/etc/default/grub". Sugerencia     Puedes personalizar la imagen de presentación de GRUB configurando la variable GRUB_BACKGROUND en "/etc/default/grub" apuntando al archivo de imagen o colocando el archivo de imagen en "/ boot/grub/".     Consulte «info grub» y grub-install(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 El sistema normal Debian es la cuarta fase del proceso de arranque el cual comienza con el sistema mini-Debian. El núcleo     del sistema para el sistema mini-Debian continua ejecutándose en este entorno. El sistema de archivos raíz cambio del que existe en memoria a uno real sobre el sistema de archivos en disco duro. 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:860, |11168 |en actos con | | |I:966 | |concurrencia (opción a | | | | |sysvinit) | |-------------------+-----------+------+------------------------| | | | |sistema de | | | | |inicialización para | |cloud-init |V:3, I:5 |2870 |instancias de la | | | | |infraestructura en la | | | | |nube | |-------------------+-----------+------+------------------------| | | | |las páginas de manual y | |systemd-sysv |V:832, |80 |los enlaces necesarios | | |I:964 | |para que systemd | | | | |reemplace a sysvinit | |-------------------+-----------+------+------------------------| | |V:699, | |herramientas de ayuda | |init-system-helpers|I:974 |130 |para cambiar entre | | | | |sysvinit y systemd | |-------------------+-----------+------+------------------------| | | | |archivos de órdenes de | |initscripts |V:33, I:133|198 |inicio y parada del | | | | |sistema | |-------------------+-----------+------+------------------------| |sysvinit-core |V:4, I:5 |361 |Programa estilo System-V| | | | |init(8) | |-------------------+-----------+------+------------------------|     | | | |Mecanismo de cambio del | |sysv-rc |V:66, I:145|88 |nivel de ejecución | | | | |estilo System-V | |-------------------+-----------+------+------------------------| | |V:897, | |Programas estilo | |sysvinit-utils |I:999 |102 |System-V (startpar(8), | | | | |bootlogd(8), …) | |-------------------+-----------+------+------------------------| | | | |Funcionalidad de | |lsb-base |V:634, |12 |secuencia de órdenes | | |I:675 | |«Linux Standard Base« | | | | |init 3.2 | |-------------------+-----------+------+------------------------| | | | |herramientas para | | | | |organizar la secuencia | |insserv |V:88, I:144|132 |de arranque usando las | | | | |dependencias del archivo| | | | |de órdenes init.d LSB | |-------------------+-----------+------+------------------------| | | | |Reinicio (reinicio | |kexec-tools |V:1, I:6 |316 |caliente) kexec(8) de la| | | | |herramienta kexec | |-------------------+-----------+------+------------------------| |systemd-bootchart |V:0, I:0 |131 |analizador de desempeño | | | | |del proceso de arranque | |-------------------+-----------+------+------------------------| |mingetty |V:0, I:2 |36 |únicamente para consola | | | | |getty(8) | |-------------------+-----------+------+------------------------| |mgetty |V:0, I:0 |315 |sustituto de «modem« | | | | |inteligente getty(8) | +---------------------------------------------------------------+ Sugerencia     Ver la wiki de Debian : AcelerandoElProcesodeArranque para los consejos actualizados para mejorar la velocidad del proceso de arranque. 3.2. Systemd 3.2.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 traducen 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.2.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.2.1, “Arranque de systemd”. 3.3. 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.4. 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.5. 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.6. 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.7. Configuración del sistema 3.7.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.7.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.7.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.7.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.7.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.8. 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.9, “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.9. 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.8, “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 «| |nombre_de_usuario |nombre_de_usuario» | |-------------------+-------------------------------------------| |getent shadow |navega por la información de cuenta | |nombre_de_usuario |«oculta« de «nombre_de_usuario» |     |-------------------+-------------------------------------------| |getent group |navega por la información del grupo « | |nombre_del_grupo |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:25, I:251|387 |mkpasswd|funcionalidades de la | | | | | |biblioteca crypt(3) | |-------+-----------+------+--------+---------------------------| | |V:841, | |openssl |resúmenes criptográficos de| |openssl|I:995 |2111 |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:889, | |Módulos de acreditación | |libpam-modules |I:999 |984 |conectables (servicios | | | | |básicos) | |-------------------+-----------+------+------------------------| |libpam-ldap |V:0, I:6 |249 |PAM permite conectar con| | | | |servicios LDAP | |-------------------+-----------+------+------------------------| |libpam-cracklib |V:0, I:8 |117 |PAM para dar soporte a | | | | |cracklib | |-------------------+-----------+------+------------------------| | | | |Módulo de autenticación | |libpam-systemd |V:571, |627 |conectable (PAM) para | | |I:936 | |logind para registrar | | | | |sesiones de usuario | |-------------------+-----------+------+------------------------| |libpam-doc |I:0 |152 |PAM (documentación en | | | | |html y texto) | |-------------------+-----------+------+------------------------| | | | |Biblioteca GNU C: | | |V:917, | |bibliotecas compartidas | |libc6 |I:999 |12988 |que ofrecen también el |     | | | |intercambio del servicio| | | | |de nombres | |-------------------+-----------+------+------------------------| |glibc-doc |I:8 |3503 |Biblioteca GNU C: | | | | |Manpages | |-------------------+-----------+------+------------------------| | | | |Biblioteca GNU C: Manual| |glibc-doc-reference|I:4 |13841 |de Referencia en info, | | | | |formatos pdf y html | | | | |(«non-free«) | |-------------------+-----------+------+------------------------| | | | |Módulo NSS para | |libnss-mdns |I:510 |141 |resolución de nombres | | | | |DNS sin servidor DNS | |-------------------+-----------+------+------------------------| | | | |Módulo NSS para su | |libnss-ldap |I:5 |265 |integración con el | | | | |servicio de nombres por | | | | |LDAP | |-------------------+-----------+------+------------------------| | | | |Módulo NSS para utiliza | | | | |LDAP como servicio de | |libnss-ldapd |I:15 |129 |nombres (nueva | | | | |bifurcación de | | | | |libnss-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 | |nombre_de_programa|programa «nombre_del_programa»; consulte pam| | |(7) y pam.d(5) | |------------------+--------------------------------------------| | |Realice la configuración NSS con una | |/etc/nsswitch.conf|registro 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/securetty |acote el acceso a tty para el superusuario | | |por medio del módulo pam_securetty(8) | |------------------+--------------------------------------------| |/etc/security/ |acote los permisos de acceso mediante el | |access.conf |módulo pam_access(8) | |------------------+--------------------------------------------| |/etc/security/ |restrinja los grupos básicos por medio del |     |group.conf |módulo pam_group(8) | |------------------+--------------------------------------------| |/etc/security/ |asigne variables de entorno mediante el | |pam_env.conf |módulo pam_env(8) | |------------------+--------------------------------------------| | |asigne más variables de entorno mediante el | |/etc/environment |módulo pam_env(8) con el parámetro «readenv=| | |1» | |------------------+--------------------------------------------| | |establecer la configuración regional | |/etc/default/ |mediante el módulo pam_env(8) con el | |locale |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| |time.conf |el módulo pam_time(8) | |------------------+--------------------------------------------| |/etc/systemd/ |Establece la configuración del administrador| |logind.conf |de 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-ldap y libnss-ldap 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». + Debian utiliza los archivos «/etc/pam_ldap.conf» para la configuración de libpam-ldap y «/etc/pam_ldap.secret» para archivar la contraseña de root. * 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»). + Debian utiliza el archivo «/etc/libnss-ldap.conf» para la configuración de libnss-ldap. * Una contraseña segura necesita que libpam-ldap use conexiones SSL (o TLS). * La integridad de los datos necesita que libnss-ldap 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 pam_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, I:2 |110 |Pequeño demónio port-knock | | | | |knockd(1) y cliente knock(1) |     |-------------+-----------+------+------------------------------| | | | |prohibición de las IPs con | |fail2ban |V:98, I:111|2126 |múltiples errores de | | | | |acreditación | |-------------+-----------+------+------------------------------| |libpam-shield|V:0, I:0 |115 |bloquea atacantes remotos que | | | | |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. * Impide el acceso físico al disco duro * 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     Si tienes acceso físico al disco duro, puedes restablecer la contraseña con relativa facilidad siguiendo los siguientes pasos. 1. Lleve el disco duro a un ordenador que pueda configurar UEFI/ BIOS para que arranque desde un CD. 2. Arranque el sistema con un medio de rescate (disco de     arranque Debiam. Knoppix CD, GRUB CD, ...). 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/hda6 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.11, “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.5, “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) * Linux Tomoyo 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.2.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:392, |15542 |config::NM |(demonio): | | |I:459 | | |gestión de red | | | | | |automatizada | |---------------------+-----------+------+-------------------+----------------| | |V:121, | | |NetworkManager | |network-manager-gnome|I:369 |5583 |config::NM |(interfaz de | | | | | |usuario GNOME) | |---------------------+-----------+------+-------------------+----------------| | | | | |Netplan | | | | | |(generador): | | | | | |Interfaz | |netplan.io |V:1, I:5 |319 |config::NM+networkd|unificada y | | | | | |declarativa para| | | | | |los backends | | | | | |NetworkManager y| | | | | |systemd-networkd| |---------------------+-----------+------+-------------------+----------------| | | | | |herramienta | | |V:608, | | |estándar para | |ifupdown |I:979 |199 |config::ifupdown |subir o bajar la| | | | | |red (específico | | | | | |de Debian) | |---------------------+-----------+------+-------------------+----------------| |isc-dhcp-client |V:217, |2875 |config::low-level |cliente DHCP | | |I:981 | | | | |---------------------+-----------+------+-------------------+----------------| | | | | |ayudante de | |pppoeconf |V:0, I:5 |186 |config::helper |configuración | | | | | |para conexiones | | | | | |PPPoE | |---------------------+-----------+------+-------------------+----------------| | | | | |cliente que | |wpasupplicant |V:353, |3862 |config::helper |soporta WPA y | | |I:513 | | |WPA2 (IEEE | | | | | |802.11i) | |---------------------+-----------+------+-------------------+----------------| | | | | |cliente Qt de | |wpagui |V:0, I:1 |774 |config::helper |interfaz de | | | | | |usuario para | | | | | |«wpa_supplicant«| |---------------------+-----------+------+-------------------+----------------| | | | | |herramientas | | | | | |para manejar las| | |V:179, | | |Extensiones | |wireless-tools |I:244 |292 |config::helper |Inalámbricas | | | | | |Linux («Linux | | | | | |Wireless | | | | | |Extensions«) | |---------------------+-----------+------+-------------------+----------------| | | | | |herramienta para| | | | | |configurar | |iw |V:34, I:475|302 |config::helper |dispositivos | | | | | |inalámbricos en | | | | | |Linux | |---------------------+-----------+------+-------------------+----------------| | | | | |iproute2, IPv6 y| | | | | |otras | |iproute2 |V:736, |3606 |config::iproute2 |configuraciones | | |I:972 | | |de red | | | | | |avanzadas: ip | | | | | |(8), tc(8), etc | |---------------------+-----------+------+-------------------+----------------| | | | | |herramientas de | | |V:319, | | |administración | |iptables |I:718 |2414 |config::Netfilter |para el filtrado| | | | | |de paquetes y | | | | | |NAT (Netfilter) | |---------------------+-----------+------+-------------------+----------------| | | | | |herramientas de | | | | | |administración | | | | | |para filtrado de| |nftables |V:106, |182 |config::Netfilter |paquetes y NAT | | |I:701 | | |(Netfilter) | | | | | |(sucesor de | | | | | |{ip,ip6,arp,eb} | | | | | |tables) | |---------------------+-----------+------+-------------------+----------------| | | | | |prueba la | | | | | |accesibilidad a | | | | | |un equipo remoto| |iputils-ping |V:194, |122 |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:3, I:36 |50 |prueba |equipo remoto | | | | | |específico | | | | | |mediante la | | | | | |dirección ARP | |---------------------+-----------+------+-------------------+----------------| | | | | |determina la | |iputils-tracepath |V:2, I:30 |47 |prueba |ruta de red a un| | | | | |equipo remoto | |---------------------+-----------+------+-------------------+----------------| | | | | |muestra o cambia| |ethtool |V:95, I:267|739 |prueba |la configuración| | | | | |de dispositivos | | | | | |Ethernet | |---------------------+-----------+------+-------------------+----------------| | | | | |determina la | |mtr-tiny |V:5, I:46 |156 |test::low-level |ruta de red a un| | | | | |equipo remoto | | | | | |(curses) | |---------------------+-----------+------+-------------------+----------------| | | | | |determina la | |mtr |V:4, I:41 |209 |test::low-level |ruta de red a un| | | | | |equipo remoto | | | | | |(curses y GTK) | |---------------------+-----------+------+-------------------+----------------| | | | | |herramientas | | | | | |para operaciones| |gnome-nettool |V:0, I:17 |2492 |test::low-level |de información | | | | | |de red comunes | | | | | |(GNOME) | |---------------------+-----------+------+-------------------+----------------| | | | | |descubridor de | |nmap |V:25, I:199|4498 |test::low-level |red / escáner de| | | | | |puertos (Nmap, | | | | | |consola) | |---------------------+-----------+------+-------------------+----------------| | | | | |analizador de | |tcpdump |V:17, I:175|1340 |test::low-level |tráfico de red | | | | | |(Tcpdump, | | | | | |consola) | |---------------------+-----------+------+-------------------+----------------| | | | | |analizador de | |wireshark |I:45 |10417 |test::low-level |tráfico de red | | | | | |(Wireshark, GTK)| |---------------------+-----------+------+-------------------+----------------| | | | | |analizador de | |tshark |V:2, I:25 |400 |test::low-level |tráfico de red | | | | | |(consola) | |---------------------+-----------+------+-------------------+----------------| | | | | |produce un | | | | | |resumen de las | |tcptrace |V:0, I:2 |401 |test::low-level |conexiones de | | | | | |salida con | | | | | |tcpdump | |---------------------+-----------+------+-------------------+----------------| | | | | |sistema flexible| |snort |V:0, I:0 |2203 |test::low-level |de detección de | | | | | |intrusos en la | | | | | |red (Snort) | |---------------------+-----------+------+-------------------+----------------| | | | | |muestra el uso | |ntopng |V:0, I:1 |15904 |test::low-level |de red en un | | | | | |navegador web | |---------------------+-----------+------+-------------------+----------------| | | | | |clientes de red | | | | | |proporcionado | |dnsutils |V:16, I:280|276 |test::low-level |con BIND: | | | | | |nslookup(8), | | | | | |nsupdate(8), dig| | | | | |(8) | |---------------------+-----------+------+-------------------+----------------| | | | | |comprueba la | | | | | |información de | | | | | |zona DNS | |dlint |V:0, I:3 |53 |test::low-level |mediante | | | | | |consultas al | | | | | |servidor de | | | | | |nombres | |---------------------+-----------+------+-------------------+----------------| | | | | |determina una | |dnstracer |V:0, I:1 |59 |test::low-level |cadena de | | | | | |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.7.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 foo netdev 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 network-manager 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.7.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 | |--------------------+------------------------------------------| |netstat -a |encuentra todos los puertos abiertos | |--------------------+------------------------------------------| |netstat -l --inet |encuentra los puertos que están escuchando| |--------------------+------------------------------------------| |netstat -ln --tcp |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:7, I:100 |93 |muestra información del ancho de | | | | |banda usado por un interfaz de red| |---------+-----------+------+----------------------------------| |iperf |V:3, I:43 |360 |herramienta para medir el ancho de| | | | |banda del Protocolo IP | |---------+-----------+------+----------------------------------| |ifstat |V:0, I:7 |60 |Monitor de estadísticas del | | | | |interfaz | |---------+-----------+------+----------------------------------| |bmon |V:1, I:18 |144 |monitor de ancho de banda portable| | | | |y estimador de velocidad | |---------+-----------+------+----------------------------------|     | | | |archivo de órdenes que rápidamente| |ethstatus|V:0, I:3 |40 |mide rendimiento del dispositivo | | | | |de red | |---------+-----------+------+----------------------------------| |bing |V:0, I:0 |80 |comprobador del ancho de banda | | | | |estocástico empírico | |---------+-----------+------+----------------------------------| | | | |pequeño y sencillo monitor de | |bwm-ng |V:1, I:13 |95 |ancho de banda basado en la | | | | |consola | |---------+-----------+------+----------------------------------| |ethstats |V:0, I:0 |23 |monitor de estadísticas Ethernet | | | | |basado en la consola | |---------+-----------+------+----------------------------------| |ipfm |V:0, I:0 |82 |herramienta de análisis de ancho | | | | |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 uncortafuegos con estado y     traducción de direcciones de red (NAT) por medio de módulos del núcleo de Linux (Ver Sección 3.9, “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:106, | |administración para filtrado| |nftables |I:701 |182 |de paquetes y NAT | | | | |(Netfilter) (sucesor de | | | | |{ip,ip6,arp,eb}tables) | |---------------+-----------+------+----------------------------| | | | |herramientas de | |iptables |V:319, |2414 |administración de netfilter | | |I:718 | |(iptables(8) para IPv4, | | | | |ip6tables(8) para IPv6) | |---------------+-----------+------+----------------------------| | | | |herramientas de | |arptables |V:0, I:1 |100 |administración de netfilter | | | | |(arptables(8) para ARP) | |---------------+-----------+------+----------------------------| | | | |herramientas de | |ebtables |V:14, I:29 |276 |administración para | | | | |netfilter (ebtables(8) para | | | | |puente Ethernet) | |---------------+-----------+------+----------------------------| | | | |Control continuo del estado | |iptstate |V:0, I:2 |119 |de netfilter (parecido a top| | | | |(1)) | |---------------+-----------+------+----------------------------| | | | |Cortafuegos sin | |ufw |V:55, I:77 |859 |complicaciones (UFW) | | | | |programa de gestión del | | | | |firewall netfilter |     |---------------+-----------+------+----------------------------| | | | |interfaz gráfica de usuario | |gufw |V:5, I:10 |3660 |para cortafuegos sin | | | | |complicaciones (UFW) | |---------------+-----------+------+----------------------------| | | | |firewalld es un programa | |firewalld |V:11, I:16 |2613 |cortafuegos de gestión | | | | |dinámica con soporte para | | | | |zonas de red | |---------------+-----------+------+----------------------------| |firewall-config|V:0, I:3 |1163 |interfaz gráfica del usuario| | | | |para firewalld | |---------------+-----------+------+----------------------------| |shorewall-init |V:0, I:0 |88 |inicialización de Shoreline | | | | |Firewall | |---------------+-----------+------+----------------------------| | | | |Shoreline Firewall,creador | |shorewall |V:3, I:8 |3090 |del archivo de configuración| | | | |de netfilter | |---------------+-----------+------+----------------------------| | | | |Shoreline Firewall, creador | |shorewall-lite |V:0, I:0 |71 |del archivo de configuración| | | | |de netfilter (versión | | | | |simplificada) | |---------------+-----------+------+----------------------------| | | | |Shoreline Firewall, creador | |shorewall6 |V:0, I:1 |1334 |del archivo de configuración| | | | |de netfilter (versión IPv6) | |---------------+-----------+------+----------------------------| | | | |Shoreline Firewall, creador | |shorewall6-lite|V:0, I:0 |71 |del archivo de configuración| | | | |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:35, I:108|234084|X |(Navegador de | | | | | |código abierto de | | | | | |Google) | |----------------+-----------+------+--------+------------------| | | | | |Firefox (navegador| | | | | |de código abierto | |firefox |V:10, I:15 |239492|, , |de Mozilla que | | | | | |está disponible en| | | | | |Debian | | | | | |«inestable») | |----------------+-----------+------+--------+------------------| | | | | |Firefox ESR, | |firefox-esr |V:198, |228981|, , |(Versión de | | |I:435 | | |Firefox con |     | | | | |soporte extendido)| |----------------+-----------+------+--------+------------------| |epiphany-browser|V:3, I:15 |2154 |, , |conforme a GNOME, | | | | | |HIG , Epiphany | |----------------+-----------+------+--------+------------------| |konqueror |V:24, I:106|25905 |, , |KDE, Konqueror | |----------------+-----------+------+--------+------------------| | | | | |Dillo, (navegador | |dillo |V:0, I:5 |1565 |, , |ligero basado en | | | | | |FLTK) | |----------------+-----------+------+--------+------------------| |w3m |V:15, I:187|2837 |texto |w3m | |----------------+-----------+------+--------+------------------| |lynx |V:25, I:344|1948 |, , |Lynx | |----------------+-----------+------+--------+------------------| |elinks |V:3, I:20 |1654 |, , |ELinks | |----------------+-----------+------+--------+------------------| |links |V:3, I:28 |2314 |, , |Links (solo texto)| |----------------+-----------+------+--------+------------------| |links2 |V:1, I:12 |5492 |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) Atención     La suplantación de la cadena del agente de usuario puede causar efectos colaterales con Java. 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:30, I:239|486 |programa X GUI (GNOME3, suite de| | | | |trabajo en grupo) | |-----------+-----------+------+--------------------------------| |thunderbird|V:48, I:119|224760|programa X GUI (GTK, Mozilla | | | | |Thunderbird) |     |-----------+-----------+------+--------------------------------| |kmail |V:38, I:97 |23871 |programa de interfaz gráfico de | | | | |usuario X (KDE) | |-----------+-----------+------+--------------------------------| | | | |programa de terminales de | |mutt |V:16, I:149|7104 |caracteres probablemente | | | | |utilizado con vim | |-----------+-----------+------+--------------------------------| |mew |V:0, I:0 |2319 |programa de terminales de | | | | |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:217, |1575 |transporte de correo | | |I:227 | |(MTA: por defecto en | | | | |Debian) | |------------------+-----------+------+-------------------------| | | | |Agente de transferencia | |exim4-daemon-heavy|V:6, I:6 |1743 |de correo Exim4 (MTA: | | | | |reemplazo flexible) | |------------------+-----------+------+-------------------------| | |V:224, | |Documentación de Exim4 en| |exim4-base |I:234 |1699 |formato texto y archivos | | | | |comunes | |------------------+-----------+------+-------------------------| |exim4-doc-html |I:1 |3746 |Documentación de Exim4 en| | | | |formato html | |------------------+-----------+------+-------------------------| |exim4-doc-info |I:0 |637 |Documentación de Exim4 en| | | | |formato info | |------------------+-----------+------+-------------------------| | |V:124, | |Agente de transporte de | |postfix |I:133 |4039 |correo Postfix (MTA: | | | | |alternativa segura) | |------------------+-----------+------+-------------------------| |postfix-doc |I:6 |4646 |Documentación de Postfix | | | | |en formato texto y html | |------------------+-----------+------+-------------------------| | | | |Implementación de la API | |sasl2-bin |V:5, I:13 |371 |Cyrus SASL (complemento a|     | | | |postfix para SMTP AUTH) | |------------------+-----------+------+-------------------------| |cyrus-sasl2-doc |I:0 |2154 |Documentación Cyrus SASL | |------------------+-----------+------+-------------------------| |msmtp |V:6, I:11 |667 |MTA ligero | |------------------+-----------+------+-------------------------| | | | |MTA ligero (extensión | |msmtp-mta |V:4, I:6 |124 |compatible con sendmail | | | | |para msmtp) | |------------------+-----------+------+-------------------------| |esmtp |V:0, I:0 |129 |MTA ligero | |------------------+-----------+------+-------------------------| | | | |MTA ligero (extensión | |esmtp-run |V:0, I:0 |32 |compatible con sendmail | | | | |para esmtp) | |------------------+-----------+------+-------------------------| |nullmailer |V:8, I:9 |474 |Elimina MTA, no hay | | | | |correo local | |------------------+-----------+------+-------------------------| |ssmtp |V:5, I:8 |2 |Elimina MTA, no hay | | | | |correo local | |------------------+-----------+------+-------------------------| | | | |MTA con todas las | |sendmail-bin |V:13, I:13 |1901 |funciones (si ya está | | | | |familiarizado con él) | |------------------+-----------+------+-------------------------| | | | |MTA con todas las | |courier-mta |V:0, I:0 |2407 |funciones (interfaz web, | | | | |etc.) | |------------------+-----------+------+-------------------------| | | | |git-send-email(1) | |git-email |V:0, I:10 |1087 |programa para enviar | | | | |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:866, | | |Cliente de | |openssh-client |I:996 |4959 |ssh(1) |«Secure | | | | | |shell« | |----------------------+-----------+------+----------------------+-----------| | |V:730, | | |Servidor | |openssh-server |I:814 |1804 |sshd(8) |Secure | | | | | |shell | |----------------------+-----------+------+----------------------+-----------| | | | | |pregunta al| | | | | |usuario por| | | | | |la | |ssh-askpass |I:23 |102 |ssh-askpass(1) |contraseña | | | | | |para | | | | | |ssh-add (X | | | | | |plano) | |----------------------+-----------+------+----------------------+-----------| | | | | |pregunta al| | | | | |usuario la |     |ssh-askpass-gnome |V:0, I:3 |200 |ssh-askpass-gnome(1) |contraseña | | | | | |para | | | | | |ssh-add | | | | | |(GNOME) | |----------------------+-----------+------+----------------------+-----------| | | | | |pide al | | | | | |usuario una| | | | | |contraseña | |ssh-askpass-fullscreen|V:0, I:0 |48 |ssh-askpass-fullscreen|para | | | | |(1) |ssh-add | | | | | |(GNOME) que| | | | | |le resulte | | | | | |atractiva | |----------------------+-----------+------+----------------------+-----------| | | | | |servidor | | | | | |web para | | | | | |emulador de| |shellinabox |V:0, I:1 |507 |shellinaboxd(1) |terminal | | | | | |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-agent(1), y 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 | |nombre_de_usuario@nombre_de_equipo.dominio.ext|modo por defecto| |----------------------------------------------+----------------| | |conecta en el | |ssh -v |modo por defecto| |nombre_de_usuario@nombre_de_equipo.dominio.ext|con los mensajes| | |de depuración |     |----------------------------------------------+----------------| | |obliga la | |ssh -o PreferredAuthentications=password |utilización de | |username@hostname.domain.ext |la contraseña | | |con SSH versión | | |2 | |----------------------------------------------+----------------| | |ejecute el | |ssh -t |programa passwd | |nombre_de_usuario@nombre_de_equipo.dominio.ext|para actualizar | |contraseña |la contraseña en| | |un 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 sistemas remoto utilizando 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). La CUPS utiliza Protocolo de impresión de Internet (IPP). El IPP es ahora compatible con otros sistemas operativos como Windows XP     y Mac OS X y se ha convertido de facto en el nuevo estándar multiplataforma para la impresión remota con capacidad de comunicación bidireccional. 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, I:3 |367 |printer |(demonio de | | | | |(515) |impresión en | | | | | |línea) | |-------------------------+-----------+------+---------+-------------| |lprng |V:0, I:0 |3051 |, , |, , | | | | | |(Mejorado) | |-------------------------+-----------+------+---------+-------------| | | | | |Servidor CUPS| |cups |V:97, I:441|1061 |IPP (631)|de Impresión | | | | | |en Internet | |-------------------------+-----------+------+---------+-------------| | | | | |Órdenes de | | | | | |impresión |     | | | | |System V para| | | | | |CUPS: lp(1), | |cups-client |V:119, |426 |, , |lpstat(1), | | |I:461 | | |lpoptions(1),| | | | | |cancel(1), | | | | | |lpmove(8), | | | | | |lpinfo(8), | | | | | |lpadmin(8), …| |-------------------------+-----------+------+---------+-------------| | | | | |Órdenes de | | | | | |impresión BSD| |cups-bsd |V:32, I:219|131 |, , |para CUPS: | | | | | |lpr(1), lpq | | | | | |(1), lprm(1),| | | | | |lpc(8) | |-------------------------+-----------+------+---------+-------------| | | | |No |controladores| |printer-driver-gutenprint|V:20, I:114|1219 |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, I:2 |54 |TELNET |servidor TELNET | |-----------------+-----------+------+---------+----------------| |telnetd-ssl |V:0, I:0 |159 |, , |, , (soporte | | | | | |SSL) | |-----------------+-----------+------+---------+----------------| |nfs-kernel-server|V:49, I:63 |769 |NFS |Compatición de | | | | | |archivos Unix | |-----------------+-----------+------+---------+----------------| | | | | |Compartición de | |samba |V:108, |3995 |SMB |archivos e | | |I:131 | | |impresoras en | | | | | |Windows | |-----------------+-----------+------+---------+----------------| | | | | |Compartición de | | | | | |archivos e |     |netatalk |V:1, I:1 |2003 |ATP |impresoras de | | | | | |Apple/Mac | | | | | |(AppleTalk) | |-----------------+-----------+------+---------+----------------| |proftpd-basic |V:8, I:16 |452 |FTP |Descarga de | | | | | |archivo general | |-----------------+-----------+------+---------+----------------| |apache2 |V:214, |561 |HTTP |Servidor web | | |I:263 | | |general | |-----------------+-----------+------+---------+----------------| |squid |V:11, I:12 |9265 |, , |Servidor proxy | | | | | |web general | |-----------------+-----------+------+---------+----------------| | | | | |Direcciones IP | |bind9 |V:43, I:49 |1124 |DNS |para otros | | | | | |equipos | |-----------------+-----------+------+---------+----------------| |isc-dhcp-server |V:18, I:36 |6082 |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 isc-dhcp-server 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 |I:27 |16 |TCP/IP |navaja suiza para | | | | | |TCP/IP | |---------------+-----------+------+---------+------------------| | | | | |Binarios de la | | | | | |capa de conexión | |openssl |V:841, |2111 |SSL |segura(SSL) y | | |I:995 | | |herramientas de | | | | | |criptografía | | | | | |asociadas | |---------------+-----------+------+---------+------------------| |stunnel4 |V:7, I:12 |548 |, , |recubrimiento | | | | | |universal SSL | |---------------+-----------+------+---------+------------------| |telnet |V:29, I:511|54 |TELNET |cliente TELNET | |---------------+-----------+------+---------+------------------| |telnet-ssl |V:0, I:2 |196 |, , |, , (soporte SSL) | |---------------+-----------+------+---------+------------------| |nfs-common |V:152, |1124 |NFS |Compatición de | | |I:234 | | |archivos Unix | |---------------+-----------+------+---------+------------------| | | | | |Cliente para la | | | | | |compartición de | |smbclient |V:24, I:204|2071 |SMB |archivos e | | | | | |impresoras con MS | | | | | |Windows | |---------------+-----------+------+---------+------------------| | | | | |Órdenes de montado| |cifs-utils |V:29, I:121|317 |, , |y desmontado de | | | | | |archivos remotos | | | | | |MS Windows | |---------------+-----------+------+---------+------------------|     |ftp |V:7, I:114 |53 |FTP |cliente FTP | |---------------+-----------+------+---------+------------------| |lftp |V:4, I:30 |2361 |, , |, , | |---------------+-----------+------+---------+------------------| |ncftp |V:1, I:14 |1389 |, , |cliente FTP a | | | | | |pantalla completa | |---------------+-----------+------+---------+------------------| |wget |V:208, |3681 |HTTP y |descargas web | | |I:981 | |FTP | | |---------------+-----------+------+---------+------------------| |curl |V:185, |517 |, , |, , | | |I:620 | | | | |---------------+-----------+------+---------+------------------| |axel |V:0, I:3 |224 |, , |acelerador de | | | | | |descargas | |---------------+-----------+------+---------+------------------| | | | | |acelerador de | | | | | |descargas con | |aria2 |V:3, I:20 |1981 |, , |soporte para | | | | | |BitTorrent y | | | | | |Metalink | |---------------+-----------+------+---------+------------------| | |V:115, | | |host(1) para | |bind9-host |I:939 |393 |DNS |bind9, «Prioridad:| | | | | |estándar» | |---------------+-----------+------+---------+------------------| | | | | |dig(1) para bind, | |dnsutils |V:16, I:280|276 |, , |«Prioridad: | | | | | |estándar» | |---------------+-----------+------+---------+------------------| |isc-dhcp-client|V:217, |2875 |DHCP |obtiene la | | |I:981 | | |dirección IP | |---------------+-----------+------+---------+------------------| |ldap-utils |V:12, I:63 |767 |LDAP |obtiene datos 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:198 |9 |GNOME entorno | | | | |del escritorio | |----------------------------+-----------+------+---------------| |task-xfce-desktop |I:96 |9 |Entorno de | | | | |escritorio Xfce| |----------------------------+-----------+------+---------------| | | | |KDE Plasma | |task-kde-desktop |I:81 |6 |entorno de | | | | |escritorio | |----------------------------+-----------+------+---------------| |task-mate-desktop |I:43 |9 |MATE entorno de|     | | | |escritorio | |----------------------------+-----------+------+---------------| | | | |Cinnamon | |task-cinnamon-desktop |I:41 |9 |entorno de | | | | |escritorio | |----------------------------+-----------+------+---------------| |task-lxde-desktop |I:29 |9 |LXDE entorno de| | | | |escritorio | |----------------------------+-----------+------+---------------| |task-lxqt-desktop |I:18 |9 |LXQt entorno de| | | | |escritorio | |----------------------------+-----------+------+---------------| | | | |GNOME Flashback| |task-gnome-flashback-desktop|I:13 |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:60 |187 |mutter window | | | | |manager [auto] | |---------------------------+-----------+-------+---------------| | | | |Un servidor X | |xwayland |V:240, |2388 |ejecutándose | | |I:319 | |sobre wayland | | | | |[auto] | |---------------------------+-----------+-------+---------------|     | | | |Daemon de | | | | |escritorio | |gnome-remote-desktop |V:35, I:221|1068 |remoto para | | | | |GNOME usando | | | | |PipeWire [auto]| |---------------------------+-----------+-------+---------------| | | | |Ajustes | |gnome-tweaks |V:21, I:229|1170 |avanzados de la| | | | |configuración | | | | |para GNOME | |---------------------------+-----------+-------+---------------| | | | |Herramienta | | | | |para activar / | |gnome-shell-extension-prefs|V:13, I:213|60 |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:30, I:239|486 |GNOME |(trabajo en | | | | | |grupo y | | | | | |correo | | | | | |electrónico)| |-------------------+-----------+-------+----------+------------| | | | | |Cliente de | | | | | |correo | |thunderbird |V:48, I:119|224760 |GTK |electrónico | | | | | |(Mozilla | | | | | |Thunderbird)| |-------------------+-----------+-------+----------+------------| | | | | |Gestor de | | | | | |información | | | | | |personal | |kontact |V:1, I:12 |2208 |KDE |(trabajo en | | | | | |grupo y | | | | | |correo | | | | | |electrónico)| |-------------------+-----------+-------+----------+------------| |libreoffice-writer |V:117, |31474 |LO |procesador | | |I:435 | | |de textos | |-------------------+-----------+-------+----------+------------| |abiword |V:1, I:8 |3542 |GNOME |procesador | | | | | |de textos | |-------------------+-----------+-------+----------+------------| |calligrawords |V:0, I:7 |6097 |KDE |procesador | | | | | |de textos | |-------------------+-----------+-------+----------+------------| | | | | |desktop | | | | | |publishing | |scribus |V:1, I:16 |31345 |KDE |editor para | | | | | |editar | | | | | |archivos PDF| |-------------------+-----------+-------+----------+------------| |glabels |V:0, I:3 |1338 |GNOME |editor de | | | | | |etiquetas | |-------------------+-----------+-------+----------+------------| |libreoffice-calc |V:111, |26009 |LO |hoja de | | |I:432 | | |cálculo | |-------------------+-----------+-------+----------+------------| |gnumeric |V:4, I:14 |9910 |GNOME |hoja de | | | | | |cálculo | |-------------------+-----------+-------+----------+------------| |calligrasheets |V:0, I:5 |11396 |KDE |hoja de | | | | | |cálculo | |-------------------+-----------+-------+----------+------------| |libreoffice-impress|V:69, I:429|2646 |LO |presentación| |-------------------+-----------+-------+----------+------------| |calligrastage |V:0, I:5 |5339 |KDE |presentación| |-------------------+-----------+-------+----------+------------| | | | | |gestión de | |libreoffice-base |V:26, I:121|5003 |LO |bases de | | | | | |datos | |-------------------+-----------+-------+----------+------------| | | | | |gestión de | |kexi |V:0, I:1 |7118 |KDE |bases de | | | | | |datos | |-------------------+-----------+-------+----------+------------| | | | | |editor de | |libreoffice-draw |V:72, I:430|10312 |LO |gráficos | | | | | |vectoriales | | | | | |(dibujo) | |-------------------+-----------+-------+----------+------------| | | | | |editor de | |inkscape |V:15, I:112|99800 |GNOME |gráficos | | | | | |vectoriales | | | | | |(dibujo) | |-------------------+-----------+-------+----------+------------| | | | | |editor de | |karbon |V:0, I:6 |3610 |KDE |gráficos | | | | | |vectoriales | | | | | |(dibujo) | |-------------------+-----------+-------+----------+------------| | | | | |editor de | | | | | |diagramas de| |dia |V:2, I:22 |3741 |GTK |flujos y | | | | | |otros | | | | | |diagramas | |-------------------+-----------+-------+----------+------------|     | | | | |editor de | | | | | |gráficos de | |gimp |V:50, I:252|19304 |GTK |mapas de | | | | | |bits | | | | | |(Pintura) | |-------------------+-----------+-------+----------+------------| | | | | |organizador | |shotwell |V:17, I:255|6263 |GTK |de fotos | | | | | |digitales | |-------------------+-----------+-------+----------+------------| | | | | |organizador | |digikam |V:1, I:9 |293 |KDE |de fotos | | | | | |digitales | |-------------------+-----------+-------+----------+------------| | | | | |mesa de luz | |darktable |V:4, I:13 |30554 |GTK |y cuarto | | | | | |oscuro para | | | | | |fotógrafos | |-------------------+-----------+-------+----------+------------| |planner |V:0, I:4 |1394 |GNOME |gestión de | | | | | |proyectos | |-------------------+-----------+-------+----------+------------| |calligraplan |V:0, I:2 |19013 |KDE |gestión de | | | | | |proyectos | |-------------------+-----------+-------+----------+------------| |gnucash |V:2, I:8 |28928 |GNOME |finanzas | | | | | |personales | |-------------------+-----------+-------+----------+------------| |homebank |V:0, I:2 |1218 |GTK |finanzas | | | | | |personales | |-------------------+-----------+-------+----------+------------| |lilypond |V:0, I:7 |16092 |- |Compositor | | | | | |de música | |-------------------+-----------+-------+----------+------------| |kmymoney |V:0, I:2 |13937 |KDE |finanzas | | | | | |personales | |-------------------+-----------+-------+----------+------------| | | | | |sistema de | | | | |Aplicación|diseño | |librecad |V:1, I:15 |8963 |Qt |asistido por| | | | | |ordenador | | | | | |(CAD) (2D) | |-------------------+-----------+-------+----------+------------| | | | | |sistema de | | | | |Aplicación|diseño | |freecad |I:18 |36 |Qt |asistido por| | | | | |ordenador | | | | | |(CAD) (3D) | |-------------------+-----------+-------+----------+------------| | | | | |software de | | | | | |diseño de | |kicad |V:3, I:14 |236461 |GTK |circuitos | | | | | |impresos y | | | | | |esquemas | | | | | |electrónicos| |-------------------+-----------+-------+----------+------------| | | | | |interfaz de | |xsane |V:12, I:144|2339 |GTK |usuario de | | | | | |escáner | |-------------------+-----------+-------+----------+------------| | | | | |editor | |libreoffice-math |V:51, I:432|1898 |LO |matemático | | | | | |de fórmulas/| | | | | |ecuaciones | |-------------------+-----------+-------+----------+------------| | | | | |gestión de | | | | | |bibliotecas | |calibre |V:6, I:28 |63385 |KDE |y conversor | | | | | |de libros | | | | | |electrónicos| |-------------------+-----------+-------+----------+------------| | | | | |lector de | |fbreader |V:1, I:9 |3783 |GTK |libros | | | | | |electrónicos| |-------------------+-----------+-------+----------+------------| | | | | |visor de | |evince |V:92, I:314|941 |GNOME |documentos | | | | | |(pdf) | |-------------------+-----------+-------+----------+------------| | | | | |visor de | |okular |V:40, I:123|17728 |KDE |documentos | | | | | |(pdf) | |-------------------+-----------+-------+----------+------------| |x11-apps |V:31, I:463|2460 |Aplicación|xeyes(1), | | | | |X pura |etc. | |-------------------+-----------+-------+----------+------------| | |V:192, | |Aplicación|xev(1), | |x11-utils |I:566 |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. Fuentes 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 tu 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:216, | | | | |Cantarell | |fonts-cantarell |I:306 |572 |59 |- |- |(GNOME 3, | | | | | | | |pantalla) | |-------------------------+-----------+------+----+-----+----+-------------| | | | | | | |Fuentes Noto | |fonts-noto |I:153 |31 |61 |63 |40 |(Google, | | | | | | | |multilingüe | | | | | | | |con CJK) | |-------------------------+-----------+------+----+-----+----+-------------| | | | | | | |DejaVu (GNOME| | | | | | | |2, | |fonts-dejavu |I:421 |35 |58 |68 |40 |MCM:Verdana, | | | | | | | |extendida | | | | | | | |Bitstream | | | | | | | |Vera) | |-------------------------+-----------+------+----+-----+----+-------------| | | | | | | |Liberation | | |V:130, | | | | |fonts para | |fonts-liberation2 |I:427 |15 |56 |60 |40 |LibreOffice | | | | | | | |(Red Hat, | | | | | | | |MCMATC) | |-------------------------+-----------+------+----+-----+----+-------------| | | | | | | |Chrome OS: | | | | | | | |Arimo, Tinos | |fonts-croscore |V:20, I:40 |5274 |56 |60 |40 |y Cousine | | | | | | | |(Google, | | | | | | | |MCMATC) | |-------------------------+-----------+------+----+-----+----+-------------| | | | | | | |Chrome OS: | |fonts-crosextra-carlito |V:21, I:131|2696 |57 |- |- |Carlito | | | | | | | |(Google, | | | | | | | |MCM:Calibri )| |-------------------------+-----------+------+----+-----+----+-------------| | | | | | | |Chrome OS: | | | | | | | |Caladea | |fonts-crosextra-caladea |I:128 |347 |- |55 |- |(Google, | | | | | | | |MCM:Cambria )|     | | | | | | |(solo en | | | | | | | |latín) | |-------------------------+-----------+------+----+-----+----+-------------| | | | | | | |GNU FreeFont | |fonts-freefont-ttf |V:76, I:218|14460 |57 |59 |40 |(extendido | | | | | | | |URW Nimbus) | |-------------------------+-----------+------+----+-----+----+-------------| | | | | | | |Debian | | |V:123, | | | | |task-desktop,| |fonts-quicksand |I:438 |392 |56 |- |- |Quicksand | | | | | | | |(pantalla, | | | | | | | |sólo latín) | |-------------------------+-----------+------+----+-----+----+-------------| | | | | | | |Una | | | | | | | |tipografía | |fonts-hack |V:24, I:120|2508 |- |- |40 P|diseñada para| | | | | | | |el código | | | | | | | |fuente Hack | | | | | | | |(Facebook) | |-------------------------+-----------+------+----+-----+----+-------------| |fonts-sil-gentiumplus |I:32 |14345 |- |54 |- |Gentium SIL | |-------------------------+-----------+------+----+-----+----+-------------| |fonts-sil-charis |I:27 |6704 |- |59 |- |Charis SIL | |-------------------------+-----------+------+----+-----+----+-------------| | | | | | | |URW Nimbus | | |V:167, | | | | |(Nimbus Sans,| |fonts-urw-base35 |I:472 |15560 |56 |60 |40 |Roman No. 9 | | | | | | | |L, Mono L, | | | | | | | |MCAHTC) | |-------------------------+-----------+------+----+-----+----+-------------| | | | | | | |Fuentes de | |fonts-ubuntu |V:2, I:5 |4339 |58 |- |33 P|Ubuntu | | | | | | | |(pantalla) | |-------------------------+-----------+------+----+-----+----+-------------| | | | | | | |Fuentes para | |fonts-terminus |V:0, I:3 |452 |- |- |33 |terminales | | | | | | | |retro. | |-------------------------+-----------+------+----+-----+----+-------------| | | | | | | |Descargador | | | | | | | |de fuentes no| |ttf-mscorefonts-installer|V:1, I:49 |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:560, | |Biblioteca de | |libfreetype6 |I:997 |938 |rasterización de | | | | |fuentes FreeType | |---------------------+-----------+------+----------------------| | |V:554, | |Fontconfig biblioteca |     |libfontconfig1 |I:849 |587 |de configuración de | | | | |fuentes | |---------------------+-----------+------+----------------------| |fontconfig |V:437, |680 |fc-*: comandos CLI | | |I:721 | |para Fontconfig | |---------------------+-----------+------+----------------------| |font-manager |V:2, I:8 |1022 |Font Manager: comando | | | | |GUI para Fontconfig | |---------------------+-----------+------+----------------------| |nautilus-font-manager|V:0, I:0 |37 |Extensión Nautilus | | | | |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:65, I:70 |7499 |aplicaciones | | | | |Flatpak para | | | | |aplicaciones de | | | | |escritorio | |-----------------------------+-----------+------+------------------| | | | |Compatibilidad con| |gnome-software-plugin-flatpak|V:20, I:29 |254 |Flatpak para el | | | | |software GNOME | |-----------------------------+-----------+------+------------------| | | | |Daemon y | |snapd |V:67, I:70 |60022 |herramientas que | | | | |habilitan paquetes| | | | |snap | |-----------------------------+-----------+------+------------------| | | | |Compatibilidad con| |gnome-software-plugin-snap |V:1, I:2 |121 |Snap para el | | | | |software GNOME |     |-----------------------------+-----------+------+------------------| | | | |portal de | |xdg-desktop-portal |V:303, |1936 |integración del | | |I:394 | |escritorio para | | | | |Flatpak y Snap | |-----------------------------+-----------+------+------------------| | |V:274, | |xdg-desktop-portal| |xdg-desktop-portal-gtk |I:392 |715 |backend para gtk | | | | |(GNOME) | |-----------------------------+-----------+------+------------------| | | | |xdg-desktop-portal| |xdg-desktop-portal-kde |V:53, I:72 |1438 |backend para Qt | | | | |(KDE) | |-----------------------------+-----------+------+------------------| | | | |xdg-desktop-portal| |xdg-desktop-portal-wlr |V:0, I:4 |135 |backend para | | | | |wlroots (Wayland) | |-----------------------------+-----------+------+------------------| | | | |un programa de | | | | |espacio aislado de| |firejail |V:1, I:4 |1771 |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:35, I:221|1068 |RDP |Escritorio | | | | | |remoto | | | | | |GNOME | |--------------------------+-----------+------+----------+-----------| | | | | |xrdp, | | | | | |servidor | | | | | |del | |xrdp |V:22, I:24 |3202 |RDP |protocolo | | | | | |de | | | | | |escritorio | | | | | |remoto | | | | | |(RDP) | |--------------------------+-----------+------+----------+-----------| | | | | |x11vnc, | | | | | |servidor de| |x11vnc |V:6, I:23 |2107 |RFB (VNC) |protocolo | | | | | |framebuffer| | | | | |remoto | | | | | |(VNC) | |--------------------------+-----------+------+----------+-----------| | | | | |TigerVNC, | | | | | |servidor de| |tigervnc-standalone-server|V:4, I:15 |2768 |RFB (VNC) |protocolo | | | | | |framebuffer| | | | | |remoto | | | | | |(VNC) |     |--------------------------+-----------+------+----------+-----------| | | | | |Cliente de | |gnome-connections |V:0, I:1 |1356 |RDP, RFB |escritorio | | | | |(VNC) |remoto de | | | | | |GNOME | |--------------------------+-----------+------+----------+-----------| | | | | |Vinagre: | | | | |RDP, RFB |cliente de | |vinagre |V:2, I:68 |4249 |(VNC), |escritorio | | | | |SPICE, SSH|remoto de | | | | | |GNOME | |--------------------------+-----------+------+----------+-----------| | | | |RDP, RFB |Remmina: | |remmina |V:15, I:72 |953 |(VNC), |cliente de | | | | |SPICE, |escritorio | | | | |SSH, ... |remoto GTK | |--------------------------+-----------+------+----------+-----------| | | | | |KRDC: | |krdc |V:1, I:17 |3873 |RDP, RFB |cliente de | | | | |(VNC) |escritorio | | | | | |remoto KDE | |--------------------------+-----------+------+----------+-----------| | | | | |Apache | | | | | |Guacamole: | | | | |RDP, RFB |puerta de | |guacd |V:0, I:0 |83 |(VNC), SSH|enlace al | | | | |/ HTML5 |escritorio | | | | | |remoto sin | | | | | |cliente | | | | | |(HTML5) | |--------------------------+-----------+------+----------+-----------| | | | | |Cliente de | | | | | |pantalla | | | | | |GUI de | | | | |RFB (VNC),|Gestor de | |virt-viewer |V:5, I:52 |1284 |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:730, | |sshd con la |SSH | |openssh-server |I:814 |1804 |opción |servidor | | | | |X11-forwarding|(seguro) | |-----------------+-----------+------+--------------+-----------| |openssh-client |V:866, |4959 |ssh -X |SSH cliente|     | |I:996 | | |(seguro) | |-----------------+-----------+------+--------------+-----------| | |V:165, | | |Utilidad de| |xauth |I:961 |81 |xauth |archivo de | | | | | |autoridad X| |-----------------+-----------+------+--------------+-----------| | | | | |control de | |x11-xserver-utils|V:302, |568 |xhost |acceso al | | |I:528 | | |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:9, I:42 |55 |X |de comandos para X | | | | | |selecciones | | | | | |(portapapeles) | |------------+-----------+-------+--------+---------------------| | | | | |interfaz de la línea |     |xclip |V:12, I:63 |62 |X |de comandos para X | | | | | |selecciones | | | | | |(portapapeles) | |------------+-----------+-------+--------+---------------------| | | | | |wl-copy wl-paste: | | | | | |interfaz de la línea | |wl-clipboard|V:3, I:14 |162 |Wayland |de comandos para | | | | | |Portapapeles de | | | | | |Wayland | |------------+-----------+-------+--------+---------------------| | | | | |Un servidor (Daemon) | |gpm |V:10, I:12 |521 |Consola |que captura acciones | | | | |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 proporcionarse 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á proporcionar al montar una opción explícita para utilizar UTF-8 o CP932 para los nombres de archivos. Nota En el automontaje o la conexión en caliente de dispositivos de memoria USB en los entornos de escritorio modernos como GNOME,     puede introducir esa opción de montaje pulsando el botón derecho del ratón en el icono del escritorio, pulse en la pestaña «Unidad», pulse para expandir «Configurar» e introduzca «utf8» en las «Opciones de montaje:». La próxima vez que el dispositivo de memoria se monte UTF-8 se activará. 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 8.2.1. Teclado de entrada para la consola Linux y X Window El sistema Debian puede configurarse para trabajar con muchas     disposiciones internacionales del teclado utilizando los paquetes keyboard-configuration y console-setup.     # dpkg-reconfigure keyboard-configuration # dpkg-reconfigure console-setup Para la consola de Linux y el sistema X Window, esto actualiza los parámetros de configuración en "/etc/default/keyboard" y "/     etc/default/console-setup". Esto también configura la fuente de la consola de Linux. Muchos caracteres no ASCII, incluyendo los caracteres acentuados utilizados por muchos idiomas europeos, pueden estar disponibles con dead key, AltGr key, y compose key. 8.2.2. La entrada por teclado para Wayland Para GNOME en el sistema de escritorio Wayland, Sección 8.2.1, “Teclado de entrada para la consola Linux y X Window” no admite idiomas europeos distintos del inglés. IBus se creó para admitir no solo idiomas asiáticos sino también idiomas europeos. La     dependencia del paquete del entorno de escritorio GNOME recomienda "ibus" a través de "gnome-shell". El código de "ibus" se ha actualizado para integrar las funcionalidades de las opciones setxkbmap y XKB. Debe configurar ibus desde "Configuración de GNOME" o "Ajustes de GNOME" para la entrada de teclado multilingüe. 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.3. El soporte al método de entrada con lBus Ya que el entorno de escritorio GNOME recomienda "ibus" a través     de "gnome-shell", "ibus" es la mejor opción para el método de entrada.     La entrada multilenguaje a una aplicación se procesa como: Keyboard Application | ^     | | +-> Linux kernel -> Input method (ibus) -> Gtk, Qt, X, Wayland +-- Engine--+     La lista de IBus y sus paquetes son los siguientes. Tabla 8.1. Lista de IBus y sus paquetes +---------------------------------------------------------------+ | paquete |popularidad|tamaño| soporte de la | | | | |configuración regional| |---------------------+-----------+------+----------------------| | |V:198, | |infraestructura de | |ibus |I:245 |1723 |método de entrada | | | | |utilizando dbus | |---------------------+-----------+------+----------------------| |ibus-mozc |V:1, I:3 |944 |Japonés | |---------------------+-----------+------+----------------------| |ibus-anthy |V:0, I:1 |8856 |, , | |---------------------+-----------+------+----------------------| |ibus-skk |V:0, I:0 |242 |, , | |---------------------+-----------+------+----------------------| |ibus-kkc |V:0, I:0 |210 |, , | |---------------------+-----------+------+----------------------| |ibus-libpinyin |V:1, I:3 |2761 |Chino (para zh_CN) | |---------------------+-----------+------+----------------------| |ibus-chewing |V:0, I:0 |247 |, , (para zh_TW) | |---------------------+-----------+------+----------------------| |ibus-libzhuyin |V:0, I:0 |40995 |, , (para zh_TW) | |---------------------+-----------+------+----------------------| |ibus-rime |V:0, I:0 |73 |, , (para zh_CN/zh_TW)|     |---------------------+-----------+------+----------------------| |ibus-cangjie |V:0, I:0 |119 |, , (para zh_HK) | |---------------------+-----------+------+----------------------| |ibus-hangul |V:0, I:2 |264 |Coreano | |---------------------+-----------+------+----------------------| |ibus-libthai |I:0 |90 |Tailandés | |---------------------+-----------+------+----------------------| |ibus-table-thai |I:0 |58 |Tailandés | |---------------------+-----------+------+----------------------| |ibus-unikey |V:0, I:0 |318 |vietnamita | |---------------------+-----------+------+----------------------| | | | |Multilingüe: motor | |ibus-keyman |V:0, I:0 |161 |Keyman para más de | | | | |2000 idiomas | |---------------------+-----------+------+----------------------| |ibus-table |V:0, I:1 |2176 |tabla del motor de | | | | |lBus | |---------------------+-----------+------+----------------------| |ibus-m17n |V:0, I:1 |395 |Multilenguaje: Indo, | | | | |Árabe y otros | |---------------------+-----------+------+----------------------| | | | |widgets adicionales | |plasma-widgets-addons|V:50, I:100|1992 |para Plasma 5 que | | | | |contienen un indicador| | | | |de teclado | +---------------------------------------------------------------+ Nota Para chino, "fcitx5" puede ser un marco de método de entrada alternativo. Para los aficionados a Emacs, "uim" puede ser una     alternativa. En cualquier caso, es posible que deba realizar una configuración manual adicional con im-config. Algunos viejos métodos de entrada clásicos, como "kinput2", aún pueden existir en el repositorio de Debian, pero no se recomiendan para el entorno moderno. 8.2.4. Ejemplo para el japonés Encuentro que es muy útil el método de entrada en japonés     iniciado en el entorno en inglés ("en_US.UTF-8"). Así es como hice esto con IBus para GNOME en Wayland: 1. Instale el paquete de herramientas de entrada para el japonés ibus-mozc (o ibus-anthy) con sus paquetes recomendados como im-config. 2. Seleccioné «Configuración« → «Teclado« → «Método de entrada« → pulsé «+» en «Métodos de entrada« → «Japonés« → "Mozc japonés (o anthy)" y haga clic en "Agregar" si no se ha activado.     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. * 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.4. Ancho de los caracteres ambiguos de Asia oriental En las configuraciones regionales de Asia oriental, el área de     dibujo de los caracteres griegos y cirílicos puede ser ampliada más allá de lo deseado causando que no se muestren alineados en la salida (ver Anexo Estándar de Unicode #11).     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:50, I:209|1542 |Ver Sección 1.3, “Midnight | | | | |Commander (MC)” | |--------+-----------+------+-----------------------------------| | |V:519, | |script(1) comando para hacer | |bsdutils|I:999 |356 |typescript de la sesión del | | | | |terminal | |--------+-----------+------+-----------------------------------| |screen |V:71, I:230|1003 |Multiplexador de terminal con | | | | |emulación de terminal VT100/ANSI | |--------+-----------+------+-----------------------------------| | | | |alternativa al multiplexor de | |tmux |V:43, I:146|1180 |terminales (utiliza "Control-B" en |     | | | |su lugar) | |--------+-----------+------+-----------------------------------| |fzf |V:4, I:16 |3648 |buscador de texto borroso | |--------+-----------+------+-----------------------------------| |fzy |V:0, I:0 |54 |buscador de texto borroso | |--------+-----------+------+-----------------------------------| |rlwrap |V:1, I:15 |330 |envoltorio de la línea de comando | | | | |de la función readline | |--------+-----------+------+-----------------------------------| |ledit |V:0, I:11 |331 |envoltorio de la línea de comando | | | | |de la función readline | |--------+-----------+------+-----------------------------------| |rlfe |V:0, I:0 |45 |envoltorio de la línea de comando | | | | |de la función readline | |--------+-----------+------+-----------------------------------| | | | |búsqueda rápida de las cadenas | |ripgrep |V:5, I:19 |5152 |recursivas en el árbol del código | | | | |fuente con el filtrado automático | +---------------------------------------------------------------+ 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 h nnoremap j nnoremap k silent! nnoremap l """ Window resize nnoremap vertical resize -2 nnoremap resize -2 nnoremap resize +2 nnoremap vertical resize +2 """ Clear hlsearch with ( is mapped as above) nnoremap noh inoremap noh """ center after jump next nnoremap n nzz nnoremap N Nzz """ fast "jk" to get out of INSERT mode () inoremap jk noh """ fast "" to get out of TERM mode (CTRL-\ CTRL-N) tnoremap """ fast "jk" to get out of TERM mode (CTRL-\ CTRL-N) tnoremap jk """ previous/next trouble/quickfix item nnoremap [q cprevious nnoremap ]q cnext """ buffers nnoremap bprevious nnoremap bnext nnoremap [b bprevious nnoremap ]b bnext """ Add undo break-points     inoremap , ,u inoremap . .u inoremap ; ;u """ save file inoremap w xnoremap w nnoremap w snoremap w """ better indenting vnoremap < >gv """ terminal (Somehow under Linux, becomes in Vim) nnoremap terminal "nnoremap terminal """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" if ! has('nvim') """ Toggle paste mode with p for Vim (no need for Nvim) set pastetoggle=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 u inoremap u """ is re-purposed as above """ execute the previous macro recorded with Q nnoremap Q @@ """ repeat last substitute and *KEEP* flags nnoremap & :&& """ search visual selected string for visual mode xnoremap * y/\V" xnoremap # y?\V" 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: and """ \%#\@w nnoremap w :WMToggle 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 el | información | | teclado | | |-----------------+---------------------------------------------| |:help package |explicación sobre el mecanismo del paquete | | |vim | |-----------------+---------------------------------------------| |:help runtimepath|explicación sobre el mecanismo de runtimepath| |-----------------+---------------------------------------------| |:version |condiciones internas incluyen candidatos para| | |el archivo vimrc |     |-----------------+---------------------------------------------| |:echo $VIM |la variable de entorno "$VIM" utilizada para | | |situar el archivo vimrc | |-----------------+---------------------------------------------| |:¿establecer la |lista de directorios en los que se buscarán | |ruta del tiempo |todos los archivos del soporte del tiempo de | |de ejecución? |ejecución | |-----------------+---------------------------------------------| | |la variable del entorno "$VIMRUNTIME" | |:echo $VIMRUNTIME|utilizada 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.4, “El sistema de mensajes” y Sección 3.3, “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 | |----------+-----------+------+---------------------------------| |logwatch |V:11, I:13 |2328 |analizador de registro con una | | | | |buena salida escrito en Perl | |----------+-----------+------+---------------------------------| |fail2ban |V:98, I:111|2126 |prohibición de las IPs con | | | | |múltiples errores de acreditación| |----------+-----------+------+---------------------------------| |analog |V:3, I:96 |3739 |analizador de registro para | | | | |servidores web | |----------+-----------+------+---------------------------------| |awstats |V:6, I:10 |6928 |analizador de registro de | | | | |servidor web potente y funcional | |----------+-----------+------+---------------------------------| |sarg |V:1, I:1 |845 |generador de informes de análisis| | | | |de squid | |----------+-----------+------+---------------------------------|     |pflogsumm |V:1, I:4 |109 |Resumidor de entradas de registro| | | | |Postfix | |----------+-----------+------+---------------------------------| |fwlogwatch|V:0, I:0 |481 |analizador de registros de | | | | |cortafuegos | |----------+-----------+------+---------------------------------| |squidview |V:0, I:0 |189 |controla y analiza los archivos | | | | |access.log de squid | |----------+-----------+------+---------------------------------| | | | |visor de archivos de registros | |swatch |V:0, I:0 |99 |con combinación de expresiones | | | | |regulares, hechos relevantes y | | | | |reglas | |----------+-----------+------+---------------------------------| | | | |Filtro de spam y filtro mediante | |crm114 |V:0, I:0 |1119 |expresiones regulares | | | | |programables (CRM114) | |----------+-----------+------+---------------------------------| |icmpinfo |V:0, I:0 |44 |intérprete de mensajes ICMP | +---------------------------------------------------------------+ 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 |19 -01-2009 00:15 | |--------------------+----------------+-------------------------| |full-iso |cualquiera |19-01-2009 | | | |00:15:16.000000000 +0900 | |--------------------+----------------+-------------------------|     |configuración |C |enero 19 00:15 | |regional | | | |--------------------+----------------+-------------------------| |configuración |en_US.UTF-8 |enero 19 00:15 | |regional | | | |--------------------+----------------+-------------------------| |configuración |es_ES.UTF-8 |ene 19 00:15 | |regional | | | |--------------------+----------------+-------------------------| |+%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:18, I:173|1134 |Wayland |captura de | | | | | |pantalla para | | | | | |GNOME | |----------------+-----------+------+--------+------------------| | | | | |aplicación de | |flameshot |V:7, I:15 |3364 |Wayland |capturas de |     | | | | |pantalla con | | | | | |esteroides | |----------------+-----------+------+--------+------------------| | | | |Wayland |captura de | |gimp |V:50, I:252|19304 |+ X |pantalla en el | | | | | |menú GUI | |----------------+-----------+------+--------+------------------| |x11-apps |V:31, I:463|2460 |X |xwd(1) | |----------------+-----------+------+--------+------------------| |imagemagick |I:317 |74 |X |import(1) | |----------------+-----------+------+--------+------------------| |scrot |V:5, I:63 |131 |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:26, I:30 |168 |configuración y sus metadatos con | | | | |Git (por defecto), Mercurial, o |     | | | |GNU Bazaar | |---------+-----------+------+----------------------------------| | | | |utilidad de restauración del | |timeshift|V:5, I:10 |3506 |sistema usando rsync o | | | | |instantáneas BTRFS | |---------+-----------+------+----------------------------------| | | | |Herramienta de gestión de | |snapper |V:4, I:5 |2392 |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:880, | |nice(1): ejecuta un programa | |coreutils|I:999 |18307 |modificando su prioridad de | | | | |planificación | |---------+-----------+------+----------------------------------| | |V:519, | |renice(1): cambia la prioridad de | |bsdutils |I:999 |356 |planificación de un proceso en | | | | |ejecución | |---------+-----------+------+----------------------------------| | |V:766, | |«/proc» utilidades del sistema de | |procps |I:999 |2389 |archivos: ps(1), top(1), kill(1), | | | | |watch(1), … | |---------+-----------+------+----------------------------------| | |V:420, | |«/proc» utilidades del sistema de | |psmisc |I:775 |908 |archivos: killall(1), fuser(1), | | | | |peekfd(1), pstree(1) | |---------+-----------+------+----------------------------------| | | | |time(1): ejecuta un programa para | |time |V:7, I:132 |129 |crear un informe de los recursos | | | | |del sistema utilizados a lo largo | | | | |del tiempo | |---------+-----------+------+----------------------------------| | |V:148, | |sar(1), iostat(1), mpstat(1), …: | |sysstat |I:170 |1904 |herramientas de optimización del | | | | |sistema en Linux | |---------+-----------+------+----------------------------------| |isag |V:0, I:3 |109 |Graficador Interactivo de la |     | | | |Actividad del Sistema para sysstat| |---------+-----------+------+----------------------------------| | | | |lsof(8): enumera la relación de | |lsof |V:422, |482 |archivos abiertos por un proceso | | |I:945 | |en ejecución utilizando la opción | | | | |«-p» | |---------+-----------+------+----------------------------------| |strace |V:12, I:119|2897 |strace(1): registro de las | | | | |llamadas del sistema y señales | |---------+-----------+------+----------------------------------| |ltrace |V:0, I:16 |330 |ltrace(1): registro a las | | | | |bibliotecas invocadas | |---------+-----------+------+----------------------------------| | | | |xtrace(1): registra las | |xtrace |V:0, I:0 |353 |comunicaciones entre el cliente y | | | | |el servidor en X11 | |---------+-----------+------+----------------------------------| | | | |powertop(1): información sobre el | |powertop |V:18, I:217|677 |uso de la potencia por parte del | | | | |sistema | |---------+-----------+------+----------------------------------| | |V:872, | |ejecuta procesos en segundo plano | |cron |I:995 |244 |de acuerdo a su planificación | | | | |desde el dominio cron(8) | |---------+-----------+------+----------------------------------| | |V:396, | |planificador de tareas similar a | |anacron |I:479 |93 |cron para los sistemas que no | | | | |están activos 24 horas al día | |---------+-----------+------+----------------------------------| | |V:101, | |at(1) o batch(1): ejecuta un | |at |I:154 |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.     El entorno de escritorio asigna las variables del entorno $XDG_DATA_HOME y $XDG_DATA_DIR. Por ejemplo, en GNOME 3: * $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: + Escritorio GNOME3: «Configuración« → «Sistema« → «Detalles« → «Aplicaciones por defecto« + Escritorio KDE: «K« → «Centro de Control« → «Componenetes KDE« → «Selección de componentes« + 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 <> $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:249, |213 |Utilidades de Linux para PCI: | | |I:991 | |lspci(8) | |-----------+-----------+------+--------------------------------| |usbutils |V:68, I:869|325 |Utilidades de Linux para USB: | | | | |lsusb(8) | |-----------+-----------+------+--------------------------------| |nvme-cli |V:15, I:22 |1642 |Utilidades NVMe para Linux: nvme| | | | |(1) | |-----------+-----------+------+--------------------------------|     |pcmciautils|V:6, I:10 |91 |Utilidades Linux para PCMCIA: | | | | |pccardctl(8) | |-----------+-----------+------+--------------------------------| | | | |colección de herramientas para | |scsitools |V:0, I:2 |346 |la gestión de hardware SCSI: | | | | |lsscsi(8) | |-----------+-----------+------+--------------------------------| |procinfo |V:0, I:9 |132 |información del sistema obtenida| | | | |de «/proc»: lsdev(8) | |-----------+-----------+------+--------------------------------| |lshw |V:13, I:89 |919 |información sobre la | | | | |configuración hardware: lshw(1) | |-----------+-----------+------+--------------------------------| |discover |V:40, I:958|98 |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. Tabla 9.14. Relación de herramientas de configuración hardware +---------------------------------------------------------------+ | paquete |popularidad|tamaño| descripción | |-----------------+-----------+------+--------------------------| | | | |Utilidades de teclado y | |console-setup |V:88, I:967|428 |tipos de letra para | | | | |consolas | |-----------------+-----------+------+--------------------------| |x11-xserver-utils|V:302, |568 |Utilidades de servidor X: | | |I:528 | |xset(1), xmodmap(1) | |-----------------+-----------+------+--------------------------| | | | |demonio que gestiona lo | | | | |que llegan del Interfaz de| |acpid |V:84, I:148|158 |Potencia y Configuración | | | | |Avanzada (Advanced | | | | |Configuration and Power | | | | |Interface, ACPI) | |-----------------+-----------+------+--------------------------| | | | |utilidad para visualizar | |acpi |V:9, I:136 |47 |información de | | | | |dispositivos ACPI | |-----------------+-----------+------+--------------------------| | | | |demonio que «duerme« el | |sleepd |V:0, I:0 |86 |portátil si deja de tener | | | | |actividad | |-----------------+-----------+------+--------------------------| | | | |optimización de acceso al |     | |V:178, | |disco duro (ver | |hdparm |I:335 |256 |Sección 9.6.9, | | | | |“Optimización del disco | | | | |duro”) | |-----------------+-----------+------+--------------------------| | |V:207, | |control y monitoreo de | |smartmontools |I:250 |2358 |sistemas de almacenamiento| | | | |utilizando S.M.A.R.T. | |-----------------+-----------+------+--------------------------| | | | |colección de herramientas | |setserial |V:4, I:6 |103 |para la gestión del puerto| | | | |serie | |-----------------+-----------+------+--------------------------| | | | |colección de herramientas | |memtest86+ |V:1, I:21 |12711 |para la gestión de la | | | | |memoria hardware | |-----------------+-----------+------+--------------------------| | | | |colección de herramientas | |scsitools |V:0, I:2 |346 |para la gestión de | | | | |hardware SCSI | |-----------------+-----------+------+--------------------------| | | | |optimización de acceso a | |setcd |V:0, I:0 |37 |la unidad de discos | | | | |compactos | |-----------------+-----------+------+--------------------------| |big-cursor |I:0 |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 configuración de la terminal 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». 9.5.7. 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:330, |2605 |utilidades para configurar| | |I:466 | |y usar ALSA | |-----------------+-----------+------+--------------------------| | | | |La compatibilidad de ALSA | |oss-compat |V:1, I:17 |18 |con OSS evita errores como| | | | |«/dev/dsp no se encuentra»| |-----------------+-----------+------+--------------------------| | | | |servidor multimedia del | |pipewire |V:265, |120 |motor de procesamiento de | | |I:319 | |audio y vídeo - | | | | |metapaquete | |-----------------+-----------+------+--------------------------| | | | |servidor multimedia del | |pipewire-bin |V:274, |1631 |motor de procesamiento del| | |I:319 | |audio y vídeo - servidor | | | | |de audio y programas CLI | |-----------------+-----------+------+--------------------------| | | | |servidor multimedia del | | |V:105, | |motor de procesamiento del| |pipewire-alsa |I:157 |206 |audio y vídeo - servidor | | | | |de audio para reemplazar | | | | |ALSA |     |-----------------+-----------+------+--------------------------| | | | |servidor multimedia del | | |V:160, | |motor de procesamiento del| |pipewire-pulse |I:214 |50 |audio y vídeo - servidor | | | | |de audio para reemplazar | | | | |PulseAudio | |-----------------+-----------+------+--------------------------| |pulseaudio |V:256, |6472 |PulseAudio servidor | | |I:308 | | | |-----------------+-----------+------+--------------------------| |libpulse0 |V:413, |975 |biblioteca del cliente | | |I:580 | |para PulseAudio | |-----------------+-----------+------+--------------------------| | | | |JACK Audio Connection Kit.| |jackd |V:2, I:18 |9 |(JACK) servidor (baja | | | | |latencia) | |-----------------+-----------+------+--------------------------| | | | |Kit de conexión de audio | |libjack0 |V:1, I:9 |326 |JACK. (JACK) biblioteca | | | | |(baja latencia) | |-----------------+-----------+------+--------------------------| |libgstreamer1.0-0|V:429, |4455 |GStreamer: motor de sonido| | |I:597 | |GNOME | |-----------------+-----------+------+--------------------------| |libphonon4qt5-4 |V:72, I:162|594 |Phonon: motor de sonido | | | | |KDE | +---------------------------------------------------------------+ 9.5.8. 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.9. 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.10. 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.11. 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 | |----------+-----------+------+---------------------------------| | | | |demonio que envía por correo | |logcheck |V:6, I:7 |110 |anomalías en los registros del | | | | |sistema al administrador | |----------+-----------+------+---------------------------------| | | | |utilidad para verificar los | |debsums |V:5, I:35 |98 |archivos de los paquetes | | | | |instalado mediante sumas MD5 | |----------+-----------+------+---------------------------------| |chkrootkit|V:8, I:17 |925 |detector de rootkit | |----------+-----------+------+---------------------------------| |clamav |V:9, I:45 |27455 |utilidad anti-virus para Unix - | | | | |interfaz de línea de órdenes |     |----------+-----------+------+---------------------------------| |tiger |V:1, I:2 |7800 |informa de vulnerabilidades de | | | | |seguridad del sistema | |----------+-----------+------+---------------------------------| |tripwire |V:1, I:2 |5016 |comprobador de integridad de | | | | |archivos y directorios | |----------+-----------+------+---------------------------------| |john |V:1, I:9 |471 |herramienta para descifrar | | | | |contraseñas | |----------+-----------+------+---------------------------------| |aide |V:1, I:1 |293 |Entorno de Detección Avanzado de | | | | |Intrusión - binario estático | |----------+-----------+------+---------------------------------| |integrit |V:0, I:0 |2659 |programa de verificación de la | | | | |integridad del archivo | |----------+-----------+------+---------------------------------| |crack |V:0, I:1 |149 |programa que adivina contraseñas | +---------------------------------------------------------------+     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 El arranque del sistema Linux con «live CDs« o CDs de instalación     de debian en modo rescate hace que sea fácil reconfigurar la información de almacenamiento en su dispositivo de arranque. 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(1x) 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:881, |5283 |las utilidades varias del sistema| | |I:999 | |incluyen fdisk(8) y cfdisk(8) | |----------+-----------+------+---------------------------------| | |V:417, | |Programa de modificación del | |parted |I:568 |122 |tamaño de las particiones de |     | | | |disco GNU Parted | |----------+-----------+------+---------------------------------| |gparted |V:15, I:102|2175 |Editor GNOME del particionado | | | | |basado en libparted | |----------+-----------+------+---------------------------------| |gdisk |V:338, |885 |editor de particiones para el | | |I:511 | |disco híbrido GPT/MBR | |----------+-----------+------+---------------------------------| |kpartx |V:22, I:33 |77 |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:767, |1499 |utilidades para el sistema de| | |I:999 | |archivos ext2/ext3/ext4 | |--------------+-----------+------+-----------------------------| |btrfs-progs |V:44, I:72 |5078 |utilidades para el sistema de| | | | |archivos Btrfs | |--------------+-----------+------+-----------------------------| |reiserfsprogs |V:12, I:25 |473 |utilidades para el sistema de| | | | |archivos Reiserfs | |--------------+-----------+------+-----------------------------| |zfsutils-linux|V:29, I:30 |1762 |utilidades para el sistema de| | | | |archivos OpenZFS | |--------------+-----------+------+-----------------------------| | |V:196, | |utilidades para el sistema de| |dosfstools |I:541 |315 |archivos FAT. (Microsoft: | | | | |MS-DOS, Windows) | |--------------+-----------+------+-----------------------------| | | | |utilidades para el sistema de| |exfatprogs |V:29, I:371|301 |archivos exFAT mantenido por | | | | |Samsung. | |--------------+-----------+------+-----------------------------| | | | |lectura/escritura exFAT | |exfat-fuse |V:5, I:120 |73 |controlador del sistema de | | | | |archivos (Microsoft) para |     | | | |FUSE. | |--------------+-----------+------+-----------------------------| | | | |utilidades para el sistema de| |exfat-utils |V:4, I:106 |231 |archivos exFAT mantenidas por| | | | |el autor de exfat-fuse. | |--------------+-----------+------+-----------------------------| |xfsprogs |V:21, I:95 |3476 |utilidades para el sistema de| | | | |archivos XFS. (SGI: IRIX) | |--------------+-----------+------+-----------------------------| | | | |lectura/escritura NTFS | |ntfs-3g |V:197, |1474 |controlador del sistema de | | |I:513 | |archivos (Microsoft: Windows | | | | |NT, ...) para FUSE. | |--------------+-----------+------+-----------------------------| | | | |utilidades para el sistema de| |jfsutils |V:0, I:8 |1577 |archivos JFS. (IBM: AIX, OS/ | | | | |2) | |--------------+-----------+------+-----------------------------| |reiser4progs |V:0, I:2 |1367 |utilidades para el sistema de| | | | |archivos Reiser4 | |--------------+-----------+------+-----------------------------| | | | |utilidades para el sistema de| |hfsprogs |V:0, I:4 |394 |archivos HFS y HFS Plus. | | | | |(Apple: Mac OS) | |--------------+-----------+------+-----------------------------| | | | |programa de cero bloques | |zerofree |V:5, I:131 |25 |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/hda1» muestra el contenido del sistema de archivos del superbloque de «/dev/ hda1». * La ejecución de «sudo tune2fs -c 50 /dev/hda1» cambia la frecuencia de comprobaciones del sistema de archivos (fsck durante el arranque) cada 50 arranques en «/dev/hda1».     * La ejecución de «sudo tune2fs -j /dev/hda1» 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/hda1». (Para ello se necesita que el sistema de archivos este desmontado.) * La ejecución de «sudo tune2fs -O extents,uninit_bg,dir_index /dev/hda1 && fsck -pf /dev/hda1» lo convierte de ext3 a ext4 en «/dev/hda1». (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/hda» con «hdparm -tT /dev/hda». Algunos discos conectados mediante (E)IDE se puede mejorar su velocidad con «hdparm -q -c3     -d1 -u1 -m16 /dev/hda» 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/hda».     4. Compruebe la salida de «smartctl -a /dev/hda» para verificar que la funcionalidad SMART está activada realmente. + Si no es así, actívelo con «smartctl -s on -a /dev/hda». 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 El archivo de imagen de disco «disk.img», de un dispositivo     desmontado, p. ej. el segundo disco SCSI o serial ATA «/dev/sdb», puede hacerse utilizando cp(1) o dd(1) como se muestra.     # cp /dev/sdb disk.img # dd if=/dev/sdb of=disk.img 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/hda of=mbr.img bs=512 count=1     # dd if=/dev/hda of=mbr-nopart.img bs=446 count=1 # dd if=/dev/hda 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 su disco de arranque es SCSI o serial ATA, cambie «/dev/hda» por «/dev/sda».     Si ha hecho una imagen del disco de la partición del disco original, cambie «/dev/hda» por «/dev/hda1» etc. 9.7.2. Escribiendo directamente en el disco El archivo imagen del disco «disk.img» se puede escribir como un     dispositivo sin montar, p. ej., el dispositivo SCSI secundario «/ dev/sdb» con el tamaño adecuado como se muestra.     # dd if=disk.img of=/dev/sdb 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 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 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 es únicamente un CD de mayor tamaño que utiliza wodim(1) suministrado por cdrkit.     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/hda», utilizando wodim(1) como se muestra.     # wodim -v -eject dev=/dev/hda 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/hda cd.iso Sugerencia     Si su sistema de escritorio monta automáticamente los CD, desmóntalo con «sudo umount /dev/hda» 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:880, | |paquete básico que tiene od | |coreutils |I:999 |18307 |(1) para volcar archivos | | | | |(HEX, ASCII, OCTAL, …) | |---------------+-----------+------+----------------------------| | | | |paquete de utilidades que | |bsdmainutils |V:11, I:315|17 |tiene hd(1) para volcar | | | | |archivos (HEX, ASCII, OCTAL,| | | | |…) | |---------------+-----------+------+----------------------------| |hexedit |V:0, I:9 |73 |visor y editor binario (HEX,|     | | | |ASCII) | |---------------+-----------+------+----------------------------| | | | |editor hexadecimal con | |bless |V:0, I:2 |924 |funcionalidad completa | | | | |(GNOME) | |---------------+-----------+------+----------------------------| | | | |editor hexadecimal con | |okteta |V:1, I:12 |1585 |funcionalidad completa | | | | |(KDE4) | |---------------+-----------+------+----------------------------| |ncurses-hexedit|V:0, I:1 |130 |visor y editor binario (HEX,| | | | |ASCII, EBCDIC) | |---------------+-----------+------+----------------------------| |beav |V:0, I:0 |137 |visor y editor binario (HEX,| | | | |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:8, I:63 |390 |utilidades para archivos MSDOS sin | | | | |montarlos | |--------+-----------+------+-----------------------------------| |hfsutils|V:0, I:5 |184 |utilidades para archivos HFS y HFS+| | | | |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:94 |268 |de archivo, para comprobar y |     | | | |reparar archivos | |----------+-----------+------+---------------------------------| |dvdisaster|V:0, I:1 |1422 |Protección contra pérdida/rotura/| | | | |vejez de medios CD/DVD | |----------+-----------+------+---------------------------------| | | | |herramienta de copia de seguridad| |dvbackup |V:0, I:0 |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:28 |1413 |de particiones y | | | | |recuperaciones de disco | |-------------+-----------+------+------------------------------| | | | |utilidades para la | |magicrescue |V:0, I:2 |255 |recuperación de archivos y | | | | |búsqueda de bytes mágicos | |-------------+-----------+------+------------------------------| |scalpel |V:0, I:3 |89 |Divisor de archivos ligero y | | | | |alto rendimiento | |-------------+-----------+------+------------------------------| |myrescue |V:0, I:2 |83 |recuperación de datos de | | | | |discos duros dañados | |-------------+-----------+------+------------------------------| | | | |utilidad para recuperar | |extundelete |V:0, I:8 |147 |archivos borrados en sistemas | | | | |de archivos ext3/4 | |-------------+-----------+------+------------------------------| | | | |utilidad para recuperar | |ext4magic |V:0, I:4 |233 |archivos borrados en sistemas | | | | |de archivos ext3/4 | |-------------+-----------+------+------------------------------|     | | | |herramienta de ayuda a la | |ext3grep |V:0, I:2 |293 |recuperación de archivos | | | | |borrados en sistemas de | | | | |archivos ext3 | |-------------+-----------+------+------------------------------| | | | |programa de recuperación de | |scrounge-ntfs|V:0, I:2 |50 |datos en sistemas de archivos | | | | |NTFS | |-------------+-----------+------+------------------------------| |gzrt |V:0, I:0 |33 |conjunto de herramientas de | | | | |recuperación gzip | |-------------+-----------+------+------------------------------| |sleuthkit |V:3, I:24 |1671 |herramientas de análisis | | | | |forense (Sleuthkit) | |-------------+-----------+------+------------------------------| |autopsy |V:0, I:1 |1026 |interfaz gráfico para | | | | |SleuthKit | |-------------+-----------+------+------------------------------| |foremost |V:0, I:5 |102 |aplicación forense para la | | | | |recuperación de datos | |-------------+-----------+------+------------------------------| | | | |herramienta para el análisis | |guymager |V:0, I:0 |1021 |forense de imágenes basado en | | | | |Qt | |-------------+-----------+------+------------------------------| |dcfldd |V:0, I:3 |114 |versión mejorada de dd para | | | | |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 Existen diferentes modos de borrar completamente la información     de un disco duro como dispositivo, p. ej. una memoria USB ubicada en «/dev/sda». Atención     Antes de ejecutar las órdenes que le vamos a mostrar, compruebe la ubicación de su memoria USB por medio de mount(8). El dispositivo que indica «/dev/sda» puede ser un disco duro SCSI o serial-ATA que contiene su sistema.     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/hda», «/dev/sda», etc. 9.8.9. Borrar áreas de disco duro no utilizadas Las áreas en desuso del disco duro (o de la memoria USB), p. ej.     «/dev/sdb1» todavía pueden contener datos borrados ya que solo han sido desligados del sistema de archivos. Estos se pueden limpiar sobrescribiendo. # 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     Esto es generalmente suficiente para las memorias USB. Pero no es perfecto. La mayor parte de los nombres de archivo borrados y sus atributos pueden estar ocultos y permanecer en el sistema de archivos. 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:19, I:79 |417 |dispositivos de bloque | | | | |(dm-crypt / LUKS) | |--------------+-----------+------+-----------------------------| | | | |utilidades para cifrar | | | | |dispositivos de bloque |     |cryptmount |V:2, I:3 |231 |(dm-crypt / LUKS) centrado en| | | | |el montaje/desmontaje por | | | | |usuarios normales | |--------------+-----------+------+-----------------------------| | | | |utilidades para el cifrado | |fscrypt |V:0, I:1 |5520 |del sistema de archivos de | | | | |Linux (fscrypt) | |--------------+-----------+------+-----------------------------| | | | |Módulo PAM para el cifrado | |libpam-fscrypt|V:0, I:0 |5519 |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 Puede cifrar el contenido de los dispositivos masivos extraíbles,     p. ej. memoria USB en «/dev/sdx», utilizando dm-crypt/LUKS. Simplemente formatéelo como se muestra. # 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 |I:480 |17 |la construcción de paquetes| | | | |Debian: make, gcc, … | |----------------+-----------+------+---------------------------| | |V:166, | |utilidades de compresión y | |bzip2 |I:970 |112 |descompresión de archivos | | | | |bz2 | |----------------+-----------+------+---------------------------| |libncurses5-dev |I:71 |6 |bibliotecas de desarrollo y| | | | |documentación de ncurses | |----------------+-----------+------+---------------------------| | | | |git: sistema de control de | |git |V:351, |46734 |versiones distribuido | | |I:549 | |utilizado por el núcleo de | | | | |Linux | |----------------+-----------+------+---------------------------|     | | | |aporta el entorno fakeroot | |fakeroot |V:29, I:486|224 |para la construcción de | | | | |paquetes sin ser «root« | |----------------+-----------+------+---------------------------| | |V:430, | |herramienta para construir | |initramfs-tools |I:989 |113 |initramfs (propio de | | | | |Debian) | |----------------+-----------+------+---------------------------| | | | |soporte del núcleo para | |dkms |V:74, I:162|196 |módulos dinámico (DKMS, | | | | |dynamic kernel module | | | | |support) (genérico) | |----------------+-----------+------+---------------------------| | | | |herramienta de ayuda para | |module-assistant|V:0, I:19 |406 |crear los paquetes de los | | | | |módulos (específico de | | | | |Debian) | |----------------+-----------+------+---------------------------| | | | |archivos de órdenes para el| |devscripts |V:6, I:40 |2658 |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:880, |18307 |Utilidades básicas de GNU| | |I:999 | |que contienen chroot(8) | |------------------+-----------+------+-------------------------| | | | |herramientas systemd | |systemd-container |V:53, I:61 |1330 |container/nspawn que | | | | |contienen systemd-nspawn | | | | |(1) | |------------------+-----------+------+-------------------------| | | | |herramientas | |schroot |V:5, I:7 |2579 |especializadas para la | | | | |ejecución de paquetes | | | | |binarios en «chroot« | |------------------+-----------+------+-------------------------| | | | |herramientas para la | |sbuild |V:1, I:3 |243 |construcción de paquetes | | | | |binarios desde el código | | | | |fuente de Debian | |------------------+-----------+------+-------------------------| | | | |sistema de arranque como | |debootstrap |V:5, I:54 |314 |sistema Debian mínimo | | | | |(escrito en sh) | |------------------+-----------+------+-------------------------| | | | |sistema de arranque de un| |cdebootstrap |V:0, I:1 |115 |sistema Debian (escrito | | | | |en C) | |------------------+-----------+------+-------------------------| | | | |utilidades para la | |cloud-image-utils |V:1, I:17 |66 |gestión de las imágenes | | | | |en la nube | |------------------+-----------+------+-------------------------| |cloud-guest-utils |V:3, I:13 |71 |utilidades para invitados| | | | |en la nube | |------------------+-----------+------+-------------------------| | | | |Gestor de Máquinas | | | | |Virtuales: aplicación de | |virt-manager |V:11, I:44 |2296 |escritorio para la | | | | |gestión de máquinas | | | | |virtuales | |------------------+-----------+------+-------------------------| |libvirt-clients |V:46, I:65 |1241 |programas para la | | | | |biblioteca libvirt | |------------------+-----------+------+-------------------------| | | | |Incus: contenedor de los | |incus |V:0, I:0 |56209 |sistemas y gestor de | | | | |máquinas virtuales (para | | | | |Debian 13 "Trixie") | |------------------+-----------+------+-------------------------| | | | |LXD: contenedor de los | |lxd |V:0, I:0 |52119 |sistemas y gestor de | | | | |máquinas virtuales (para | | | | |Debian 12 "Bookworm") | |------------------+-----------+------+-------------------------| | | | |podman: motor para | |podman |V:14, I:16 |41948 |ejecutar contenedores | | | | |basados en OCI en Pods | |------------------+-----------+------+-------------------------| | | | |motor para ejecutar | |podman-docker |V:0, I:0 |249 |contenedores basados en | | | | |OCI en Pods - wrapper | | | | |para docker | |------------------+-----------+------+-------------------------|     | | | |docker: Tiempo de | |docker.io |V:41, I:43 |150003|ejecución de contenedores| | | | |Linux | |------------------+-----------+------+-------------------------| | | | |games-emulator: | |games-emulator |I:0 |21 |emuladores de Debian para| | | | |juegos | |------------------+-----------+------+-------------------------| |bochs |V:0, I:0 |6956 |Bochs: emulador de PC | | | | |IA-32 PC | |------------------+-----------+------+-------------------------| |qemu |I:14 |97 |QEMU: emulador rápido de | | | | |un procesador genérico | |------------------+-----------+------+-------------------------| | | | |QEMU: binarios para la | |qemu-system |I:22 |66 |emulación de un sistema | | | | |completo | |------------------+-----------+------+-------------------------| |qemu-user |V:1, I:6 |93760 |QEMU: binarios para la | | | | |emulación en modo usuario| |------------------+-----------+------+-------------------------| |qemu-utils |V:12, I:106|10635 |QEMU: utilidades | |------------------+-----------+------+-------------------------| | | | |KVM: virtualización | |qemu-system-x86 |V:33, I:91 |58140 |completa de hardware x86 | | | | |con la virtualización | | | | |asistida por hardware | |------------------+-----------+------+-------------------------| | | | |VirtualBox: solución de | |virtualbox |V:6, I:8 |130868|virtualización x86 en | | | | |i386 y amd64 | |------------------+-----------+------+-------------------------| | | | |Boxes: Sencilla | |gnome-boxes |V:1, I:7 |6691 |aplicación de GNOME para | | | | |acceder a sistemas | | | | |virtuales | |------------------+-----------+------+-------------------------| | | | |herramientas para la | |xen-tools |V:0, I:2 |719 |gestión de debian del | | | | |servidor virtual XEN | |------------------+-----------+------+-------------------------| | | | |Wine: Implementación de | |wine |V:13, I:60 |132 |la API Windows (suite | | | | |estándar) | |------------------+-----------+------+-------------------------| | | | |DOSBox: emulador x86 con | |dosbox |V:1, I:15 |2696 |gráficos Tandy/Herc/CGA/ | | | | |EGA/VGA/SVGA , sonido y | | | | |DOS | |------------------+-----------+------+-------------------------| | | | |Contenedores Linux | |lxc |V:9, I:12 |25890 |herramientas del espacio | | | | |de usuario | |------------------+-----------+------+-------------------------| | | | |venv para crear entornos | |python3-venv |I:88 |6 |virtuales python | | | | |(biblioteca del sistema) | |------------------+-----------+------+-------------------------| | | | |virtualenv para crear | |python3-virtualenv|V:9, I:50 |356 |entornos python virtuales| | | | |aislados | |------------------+-----------+------+-------------------------| | | | |pipx para instalar | |pipx |V:3, I:19 |3324 |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:902, |3077 |.tar |tar(1) |estándar del | | |I:999 | | | |archivo | | | | | | |(predeterminada)| |----------+-----------+------+---------+-------+----------------| | | | | | |Archivador | | |V:440, | | | |estilo Unix | |cpio |I:998 |1199 |.cpio |cpio(1)|System V, | | | | | | |utilizado con | | | | | | |find(1) | |----------+-----------+------+---------+-------+----------------| | | | | | |archivador para | |binutils |V:172, |144 |.ar |ar(1) |la creación de | | |I:629 | | | |bibliotecas | | | | | | |estáticas | |----------+-----------+------+---------+-------+----------------| | | | | |fastjar|archivador para | |fastjar |V:1, I:13 |183 |.jar |(1) |Java (similar a | | | | | | |zip) | |----------+-----------+------+---------+-------+----------------| | | | | | |nuevo archivador| |pax |V:8, I:14 |170 |.pax |pax(1) |estándar POSIX, | | | | | | |comprometido | | | | | | |entre tar y cpio| |----------+-----------+------+---------+-------+----------------| | | | | |gzip |Utilidad de | |gzip |V:876, |252 |.gz |(1), |compresión GNU | | |I:999 | | |zcat |LZ77 (estándar | | | | | |(1), … |de facto) | |----------+-----------+------+---------+-------+----------------| | | | | | |La utilidad de | | | | | | |compresión por | | | | | | |ordenamiento de | | | | | | |bloques | | | | | |bzip2 |Burrows-Wheeler | |bzip2 |V:166, |112 |.bz2 |(1), |tiene el índice | | |I:970 | | |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:16 |149 |.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:360, |1203 |.xz |xzdec |(1) (más lento | | |I:980 | | |(1), … |que gzip pero | | | | | | |más rápido que | | | | | | |bzip2; es el | | | | | | |sustituyo del la| | | | | | |utilidad de | | | | | | |compresión LZMA)| |----------+-----------+------+---------+-------+----------------| | | | | |zstd |Utilidad de | | |V:193, | | |(1), |compresión | |zstd |I:481 |2158 |.zstd |zstdcat|rápida sin | | | | | |(1), … |pérdidas | | | | | | |Zstandard | |----------+-----------+------+---------+-------+----------------| | | | | | |7-Zip archivador| | | | | |7zr(1),|de archivos con | |p7zip |V:20, I:463|8 |.7z |p7zip |alto índice de | | | | | |(1) |compresión | | | | | | |(compresión | | | | | | |LZMA). | |----------+-----------+------+---------+-------+----------------| | | | | | |7-Zip archivador| | | | | | |de archivos con | |p7zip-full|V:110, |12 |.7z |7z(1), |alto ratio de | | |I:480 | | |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:15, I:142|164 |.lzo |lzop(1)|más alta que | | | | | | |gzip(1) (menor | | | | | | |índice de | | | | | | |compresión que | | | | | | |gzip con una | | | | | | |sintaxis | | | | | | |parecida) | |----------+-----------+------+---------+-------+----------------| | | | | | |InfoZIP: | |zip |V:48, I:380|616 |.zip |zip(1) |herramienta de | | | | | | |archivo y | | | | | | |compresión DOS | |----------+-----------+------+---------+-------+----------------| | | | | | |InfoZIP: | | |V:105, | | |unzip |herramienta de | |unzip |I:771 |379 |.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:880, | | |directorios | |coreutils |I:999 |18307 |GNU cp |localmente («-a« | | | | | |para hacerlo | | | | | |recursivo) | |--------------+-----------+------+-----------+-----------------| | | | | |copia archivos y | | | | | |directorios de | |openssh-client|V:866, |4959 |scp |forma remota | | |I:996 | | |(cliente, -r» |     | | | | |para hacerlo | | | | | |recursivo) | |--------------+-----------+------+-----------+-----------------| | | | | |copia archivos y | |openssh-server|V:730, |1804 |sshd |directorios de | | |I:814 | | |forma remota | | | | | |(servidor remoto)| |--------------+-----------+------+-----------+-----------------| | |V:246, | | |sincronización y | |rsync |I:552 |781 | |respaldo remoto | | | | | |en un sentido | |--------------+-----------+------+-----------+-----------------| | | | | |sincronización y | |unison |V:3, I:15 |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 proporcionar 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. 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 &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:554, | | |Guard - | |gnupg |I:906 |885 |gpg(1) |herramienta de | | | | | |firma y cifrado | | | | | |OpenPGP | |---------------+-----------+------+-----------+----------------| | | | | |GNU Privacy | | |V:893, | | |Guard - | |gpgv |I:999 |922 |gpgv(1) |herramienta de | | | | | |verificación de | | | | | |firma | |---------------+-----------+------+-----------+----------------| | | | | |extracción | | | | | |únicamente de la| | | | | |información | |paperkey |V:1, I:14 |58 |paperkey(1)|secreta sin | | | | | |considerar las | | | | | |claves secretas | | | | | |OpenPGP | |---------------+-----------+------+-----------+----------------| | | | | |utilidades para |     | | | | |dm-crypt cifrado| |cryptsetup |V:19, I:79 |417 |cryptsetup |de dispositivos | | | | |(8), … |de bloque | | | | | |compatibles con | | | | | |LUKS | |---------------+-----------+------+-----------+----------------| | |V:880, | | |crea y comprueba| |coreutils |I:999 |18307 |md5sum(1) |el resumen MD5 | | | | | |de un mensaje | |---------------+-----------+------+-----------+----------------| | |V:880, | | |crea y comprueba| |coreutils |I:999 |18307 |sha1sum(1) |el resumen SHA1 | | | | | |de un mensaje | |---------------+-----------+------+-----------+----------------| | | | | |crea el resumen | |openssl |V:841, |2111 |openssl |de un mensaje | | |I:995 | |(1ssl) |con «openssl | | | | | |dgst» (OpenSSL) | |---------------+-----------+------+-----------+----------------| | | | | |almacenar y | |libsecret-tools|V:0, I:10 |41 |secret-tool|recuperar las | | | | |(1) |contraseñas | | | | | |(CLI) | |---------------+-----------+------+-----------+----------------| | | | | |herramienta de | |seahorse |V:80, I:269|7987 |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 | |mi_Id_de_usuario |mi_ID_de_usuario | |--------------------+------------------------------------------| |gpg --edit-key |edición interactiva de la clave, «help« | |ID_de_usuario |para obtener ayuda | |--------------------+------------------------------------------| |gpg -o archivo |exporta todas las claves a un archivo | |--export | | |--------------------+------------------------------------------| |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 | +---------------------------------------------------------------+     Lo siguiente carga mi clave «1DD8D791» a un popular servidor de claves «hkp://keys.gnupg.net».     $ gpg --keyserver hkp://keys.gnupg.net --send-keys 1DD8D791 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». 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 archivo |archivo de firma en ASCII del | | |archivo.asc blindado | |-----------------------+---------------------------------------| |gpg --armor --sign |, , | |archivo | | |-----------------------+---------------------------------------| |gpg --clearsign archivo|mensaje sin firmar | |-----------------------+---------------------------------------| |gpg --clearsign archivo|envía un mensaje de correo sin firmar a| ||mail foo@example.org |foo@example.org | |-----------------------+---------------------------------------| |gpg --clearsign | | |--not-dash-escaped |parche sin firmar | |parche | | |-----------------------+---------------------------------------| |gpg --verify archivo |comprueba un archivo sin firmar | |-----------------------+---------------------------------------| |gpg -o archivo.sig -b |crea un firma objetivo | |archivo | | |-----------------------+---------------------------------------| |gpg -o file.sig |, , | |--detach-sign file | | |-----------------------+---------------------------------------| |gpg --verify |comprueba el archivo con archivo.sig | |archivo.sig archivo | | |-----------------------+---------------------------------------| |gpg -o |intento de cifrado con clave pública |     |archivo_cifrado.gpg -r |para el nombre del archivo al arhivo | |nombre -e archivo |binario archivo_cifrado.gpg | |-----------------------+---------------------------------------| |gpg -o | | |archivo_cifrado.gpg |, , | |--recipient nombre | | |--encrypt archivo | | |-----------------------+---------------------------------------| |gpg -o |intento de cifrado con clave pública | |archivo_cifrado.asc -a |para el nombre del archivo al archivo | |-r name -e archivo |blindado ASCII archivo_cifrado.asc | |-----------------------+---------------------------------------| |gpg -o |cifrado simétrico de archivo a | |archivo_cifrado.gpg -c |archivo_cifrado_gpg | |archivo | | |-----------------------+---------------------------------------| |gpg -o | | |archivo_cifrado.gpg |, , | |--symmetric archivo | | |-----------------------+---------------------------------------| |gpg -o |intento del cifrado simétrico para el | |archivo_cifrado.asc -a |nombre desde el archivo fuente al | |-c archivo |archivo blindado en ASCII | | |archivo_cifrado.asc | |-----------------------+---------------------------------------| |gpg -o archivo -d | | |archivo_cifrado.gpg -r |Descifrado | |name | | |-----------------------+---------------------------------------| |gpg -o file --decrypt |, , | |archivo_cifrado.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 proporcionar 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:97, I:700|248 |patch(1) |aplica un archivo | | | | | |diff al original | |----------+-----------+------+-----------+---------------------| | | | | |compare dos archivos | |vim |V:95, I:369|3743 |vimdiff(1) |en vim uno contra | | | | | |otro | |----------+-----------+------+-----------+---------------------| | | | | |herramienta | |imediff |V:0, I:0 |200 |imediff(1) |interactiva de fusión| | | | | |2/3 a pantalla | | | | | |completa | |----------+-----------+------+-----------+---------------------| |meld |V:7, I:30 |3536 |meld(1) |compara y mezcla | | | | | |archivos (GTK) | |----------+-----------+------+-----------+---------------------| |wiggle |V:0, I:0 |175 |wiggle(1) |aplica parches | | | | | |rechazados | |----------+-----------+------+-----------+---------------------| |diffutils |V:862, |1735 |diff(1) |compara archivos | | |I:996 | | |línea a línea | |----------+-----------+------+-----------+---------------------| | |V:862, | | |compara y mezcla tres| |diffutils |I:996 |1735 |diff3(1) |archivos línea a | | | | | |línea | |----------+-----------+------+-----------+---------------------| |quilt |V:2, I:22 |871 |quilt(1) |gestiona un conjunto | | | | | |de parches | |----------+-----------+------+-----------+---------------------| | | | | |muestra las palabras | |wdiff |V:7, I:51 |648 |wdiff(1) |diferentes en dos | | | | | |archivos de textos | |----------+-----------+------+-----------+---------------------| | | | | |produce un histograma| |diffstat |V:13, I:121|74 |diffstat(1)|de los cambios de | | | | | |diff | |----------+-----------+------+-----------+---------------------| | | | |combinediff|crea un parche | |patchutils|V:16, I:119|232 |(1) |acumulativo con dos | | | | | |parches incrementales| |----------+-----------+------+-----------+---------------------| |patchutils|V:16, I:119|232 |dehtmldiff |extrae un diff de un | | | | |(1) |página HTML | |----------+-----------+------+-----------+---------------------| | | | |filterdiff |extrae o excluye | |patchutils|V:16, I:119|232 |(1) |diffs de un archivo | | | | | |diff | |----------+-----------+------+-----------+---------------------| | | | | |repara archivos diff |     |patchutils|V:16, I:119|232 |fixcvsdiff |creados por CVS que | | | | |(1) |son malinterpretados | | | | | |por patch(1) | |----------+-----------+------+-----------+---------------------| |patchutils|V:16, I:119|232 |flipdiff(1)|intercambia el orden | | | | | |de dos parches | |----------+-----------+------+-----------+---------------------| | | | | |muestra que archivos | | | | | |son modificados por | |patchutils|V:16, I:119|232 |grepdiff(1)|un parche de acuerdo | | | | | |a una expresión | | | | | |regular | |----------+-----------+------+-----------+---------------------| | | | | |muestra las | |patchutils|V:16, I:119|232 |interdiff |diferencias entre dos| | | | |(1) |archivos diff | | | | | |unificados | |----------+-----------+------+-----------+---------------------| | | | | |muestra los archivos | |patchutils|V:16, I:119|232 |lsdiff(1) |modificados por un | | | | | |parche | |----------+-----------+------+-----------+---------------------| | | | | |recalcula las cuentas| |patchutils|V:16, I:119|232 |recountdiff|y desplazamientos en | | | | |(1) |un contexto diff | | | | | |unificado | |----------+-----------+------+-----------+---------------------| | | | | |repara los | | | | | |desplazamientos y | |patchutils|V:16, I:119|232 |rediff(1) |cuentas en un diff | | | | | |editado de forma | | | | | |manual | |----------+-----------+------+-----------+---------------------| |patchutils|V:16, I:119|232 |splitdiff |selecciona parches | | | | |(1) |incrementales | |----------+-----------+------+-----------+---------------------| | | | |unwrapdiff |deshace los parches | |patchutils|V:16, I:119|232 |(1) |que han sido | | | | | |mezclados | |----------+-----------+------+-----------+---------------------| | | | | |muestra las | |dirdiff |V:0, I:1 |167 |dirdiff(1) |diferencias y mezcla | | | | | |los cambios entre | | | | | |árboles de directorio| |----------+-----------+------+-----------+---------------------| | | | | |compara dos archivos | |docdiff |V:0, I:0 |553 |docdiff(1) |palabra a palabra / | | | | | |carácter a carácter | |----------+-----------+------+-----------+---------------------| |makepatch |V:0, I:0 |100 |makepatch |genera archivos de | | | | |(1) |parches extendidos | |----------+-----------+------+-----------+---------------------| |makepatch |V:0, I:0 |100 |applypatch |aplica archivos de | | | | |(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:351, | | |de control de | |git |I:549 |46734 |git(7) |versiones rápido,| | | | | |escalable y | | | | | |distribuido | |----------------+-----------+------+----------------+-----------------| | | | | |Navegador de | |gitk |V:5, I:33 |1838 |gitk(1) |repositorios Git | | | | | |GUI con | | | | | |históricos | |----------------+-----------+------+----------------+-----------------| |git-gui |V:1, I:18 |2429 |git-gui(1) |GUI para Git (sin| | | | | |históricos) | |----------------+-----------+------+----------------+-----------------| | | | | |Git envía un | |git-email |V:0, I:10 |1087 |git-send-email |conjunto de | | | | |(1) |parches como un | | | | | |correo | |----------------+-----------+------+----------------+-----------------|     | | | | |automatiza la | |git-buildpackage|V:1, I:9 |1988 |git-buildpackage|creación de | | | | |(1) |paquetes Debian | | | | | |con Git | |----------------+-----------+------+----------------+-----------------| | | | | |interoperabilidad| |dgit |V:0, I:1 |473 |dgit(1) |de git con el | | | | | |archivo de Debian| |----------------+-----------+------+----------------+-----------------| | | | | |herramienta de | | | | | |ayuda interactiva| |imediff |V:0, I:0 |200 |git-ime(1) |para | | | | | |confirmaciones de| | | | | |git separadas | |----------------+-----------+------+----------------+-----------------| |stgit |V:0, I:0 |601 |stg(1) |quilt sobre git | | | | | |(Python) | |----------------+-----------+------+----------------+-----------------| |git-doc |I:12 |13208 |N/A |documentación | | | | | |oficial de Git | |----------------+-----------+------+----------------+-----------------| | | | | |«Git Mágico«, una| |gitmagic |I:0 |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:5, I:32 |2019 |Mercurial |distribuido|en Python y | | | | | | |algo en C | |----------+-----------+------+-----------+-----------+--------------| | | | | | |DCVS con | | | | | | |notación | |darcs |V:0, I:5 |34070 |Darcs |distribuido|algebraica | | | | | | |inteligente | | | | | | |(lento) | |----------+-----------+------+-----------+-----------+--------------| | | | | | |DVCS | | | | | | |influenciado | |bzr |I:8 |28 |GNU Bazaar |distribuido|por tla, | | | | | | |escrito en | | | | | | |Python | | | | | | |(historic) | |----------+-----------+------+-----------+-----------+--------------| | | | | | |DVCS | |tla |V:0, I:1 |1022 |GNU arch |distribuido|principalmente| | | | | | |por Tom Lord | | | | | | |(histórico) |     |----------+-----------+------+-----------+-----------+--------------| | | | | | |«CVS bien | | | | | | |hecho«, nuevo | |subversion|V:13, I:72 |4837 |Subversion |remoto |estándar CVS | | | | | | |remoto | | | | | | |(histórico) | |----------+-----------+------+-----------+-----------+--------------| | | | | | |estándar | |cvs |V:4, I:30 |4753 |CVS |remoto |remoto | | | | | | |anterior VCS | | | | | | |(histórico) | |----------+-----------+------+-----------+-----------+--------------| | | | | | |Visualización | | | | | | |GUI del árbol | | | | | | |de | |tkcvs |V:0, I:1 |1498 |CVS, … |remoto |repositorios | | | | | | |VCS (CVS, | | | | | | |Subversion, | | | | | | |RCS) | |----------+-----------+------+-----------+-----------+--------------| | | | | | |«Unix SCCS | |rcs |V:2, I:13 |564 |RCS |local |bien hecho« | | | | | | |(histórico) | |----------+-----------+------+-----------+-----------+--------------| | | | | | |clon de Unix | |cssc |V:0, I:1 |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:917, | |conjunto de |texto entre | |libc6 |I:999 |12988 |caracteres |configuraciones | | | | | |locales mediante | | | | | |iconv(1) | | | | | |(fundamental) | |--------+-----------+------+--------------+--------------------| | | | | |conversor de | | | | | |codificaciones de | | | | | |texto entre | |recode |V:2, I:18 |602 |conjunto de |configuraciones | | | | |caracteres+eol|locales (versátil, | | | | | |con más | | | | | |funcionalidades y | | | | | |alias) | |--------+-----------+------+--------------+--------------------| | | | | |conversor de | | | | | |codificaciones de | |konwert |V:1, I:48 |134 |conjunto de |texto entre | | | | |caracteres |configuraciones | | | | | |locales |     | | | | |(sofisticado) | |--------+-----------+------+--------------+--------------------| | | | | |traductor del | |nkf |V:0, I:9 |360 |conjunto de |conjunto de | | | | |caracteres |caracteres para el | | | | | |japonés | |--------+-----------+------+--------------+--------------------| | | | |conjunto de |traductor de | |tcs |V:0, I:0 |518 |caracteres |conjunto de | | | | | |caracteres | |--------+-----------+------+--------------+--------------------| | | | | |cambia las letras | |unaccent|V:0, I:0 |35 |conjunto de |acentuadas por su | | | | |caracteres |equivalente sin | | | | | |acentuar | |--------+-----------+------+--------------+--------------------| | | | | |conversor entre | | | | | |formatos de texto | |tofrodos|V:1, I:17 |51 |eol |entre DOS y Unix: | | | | | |fromdos(1) y todos | | | | | |(1) | |--------+-----------+------+--------------+--------------------| | | | | |conversor de | | | | | |formatos de texto | |macutils|V:0, I:0 |312 |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:15, I:187|2837 |html→text |a texto con la | | | | | |orden «w3m -dump» | |---------+-----------+------+---------------+------------------| | | | | |conversor avanzado| |html2text|V:3, I:53 |243 |html→text |de HTML a texto | | | | | |(ISO 8859-1) | |---------+-----------+------+---------------+------------------| | | | | |conversor de HTML | |lynx |V:25, I:344|1948 |html→text |a texto con la | | | | | |orden «lynx -dump»| |---------+-----------+------+---------------+------------------| | | | | |conversor de HTML | |elinks |V:3, I:20 |1654 |html→text |a texto con la | | | | | |orden «elinks | | | | | |-dump» | |---------+-----------+------+---------------+------------------| | | | | |Conversor de HTML | |links |V:3, I:28 |2314 |html→text |a texto con la |     | | | | |orden «links | | | | | |-dump» | |---------+-----------+------+---------------+------------------| | | | | |conversor de HTML | |links2 |V:1, I:12 |5492 |html→text |a texto con la | | | | | |orden «links2 | | | | | |-dump» | |---------+-----------+------+---------------+------------------| | | | | |convierte archivos| |catdoc |V:14, I:155|686 |MSWord→text,TeX|MSWord a texto | | | | | |plano o TeX | |---------+-----------+------+---------------+------------------| | | | | |convierte archivos| |antiword |V:1, I:7 |589 |MSWord→text,ps |MSWord a texto | | | | | |plano o ps | |---------+-----------+------+---------------+------------------| | | | | |borra las | |unhtml |V:0, I:0 |40 |html→text |etiquetas de | | | | | |marcado de un | | | | | |archivo HTML | |---------+-----------+------+---------------+------------------| | | | | |conversor de Texto| |odt2txt |V:2, I:40 |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:18, I:395|36525 |highlight |a HTML con | | | | | |«:source | | | | | |$VIMRUNTIME/ | | | | | |syntax/ | | | | | |html.vim» | |----------------+-----------+------+---------------+-------------| | | | | |convierte un | |cxref |V:0, I:0 |1190 |c→html |programa en | | | | | |lenguaje C a | | | | | |latext y HTML| |----------------+-----------+------+---------------+-------------| | | | | |convierte | | | | | |varios | |src2tex |V:0, I:0 |622 |highlight |códigos | | | | | |fuentes a TeX| | | | | |(lenguaje C) | |----------------+-----------+------+---------------+-------------| | | | | |convierte | | | | | |varias | | | | | |códigos | | | | | |fuente a | | | | | |HTML, XHTML, | | | | | |LaTeX, | |source-highlight|V:0, I:5 |2114 |highlight |Texinfo, | | | | | |secuencias de| | | | | |escape de | | | | | |color ANSI y | | | | | |archivos | | | | | |DocBook con | | | | | |resaltado | | | | | |(C++) | |----------------+-----------+------+---------------+-------------| | | | | |convierte | | | | | |varios | | | | | |códigos | | | | | |fuente a | |highlight |V:0, I:5 |1371 |highlight |archivos | | | | | |HTML, XHTML, |     | | | | |RTF, LaTeX, | | | | | |TeX o XSL-FO | | | | | |con resaltado| | | | | |(C++) | |----------------+-----------+------+---------------+-------------| | | | | |coloreado | |grc |V:0, I:5 |208 |texto→color |genérico para| | | | | |todo (Python)| |----------------+-----------+------+---------------+-------------| | | | | |conversor | |pandoc |V:9, I:45 |194495|texto→cualquier|general | | | | |cosa |«markup« | | | | | |(Haskell) | |----------------+-----------+------+---------------+-------------| | | | | |formateador | | | | | |de documentos| |python3-docutils|V:14, I:51 |1804 |texto→cualquier|de Texto | | | | |cosa |ReStructurado| | | | | |a XML | | | | | |(Python) | |----------------+-----------+------+---------------+-------------| | | | | |Formateador | | | | | |de documentos| |markdown |V:0, I:9 |58 |texto→html |de texto | | | | | |Markdown en | | | | | |(X)HTML | | | | | |(Perl) | |----------------+-----------+------+---------------+-------------| | | | | |formateador | | | | | |de documentos| |asciidoctor |V:0, I:7 |98 |texto→cualquier|de texto | | | | |cosa |AsciiDoc a | | | | | |XML/HTML | | | | | |(Ruby) | |----------------+-----------+------+---------------+-------------| | | | | |Sistema de | | | | | |publicación | |python3-sphinx |V:6, I:24 |2756 |texto→cualquier|de documentos| | | | |cosa |basado en | | | | | |ReStructured | | | | | |Text (Python)| |----------------+-----------+------+---------------+-------------| | | | | |Sistema de | | | | | |publicación | |hugo |V:0, I:5 |78678 |texto→html |de sitios | | | | | |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.         La sintaxis fundamental de un elemento XML se marca como se muestra.     content     Un elemento XML sin contenido se marca de forma resumida como se muestra.         El «atributo=«valor«» de los ejemplos anteriores son opcionales.     Un comentario en XML se marca como se muestra.         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| |-------------------+-------------------------| |" |« : comillas | |-------------------+-------------------------|     |' |' : apóstrofe | |-------------------+-------------------------| |< |< : menor que | |-------------------+-------------------------| |> |> : mayor que | |-------------------+-------------------------| |& |& : 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 «». 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|I:403 |2134 |xml |de XML (DTD) para | | | | | |DocBook | |-----------+-----------+------+-------+------------------------| | | | | |Hojas de estilos XSL | | | | |xml/ |para procesar documentos| |docbook-xsl|V:13, I:146|14851 |xslt |XML DocBook a diferentes| | | | | |formatos de salida con | | | | | |XSLT | |-----------+-----------+------+-------+------------------------| | | | | |procesador de línea de |     |xsltproc |V:16, I:79 |162 |xslt |órdenes XSLT (XML → XML,| | | | | |HTML, texto plano, etc.)| |-----------+-----------+------+-------+------------------------| |xmlto |V:1, I:14 |130 |xml/ |conversor de XML a | | | | |xslt |cualquier cosa con XSLT | |-----------+-----------+------+-------+------------------------| |fop |V:0, I:11 |284 |xml/ |convierte archivos XML | | | | |xsl-fo |Docbook a PDF | |-----------+-----------+------+-------+------------------------| | | | | |convierte archivos | |dblatex |V:2, I:10 |4636 |xml/ |Docbook a documentos | | | | |xslt |DVI, PostScript, PDF con| | | | | |XSLT | |-----------+-----------+------+-------+------------------------| |dbtoepub |V:0, I:0 |37 |xml/ |conversor DocBook XML a | | | | |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:26 |1061 |dsssl |procesador de estándar| | | | | |DSSSL (más | | | | | |actualizado) | |-------------+-----------+------+-------+----------------------| | | | | |Hojas de estilo DSSSL | | | | | |para el procesamiento | |docbook-dsssl|V:0, I:13 |2605 |xml/ |de documentos XML | | | | |dsssl |DocBook a diferentes |     | | | | |formatos de salida con| | | | | |DSSSL | |-------------+-----------+------+-------+----------------------| | | | | |utilidades para | | | | | |archivos DocBook | | | | | |incluyendo la | |docbook-utils|V:0, I:9 |287 |xml/ |conversión a otros | | | | |dsssl |formatos (HTML, RTF, | | | | | |PS, man, PDF) con las | | | | | |órdenes docbook2* con | | | | | |DSSSL | |-------------+-----------+------+-------+----------------------| | | | |SGML/ |conversor de SGML y | |sgml2x |V:0, I:0 |90 |dsssl |XML usando hojas de | | | | | |estilos de 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 | | | | | |de páginas | |man2html |V:0, I:1 |142 |páginas man→html |man a HTML | | | | | |(soporte | | | | | |CGI) | |---------+-----------+------+----------------------+-----------| | | | | |conversor | |doclifter|I:0 |472 |troff→xml |de troff a | | | | | |DocBook XML| |---------+-----------+------+----------------------+-----------| | | | | |conversor | |texi2html|V:0, I:5 |1847 |texi→html |de Texinfo | | | | | |a HTML | |---------+-----------+------+----------------------+-----------| | | | | |conversor | | | | | |de GNU info| |info2www |V:1, I:2 |74 |info→html |a HTML | | | | | |(soporte |     | | | | |CGI) | |---------+-----------+------+----------------------+-----------| | | | | |conversor | | | | | |de | | | | | |documentos | |wv |V:0, I:4 |733 |MSWord→cualquiera |de | | | | | |Microsoft | | | | | |Word a | | | | | |HTML, | | | | | |LaTeX, etc.| |---------+-----------+------+----------------------+-----------| | | | | |conversor | | | | | |de | |unrtf |V:0, I:3 |148 |rtf→html |documentos | | | | | |de RTF a | | | | | |HTML, etc | |---------+-----------+------+----------------------+-----------| | | | | |archivos | | | | | |WordPerfect| |wp2x |V:0, I:0 |200 |WordPerfect→cualquiera|5.0 y 5.1 a| | | | | |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:21, I:213|180 |xml↔html↔xhtml|(1) | | | | | |(comprobación | | | | | |de sintaxis, | | | | | |reformateo, | | | | | |filtrado, …) | |-------------+-----------+------+--------------+---------------|     | | | | |comprobador de | |tidy |V:1, I:9 |75 |xml↔html↔xhtml|la sintaxis | | | | | |HTML y | | | | | |reformateador | |-------------+-----------+------+--------------+---------------| | | | | |comprobador de | |weblint-perl |V:0, I:1 |32 |lint |estilo mínimo y| | | | | |sintáctico para| | | | | |HTML | |-------------+-----------+------+--------------+---------------| | | | | |herramientas de| | | | |Comprobar el |mantenimiento | |linklint |V:0, I:0 |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:2, I:35 |56 |(La)TeX|tipográfica TeX, para | | | | | |previsualización e impresión| |-------+-----------+------+-------+----------------------------| |groff |V:2, I:36 |20720 |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 | | |--------------+-----------+------+-----------+-----------------| | | | |SGML→página|conversor de SGML| |docbook-to-man|V:0, I:8 |191 |man |DocBook en macros| | | | | |man roff | |--------------+-----------+------+-----------+-----------------| | | | | |generador de | |help2man |V:0, I:7 |542 |text→página|página man |     | | | |man |automático con | | | | | |--help | |--------------+-----------+------+-----------+-----------------| | | | |info→página|conversor de GNU | |info2man |V:0, I:0 |134 |man |info a POD o | | | | | |páginas man | |--------------+-----------+------+-----------+-----------------| | | | | |conversor de | |txt2man |V:0, I:0 |112 |text→página|texto ASCII plano| | | | |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:161, | |El intérprete GPL | |ghostscript |I:583 |179 |Ghostscript de PostScript/ | | | | |PDF | |----------------+-----------+------+---------------------------| | | | |Intérprete Ghostscript de | |ghostscript-x |V:2, I:38 |87 |PostScript/PDF GPL - | | | | |soporte para entornos X | |----------------+-----------+------+---------------------------| | | | |biblioteca de |     |libpoppler102 |V:16, I:129|4274 |representación de PDF | | | | |bifurcado del visor PDF | | | | |xpdf | |----------------+-----------+------+---------------------------| | | | |biblioteca de | |libpoppler-glib8|V:260, |484 |representación PDF | | |I:485 | |(biblioteca compartida | | | | |basada en Glib) | |----------------+-----------+------+---------------------------| | | | |biblioteca de | |poppler-data |V:134, |13086 |representación CMaps para | | |I:607 | |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:152, |728 |pdf→ps,texto,…|pdfinfo, | | |I:471 | | |pdfimages, | | | | | |pdftotext, | | | | | |pdffonts | |-------------+-----------+------+--------------+---------------| | | | | |herramientas de| |psutils |V:4, I:67 |219 |ps→ps |conversión de | | | | | |documentos | | | | | |PostScript | |-------------+-----------+------+--------------+---------------| | | | | |crea póster | |poster |V:0, I:3 |57 |ps→ps |grandes de | | | | | |páginas | | | | | |PostScript | |-------------+-----------+------+--------------+---------------| | | | | |convierte texto| | | | | |ASCII a | |enscript |V:1, I:14 |2130 |texto→ps, |PostScript, | | | | |html, rtf |HTML, RTF o una| | | | | |impresión | | | | | |bonita | |-------------+-----------+------+--------------+---------------| | | | | |conversor de | | | | | |«cualquier | |a2ps |V:0, I:10 |3979 |texto→ps |formato a | | | | | |PostScript« e | | | | | |impresión | | | | | |bonita | |-------------+-----------+------+--------------+---------------| | | | | |herramienta de | |pdftk |I:37 |28 |pdf→pdf |conversión de | | | | | |documentos PDF:| | | | | |pdftk | |-------------+-----------+------+--------------+---------------| | | | | |conversor de | |html2ps |V:0, I:2 |261 |html→ps |HTML a | | | | | |PostScript | |-------------+-----------+------+--------------+---------------| |gnuhtml2latex|V:0, I:0 |27 |html→latex |conversor de |     | | | | |html a latex | |-------------+-----------+------+--------------+---------------| | | | | |conversor de | | | | | |documentos | |latex2rtf |V:0, I:4 |495 |latex→rtf |LaTeX a RTF la | | | | | |cual puede ser | | | | | |leído por MS | | | | | |Word | |-------------+-----------+------+--------------+---------------| | | | | |conversor de | |ps2eps |V:2, I:42 |95 |ps→eps |PostScript a | | | | | |EPS (PostScript| | | | | |encapsulado) | |-------------+-----------+------+--------------+---------------| | | | | |conversor de | | | | | |texto a | |e2ps |V:0, I:0 |109 |texto→ps |PostScript con | | | | | |soporte a la | | | | | |codificación | | | | | |japonés | |-------------+-----------+------+--------------+---------------| |impose+ |V:0, I:0 |118 |ps→ps |utilidades | | | | | |PostScript | |-------------+-----------+------+--------------+---------------| | | | | |imprime bien | | | | | |muchos códigos | | | | | |fuente (C, C++,| |trueprint |V:0, I:0 |149 |texto→ps |Java, Pascal, | | | | | |Perl, Pike, Sh | | | | | |y Verilog) a | | | | | |PostScript | | | | | |(lenguaje C). | |-------------+-----------+------+--------------+---------------| | | | | |conversor de | | | | | |PDF al formato | | | | | |gráficos de | |pdf2svg |V:0, I:3 |32 |pdf→svg |vector | | | | | |escalable | | | | | |(Scalable | | | | | |vector | | | | | |graphics) | |-------------+-----------+------+--------------+---------------| | | | | |conversor de | |pdftoipe |V:0, I:0 |65 |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:2, I:36 |1415 |mail |shar(1), unshar(1), | | | | | |uuencode(1), uudecode(1) | |---------+-----------+------+-------+--------------------------| | | | | |codifica y decodifica los | |mpack |V:1, I:11 |108 |MIME |mensajes MIME: mpack(1) y | | | | | |munpack(1) |     |---------+-----------+------+-------+--------------------------| | | | | |desempaca los archivos | | | | | |adjuntos MIME del tipo | |tnef |V:0, I:6 |110 |ms-tnef|«application/ms-tnef« que | | | | | |es un formato propio de | | | | | |Microsoft | |---------+-----------+------+-------+--------------------------| | | | | |codifica y decodifica los | | | | | |siguientes formatos: | |uudeview |V:0, I:3 |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 | | | | |svg, |paquete | |design-desktop-graphics |I:0 |13 |jpeg, …|para | | | | | |diseñadores| | | | | |gráficos | |------------------------+-----------+------+-------+-----------| | | | | |meta |     | | | | |paquete | | | | |svg, |para la | |education-graphics |I:0 |30 |jpeg, …|enseñanza | | | | | |de gráficos| | | | | |y arte | | | | | |pictórico. | |------------------------+-----------+------+-------+-----------| | | | | |metapaquete| | | | | |para el | |open-font-design-toolkit|I:0 |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:50, I:252|19304 |imagen |Programa de | | | | |(bitmap) |Manipulación | | | | | |de Imágenes | |----------------+-----------+------+------------+--------------| | | | | |Interfaz | | | | | |GTKbasado en | | | | |imagen |X11 para SANE | |xsane |V:12, I:144|2339 |(bitmap) |(Acceso | | | | | |inmediato y | | | | | |fácil a | | | | | |escáner) | |----------------+-----------+------+------------+--------------| |scribus |V:1, I:16 |31345 |ps/pdf/SVG/…|Scribus editor| | | | | |de documentos | |----------------+-----------+------+------------+--------------| | | | |imagen |LibreOffice | |libreoffice-draw|V:72, I:430|10312 |(vector) |office suite -| | | | | |dibujo | |----------------+-----------+------+------------+--------------| | | | | |editor SVG | |inkscape |V:15, I:112|99800 |imagen |(Scalable | | | | |(vector) |Vector | | | | | |Graphics) | |----------------+-----------+------+------------+--------------| | | | |imagen |editor de | |dia |V:2, I:22 |3741 |(vector) |diagramas | | | | | |(Gtk) | |----------------+-----------+------+------------+--------------| | | | | |facilidad para| |xfig |V:0, I:11 |7849 |imagen |la creación | | | | |(vector) |interactiva de| | | | | |figuras en X11| |----------------+-----------+------+------------+--------------| |gocr |V:0, I:7 |540 |imagen→texto|software libre| | | | | |OCR | |----------------+-----------+------+------------+--------------| | | | | |programa visor| |eog |V:64, I:277|7770 |imagen(Exif)|de gráficos | | | | | |«Eye of GNOME«| |----------------+-----------+------+------------+--------------| | | | | |visor y | |gthumb |V:3, I:16 |5032 |imagen(Exif)|navegador de | | | | | |imágenes | | | | | |(GNOME) | |----------------+-----------+------+------------+--------------| | | | | |visor de | |geeqie |V:4, I:15 |2522 |imagen(Exif)|imágenes | | | | | |utilizando GTK| |----------------+-----------+------+------------+--------------|     | | | | |organizador de| |shotwell |V:17, I:255|6263 |imagen(Exif)|fotos digital | | | | | |(GNOME) | |----------------+-----------+------+------------+--------------| |gwenview |V:33, I:106|11755 |imagen(Exif)|visor de | | | | | |imágenes (KDE)| |----------------+-----------+------+------------+--------------| | | | | |aplicaciones | | | | | |KDE para | |kamera |I:105 |998 |imagen(Exif)|soporte de | | | | | |cámaras | | | | | |digitales | |----------------+-----------+------+------------+--------------| | | | | |aplicación | | | | | |para la | |digikam |V:1, I:9 |293 |imagen(Exif)|gestión de | | | | | |fotos | | | | | |digitales para| | | | | |KDE | |----------------+-----------+------+------------+--------------| | | | | |mesa de luz y | |darktable |V:4, I:13 |30554 |imagen(Exif)|cuarto oscuro | | | | | |virtuales para| | | | | |fotógrafos | |----------------+-----------+------+------------+--------------| | | | | |agrupador de | |hugin |V:0, I:8 |5208 |imagen(Exif)|fotografías | | | | | |panorámicas | |----------------+-----------+------+------------+--------------| | | | | |Editor de | |librecad |V:1, I:15 |8963 |DXF, ... |datos CAD en | | | | | |2D | |----------------+-----------+------+------------+--------------| | | | | |Editor de | |freecad |I:18 |36 |DXF, ... |datos CAD en | | | | | |3D | |----------------+-----------+------+------------+--------------| | | | |blend, TIFF,|editor de | |blender |V:3, I:28 |84492 |VRML, … |animaciones 3D| | | | | |etc | |----------------+-----------+------+------------+--------------| |mm3d |V:0, I:0 |3881 |ms3d, obj, |editor OpenGL | | | | |dxf, … |de modelado 3D| |----------------+-----------+------+------------+--------------| | | | | |editor de | |fontforge |V:0, I:6 |3993 |ttf, ps, … |tipos de letra| | | | | |PS, TrueType y| | | | | |OpenType | |----------------+-----------+------+------------+--------------| | | | | |programas para| | | | | |la ajuste e | | | | | |interpolación | |xgridfit |V:0, I:0 |806 |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 |I:317 |74 |(bitmap) |manipulación de| | | | | |imágenes | |-----------------+-----------+------+-------------+---------------| | | | | |programas de | | | | |imagen |manipulación de| |graphicsmagick |V:1, I:11 |5565 |(bitmap) |imágenes | | | | | |(bifurcaciones | | | | | |de imagemagick)| |-----------------+-----------+------+-------------+---------------| | | | |imagen |herramienta de | |netpbm |V:28, I:326|8526 |(bitmap) |conversión de | | | | | |gráficos | |-----------------+-----------+------+-------------+---------------| | | | | |convertir | | | | | |Formato de | | | | | |archivo de | | | | | |imagen de alta | |libheif-examples |V:0, I:2 |191 |heif→jpeg |eficiencia | | | | |(bitmap) |(HEIF) a | | | | | |formatos JPEG, | | | | | |PNG o Y4M con | | | | | |el comando | | | | | |heif-convert(1)| |-----------------+-----------+------+-------------+---------------| | | | | |convierte | | | | | |iconos y | | | | |png↔ico |cursores MS | |icoutils |V:7, I:50 |221 |(bitmap) |Windows a y | | | | | |desde formatos | | | | | |PNG | | | | | |(favicon.ico) | |-----------------+-----------+------+-------------+---------------| | | | | |conversor de | |pstoedit |V:2, I:52 |1011 |ps/pdf→image |archivos | | | | |(vector) |PostScript y | | | | | |PDF a SVG | |-----------------+-----------+------+-------------+---------------| | | | | |herramientas de| | | | | |conversión de | | | | | |archivos con | | | | |Windows/ |formato | |libwmf-bin |V:7, I:119 |151 |imágen |metafile de | | | | |(vector) |Windows | | | | | |(formato de | | | | | |gráficos | | | | | |vectoriales) | |-----------------+-----------+------+-------------+---------------| | | | | |convierte | |fig2sxd |V:0, I:0 |151 |fig→sxd |archivos XFig a| | | | |(vector) |formato Draw de| | | | | |OpenOffice.org | |-----------------+-----------+------+-------------+---------------| | | | | |herramienta | | | | | |para el | | | | | |procesado | |unpaper |V:2, I:17 |412 |imagen→imagen|posterior de | | | | | |páginas | | | | | |escaneadas para| | | | | |OCR | |-----------------+-----------+------+-------------+---------------| | | | | |software libre | |tesseract-ocr |V:7, I:33 |2228 |imagen→texto |OCR basado en | | | | | |el motor OCR | | | | | |comercial de HP| |-----------------+-----------+------+-------------+---------------| | | | | |motor de | | | | | |información | | | | | |OCR: archivo en| |tesseract-ocr-eng|V:7, I:34 |4032 |imagen→texto |inglés | | | | | |tesseact-ocr |     | | | | |para textos | | | | | |ingleses | |-----------------+-----------+------+-------------+---------------| |ocrad |V:0, I:3 |587 |imagen→texto |software libre | | | | | |OCR | |-----------------+-----------+------+-------------+---------------| | | | | |utilidad de | | | | | |línea de | | | | | |órdenes para | |exif |V:2, I:42 |339 |imagen(Exif) |mostrar | | | | | |información | | | | | |EXIF de | | | | | |archivos JPEG | |-----------------+-----------+------+-------------+---------------| | | | | |herramienta de | |exiv2 |V:2, I:27 |275 |imagen(Exif) |manipulación de| | | | | |metainformación| | | | | |EXIF/IPTC | |-----------------+-----------+------+-------------+---------------| | | | | |transforma | |exiftran |V:1, I:14 |69 |imagen(Exif) |imágenes de | | | | | |cámaras | | | | | |digitales jpeg | |-----------------+-----------+------+-------------+---------------| | | | | |utilidad para | | | | | |leer etiquetas | |exiftags |V:0, I:3 |292 |imagen(Exif) |Exif de | | | | | |archivos JPEG | | | | | |de cámaras | | | | | |digitales | |-----------------+-----------+------+-------------+---------------| | | | | |lee | |exifprobe |V:0, I:3 |499 |imagen(Exif) |metainformación| | | | | |de imágenes | | | | | |digitales | |-----------------+-----------+------+-------------+---------------| | | | | |decodifica | | | | |imagen |imágenes en | |dcraw |V:1, I:12 |583 |(crudo)→ppm |crudo de | | | | | |cámaras | | | | | |digitales | |-----------------+-----------+------+-------------+---------------| | | | | |busca imágenes | |findimagedupes |V:0, I:1 |77 |imagen→huella|duplicadas o | | | | | |parecidas | | | | | |visualmente | |-----------------+-----------+------+-------------+---------------| | | | | |fusiona | | | | | |imágenes para | |ale |V:0, I:0 |839 |imagen→imagen|aumentar su | | | | | |integridad o | | | | | |crea mosaicos | |-----------------+-----------+------+-------------+---------------| | | | | |genera galerías| | | | |imagen(Exif) |HTML estáticos | |imageindex |V:0, I:1 |145 |→html |partiendo un | | | | | |grupo de | | | | | |imágenes | |-----------------+-----------+------+-------------+---------------| | | | | |herramienta | |outguess |V:0, I:1 |230 |jpeg,png |universal | | | | | |esteanográfica | |-----------------+-----------+------+-------------+---------------| |jpegoptim |V:0, I:7 |59 |jpeg |optimizar los | | | | | |archivos JPEG | |-----------------+-----------+------+-------------+---------------| | | | | |optimizar | |optipng |V:3, I:43 |213 |png |archivos PNG, | | | | | |compresión sin | | | | | |pérdidas | |-----------------+-----------+------+-------------+---------------| | | | | |optimizar los | |pngquant |V:0, I:9 |61 |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:19 |163 |rpm/tgz→deb |paquetes externos | | | | | |en paquetes Debian| |---------+-----------+------+---------------+------------------| | | | | |conversor de | | | | | |«Libro |     | | | | |Electrónico« | |freepwing|V:0, I:0 |424 |EB→EPWING |(común en Japón) a| | | | | |uno único con | | | | | |formato JIS X 4081| | | | | |(un subconjunto de| | | | | |EPWING V1) | |---------+-----------+------+---------------+------------------| | | | | |gestión de | | | | | |bibliotecas y | |calibre |V:6, I:28 |63385 |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 archivo.c.orig |diff -u archivo.c{.orig,} | |archivo.c | | |-------------------------------+-------------------------------| |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 archivo |archivo existe | |-------------+-------------------------------------------------| |-d archivo |archivo existe y es un directorio | |-------------+-------------------------------------------------| |-f archivo |archivo existe y es un archivo normal | |-------------+-------------------------------------------------|     |-w archivo |archivo existe y se puede modificar | |-------------+-------------------------------------------------| |-x archivo |archivo existe y es ejecutable | |-------------+-------------------------------------------------| |archivo1 -nt |archivo es más nuevo quearchivo2 (respecto de la | |archivo2 |modificación) | |-------------+-------------------------------------------------| |archivo1 -ot |archivo1 es más viejo que archivo2 (modificación)| |archivo2 | | |-------------+-------------------------------------------------| |archivo1 -ef |archivo1 y archivo2 están en el mismo dispositivo| |archivo2 |y 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:884, |191 |Shell compatible con POSIX | | |I:997 | |pequeño y rápido para sh | |-------------+-----------+------+------------------------------| |coreutils |V:880, |18307 |Utilidades fundamentales GNU | | |I:999 | | | |-------------+-----------+------+------------------------------| |grep |V:782, |1266 |GNU grep, egrep y fgrep | | |I:999 | | | |-------------+-----------+------+------------------------------| |sed |V:790, |987 |GNU sed |     | |I:999 | | | |-------------+-----------+------+------------------------------| |mawk |V:442, |285 |pequeño y rápido awk | | |I:997 | | | |-------------+-----------+------+------------------------------| |debianutils |V:907, |224 |utilidades varias específicas | | |I:999 | |de Debian | |-------------+-----------+------+------------------------------| |bsdutils |V:519, |356 |utilidades básicas de BSD-Lite| | |I:999 | |4.4 | |-------------+-----------+------+------------------------------| |bsdextrautils|V:596, |339 |Herramientas adicionales de | | |I:713 | |4.4BSD-Lite | |-------------+-----------+------+------------------------------| |moreutils |V:15, I:38 |231 |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:884, |191 |y rápido | | |I:997 | |compatible con | | | | |POSIX para sh | |-------------------------+-----------+------+------------------| | | | |sh: "info bash" | |bash |V:838, |7175 |proporcionado por | | |I:999 | |el paquete | | | | |bash-doc | |-------------------------+-----------+------+------------------| |mawk |V:442, |285 |AWK: pequeño y | | |I:997 | |rápido awk | |-------------------------+-----------+------+------------------| | |V:285, | |AWK: "info gawk" | |gawk |I:349 |2906 |proporcionado por | | | | |gawk-doc | |-------------------------+-----------+------+------------------| | | | |Perl: perl(1) y | | |V:707, | |páginas html | |perl |I:989 |673 |proporcionadas por| | | | |perl-doc y | | | | |perl-doc-html | |-------------------------+-----------+------+------------------| | | | |Extensión de Perl | | | | |para la biblioteca|     |libterm-readline-gnu-perl|V:2, I:29 |380 |GNU ReadLine/ | | | | |History Library: | | | | |perlsh(1) | |-------------------------+-----------+------+------------------| |libreply-perl |V:0, I:0 |171 |REPL para Perl: | | | | |reply(1) | |-------------------------+-----------+------+------------------| |libdevel-repl-perl |V:0, I:0 |237 |REPL para Perl: | | | | |re.pl(1) | |-------------------------+-----------+------+------------------| | | | |Python: python3(1)| |python3 |V:718, |81 |y páginas html | | |I:953 | |proporcionadas por| | | | |python3-doc | |-------------------------+-----------+------+------------------| | | | |Tcl: tcl(3) | | | | |páginas de manual | |tcl |V:25, I:218|21 |detalladas | | | | |proporcionadas por| | | | |tcl-doc | |-------------------------+-----------+------+------------------| | | | |Tk: tk(3) y | | | | |páginas detalladas| |tk |V:20, I:211|21 |del manual | | | | |proporcionadas por| | | | |tk-doc | |-------------------------+-----------+------+------------------| | | | |Ruby: ruby(1), erb| |ruby |V:86, I:208|29 |(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:192, | |xmessage(1): muestra un mensaje o | |x11-utils|I:566 |651 |realiza un pregunta en una ventana| | | | |(X) | |---------+-----------+------+----------------------------------| | |V:284, | |muestra cuadros de diálogo de | |whiptail |I:996 |56 |fácil uso para los archivos de | | | | |órdenes (newt) | |---------+-----------+------+----------------------------------| | | | |muestra cuadros de diálogo de |     |dialog |V:11, I:99 |1227 |fácil uso para los archivos de | | | | |órdenes (ncurses) | |---------+-----------+------+----------------------------------| | | | |mostrar cuadros de diálogo | |zenity |V:76, I:363|183 |gráficos a partir de scripts de | | | | |shell (GTK) | |---------+-----------+------+----------------------------------| | | | |Herramienta de interfaz de archivo| |ssft |V:0, I:0 |75 |de órdenes (cubierto con zenity, | | | | |kdialog y dialog con gettext) | |---------+-----------+------+----------------------------------| |gettext |V:56, I:259|5818 |«/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 , 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:167, |36 |Compilador de GNU C | | |I:550 | | | |----------------+-----------+------+---------------------------| | |V:248, | |Biblioteca C de GNU: | |libc6-dev |I:567 |12053 |Bibliotecas de desarrollo y| | | | |archivos de cabecera | |----------------+-----------+------+---------------------------| |g++ |V:56, I:501|13 |Compilador GNU C++ | |----------------+-----------+------+---------------------------| |libstdc++-10-dev|V:14, I:165|17537 |GNU Standard C++ Library v3| | | | |(archivos de desarrollo) | |----------------+-----------+------+---------------------------| |cpp |V:334, |18 |Preprocesador GNU C | | |I:727 | | | |----------------+-----------+------+---------------------------| |gettext |V:56, I:259|5818 |Utilidades de | | | | |internacionalización GNU | |----------------+-----------+------+---------------------------| |glade |V:0, I:5 |1204 |Desarrollador de interfaces| | | | |de usuario GTK | |----------------+-----------+------+---------------------------| |valac |V:0, I:4 |725 |Lenguaje similar a C# para | | | | |el sistema GObject | |----------------+-----------+------+---------------------------|     |flex |V:7, I:73 |1243 |LEX-compatible generador | | | | |analizador de léxico rápido| |----------------+-----------+------+---------------------------| |bison |V:7, I:80 |3116 |YACC-compatible generador | | | | |de analizador | |----------------+-----------+------+---------------------------| |susv2 |I:0 |16 |cumple «La Especificación | | | | |Única de UNIX v2« | |----------------+-----------+------+---------------------------| |susv3 |I:0 |16 |cumple «La Especificación | | | | |Única de UNIX v3« | |----------------+-----------+------+---------------------------| | | | |buscar "Las | |susv4 |I:0 |16 |especificaciones únicas de | | | | |UNIX v4" | |----------------+-----------+------+---------------------------| |golang |I:20 |11 |Compilador del lenguaje de | | | | |programación Go | |----------------+-----------+------+---------------------------| |rustc |V:3, I:14 |8860 |Lenguaje de programación de| | | | |sistemas Rust | |----------------+-----------+------+---------------------------| |haskell-platform|I:1 |12 |Bibliotecas y herramientas | | | | |estándarHaskell | |----------------+-----------+------+---------------------------| |gfortran |V:6, I:62 |15 |Compilador de GNU Fortran | | | | |95 | |----------------+-----------+------+---------------------------| |fpc |I:2 |103 |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 #include #include 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:80 |3116 |Analizador sintáctico GNU LALR | |-------+-----------+------+------------------------------------| |byacc |V:0, I:4 |258 |Analizador sintáctico LALR Berkeley | |-------+-----------+------+------------------------------------| |btyacc |V:0, I:0 |243 |analizador sintáctico hacia atrás | | | | |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 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 |2591 |Motor asíncrono Lint para | | | | |Vim 8 y NeoVim | |---------------+-----------+------+----------------------------| |vim-syntastic |I:3 |1379 |Trucos de comprobación | | | | |sintáctica para vim | |---------------+-----------+------+----------------------------| | | | |moderna comprobación | |elpa-flycheck |V:0, I:1 |808 |sintáctica sobre la marcha | | | | |para Emacs | |---------------+-----------+------+----------------------------| |elpa-relint |V:0, I:0 |147 |Buscador de errores regexp | | | | |de Emacs Lisp | |---------------+-----------+------+----------------------------| |cppcheck-gui |V:0, I:1 |7224 |herramienta para el análisis| | | | |de código C/C++ (GUI) | |---------------+-----------+------+----------------------------| |shellcheck |V:2, I:13 |18987 |herramienta útil para | | | | |scripts de shell | |---------------+-----------+------+----------------------------| |pyflakes3 |V:2, I:15 |20 |Verificado pasivo de | | | | |programas Python 3 | |---------------+-----------+------+----------------------------| |pylint |V:4, I:20 |2018 |comprobador de código | | | | |estático Python | |---------------+-----------+------+----------------------------| | |V:707, | |intérprete con comprobador | |perl |I:989 |673 |de código estático interno: | | | | |B::Lint(3perl) | |---------------+-----------+------+----------------------------| |rubocop |V:0, I:0 |3247 |Analizador de código | | | | |estático Ruby | |---------------+-----------+------+----------------------------| | | | |Herramienta de verificación |     |clang-tidy |V:2, I:11 |21 |de formato de regla C++ | | | | |basada en Clang | |---------------+-----------+------+----------------------------| | | | |herramienta para la | |splint |V:0, I:2 |2320 |comprobación estática de | | | | |errores de programación en C| |---------------+-----------+------+----------------------------| | | | |herramienta que examina | |flawfinder |V:0, I:0 |205 |código fuente en C/C++ para | | | | |encontrar debilidades de | | | | |seguridad | |---------------+-----------+------+----------------------------| |black |V:3, I:13 |660 |Formateador de código Python| | | | |agresivo | |---------------+-----------+------+----------------------------| |perltidy |V:0, I:4 |2493 |Indentador y reformateador | | | | |de scripts de Perl | |---------------+-----------+------+----------------------------| |indent |V:0, I:7 |431 |Programa de formateo del | | | | |código fuente en lenguaje C | |---------------+-----------+------+----------------------------| | | | |Indentador de código fuente | |astyle |V:0, I:2 |785 |para C, C++, Objective-C, C#| | | | |y Java | |---------------+-----------+------+----------------------------| |bcpp |V:0, I:0 |111 |Embellecer C(++) | |---------------+-----------+------+----------------------------| |xmlindent |V:0, I:1 |53 |reformateador del flujo XML | |---------------+-----------+------+----------------------------| |global |V:0, I:2 |1908 |Herramientas de búsqueda y | | | | |exploración de código fuente| |---------------+-----------+------+----------------------------| | | | |Crea un índice de archivo de| |exuberant-ctags|V:2, I:20 |341 |etiquetas de definiciones | | | | |del código fuente | |---------------+-----------+------+----------------------------| | | | |Crea un índice de archivo de| |universal-ctags|V:1, I:11 |3386 |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:14, I:96 |11637 |«info gdb» proporcionado por gdb-doc| |-------+-----------+------+------------------------------------| |ddd |V:0, I:7 |4105 |«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) hilo |recogen trazas de todos los hilos para | |aplica a todos |programas multihilo | |bt | | |----------------+----------------------------------------------| |(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:248, |12053 |mtrace(1): funcionalidad de | | |I:567 | |depuración de malloc en glibc| |--------------+-----------+------+-----------------------------| |valgrind |V:6, I:37 |78191 |depurador y analizador de | | | | |memoria | |--------------+-----------+------+-----------------------------|     |electric-fence|V:0, I:3 |73 |depurador malloc(3) | |--------------+-----------+------+-----------------------------| |libdmalloc5 |V:0, I:2 |390 |biblioteca de depuración de | | | | |la asignación de memoria | |--------------+-----------+------+-----------------------------| | | | |biblioteca para detectar | |duma |V:0, I:0 |296 |desbordamientos y | | | | |subdesbordamientos de búfer | | | | |en programas C y C++ | |--------------+-----------+------+-----------------------------| |leaktracer |V:0, I:1 |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:151, |1592 |«info make» proporcionado por | | |I:555 | |make-doc | |-----------+-----------+------+--------------------------------| |autoconf |V:31, I:230|2025 |«info autoconf» proporcionado | | | | |con autoconf-doc | |-----------+-----------+------+--------------------------------| |automake |V:30, I:228|1837 |«info automake» proporcionado | | | | |con automake1.10-doc | |-----------+-----------+------+--------------------------------| |libtool |V:25, I:212|1213 |"info libtool" proporcionado por|     | | | |libtool-doc | |-----------+-----------+------+--------------------------------| | | | |cmake(1) sistema make | |cmake |V:17, I:115|36607 |multiplataforma de código | | | | |abierto | |-----------+-----------+------+--------------------------------| | | | |ninja(1) pequeño sistema de | |ninja-build|V:6, I:41 |428 |construcción más cercano en | | | | |espíritu a Make | |-----------+-----------+------+--------------------------------| | | | |meson(1) sistema de construcción| |meson |V:3, I:22 |3759 |de alta productividad sobre | | | | |ninja | |-----------+-----------+------+--------------------------------| |xutils-dev |V:0, I:9 |1484 |imake(1), xmkmf(1), etc. | +---------------------------------------------------------------+ 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ás seguro de dónde se instalaron los archivos, puede     considerar usar checkinstall(8) del paquete checkinstall, que proporcionará 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:707, |673 |AWK→PERL |convertir código fuente | | |I:989 | | |de AWK a PERL: a2p(1) |     |---------+-----------+------+---------+------------------------| | | | | |convierte código fuente | |f2c |V:0, I:3 |442 |FORTRAN→C|de FORTRAN 77 a C/C++: | | | | | |f2c(1) | |---------+-----------+------+---------+------------------------| | | | | |convierte de NASM | |intel2gas|V:0, I:0 |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.125)"     (2024-11-15 13:32:55 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 , 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.125)" (2024-11-15 13:32:55     UTC) cubre principalmente Bookworm (=stable) y Trixie (=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.125)"     (2024-11-15 13:32:55 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)