Guía de referencia de Debian Osamu Aoki Copyright © 2013-2024 Osamu Aoki La Guía de Referencia de Debian (version 2.120) (2024-03-25 14:02:56 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. Cómo informar 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 usarios 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 moderna configuración de la red para la nube con Network Manger 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 reenvio 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. Códificación del nombre del 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 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. Personalició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. Captura 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 utlizando 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 evento 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 del 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 mendiante el montaje de otra partición 9.6.15. Expansión del espacio de almacenamient 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 de la imagen del disco 9.7.4. Limpiando un archivo de imagen de disco 9.7.5. Haciendo un archivo de imagen de disco vacio 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. Parametros 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 extraibles 10.1.8. Selección del sistema de archivos para compartir datos 10.1.9. Compartición de 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. La mazmorra de Debian 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. Accion 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 de manual importantes 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 trazas 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 valores de nice 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 extrabiles 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 herramientras 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. Cómo informar de errores en este documento 4. Consejos para usuarios noveles 5. Algunos comentarios para usuarios noveles La Guía de referencia de Debian (version 2.120) (2024-03-25 14:02:56 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 stable (estable), * Guía de Instalación de Debian GNU/Linux de la versión testing (pruebas) 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 muchos proyectos libres e independientes. Debian integra esta diversidad de Software Libre en un único sistema. 3. Sobre este documento 3.1. Directrices     En la elaboración de este documento se han seguido las siguientes normas orientativas. * Proporciona 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) * Sé 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 arquitecturas. 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 estadisticas 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. Cómo informar 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 simple 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 De acuerdo a la tradición Unix, el nombre de usuario y la contraseña en un sistema Debian son sensibles a mayúsculas. El     nombre de usuario normalmente se elige de tal modo que esté compuesto únicamente por minúsculas. La primera cuenta de usuario normalmente se crea durante la instalación. El superusuario (root ) puede crear cuentas de usuario adicionales con la orden 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 situaciónes, 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 intercepción pasiva de toda su pantalla de 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 se encuentra en un x-terminal-emulator(1) también puede cerrarlo de esta manera. 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     Vea 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 usarios 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 realice lo que se muetra.     # 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. agregar usuario (8) y usuariodel (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 usual 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 podrían ser explotados, 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 son llamados 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 puede ser renombrado. * Cada archivo o directorio es identificado 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, es llamado el á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. Lea 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 ruta 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)). Debes recordar los siguientes hechos como el arranque. 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 del sistema 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) * el resto de usuarios (o) también denominado «universo» o «todos».     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) Estos bits aparecerán en mayúsculas en la salida de la orden «ls     -l» si los permisos de ejecución correspondientes están sin asignar. 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 via telefónica (dialup IP) a | | |pares confiables | |-------+-------------------------------------------------------|     |cdrom |dispositivos CD-ROM, DVD+/-RW | |-------+-------------------------------------------------------| |audio |dispositivo audio | |-------+-------------------------------------------------------| |video |dispositivo de video | |-------+-------------------------------------------------------| |scanner|escáner | |-------+-------------------------------------------------------| |adm |registros de supervisión del sistema | |-------+-------------------------------------------------------| |staff |algunos directorios para la administración básica del | | |sistema: «/usr/local», «/home» | +---------------------------------------------------------------+ Sugerencia Necesita pertenecer al grupo dialout para reconfigurar el modem,     marcar, etc. Pero si el superusuario crea archivos de configuraciones predefinidas para algunos pares en «/etc/ppp/ peers/», únicamente necesitará pertenecer al grupo dip para crear conexiones a internet porvia 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 en GNU/Linux modifica su propiedad atime si está montado con la opción «strictatime» * La lectura de un archivo por primera vez o después de un día cambia la propiedad atime en un sistema GNU/Linux si el sistema de archivos está montado con la opción «relatime». (comportamiento por defecto desde Linux 2.6.30) * La lectura del archivo no cambia su propiedad atime en un sistema GNU/Linux si el sistema de archivos está montado con la opción «noatime». Nota Las opciones de montaje «noatime» y «relatime» se diseñaron para     mejorar el desempeño de lectura del sistema de archivos de forma normal. La simple lectura de un archivo con la opción «strictatime» genera una operación de escritura para actualizar la propiedad atime. El atributo atime se usa poco excepto para el archivo mbox(5). Consulte mount(8).     Utilice la orden touch(1) para cambiar las marcas de tiempo de los archivos existentes.     Para la fecha, el comando ls genera cadenas localizadas en una configuración regional que no es inglesa ("fr_FR.UTF-8"). $ LANG=C ls -l foo -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo     $ LANG=en_US.UTF-8 ls -l foo -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo $ LANG=fr_FR.UTF-8 ls -l foo -rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo Sugerencia     Consulte Sección 9.3.4, “Personalización de la visualización de la fecha y hora” para personalizar la salida de «ls -l». 1.2.7. Enlaces     Existen dos métodos para asociar a un archivo "foo" con otro nombre de archivo "bar". * enlace duro, + Nombre duplicado de un fichero ya existente + «ln foo bar»     * enlace simbólico o «simlink». + Fichero especial que apunta a otro fichero por su nombre + «ln -s foo bar».     Con el siguiente ejemplo se muestra los cambios en el contador de enlaces y las sutiles diferencias de la orden rm. $ umask 002 $ echo "Original Content" > foo $ ls -li foo 1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo $ ln foo bar # hard link $ ln -s foo baz # symlink $ ls -li foo bar baz 1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar 1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo     1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo $ rm foo $ echo "New Content" > foo $ ls -li foo bar baz 1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar 1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo 1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo $ cat bar Original Content $ cat baz New Content Los enlaces duros deben ser construidos en el mismo sistema de     archivos y comparten el mismo «inodo» como revela el parámetro «-i» de la orden ls(1) . Los enlaces simbólicos siempre tienen permisos de acceso al     archivo nominales «rwxrwxrwx», como se mostró en el ejemplo anterior, con los permisos reales que tenga el archivo al que referencia. Atención     En general es preferible no crear nunca enlaces simbólicos o enlaces duros excepto que tenga poderosas razones. Los enlaces simbólicos puede causar problemas graves al crear bucles en el sistema de archivos. Nota     En general es preferible crear enlaces simbólicos a enlaces duros, al menos que tenga alguna buena razón para ello. El directorio . enlaza al propio directorio en el que aparece, por lo que la cuenta de enlaces de cualquier nuevo directorio es     2. El directorio «..» enlaza al directorio padre, por lo que la cuenta de enlaces del directorio se incrementa con la creación de nuevos subdirectorios. Si proviene de Windows, pronto comprenderá lo bien diseñado que están los enlaces de Unix, comparados con su equivalente en     Windows que son los accesos directos (shortcuts). Gracias su implementación en el sistema de archivos, las aplicaciones no distinguen entre el archivo original y su enlace. En el caso de los enlaces duros, ciertamente no existe diferencia. 1.2.8. Tuberías con nombre (FIFOs) Una tubería con nombre es un archivo que se comporta como una tubería. Usted introduce algo dentro del archivo y sale por el     otro lado. Por esa razón se dice que es FIFO o primero-en-entrar-primero-en-salir: lo primero que se introduce en la tubería es lo primero en salir por el otro lado. Si se escribe en una tubería con nombre, los procesos que han escrito en la tubería no pueden terminar hasta que la información que han escrito es leída de la tubería. Si se lee de una tubería con nombre, el proceso lector espera hasta que no hay nada que leer antes de terminar. El tamaño de la tubería es siempre cero     --- no almacena datos, la tubería solo comunica los dos procesos de igual manera que lo hace el intérprete de órdenes mediante la sintaxis «|». Sin embargo, desde que la tubería tiene un nombre, los dos procesos no tienen que estar en la misma línea de órdenes y ni siquiera ser ejecutados por el mismo usuario. Las tuberías fueron una innovación muy relevante de Unix.     Por ejemplo, intente lo siguiente $ cd; mkfifo mypipe $ echo "hello" >mypipe & # put into background [1] 8022 $ ls -l mypipe prw-rw-r-- 1 penguin penguin 0 Oct 16 21:49 mypipe     $ cat mypipe hello [1]+ Done echo "hello" >mypipe $ ls mypipe mypipe $ rm mypipe 1.2.9. «Sockets» Los «sockets» se usan de forma generalizada en las comunicaciones en Internet, bases de datos y sistemas operativos. Son similares a las tuberías con nombre (FIFO) y permiten que los procesos intercambien información entre diferentes equipos. Para los     «sockets» los procesos no necesitan estar ejecutandose al mismo tiempo, ni ser hijos del mismo proceso padre. Este es el mejor sistema para la comuniación entre procesos (IPC). El intercambio de información puede ocurrir en la red entre equipos. Los dos tipos de «sockets» más comunes son los «sockets« Internet y los «sockets» de dominio Unix. Sugerencia     «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 | |dispostivo| | | |----------+---------+------------------------------------------| |/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) | |----------+---------+------------------------------------------| |/dev/ | |devuelve caracteres aleatorios creados por| |random |lectura |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 del 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. (Asegurese 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 es llamada 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. Accion 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 inico 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 | |------------------------+--------------------------------------| |boton 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 "nocompatible" 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 nocompatible | |---------------+----------------+------------------------------|     |NORMAL |: establecer no |establecer vim en el modo | | |compatible |nocompatible | |---------------+----------------+------------------------------| |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, “Personalició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 |apropoencuentra ó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 | |------------------+--------------------------------------------| |» *.html |la «expresión_regular» | |------------------+--------------------------------------------| | |muestra información de los procesos a | |top |pantalla completa, pulsando «q» para | | |terminar | |------------------+--------------------------------------------| | |muestra información de todos los procesos | |ps aux | pager |ejecutándose utilizando para la salida el | | |estilo BSD | |------------------+--------------------------------------------| | |muestra información de todos los procesos | |ps -ef | pager |ejecutándose utilizando para la salida el | | |estilo Unix system-V | |------------------+--------------------------------------------| |ps aux | grep -e "|muestra todos los procesos «exim» y «exim4» | |[e]xim4*" | | |------------------+--------------------------------------------| |ps axf | pager |muestra información de todos los procesos | | |con la salida al estilo de arte ASCII | |------------------+--------------------------------------------| |kill 1234 |elimina el proceso cuyo identificador de | | |proceso es: «1234» | |------------------+--------------------------------------------| |gzip foo |comprime «foo» y crea «foo.gz» usando la | | |codificación Lempel-Ziv (LZ77) | |------------------+--------------------------------------------| |gunzip foo.gz |descomprimir "foo.gz" para crear "foo" | |------------------+--------------------------------------------| | |comprime «foo» y crea «foo.bz2» usando el | | |algoritmo de compresión de texto por | |bzip2 foo |ordenación de bloques Burrows-Wheeler y | | |codificación Huffman (ofrece mejor | | |compresión que gzip) | |------------------+--------------------------------------------| |bunzip2 foo.bz2 |descomprime «foo.bz2» y crea «foo» | |------------------+--------------------------------------------| | |comprimir "foo" para crear "foo.xz" | |xz foo |utilizando el algoritmo de cadena | | |Lempel-Ziv-Markov (mejor compresión que | | |bzip2) | |------------------+--------------------------------------------| |unxz foo.xz |descomprime «foo.xz» y crea «foo» | |------------------+--------------------------------------------| |tar -xvf foo.tar |extrae archivos del archivo «foo.tar» | |------------------+--------------------------------------------| |tar -xvzf foo |extrae los archivos del archivo comprimido | |.tar.gz |mediante gzip «foo.tar.gz» | |------------------+--------------------------------------------| |tar -xvjf foo |extrae archivos del archivo «foo.tar.bz2» | |.tar.bz2 | | |------------------+--------------------------------------------| |tar -xvJf foo |extrae los archivos del archivo «foo.tar.xz»| |.tar.xz | | |------------------+--------------------------------------------| |tar -cvf foo.tar |archiva el contenido de la carpeta «bar/» en| |bar/ |el archivo «foo.tar» | |------------------+--------------------------------------------| |tar -cvzf foo |archiva el contenido de la carpeta «bar/» en| |.tar.gz bar/ |el archivo comprimido «foo.tar.gz» | |------------------+--------------------------------------------| |tar -cvjf foo |archiva el contenido de la carpeta «bar/» en| |.tar.bz2 bar/ |el archivo «foo.tar.bz2» | |------------------+--------------------------------------------| |tar -cvJf foo |archiva el contenido de la carpeta «bar/» en| |.tar.xz bar/ |el archivo «foo.tar.xz» | |------------------+--------------------------------------------| |zcat README.gz | |mostrar el contenido del archivo comprimido | |pager |"README.gz" usando el paginador por defecto | |------------------+--------------------------------------------| |zcat README.gz > |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 configuracion 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 |CIERTO | |------------------------+-------------------+------------------| |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 necesite ser recordado. 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 orden el contenido | | |del archivo foo | |-----------+---------------------------------------------------| |orden << |envía a la entrada estándar de orden las líneas | |delimitador|siguientes hasta que encuentra un «delimitador» | | |(aquí el documento) | |-----------+---------------------------------------------------| | |envía a la entrada estándar de la orden las líneas | |orden <<- |siguientes hasta que se encuentre con el | |delimitador|«delimitador» ( en las líneas de entrada los | | |tabuladores al inicio son eliminados) | +---------------------------------------------------------------+ 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 son usada 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 | | |* | | |---------+------+----------------------------------------------| |\+ \? \( | | | |\) \{ \} |  |En BRE el único metacarácter de escape es «\» | |\| | | | |---------+------+----------------------------------------------| | |+ ? ( |En ERE el único metacarácter diferente de «\» | |  |) { } |de escape | | || | | |---------+------+----------------------------------------------| |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* |encaja con cero o más «r», siendo «r» una | | | |expresión regular | |---------+------+----------------------------------------------| |r\+ |r+ |encaja con una o más «r», siendo «r» una | | | |expresión regular | |---------+------+----------------------------------------------| |r\? |r? |encaja con cero o una «r», siendo «r» una | | | |expresión regular | |---------+------+----------------------------------------------| |r1\|r2 |r1|r2 |encaja una de las expresiones regulares «r1» o| | | |«r2» | |---------+------+----------------------------------------------| |\(r1\|r2 |(r1| |encaja una expresión regular «r1» o «r2» y | |\) |r2) |tratada el resultado 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 a reemplazar | | sustituida | | |------------+--------------------------------------------------|     |& |lo que encaja con la expresión regular (usar \& en| | |emacs) | |------------+--------------------------------------------------| |\n |lo que encaja con la 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 (consulte Sección 12.1, “Los archivos de órdenes”). ---------------------------------------------------------------------     ^[1] Incluso el antiguo vim puede comenzar en el sano modo "nocompatible" 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 sobreescriba el sistema de archivos al instalar software compilado directamente de su código fuente. + Si lo necesita instálelos 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 equivalentes al estilo de deb822 es como el 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. + La estrofa "Types:" define la lista de tipos como "deb" y "deb-src". + La estrofa "URIs:" define la lista de URIs raíz del archivo de Debian. + La estrofa "Suites:" define la lista de los nombres de la distribución utilizando el nombre de la suite o el nombre en clave. + La estrofa "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 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 el 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 soluciona los problemas de seguridad de la distribución stable (estable). Su actividad es muy rigurosa y fiable. En la distribución testing (pruebas) las solucionan el equipo de seguridad de Debian en pruebas. Por diferentes razones su actividad no es tan rigurosa como en la     distribución stable (estable) y puede que tenga que esperar a la migración o la corrección de los paquetes de unstable (inestable). Los problemas de seguridad de la distribución unstable (inestable) los corrigen los desarrolladores individuales. Los paquetes de la distribución unstable (inestable) mantenidos habitualmente suelen estar en buen estado aprovechando las últimas soluciones de seguridad ascendentes. Consulte Debian security FAQ para conocer como se gestionan los problemas de seguridad en Debian. 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 (consulte 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 = | | Momento | stable | testing | unstable | | | (estable) | (pruebas) | (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» especificamente para la categorización de     paquetes por el tipo de aplicación. (Sin embargo las palabras «sección principal» algunas veces es usado 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. Durante el proceso gradual de estabilización del archivo, liderado por el equipo de publicación, la distribución testing (pruebas) se va corrigiendo por medio de intervenciones manuales para hacerla completamente consistente y libre de errores. Entonces se crea la nueva distribución stable (estable)     asignándole a esta el nombre de publicación de la antigua distribución testing (pruebas). También se crea un nuevo nombre de publicación para la nueva distribución testing (pruebas). El contenido inicial de la nueva distribución testing (pruebas) es exactamente el mismo que el de la nueva versión de la distribución stable (estable). Tanto los repositorios unstable (inestable) como los testing     (pruebas) 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 «en pruebas» el problema causado por la eliminación de un paquete normalmente se soluciona temporalmente instalando el paquete correspondiente la distribución «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 principal.     * Debian recomienda ejecutar únicamente el software libre del área principal. * Ningún paquete en principal depende ni recomienda paquetes en no libre ni el firmware no libre ni contribución.     Alguna se pregunta si los dos hechos siguientes se contradicen entre sí. * «Debian se mantendrá 100% libre». (Es la primera claúsula del Contrato Social de Debian)     * Los servidores Debian alojan algunos paquetes non-free-firmware, non-free y contrib.     Estos no se contradicen, por lo siguiente. * el sistema Debian es 100% libre y sus paquetes son albergados por los servidores Debian en el área principal     * 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 claúsulas 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 intensional para hacer 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» (Depends) + 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. * «Recomienda» (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 funcionabilidad 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 arhivo 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 arhivo 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 para juzgar cuándo no sabe cuál instalar sin intentos repetidos. 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 decisiones propias acerca 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 desincronizados, 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 desincronizados,     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" (vera 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 (vere Sección 2.7.13, “Portar un paquete a un sistema estable”). 2.2. Operaciones básicas de la gestión de paquetes Un sistema Debian dispone de diferentes herramientas basadas en     APT para llevar a cabo las operaciones de gestión de paquetes. En este documento explicaremos tres herrramientas 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 distribuciónes 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 ser utilizado por 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 interactiva de paquetes diaria como examinar los paquetes     instalados y buscar entre los paquetes disponibles. * aptitude necesita más recursos «hardware». Utiliza más memoria y se ejecuta más lentamente. * 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 | |apt install foo |aptitude install |apt-get install |versión candidata| | |foo |foo |del paquete «foo»| | | | |y sus dependecias| |------------------+-----------------+-----------------+-----------------| | | | |actualiza los | | | | |paquetes ya | | |aptitude | |instalados a las | |apt upgrade |safe-upgrade |apt-get upgrade |nuevas versiones | | | | |candidatas sin | | | | |eliminar ningún | | | | |paquete | |------------------+-----------------+-----------------+-----------------| | | | |actualiza los | | | | |paquetes ya | | | | |instalados a las | |apt full-upgrade |aptitude |apt-get |nuevas versiones | | |full-upgrade |dist-upgrade |candidatas y | | | | |elimina los | | | | |paquetes que | | | | |necesite | |------------------+-----------------+-----------------+-----------------| | | | |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 de | | | | |forma manual | +------------------------------------------------------------------------+     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 automaticamente 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 → | | |Manual de |muestra el Manual de Usuario | |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) |     |----------------+----------------------------------------------| |= |marca el paquete para conservalo (hold) | |----------------+----------------------------------------------| |U |marca todos los paquetes actualizables (sería | | |el equivalente a una actualización completa) | |----------------+----------------------------------------------| |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     Pulsando ? se muestra al final de la pantalla de Ayuda una relación completa de las banderas. 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 paquete|ver Tabla 2.10, “La clasificación de la vista| | |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 de|relación de paquetes sin clasificar (para | |paquetes |usar con expresiones regulares) | |-----------------+---------------------------------------------| |Navegador de |relación de paquetes clasificados de acuerdo | |etiquetas Debian |a sus etiquetas Debian (debtags) | |(Debtags) | | |-----------------+---------------------------------------------| |Vista del Paquete|lista de paquetes agrupados por paquetes | |Fuente |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 aprenderán rápidamente, ya     que mutt fue la inspiración para la sintaxis de las expresiones. Consulte «SEARCHING, LIMITING, AND EXPRESSIONS« en el «Manual de 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 el comportamiento de «autoinstalado« de     la orden aptitude puede modifcarse también usando la orden apt-mark(8) del paquete apt. 2.2.9. Registro de la actividad de los paquetes     Usted puede comprobar el histórcio de acciones sobre paquetes 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» con la nueva vista «New Flat     Package List« con el símbolo «l» prompt, muestra en la vista los paquetes cuya descripción encaja y le permite navegar de forma interactiva entre ellos. 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» and «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 actuailizació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 correctamente 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 | |COLUMNS=120 dpkg -l patrón_del_nombre_del_paquete |de los paquetes | | |instalados para el| | |informe de errores| |-------------------------------------------------------------+------------------| | |enumera el | |dpkg -L nombre_del_paquete |contenido de un | | |paquete instalado | |-------------------------------------------------------------+------------------| | |relación las | |dpkg -L nombre_del_paquete | egrep '/usr/share/man/man.*/.+' |páginas del manual| | |para un paquete | | |instalado | |-------------------------------------------------------------+------------------| | |enumera los | | |paquetes | |dpkg -S patrón_del_nombre_de_archivo |instalados que | | |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 los | |apt-file list patrón_nombre_de_paquete |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 | |configure-debian |paquetes desde el | | |menú de pantalla | | |completa | |-------------------------------------------------------------+------------------| | |auditoría del | | |sistema referente | |dpkg --audit |a paquete | | |instalados | | |parcialmente | |-------------------------------------------------------------+------------------| | |configura todos | |dpkg --configure -a |los paquetes | | |instalados | | |parcialmente | |-------------------------------------------------------------+------------------| | |muestra la | | |versión, la | |apt-cache policy nombre_del_paquete_binario |prioridad y la | | |información del | | |repositorio de un | | |paquete binario | |-------------------------------------------------------------+------------------| | |muestra la versión| | |disponible y la | |apt-cache madison nombre_del_paquete |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 fuente| |apt-get source nombre_del_paquete |(desde el | | |repositorio | | |estándar) | |-------------------------------------------------------------+------------------| | |descarga el código| |dget URL del archivo dsc |del paquete (desde| | |otro repositorio) | |-------------------------------------------------------------+------------------| | |construye el árbol| | |de las fuentes | |dpkg-source -x nombre_del_paquete_version-versión_de_debian |para un conjunto | |.dsc |de paquetes fuente| | |(«orig.tar.gz» y | | |«debian.tar.gz»/ | | |«*.diff.gz») | |-------------------------------------------------------------+------------------| | |construye el/los | |debuild binary |paquete(s) desde | | |un árbol de | | |fuentes locales | |-------------------------------------------------------------+------------------| | |construye el | |make-kpkg kernel_image |paquete del núcleo| | |desde el árbol | | |fuente del kernel | |-------------------------------------------------------------+------------------| | |construye el | | |paquete del núcleo| |make-kpkg --initrd kernel_image |desde el árbol | | |fuente de este con| | |initramfs activado| |-------------------------------------------------------------+------------------| |dpkg -i nombre_del_paquete_versión-versión_de_debian_ |instala un paquete| |arquitectura.deb |local en el | | |sistema | |-------------------------------------------------------------+------------------| | |instala un paquete| | |local en el | |apt install /path/to/package_filename.deb |sistema y trata de| | |resolver de forma | | |automática sus | | |dependencias | |-------------------------------------------------------------+------------------| |debi nombre_del_paquete_versión-versión_de_debian_ |instala el(los) | |arquitectura.dsc |paquete(s) 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 ') | +--------------------------------------------------------------------------------+ Nota     Para paquetes que sean multi-arch, puede necesitar especificar el nombre de la arquitectura para algunas órdenes. Por ejemplo, use «dpkg -L libglib2.0-0:amd64» para enumerar el contenido del paquete libglib2.0-0 para la arquitectura amd64. Atención Las herramientas de bajo nivel como «dpkg -i …» y «debi …» deben usarse con cuidado por el administrador del sistema. No tienen en     cuenta de forma automática las dependencias entre paquetes. La opción de la línea de órdenes «--force-all» y parecidas (ver dpkg (1)) están hechas para que las usen únicamente usuarios expertos. Usarlas sin entender plenamente sus consecuencias puede corromper el sistema entero.     Ten en cuenta lo siguiente. * Todas las órdenes de configuración e instalación necesitan ser ejecutadas por el superusuario. * A diferencia de aptitude que usa expresiones regulares (ver Sección 1.6.2, “Expresiones regulares”), otras órdenes para la gestión de paquetes usan patrones como el intérprete de órdenes glob (ver Sección 1.5.6, “Expansión de un patrón en el intérprete de órdenes”). * apt-file(1) que está en el paquete apt-file necesita ejecutar previamente «apt-file update». * configure-debian(8) que está en el paquete configure-debian usa como su motor dpkg-reconfigure(8). * dpkg-reconfigure(8) ejecuta los archivos de órdenes de los     paquetes usando como su motordebconf(1). * Los comandos "apt-get build-dep", "apt-get source" y "apt-cache showsrc" requieren la entrada "deb-src" en la lista de fuentes. * dget(1), debuild(1) y debi(1) necesitan el paquete devscripts. * Consulte el procedimiento de (re)empaquetado mediante «apt-get source» en Sección 2.7.13, “Portar un paquete a un sistema estable”. * La orden make-kpkg necesita el paquete kernel-package (ver Sección 9.10, “El núcleo”). * Para el empaquetado general ver Sección 12.9, “Haciendo un paquete Debian”. 2.4.2. Verificación de los archivos de un paquete instalado La instalación de debsums permite de la verificación de los     archivos de los paquetes instalados comparando los valores MD5sum en el archivo «/var/lib/dpkg/info/*.md5sums» con debsums(1). Para saber como funciona MD5sum verSección 10.3.5, “El resumen MD5”. Nota Ya que la base de datos de MD5sum la puede alterar un intruso,     debsums(1) su uso como herramienta de seguridad es limitada. Solo es aceptable para que el administrador compruebe modificaciones locales o daños producidos por errores del medio de almacenamiento. 2.4.3. Protección frente a problemas con paquetes Muchos usuarios prefieren seguir las versiones testing (pruebas)     (o unstable (inestable)) del sistema Debian por sus nuevas características y paquetes. Esto hace que el sistema sea más propenso a sufrir fallos críticos en los paquetes. La instalación del paquete apt-listbugs protege el sistema contra     errores críticos comprobando estos de forma automática BTS de Debian cuando se actualiza mediante el sistema APT. La instalación del paquete apt-listchanger aporta noticias     importantes en «NEWS.Debian» cuando se actualiza mediante el sistema APT. 2.4.4. Buscando metadatos en los paquetes Aunque al visitar la página de Debian https://packages.debian.org     / facilita formas fáciles de buscar en los metadatos del paquete en estos días, veamos otras formas más tradicionales. Las órdenes grep-dctrl(1), grep-status(1) y grep-available(1) se     pueden usar para buscar cualquier archivo que tenga el formato general de un archivo de control de paquetes de Debian. «dpkg -S patrón_de_archivo_de_nombres» se puede usar para buscar     nombres de paquetes que contengan archivos que coincidan con el nombre instalado por dpkg. Pero pasa por alto los archivos creados por los scripts de mantenimiento. Si necesita realizar búsquedas más elaboradas de metadatos de dpkg , necesita ejecutar la orden «grep -e regex_pattern *» en el     directorio «/var/lib/dpkg/info/». Esto realiza búsquedas de las palabras mencionadas en los archivos de órdenes de los paquetes y textos de preguntas de la instalación.     Si desea realizar búsquedas recursivas en dependencias de paquetes , debería usar apt-rdepends(8). 2.5. Gestión interna de los paquetes Debian Aprendamos como funciona internamente el sistema de paquetes     Debian. Esto puede ayudar a encontrar su propia solución en algunos problemas con paquetes. 2.5.1. Metadatos de archivos Los metadatos de archivos para cada distribución se almacenan en «dist/codename» en cada sitio espejo de Debian , p. ej., «http://     deb.debian.org/debian/». La estructura del repositorio se puede navegar con un navegador web. Existen seis tipos de metadatos clave. Tabla 2.14. El contenido de metadatos del repositorio Debian +---------------------------------------------------------------+ | archivo | ubicación | contenido | |----------------------+--------------------+-------------------| | | |descripción del | |Distribución |Alto de la |archivo e | | |distribución |información de | | | |integridad | |----------------------+--------------------+-------------------| | | |archivo de firma | | |Alto de la |para el archivo | |Release.gpg |distribución |firmado «Release» | | | |con el archivo | | | |llave | |----------------------+--------------------+-------------------| | | |relación de todos | | |Alto de la |los archivos para |     |Contenido-arquitectura|distribución |todos los paquetes | | | |en el repositorio | | | |pertinente | |----------------------+--------------------+-------------------| | |raíz de cada |descripción de | |Distribución |combinación de |archivo usado para | | |distribución/área/ |la regla de | | |arquitectura |apt_preferences(5) | |----------------------+--------------------+-------------------| | |raíz de cada |concatenado de | |Paquetes |combinación |debian/control para| | |distribución/área/ |paquetes binarios | | |arquitectura-binaria| | |----------------------+--------------------+-------------------| | |raíz de cada |concatenado de | |Fuentes |combinación |debian/control para| | |distribución/área/ |paquetes fuente | | |fuente | | +---------------------------------------------------------------+     En el archivo reciente, estos metadatos se almacenan como los archivos comprimidos y diferencial para reducir tráfico de red. 2.5.2. Archivo «Release» del nivel superior y autenticación Sugerencia     El archivo de la raíz «Release» se usa para firmar el repositorio del sistema seguro APT. Cada versión del archivo de Debian tiene un fichero de nivel     superior "Release", por ejemplo, "http://deb.debian.org/debian/ dists/unstable/Release", como sigue. Origin: Debian Label: Debian Suite: unstable Codename: sid Date: Sat, 14 May 2011 08:20:50 UTC Valid-Until: Sat, 21 May 2011 08:20:50 UTC     Architectures: alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc Components: main contrib non-free Description: Debian x.y Unstable - Not Released MD5Sum: bdc8fa4b3f5e4a715dd0d56d176fc789 18876880 Contents-alpha.gz 9469a03c94b85e010d116aeeab9614c0 19441880 Contents-amd64.gz 3d68e206d7faa3aded660dc0996054fe 19203165 Contents-armel.gz ... Nota Aquí, puede encontrar la razón de ser entre la «versión« y el     «nombre en clave« en Sección 2.1.5, “Fundamentos del archivo de Debian”. «Distribución« se utiliza cuando se refiere a la «versión« y «nombre en clave«. Todos los nombres de "áreas" de archivo que ofrece el archivo se enumeran en "Componentes". La integridad del archivo de nivel superior "Release" se verifica     mediante una infraestructura criptográfica denominada secure apt, tal y como se describe en apt-secure(8). * El archivo de firma criptográfica «Release.gpg» se crea desde el auténtico archivo «Release» de la raíz y el archivo de la clave secreta Debian. * Las claves del archivo público de Debian se instalan localmente mediante el último paquete debian-archive-keyring. * El sistema secure APT verifica automáticamente la integridad del fichero descargado de nivel superior "Release" criptográficamente mediante este fichero "Release.gpg" y las claves públicas del archivo de Debian instaladas localmente.     * La integridad de todos los archivos «Packages» y «Sources» se verifican usando valores MD5sum del archivo raíz «Release». La integridad de todos los archivos de paquetes se comprueban usando los valores de MD5sum en los archivos«Packages» and «Sources». Ver debsums(1) y Sección 2.4.2, “Verificación de los archivos de un paquete instalado”. * Ya que la verificación de la firma criptográfica es un proceso intensivo en uso de la CPU, el uso del valor MD5sum para cada paquete mientras se usa el archivo de firma criptográfica de la raíz «Release» proporciona buena seguridad y eficiencia (ver Sección 10.3, “Infraestructura de seguridad de la información”). Si la entrada lista de fuentes especifica la opción "firmado por", la integridad del archivo de nivel superior "Release"     descargado se verifica utilizando la clave pública especificada. Esto es útil cuando la lista de fuentes contiene archivos que no son Debian. Sugerencia     El uso del comando apt-key(8) para la gestión de claves APT está obsoleto. También puedes verificar manualmente la integridad del fichero     "Release" con el fichero "Release.gpg" y la clave pública del archivo Debian publicada en ftp-master.debian.org usando gpg. 2.5.3. Archivos «Release» a nivel de archivo Sugerencia     Los archivos “Release” a nivel de fichero se usan para la regla apt_preferences(5). Existen ficheros a nivel del archivo "Release" para todas las ubicaciones del archivo especificadas por la lista de fuentes,     como "http://deb.debian.org/debian/dists/unstable/main/ binary-amd64/Release" o "http://deb.debian.org/debian/dists/sid/ main/binary-amd64/Release", como se indica a continuación. Archive: unstable Origin: Debian     Label: Debian Component: main Architecture: amd64 Atención Para la etiqueta «Archive:» , los nombres de distribución (stable     (estable), testing (pruebas), unstable (inestable), …) se utilizan en el repositorio Debian mientras que los nombres de publicación («trusty», «xenial», «artful», …) se utilizan en el repositorio Ubuntu. Para algunos archivos, como experimental, y bookworm-backports,     que contienen paquetes que no deben instalarse automáticamente, hay una línea extra, por ejemplo, "http://deb.debian.org/debian/ dists/experimental/main/binary-amd64/Release" como sigue. Archive: experimental Origin: Debian     Label: Debian NotAutomatic: yes Component: main Architecture: amd64 Tenga en cuenta que los repositorios normales sin «NotAutomatic: yes», el valor por defecto de la prioridad de instalación (Pin-Priority) es 500, mientras que en los repositorios     especiales con «NotAutomatic: yes», el valor por defecto de la prioridad de instalación (Pin-Priority) es 1 (ver apt_preferences (5) y Sección 2.7.7, “Ajustar la versión candidata con apt-pinning”). 2.5.4. Actualizando la meta información de los paquetes Cuando se usan herramientas APT, como aptitude, apt-get, synaptic, apt-file, auto-apt, ..., necesitamos actualizar las copias locales de los metadatos que contienen la información del     archivo Debian. Estas copias locales tienen los siguientes nombres que corresponden a los nombres especificados para: distribución, área y arquitectura en la lista de fuentes (ver Sección 2.1.5, “Fundamentos del archivo de Debian”). * «/var/lib/apt/lists/deb.debian.org_debian_dists_distribution _Release» * «/var/lib/apt/lists/deb.debian.org_debian_dists_distribution _Release.gpg»     * «/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area _binary-architecture_Packages» * «/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area _source_Sources» * «/var/cache/apt/apt-file/deb.debian.org_debian_dists_distribution _Contents-architecture.gz» (para apt-file) Los 4 primeros tipos de archivos son compartidos por todos los comandos APT pertinentes y actualizados desde la línea de     comandos mediante "apt-get update" o "aptitude update". Los metadatos "Paquetes" se actualizan si se especifica "deb" en la lista de fuentes. Los metadatos "Fuentes" se actualizan si se especifica "deb-src" en la lista de fuentes. La metainformación de los «paquetes» y de las «fuentes» contienen el campo «Filename:» que apunta a la ubicación del archivo de los     paquetes fuente y binarios. En este momento, estos paquetes se ubican en el subárbol del directorio «pool/» para mejorar la transición entre distribuciones. Se pueden realizar búsquedas interactivas en las copias locales de la metainformación de los «paquetes» mediante la orden     aptitude. La orden de búsqueda especializada grep-dctrl(1) puede buscar metainformación en las copias locales de los «paquetes» y las «fuentes». La copia local de los metadatos "Contents-architecture" se puede actualizar con "apt-file update" y su ubicación es diferente de     las otras 4 . Ver apt-file(1). (El auto-apt usa una ubicación diferente para la copia local de "Contents-architecture.gz" por defecto) 2.5.5. Estado del paquete para APT Además de acceder de forma remota a la metainformación, desde lenny, la herramienta APT almacena la información local referente     al estado de la instalación en «/var/lib/apt/extended_states» el cual usan el resto de herramientas APT para realizar el seguimiento de todos los paquetes autoinstalados. 2.5.6. El estado del paquete en aptitude Además de acceder de forma remota a la metainformación, la orden     aptitude almacena el estado de la instalación de forma local en « /var/lib/aptitude/pkgstates» y este es usado únicamente por aptitude. 2.5.7. Copias locales de los paquetes descargados     Todos los paquetes descargados de forma remota mediante APT se almacenan en «/var/cache/apt/archives» hasta que se limpia. Esta política de limpieza de los archivos de la caché para     aptitude se puede configurar en "Opciones" → "Preferencias" y se puede forzar por su menú "Limpiar caché de los paquetes" o "Limpiar los archivos obsoletos" en "Acciones". 2.5.8. Nombres de archivos de paquetes Debian     Los archivos que son paquetes Debian tienen una estructura para nombrarlos determinada. Tabla 2.15. La estructura del nombre de los paquetes Debian +--------------------------------------------------------------------------------+ | tipo de | estructura del nombre | | paquete | | |-------------+------------------------------------------------------------------| |El paquete | | |binario |nombre_del_paquete_versión_actual-debian-versión_arquitectura.deb | |(apodado deb)| | |-------------+------------------------------------------------------------------| |El paquete | | |binario para | | |el instalador|nombre_del_paquete_versión_actual-debian-versión_arquitectura.udeb| |de debian | | |(apodado | | |udeb) | | |-------------+------------------------------------------------------------------| |Paquete de | | |código fuente| |     |(código |nombre_del_paquete_versión_actual-debian-versión.orig.tar.gz | |fuente | | |ascendente) | | |-------------+------------------------------------------------------------------| |El paquete | | |fuente 1.0 |nombre_del_paquete_versión_actual-debian-versión.diff.gz | |(cambios | | |Debian) | | |-------------+------------------------------------------------------------------| |El paquete | | |fuente 3.0 | | |(quilt) |nombre_del_paquete_versión_actual-debian-versión.debian.tar.gz | |(cambios de | | |Debian) | | |-------------+------------------------------------------------------------------| |El paquete | | |fuente |nombre_del_paquete_versión_actual-debian-versión.dsc | |(descripción)| | +--------------------------------------------------------------------------------+ Sugerencia     Únicamente describiremos aquí el formato del paquete fuente. Para obtener mayor información consulte dpkg-source(1). Tabla 2.16. Los caracteres permitidos en cada campo del nombre del paquete en Debian +---------------------------------------------------------------+ | nombre del campo | Caracteres disponibles |existencia | | | (expresión regular) | | |------------------+--------------------------------+-----------|     |nombre_del_paquete|[a-z0-9][-a-z0-9.+]+ |obligatorio| |------------------+--------------------------------+-----------| |época: |[0-9]+: |opcional | |------------------+--------------------------------+-----------| |versión_actual |[-a-zA-Z0-9.+:]+ |obligatorio| |------------------+--------------------------------+-----------| |debian.versión |[a-zA-Z0-9.+~]+ |opcional | +---------------------------------------------------------------+ Nota     Se puede comprobar el orden de las versiones de los paquetes con la ordendpkg(1), p. ej., «dpkg --compare-versions 7.0 gt 7.~pre1 ; echo $?» . Nota El instalador debian (d-i) usa la extensión de archivo udeb para sus paquetes binarios en vez de la normal deb. Un paquete udeb es     una versión reducida de un paquete deb a la cual se le han eliminado los contenidos no esenciales como la documentación con el fin de ahorrar espacio mientras se relajan los requisitos de la directriz de los paquetes. Ambos paquetes, deb y udeb, comparten la misma estructura de paquetes. La «u» tiene el significado de micro. 2.5.9. La orden dpkg dpkg(1) es la herramienta de más bajo nivel para la gestión de     paquetes Debian. Es una herramienta muy poderosa y por tanto es necesario usarla con cuidado.     Al instalar el paquete llamado "package_name", dpkg lo procesa en el siguiente orden. 1. Desempaqueta el archivo deb (equivale a «ar -x») 2. Ejecuta «nombre_del_paquete.preinst» usando debconf(1)     3. Instala el paquete en el sistema (equivalente a "tar -x") 4. Ejecuta «nombre_del_paquete.postinst» usando debconf(1) El sistema debconf proporciona una interacción de usuario     estandarizada con compatibilidad con I18N y L10N (Capítulo 8, I18N y L10N). Tabla 2.17. Los archivos destacados creados por dpkg +---------------------------------------------------------------+ | archivo | descripción del contenido | |----------------------------+----------------------------------| |/var/lib/dpkg/info/ |relación de archivos de | |nombre_del_paquete.conffiles|configuración (modificables por el| | |usuario) | |----------------------------+----------------------------------| |/var/lib/dpkg/info/ |relación de archivos y directorios| |nombre_del_paquete.list |instalados por el paquete | |----------------------------+----------------------------------| |/var/lib/dpkg/info/ |relación de resumen criptográfico | |nombre_del_paquete.md5sums |MD5 de los archivos instalados por| | |el paquete | |----------------------------+----------------------------------| |/var/lib/dpkg/info/ |archivos de órdenes del paquete | |nombre_del_paquete.preinst |que se ejecutan antes de su | | |instalación | |----------------------------+----------------------------------| |/var/lib/dpkg/info/ |archivo de órdenes que se ejecutan| |nombre_del_paquete.postinst |después de la instalación del | | |paquete | |----------------------------+----------------------------------| |/var/lib/dpkg/info/ |archivo de órdenes del paquete que| |nombre_del_paquete.prerm |se ejecuta antes de la eliminación| | |del paquete | |----------------------------+----------------------------------| |/var/lib/dpkg/info/ |archivo de órdenes del paquete | |nombre_del_paquete.postrm |para ser ejecutada después de la |     | |eliminación del paquete | |----------------------------+----------------------------------| |/var/lib/dpkg/info/ |archivo de órdenes para el sistema| |nombre_del_paquete.config |debconf | |----------------------------+----------------------------------| |/var/lib/dpkg/alternatives/ |la información alternativa usada | |nombre_del_paquete |por la orden update-alternatives | |----------------------------+----------------------------------| |/var/lib/dpkg/available |la información disponible para | | |todo el paquete | |----------------------------+----------------------------------| | |la información de la ubicación | |/var/lib/dpkg/diversions |alternativa usada por dpkg(1) y | | |asignada por dpkg-divert(8) | |----------------------------+----------------------------------| | |la información estadística manual | |/var/lib/dpkg/statoverride |utilizada por dpkg(1) y asignada | | |por dpkg-statoverride(8) | |----------------------------+----------------------------------| |/var/lib/dpkg/status |la información del estado de todos| | |los paquetes | |----------------------------+----------------------------------| | |la copia de seguridad de la | |/var/lib/dpkg/status-old |primera generación del archivo | | |"var/lib/dpkg/status" | |----------------------------+----------------------------------| | |el segundo juego de copias de | |/var/backups/dpkg.status* |respaldo y anteriores del archivo | | |«var/lib/dpkg/status» | +---------------------------------------------------------------+     El archivo «status» además lo utilizan herramientas como dpkg(1), «dselect update» y «apt-get -u dselect-upgrade». El comando de la búsqueda especializada grep-dctrl(1) puede     buscar las copias locales de los metadatos "status" y "disponible". Sugerencia     En el entorno del instalador de debian, la orden udpkg se usa para abrir los paquetes udeb. La orden udpkg es una versión reducida de la orden dpkg. 2.5.10. La orden update-alternatives En sistema Debian existe un mecanismo para tener instalados a la vez varios programas que realizan la misma función sin problemas     usando update-alternatives(1). Por ejemplo, se pueden hacer que la orden vi seleccione vim cuando se tienen instalados los paquetes tanto vim y nvi. $ ls -l $(type -p vi) lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi $ sudo update-alternatives --display vi ... $ sudo update-alternatives --config vi     Selection Command ---------------------------------------------- 1 /usr/bin/vim *+ 2 /usr/bin/nvi Enter to keep the default[*], or type selection number: 1 El sistema «alternatives« de Debian mantiene un conjunto de     enlaces simbólicos en «/etc/alternatives/». El uso del proceso de selección se encuentran en los archivos de «/var/lib/dpkg/ alternatives/». 2.5.11. La orden dpkg-statoverride El cambio de permisos (Stat overrides) que se realiza mediante la orden dpkg-statoverride(8) es una manera de conseguir quedpkg(1)     use un propietario o unos permisos de uso diferentes para un archivo cuando se instala un paquete. Si se especifica «--update» y el archivo existe , los nuevos permisos y propietario se cambian al instante. Atención     El cambio directo del propietario o modo de un archivo propiedad del paquete mediante los comandos chmod o chown por parte del administrador del sistema se restablece en la siguiente actualización del paquete. Nota     Hemos usado la palabra archivo en los párrafos anteriores, pero realmente estos cambios se pueden ser realizar sobre cualquier objeto del sistema de archivos que gestione dpkg, incluidos directorios, dispositivos, etc. 2.5.12. La orden dpkg-divert Las ubicaciones alternativas de un archivo que se realizan mediante la orden dpkg-divert(8) son una forma de obligar a dpkg (1) de instalar un archivo en una ubicación alternativa y no en     su ubicación por defecto. Los archivos de órdenes de mantenimiento del paquete son los encargados del uso de dpkg-divert. Es una práctica en desuso su utilización por el administrador del sistema. 2.6. Recuperación de un sistema Cuando se ejecuta el sistema testing (pruebas) o unstable     (inestable), se espera que el administrador recupere la situación de administración de paquetes rotos. Atención     Algunos métodos descritos conllevan acciones muy peligrosas. ¡Está avisado! 2.6.1. 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 apt-pinning por parte de un usuario novato es una llamada segura a problemas mayores. Debes evitar utilizar apt-pinning 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)). Cuanso se usa como origen para instalación de paquetes, un conjunto mixto de repositorios con regularidad (ver Sección 2.7.6, “Paquetes de origen mixto de archivos sin apt-pinning”), mediante el archivo «/etc/apt/preferences» se     puede automatizar este tipo de operaciones complejas, creando dicho archivo con las entradas adecuadas y modificando la forma en que se seleccionan la versión candidata de los paquetes según se describe en apt_preferences(5). Esta operación recibe el nombre de alteración de la selección de paquetes (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 situación de apt-pinning del paquete de múltiples fuentes de archivo se muestra mediante "política apt-cache paquete". * 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 apt-pinning por parte de un usuario novato es una llamada segura a problemas mayores. Debes evitar utilizar apt-pinning 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 apt-pinning por parte de un usuario novato es una llamada segura a problemas mayores. Debes evitar utilizar apt-pinning 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 Generalmente edito el archivo «/etc/apt/sources.list» para comentar la entrada ««inestable»» del archivo justo después de     realizar la operación anterior. Esto evita que el proceso de actualización se ralentice por tener demasiadas entradas en el archivo «/etc/apt/sources.list» aunque esto impide que se actualicen los paquetes que fueron instalados desde el repositorio «inestable» usando dicho repositorio 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 apt-pinning por parte de un usuario novato es una llamada segura a problemas mayores. Debes evitar utilizar apt-pinning 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 apt-pinning por parte de un usuario novato es una llamada segura a problemas mayores. Debes evitar utilizar apt-pinning 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 del equipo del sistema. El archivo de órdenes de init en el nivel de ejecución S, el cual es un enlace simbólico a «/etc/init.d/hostname.sh» asigna el nombre del     sistema en tiempo de arranque (usando la orden hostname) al nombre almacenado en «/etc/hostname». Este archivo debería contener únicamente el nombre del sistema, no un nombre de dominio totalmente cualificado (FQDN).     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 evento”. 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 especificando logind se     implementa mediante el registro de sesiones de usuario en la jerarquía del grupo de control systemd. Ver 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 moderna configuración de la red para la nube con Network Manger La configuración del cliente de red mediante la infraestructura     Network Manger puede establecerse creando un archivo de origen 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 confiugració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 de manual importantes. Tabla 6.4. Relación de páginas de manual importantes 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) |Tabla de mantenimiento adelantada 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. Consulte «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ñon 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 configuarció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| |ssh-askpass |I:23 |102 |ssh-askpass(1) |la frase de| | | | | |paso 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     Consulte 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 caidas de la conexión (consulte 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, consulte | |ssh_config |ssh_config(5) | |----------------+----------------------------------------------| |/etc/ssh/ |Valores por defecto del servidor SSH, consulte|     |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 Alioth 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 «RSAAuthentication» (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 frase     de paso. Si no se ha asignado una frase de paso, 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 el próximo 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 agente ssh 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 reenvio 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» (consulte Sección 1.1.8, “Cómo apagar el sistema”) de la     finalización de ssh utilizando la orden at(1) (consulte Sección 9.4.13, “Planificación una vez de las tareas”) como se muestra.     # 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) (consulte 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 reprente deja de funcionar, puede ser que tenga que ser solucionado por el administrador de sistemas, comunmente 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. Véase 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     Consulte 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 puede ser configurado 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. * Muevae 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 (via 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), se han migrado al protocolo del     servidor de visualización de Wayland. Veo xterm, gitk, cromo, 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. Consulte "soporte de modo de video 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 | | | | |laconfiguració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 "Sobreamplificació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. Véase xdg-user-dirs-update(1).     También puede asignarles cualquier nombre editando "~/.config/ user-dirs.dirs". Véase 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. Consulta 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, véase Sección 1.4.4, “Operaciones con el ratón”.     Para recortar gráficos al portapapeles, consulta 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 eventos | | | | |de linux|del mouse 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üizació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 menasje     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 que han sido escritos 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" puede ser anulado 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. Códificación del nombre del archivo Para el intercambio de datos entre plataformas (consulte Sección 10.1.7, “Dispositivos de almacenamiento extraibles”), 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 Cuanto 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 estará activado. 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 pueden ser códificados 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. Consulte 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 de la orden GNU gettext(1) se utiliza como motor para la mayoría de las actividades relacionadas con las traducciones. 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 (véase 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".     Consulta la página del comando 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 consola Linux y X Window El sistema Debian peude ser configurado 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 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 |Vitnamita | |---------------------+-----------+------+----------------------| | | | |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. Vuelvase a acreditar 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 (consulte 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) (see 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" (véase 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", "Mx eshell" o "Mx term" para ingresar a la consola de grabación . Utiliza "Cx Cw" 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. Usted acceda a un equipo remoto. 2. Inici screen en una única consola. 3. Ejecute múlitples 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 magicamente reconecta con todas las ventanas anteriores de screen con todos los programas activos ejecutandose. Sugerencia     Puede guardar la entrada de la conexión con screen para la conexión de red amedida 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 son enviadas 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]. Aquí estan algunos importantes a 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 |va a la ventana número 1 |     |-------+-------------------------------------------------------| |^A w |muestra una relación de las ventanas | |-------+-------------------------------------------------------| |^A a |envia 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 sale | +---------------------------------------------------------------+     Para más detalles consulte screen(1).     Consulta tmux(1) para conocer 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, se le pedirán 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. Personalició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”, lea "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]" 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     "colorscheme default set scrolloff=5 " :h 'scr -- show 5 lines around cursor set laststatus=2 " :h 'ls (default 1) k """ boolian options can be unset by prefixing "no" "set list " :h 'list (default nolist) set smartcase " :h 'scs -- Override the 'ignorecase' option set autoindent " :h 'ai set smartindent " :h 'si set nowrap " :h 'wrap set nolist " :h 'list -- (enable when needed) 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 'clipboard -- cut/copy/paste with other app     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 *** """ Window moves without using CTRL-W which is dangerous in INSERT mode nnoremap h nnoremap j nnoremap k silent! nnoremap l """ nohlsearch with ( is mapped as above) inoremap noh nnoremap noh """ execute macro recorded with qq.....q with Q nnoremap Q @q """ center after jump next nnoremap n nzz nnoremap N Nzz """ fast "jk" to get out of INSERT mode ()     inoremap jk """ double to get out of TERM mode (CTRL-\ CTRL-N) tnoremap """ fast "jkjk" to get out of TERM mode (CTRL-\ CTRL-N) tnoremap jkjk """ """ *** nvim default mappings (no need for nvim) *** """ copy to EOL (no delete) like D for d noremap Y y$ """ disable prefix repeats for erases inoremap u inoremap u """ search visual selected string for visual mode xnoremap * y/\V" xnoremap # y?\V" """ repeat last substitute and *KEEP* flags nnoremap & :&& 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: """ 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 """ \%#\@ 0 && line ("'\"") <= line("$") | \ exe "normal! g'\"" | \ endif augroup END 9.2.2. Personalizando vim con paquetes externos     Se pueden encontrar interesantes paquetes de complementos externos: * Vim - el editor de texto extendido -- El sitio web oficial de Vim y vim scripts     * VimAwsome -- La lista de plugins de Vim * vim-scripts -- Paquete Debian: una colección de scripts de vim     Los paquetes del plugins en el paquete vim-scripts pueden ser habilitados usando el archivo vimrc del usuario. Ej: packadd! secure-modelines packadd! winmanager let mapleader = ' '     " Toggle paste mode with p for Vim (no need for Nvim) set pastetoggle=p " IDE-like UI for files and buffers with 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. Usa emacs con "Mx shell", "Mx eshell" o "Mx term" para ingresar a     la consola de grabación . Utiliza "Cx Cw" para escribir en el búfer en un archivo.     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í estan los analizadores de trazas más importantes («~Gsecurity::log-analyzer» en aptitude(8)). Tabla 9.4. Relación de analizadores de trazas del sistema +---------------------------------------------------------------+ | paquete |popularidad|tamaño| descripción | |----------+-----------+------+---------------------------------| | | | |analizador de trazas con una | |logwatch |V:11, I:13 |2328 |buena generación de 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 trazas para | | | | |servidores web | |----------+-----------+------+---------------------------------| | | | |analizador de trazas para | |awstats |V:6, I:10 |6928 |servidores web potente y con | | | | |diversas funcionalidades | |----------+-----------+------+---------------------------------| |sarg |V:1, I:1 |845 |generador de informes de análisis|     | | | |de squid | |----------+-----------+------+---------------------------------| |pflogsumm |V:1, I:4 |109 |generador de resumenes de las | | | | |trazas de postfix | |----------+-----------+------+---------------------------------| |fwlogwatch|V:0, I:0 |481 |analizador de trazas de | | | | |cortafuegos | |----------+-----------+------+---------------------------------| |squidview |V:0, I:0 |189 |controla y analiza los archivos | | | | |access.log de squid | |----------+-----------+------+---------------------------------| | | | |visor de archivos de trazas con | |swatch |V:0, I:0 |99 |encaje de expresiones regulares, | | | | |eventos 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 expresines regulares TRE . Su uso más común es como filtro de correos no deseados pero puede ser utilizado también como analizador de trazas. 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) (consulte Sección 1.4.5, “El paginador”) y herramientas personalizadas para marcar y dar formato (see 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 (consulte 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 (véase     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 puede ser anulada por 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, véase 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» (consulte ls(1), date(1), «info coreutils 'ls invocation'»). Tabla 9.5. Mostrar los ejemplos de la hora y la fecha para el comando "ls -l" con el time style value. +---------------------------------------------------------------+ |valor del estilo de | configuración |visualización de la hora | | la hora | regional | y la fecha | |--------------------+----------------+-------------------------| |iso |cualquiera |01-19 00:15 | |--------------------+----------------+-------------------------| |long-iso |cualquiera |2009-01-19 00:15 | |--------------------+----------------+-------------------------| |full-iso |cualquiera |2009-01-19 | | | |00:15:16.000000000 +0900 | |--------------------+----------------+-------------------------|     |configuración |C |Jan 19 00:15 | |regional | | | |--------------------+----------------+-------------------------| |configuración |en_US.UTF-8 |Jan 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 (consulte «/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 Órdenes 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 pueder 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 repeticones 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. Captura 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, | |planficador de tareas similar a | |anacron |I:479 |93 |cron para los sistemas que no | | | | |están activos 24 horas al dia | |---------+-----------+------+----------------------------------| | | | |at(1) or batch(1): ejecuta un | |at |V:101, |158 |trabajo at en un momento | | |I:154 | |determinado o por 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. Usted podría aprender acerca de todo ello. 9.4.1. Temporización de un proceso     Muestra el tiempo utilizado por un proceso invocado por la 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     Un valor de «nice« se utiliza para determinar la prioridad de planificación de los procesos. Tabla 9.9. Relación de valores de nice para la prioridad de planificación +---------------------------------------------------------------+ | Valor de | prioridad de planificación | | nice | | |------------+--------------------------------------------------|     |19 |proceso de menor prioridad (nice) | |------------+--------------------------------------------------| |0 |proceso de muy alta prioridad para el usuario | |------------+--------------------------------------------------| |-20 |proceso de superusuario (no nice) 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 valor extremo de nice 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 actuan 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, invocaciones al     sistema, señales, invocaciones a bibliotecas o comunicaciones entre el cliente y servidor X11, con strace(1), ltrace(1), o xtrace(1).     Puede seguir las invocaciones del sistema de la orden ls con 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 utlizando 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 se muestra. $ sudo fuser -v smtp/tcp     USER PID ACCESS COMMAND smtp/tcp: Debian-exim 3379 F.... exim4     Ahora sabe que su sistema ejecuta exim4(8) con el fin de 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 (consulte 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 asegurar el correcto     tratamiento de los nombres de archivos que contienen caracteres raros como los espacios. Para usos avanzados de find(1) consulte Sección 10.1.5, “Formas de selección de archivos”. 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 especificdo por la variable de entorno $PATH. Consulte 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 simplificadao. Los archivos *.desktop son revisados como sigue.     El entorno de escritorio asigna las variables del entorno $XDG_DATA_HOME and $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 (consulte 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. Consulte 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í estan los puntos a compribar 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», and «www-browser» (consulte 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 (consulte 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 (consulte run-mailcap(1)) Sugerencia     update-mime(8) actualiza el archivo «/etc/mailcap» utilizando el archivo «/etc/mailcap.order» (consulte 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 intervales deseados tan pronto como el equipo activo lo permita. Consulte 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 evento Systemd puede programar el programa no sólo en el evento timer sino también en el evento mount. Ver Sección 10.2.3.3, “Copia de     seguridad activada por evento del temporizador” y Sección 10.2.3.2, “Montar la copia de seguridad activada por el evento” para ejemplos. 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 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 crudo después de | | |que las X fallen | +---------------------------------------------------------------+     Obtén 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 sincroniza y monta todos los sistemas de archivos.     El kernel de Debian amd64 Linux actual (2021) tiene /proc/sys/ kernel/sysrq=438=0b110110110: * 2 = 0x2: habilitar el control del nivel del registro de la consola (ON) * 4 = 0x4 - permitir el control del teclado (SAK, unraw) (ON) * 8 = 0x8 - habilitar dumps de depuración de procesos etc. (OFF)     * 16 = 0x10 - habilitar sync command (ON) * 32 = 0x20 - habilitar volver a montar solo lectura (ON) * 64 = 0x40 - permitir la señalización de procesos (term, kill, oom-kill) (OFF) * 128 = 0x80 - permitir reboot/poweroff (ON) * 256 = 0x100 - permitir 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 como se muestra. * 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. Consulte 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) como se muestra.     $ 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» (consulte 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 los | | | | |eventos que llegan del | |acpid |V:84, I:148|158 |Interfaz de Fuerza 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 (consulte | |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. Consulte systemd-timesyncd(8).     Consulte 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 del 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 consulte «/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). Los software de aplicación pueden configurarse 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. Consulte la Página Wiki de Debian sobre sonido para conocer la situación más reciente. Generalmente existe un motot 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 video - | | | | |metapaquete | |-----------------+-----------+------+--------------------------| | | | |servidor multimedia del | |pipewire-bin |V:274, |1631 |motor de procesamiento del| | |I:319 | |audio y video - servidor | | | | |de audio y programas CLI | |-----------------+-----------+------+--------------------------| | | | |servidor multimedia del | | |V:105, | |motor de procesamiento del| |pipewire-alsa |I:157 |206 |audio y video - servidor | | | | |de audio para reemplazar | | | | |ALSA |     |-----------------+-----------+------+--------------------------| | | | |servidor multimedia del | | |V:160, | |motor de procesamiento del| |pipewire-pulse |I:214 |50 |audio y video - 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 Se puede sorprender que «dmesg le 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 leea lo que hay debajo (675404 y 321780 en el ejemplo anterior) y relajese.     Para mi MacBook con 1GB=1048576k DRAM (el sistema de video 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 de su sistema puede exponerlo a ser atacado desde el exterior.     Para la seguridad y las comprobaciones de intergridad, debe comenzar con lo que se muestra. * Para el paquete debsums, consulte debsums(1) y Sección 2.5.2, “Archivo «Release» del nivel superior y autenticación”. * Para el paquete chkrootkit consulte chkrootkit(1).     * Para la familia de paquetes clamav consulte 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 | +---------------------------------------------------------------+     Aquí esta 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 utliza la comprobación mediante MD5 almacenados en local, no debe usarse como una herramienta de auditoria del sistema para ataques maliciosos. 9.6. Trucos del almacenamiento de datos El arranque de su 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 puede ser evaluado por 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 las Mac basadas 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, ha sido sustituida 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 (consulte 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» (consulte 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 volumenes lógicos del núcleo de Linux. Con     LVM2 las particiones de disco se pueden crear en volumenes 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 comenzar a aprender 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úmentes * 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 especificos 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 (consulte 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». Consulte 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 (consulte Sección 9.6.3, “Acceso al particionado utilizando UUID”) puede utilizarse para identificar los dispositovos 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 puede ser optimizado 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í, activelo 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) daemon 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 Gertor de Volumenes Lógicos (Logical Volume Manager, LVM) (funcionalidad de Linux) en el     momento de la instalación, pueden ser redimensionadas 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 mendiante el montaje de otra partición Si tiene una partición vacia (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 vacio     (consulte Sección 9.7.5, “Haciendo un archivo de imagen de disco vacio”) como un dispositivo «loop« (consulte Sección 9.7.3, “Montaje del archivo de la imagen del disco”). La utilización de disco real crece con el almacenamiento de datos. 9.6.15. Expansión del espacio de almacenamient por el enlace mediante el montaje en otro directorio Si tiene un directorio vacio (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 or newer).     $ sudo mount -t overlay overlay \ -olowerdir=/path/to/old-dir,upperdir=/path/to/empty,workdir=/path/to/work Aquí, «/ruta/al/directorio_vacio» y «/ruta/al/     directorio_de_trabajo» deben ser una partición con permisos de lectura y escritura para escribir en «/ruta/al/ directorio_antiguo». 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 vacio (p. ej., «/path/to/emp-dir») en otra     partición con espacio utilzable, 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 son gestionados por el sistema como «/opt». Como enlace simbólico puede ser sobreescrito 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) (consulte Sección 9.6.2, “Configuración del particionado de disco”) el cual 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»: Unicamente 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 de la imagen del disco «disk.img» puede ser escrito     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 de la imagen de la partición del     disco, «partition.img» puede ser escrito 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 de la imagen del disco La imagen del disco «partition.img» que contiene la imagen de una     única partición puede ser montada y desmontada utilizandolo como dispositivo «loop« como se muestra. # losetup -v -f partition.img Loop device is /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 pueden ser montadas utilizando los dispositivos «loop«. Ya que el dispositivo «loop« no gestiona particiones por omisión, necesitamos iniciarlo como se muestra. # modinfo -p loop # verify kernel capability max_part:Maximum number of partitions per loop device     max_loop:Maximum number of loop devices # losetup -a # verify nothing using the loop device # rmmod loop # modprobe loop max_part=16     Ahora, el dispositivo «loop« puede gestionar hasta 16 particiones. # losetup -v -f disk.img Loop device is /dev/loop0 # fdisk -l /dev/loop0 Disk /dev/loop0: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x452b6464     Device Boot Start End Blocks Id System /dev/loop0p1 1 600 4819468+ 83 Linux /dev/loop0p2 601 652 417690 83 Linux # mkdir -p /mnt/loop0p1 # mount -t ext4 /dev/loop0p1 /mnt/loop0p1 # mkdir -p /mnt/loop0p2 # mount -t ext4 /dev/loop0p2 /mnt/loop0p2 ...hack...hack...hack # umount /dev/loop0p1 # umount /dev/loop0p2 # losetup -d /dev/loop0 De forma, los mismos efectos pueden conseguirse utilizando el     mapeo de dispositivos de los dispositivos creados por kpartx(8) del paquete kpartx como se muestra. # kpartx -a -v disk.img ... # mkdir -p /mnt/loop0p2 # mount -t ext4 /dev/mapper/loop0p2 /mnt/loop0p2     ... ...hack...hack...hack # umount /dev/mapper/loop0p2 ... # kpartx -d /mnt/loop0 Nota     Puede montar una única partición como imagen del disco con dispositivos «loop« utilizando el desplazamiento para evitar el MBR etc., también. Pero es más propenso a errores. 9.7.4. Limpiando un archivo de imagen de disco Un archivo de imagen de disco, «disk.img» puede ser limpiado de     archivos borrados en una imagen dispersa limpia «new.img» como se muestra. # 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 or ext4, también puede utilizar zerofree(8) del paquete zerofree como se muestra. # losetup -f -v disk.img     Loop device is /dev/loop3 # zerofree /dev/loop3 # cp --sparse=always disk.img new.img 9.7.5. Haciendo un archivo de imagen de disco vacio     La imagen de disco vacio «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 -f -v disk.img Loop device is /dev/loop1 # mkfs.ext4 /dev/loop1 ...hack...hack...hack     # losetup -d /dev/loop1 $ 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 dispositivo mapeador de dispositivos como     Sección 9.7.3, “Montaje del archivo de la 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 «directorio_origen» 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 instalador debian como el árbol de directorios del «directorio_origen» 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 (consulte 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 unicamente un CD de mayor tamaño que utiliza wodim(1) que es proporcionado por cdrkit.     Puede encontrar un dispositivo utilizable como se muestra.     # wodim --devices Entonces se inserta el CD-R vacio 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 enlugar 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 automaticamente los CD, desmontelo 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 extraibles como un CD con formato ISO9660 de forma automática (consulte Sección 10.1.7, “Dispositivos de almacenamiento extraibles”). 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 guardalos en un único     archivo, puede obtener una copia de seguridad de su contenido dividiendolo 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, aseguresé que no tiene ningún archivo que comienza 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 vacio,     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 poiendo a 0 toda la información como se muestra.     # dd if=/dev/zero of=/dev/sda     Borrelo todo escribiendo datos aleatorios como sigue.     # dd if=/dev/urandom of=/dev/sda     Borrelo todo sobreescribiendolo con 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 deshuso del disco duro (o de la memoria USB), p. ej.     «/dev/sdb1» todavái pueden contener datos borrados ya que solo han sido desligados del sistema de archivos. Estos pueden ser limpiados sobreescribiendolos. # 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» y «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 quiere encontrar todos los enlaces duros mediante la suerte, puede buscarlos mediante el inodo, p. ej. «2738404« como se muestra.     # 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 (consulte Sección 4.6.4, “Asegurando la contraseña de root”). Esto significa que el sistema de acceso por contraseña puede no     securizar 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 (consulte 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 esfuezo 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     Consulte 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 extraibles,     p. ej. memoria USB en «/dev/sdx», utilizando dm-crypt/LUKS. Simplemente formateelo 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 extraibles”)     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. Parametros 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 son inicializados por el cargador de arranque (consulte 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 (consulte Sección 9.7.3, “Montaje del archivo de la 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 deben ser compilados 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 |decompresión de archivos | | | | |bz2 | |----------------+-----------+------+---------------------------| |libncurses5-dev |I:71 |6 |bibliotecas de desaroollo 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 contruir | |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 in 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úcelo 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 package contiene el código fuente del núcleo de Linux con los parches de Debian como «/usr/src/ linux-version.tar.bz2». Para la contrucció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 aportador 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 es proporcionado por 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 emulation 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 harsware 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 vacio (un árbol de directorios o una imágen 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) (consulteSección 9.7.1, “Creando un archivo de imagen de disco” y Sección 9.7.5, “Haciendo un archivo de imagen de disco vacio”). + qemu-img(1) puede ser utilizado 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 imágen de disco con mount(8) en el sistema de archivos (opcional). + Para el archivo de imágen de disco crudo, montelo como un dispositivo «loop« o mapeo de dispositivo (consulte Sección 9.7.3, “Montaje del archivo de la imagen del disco”). + Para el soporte de imágenes de disco por QEMU, montelos     como dispositivo de bloque de red (consulte 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 (consulte 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 imágen de disco crudo, consulte 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) soporta los formatos de disco soportados por QEMU: QEMU que soporta los siguientes formato de disco: 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« (consulte Sección 9.7.3, “Montaje del archivo de la 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 imágen de disco virtual «virtdisk.qcow2» que contiene una     imágen 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.     Ve más consejos en La Wikipedia de Debian: Virtualización del sistema. ---------------------------------------------------------------------     ^[2] Ejemplos de personalización más elaborados: "Vim Galore", "sensible.vim", "#vim Recommendations" ...     ^[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 extraibles     * 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| | | | | | |sintáxis | | | | | | |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ápdio 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 | | | | | | |sintáxis | | | | | | |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ñon 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 utilicela 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 algorimo de transferencia delta envia ú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í estan algunas manreas 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í están diferentes maneras de copiar el contenido completo de un directotio «./origen» 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 sintáxis 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) es utilizada 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” and Sección 10.1.4, “Formas de copia”) o por xargs(1) (consulte 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 sintáxis 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 «O lógico« (que se escribe «-o» entre condiciones) tiene menor precedencia que el «Y lógico« (que se escribe «-a» o vacio entre condiciones). * El «NO lógico« (que se escribe «!» antes de la condición) tiene mayor precedencia que el «Y lógico«. * La expresión «-prune» devuelve siempre un VERDADERO lógico y, si es un directorio, la búsqueda del archivos es detenida 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) (consulte 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 (consulte 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 imprimet 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 (consulte 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. Impreme los nombres de los archivos que cumplen los criterios de búsqueda anterirores y son más nuevos que el «/ruta/al/ sellodetiempo»     Tenga el cuenta la forma en que se utiliza «-prune -o»para excluir los archvios 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ñia 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 fuegoA fire-resistant safe 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, diquete) * 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 deben ser tenidos en cuenta para la toma de decisiones sobre almacenamiento de datos críticos. Por favor, consulte la informaciń 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 sonre 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 extraibles     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 automaticamente estos dispositivos extraibles 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 eventos 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 es utilizada por umount(8). Sugerencia     En los entornos de escritorio modernos el automontaje ocurre unicamente 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 puede personalizarse 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 (consulte Sección 8.1.3, “Códificación del nombre del 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 extraible, 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 extrabiles con sus casos de uso normales +---------------------------------------------------------------+ |nombre del | | |sistema de | escenario típico de uso | | archivos | | |-----------+---------------------------------------------------| |FAT12 |compartición de información entre diferentes | | |platadormas 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 plaformas | |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 platadormas |     | |mediante un dispositivo como un gran disco duro | |NTFS |(soporte nativo en MS Windows NT y versiones | | |posteriores y soportdado 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 com oun | | |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 casit 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 platadormas, lo siguiente podrían ser las opciones más seguras. * Particionemoslos con fdisk(8), cfdisk(8) or parted(8) (consulte Sección 9.6.2, “Configuración del particionado de disco”) en una única partición primaria y marquemosla 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ñia Microsoft no recomienda el uso de FAT para     dispostivos 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. Compartición de 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. Aquí estan 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|compatición de archivos mediante una «Red | |montado NFS con el |Unix/Linux«, consulte exports(5) y Linux |     |núcleo de Linux |NFS-HOWTO | |-------------------+-------------------------------------------| |servicio HTTP |compartición de archivos entre cliente/ | | |servidor web | |-------------------+-------------------------------------------| | |compartición de archivos entre servidor web| |servicio HTTPS |/cliente con cifrado con «Secure Sockets | | |Layer« (SSL) o «Transport Layer Security« | | |(TLS) | |-------------------+-------------------------------------------| |servicio FTP |compartición de 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 securizarse 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: planficació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 de 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 es utilizado eficientemente por 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 (véase Sección 9.9.1, “Cifrado de discos externos con dm-crypt/LUKS”). + Conéctelo a su 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 evento     A continuación se muestra un ejemplo de configuración para la copia de seguridad automática activada por el evento de montaje. * 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 evento de montaje, 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 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 evento del temporizador A continuación se muestra un ejemplo de configuración para la     copia de seguridad automática activada por el evento 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 evento 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 resúmen 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) | +---------------------------------------------------------------+ Véase 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     Aquí están 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 archivo|importa todas las claves desde un archivo | |--------------------+------------------------------------------|     |gpg --send-keys |envia la clave de un ID_de_usuario al | |ID_usuario |servidor de claves | |--------------------+------------------------------------------| |gpg --recv-keys |recibe claves del usuario ID_de_usuario | |ID_de_usuario |desde el servidor de claves | |--------------------+------------------------------------------| |gpg --list-keys |relación de las claves de ID_de_usuario | |ID_de_usuario | | |--------------------+------------------------------------------| |gpg --list-sigs |relación de las firmas de ID_de_usuarios | |ID_de_usuario | | |--------------------+------------------------------------------| |gpg --check-sigs |comprueba la firma de ID_de_usuario | |ID_de_usuario | | |--------------------+------------------------------------------| |gpg --fingerprint |comprueba la huella del ID_de_usuario | |ID_de_usuario | | |--------------------+------------------------------------------| |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 confie 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 corrompia 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í estan 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|envia 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 resumenes 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 histográma| |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 envia 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 uns 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 la última confirmación en una | |git ime |serie de confirmaciones de los archivos| | |por archivos más pequeñas, 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 subórden git directamento como «git-xyz» desde la línea de órdenes ha sido 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     Consulte 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 | | | | | | |una pequeña | | | | | | |parte en C | |----------+-----------+------+-----------+-----------+--------------| | | | | | |DCVS con | | | | | | |notación | |darcs |V:0, I:5 |34070 |Darcs |distribuido|álgebraica | | | | | | |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 practicamente el cualquier sistema tipo Unix para la conversión de codificaciones de caracteres.     Puede converitr las codificaciones de los archivos de texto con iconv(1)como es 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 códificació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 códificació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 Tenga 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 esta convirtiendo programas antiguos japoneses en C y datos URL de la codificación conocida como formato shift-JIS a formato UTF-8, utilice «CP932» como nombre de la codificación en lugar de «shift-JIS» para obtener los resultados correctos: 0x5C → «\» y 0x7E → «~». De otro modo serán convertidos a los caracteres incorrectos. Sugerencia     recode(1) también puede ser usado 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, consulte «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     Utilice la opción «--verbose» en el ejemplo anterior para determinar el primer caracter que no pertenece a UTF-8. 11.1.3. Convirtiendo los nombres de archivos con iconv Aquí esta 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, “Códificación del nombre del 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 porgramas de conversion 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 es debido a que todos añade CR a todas las líneas. 11.1.5. Conversión de tabuladores     Existen unow pocos 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 archivo de texto Unix «u-file.txt» almacenado en la antiguo     europeo occidental con la codificación latin1 (iso-8859-1) puede ser editado con vim como se muestra.     $ vim u-file.txt Esto es debido al mecanismode 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 text polaco en Unix, «pu-file.txt»,     almacenado en la codificación latin2 (iso-8859-2) puede ser editado 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 puede ser editado por 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) puede ser editado 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 lass | |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     «<» y «&» 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 documetnos| |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 | |-----------+-----------+------+-------+------------------------| | | | |xml/ |convierte archivos | |dblatex |V:2, I:10 |4636 |xslt |Docbook adocumentos 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 Semantica 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 sintáxi, | | | | | |reformateo, | | | | | |filtrado, …) | |-------------+-----------+------+--------------+---------------|     | | | | |comprobador de | |tidy |V:1, I:9 |75 |xml↔html↔xhtml|la sintáxis | | | | | |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 basandose el contexo 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 texto de referencia en     la macro «-me» instalando el paquete groff en el archivo «/usr/ share/doc/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 (véase 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 (véase 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 siguienetes 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 «Codificación-para-Tranferir-Contenido: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, «Codificación-para-Transferir-Contenido: quoted-printable» es usado 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 especiaizada) 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 extraibles”. 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 herramientras 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 | |----------------+-----------+------+------------+--------------| | | | |imágen |LibreOffice | |libreoffice-draw|V:72, I:430|10312 |(vector) |office suite -| | | | | |dibujo | |----------------+-----------+------+------------+--------------| | | | | |editor SVG | |inkscape |V:15, I:112|99800 |imágen |(Scalable | | | | |(vector) |Vector | | | | | |Graphics) | |----------------+-----------+------+------------+--------------| | | | |imágen |editor de | |dia |V:2, I:22 |3741 |(vector) |diagramas | | | | | |(Gtk) | |----------------+-----------+------+------------+--------------| | | | | |facilidad para| |xfig |V:0, I:11 |7849 |imágen |la creación | | | | |(vector) |interactiva de| | | | | |figuras en X11| |----------------+-----------+------+------------+--------------| |gocr |V:0, I:7 |540 |imágen→texto|software libre| | | | | |OCR | |----------------+-----------+------+------------+--------------| | | | | |programa visor| |eog |V:64, I:277|7770 |imágen(Exif)|de gráficos | | | | | |«Eye of GNOME«| |----------------+-----------+------+------------+--------------| | | | | |visor y | |gthumb |V:3, I:16 |5032 |imágen(Exif)|navegador de | | | | | |imágenes | | | | | |(GNOME) | |----------------+-----------+------+------------+--------------| | | | | |visor de | |geeqie |V:4, I:15 |2522 |imágen(Exif)|imágenes | | | | | |utilizando GTK| |----------------+-----------+------+------------+--------------|     | | | | |organizador de| |shotwell |V:17, I:255|6263 |imágen(Exif)|fotos digital | | | | | |(GNOME) | |----------------+-----------+------+------------+--------------| |gwenview |V:33, I:106|11755 |imágen(Exif)|visor de | | | | | |imágenes (KDE)| |----------------+-----------+------+------------+--------------| | | | | |aplicaciones | | | | | |KDE para | |kamera |I:105 |998 |imágen(Exif)|soporte de | | | | | |cámaras | | | | | |digitales | |----------------+-----------+------+------------+--------------| | | | | |aplicación | | | | | |para la | |digikam |V:1, I:9 |293 |imágen(Exif)|gestión de | | | | | |fotos | | | | | |digitales para| | | | | |KDE | |----------------+-----------+------+------------+--------------| | | | | |mesa de luz y | |darktable |V:4, I:13 |30554 |imágen(Exif)|cuarto oscuro | | | | | |virtuales para| | | | | |fotógrafos | |----------------+-----------+------+------------+--------------| | | | | |agrupador de | |hugin |V:0, I:8 |5208 |imágen(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 |imágen→imágen|posteriro de | | | | | |páginas | | | | | |escaneadas para| | | | | |OCR | |-----------------+-----------+------+-------------+---------------| | | | | |software libre | |tesseract-ocr |V:7, I:33 |2228 |imágen→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 |imágen→texto |inglés | | | | | |tesseact-ocr |     | | | | |para textos | | | | | |ingleses | |-----------------+-----------+------+-------------+---------------| |ocrad |V:0, I:3 |587 |imágen→texto |software libre | | | | | |OCR | |-----------------+-----------+------+-------------+---------------| | | | | |utilidad de | | | | | |línea de | | | | | |órdenes para | |exif |V:2, I:42 |339 |imágen(Exif) |mostrar | | | | | |información | | | | | |EXIF de | | | | | |archivos JPEG | |-----------------+-----------+------+-------------+---------------| | | | | |herramienta de | |exiv2 |V:2, I:27 |275 |imágen(Exif) |manipulación de| | | | | |metainformación| | | | | |EXIF/IPTC | |-----------------+-----------+------+-------------+---------------| | | | | |transforma | |exiftran |V:1, I:14 |69 |imágen(Exif) |imágenes de | | | | | |cámaras | | | | | |digitales jpeg | |-----------------+-----------+------+-------------+---------------| | | | | |utilidad para | | | | | |leer etiquetas | |exiftags |V:0, I:3 |292 |imágen(Exif) |Exif de | | | | | |archivos JPEG | | | | | |de cámaras | | | | | |digitales | |-----------------+-----------+------+-------------+---------------| | | | | |lee | |exifprobe |V:0, I:3 |499 |imágen(Exif) |metainformación| | | | | |de imágenes | | | | | |digitales | |-----------------+-----------+------+-------------+---------------| | | | | |decodifica | | | | |imágen |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 |imágen→imágen|aumentar su | | | | | |integridad o | | | | | |crea mosaicos | |-----------------+-----------+------+-------------+---------------| | | | | |genera galerias| | | | |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 by typing «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 cosidera que cumple con DFSG. Por favor, considera la posibilidad de utilizar las herramientas     de los sistemas de lod control de las versiones. Véase 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     Usted 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 pácticamente cualquier lenguaje de programación. 12.1. Los archivos de órdenes     Un archivo de órdenes es un archivo de texto co 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 pueden ser ejecutados 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 es utilizado     por 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 comprobaro 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() { … } | |-------------------------------+-------------------------------| |octal format: «\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 sintáxis POSIX es aceptada 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 unicamente 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 expresioneos 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 detemina la expresión condicional de sus parámetros hasta«]».     Algunas expresiones condicionales que es importate 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 (respecto de | |archivo2 |al modificación) | |-------------+-------------------------------------------------| |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 cadena_de_caracteres |la longitud de str es cero | |-------------------------+-------------------------------------| |-n cadena_de_caracteres |la longitud de str no es cero | |-------------------------+-------------------------------------| |cadena_de_caracteres1 = |cadena1 y cadena2 son iguales |     |cadena_de_caracteres2 | | |-------------------------+-------------------------------------| |cadena_de_caracteres1 != |str1 y str2 no son iguales | |cadena_de_caracteres2 | | |-------------------------+-------------------------------------| |cadena_de_caracteres1 < |cadena1 está antes que cadena2 | |cadena_de_caracteres2 |(depende de la configuración | | |regional) | |-------------------------+-------------------------------------| |cadena_de_caracteres1 > |cadena1 está después de la cadena2 | |cadena_de_caracteres2 |(depende de la 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 condición ; do comando ; done» repite «comando» mientras «condición» sea verdadero.     * «until condición ; do comando ; done» repite «comando» mientras «condición» 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     Consulta 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: espacio tabulador + 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: if then elif else fi for in while unless do done case 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 + «~usuario» → 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» + «` comando `» → la salida de «comando» * el intérprete de órdenes expande las rutas de nombres que encajan con nombres de archivos si no están incluidas entre «…« o '…' + * → cualesquier caracteres + ? → un caracter + […] → 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 paquetes esenciales.     * «dpkg -L paquete | grep '/man/man.*/'» relación páginas de manual de las órdenes del paquete paquete. 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.     Consulta Sección 1.6, “Operaciones de texto al estilo de Unix” para ver un ejemplo. 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     pprogramarla 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, véase NautilusScriptsHowto. * Para KDE, consulta Creación de menús de servicio Dolphin.     * Para Xfce, consulta Thunar - Acciones personalizadas y https: //help.ubuntu.com/community/ThunarCustomActions. * Para LXDE, consulta 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 en 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 gratis | +---------------------------------------------------------------+ 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 conujnto 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)     Se puede crear un ejecutable «ejecutable_de_ejemplo» utilizando la biblioteca «libm» mediante este sencillo ejemplo. $ 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 tutuorial 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 herramientras 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 | |---------------+-----------+------+----------------------------| | | | |herramientra para el | |cppcheck-gui |V:0, I:1 |7224 |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.     Instalemo gdb y otros programas relevantes com 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ñadiendole «+debug1» o añadiendole «~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 utlizar «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. is a utility to maintain groups of programs. 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 sintáxis 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íena 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, instaleló 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. Desistalando 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 desistalació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 envia 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, consulteInterfaz de Pasarela Común     (Common Gateway Interface), La Fundación de Software Apache (The Apache Software Foundation) y JavaScript. Buscar «CGI tutorial« en Google, escribiendo la URL codificada https://www.google.com/search?hl=en&ie=UTF-8&q=CGI+tutorial     directamente en la barra de direcciones del navegador, es una buena manera de ver en acción un archivo de órdenes en el servidor G¡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 |converit 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í estan las referencias de este documento. A.1. La mazmorra de Debian El sistema Debian es una platadorma 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.120)"     (2024-03-25 14:02:56 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.120)" (2024-03-25 14:02:56     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 origenes y su inspiración en lo siguiente.     * «FAQ Debian FAQ« (versión de March 2002, que era mantenida por Josip Rodin)     Otro contenido puede seguir a sus originales y su inspiración de lo siguiente. * «Referencia de Debian (version 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 contrucciń 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 depurardor 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.120)"     (2024-03-25 14:02:56 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)