Debian-Reference Es
Debian-Reference Es
Osamu Aoki
Guía de referencia de Debian ii
La Guía de Referencia de Debian (version 2.125) (2024-11-15 13:32:55 UTC) pretende aportar una visión amplia del
sistema Debian y servir de guía al usuario después de la instalación. Se tratan diferentes aspectos de la administración
del sistema, usando ejemplos en el intérprete de órdenes, para todo tipo de usuarios.
Guía de referencia de Debian iii
Índice general
1. Tutoriales de GNU/Linux 1
1.1. Introducción a la consola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1. El cursor del intérprete de órdenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2. El indicador del intérprete de órdenes en GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.3. La cuenta de superusuario (root) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.4. El cursor del intérprete de órdenes de superusuario . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.5. Herramientas gráficas para la administración del sistema . . . . . . . . . . . . . . . . . . . . . 3
1.1.6. Consolas virtuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.7. Cómo cerrar el intérprete de órdenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.8. Cómo apagar el sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.9. Cómo recuperar la configuración normal de una consola . . . . . . . . . . . . . . . . . . . . . 4
1.1.10. Paquetes complementarios recomendados para usuarios sin experiencia . . . . . . . . . . . . 4
1.1.11. Una cuenta de usuario adicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.12. Configuración de sudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.13. Hora de jugar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2. Sistema de archivos tipo Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.1. Información básica sobre archivos en Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.2. Sistemas de archivos internos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.3. Permisos del sistema de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.4. Gestión de permisos para nuevos archivos: umask . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.5. Permisos para grupos de usuarios (grupo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.6. Marcas de tiempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.7. Enlaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.8. Tuberías con nombre (FIFOs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.9. «Sockets» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2.10. Archivos de dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2.11. Archivos de dispositivos especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2.12. procfs y sysfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2.13. tmpfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3. Midnight Commander (MC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Guía de referencia de Debian iv
1.3.1. Personalización de MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3.2. Comenzando con MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.3. Gestor de archivos de MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.4. Trucos de la línea de órdenes en MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.5. El editor interno de MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3.6. El visor interno de MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3.7. Selección inteligente del visor en MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3.8. Sistema de archivos virtual de MC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.4. Fundamentos de entornos de trabajo tipo Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.4.1. El intérprete de órdenes (shell) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.4.2. Personalización de bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4.3. Combinaciones de teclas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4.4. Operaciones con el ratón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.4.5. El paginador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.4.6. El editor de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.4.7. Configuración del editor de texto por defecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.4.8. Usando vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.4.9. Grabación de las actividades del intérprete de órdenes . . . . . . . . . . . . . . . . . . . . . . 25
1.4.10. Órdenes básicas de Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.5. Órdenes simples para el intérprete de órdenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.5.1. Ejecución de órdenes y variables de entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.5.2. La variable «$LANG» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.5.3. La variable «$PATH» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.5.4. La variable «$HOME» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.5.5. Opciones de la línea de órdenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.5.6. Expansión de un patrón en el intérprete de órdenes . . . . . . . . . . . . . . . . . . . . . . . . 30
1.5.7. Valor devuelto por la orden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.5.8. Secuencias de órdenes comunes y redirecciones del intérprete de órdenes . . . . . . . . . . . 32
1.5.9. Alias de órdenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.6. Operaciones de texto al estilo de Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.6.1. Herramientas de texto Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.6.2. Expresiones regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.6.3. Sustitución de expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.6.4. Sustituciones globales mediante expresiones regulares . . . . . . . . . . . . . . . . . . . . . . 37
1.6.5. Extracción de datos en archivos de texto en forma de tabla . . . . . . . . . . . . . . . . . . . . 38
1.6.6. Fragmentos de órdenes utilizados con tuberías . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Guía de referencia de Debian v
A. Apéndice 266
A.1. Debian maze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
A.2. Histórico de copyright . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
A.3. Formato del documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Guía de referencia de Debian xvi
Índice de cuadros
11.5. Relación de las herramientas para extraer información en texto plano . . . . . . . . . . . . . . . . . . 230
11.6. Relación de herramientas para resaltar información en texto plano . . . . . . . . . . . . . . . . . . . . 230
11.7. Relación de entidades predefinidas para XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
11.8. Relación de herramientas XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
11.9. Relación de herramientas DSSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
[Link]ón de herramientas de extracción de información XML . . . . . . . . . . . . . . . . . . . . . . . 233
[Link]ón de las herramientas de impresión de calidad de XML . . . . . . . . . . . . . . . . . . . . . . 233
[Link]ón de las herramientas de composición tipográfica . . . . . . . . . . . . . . . . . . . . . . . . . 234
[Link]ón de paquetes que ayudan a crear páginas man . . . . . . . . . . . . . . . . . . . . . . . . . . 235
[Link]ón de intérpretes Ghostscript de PostScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
[Link]ón de utilidades para la impresión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
[Link]ón de paquetes que ayudan a la conversión de datos de correo . . . . . . . . . . . . . . . . . . 238
[Link] de herramientas de datos gráficos (meta paquete) . . . . . . . . . . . . . . . . . . . . . . . . . . 240
[Link] de herramientas de datos gráficos (GUI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
[Link] de herramientas de datos gráficos (CLI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
[Link]ón de herramientas varias para la conversión de información . . . . . . . . . . . . . . . . . . . . 243
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).
Guía de referencia de Debian xxii
Prefacio
La Guía de referencia de Debian (versión 2.125) (2024-11-15 13:32:55 UTC) pretende proporcionar una visión general
amplia de la administración del sistema Debian como una guía del usuario posterior a la instalación.
El lector al que va dirigido esta obra es aquel que desea aprender scripts de shell, pero que no esta preparado para
entender el código fuente C que le permita comprender el funcionamiento interno de un sistema GNULinux.
Para instrucciones de instalación, ver:
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 acre-
ditada. El autor y los colaboradores no asumen ninguna responsabilidad por las consecuencias de errores, omisiones
o ambigüedades de este documento.
Qué es Debian
El Proyecto Debian es una asociación de individualidades que han hecho causa común para crear un sistema ope-
rativo 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: [Link]
Gran cantidad de paquetes de software de alta calidad compilados
Enfocado en la estabilidad y la seguridad con fácil acceso a las actualizaciones de seguridad
Centrado en la actualización fluida a las versiones recientes de los paquetes de los archivos testing
Admite una amplia gama de arquitecturas de hardware
El Software Libre de Debian tiene su origen en GNU, Linux, BSD, X, ISC, Apache, Ghostscript, Sistema de Impresión
Común de Unix (Common Unix Printing System) , Samba, GNOME, KDE, Mozilla, LibreOffice, Vim, TeX, LaTeX,
DocBook, Perl, Python, Tcl, Java, Ruby, PHP, Berkeley DB, MariaDB, PostgreSQL, SQLite, Exim, Postfix, Mutt,
FreeBSD, OpenBSD, Plan 9 y otros m deuchos proyectos libres e independientes. Debian integra esta diversidad de
Software Libre en un único sistema.
Guía de referencia de Debian xxiii
Directrices
Proporciona un visión global y omite los casos menos frecuentes (Visión General)
simplicidad y brevedad (KISS)
No se reinventa la rueda (se usan enlaces a fuentes ya existentes)
centrado en la consola y herramientas sin interfaz gráfico de usuario. ( Usaejemplos del intérprete de órdenes)
Es objetivo. (Usa popcon etc.)
sugerencia
Trataré de mostrar las facetas jerárquicas y de bajo nivel del sistema.
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.
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».
Guía de referencia de Debian xxiv
Convenciones
Este documento proporciona información con un estilo de presentación simple con ejemplos del intérprete de órde-
nesbash(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 tra-
ducirse 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 [Link](5). Se recomienda escribir lo siguiente para
obtener más información sobre dicha página de manual.
$ man 5 [Link]
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
Guía de referencia de Debian xxv
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. [Link]” y ”/usr/share/doc/
o por su URL, como [Link] Le animamos a leer la documentación escribiendo lo siguiente.
$ zcat "/usr/share/doc/base-passwd/[Link]" | sensible-pager
$ sensible-browser "/usr/share/doc/base-passwd/[Link]"
$ sensible-browser "[Link]
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"
Los datos de popcon se presentan como la medida objetiva de la popularidad de cada paquete. Se descargó el 2024-
03-03 11:51:37 UTC y contiene el envío total de 237734 informes sobre 198687 paquetes binarios y arquitecturas 27
.
nota
Tener en cuenta que el archivo amd64 inestable contiene solo 74165 paquetes actuales. Los datos de popcon
contienen informes de muchas instalaciones de sistemas antiguos.
En las estadísticas de uso, un número precedido de «V» es el número de «votos» que se calcula mediante la fórmula
«1000 * (número de paquetes utilizados recientemente en el equipo)/(total de informes de uso remitidos)».
En las estadística de uso, un número precedido de «I» se refiere al «número de instalaciones» calculado por «1000
* (número de instalaciones del paquete)/(el total de informes de uso)».
nota
Las estadísticas de uso no determina la importancia de los paquetes. Existen muchos factores que puede afec-
tar 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».
Guía de referencia de Debian xxvi
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».
Puede informar de un error en el paquete debian-reference utilizando reportbug(1). Por favor, incluya la co-
rrección ejecutando «diff -u» con el texto plano o la fuente.
He aquí algunas citas interesantes de la lista de correo de Debian que pueden servir de ayuda a los nuevos usuarios.
«Así es Unix. Te da bastante cuerda para que te ahorques tu mismo.» --- Miquel van Smoorenburg <miquels at
[Link]>
«Unix ES muy amigable ... únicamente que es muy puntilloso eligiendo a sus amigos.» --- Tollef Fog Heen <tollef
at [Link]>
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 do-
cumentació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.
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 para
más información).
foo login:
En el diálogo de entrada escriba su nombre de usuario, p. ej. pingüino y pulse la tecla Intro, a continuación escriba
su contraseña y pulse Intro otra vez.
nota
Siguiendo la tradición Unix, el nombre de usuario y la contraseña del sistema Debian distinguen entre mayúsculas
y minúsculas. El nombre de usuario se suele elegir sólo entre minúsculas. La primera cuenta de usuario se crea
normalmente durante la instalación. El usuario root puede crear cuentas de usuario adicionales con adduser(8).
Guía de referencia de Debian 2 / 267
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
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.
Ahora nos encontramos en el intérprete de órdenes (shell). El intérprete de órdenes interpreta las órdenes del usuario.
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ú.
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
aviso
Nunca comparta la contraseña del superusuario con nadie.
Guía de referencia de Debian 3 / 267
nota
Los permisos de acceso a un archivo (incluidos los dispositivos como un CD-ROM u otros, que son simplemente
otro archivo para el sistema Debian) pueden hacer que sea inaccesible a los usuarios distintos del superusuario.
Aunque el uso de la cuenta de superusuario es una manera rápida de comprobar este tipo de situaciones, resol-
verlas 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).
A continuación podrá ver algunos métodos para acceder al intérprete de órdenes del superusuario utilizando la
contraseña del mismo.
Si el menú de su escritorio no inicia las herramientas gráficas de administración del sistema con los permisos adecua-
dos 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 y Sección 7.9.
aviso
Nunca inicies un administrador de pantalla/sesión de GUI como root escribiendo root en el indicador de
un administrador de pantalla (por ejemplo, gdm3(1)).
Nunca ejecute programas gráficos remotos no confiables en el sistema de ventanas X cuando se esté
mostrando información crítica, porque dichos programas pueden realizar una interceptación pasiva de toda
su pantalla X.
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
Guía de referencia de Debian 4 / 267
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
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.
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.
Puede ser una buena idea que usted leyera algo de documentación útil.
Puedes instalar algunos de estos paquetes de la siguiente manera.
# apt-get install package_name
Guía de referencia de Debian 5 / 267
Si no quiere utilizar su cuenta de usuario aprende y práctica, puede crear una cuenta de usuario, p. ej. pescado,
para ello haga lo siguiente.
# adduser fish
En sistemas Debian especializados y no Debian, las actividades anteriores deben utilizar niveles inferiores useradd
(8) y userdel (8) utilidades, en su lugar.
Para una estación de trabajo típica de un único usuario o un escritorio Debian en un portátil, es normal realizar
una configuración sencilla de sudo(8) como se indica a continuación para permitir al usuario no privilegiado, p. ej.
pinguino, obtener los privilegios administrativos simplemente con su contraseña de usuario sin utilizar la contraseña
del superusuario.
# echo "penguin ALL=(ALL) ALL" >> /etc/sudoers
También es normal hacerlo de la siguiente manera para permitir al usuario no privilegiado, p. ej. pinguino, ganar
los privilegios administrativos sin usar ninguna contraseña como se muestra.
Guía de referencia de Debian 6 / 267
Este truco solamente se debe usar en una estación de trabajo con un único usuario en la que usted sea el adminis-
trador 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 con-
traseña del superusuario.
Los privilegios administrativos pertenecen a alguien autorizado a realizar tareas de administración del siste-
ma 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 limita-
dos 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.
Ahora está listo para jugar con el sistema Debian sin riesgos siempre que utilice la cuenta de usuario sin privilegios.
Esto se debe a que el sistema Debian está, incluso en una instalación por defecto, configurado con los permisos de
archivos adecuados que impide que los usuarios no privilegiados dañen el sistema. Por supuesto, puede haber aún
algunos agujeros que se pudieran explotar, pero aquellos a quienes interesen esos detalles, que no trataremos aquí,
pueden obtener la información precisa en Manual de seguridad de Debian.
Aprendemos el sistema Debian como un sistema Unix-like con lo siguiente.
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.
Guía de referencia de Debian 7 / 267
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 comparti-
do, privado, esclavo o no enlazable. Las opciones soportadas para cada sistema de ficheros están disponibles en
«/usr/share/doc/linux-doc-*/Documentation/filesystems/».
Los directorios de los sistemas Unix se llaman carpetas en otros sistemas. Por favor, note que no existe el concepto
de unidad como «A:» en ningún sistema Unix. Solamente hay un sistema de archivos y todo se encuentra en él.
Esto es una gran ventaja en comparación con Windows.
Los nombres de archivos son sensibles a mayúsculas. Es decir, «MIARCHIVO» y «MiArchivo» son archivos
diferentes.
El directorio raíz significa la raíz del sistema de archivos representado simplemente por «/». No lo confunda con
el directorio del superusuario: «/root».
Cada directorio tiene un nombre que puede contener cualquier letra o símbolo excepto «/». El directorio raíz es
una excepción: su nombre es «/» (pronunciado «barra« o «el directorio raíz«) y no se puede renombrar.
Cada archivo o directorio se identifi con un nombre completamente cualificado, nombre absoluto, o ruta),
dando la secuencia de directorios que deben atravesarse para alcanzarlo. Los tres términos son sinónimos.
Todos los nombres completamente cualificados comienzan con el directorio «/», y se coloca una «/» entre ca-
da 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 com-
pletamente cualificado como un ejemplo: «/usr/share/keytables/[Link]». Es de uso generalizado el
referirse a la última entrada «[Link]» como un nombre de archivo.
El directorio raíz tiene un cierto número de ramificaciones, como «/etc/» y «/usr/». Estos subdirectorios a su vez
se ramifican en más subdirectorios, como «/etc/systemd/» y «/usr/local/». El todo, visto colectivamente,
se llama árbol de directorios. Puede pensar que un nombre de archivo absoluto es una ruta desde la raíz del
árbol («/») hasta la hoja de una rama (un archivo). También oirá hablar del árbol de directorios como de un árbol
genealógico que descienden de un elemento único llamado raíz («/»: así, los subdirectorios tienen padres y una
ruta muestra la genealogía completa de un archivo. Hay, además, rutas relativas que comienzan de alguna otra
manera que con el directorio raíz. Debe recordar que el directorio «../» hace referencia al directorio padre. Esta
terminología se utiliza también para otras estructuras semejantes a los directorios, como las estructuras jerárquicas
de datos.
No existen directorios, que forman parte de las rutas que describen archivos, que se correspondan con dispositivos
físicos, como discos duros. Esto cambia respecto a RT-11, CP/M, OpenVMS, MS-DOS, AmigaOS y Microsoft
Windows, donde la ruta contiene el nombre del dispositivo, como «C:\». Sin embargo, existen directorios que
referencian dispositivos físicos como parte del sistema de archivos. Ver Sección 1.2.2)
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, ta-
bulaciones, 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 espa-
cios en los nombres de archivo.
Guía de referencia de Debian 8 / 267
nota
La palabra «root» puede referirse a «superusuario» o «directorio raíz». El contexto determinará su significado
correcto.
nota
El término path se utiliza tanto para los nombres de archivos que especifican la ruta completa, como hemos
hecho con anterioridad, como en la ruta para la búsqueda de órdenes. El significado correcto vendrá determinado
por el contexto.
Las mejores prácticas detalladas para la jerarquía de ficheros se describen en el Filesystem Hierarchy Standard
(”/usr/share/doc/debian-policy/fhs/[Link]” y hier(7)). Como comienzo debes recordar los
siguientes hechos.
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.
Permisos del sistema de archivos de Unix-like se definen para tres categorías de usuarios afectados.
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.
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
Cuadro 1.4: La interpretación del primer carácter de cada línea de la salida de «ls -l» se interpreta como se muestra
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.
Guía de referencia de Debian 10 / 267
# cd /some/location/
# chown -R foo:bar .
# chmod -R ug+rwX,o=rX .
Aquí, la salida de ” ls -l ” para estos bits está en mayúscula si los bits de ejecución ocultos por estas salidas
están sin configurar
La configuración de set user ID en un archivo ejecutable permite a un usuario ejecutarlo con todos los privilegios
de su dueño (al ejecutarlo con el identificador del dueño, por ejemplo root). Igualmente la configuración set group
ID en un archivo ejecutable permite al usuario ejecutarlo con todos los privilegios de su grupo (al ejecutarlo con
el identificador del grupo, por ejemplo root). Esto crea riesgos de seguridad, por lo que su configuración debe ser
extremadamente cuidadosa.
La configuración del bit set group ID en un directorio permite la creación de archivosal estilo BSD, donde todos los
archivos creados en el directorio pertenecen al mismo grupo que el directorio.
Activar el sticky bit en un directorio impide que sus archivos sean eliminados por alguien que no es su dueño. En los
directorios con permisos de escritura para todos, como «/tmp», o para su grupo, con el fin de asegurar la integridad
de los archivos, se debe eliminar los permisos de escritura de los archivos. Además se debe configurar el sticky bit
en el directorio para evitar que cualquier usuario con permiso de escritura en él pueda borrar un archivo y después
crear otro con el mismo nombre.
Aquí están algunos ejemplos interesantes.
$ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4
crw------T 1 root root 108, 0 Oct 16 20:57 /dev/ppp
-rw-r--r-- 1 root root 2761 Aug 30 10:38 /etc/passwd
-rw-r----- 1 root shadow 1695 Aug 30 10:38 /etc/shadow
-rwsr-xr-x 1 root root 973824 Sep 23 20:04 /usr/sbin/exim4
$ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src
drwxrwxrwt 14 root root 20480 Oct 16 21:25 /tmp
drwxrwsr-x 10 root staff 4096 Sep 29 22:50 /usr/local
drwxr-xr-x 10 root root 4096 Oct 11 00:28 /usr/src
drwxrwsr-x 2 root mail 4096 Oct 15 21:40 /var/mail
drwxrwxrwt 3 root root 4096 Oct 16 21:20 /var/tmp
La orden chmod(1) tiene otra forma de describir los permisos mediante números. Este modo numérico utiliza 3 o 4
dígitos en base octal (base 8).
dígito significado
1º dígito (opcional) suma de set user ID (=4), set group ID (=2) y 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
Guía de referencia de Debian 11 / 267
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.
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)
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.
aviso
Por favor, asegúrese de guardar los cambios no guardados antes de realizar reinicios o acciones similares.
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ña-
diendo la línea «auth optional pam_group.so» al archivo «/etc/pam.d/common-auth» y configurar
«/etc/security/[Link]». (Consulte Capítulo 4.)
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.
Cuadro 1.7: Relación de grupos importantes del sistema para el acceso a archivos
Guía de referencia de Debian 13 / 267
sugerencia
Necesita pertenecer al grupo dialout para reconfigurar el modem, marcar, etc. Pero si el superusuario crea
archivos de configuraciones predefinidas para algunos pares en «/etc/ppp/peers/», únicamente necesitará
pertenecer al grupo dip para crear conexiones a internet porvía telefónica a estos pares usando las órdenes
pppd(8), pon(1) y poff(1).
Algunos grupos importantes proporcionados por el sistema permiten a sus miembros ejecutar determinadas órdenes
sin privilegios de superusuario.
Cuadro 1.8: Relación de grupos importantes del sistema para la ejecución de órdenes específicas
Puede consultar una relación completa de los usuarios y grupos del sistema en el documento «Users and Groups«
/usr/share/doc/base-passwd/[Link] 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).
nota
ctime no es el momento de creación del archivo.
nota
El significado actual de atime en sistemas GNU/Linux puede no ser diferente del de Unix clásico.
Al sobrescribir un archivo se cambian todos los atributos mtime, ctime y atime del archivo.
Cambiar la propiedad o el permiso de un archivo modifica los atributos ctime y atime del archivo.
la lectura de un archivo en un sistema Unix clásico modifica su propiedad atime.
La lectura de un archivo cambia el atributo atime del archivo en el sistema GNU/Linux si su sistema de archivos
está montado con ” strictatime ”.
La lectura de un archivo por primera vez o después de un día cambia la propiedad atime en un sistema GNU/Linux
si el sistema de archivos está montado con la opción «relatime». (comportamiento por defecto desde Linux
2.6.30)
Guía de referencia de Debian 14 / 267
La lectura del archivo no cambia su propiedad atime en un sistema GNU/Linux si el sistema de archivos está
montado con la opción «noatime».
nota
Las opciones de montaje «noatime» y «relatime» se diseñaron para mejorar el desempeño de lectura del
sistema de archivos de forma normal. La simple lectura de un archivo con la opción «strictatime» genera una
operación de escritura para actualizar la propiedad atime. El atributo atime se usa poco excepto para el archivo
mbox(5). Consulte mount(8).
Utilice la orden touch(1) para cambiar las marcas de tiempo de los archivos existentes.
Para la fecha, el comando ls genera cadenas localizadas en una configuración regional que no es inglesa (”fr_FR.UTF-8”).
$ LANG=C ls -l foo
-rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
$ LANG=en_US.UTF-8 ls -l foo
-rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
$ LANG=fr_FR.UTF-8 ls -l foo
-rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo
sugerencia
Ver Sección 9.3.4 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
Guía de referencia de Debian 15 / 267
$ 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 direc-
torio 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 archi-
vos, las aplicaciones no distinguen entre el archivo original y su enlace. En el caso de los enlaces duros, ciertamente
no existe diferencia.
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
Guía de referencia de Debian 16 / 267
1.2.9. «Sockets»
Los «sockets» se usan de forma generalizada en las comunicaciones en Internet, bases de datos y sistemas ope-
rativos. 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 in-
formació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.
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.
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.
Guía de referencia de Debian 17 / 267
«/dev/ttyS0» tiene el número de dispositivo mayor de 4 y menor de 64. Los usuarios pueden realizar operacio-
nes 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).
Con frecuencia son utilizados en las redirecciones del intérprete de órdenes (consulte Sección 1.5.8).
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/[Link]».)
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 «[Link](.gz)», «[Link](.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 paque-
te linux-doc-*.
Guía de referencia de Debian 18 / 267
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».
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.
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/[Link]
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.)
Guía de referencia de Debian 19 / 267
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.
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) eje-
cutándose, se puede usar el ratón en la consola de caracteres de Linux. (Asegúrese de pulsar la tecla de mayúsculas
para obtener el comportamiento normal cuando corte y pegue en MC.)
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 Ctrl-T marcar el fichero para seleccionar varios para 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
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 comportamien-
to. 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
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
Pulse Intro en un archivo y el programa, de acuerdo a su contenido, abrirá el archivo (consulte Sección 9.4.11). Es
una funcionalidad de MC muy útil.
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.
Guía de referencia de Debian 21 / 267
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.
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.
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.
Intérprete
de
paquete popularidad tamaño descripción
órdenes
POSIX
V:838, Bash: el intérprete de órdenes GNU Bourne
bash 7175 Sí
I:999 Again SHell (estándar de facto)
bash-completion
V:32, I:933 1454 N/A terminación programable para la shell bash
V:884, Intérprete de órdenes Debian Almquist, bueno
dash 191 Sí
I:997 para archivos de órdenes
Intérprete de órdenes Z: un intérprete de órdenes
zsh V:40, I:73 2463 Sí
con muchas mejoras
TENEX C Shell: una versión mejorada de
tcsh V:6, I:20 1355 No
Berkeley csh
mksh V:6, I:11 1579 Sí Versión de el intérprete de órdenes Korn
Intérprete de órdenes OpenBSD C, una versión
csh V:1, I:6 339 No
de Berkeley csh
Intérprete de órdenes Stand-alone con órdenes
sash V:0, I:5 1157 Sí
internas (no es el estándar «/usr/bin/sh»)
la versión AT&T actual del intérprete de órdenes
ksh V:1, I:10 61 Sí
Korn
implementación del intérprete de órdenes rc de
rc V:0, I:1 178 No
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.
Guía de referencia de Debian 22 / 267
# CD upon exiting MC
. /usr/lib/mc/[Link]
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 en Capítulo 9.
sugerencia
El paquete bash-completion permite la finalización programable de bash.
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.
sugerencia
La funcionalidad del terminal de Ctrl-S puede deshabilitarse con stty(1).
Guía de referencia de Debian 23 / 267
Las operaciones del ratón para el texto en el sistema Debian mezclan 2 estilos con algunos cambios:
acción respuesta
botón izquierdo y arrastre del ratón seleccionar un rango como selección PRIMARIA
botón izquierdo seleccione el inicio del rango para la selección PRIMARIA
botón derecho (tradicional) seleccione el final del rango para la 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 terminal) copiar la selección PRIMARIA al PORTAPAPELES
Ctrl-V pegue el contenido de CLIPBOARD en la ubicación del cursor
Cuadro 1.15: Lista de acciones de teclado relacionadas y operaciones con ratón en Debian
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.
Guía de referencia de Debian 24 / 267
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.
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 direc-
torios, 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.
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
sugerencia
Muchos programas utilizan las variables de entorno «$EDITOR» o «$VISUAL» para determinar el editor a usar (ver
Sección 1.3.5 y Sección 9.4.11). Para un sistema Debian coherente asigne este valor a «/usr/bin/editor».
(Históricamente, «$EDITOR» era «ed» y «$VISUAL» era «vi».)
Guía de referencia de Debian 25 / 267
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”.
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.
1Incluso el antiguo vim puede comenzar en el sano modo ”incompatible” al iniciarlo con la opción ”-N”.
Guía de referencia de Debian 26 / 267
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.
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.
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
Guía de referencia de Debian 27 / 267
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 (nombre, uid, gid y
id
grupos a los que pertenece)
file foo muestra el tipo de archivo de «foo»
muestra la ubicación del archivo de la orden
type -p nombre_de_la_orden
«nombre_de_la_orden»
which nombre_de_la_orden ,,
type nombre_de_la_orden muestra información de la orden «nombre_de_la_orden»
apropos palabra_clave encuentra órdenes relacionadas con la «palabra_clave»
man -k palabra_clave ,,
muestra una descripción de una línea de la orden
whatis nombre_de_la_orden
«nombre_de_la_orden»
muestra la descripción de la orden «nombre_de_la_orden»
man -a nombre_de_la_orden
(al estilo Unix)
muestra una descripción detallada de la orden
info nombre_de_la_orden
«nombre_de_la_orden» (al estilo GNU)
relación el contenido del directorio (excluye aquellos archivos o
ls
directorios que comienzan por .)
relación el contenido del directorio (todos los archivos y
ls -a
directorios)
relación el contendido del directorio (casi todos los archivos y
ls -A
directorios, a saber, oculta «..» y «.»)
relación todo el contenido del directorio con información
ls -la
detallada
relación el contenido completo del directorio con el número del
ls -lai
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»
relación de los archivos abiertos por el proceso con el
lsof -p pid
identificador: «pid»
mkdir foo crear un nuevo directorio «foo» en el directorio actual
rmdir foo borra el directorio «foo» del directorio actual
cambia al directorio «foo» que se encuentre en el directorio
cd foo
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
muestra el contenido de «/etc/motd» usando el paginador por
</etc/motd pager
defecto
touch junkfile crea un archivo vacío «junkfile»
cp foo bar copia el archivo existente «foo» en un archivo nuevo «bar»
rm junkfile borra el archivo «junkfile»
renombra el archivo existente «foo» con un nuevo nombre
mv foo bar
«bar» («bar» no debe existir con anterioridad)
mueve el archivo existente «foo» a una nueva ubicación
mv foo bar
«bar/foo» (el directorio «bar» debe existir previamente)
mueve un archivo existente «foo» a una nueva ubicación con el
mv foo bar/baz nombre nuevo «bar/baz» (el directorio «bar» debe existir con
anterioridad pero el archivo «bar/baz» no)
el archivo existente «foo» únicamente tiene permisos de lectura
chmod 600 foo
y escritura para el dueño (y no se permite la ejecución por nadie)
hace que un archivo existente «foo» lo pueda leer cualquiera,
chmod 644 foo que únicamente el dueño pueda escribir sobre él (y nadie puede
ejecutarlo)
hace que un archivo «foo» pueda ser leído por cualquiera y
chmod 755 foo
modificado solo por el dueño (cualquiera puede ejecutarlo)
encuentra archivos que cumplen la «expresión_regular»
find . -name expresión_regular
Guía de referencia de Debian 28 / 267
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.
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/[Link]”, ”/etc/environmen
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”.
La configuración regional predeterminada se define en la variable de entorno ”$LANG” y se configura como ”LANG=xx_YY.UT
por el instalador o por la configuración posterior de la GUI, por ejemplo, ”Configuración” → ”Región e idioma” → ”Idio-
ma” / ”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.
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)
$ 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
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.
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.
Guía de referencia de Debian 30 / 267
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”.
Muchas órdenes almacenan configuraciones específicas del usuario en su directorio principal y cambian su compor-
tamiento en función de estas. El directorio principal del usuario es determinado por el valor de la variable de entorno
«$HOME».
sugerencia
El intérprete de órdenes sustituye «~/» por el directorio principal del usuario actual, esto es, «$HOME/». El intér-
prete de órdenes sustituye «~foo/» por el directorio principal del usuario foo, a saber, «/home/foo/».
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.
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).
Por ejemplo, intente lo siguiente
Guía de referencia de Debian 31 / 267
Cuadro 1.21: Patrones para la expansión de nombres de archivos del intérprete de órdenes
$ mkdir junk; cd junk; touch [Link] [Link] 3.c 4.h .[Link] ..[Link]
$ echo *.txt
[Link] [Link]
$ echo *
[Link] [Link] 3.c 4.h
$ echo *.[hc]
3.c 4.h
$ echo .*
. .. .[Link] ..[Link]
$ echo .*[^.]*
.[Link] ..[Link]
$ 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).
Cada orden devuelve su estado de salida en el valor devuelto (en la variable: «$?»).
$ [ 1 = 1 ] ; echo $?
0
$ [ 1 = 2 ] ; echo $?
1
nota
Tenga en cuenta que en el contexto lógico del intérprete de órdenes, éxito es tratado de forma lógica como CIERTO
que tiene un valor 0 (cero). Quizá esto sea poco intuitivo y por ello se necesite recordar.
Intentemos recordar las siguientes expresiones como parte de una orden de una única línea.
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
Guía de referencia de Debian 33 / 267
$ </etc/motd pager
$ pager </etc/motd
$ pager /etc/motd
Aunque los cuatro ejemplos de redirección del intérprete de órdenes son equivalentes, el último ejemplo ejecuta una
orden más cat y desperdicia recursos sin razón alguna.
El intérprete de órdenes permite abrir archivos utilizando la orden interna exec con un descriptor de archivo arbitrario.
$ echo Hello >foo
$ exec 3<foo 4>bar # open files
$ cat <&3 >&4 # redirect stdin to 3, stdout to 4
$ exec 3<&- 4>&- # close files
$ cat bar
Hello
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
Guía de referencia de Debian 34 / 267
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.
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.
Algunas herramientas que trabajan con texto se usan muy frecuentemente en un sistema tipo Unix.
Si no esta seguro de que hacen exactamente estas órdenes, por favor utilice «man orden» para averiguarlo por
usted mismo.
Guía de referencia de Debian 35 / 267
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 [Link]-8
en lugar de la configuración regional normal UTF-8 (ver Sección 8.1).
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.
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 metacarac-
teres.
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.
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.
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.
La orden ed(1) permite sustituir todas las ocurrencias de «LA_EXPRESIÓN_REGULAR» por «EL_TEXTO» en el «archivo».
$ ed file <<EOF
,s/FROM_REGEX/TO_TEXT/g
w
q
EOF
La orden sed(1) sustituye todas las ocurrencias de «LA_EXPRESIÓN_REGULAR» por «EL_TEXTO» en el «archivo».
$ sed -i -e 's/FROM_REGEX/TO_TEXT/g' file
La orden vim(1) puede sustituir todas las ocurrencias de «LA_EXPRESIÓN_REGULAR» por «EL_TEXTO» en el «archivo»
utilizando las órdenes ex(1).
$ vim '+ %s/FROM_REGEX/TO_TEXT/gc' '+update' '+q' file
sugerencia
La bandera «c» de la orden anterior hace que se pida la confirmación interactiva de cada una de las sustituciones.
Se pueden procesar varios archivos de forma similar («archivo1», «archivo2» y «archivo3») mediante las
expresiones regulares de vim(1) o perl(1).
$ vim '+argdo %s/FROM_REGEX/TO_TEXT/gce|update' '+q' file1 file2 file3
sugerencia
La bandera ”e” en lo anterior evita que el error ”No match” rompa un mapeo.
En el ejemplo en perl(1), «-i» es para la edición de cada elemento que encaja con el patrón y «-p» se utiliza para
repetir la operación sobre cada uno de los archivos que aparecen como argumentos.
Guía de referencia de Debian 38 / 267
sugerencia
El uso del argumento «-[Link]» en vez de «-i» mantiene cada archivo original añadiéndole «.bak» al nombre
del archivo. Esto permite deshacer los cambios de forma sencilla si nos hemos equivocado al realizar la sustitución.
nota
ed(1) y vim(1) utiliza BRE; perl(1) utiliza ERE.
Consideremos un archivo de texto llamado «DPL» con los siguientes campos: nombres de los líderes del proyecto
Debian con anterioridad a 2004 y su fecha de inicio, utilizando como separador el espacio en blanco.
Ian Murdock August 1993
Bruce Perens April 1996
Ian Jackson January 1998
Wichert Akkerman January 1999
Ben Collins April 2001
Bdale Garbee April 2002
Martin Michlmayr March 2003
sugerencia
Ver «Una breve historia de Debian» para conocer quién es el último líder del proyecto Debian.
Los intérprete de órdenes, como Bash, se pueden usar para analizar este tipo de archivos.
Por ejemplo, intente lo siguiente
$ while read first last month year; do
echo $month
done <DPL
... same output as the first Awk example
Aquí la orden interna read usa los caracteres de «$IFS» (separadores internos) para dividir las líneas en palabras.
Si cambia el valor «$IFS» a «:», puede analizar «/etc/passwd» con el intérprete de órdenes de la forma adecuada.
Guía de referencia de Debian 39 / 267
(Para hacer lo mismo con Awk asigne el separador de campos mediante «FS=':'».)
El intérprete de órdenes utiliza IFS para separar los resultados de la expansión de parámetros, sustitución de órdenes
y expansiones aritméticas. Las palabras entre comillas dobles o simples no se tienen en cuenta en estas operaciones.
El valor por defecto de IFS es la relación espacio, tabulador y nueva_línea.
Tenga cuidado cuando utilice estos trucos en el intérprete de órdenes. Cuando el intérprete de órdenes trabaje en
algunas partes de un archivo de órdenes y su entrada pueden ocurrir cosas extrañas.
$ IFS=":," # use ":" and "," as IFS
$ echo IFS=$IFS, IFS="$IFS" # echo is a Bash builtin
IFS= , IFS=:,
$ date -R # just a command output
Sat, 23 Aug 2003 08:30:15 +0200
$ echo $(date -R) # sub shell --> input to main shell
Sat 23 Aug 2003 08 30 36 +0200
$ unset IFS # reset IFS to the default
$ echo $(date -R)
Sat, 23 Aug 2003 08:30:50 +0200
Los fragmentos de órdenes siguientes son muy potentes cuando forman parte de una cadena de órdenes unidas por
tuberías.
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 y Sección 9.4.9.
Cuando la utilización de órdenes de forma interactiva se complica demasiado debe considerarse escribir un archivo
de órdenes (ver Sección 12.1).
Guía de referencia de Debian 40 / 267
Capítulo 2
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 defi-
nirse en cualquier parte de los archivos ”/etc/apt/[Link]”, ”/etc/apt/[Link].d/*.list”
o ”/etc/apt/[Link].d/*.source”.
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
Guía de referencia de Debian 42 / 267
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.
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.
Guía de referencia de Debian 43 / 267
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 configu-
ració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.
atención
Para sus servidores de producción es recomendable la distribución stable (estable) con sus actuali-
zaciones 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.
Guía de referencia de Debian 44 / 267
No se recomienda el uso de la suite inestable. La suite inestable es buena para depurar paquetes co-
mo 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 De-
bian (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.
sugerencia
Las directrices oficiales del archivo de Debian están definidas en el Manual de Directrices Debian, Capítulo 2 - El
archivo de Debian.
Los puntos clave de las listas de las fuentes son los siguientes.
Guía de referencia de Debian 45 / 267
La definición para ”deb-src” puede omitirse con seguridad si es sólo para aptitude que no accede a los metadatos
relacionados con la fuente. Acelera las actualizaciones de los metadatos del archivo.
La dirección URL puede ser ”[Link] ”[Link] ”[Link] ”[Link] ....
Las líneas que empiezan por ”#” son comentarios y se ignoran.
Aquí, tiendo a usar el nombre de código ”bookworm” o ”trixie” en lugar del nombre de la suite ”stable” (estable)
o ”testing” (pruebas) para evitar sorpresas cuando se publique la siguiente stable (estable).
sugerencia
Si se utiliza ”sid” en el ejemplo anterior en lugar de ”bookworm”, la línea ”deb:
[Link] ...” 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.
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 (prue-
bas) 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 Sec-
ción 2.7.4). 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 distri-
buciones 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).
Guía de referencia de Debian 46 / 267
nombre
de
nombre del
URL del archivo pu- finalidad del repositorio
paquete
blica-
ción
[Link] Liberación stable cuasiestática tras exhaustivas
stable bookworm
debian/ comprobaciones
[Link] Liberación dinámica de testing tras comprobaciones
testing trixie
debian/ decentes y cortas esperas
[Link] Liberación dinámica unstable tras comprobaciones mínimas
unstable sid
debian/ y sin esperas
[Link] Experimentos previos al lanzamiento por parte de los
«experimental»
N/A
debian/ desarrolladores (opcional, sólo para desarrolladores)
[Link]
Actualizaciones para la próxima versión stable (opcional)
stable-proposed-updates
bookworm-proposed-updates
debian/
Subconjunto del conjunto stable-proposed-updates que
[Link]
stable-updates necesita actualizaciones urgentes, como los datos de la zona
bookworm-updates
debian/
horaria (opcional)
[Link] Colección aleatoria de paquetes recompilados, principalmente
stable-backports
bookworm-backports
debian/ de la versión testing (opcional)
[Link] Actualizaciones de seguridad para la versión stable
stable-security
bookworm-security
debian-security/ (importante)
[Link]
testing-security El equipo de seguridad no lo utiliza ni lo apoya activamente
trixie-security
debian-security/
sugerencia
Para el sistema Debian con la suite stable (estable), es una buena idea incluir el contenido con
”[Link] en la lista de las fuentes para habilitar las actualizaciones de seguridad
como en el ejemplo anterior.
nota
El equipo de seguridad de Debian ha corregido los errores de seguridad del archivo estable . Esta actividad
ha sido bastante rigurosa y confiable. Los errores del archivo de pruebas pueden ser corregidos por el equipo
de seguridad de pruebas de Debian. Por varias razones , esta actividad no es tan rigurosa como aquella para
estable y es posible que deba esperar la migración de los paquetes inestables corregidos al archivo
de prueba . Los errores del archivo inestable son corregidos por el mantenedor individual. Los paquetes
inestables mantenidos activamente suelen estar en bastante buen estado gracias a las últimas correcciones
de seguridad ascendentes. Consulte las Preguntas frecuentes sobre seguridad de Debian para saber cómo Debian
maneja los errores de seguridad.
El número de paquetes que se indica es para la arquitectura amd64. El área main proporciona el sistema Debian
(ver Sección 2.1.6).
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.
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?
Guía de referencia de Debian 47 / 267
número de
área criterio de componente del paquete
paquetes
main 72806 Compatible con DFSG y sin dependencia de non-free
no compatible con DFSG, firmware necesario para una
non-free-firmware 39
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 software libre de Debian
non-free 964
(DFSG) y no está en non-free-firmware
En la terminología de archivo de Debian de forma estricta, se usa la palabra «sección» en concreto para la catego-
rización de paquetes por el tipo de aplicación. (Sin embargo las palabras «sección principal» algunas veces se usa
para describir el área del archivo Debian llamado «main».)
Cada vez que un desarrollador Debian (DD) realiza una nueva entrega a la distribución «inestable» (a través
del procesamiento de entrada), se le pide que se asegure que la entrega de paquetes sea compatible con el último
conjunto de paquetes de la distribución «inestable».
Si un desarrollador de Debian con su actualización rompe la compatibilidad de alguna biblioteca importante de forma
intencionada etc, normalmente se anuncia en la lista de correo de desarrollo (debian-devel mailing list) etc.
Después de que un conjunto de paquetes se han movido de forma automática desde la distribución «inestable» a
la distribución «en pruebas» el archivo de órdenes de mantenimiento que lo movió comprueba su madurez (más de
2-10 días de antigüedad), el estado RC de los informes de errores de los paquetes y comprueba su compatibilidad
con el último conjunto de paquetes de la distribución «en pruebas». Este proceso hace que la distribución «en
pruebas» este actualizada y se pueda utilizar.
A través del proceso gradual de congelación de archivos dirigido por el equipo de lanzamiento, el archivo prueba
se madura hasta hacerlo completamente consistente y libre de errores con algunas intervenciones manuales. A
continuación, se crea la nueva versión estable asignando el nombre en clave del antiguo archivo prueba al nuevo
archivo estable y creando el nuevo nombre en clave para el nuevo archivo prueba. El contenido inicial del nuevo
archivo prueba es exactamente el mismo que el del nuevo archivo estable.
Tanto los repositorios unstable (inestable) como los testing (prueba) pueden sufrir fallos temporales causados
por varios factores.
Así que si decide usar esos archivos, debe ser capaz de arreglar o indagar sobre este tipo de problemas.
Guía de referencia de Debian 48 / 267
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 impor-
tantes para los paquetes principales. El archivo testing tampoco es útil ya que contiene casi el mismo
contenido que el archivo stable sin su soporte de seguridad (Debian testing-security-announce 2008-12).
Después de un mes más o menos, los archivos unstable o testing pueden llegar a ser útiles si se tiene
cuidado.
sugerencia
Al utilizar la distribución testing «en pruebas» el problema causado por la eliminación de un paquete
normalmente se soluciona temporalmente instalando el paquete correspondiente de la distribución unstable
«inestable» que se carga para corregir el error.
Ver el Manual de Directrices Debian para obtener más información sobre las definiciones del archivo.
«Secciones»
«Prioridades»
«Sistema base»
«Paquetes esenciales»
Debian instala por defecto únicamente software libre para respetar las libertades del usuario.
«Debian se mantendrá 100 % libre». (Primera clausula del Contrato Social de Debian)
Los servidores Debian alojan algunos paquetes non-free-firmware, non-free y contrib.
El sistema Debian es 100 % libre y sus paquetes están albergados en los servidores Debian en main
Los paquetes fuera del sistema Debian están alojados en los servidores de Debian en las áreas non-free,
non-free-firmware y contrib.
Se explica de forma precisa en las clausulas cuarta y quinta del Contrato Social de Debian:
• Nos guiaremos por las necesidades de nuestros usuarios y de la comunidad del software libre. Sus intereses
serán una prioridad para nosotros. Daremos soporte a las necesidades de nuestros usuarios para que puedan
trabajar en muchos tipos distintos de entornos de trabajo. No pondremos objeciones al software no libre que vaya
a ejecutarse sobre Debian ni cobraremos a las personas que quieran desarrollar o usar ese tipo de software (no
libre). Permitiremos a otros crear distribuciones de valor añadido basadas en Debian sin cobrarles nada por ello.
Es más, entregaremos un sistema integrado de alta calidad sin restricciones legales que pudieran prevenir este
tipo de uso.
Trabajos que no siguen nuestros estándares de software libre
• Reconocemos que algunos de nuestros usuarios requieren el uso de trabajos que no se ajustan a las Directrices
de Software Libre de Debian. Hemos creado las áreas ”non-free”, ”non-free-firmware” y ”contrib” en
nuestro archivo para estos trabajos. Los paquetes de estas áreas no forman parte del sistema Debian, aunque
han sido configurados para su uso con Debian. Animamos a los fabricantes de CDs a que lean las licencias
de los paquetes en estas áreas y determinen si pueden distribuir los paquetes en sus CDs. Así, aunque los
trabajos que no son libres no forman parte de Debian, apoyamos su uso y proporcionamos infraestructura para
los paquetes que no son libres (como nuestro sistema de seguimiento de fallos y listas de correo). Los medios
oficiales de Debian pueden incluir firmware que no forma parte del sistema Debian para permitir el uso de Debian
con hardware que requiera dicho firmware.
nota
El texto actual del 5º término en el actual Contrato Social Debian 1.2 es ligeramente diferente del texto anterior. Esta
desviación editorial es intencionada para hacer consistente este documento de usuario sin cambiar el contenido
real del Contrato Social.
Los usuarios deben ser conscientes de los riesgos de utilizar paquetes de las zonas non-free, non-free-firmware
y contrib:
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 como non-free-firm
(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.
Guía de referencia de Debian 50 / 267
El sistema Debian proporciona un conjunto consistente de paquetes binarios a través de un mecanismo de declara-
ción de dependencia binaria versionada en sus campos de archivo de control. Aquí hay algunas definiciones simples
de ellos.
”Depende”
• Declara una dependencia obligatoria y es obligatorio que todos los paquetes enumerados sean instalados al
mismo tiempo o que estén instalados previamente.
«Predepende» (Pre-depends)
• Son como las dependencias, con la excepción de que es obligatorio que estén instalados completamente con
anterioridad.
«Recomendado» (Recommends)
• Determina una dependencia fuerte, pero no obligatoria. La mayoría de los usuarios no querrán instalar el paquete
al menos que todos los paquetes enumerados en este campo estén instalados.
«Sugiere»
• Declara una dependencia débil. Muchos usuario podrían beneficiarse de su instalación si bien tendrán una fun-
cionalidad 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.
Guía de referencia de Debian 51 / 267
Aquí hay un resumen del flujo de hechos simplificado del manejo de un paquete por parte de APT.
1. Seleccione una versión candidata, que instala paquetes que suelen ser las últimas versiones disponibles
(consulte Sección 2.7.7 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 dife-
rente de la versión instalada
4. Desempaqueta los paquetes binarios recuperados
5. Ejecuta el archivo de órdenes preinst
6. Instala los archivos binarios
7. Ejecuta el archivo de órdenes postinst
Aquí, se han omitido de forma intencionada los detalles técnicos por el bien del panorama general.
Guía de referencia de Debian 52 / 267
Se debe leer la excelente documentación oficial. El primer documento a leer es el específico de Debian ”/usr/share/doc/p
También otra documentación en ”/usr/share/doc/package_name/”. Si se configura el shell en Sección 1.4.2,
ingresar los siguientes comandos.
$ cd package_name
$ pager [Link]
$ 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).
Cuadro 2.5: Relación de los principales sitios web para resolver problemas de un paquete concreto
Búsqueda en Google incluyendo alguno de los siguientes criterios de búsqueda «site:[Link]», «site:[Link]
«site:[Link]», etc.
Cuando presente un informe de error, por favor utilice la orden reportbug(1).
Cuando encuentre más de 2 paquetes similares y se pregunte cuál instalar sin el esfuerzo de ”prueba y error”, hay
que aplicar el sentido común. Creo que los siguientes puntos son las características que debe tener el paquete
preferido.
Esencial: si > no
Área: main > contrib > non-free
Prioridad: required > important > standard > optional > extra
Tareas: paquetes enumerados como tareas como «Entorno de escritorio«
Los paquetes se eligen por paquetes que dependen de ellos (por ejemplo, gcc depende de gcc-10)
Estadísticas: a mayor número de votos e instalaciones
Registro de cambios: actualizaciones regulares del desarrollador
BTS: sin errores RC (ni críticos, ni graves, ni errores leves)
BTS: atención ofrecida por el desarrollador a los informes de errores
BTS: mayor número de errores solucionados recientemente
BTS: menor número de errores que no sean nuevas funcionalidades
Debian comenzó como un proyecto voluntario con un modelo de desarrollo distribuido, sus repositorios contienen
muchos paquetes con diferentes objetivos y calidad. Se deben tomar las propias decisiones de qué hacer con ellos.
Guía de referencia de Debian 53 / 267
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 para instalar estos paquetes binarios no sincronizados, estos métodos de modificación
sólo tienen un uso limitado, ya que pueden romper estos programas y tu sistema.
Antes de instalar a la fuerza estos paquetes no sincronizados, deberías buscar todas las soluciones alternativas más
seguras disponibles que sean compatibles con tu sistema Debian actual.
Instala estos programas utilizando los correspondientes paquetes binarios ”sandboxed” (ver Sección 7.7).
• 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).
• Los comandos CLI se pueden ejecutar fácilmente bajo chroot compatible (ver Sección 9.11.4).
• Se pueden probar fácilmente múltiples entornos de escritorio y completos sin reiniciar (ver Sección 9.11.5).
Construye tu mismo las versiones que deseas de los paquetes binarios que sean compatibles con tu sistema
Debian actual.
• Se trata de una tarea no trivial (ver Sección 2.7.13).
Las operaciones de gestión de paquetes basadas en repositorios en el sistema Debian pueden realizarse mediante
muchas herramientas de gestión de paquetes basadas en APT disponibles en el sistema Debian. Aquí, explicamos
tres herramientas básicas para la gestión de paquetes: apt, apt-get / apt-cache y aptitude.
Para realizar las operaciones de gestión de paquetes que incluyen su instalación o la actualización de su metainfor-
mación necesitará privilegios de superusuario.
A pesar de que aptitude es una herramienta interactiva muy amigable que utilizo personalmente por defecto, debe
tener en cuenta algunas advertencias:
la orden aptitude no es recomendable para actualizaciones del sistema entre distribuciones del sistema Debian
stable (estable) tras la publicación de una distribución nueva .
• Está recomendado la utilización de «apt full-upgrade» o «apt-get dist-upgrade». Ver el Error #411280.
La orden aptitude algunas veces recomienda la eliminación masiva de paquetes para la actualización del sis-
tema Debian testing (pruebas) o unstable (inestable).
Las órdenes apt-get y apt-cache son las herramientas más básicas basadas en APT para la gestión de paquetes
.
La orden apt es un interfaz de alto nivel para la gestión de paquetes desde la línea de órdenes. Es un recubrimiento
de apt-get, apt-cache y órdenes parecidas ideado para que las utilice el usuario final y mejorar por defecto
algunas opciones de uso interactivo.
apt tiene una barra de progreso cuando se instalan paquetes mediante apt install.
por defecto apt borra los paquetes .deb descargados en la caché después de instalarlos con éxito
sugerencia
Se recomienda la utilización de la nueva orden apt(8) para el uso interactivo y utilizar apt-get(8) y
apt-cache(8) para los archivos de órdenes.
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).
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.
Guía de referencia de Debian 55 / 267
Sintaxis
Sintaxis de
Sintaxis de apt de descripción
aptitude
apt-get/apt-cache
aptitude apt-get
apt update actualiza la metainformación de los paquetes
update update
aptitude apt-get
instala la versión candidata del paquete «foo» y sus
apt install foo install install
dependencias
foo foo
aptitude apt-getactualiza los paquetes ya instalados a las nuevas versiones
apt upgrade
upgradecandidatas sin eliminar ningún paquete
safe-upgrade
apt aptitude apt-getinstala nuevas versiones candidatas de paquetes instalados
full-upgrade full-upgrade mientras elimina los paquetes si es necesario
dist-upgrade
aptitude apt-get
elimina el paquete «foo» sin eliminar sus archivos de
apt remove foo remove remove
configuración
foo foo
apt-get
apt autoremove N/A elimina los paquetes autoinstalados que ya no son necesarios
autoremove
apt-get
aptitude
apt purge foo purge elimina el paquete «foo» y sus archivos de configuración
purge foo
foo
aptitude apt-getlimpia por completo el repositorio local de los archivos de
apt clean
clean clean paquetes descargados
aptitude apt-getlimpia el repositorio local de los archivos de paquetes
apt autoclean
autoclean autoclean descargados que son obsoletos
apt-cache
aptitude
apt show foo show muestra información detallada sobre el paquete «foo»
show foo
foo
aptitude apt-cache
apt search
search search busca paquetes que concuerden con expresión_regular
expresión_regular
expresión_regular
expresión_regular
aptitude
argumenta la razón por la que el paquete que concuerda con la
N/A why N/A
expresión_regular debe instalarse
expresión_regular
aptitude
argumenta la razón por la que el paquete que concuerda con la
N/A why-not N/A
expresión_regular no debe instalarse
expresión_regular
aptitude
apt list apt-mark
search lista los paquetes instalados manualmente
--manual-installed showmanual
'~i!~M'
Cuadro 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)
Guía de referencia de Debian 56 / 267
nota
Aunque la orden aptitude proporciona funcionalidades sofisticadas como un mejor motor de resolución de de-
pendencias 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.
Para la administración de paquetes interactivos, inicia aptitude en modo interactivo desde el indicador de shell de
la consola de la siguiente manera.
$ sudo aptitude -u
Password:
Con esto actualiza la copia local del archivo y muestra la relación de paquetes en un menú a pantalla completa. La
configuración de aptitude está en «~/.aptitude/config».
sugerencia
Si deseas utilizar la configuración de root en lugar de la de usuario, utiliza ”sudo -H aptitude ...” en lugar
de ”sudo aptitude ...” en la expresión anterior.
sugerencia
Aptitude automáticamente ejecuta las acciones pendientes como si hubiera empezado en modo interactivo.
Si esto no le gusta, puede inicializarlo desde el menú: «Acción» → «Cancelar las acciones pendientes».
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.
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 actua-
lizados a la versión candidata.
Guía de referencia de Debian 57 / 267
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 usuario muestra el Manual de Usuario
u actualiza la información de archivo del paquete
+ marca el paquete para que se actualice o instale
marca el paquete para que se elimine (mantiene los archivos de
-
configuración)
marca el paquete para purgarlo (borra los archivos de
_
configuración)
= coloque el paquete en hold
marca todos los paquetes actualizables (funciona como
U
full-upgrade)
comienza la descarga y la instalación de los paquetes
g
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
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
sugerencia
La lista completa de indicadores aparece en la parte inferior de la pantalla Ayuda que se muestra pulsando ”?”.
La versión candidata se elige de acuerdo a la configuración local del equipo (ver apt_preferences(5) y Sec-
ción 2.7.7).
Existen diferentes formas de mostrar los paquetes en la opción de menú «Vistas».
Guía de referencia de Debian 58 / 267
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.
sugerencia
La vista de tareas puede usarse para realizar una selección de paquetes para sus tareas.
Aptitude ofrece varias opciones para la búsqueda de paquetes usando su fórmula de expresiones regulares.
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.
La fórmula de expresiones regulares de aptitud es ERE extendida similar a mutt (ver Sección 1.6.2) y los significados
de la coincidencia especial específica aptitude Las extensiones de regla son las siguientes.
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, pro-
porciona) 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».
«~Ptérmino» == «~Dprovides:término»
«~Ctérmino» == «~Dconflicts:término»
«…~W término» == «(…|término)»
Los usuarios familiarizados con mutt se adaptan rápidamente, ya que mutt fue la inspiración para la sintaxis de las ex-
presiones. Consulte ”BÚSQUEDA, LIMITACIÓN Y EXPRESIONES” en el ”Manual del usuario” ”/usr/share/doc/aptitud
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.
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 → Depen-
dency handling« esta configurada de esa manera. Estos paquetes instalados de forma automática se eliminan de
forma automatizada por aptitude si no se van a necesitar en el futuro.
La bandera que controla la ”autoinstalación” del comando aptitude también puede manipularse utilizando el co-
mando apt-mark(8) del paquete apt.
Guía de referencia de Debian 60 / 267
archivo contenido
Registra la actividad a nivel de dpkg para todas las acciones
/var/log/[Link]
sobre paquetes
/var/log/apt/[Link] Registro de acciones genéricas APT
/var/log/aptitude Registro de acciones de la orden aptitude
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
2.3.3. Navega por la relación de paquetes que encajan con la expresión regular
La expresión regular ”~dipv6” en la vista ”Nueva lista plana de paquetes” con la indicación ”l”, limita la vista a los
paquetes con la descripción coincidente y permite examinar su información de forma interactiva.
Si estás seguro de que los paquetes enumerados deben eliminarse por completo, ejecuta el siguiente comando.
# aptitude purge '~c'
Guía de referencia de Debian 62 / 267
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.
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.).
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.
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)
antes de hacerlo. Nosotros recomendamos crear un arranque dual en una partición diferente para realizar una
transición suave.
Guía de referencia de Debian 63 / 267
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 con
”trixie” o ”sid”.
De hecho, se puede encontrar con algunas complicaciones debido a alguna transición entre paquetes, la mayor
parte debido a dependencias. Cuanto mayores es la actualización, más problemas importantes se puede encontrar.
Para la transición desde una distribución antigua de stable (estable) a la nueva stable (estable) después de
su publicación, puede leer las nuevas «Release Notes« y seguir el procedimiento concreto que se describe para
minimizar los problemas.
Cuando decide migrar de stable (estable) a testing (pruebas) después de una publicación formal, no existen
«Release Notes« de ayuda. La diferencia entre stable (estable) y testing (pruebas) puede ser bastante mayor
después de la liberación de una nueva distribución stable (estable) y la actualización se puede convertir en una
situación complicada.
Debería ser precavido cuando realiza un actualización completa y consultar la información actualizada sobre ello y
usar el sentido común.
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.
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.
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 ad-
ministrador 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.
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), otras órdenes para la gestión de
paquetes usan patrones como el intérprete de órdenes glob (ver Sección 1.5.6).
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.
La orden make-kpkg necesita el paquete kernel-package (ver Sección 9.10).
Para el empaquetado general ver Sección 12.9.
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.
nota
Ya que la base de datos de MD5sum la puede alterar un intruso, debsums(1) su uso como herramienta de seguri-
dad es limitada. Solo es aceptable para que el administrador compruebe modificaciones locales o daños producidos
por errores del medio de almacenamiento.
Guía de referencia de Debian 65 / 267
orden acción
COLUMNS=120 dpkg -l enumera el estado de los paquetes instalados para el informe de
patrón_del_nombre_del_paquete errores
dpkg -L nombre_del_paquete enumera el contenido de un paquete instalado
dpkg -L nombre_del_paquete |
relación las páginas del manual para un paquete instalado
egrep '/usr/share/man/man.*/.+'
dpkg -S enumera los paquetes instalados que tienen un archivo que
patrón_del_nombre_de_archivo encaja con el patrón
apt-file search enumera los paquetes en el repositorio que encajan con el
patrón_nombre_de_archivo nombre de archivo
apt-file list enumera el contenido de los paquetes del repositorio que
patrón_nombre_de_paquete encajan
dpkg-reconfigure
reconfigura el paquete dado
nombre_del_paquete
dpkg-reconfigure -plow reconfigura el paquete dado realizando el mayor número de
package_name preguntas
configure-debian reconfigura los paquetes desde el menú de pantalla completa
auditoría del sistema referente a paquete instalados
dpkg --audit
parcialmente
dpkg --configure -a configura todos los paquetes instalados parcialmente
apt-cache policy muestra la versión, la prioridad y la información del repositorio
nombre_del_paquete_binario de un paquete binario
apt-cache madison muestra la versión disponible y la información del repositorio de
nombre_del_paquete un paquete
apt-cache showsrc muestra la información del paquete fuente que corresponde con
nombre_del_paquete_binario el paquete binario
apt-get build-dep
instala los paquetes requeridos para construir el paquete
nombre_del_paquete
aptitude build-dep
instala los paquetes requeridos para construir el paquete
nombre_del_paquete
apt-get source
descarga la fuente (desde el repositorio estándar)
nombre_del_paquete
dget URL del archivo dsc descarga el código del paquete (desde otro repositorio)
dpkg-source -x construye el árbol de las fuentes para un conjunto de paquetes
fuente («[Link]» y «[Link]»/«*.[Link]»)
nombre_del_paquete_version-versión_de_debian.dsc
debuild binary construye el/los paquete(s) desde un árbol de fuentes locales
make-kpkg kernel_image construye el paquete del núcleo desde el árbol fuente del kernel
construye el paquete del núcleo desde el árbol fuente de este
make-kpkg --initrd kernel_image
con initramfs activado
dpkg -i
instala un paquete local en el sistema
nombre_del_paquete_versión-versión_de_debian_arquitectura.deb
apt install instala un paquete local en el sistema y trata de resolver de
/path/to/package_filename.deb forma automática sus dependencias
debi
instala el(los) paquete(s) locales en el sistema
nombre_del_paquete_versión-versión_de_debian_arquitectura.dsc
dpkg --get-selections '*' guardar información de estado de selección de nivel de paquete
>selecció[Link] dpkg
dpkg --set-selections asigna la información de estado de selección de nivel del
<[Link] paquete dpkg
establecer el estado de selección del paquete a nivel dpkg para
echo nombre_paquete hold | dpkg
un paquete hold (equivalente a ”aptitude hold
--set-selections
package_name”)
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 «[Link]» cuando se actualiza
mediante el sistema APT.
Aunque al visitar la página de Debian [Link] 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 ar-
chivo 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_patte
*» 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).
Aprendamos como funciona internamente el sistema de paquetes Debian. Esto puede ayudar a encontrar su propia
solución en algunos problemas con paquetes.
Los metadatos de archivos para cada distribución se almacenan en «dist/codename» en cada sitio espejo de
Debian , p. ej., «[Link] La estructura del repositorio se puede navegar con un
navegador web. Existen seis tipos de metadatos clave.
En el archivo reciente, estos metadatos se almacenan como los archivos comprimidos y diferencial para reducir
tráfico de red.
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, ”[Link]
como sigue.
Guía de referencia de Debian 67 / 267
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 [Link]
9469a03c94b85e010d116aeeab9614c0 19441880 [Link]
3d68e206d7faa3aded660dc0996054fe 19203165 [Link]
...
nota
Aquí, puede encontrar la razón de ser entre la «versión« y el «nombre en clave« en Sección 2.1.5. «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 denomi-
nada secure apt, tal y como se describe en apt-secure(8).
El archivo de firma criptográfica «[Link]» 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 ”[Link]” 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.
Guía de referencia de Debian 68 / 267
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).
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 ”[Link]” y la clave
pública del archivo Debian publicada en [Link] usando gpg.
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 ”[Link] o
”[Link] como se indica a continua-
ció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 ins-
talarse automáticamente, hay una línea extra, por ejemplo, ”[Link]
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).
Guía de referencia de Debian 69 / 267
Cuando se usan herramientas APT, como aptitude, apt-get, synaptic, apt-file, auto-apt, ..., necesita-
mos 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).
«/var/lib/apt/lists/[Link].org_debian_dists_distribution_Release»
«/var/lib/apt/lists/[Link].org_debian_dists_distribution_Release.gpg»
«/var/lib/apt/lists/[Link].org_debian_dists_distribution_area_binary-architecture_Pac
«/var/lib/apt/lists/[Link].org_debian_dists_distribution_area_source_Sources»
«/var/cache/apt/apt-file/[Link].org_debian_dists_distribution_Contents-architecture.g
(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 ”[Link]” por defecto)
Además de acceder de forma remota a la metainformación, desde lenny, la herramienta APT almacena la informa-
ció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.
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.
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”.
Guía de referencia de Debian 70 / 267
Los archivos que son paquetes Debian tienen una estructura para nombrarlos determinada.
sugerencia
Únicamente describiremos aquí el formato del paquete fuente. Para obtener mayor información consulte
dpkg-source(1).
Caracteres disponibles
nombre del campo 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
[Link]ón [a-zA-Z0-9.+~]+ opcional
Cuadro 2.16: Los caracteres permitidos en cada campo del nombre del paquete en Debian
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.
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.
El sistema debconf proporciona una interacción de usuario estandarizada con compatibilidad con I18N y L10N
(Capítulo 8).
El archivo «status» además lo utilizan herramientas como dpkg(1), «dselect update» y «apt-get -u dselect-upg
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.
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.
Guía de referencia de Debian 72 / 267
$ 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
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.
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.
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!
Guía de referencia de Debian 73 / 267
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
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 in-
tentarlo. (Si se utiliza apt-cacher-ng, también debes ejecutar ”sudo rm -rf /var/cache/apt-cacher-ng/*
”)
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).
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).
Los errores de los mantenedores de paquetes o la inconsistencia en el despliegue de archivos de fuentes mezclados
(ver Sección 2.7.6) 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 des-
empaquetado.
Se puede arreglar una instalación deficiente eliminando en primer lugar el paquete incompatible anterior old-package.
$ sudo dpkg -P old-package
Guía de referencia de Debian 74 / 267
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.
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
[Link] 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 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.
Este ejemplo funciona incluso si la orden dpkg del disco duro está roto.
Guía de referencia de Debian 75 / 267
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) y realizar una instalación limpia. Esto le llevará menos tiempo y al final tendrá un mejor
resultado.
Si por alguna razón estuviera dañado el archivo «/var/lib/dpkg/status», el sistema Debian perdería la informa-
ció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/[Link].*».
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 respal-
do 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
A continuación se enumerarían los nombres de los paquetes a instalar. (Puede haber algunos nombres que no
correspondan a paquetes como «texmf».)
Para simplificar, los ejemplos de lista de fuentes de esta sección se presentan como ”/etc/apt/[Link]”
en estilo de una línea después de la versión bookworm.
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";
El paquete apt incluye su propio archivo de órdenes cron «/etc/[Link]/apt» que se encarga de la descar-
ga automática de paquetes. Este archivo de órdenes se puede mejorar para la actualización automática de paque-
tes mediante la instalación del paquete unattended-upgrades. Se puede personalizar mediante los parámetros
de los archivos «/etc/apt/[Link].d/02backup» y «/etc/apt/[Link].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 inter-
activa 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";
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.
Guía de referencia de Debian 77 / 267
En el caso de que se desee instalar manualmente un paquete llamado «nombre_del_paquete» con su dependen-
cia 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 [Link]. Puede causar complicaciones en
la dependencia de los paquetes. Ver Sección 2.1.11 para las soluciones alternativas.
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 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/[Link].d/”. Ver [Link](5),
apt-secure(8) y apt-key(8).
atención
La distribución oficial de Debian no soporta la instalación de paquetes desde las fuentes mixtas de los ar-
chivos 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 ope-
ración incluye la nueva versión del paquete ascendente que se encuentra en unstable (inestable).
1. Cambie el archivo «/etc/apt/[Link]» de forma temporal a una entrada única «unstable» (ines-
table).
2. Ejecute «aptitude update».
3. Ejecute «aptitude install nombre_del_paquete».
4. Recupere la versión original de«/etc/apt/[Link]» 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 encarecida-
mente.
Guía de referencia de Debian 78 / 267
Las reglas generales para instalar paquetes de diferentes archivos son las siguientes.
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).
aviso
El uso de la técnica apt-pinning por parte de un usuario novato seguramente causará problemas impor-
tantes. Debes evitar utilizar esta técnica excepto cuando sea absolutamente necesario.
Sin el archivo «/etc/apt/preferences», el sistema APT elige la versión candidata como la última versión dispo-
nible utilizando la versión de la cadena de caracteres. Este es el proceso normal y recomendado para el uso del siste-
ma APT. Todas las combinaciones de repositorios con soporte oficial no necesitan el archivo «/etc/apt/preferences»
ya que algunos repositorios no deberían usarse para realizar actualizaciones y para que el funcionamiento sea el
correcto se marcan como NotAutomatic.
sugerencia
La forma en que se comparan las cadenas de caracteres de las versiones se pueden verificar mediante, p. ej.,
«dpkg --compare-versions ver1.1 gt ver1.1~1; echo $?» (consulte dpkg(1)).
Cuando instala paquetes de fuentes mixtas de archivos (consulte Sección 2.7.6 ) regularmente, puede automatizar
estas operaciones complicadas creando el archivo ” /etc/apt/preferences ” con las entradas adecuadas y
ajustando la regla de selección de paquetes para la versión candidata como se describe en apt_preferences
(5). Esto se llama apt-pinning .
Cuando uses apt-pinning, debes asegurarte de la compatibilidad de los paquetes ya que Debian no los garantiza.
apt-pinning es una operación completamente opcional y su uso no te lo recomendamos.
Guía de referencia de Debian 79 / 267
Los ficheros de la distribución a nivel del archivo (ver Sección 2.5.3) 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 com-
plejas (ver Sección 2.6.6 y Sección 2.7.6) sin apt-pinning.
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) contiene tanto «NotAutomatic: yes» como «ButAutomaticUpgrades: yes».
El repositorio «NotAutomatic« lo asigna el servidor teniendo su archivo de nivel «Release« «NotAutomatic:
yes».
La apt-pinning situation del paquete de múltiples fuentes de archivo se muestra por ”apt-cache policy package”.
Una línea que empieza por «Package pin:» muestra la versión del paquete de pin si la asociación se define
solo con package p. ej., «Package pin:0.190».
No existirá la línea !Package pin:» si no se ha definido ninguna asociación con el paquete.
El valor de «Pin-Priority« asociado con el paquete se muestra en el lado derecho de todas las cadenas de carac-
teres 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, [Link]., «100 [Link]
bookworm-backports/main Packages».
Guía de referencia de Debian 80 / 267
aviso
El uso de la técnica apt-pinning por parte de un usuario novato seguramente causará problemas impor-
tantes. Debes evitar utilizar esta técnica excepto cuando sea absolutamente necesario.
Si no deseas importar los paquetes específicos que se recomiendan, debes crear el archivo ”/etc/apt/preferences”
y enumerar esos paquetes explícitamente en la parte superior del archivo como se muestra a continuación.
Package: package-1
Pin: version *
Pin-Priority: -1
Package: package-2
Pin: version *
Pin-Priority: -1
aviso
El uso de la técnica apt-pinning por parte de un usuario novato seguramente causará problemas impor-
tantes. Debes evitar utilizar esta técnica excepto cuando sea absolutamente necesario.
Este es un ejemplo de la técnica de apt-pinning para incluir paquetes específicos de versiones anteriores más
recientes que se encuentran en unstable que se actualizan periódicamente durante el seguimiento de testing .
Enumera todos los archivos necesarios en el archivo ”/etc/apt/[Link]” de la siguiente manera.
deb [Link] testing main contrib non-free
deb [Link] unstable main contrib non-free
deb [Link] testing-security main contrib
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/[Link]». Sin di-
cha entrada «testing» en él, el sistema APT actualizará los paquetes usando la nueva distribución
«inestable».
Guía de referencia de Debian 81 / 267
sugerencia
Yo suelo editar el fichero ”/etc/apt/[Link]” para comentar la entrada del archivo ”unstable” justo
después de la operación anterior. Esto evita el lento proceso de actualización de tener demasiadas entradas en
el archivo ”/etc/apt/[Link]” aunque esto impide actualizar paquetes que fueron instalados desde el
archivo unstable usando el archivo unstable actual.
sugerencia
Si se utiliza «Pin-Priority: 1 « en vez de «Pin-Priority: 100» en el archivo« /
etc/apt/preferences «, los paquetes instalados con anterioridad que tienen un valor de Pin-Priority de
100 no se actualizarán del repositorio «inestable» incluso si se elimina la entrada ««en pruebas»» del
archivo «/etc/apt/[Link]».
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.
aviso
El uso de la técnica apt-pinning por parte de un usuario novato seguramente causará problemas impor-
tantes. Debes evitar utilizar esta técnica excepto cuando sea absolutamente necesario.
He aquí otro ejemplo de la técnica apt-pinning para incluir paquetes específicos de versiones upstream más re-
cientes encontrados en experimental mientras se rastrea unstable (inestable). Tu enumeras todos los archivos
requeridos en el ”/etc/apt/[Link]” como el siguiente.
Guía de referencia de Debian 82 / 267
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). 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.
aviso
El uso de la técnica apt-pinning por parte de un usuario novato seguramente causará problemas impor-
tantes. Debes evitar utilizar esta técnica excepto cuando sea absolutamente necesario.
atención
El hecho de volver a un estado anterior no esta soportado oficialmente por el diseño de Debian. Debe ser
hecho únicamente como parte de un proceso de recuperación de emergencia. Aparte de esta situación, es
una técnica que funciona muy bien para muchos problemas. En sistemas críticos debe realizar una copia
de respaldo de todos los datos del sistema antes de realizar una operación de recuperación y reinstalar el
sistema desde el principio.
Puede tener suerte en volver de una versión nueva de un repositorio a una vieja al recuperarse de una actualización
que rompa el sistema manipulando la versión_candidata (see Sección 2.7.7). Esta es una posibilidad lenta a reali-
zar la tediosa acción de ejecutar muchas órdenes «dpkg -i paquete_roto_versión_antigua.deb» (consulte
Sección 2.6.6).
Busca en el archivo ”/etc/apt/[Link]” las líneas que usan inestable como se muestra a continuación.
deb [Link] sid main contrib non-free
Ejecute «apt-get update; apt-get dist-upgrade» para forzar la vuelta al estado anterior del sistema com-
pleto.
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.
Guía de referencia de Debian 83 / 267
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.)
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/[Link]» de un sistema stable (estable).
deb-src [Link] 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
$ debuild
$ cd ..
# debi foo*.changes
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), ver [Link](5
) y ”/usr/share/doc/apt/examples/[Link]”. La variable de entorno ”$http_proxy anula el
servidor proxy establecido en el archivo ”/etc/apt/[Link]”.
Existen herramientas especiales proxy para repositorios Debian. Compruebe BTS antes de usarlos.
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.
Puedes obtener más información sobre la gestión de los paquetes en los siguientes documentos.
Capítulo 3
Es inteligente por su parte como administrador de sistemas conocer profundamente como el sistema Debian co-
mienza 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)
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
Sección 3.1.2
Sección 3.1.3
Sección 3.1.4
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.
La Interfaz del firmware extensible unificada (UEFI) define un administrador de arranque como parte de la especifica-
ció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
Guía de referencia de Debian 86 / 267
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 orde-
nadores 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 cargado-
res de arranque del sistema operativo. (En el sistema de PC heredado, se puede usar la BIOS almacenada en el
MBR)
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.
cargador
paquete popularidad tamaño initrd de descripción
arranque
Esto es lo bastante inteligente como
GRUB para comprender las particiones de
grub-efi-amd64 I:339 184 Soporte
UEFI disco y los sistemas de archivos
como vfat, ext4, …. (UEFI)
Es lo bastante inteligente para
comprender las particiones de disco
grub-pc V:21, I:634 557 Soporte GRUB 2
y los sistemas de archivos como
vfat, ext4, …. (BIOS)
Imagen de rescate de inicio GRUB 2
grub-rescue-pc V:0, I:0 6625 Soporte GRUB 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
syslinux V:3, I:36 344 Soporte Syslinux MSDOS (FAT). Es usado para el
arranque de disquete.
Nuevo sistema para el arranque del
loadlin V:0, I:0 90 Soporte Loadlin
sistema FreeDOS/MSDOS.
Este el software libre que sustituye
No MBR por
mbr V:0, I:4 47 MBR de MSDOS. Solo comprende
soportado Neil Turton
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.
Guía de referencia de Debian 87 / 267
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/[Link]” para determinar el partición del archivo de configuración del menú GRUB2
”/boot/grub/[Link]”.
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/[Link]-5.10.0-6-amd64
}
configuración valor
Módulos GRUB2 cargados gzio, part_gpt, ext2
usada la partición del sistema de archivos partición identificada por
raíz UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1
ruta de la imagen del núcleo en el sistema
/boot/vmlinuz-5.10.0-6-amd64
de archivos raíz
”root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1
parámetro de arranque del núcleo utilizado
ro quiet”
ruta de la imagen initrd en el sistema de
/boot/[Link]-5.10.0-6-amd64
archivos raíz
sugerencia
Puedes habilitar la visualización de los mensajes del registro de arranque del kernel eli-
minando quiet en ”/boot/grub/[Link]”. 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/”.
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.
Guía de referencia de Debian 88 / 267
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 he-
rramienta 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.
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».
sugerencia
Ver la wiki de Debian : AcelerandoElProcesodeArranque para los consejos actualizados para mejorar la velocidad
del proceso de arranque.
Guía de referencia de Debian 89 / 267
3.2. 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 [Link](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).
Las unidades para el modo sistema se cargan desde la ”Ruta de la búsqueda de las unidades del sistema” descrita
en [Link](5). Las principales por prioridad son las siguientes:
Las interdependencias se describen mediante directivas «Wants=», «Requires=», «Before=», «After=», … (ver
”MAPPING OF UNIT PROPERTIES TO THEIR INVERSES” en [Link](5)). El control de recursos también
se define (ver [Link]-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 [Link](5).
*.device describe el dispositivo utilizado por sysfs(5) como el árbol de dispositivos udev(7). Consulte [Link](
Guía de referencia de Debian 90 / 267
*.mount describe el punto de montaje del sistema de archivos que está controlado y supervisado por systemd.
Consulte [Link](5).
*.automount describe puntos de automontaje de sistemas de archivos que están controlados y supervisados por
systemd. Consulte [Link](5).
*.swap describe dispositivos o archivos de intercambio controlado y supervisado por systemd. Ver [Link](5).
*.path describe rutas supervisadas por systemd para la activación basada en la ruta. Consulte [Link](5).
*.socket describe conexiones controladas y supervisadas por systemd para la activación basada en conexiones.
Consulte [Link](5).
*.timer describe el temporizador controlado y supervisado por systemd para la activación en función de tempori-
zadores. Consulte [Link](5).
*.slice gestiona recursos mediante cgroups(7). Consulte [Link](5).
*.scope se crean de forma programada utilizando los interfaces del bus de systemd para gestionar un conjunto
de procesos del sistema. Ver [Link](5).
Los grupos *.target y otros archivos de configuración de unit se usan para crear puntos de sincronización durante
el arranque. Consulte [Link](5).
Tras el arranque del sistema (esencialmente init), el proceso systemd intenta iniciar /lib/systemd/system/[Link]
(normalmente enlazado simbólicamente a ”[Link]”. Primero, algunas unidades objetivo especiales
(ver [Link](7) como ”[Link]”, ”[Link]” y ”[Link]” 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 es-
tilo 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
«[Link]».
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 [Link](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
[Link](5). Las principales son las siguientes en orden de prioridad:
El mensaje de error que se muestra en la consola se determina mediante la configuración de su nivel de umbral.
# dmesg -n3
En systemd, se registran diariamente tanto los mensajes del núcleo como los del sistema por el servicio systemd-journal
(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
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/[Link]” tanto para el archivo de registro como
para la visualización en pantalla. Ver rsyslogd(8) y [Link](5). Ver también Sección 9.3.2.
systemd ofrece no solo init system sino también operaciones genéricas de administración del sistema con el co-
mando systemctl(1).
Guía de referencia de Debian 92 / 267
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.
Aquí hay una lista de otros comandos de monitoreo impares bajo systemd. Lee las páginas más relevantes, incluidas
cgroups(7).
El núcleo mantiene el nombre de host del sistema . La unidad del sistema iniciada por [Link]
establece el nombre de host del sistema en el momento del arranque con el nombre almacenado en ” /etc/hostname
”. Este archivo debe contener solo el nombre de host del sistema, no un nombre de dominio completo.
Para obtener el nombre del equipo actual ejecute hostname(1) sin ningún parámetro.
Guía de referencia de Debian 94 / 267
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.
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/[Link]». Ver [Link](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.
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 [Link] 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 Sec-
ción 5.4.
Con la instalación predeterminada, muchos servicios de red (ver Capítulo 6) se inician como procesos demonios
después de [Link] 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 [Link]
$ sudo systemctl mask [Link]
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.
[Link] para especificar un socket de escucha
[Unit]
Description=SSH Socket for Per-Connection Servers
[Socket]
ListenStream=22
Accept=yes
Guía de referencia de Debian 95 / 267
[Install]
WantedBy=[Link]
[Service]
ExecStart=-/usr/sbin/sshd -i
StandardInput=socket
Desde el núcleo de Linux 2.6 en adelante, udev system > aporta mecanismos automáticos de descubrimiento e iniciali-
zació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), carga
los módulos necesarios para el núcleo mediante el programa modprobe(8) (ver Sección 3.9) y crea los nodos de
dispositivo correspondientes.
sugerencia
Si por cualquier motivo «/lib/modules/núcleo-version/[Link]» 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.
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 [Link](5) apropiado y actívelo
en su lugar. Ver Sección [Link].
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) 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)).
Guía de referencia de Debian 96 / 267
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) 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 [Link](5). (Si quiere evitar que algunos módulos del núcleo se carguen de forma au-
tomática, inclúyalos en la lista negra que es el archivo «/etc/modprobes.d/blacklist».)
El archivo «/lib/modules/version/[Link]» creado por el programa depmod(8) describe las dependen-
cias 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 «[Link]».
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.
Puede configurar su hardware en tiempo de arranque y activar las funcionalidades del hardware conocidas. Ver
Sección 9.5.4.
Seguramente pueda añadir soporte a sus dispositivos especiales recompilando el núcleo. Ver Sección 9.10.
Guía de referencia de Debian 97 / 267
Capítulo 4
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.
La autenticación Unix normal la proporciona el módulo pam_unix(8) bajo PAM (Módulos de autenticación conecta-
bles). Sus 3 archivos de configuración importantes, con entradas separadas ”:”, son los siguientes.
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
Guía de referencia de Debian 98 / 267
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.
contenido significado
(vacio) cuenta sin contraseña
x la contraseña cifrada esta en «/etc/shadow»
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
…
Como se explica en grupos(5), cada entrada separada ”:” de este archivo significa lo siguiente.
nota
«/etc/gshadow» aporta la misma funcionalidad que «/etc/shadow» para «/etc/group» pero no se usa en
realidad.
Guía de referencia de Debian 99 / 267
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/[Link]». Ver pam_group(8).
nota
El paquete base-passwd contiene una relación de acreditaciones de usuarios y grupos:
«/usr/share/doc/base-passwd/[Link]».
orden función
navega por la información de la cuenta de
getent passwd nombre_de_usuario
«nombre_de_usuario»
navega por la información de cuenta «oculta« de
getent shadow nombre_de_usuario
«nombre_de_usuario»
getent group nombre_del_grupo navega por la información del grupo «nombre_del_grupo»
passwd gestiona la contraseña de la cuenta
asigna una contraseña de un solo uso para la activación de la
passwd -e
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.
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
Guía de referencia de Debian 100 / 267
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 mas-
cotas, palabras del diccionario, secuencias simples de caracteres como «12345« o «qwerty«, son una mala
elección para la contraseña.
Existen herramientas independientes para generar contraseñas cifradas con una semilla.
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).
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.
Guía de referencia de Debian 101 / 267
En systemd , se instala el paquete libpam-systemd para administrar los inicios de sesión de los usuarios regis-
trando las sesiones de usuario en la jerarquía del grupo de control systemd para logind . Consulte systemd-logind
(8), [Link] (5) y pam_systemd (8).
Aquí están algunos de los archivos de configuración más importantes usados por PAM y NSS.
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».
La gestión moderna de sistemas centralizados puede desplegarse empleando un servidor central LDAP (Protoco-
lo 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.sec
para archivar la contraseña de root.
Guía de referencia de Debian 102 / 267
Cambie la configuración NSS en el archivo «/etc/[Link]» para usar ldap en vez de la opción por
defecto («compat» o «file»).
• Debian utiliza el archivo «/etc/[Link]» 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.
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».
nota
La información que se facilita aquí puede no ser suficiente para la seguridad que necesita pero puede ser un
buen comienzo.
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.
El coste de tiempo de CPU del cifrado. Como alternativa más eficiente para la CPU, se pueden mantener las comuni-
caciones 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.)
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.
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), junto con las siguientes herramientas de seguridad,
puede mejorar la situación de seguridad.
Guía de referencia de Debian 105 / 267
Para evitar que las personas accedan a tu máquina con privilegios de root, debes realizar las siguientes acciones.
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) 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.
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 Sec-
ción 9.5.11). 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). Sin embargo, siempre necesitará la contraseña
para arrancar el sistema.
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 como limitar la funcionalidad clave de atención segura (SAK) del núcleo.
Guía de referencia de Debian 106 / 267
Las ACL son un superconjunto de los permisos normales, como se explica en Sección 1.2.3.
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í:
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.
En un sistema monousuario, el uso que yo realizo de sudo (verSección 1.1.12) 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».
Guía de referencia de Debian 107 / 267
4.7.3. PolicyKit
PolicyKit es un componente del sistema operativo con el fin de controlar los privilegios del sistema en toda su exten-
sión para sistemas operativos tipo Unix.
Los nuevas aplicaciones de interfaz gráfico de usuario no están diseñadas para ejecutarse como procesos privilegia-
dos. 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).
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.
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 restrin-
gen como «ALL: PARANOID« en «/etc/[Link]» si existe. (Pero debe tener cuidado con los riesgos de
seguridad que este tipo de acciones tienen.)
Guía de referencia de Debian 108 / 267
El kernel de Linux ha evolucionado y admite características de seguridad que no se encuentran en las implementa-
ciones 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
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 [Link].
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:
Estas funcionalidades no se pueden realizar por Sección 4.1. Estos temas avanzados están fuera del alcance de
este documento introductorio.
Guía de referencia de Debian 109 / 267
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).
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/[Link]» 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/[Link]».)
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/[Link]» 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/[Link]», 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.
[Link] localhost
[Link] host_name
Cada línea comienza con una dirección IP y es seguido por su nombre de equipo asociada.
La dirección IP [Link] 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).
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_dominiose podría usar en lugar de solo
el nombre_del_equipo.
Si el paquete resolvconf no está instalado, ”/etc/[Link]” 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=”[Link]”, incluye lo siguiente.
nameserver [Link]
El paquete resolvconf hace que «/etc/[Link]» 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.
nota
La expansión de los dominios genérico de alto nivel (gTLD) en el Sistema de Nombres de Dominio está en desa-
rrollo. 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).
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.
número
bits de la
de las
Clase direcciones de red máscara de red máscara
subre-
de red
des
A 10.x.x.x [Link] /8 1
B 172.16.x.x — 172.31.x.x [Link] /16 16
C 192.168.0.x — 192.168.255.x [Link] /24 256
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.
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.
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.
Guía de referencia de Debian 113 / 267
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».
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
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, bus-
que los módulos complementarios y paquetes suplementarios adecuados, co-
mo network-manager-openconnect, network-manager-openvpn-gnome,
network-manager-pptp-gnome, mobile-broadband-provider-info, gnome-bluetooth, etc.
[Network]
DHCP=yes
[Match]
Name=en*
[Network]
Address=[Link]/24
Gateway=[Link]
La configuración de red moderna para la nube puede utilizar los paquetes cloud-init y [Link] (véase
Sección 3.7.4).
El paquete [Link] 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.
Se puede establecer una configuración de un cliente DHCP creando un fichero con el origen de los datos ”/etc/netplan/50
network:
version: 2
ethernets:
all-en:
match:
name: "en*"
dhcp4: true
dhcp6: true
Se puede establecer una configuración de red estática creando un archivo fuente de datos ”/etc/netplan/[Link]
network:
version: 2
ethernets:
eth0:
addresses:
- [Link]/24
routes:
- to: default
via: [Link]
Guía de referencia de Debian 115 / 267
La configuración del cliente de red mediante la infraestructura de Network Manager se puede configurar creando un
archivo de fuente de datos ”/etc/netplan/[Link]”:
network:
version: 2
renderer: NetworkManager
Para la configuración de red de bajo nivel en Linux, utilizar los programas iproute2 (ip(8), ...) .
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.
net-tools en desuso nuevas iproute2 etc. empleo
dispositivo con un dirección de protocolo
ifconfig(8) ip addr
(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
nombre de interfaz de red basado en la
nameif(8) ifrename(8)
dirección MAC
mii-tool(8) ethtool(8) configuración de dispositivo Ethernet
Cuadro 5.3: Tabla de correspondencia entre las órdenes en desuso de net-tools y las nuevas órdenes de
iproute2
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.
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».
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.
Guía de referencia de Debian 116 / 267
orden descripción
muestra el enlace y el estado de la dirección de los interfaces
ip addr show
activos
muestra la tabla de encaminamiento al completo en direcciones
route -n
numéricas
muestra la tabla de encaminamiento al completo en direcciones
ip route show
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 [Link] comprueba la conexión de Internet con «[Link]»
comprueba quién registro «[Link]» en la base de datos de
whois [Link]
dominios
traceroute [Link] sigue la conexión a Internet hasta «[Link]»
tracepath [Link] sigue la conexión a Internet hasta «[Link]»
sigue la conexión a Internet hasta «[Link]» (de forma
mtr [Link]
repetida)
dig [@[Link]] comprueba los registros DNS de «[Link]» por
[Link] [{a|mx|any}] «[Link]» para los registros «a», «mx», u «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 [Link] comprueba la información DNS de la zona «[Link]»
Esto proceso se puede automatizar por descubrimiento de la ruta MtU (Path MTU, PMTU) (RFC1191) y la orden
tracepath(8).
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.
nota
La optimización basada en iptables(8) (ver Sección 5.7) puede fijar el tamaño del paquete por el MSS y puede
ser útil para el encaminador. Ver «TCPMSS« en iptables(8).
Guía de referencia de Debian 118 / 267
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.
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).
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/”).
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.
Guía de referencia de Debian 120 / 267
Capítulo 6
Aplicaciones de red
Puede ejecutar varias aplicaciones de red una vez establecida la conectividad de red (ver Capítulo 5).
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.
Existen muchos paquetes de navegadores web para acceder al contenido remoto por medio del Protocolo de Trans-
ferencia de Hipertexto (Hypertext Transfer Protocol) (HTTP).
Para acceder a algunos sitios web demasiado restrictivos, es posible que deba falsificar la cadena User-Agent de-
vuelta por el programa del navegador web. Ver:
atención
La suplantación de la cadena del agente de usuario puede causar efectos colaterales con Java.
Todos los navegadores GUI modernos admiten extensión del navegador basada en código fuente y se está estan-
darizando como extensiones web.
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.
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.
Guía de referencia de Debian 122 / 267
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.
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 Autenti-
cació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.
Guía de referencia de Debian 123 / 267
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:
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 co-
mando /usr/sbin/sendmail. Tales MTA en estaciones de trabajo móviles deben hacer frente a Sección 6.2.2 y
Sección 6.2.3.
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últi-
ples 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.
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).
Asigne «Direcciones IP escuchan en las conexiones SMTP de entrada:« a sus valores por defecto como «[Link]
; ::1».
Borre el contenido de «Otros destinos desde los cuales se acepta correo:«.
Guía de referencia de Debian 124 / 267
Cuadro 6.3: Lista de paquetes básicos relacionados con el agente de transferencia de correo
El nombre del equipo en «/etc/exim4/[Link]» no debería ser un alias. Compruebe el nombre real del
equipo como sigue.
Guía de referencia de Debian 125 / 267
$ host [Link]
[Link] is an alias for [Link].
[Link] has address [Link]
Yo utilizo las expresiones regulares en «/etc/exim4/[Link]» para trabajar sobre el tema de los alias.
SMTP AUTH probablemente funciones incluso si el ISP redirige el equipo señalado por medio de alias.
Puede actualiza su configuración de exim4 de forma manual como sigue:
atención
Iniciar exim4 tarda mucho tiempo si (valor por defecto) «No« fue elegido a la pregunta de denconf «Man-
tener el número de preguntas DNS al mínimo (Marcar bajo demanda)?« y el sistema no esta conectado a
Intenet cuando se inicia.
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.
Para el correo de Internet por medio de un equipo inteligente, podría leer primero postfix documentation y las páginas
claves del manual.
orden función
postfix(1) Programa de control postfix
postconf(1) Utilidad de configuración postfix
postconf(5) Parámetros de configuración de Postfix
postmap(1) Mantenimiento de la tabla de búsqueda de Postfix
postalias(1) Mantenimiento de base de datos de alias Postfix
Existen algunos archivos de configuración de la dirección de correo para el transporte de correo, su entrega y los
agentes de usuario.
Cuadro 6.5: Relación de los archivos relacionados con la configuración de la dirección de correo
El nombre del correo en el archivo «/etc/mailname» normalmente es un nombre de dominio totalmente cualifi-
cado (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 com-
portamiento 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), ex-
porta 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/[Link] como se describe en el archivo
/usr/share/popularity-contest/[Link]. De otra forma, su correo será rechazado por el servi-
dor 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.
Guía de referencia de Debian 127 / 267
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.
sugerencia
Exim proporciona varias herramientas como exiqgrep(8) y exipick(8). Consulte «dpkg -L
exim4-base|grep man8/» para las órdenes disponibles.
Existen varias operaciones MTA fundamentales. Algunas se pueden realizar por medio de interfaz compatible de
sendmail(1).
sugerencia
puede ser una buena idea descargar todos los correos mediante un archivo de órdenes «/etc/ppp/ip-up.d/*».
Guía de referencia de Debian 128 / 267
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-]).
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 para conectarse a programas cliente X remotos.
atención
Ver Sección 4.6.3 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 sobre-
vivan a las caídas de la conexión (ver Sección 9.1.2).
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).
orden descripción
ssh
conecta en el modo por defecto
nombre_de_usuario@nombre_de_equipo.[Link]
ssh -v
conecta en el modo por defecto con los mensajes de depuración
nombre_de_usuario@nombre_de_equipo.[Link]
ssh -o
PreferredAuthentications=password obliga la utilización de la contraseña con SSH versión 2
username@[Link]
ssh -t
ejecute el programa passwd para actualizar la contraseña en un
nombre_de_usuario@nombre_de_equipo.[Link]
host remoto
contraseña
Si usa el mismo nombre de usuario en el host local y remoto, puede eliminar escribir ”username@”.
Incluso si utiliza un nombre de usuario distinto en el equipo local y remoto, puede eliminarlo usando «~/.ssh/config».
Para el servicio Debian Salsa con el nombre de la cuenta «foo-guest», haga que «~/.ssh/config» contenga lo
siguiente.
Host [Link] [Link]
User foo-guest
Se puede evitar recordar las contraseñas del sistema remoto usando «PubkeyAuthentication» (protocolo SSH-
2).
En el sistema remoto, cree las entradas respectivas, ”PubkeyAuthentication sí”, en ”/etc/ssh/sshd_config”.
Genere las claves de acreditación locales e instale las claves públicas en el sistema remoto según se muestra.
$ ssh-keygen -t rsa
$ cat .ssh/id_rsa.pub | ssh user1@remote "cat - >>.ssh/authorized_keys"
Puede añadir opciones a las entradas en «~/.ssh/authorized_keys» para limitar los equipos y ejecutar las
órdenes concretas. Ver sshd(8) ”AUTHORIZED_KEYS FILE FORMAT”.
Es seguro proteger su clave pública de acreditación con una contraseña. Si no se ha asignado una contraseña, utilice
«ssh-keygen -p» para asignarla.
Ubique su clave pública SSH (e.g. «~/.ssh/id_rsa.pub») en «~/.ssh/authorized_keys» en el equipo remoto
utilizando una conexión al equipo remoto basada en la contraseña como se describe a continuación.
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/username/.ssh/id_rsa:
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
Si tiene una cuenta shell SSH en un servidor con la configuración de DNS adecuada, puede enviar un correo elec-
trónico generado en su estación de trabajo como un correo electrónico enviado genuinamente desde el servidor
remoto.
$ ssh username@[Link] /usr/sbin/sendmail -bm -ti -f "username@[Link]" < mail_data ←-
.txt
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.
Se necesita proteger el proceso que ejecuta «shutdown -h now» (ver Sección 1.1.8) de la finalización de ssh
utilizando la orden at(1) (ver Sección 9.4.13) como sigue.
# echo "shutdown -h now" | at now
Otra forma de obtener el mismo resultado es ejecutar «shutdown -h now» en una sesión de screen(1) (ver Sec-
ción 9.1.2).
Guía de referencia de Debian 131 / 267
Si tiene problemas, compruebe la configuración de los permisos de los archivos y ejecute ssh con la opción «-v».
Si es usted superusuario y tiene problemas con el cortafuegos utilice la opción «-p» ; esto evita la utilización de los
puertos del servidor entre 1 — 1023.
Si las conexiones ssh a un sitio remoto de repente deja de funcionar, puede ser que lo tenga que solucionar el admi-
nistrador de sistemas, normalmente un cambio de la «clave_de_equipo» durante el mantenimiento del sistema.
Tras estar seguro de que nadie intenta suplantar al equipo remoto de algún modo inteligente, uno puede recuperar
la conexión eliminando la entrada «clave_de_equipo» en «~/.ssh/known_hosts» del equipo local.
En el antiguo sistema tipo Unix, el BSD Demonio de impresión en línea (lpd) era el estándar y el formato de impresión
estándar del software libre clásico era PostScript (PS). Se utilizó algún sistema de filtro junto con Ghostscript para
permitir la impresión en la impresora no PostScript. Ver Sección 11.4.1.
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.
sugerencia
Puede configurar su sistema CUPS accediendo mediante su navegador a «[Link] .
El Protocolo de Sistema de Archivo Común de Internet (Common Internet File System Protocol, CIFS) es el mismo
protocolo que Servidor de Mensajes de Bloque (Server Message Block, SMB) y se utiliza de forma generalizada en
Microsoft Windows.
sugerencia
Ver Sección 4.5.2 para la integración de los servidores de sistema.
sugerencia
La resolución del nombre del equipo normalmente se realiza por medio del servidor de DNS. Para las direcciones
IP del equipo asignadas de forma dinámica por DHCP, un DNS Dinámico se puede configurar para la resolución
de nombres utilizando bind9 y isc-dhcp-server como se describe en lapágina wiki de Debian sobre DDNS.
sugerencia
La utilización de un servidor proxy como squid es muy eficiente para ahorrar ancho de banda ya que utiliza un
servidor espejo local con todo el contenido del archivo Debian.
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 [Link] 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.
Guía de referencia de Debian 133 / 267
Los siguientes RFCs aportan el conocimiento necesario sobre cada uno de los demonios del sistema.
RFC descripción
rfc1939 y rfc2449 servicio POP3
rfc3501 servicio IMAP4
rfc2821 (rfc821) servicio SMTP
rfc2822 (rfc822) Formato de archivo de correo
rfc2045 Extensión de Correo de Internet Multipropósito (MIME)
rfc819 servicio DNS
rfc2616 servicio HTTP
rfc2396 definición de URI
Capítulo 7
Hay varias opciones para el entorno de escritorio completo GUI en el sistema Debian.
sugerencia
Los paquetes de dependencia seleccionados por un metapaquete de tareas pueden no estar sincroniza-
dos 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:
Ajuste los paquetes seleccionados y elimine los paquetes problemáticos que causan conflictos de paquetes.
Presiona ”g” para comenzar la instalación.
Consulte el sitio [Link] 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
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.
Guía de referencia de Debian 137 / 267
$ xeyes
Si el cursor del ratón está en una aplicación como ”Terminal GNOME” que usa el protocolo del servidor de pantalla
Wayland, los ojos no se mueven con el cursor del ratón.
Si el cursor del ratón está en una aplicación como ”xterm”, que usa el protocolo del núcleo de X Window System,
los ojos se mueven con el cursor del ratón y exponen la naturaleza no tan aislada de la arquitectura X Window.
A partir de abril de 2021, muchas aplicaciones GUI populares, como GNOME y LibreOffice (LO), han migrado al
protocolo del servidor de visualización de Wayland. Veo xterm, gitk, chromium, firefox, gimp, dia, y las
aplicaciones de KDE aún utilizan el protocolo central del sistema X Window.
nota
Tanto para xwayland en Wayland como para el sistema X Window nativo, el antiguo archivo de configuración del
servidor X ”/etc/X11/[Link]” no debería existir en el sistema. Los dispositivos gráficos y de entrada ahora
están configurados por el kernel con DRM, KMS y udev. El servidor X nativo se ha reescrito para usarlos. Ver
”soporte de modo de vídeo predeterminado de modedb” en la documentación del kernel de Linux.
Estos son los conocidos paquetes del marco GUI para GNOME en el entorno de Wayland.
tamaño
del
paquete popularidad descripción
pa-
quete
mutter V:1, I:60 187 Los GNOME mutter window manager [auto]
xwayland V:240, I:319 2388 Un servidor X ejecutándose sobre wayland [auto]
gnome-remote-desktop Daemon de escritorio remoto para GNOME usando PipeWire
V:35, I:221 1068
[auto]
gnome-tweaks V:21, I:229 1170 Ajustes avanzados de la configuración para GNOME
gnome-shell-extension-prefs Herramienta para activar / desactivar las extensiones de
V:13, I:213 60
GNOME Shell
Aquí, ”[auto]” significa que estos paquetes se instalan automáticamente cuando se instala task-gnome-desktop.
sugerencia
gnome-tweaks es la utilidad de configuración indispensable. Por ejemplo:
Puede forzar la ”Sobre amplificación” del volumen del sonido desde ”General”.
Puede hacer que ”Mayúsculas” se convierta en ”Esc” desde ”Keyboard & Mouse” -> ”Keyboard” -> ”Additional
Layout Option”.
sugerencia
Las características detalladas del entorno de escritorio de GNOME pueden configurarse con las utilidades que se
inician escribiendo ”configuración”, ”ajustes” o ”extensiones” después de pulsar la tecla Super.
Guía de referencia de Debian 138 / 267
Ahora hay disponible muchas aplicaciones GUI útiles en Debian. Instalar software como scribus (KDE) en el en-
torno 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.
Los nombres por defecto de los directorios de usuario como ”~/Desktop”, ”~/Documents”, ..., utilizados por el
entorno Desktop dependen de la configuración regional utilizada para la instalación del sistema. Puede restablecerlas
al Inglés mediante:
$ LANGUAGE=C xdg-user-dirs-update --force
Luego mueve manualmente todos los datos a los directorios más nuevos. Ver xdg-user-dirs-update(1).
También puede asignarles cualquier nombre editando ”~/.config/[Link]”. Ver [Link](5).
7.6. Fuentes
Hay disponibles muchas útiles fuentes escalables para los usuarios de Debian. Es asunto del usuario evitar la redun-
dancia 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)
La siguiente tabla se ha compilado con la esperanza de ayudar a los usuarios a elegir las fuentes escalables apro-
piadas 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.
Aquí:
”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.
Guía de referencia de Debian 139 / 267
tamaño
del
paquete popularidad pa- tipo descripción
que-
te
Gestor de información personal (trabajo en grupo
evolution V:30, I:239 486 GNOME
y correo electrónico)
Cliente de correo electrónico (Mozilla
thunderbird V:48, I:119 224760 GTK
Thunderbird)
Gestor de información personal (trabajo en grupo
kontact V:1, I:12 2208 KDE
y correo electrónico)
libreoffice-writer
V:117, I:435 31474 LO procesador de textos
abiword V:1, I:8 3542 GNOME procesador de textos
calligrawords V:0, I:7 6097 KDE procesador de textos
desktop publishing editor para editar archivos
scribus V:1, I:16 31345 KDE
PDF
glabels V:0, I:3 1338 GNOME editor de etiquetas
libreoffice-calc
V:111, I:432 26009 LO hoja de 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
libreoffice-base
V:26, I:121 5003 LO gestión de bases de datos
kexi V:0, I:1 7118 KDE gestión de bases de datos
libreoffice-draw
V:72, I:430 10312 LO editor de gráficos vectoriales (dibujo)
inkscape V:15, I:112 99800 GNOME editor de gráficos vectoriales (dibujo)
karbon V:0, I:6 3610 KDE editor de gráficos vectoriales (dibujo)
dia V:2, I:22 3741 GTK editor de diagramas de flujos y otros diagramas
gimp V:50, I:252 19304 GTK editor de gráficos de mapas de bits (Pintura)
shotwell V:17, I:255 6263 GTK organizador de fotos digitales
digikam V:1, I:9 293 KDE organizador de fotos digitales
darktable V:4, I:13 30554 GTK mesa de luz 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
Aplicación sistema de diseño asistido por ordenador (CAD)
librecad V:1, I:15 8963
Qt (2D)
Aplicación sistema de diseño asistido por ordenador (CAD)
freecad I:18 36
Qt (3D)
software de diseño de circuitos impresos y
kicad V:3, I:14 236461 GTK
esquemas electrónicos
xsane V:12, I:144 2339 GTK interfaz de usuario de escáner
libreoffice-math
V:51, I:432 1898 LO editor matemático de fórmulas/ecuaciones
gestión de bibliotecas y conversor de libros
calibre V:6, I:28 63385 KDE
electrónicos
fbreader V:1, I:9 3783 GTK lector de libros electrónicos
evince V:92, I:314 941 GNOME visor de documentos (pdf)
okular V:40, I:123 17728 KDE visor de documentos (pdf)
Aplicación
x11-apps V:31, I:463 2460 xeyes(1), etc.
X pura
V:192, Aplicación
x11-utils 651 xev(1), xwininfo(1), etc..
I:566 X pura
Información sobre la
paquete popularidad tamaño sans serif mono
fuente
V:216, Cantarell (GNOME 3,
fonts-cantarell 572 59 - -
I:306 pantalla)
Fuentes Noto (Google,
fonts-noto I:153 31 61 63 40
multilingüe con CJK)
DejaVu (GNOME 2,
MCM:Verdana,
fonts-dejavu I:421 35 58 68 40
extendida Bitstream
Vera)
Liberation fonts para
V:130,
fonts-liberation2 15 56 60 40 LibreOffice (Red Hat,
I:427
MCMATC)
Chrome OS: Arimo,
fonts-croscore V:20, I:40 5274 56 60 40 Tinos y Cousine
(Google, MCMATC)
fonts-crosextra- Chrome OS: Carlito
V:21, I:131 2696 57 - -
carlito (Google, MCM:Calibri )
Chrome OS: Caladea
fonts-crosextra-
I:128 347 - 55 - (Google, MCM:Cambria
caladea
) (solo en latín)
GNU FreeFont
fonts-freefont-ttf V:76, I:218 14460 57 59 40 (extendido URW
Nimbus)
Debian task-desktop,
V:123,
fonts-quicksand 392 56 - - Quicksand (pantalla,
I:438
sólo latín)
Una tipografía diseñada
fonts-hack V:24, I:120 2508 - - 40 P para el código fuente
Hack (Facebook)
fonts-sil-
I:32 14345 - 54 - Gentium SIL
gentiumplus
fonts-sil-charis I:27 6704 - 59 - Charis SIL
URW Nimbus (Nimbus
V:167,
fonts-urw-base35 15560 56 60 40 Sans, Roman No. 9 L,
I:472
Mono L, MCAHTC)
Fuentes de Ubuntu
fonts-ubuntu V:2, I:5 4339 58 - 33 P
(pantalla)
Fuentes para terminales
fonts-terminus V:0, I:3 452 - - 33
retro.
Descargador de fuentes
ttf-mscorefonts-
V:1, I:49 85 ¿56? 60 40 no libres de Microsoft
installer
(ver más abajo)
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.
Debian usa FreeType para rasterizar fuentes. Su infraestructura de selección de fuentes la proporciona la biblioteca
de configuración de fuentes Fontconfig.
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 espe-
ran 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 IDEO-
GRAPHIC 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).
Puede configurar el estado de la configuración de la fuente desde el editor de texto, pero esto no es trivial. Ver
[Link](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.
Guía de referencia de Debian 142 / 267
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).
Para binarios de AppImage y algunos sitios upstream, ejecútelos en firejail con manual de configuración.
El paquete xdg-desktop-portal proporciona una API estandarizada para funciones comunes de escritorio. Verportal
de escritorio xdg (flatpack) y portal de escritorio xdg (snap) .
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.
Guía de referencia de Debian 143 / 267
Hay varias formas de conectarse desde una aplicación en un host remoto al servidor X, incluyendo xwayland en el
host local.
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”.
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.
Ejecute una orden de aplicación X, p. ej. «gitk», en el sitio remoto como se muestra.
loginname @ remotehost $ gitk
Guía de referencia de Debian 145 / 267
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 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.
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
tamaño
del
paquete popularidad pa- objetivo descripción
que-
te
interfaz de la línea de comandos para X
xsel V:9, I:42 55 X
selecciones (portapapeles)
interfaz de la línea de comandos para X
xclip V:12, I:63 62 X
selecciones (portapapeles)
wl-copy wl-paste: interfaz de la línea de
wl-clipboard V:3, I:14 162 Wayland
comandos para Portapapeles de Wayland
Consola de Un servidor (Daemon) que captura acciones del
gpm V:10, I:12 521
Linux ratón en la consola de Linux
Cuadro 7.9: Lista de programas relacionados con la manipulación del portapapeles de caracteres
Guía de referencia de Debian 146 / 267
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 depen-
diendo de la configuración regional.
Localización (L10N): para hacer que el software sea capaz de gestionar la configuración regional.
sugerencia
Hay 17, 18 o 10 letras entre ”m” y ”n”, ”i” y ”n”, o ”l” y ”n” en multilingüalización, internacionalización y localización
que corresponden a M17N, I18N y L10N. Véase Internacionalización y localización para más detalles.
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 locali-
zación y el sistema utiliza mensajes en inglés de [Link]. 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 da-
tos 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 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.
Guía de referencia de Debian 147 / 267
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).
EL conjunto de caracteres Unicode puede representar prácticamente todos los caracteres conocidos por humanos
con un rango de punto de código de 21 bits (es decir, 0 a 10FFFF en notación hexadecimal).
El sistema de codificación de texto UTF-8 ajusta los puntos de código Unicode en un flujo de datos sensible de 8
bits, en su mayoría compatible con el sistema de procesamiento de datos ASCII. Esto hace que UTF-8 sea la opción
preferida moderna. UTF representa el Formato de Transformación Unicode. Cuando los datos de texto sin formato
ASCII se convierten en uno UTF-8, tienen exactamente el mismo contenido y tamaño que el original ASCII. Así que
no pierde nada utilizando la configuración regional UTF-8.
En la local UTF-8 con el programa de aplicación compatible, puede mostrar y editar cualquier dato de texto en un
idioma extranjero siempre que las fuentes y los métodos de entrada requeridos estén instalados y habilitados. Por
ejemplo, en la configuración local ”LANG=fr_FR.UTF-8”, gedit(1) (editor de texto para el escritorio GNOME) puede
mostrar y editar datos de texto de caracteres chinos mientras presenta menús en francés.
sugerencia
Tanto la nueva configuración ”en_US.UTF-8” como la antigua configuración local estándar ”C”/”POSIX” utilizan el
mensaje en inglés estadounidense estándar, tienen diferencias sutiles en el orden de clasificación, etc. Si desea
manejar no solo los caracteres ASCII, sino también todos los caracteres codificados en UTF-8 con elegancia
mientras mantiene el antiguo funcionamiento local ”C”, use la configuración local no estándar ”[Link]-8” en Debian.
nota
Algunos programas utilizan más memoria después de configurarlos con l18N. Esto es debido a que se han escrito
para utilizar UTF-32(UCS4) internamente para utilizar Unicode con el fin de optimizar la velocidad y utilizan 4 bytes
por cada carácter ASCII con independencia de la configuración regional seleccionada. Nuevamente, no se pierde
nada por utilizar como configuración regional UTF-8.
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
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).
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 confi-
guració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 re-
gional precompilados para todas las configuraciones regionales. Necesitas instalar ambos paquetes locales y
locales-all en Debian para emular dicho entorno de sistema.
Para el intercambio de datos entre plataformas (ver Sección 10.1.7), puede necesitar montar un sistema de archivos
con una codificación adecuada. Por ejemplo, mount(8) para el sistemas de archivos vfat da por sentado CP437 si
se utiliza sin opciones. Necesitará proporcionar al montar una opción explícita para utilizar UTF-8 o CP932 para los
nombres de archivos.
nota
En el automontaje o la conexión en caliente de dispositivos de memoria USB en los entornos de escritorio moder-
nos como GNOME, puede introducir esa opción de montaje pulsando el botón derecho del ratón en el icono del
escritorio, pulse en la pestaña «Unidad», pulse para expandir «Configurar» e introduzca «utf8» en las «Opciones
de montaje:». La próxima vez que el dispositivo de memoria se monte UTF-8 se activará.
nota
Si esta actualizando su sistema o modificando los discos duros desde un sistema antiguo que no soporta UTF-8,
los nombres de los archivos con caracteres que no son ASCII se pueden codificar con la histórica y obsoleta ISO-
8859-1 o eucJP. Por favor busque ayuda entre las herramientas de conversión de texto para convertirlas a UTF-8.
Ver Sección 11.1.
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 entra-
da«dos charset» en el archivo «/etc/samba/[Link]», p. ej. a CP932 para el japonés.
Existen traducciones para muchos de los mensajes de texto y documentos que el sistema Debian muestra, como
los mensajes de error, salida estándar de los programas, menús y páginas de manual. El conjunto de herramientas
GNU gettext(1) se usan como respaldo para la mayoría de las actividades relacionadas con la traducción.
En «Tareas« → «Configuración regional« aptitude(8) tiene una relación muy completa de paquetes binarios útiles
los cuales proporcionan mensajes según la configuración regional de las aplicaciones y documentación traducida.
Por ejemplo, puede tener los mensajes según su configuración regional instalando el paquete manpages-LANG. Para
leer la página de man en italiano de nombre_del_programadesde «/usr/share/man/it/», ejecute lo siguiente.
LANG=it_IT.UTF-8 man programname
Guía de referencia de Debian 149 / 267
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”.
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=[Link]-8
ordena en el orden binario ASCII A->B->...->Z->a->b....
El formato de fecha de la ls(1) se ve afectado por la configuración regional (ver Sección 9.3.4).
El formato de la fecha de fecha(1) se ve afectado por la configuración regional. Por ejemplo:
$ unset LC_ALL
$ LANG=en_US.UTF-8 date
Thu Dec 24 08:30:00 PM JST 2023
$ LANG=en_GB.UTF-8 date
Thu 24 Dec 20:30:10 JST 2023
$ LANG=es_ES.UTF-8 date
jue 24 dic 2023 20:30:20 JST
$ LC_TIME=en_DK.UTF-8 date
2023-12-24T20:30:30 JST
La puntuación numérica es diferente en las diferentes configuraciones regionales. Por ejemplo, en la configuración
regional en Inglés, mil punto uno se muestra como ”1,000.1”, mientras que en la configuración regional en alemán,
se muestra como ”1.000, 1”. Puedes ver la diferencia en los programas de hojas de cálculo.
Cada detalle de la variable del entorno ”$LANG” se puede anular configurando las variables ”$LC_*”. Estas variables
del entorno se pueden volver a anular configurando la variable $LC_ALL”. Ver la página man locale(7) para obtener
más detalles. A menos que tengas una razón de peso para crear configuraciones complejas, mantente alejado de
ellas y simplemente usa la variable ”$LANG” para establecer una configuración regional UTF-8.
El sistema Debian puede configurarse para trabajar con muchas disposiciones internacionales del teclado utilizando
los paquetes keyboard-configuration y console-setup.
# dpkg-reconfigure keyboard-configuration
# dpkg-reconfigure console-setup
Para la consola de Linux y el sistema X Window, esto actualiza los parámetros de configuración en ”/etc/default/keyboa
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.
Para GNOME en el sistema de escritorio Wayland, Sección 8.2.1 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
Guía de referencia de Debian 150 / 267
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.
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--+
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.
Guía de referencia de Debian 151 / 267
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.
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”.
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) 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).
En las configuraciones regionales de Asia oriental, el área de dibujo de los caracteres griegos y cirílicos puede ser
ampliada más allá de lo deseado causando que no se muestren alineados en la salida (ver Anexo Estándar de
Unicode #11).
Puede solucionar este problema:
Capítulo 9
Aquí, describo los trucos fundamentales para configurar y gestionar sistemas, principalmente desde la consola.
La utilización para el registro de la actividad del intérprete de órdenes, sin más, de script(1) (ver Sección 1.4.9)
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
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).
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 cone-
xión.
6. Se puede separar la sesión screen por cualquier método.
sugerencia
Puede guardar la entrada de la conexión con screen para la conexión de red a medida como de marcado y de
paquete, ya que puede dejar el proceso activo mientras esta desconectado, y entonces recuperarlo más tarde
cuando se conecte de nuevo.
En una sesión de screen, todas las entradas de teclado se envían a la ventana actual excepto las que son com-
binaciones de teclado de órdenes. Todas las combinaciones de teclas de órdenes screen se inician pulsando ^A
(«Control-A«) más otra tecla [más algunos parámetros]. He aquí algunos importantes para recordar.
Para más detalles ver screen(1).
Ver tmux(1) para saber las funcionalidades del comando alternativo.
Guía de referencia de Debian 154 / 267
función significado
^A ? muestra la ayuda de screen (muestra los atajos de teclado)
^A c crea una nueva ventana y cambia a ella
^A n ir a la siguiente ventana
^A p ir a la ventana anterior
^A 0 va a la ventana 0
^A 1 ir a la ventana número 1
^A w muestra una relación de las ventanas
^A a envía un Ctrl-A a la ventana actual como entrada de teclado
^A h escribe una copia de la ventana actual a un archivo
^A H inicia/finaliza la grabación de la ventana actual a un archivo
^A ^X bloquea la terminal (protegido por contraseña)
^A d separa la sesión de screen de la terminal
^A DD separa la sesión de screen y sal
En Sección 1.4.2, 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/[Link]
if [ -f $FZF_KEYBINDINGS_PATH ]; then
. $FZF_KEYBINDINGS_PATH
fi
Por ejemplo:
Puedes saltar a un subdirectorio muy profundo con un mínimo esfuerzo. Primero escribe ”cd **” y pulsa Tab.
A continuación, pedirá las rutas candidatas. Si escribe cadenas de rutas parciales, por ejemplo, s/d/b foo, se
reducirán las rutas candidatas. Seleccione la ruta que va a usar cd con las teclas de cursor y retorno.
Puede seleccionar un comando del historial de comandos de manera más eficiente con un esfuerzo mínimo. Pre-
sione 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.
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.
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.
Guía de referencia de Debian 155 / 267
Después de aprender los conceptos básicos de vim(1) a través de Sección 1.4.8, ver ”Siete hábitos de edición de
texto efectiva (2000) ”de Bram Moolenaar, para entender cómo se debe usar vim.
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 1:
""" Generic baseline Vim and Neovim configuration (~/.vimrc)
""" - For NeoVim, use "nvim -u ~/.vimrc [filename]"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let mapleader = ' ' " :h mapleader
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set nocompatible " :h 'cp -- sensible (n)vim mode
syntax on " :h :syn-on
filetype plugin indent on " :h :filetype-overview
set encoding=utf-8 " :h 'enc (default: latin1) -- sensible encoding
""" current vim option value can be verified by :set encoding?
set backspace=indent,eol,start " :h 'bs (default: nobs) -- sensible BS
set statusline= %< %f%m%r%h%w%=%y[U+ %04B] %2l/ %2L= %P, %2c%V
set listchars=eol:¶,tab:b''�b''\ ,extends:b''�b'',precedes:b''�b'',nbsp:b''�b''
set viminfo=!,'100,<5000,s100,h " :h 'vi -- bigger copy buffer etc.
""" Pick "colorscheme" from blue darkblue default delek desert elflord evening
""" habamax industry koehler lunaperche morning murphy pablo peachpuff quiet ron
""" shine slate torte zellner
colorscheme industry
""" don't pick "colorscheme" as "default" which may kill SpellUnderline settings
set scrolloff=5 " :h 'scr -- show 5 lines around cursor
set laststatus=2 " :h 'ls (default 1) k
""" boolean options can be unset by prefixing "no"
set ignorecase " :h 'ic
set smartcase " :h 'scs
set autoindent " :h 'ai
set smartindent " :h 'si
set nowrap " :h 'wrap
"set list " :h 'list (default nolist)
set noerrorbells " :h 'eb
set novisualbell " :h 'vb
set t_vb= " :h 't_vb -- termcap visual bell
set spell " :h 'spell
set spelllang=en_us,cjk " :h 'spl -- english spell, ignore CJK
set clipboard=unnamedplus " :h 'cb -- cut/copy/paste with other app
set hidden " :h 'hid
set autowrite " :h 'aw
set timeoutlen=300 " :h 'tm
El mapa de teclas de vim puede cambiarse en el fichero vimrc del usuario. Por ejemplo:
atención
No intente cambiar las combinaciones de teclas predeterminadas sin muy buenas razones.
Para que las combinaciones de teclas anteriores funcionen correctamente, el programa de terminal ha de configurarse
para generar ”ASCII DEL” para la teclaBackspace y ”Secuencia de escape” para la tecla Delete.
También se pueden cambiar otras configuraciones en el archivo vimrc del usuario. Por ejemplo:
""" Use faster 'rg' (ripgrep package) for :grep
if executable("rg")
set grepprg=rg\ --vimgrep\ --smart-case
set grepformat= %f: %l: %c: %m
endif
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" Retain last cursor position :h '"
augroup RetainLastCursorPosition
autocmd!
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ exe "normal! g'\"" |
\ endif
augroup END
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" Force to use underline for spell check results
augroup SpellUnderline
autocmd!
autocmd ColorScheme * highlight SpellBad term=Underline gui=Undercurl
autocmd ColorScheme * highlight SpellCap term=Underline gui=Undercurl
autocmd ColorScheme * highlight SpellLocal term=Underline gui=Undercurl
autocmd ColorScheme * highlight SpellRare term=Underline gui=Undercurl
augroup END
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" highlight tailing spaces except when typing as red (set after colorscheme)
highlight TailingWhitespaces ctermbg=red guibg=red
""" \s\+ 1 or more whitespace character: <Space> and <Tab>
""" \ %#\@<! Matches with zero width if the cursor position does NOT match.
match TailingWhitespaces /\s\+\ %#\@<!$/
Vim - el editor de texto extendido -- El sitio web oficial de Vim y vim scripts
VimAwsome -- La lista de plugins de Vim
Los paquetes del plugins en el paquete vim-scripts se pueden habilitar usando el archivo vimrc del usuario. Ej:
packadd! secure-modelines
packadd! winmanager
" IDE-like UI for files and buffers with <space>w
nnoremap <leader>w :WMToggle<CR>
El nuevo sistema de paquetes nativo de Vim funciona bien con ”git” y ”git submodule”. Puede encontrar un
ejemplo de configuración en my git repository: dot-vim. Esto hace esencialmente:
Guía de referencia de Debian 158 / 267
Al usar ”git” y ”git submodule”, los últimos paquetes externos, como ”name”, se sitúan en ~/.vim/pack/*/opt/nam
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 [Link]” para comprobar la secuencia de
ejecución real y el tiempo usado en cada paso.
Es bastante confuso ver demasiadas formas 2 de administrar y cargar estos paquetes externos en vim. Verificar la
información original es la mejor cura.
Muchos programas tradicionales registran tus actividades en el formato de un archivo de texto en el directorio
”/var/log/”.
logrotate(8) se utiliza para simplificar la administración de los archivos del registro en un sistema que genera
muchos archivos de registro.
Muchos programas nuevos registran sus actividades en formato de archivo binario utilizando el servicio Journalsystemd-jo
(8) en el directorio ”/var/log/journal ”.
Puedes registrar los datos en el registro systemd-journald(8) desde un script de shell, usando el comando
systemd-cat(1).
Consulte Sección 3.4 y Sección 3.3.
nota
CRM114 tiene un lenguaje que permite escribir borrosos filtros con la biblioteca de expresiones regulares TRE
. Su uso más común es como filtro de correos no deseados pero se puede utilizar también como analizador de
registros.
Aunque las herramientas de paginación como more(1) y less(1) (ver Sección 1.4.5) y las herramientas personali-
zadas para marcar y dar formato (ver Sección 11.1.8) pueden visualizar la información en formato texto de la forma
correcta, los editores de propósito general (ver Sección 1.4.6) 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 resal-
tados.
El formato predeterminado de visualización de la hora y la fecha mediante el comando ”ls -l” depende de la
localidad (ver Sección 1.2.6 para conocer el valor). La variable ”$LANG” es la primera a la que se hace referencia y
se puede anular con las variables de entorno exportadas ”$LC_TIME” o ”$LC_ALL”.
El formato de visualización predeterminado real para cada configuración regional depende de la versión de la biblio-
teca C estándar (el paquete libc6) utilizada. Es decir, diferentes versiones de Debian tienen diferentes valores por
defecto. Para los formatos iso, ver ISO 8601.
Si de verdad quiere personalizar el formato de visualización de la hora y la fecha independientemente de la confi-
guración regional, debería asignar el valor de estilo de tiempo por el parámetro «--time-style» o por el valor
de «$TIME_STYLE» (ver ls(1), date(1), «info coreutils 'ls invocation'»).
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 ls='ls --time-style=+ %d. %m. %y %H: %M'
En los terminales más modernos se pueden utilizar colores utilizando secuencias de escape ANSI (ver «/usr/share/doc/x
Por ejemplo, intente lo siguiente
Guía de referencia de Debian 160 / 267
Cuadro 9.5: Mostrar los ejemplos de la hora y la fecha para el comando ”ls -l” con el time style value.
$ RED=$(printf "\x1b[31m")
$ NORMAL=$(printf "\x1b[0m")
$ REVERSE=$(printf "\x1b[7m")
$ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"
Las ordenes de colores son útiles para la comprobación visual de la salida en entornos interactivos. Yo añado lo
siguiente en mi «~/.bashrc».
if [ "$TERM" != "dumb" ]; then
eval "`dircolors -b`"
alias ls='ls --color=always'
alias ll='ls --color=always -l'
alias la='ls --color=always -A'
alias less='less -R'
alias ls='ls --color=always'
alias grep='grep --color=always'
alias egrep='egrep --color=always'
alias fgrep='fgrep --color=always'
alias zgrep='zgrep --color=always'
else
alias ll='ls -l'
alias la='ls -A'
fi
La utilización de alias limita los efectos del color en el uso de órdenes interactivas. Tiene ventajas sobre las va-
riables de entorno exportadas «export GREP_OPTIONS='--color=auto'» ya que el color puede verse en los
programas de paginación como less(1). Si quiere eliminar el color cuando usa tuberías con otros programas, utilice
«--color=auto» en su lugar en los ejemplos anteriores «~/.bashrc».
sugerencia
Puede deshabilitar los alias de color en un entorno interactivo llamando al intérprete de órdenes con «TERM=dumb
bash».
Existen varias maneras de grabar una imagen gráfica de una aplicación X, incluida una pantalla de xterm.
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.
Cuadro 9.8: Relación de las herramientas de monitorización y control de las actividades de los programas
Guía de referencia de Debian 163 / 267
Las actividades de los programas pueden ser monitoreados y controlados utilizando herramientas especializadas.
sugerencia
El paquete procps provee lo fundamental para la monitorización, control e inicio de las actividades de los progra-
mas. Podría aprender sobre todo ello.
Algunas veces un buen valor extremo produce más mal que bien al sistema. Utilice esta orden con cuidado.
9.4.3. La orden ps
La orden ps(1) en un sistema Debian aportan tanto las funcionalidades de SystemV y BSD y ayuda a identificar la
actividad estática del proceso.
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.
Guía de referencia de Debian 164 / 267
top(1) en el sistema Debian es rico desde el punto de vista funcional y ayuda a identificar que procesos actúan de
forma extraña puntualmente.
Es un programa a pantalla completa interactivo. Puede obtener ayuda pulsando la tecla «h« y salir pulsando la tecla
«q«.
Puede enumerar los archivos abiertos por un proceso con el identificador de proceso (PID), p. ej. 1, con lo siguiente.
$ sudo lsof -p 1
Puede trazar la actividad de un programa con strace(1), ltrace(1), o xtrace(1) para llamadas y señales del
sistema, llamadas a bibliotecas o comunicación entre el cliente X11 y el servidor..
Puede seguir las invocaciones del sistema de la orden ls como se muestra.
$ sudo strace ls
sugerencia
Usar el script strace-graph ubicado en /usr/share/doc/strace/examples/ para armar una vista de árbol agradable
También puede identificar procesos utilizando archivos mediante fuser(1), p. ej. para «/var/log/[Link]»
como se muestra.
$ sudo fuser -v /var/log/[Link]
USER PID ACCESS COMMAND
/var/log/[Link]: root 2946 F.... rsyslogd
Puede ver que el archivo «/var/log/[Link]» esta abierto en escritura por la orden rsyslogd(8).
También puede identificar un proceso por la utilización de sus conexiones (sockets) mediante fuser(1), p. ej. para
«smtp/tcp» como sigue.
$ sudo fuser -v smtp/tcp
USER PID ACCESS COMMAND
smtp/tcp: Debian-exim 3379 F.... exim4
Ahora sabe que su sistema ejecuta exim4(8) para gestionar las conexiones TCP del puerto SMTP (25).
watch(1) ejecuta un programa de forma reiterada a un intervalo constante mientras muestra la salida del programa
a pantalla completa.
$ watch w
Existen varias formas de repetir una orden sobre los archivos que cumplan una condición, p. ej, encajan en un patrón
«*.ext».
Método del bucle for del intérprete de órdenes (ver Sección 12.1.4):
find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;
Los ejemplos anteriores están escritos para garantizar el manejo adecuado de nombres de archivo graciosos, como
los que contienen espacios. Véase Sección 10.1.5 para usos más avanzados de find(1).
Para el interfaz de órdenes en línea (CLI), el programa ejecutado será el primero que encaja el nombre en el directorio
especificado por la variable de entorno $PATH. Ver Sección 1.5.3.
Para el interfaz gráfico de usuario (GUI) que cumple con el estándar de [Link], 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
[Link] instala sus datos de menú proporcionados por ”*. desktop” en ”/usr/share/applications/”. Los moder-
nos entornos de escritorio que cumplen con el estándar [Link] utilizan estos datos para generar su menú
utilizando el paquete xdg-utils. Ver ”/usr/share/doc/xdg-utils/README”.
Por ejemplo, el archivo [Link] 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
Guía de referencia de Debian 166 / 267
Esta es una descripción muy simplificada. Los archivos *.desktop se revisan como sigue.
El entorno de escritorio asigna las variables del entorno $XDG_DATA_HOME y $XDG_DATA_DIR. Por ejemplo, en
GNOME 3:
$XDG_DATA_HOME esta sin asignar. (El valor por defecto que se utiliza es $HOME/.local/share.)
$XDG_DATA_DIRS se le asigna el valor /usr/share/gnome:/usr/local/share/:/usr/share/.
Así los directorios base (ver XDG Base Directory Specification) y los directorios de aplicaciones quedan como
sigue.
$HOME/.local/share/ → $HOME/.local/share/applications/
/usr/share/gnome/ → /usr/share/gnome/applications/
/usr/local/share/ → /usr/local/share/applications/
/usr/share/ → /usr/share/applications/
Los archivos *.desktop se comprueban en estos directorios de aplicaciones siguiendo este orden.
sugerencia
Se puede crear una entrada personalizada al menú del interfaz gráfico de usuario (GUI) añadiendo un archivo
*.desktop al directorio $HOME/.local/share/applications/.
sugerencia
La línea ”Exec=...” no es analizada por el shell. Utilice el comando env(1) si necesita establecer variables de
entorno.
sugerencia
Igualmente, si se crea un archivo *.desktop en el directorio autostart por debajo de estos directorios base, el
programa que se especifique en el archivo *.desktop se ejecuta automáticamente cuando el entorno de escritorio
se inicia. Ver Especificación de Inicio Automático de Aplicaciones de Escritorio.
sugerencia
De igual manera, si un archivo *.desktop se crea en el directorio $HOME/Desktop y se ha configurado el
entorno de escritorio con la funcionalidad del lanzador del icono, el programa especificado en el se ejecutará
cuando se pulse sobre el icono. Tenga en cuenta que el nombre real del directorio $HOME/Desktop depende de
la configuración regional. Consulte xdg-user-dirs-update(1).
Algunos programas inician otros programa de forma automática. Aquí están los puntos a comprobar para la perso-
nalización de este proceso.
• mc(1): «/etc/mc/[Link]»
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
y «www-browser» (ver Sección 1.4.7)
El contenido de los archivos «~/.mailcap» y «/etc/mailcap» que asocia los tiposMIME con los programas
(ver mailcap(5))
El contenido de los archivos «~/.[Link]» y «/etc/[Link]» el cual se asocia con la extensión del
nombre del archivo con los tipos MIME (ver run-mailcap(1))
sugerencia
update-mime(8) actualiza el archivo «/etc/mailcap» utilizando el archivo «/etc/[Link]» (ver
[Link](5)).
sugerencia
El paquete debianutils aporta sensible-browser(1), sensible-editor(1) y sensible-pager(1) que
elige de forma sensata el editor, paginador y navegador web que se lanzará, respectivamente. Le recomiendo leer
estos archivos de órdenes.
sugerencia
Con el fin de ejecutar una aplicación de consola como mutt como la preferida en GuI, podría crear una aplicación
GUI de la forma siguiente y asignar «/usr/local/bin/mutt-term» como su aplicación preferida al inicio como
se describe.
# cat /usr/local/bin/mutt-term <<EOF
#!/bin/sh
gnome-terminal -e "mutt \$@"
EOF
# chmod 755 /usr/local/bin/mutt-term
Utilice kill(1) para matar (o enviar una señal a) un proceso mediante su identificador de proceso.
Utilice killall(1) o pkill(1) para hacer lo mismo mediante otros atributos como el nombre de la orden del proceso.
Ejecute al orden at(1) para planificar una única ejecución de un trabajo mediante lo siguiente.
$ echo 'command -args'| at 3:40 monday
Guía de referencia de Debian 168 / 267
nombre de
valor de la señal acción nota
la señal
no se
envía
nin-
0 --- guna comprobar si el proceso se está ejecutando
señal
(ver
matar(2))
terminar
el
1 SIGHUP terminal desconectado (señal bloqueada)
pro-
ceso
terminar
el
2 SIGINT interrumpir desde el teclado (CTRL-C)
pro-
ceso
terminar
el
pro-
3 SIGQUIT ceso salir desde el teclado (CTRL-\)
y
dump
core
terminar
el
9 SIGKILL Señal de apagado desbloqueable
pro-
ceso
terminar
el
15 SIGTERM Señal de apagado bloqueable
pro-
ceso
Cuadro 9.11: Relación de las señales más usadas con la orden kill
Guía de referencia de Debian 169 / 267
Utilice cron(8) para planificar las tareas de forma regular. Ver crontab(1) y crontab(5).
Puede planificar la ejecución de procesos como un usuario normal, p. ej. foo creando un archivo crontab(5) como
«/var/spool/cron/crontabs/foo» con la orden «crontab -e».
He aquí un ejemplo de un archivo crontab(5).
# use /usr/bin/sh to run commands, no matter what /etc/passwd says
SHELL=/bin/sh
# mail any output to paul, no matter whose crontab this is
MAILTO=paul
# Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
# run at 00:05, every day
5 0 * * * $HOME/bin/[Link] >> $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 ór-
denes periódicas en los intervalos deseados tan pronto como el equipo activo lo permita. Ver anacron(8) y
anacrontab(5).
sugerencia
Para los archivos de órdenes de mantenimiento del sistema, puede ejecutarlos de forma periódica desde la cuen-
ta de superusuario ubicando esos archivos de órdenes en «/etc/[Link]/», «/etc/[Link]/»,
«/etc/[Link]/», o «/etc/[Link]/». La temporización de la ejecución de los archivos de ór-
denes 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 ejem-
plo, /lib/systemd/system/[Link] y /lib/systemd/system/[Link] configuran
actividades diarias de descarga de apt. Ver [Link](5) .
Systemd puede programar el programa no sólo en timer sino también en mount. Como ejemplos ver Sección [Link]
y Sección [Link].
Presionar Alt-SysRq (PrtScr) seguido de una tecla hace la magia de rescatar el control del sistema.
Más información en Guía del administrador y del usuario del kernel de Linux » Linux Magic System Request Key
Hacks
Guía de referencia de Debian 170 / 267
sugerencia
Desde terminales SSH etc., puede utilizar la funcionalidad Alt-SysRq resribiendo «/proc/sysrq-trigger».
Por ejemplo, «echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger» desde el cursor del
intérprete de órdenes del superusuario syncs y umount todos los sistemas de archivos.
sugerencia
«/var/run/utmp» y «/var/log/wtmp» mantiene esa información de usuario. Ver login(1) y utmp(5).
Puede enviar mensajes a cualquiera que esté acreditado en el sistema con wall(1) así.
$ echo "We are shutting down in 1 hour" | wall
Guía de referencia de Debian 171 / 267
El punto de inicio para la identificación de los dispositivos tipo PCI (AGP, PCI-Express, CardBus, ExpressCard, etc.)
es la orden lspci(8) (preferentemente con la opción «-nn»).
Otra forma en la que puede identificar el hardware es leyendo el contenido de «/proc/bus/pci/devices» o
navegando por el árbol de directorios que cuelga de «/sys/bus/pci» (ver Sección 1.2.12).
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.
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.
Guía de referencia de Debian 172 / 267
La hora habitualmente se visualiza en la hora local en el sistema Debian pero el hardware y el sistema usa general-
mente la hora en UTC(GMT).
Si la hora del hardware está establecida en UTC, cambia la configuración a ”UTC=yes” en ”/etc/default/rcS”.
Lo siguiente reconfigura la zona horaria utilizada por el sistema Debian.
# dpkg-reconfigure tzdata
Si desea actualizar el tiempo del sistema a través de la red, piense en utilizar el servicio NTP con paquetes como
ntp, ntpdate y chrony.
sugerencia
En systemd para la sincronización de la hora a través de la red utilice systemd-timesyncd. Ver
systemd-timesyncd(8).
Ver lo siguiente.
sugerencia
ntptrace(8) del paquete ntp puede trazar una cadena de vuelta de los servidores NTP a la fuente primigenia.
Existen diferentes componentes para configura la consola de caracteres y las funcionalidades del sistema ncurses(3)
system features.
Si la entrada terminfo de xterm no funciona con una xterm que no es de Debian, cambie el tipo de terminal
cambiando «$TERM» de «xterm» a una versión con funcionalidades limitadas como «xterm-r6» al autenticarse en
el sistema Debian de forma remota. Para mayor información ver «/usr/share/doc/libncurses5/FAQ». «dumb»
es el mínimo común denominador para «$TERM».
Guía de referencia de Debian 173 / 267
La Arquitectura Avanzada de Sonido para Linux (Advanced Linux Sound Architecture, ALSA) proporciona los contro-
ladores de dispositivos de tarjetas de sonido en el actual Linux. ALSA tiene un modo de emulación para ser compatible
con el anterior Open Sound System (OSS).
El software de aplicación se puede configurar no solo para acceder directamente a los dispositivos de sonido, sino
también para acceder a ellos a través de algún sistema de servidor de sonido estandarizado. Actualmente, PulseAu-
dio, JACK y PipeWire se utilizan como sistema de servidor de sonido. Ver la Página Wiki de Debian sobre sonido
para estar actualizado.
Generalmente existe un motor de sonido común para los entorno de escritorio más populares. Cada motor de sonido
utilizado por la aplicación puede elegir conectarse a diferentes servidores de sonido.
sugerencia
Para comprobar el altavoz (speaker) utilice «cat /dev/urandom > /dev/audio» o speaker-test(1) (^C
para finalizar).
sugerencia
Si no obtiene sonido, su altavoz puede estar conectado a una salida en silencio. Alsamixer(1) en el paquete
alsa-utils le será útil para la configuración del volumen y el silencio.
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 -prefs
salvapantallas)
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
El mensaje de arranque del núcleo en «/var/log/dmesg» contiene el tamaño exacto de memoria disponible.
Te puede sorprender que «dmesg diga que existen 990 MB libres y free -k dice que solo hay 320 MB libres. Más de
600 MB de diferencia …».
No se preocupe por el gran tamaño de memoria «utilizada» y el pequeño tamaño de memoria «libre» en la
línea «Mem:», pero lea lo que hay debajo (675404 y 321780 en el ejemplo anterior) y relájese.
Para mi MacBook con 1GB=1048576k DRAM (el sistema de vídeo usa algo de esto), tengo lo siguiente.
informe tamaño
Tamaño total en dmesg 1016784k = 1GB - 31792k
Memoria libre en dmesg 990528k
Total en el intérprete de órdenes 997184k
Libre en el intérprete de órdenes 20256k (pero de forma efectiva 321780k)
Un mantenimiento inadecuado del sistema puede exponerlo a sufrir un ataque del exterior.
Para la seguridad y las comprobaciones de integridad, debe comenzar con lo que se muestra.
Cuadro 9.18: Relación de las herramientas de seguridad del sistema y comprobación de la integridad
He aquí un archivo de órdenes para comprobar el permiso de escritura incorrecto para todos.
# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
atención
Ya que el paquete debsums utiliza la comprobación mediante MD5 almacenado en local, no se puede con-
fiar plenamente en él como herramienta de auditoría de seguridad del sistema contra ataques maliciosos.
El arranque del sistema Linux con «live CDs« o CDs de instalación de debian en modo rescate hace que sea fácil
reconfigurar la información de almacenamiento en su dispositivo de arranque.
Es posible que debas desmontar(8) algunos dispositivos manualmente desde la línea de comandos antes de operar
en ellos si el sistema del escritorio GUI los monta automáticamente.
Guía de referencia de Debian 176 / 267
El uso de espacio en disco lo pueden evaluar los programas proporcionados por los paquetes mount, coreutils y
xdu:
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.
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 parti-
cionamiento del disco en el primer sector, es decir, LBA sector 0 (512 bytes).
Algunos ordenadores modernos con Interfaz de firmware extensible unificada (UEFI), incluidas los Mac basados en
Intel, usan Identificar la tabla de particiones única globalmente (partición GUID Table, GPT) esquema, partición del
disco duro los datos no se guardan en el primer sector.
Aunque fdisk(8) fue la herramienta estándar para el particionado del disco, se ha sustituido por parted(8).
Cuadro 9.19: Relación de paquetes para la gestión del particionado del disco
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)
([Link](8), mkfs.ext2(8), mkfs.ext3(8), mkfs.ext4(8), …) y resize2fs(8).
nota
Para realizar el cambio entre GPT y MBR, necesita eliminar el contenido de unos cuantos bloques ubicados al
principio (ver Sección 9.8.6) y utilice «parted /dev/sdx mklabel gpt» o «parted /dev/sdx mklabel
msdos» para asignarlo. Tenga en cuenta que «msdos» se utiliza para MBR.
Guía de referencia de Debian 177 / 267
Aunque la reconfiguración de tu partición o el orden de activación de los medios del almacenamiento extraíbles puede
dar lugar a diferentes nombres para las particiones, puede acceder a ellos de forma coherente. Esto también es útil
si tienes varios discos y tu BIOS/UEFI no les da nombres de dispositivo consistentes.
mount(8) con la opción «-U» permite montar dispositivos de bloque utilizando UUID, en lugar de sus nombres de
archivo como «/dev/sda3».
«/etc/fstab» (ver fstab(5)) puede utilizar UUID.
Los gestores de arranque (Sección 3.1.2) pueden utilizar también UUID.
sugerencia
Puede determinar el UUID de un dispositivo especial de bloque con blkid(8).
También puedes buscar el UUID y otra información con ”lsblk -f”.
9.6.4. LVM2
LVM2 es un gestor de volúmenes lógicos del núcleo de Linux. Con LVM2 las particiones de disco se pueden crear
en volúmenes lógicos en vez de discos duros físicos.
LVM necesita lo siguiente.
Por favor, para saber sobre LVM2 lea las siguiente páginas de manual.
lvm(8): Fundamentos del mecanismo LVM2 (relación de todas las órdenes LVM2)
[Link](5): archivo de configuración de LVM2
Las órdenes mkfs(8) y fsck(8) esta en el paquete e2fsprogs como interfaz de varios programas específicos del
sistema de archivos ([Link] y [Link]). 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.
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 [Link] wiki en btrfs. Se espera
que sea el siguiente sistema de archivos por defecto después del sistema de archivos ext4.
Algunas herramientas permiten el acceso al sistema de archivos sin soporte del núcleo de Linux (ver Sec-
ción 9.8.2).
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.
Guía de referencia de Debian 179 / 267
sugerencia
Puede ejecutar la orden fsck(8) de forma segura en todos los sistemas de archivos incluido el sistema de ar-
chivos raíz en el arranque activando «enable_periodic_fsck» en «/etc/[Link]» y el contador de
montajes máximo a 0 utilizando «tune2fs -c0 /dev/nombre_de_la_partición». Ver [Link](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/».
La configuración estática básica del sistema de archivos se realizan en «/etc/fstab». Por ejemplo,
«file system» «mount point» «type» «options» «dump» «pass»
proc /proc proc defaults 0 0
UUID=709cbe4c-80c1-56db-8ab1-dbce3146d2f7 / ext4 errors=remount-ro 0 1
UUID=817bae6b-45d2-5aca-4d2a-1267ab46ac23 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
sugerencia
UUID (ver Sección 9.6.3) puede utilizarse para identificar los dispositivos de bloque en lugar de los nombres de
los dispositivos de bloque como «/dev/sda1», «/dev/sda2», …
Desde Linux 2.6.30, el kernel utiliza por defecto el comportamiento proporcionado por la opción ”relatime”.
Ver fstab(5) y mount(8).
La caracterización del sistema de archivos se puede optimizar a través de su superbloque utilizando la orden tune2fs(8).
La ejecución de «sudo tune2fs -l /dev/hda1» muestra el contenido del sistema de archivos del superbloque
de «/dev/hda1».
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.
Guía de referencia de Debian 180 / 267
aviso
Por favor, compruebe su hardware y lea las páginas de manual de hdparm(8) antes de probar las configu-
raciones 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». Algu-
nos 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».
Puede monitorear y registrar el cumplimiento de su disco duro con SMART con el demonio smartd(8).
sugerencia
El demonio smartd(8) se puede personalizar mediante el archivo /etc/[Link] que incluye el modo de
notificación de las alertas.
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.
Guía de referencia de Debian 181 / 267
Las particiones creadas mediante el Gestor de Volúmenes Lógicos (Logical Volume Manager, LVM) (funcionalidad
de Linux) en el momento de la instalación, se pueden redimensionar de forma sencilla mediante la concatenación o
la extensión de estas sobre varios dispositivos de almacenamiento sin necesitar otras reconfiguraciones del sistema.
9.6.14. Expansión del espacio de almacenamiento útil mediante el montaje de otra parti-
ción
Si tiene una partición vacía (p. ej. «/dev/sdx»), puede darle formato con mkfs.ext4(1) y montarlo(8) en un
directorio donde necesite más espacio. (Necesitará copiar el contenido de los datos originales.)
$ sudo mv work-dir old-dir
$ sudo mkfs.ext4 /dev/sdx
$ sudo mount -t ext4 /dev/sdx work-dir
$ sudo cp -a old-dir/* work-dir
$ sudo rm -rf old-dir
sugerencia
También puede montar un archivo de imagen de disco vacío (ver Sección 9.7.5) como un dispositivo «loop« (ver
Sección 9.7.3). El uso actual del disco crece con los datos reales almacenados.
Si tiene un directorio vacío (p. ej. «/path/to/emp-dir») en otra partición con espacio utilizable, puede montar(8)lo
con la opción «--bind» a un directorio (p. ej., «work-dir») donde necesite más espacio.
$ sudo mount --bind /path/to/emp-dir work-dir
Si tiene espacio útil en otras particiones (p. ej. «/path/to/empty» y «/path/to/work»), puede crear un directorio
en él y juntarlo con el antiguo directorio (p. ej., «/path/to/old») donde necesita espacio usando el OverlayFS para
el kernel de Linux 3.18 o posterior (Debian Stretch 9.0 o nuevas).
$ sudo mount -t overlay overlay \
-olowerdir=/path/to/old-dir,upperdir=/path/to/empty,workdir=/path/to/work
Aquí, «/path/to/empty» y «/path/to/work» deben ser una partición con permiso RW para escribir en ”/path/to/old
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.
Guía de referencia de Debian 182 / 267
Si tiene un directorio vacío (p. ej., «/path/to/emp-dir») en otra partición con espacio utilizable, puede crear un
enlace simbólico a el directorio con ln(8).
$ sudo mv work-dir old-dir
$ sudo mkdir -p /path/to/emp-dir
$ sudo ln -sf /path/to/emp-dir work-dir
$ sudo cp -a old-dir/* work-dir
$ sudo rm -rf old-dir
aviso
No utilice «enlaces simbólicos a directorios« que gestionen el sistema como «/opt». Como enlace simbó-
lico se puede sobreescribir cuando se actualice el sistema.
El archivo de imagen de disco «[Link]», 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 [Link]
# dd if=/dev/sdb of=[Link]
La imagen de disco de un PC tradicional Registro de Arranque Maestro(MBR) (ver Sección 9.6.2) que está en el
primer sector del disco primario IDE puede hacerse mediante dd(1) lo siguiente.
# dd if=/dev/hda of=[Link] bs=512 count=1
# dd if=/dev/hda of=[Link] bs=446 count=1
# dd if=/dev/hda of=[Link] skip=446 bs=1 count=66
El archivo imagen del disco «[Link]» se puede escribir como un dispositivo sin montar, p. ej., el dispositivo SCSI
secundario «/dev/sdb» con el tamaño adecuado como se muestra.
# dd if=[Link] of=/dev/sdb
De forma parecida, el archivo imagen de la partición del disco, «[Link]» se puede escribir a una partición
desmontada, p. ej., la primera partición del segundo dispositivo SCSI «/dev/sdb1» con el tamaño correcto, como
se muestra.
# dd if=[Link] of=/dev/sdb1
Guía de referencia de Debian 183 / 267
La imagen del disco «[Link]» que contiene la imagen de una única partición se puede montar y desmontar
utilizándolo como dispositivo «loop« como aparece.
# losetup --show -f [Link]
/dev/loop0
# mkdir -p /mnt/loop0
# mount -t auto /dev/loop0 /mnt/loop0
...hack...hack...hack
# umount /dev/loop0
# losetup -d /dev/loop0
Cada partición de una imagen de disco «[Link]» que contiene varias particiones se pueden montar utilizando
los dispositivos «loop«.
# losetup --show -f -P [Link]
/dev/loop0
# ls -l /dev/loop0*
brw-rw---- 1 root disk 7, 0 Apr 2 22:51 /dev/loop0
brw-rw---- 1 root disk 259, 12 Apr 2 22:51 /dev/loop0p1
brw-rw---- 1 root disk 259, 13 Apr 2 22:51 /dev/loop0p14
brw-rw---- 1 root disk 259, 14 Apr 2 22:51 /dev/loop0p15
# fdisk -l /dev/loop0
Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1
De forma alternativa, se pueden conseguir los mismos efectos utilizando el mapeo de dispositivos de los dispositivos
creados por kpartx(8) del paquete kpartx como sigue.
# kpartx -a -v [Link]
add map loop0p1 (253:0): 0 3930112 linear 7:0 262144
Guía de referencia de Debian 184 / 267
Un archivo de imagen de disco, «[Link]» se puede limpiar de archivos borrados en una imagen dispersa limpia
«[Link]» así.
# mkdir old; mkdir new
# mount -t auto -o loop [Link] old
# dd bs=1 count=0 if=/dev/zero of=[Link] seek=5G
# mount -t auto -o loop [Link] new
# cd old
# cp -a --sparse=always ./ ../new/
# cd ..
# umount [Link]
# umount [Link]
Si «[Link]» es ext2, ext3 o ext4, también puede utilizar zerofree(8) del paquete zerofree como se muestra.
# losetup --show -f [Link]
/dev/loop0
# zerofree /dev/loop0
# cp --sparse=always [Link] [Link]
# losetup -d /dev/loop0
Guía de referencia de Debian 185 / 267
La imagen de disco vacío «[Link]» el cual puede crecer hasta 5GiB, pude hacerse mediante dd(1) como se
muestra.
$ dd bs=1 count=0 if=/dev/zero of=[Link] seek=5G
Para «[Link]», su tamaño de archivo es 5.0 GiB y su utilización real de disco es de sólo 83MiB. Esta discrepancia
es posible ya que ext4 se puede representar mediante un archivo disperso.
sugerencia
La utilización real de discos que utiliza un archivo disperso crece con los datos que son escritos en el.
Utilizando la misma operación en dispositivos creados por el dispositivo «loop« o el mapeador de dispositivos como
Sección 9.7.3, puede particionar esta imagen de disco «[Link]» utilizando parted(8) o fdisk(8) y puede crear
el archivo de sistemas en el utilizando mkfs.ext4(8), mkswap(8), etc.
El archivo de imagen ISO9660, «[Link]», utilizando como origen el árbol de directorios de «source_directory»
se puede hacer utilizando genisoimage(1) aportado por cdrkit como se muestra.
# genisoimage -r -J -T -V volume_id -o [Link] source_directory
De igual manera, el archivo imagen ISO9660 arrancable, «[Link]», se puede realizar desde el debian-installer
como el árbol de directorios del «source_directory» como se muestra.
# genisoimage -r -o [Link] -V volume_id \
-b isolinux/[Link] -c isolinux/[Link] \
-no-emul-boot -boot-load-size 4 -boot-info-table source_directory
Aquí el cargador de arranque Isolinux (ver Sección 3.1.2) 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 > [Link]
Guía de referencia de Debian 186 / 267
aviso
Debe evitar cuidadosamente el sistema de archivos ISO9660 debido al problema de lectura adelantada de
Linux para obtener el resultado correcto.
sugerencia
DVD es únicamente un CD de mayor tamaño que utiliza wodim(1) suministrado por cdrkit.
Entonces se inserta el CD-R vacío en el dispositivo CD, y el archivo de imagen ISO9660 , «[Link]» se escribe en
el dispositivo, p. ej. «/dev/hda», utilizando wodim(1) como se muestra.
# wodim -v -eject dev=/dev/hda [Link]
sugerencia
Si su sistema de escritorio monta automáticamente los CD, desmóntalo con «sudo umount /dev/hda» desde
la consola antes de utilizar wodim(1).
Si «[Link]» contiene una imagen ISO9660, entonces lo siguiente sirve para montarlo de forma manual en «/cdrom».
# mount -t iso9660 -o ro,loop [Link] /cdrom
sugerencia
Los sistemas de escritorio modernos pueden montar los medios extraíbles como un CD con formato ISO9660 de
forma automática (ver Sección 10.1.7).
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.
Cuadro 9.22: Relación de paquetes para manipular archivos sin montar el disco
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.
Cuadro 9.23: Relación de herramientas para añadir redundancia de datos a los archivos
Guía de referencia de Debian 188 / 267
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.
Cuando los datos son demasiado grandes para guardarlos en un único archivo, puede obtener una copia de seguridad
de su contenido dividiéndolo en, p. ej. trozos de 2000MiB y juntarlos más tarde para obtener el archivo original.
$ split -b 2000m large_file
$ cat x* >large_file
atención
Por favor, asegúrese que no tiene ningún archivo que comience por «x» para evitar fallos de nombrado.
Para limpiar el contenido de los archivos como los archivos de registro, no utilice rm(1) para borrarlo y crear uno
nuevo vacío, ya que puede intentar ser accedido entre ambas operaciones. La forma segura de limpiar el contenido
de un archivo es la que se muestra.
$ :>file_to_be_cleared
Guía de referencia de Debian 189 / 267
«[Link]» puede tener 0 bytes. Si existiera con anterioridad, su mtime es actualizado y su contenido y su
longitud permanecen sin cambios.
«[Link]» es siempre un archivo de 0 bytes. Si existía con anterioridad, su mtime es actualizado y
su contenido borrado.
Existen diferentes modos de borrar completamente la información de un disco duro como dispositivo, p. ej. una
memoria USB ubicada en «/dev/sda».
atención
Antes de ejecutar las órdenes que le vamos a mostrar, compruebe la ubicación de su memoria USB por
medio de mount(8). El dispositivo que indica «/dev/sda» puede ser un disco duro SCSI o serial-ATA que
contiene su sistema.
Borre todo el contenido del disco poniendo a 0 toda la información como se muestra.
# dd if=/dev/zero of=/dev/sda
Las áreas en desuso del disco duro (o de la memoria USB), p. ej. «/dev/sdb1» todavía pueden contener datos
borrados ya que solo han sido desligados del sistema de archivos. Estos se pueden limpiar sobrescribiendo.
Guía de referencia de Debian 190 / 267
aviso
Esto es generalmente suficiente para las memorias USB. Pero no es perfecto. La mayor parte de los nom-
bres de archivo borrados y sus atributos pueden estar ocultos y permanecer en el sistema de archivos.
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
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
Guía de referencia de Debian 191 / 267
Tanto «baz» como «foo» tiene una cuenta de «2« (>1) de forma que tiene enlaces duros. Sus números de inodos
son comunes «2738404«. Esto significa que son el mismo archivo mediante un archivo duro. Si no se encuentra
todos los enlaces duros por casualidad, puede buscarlos mediante el inodo, p. ej. «2738404« como sigue.
# find /path/to/mount/point -xdev -inum 2738404
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
Con acceso físico a su PC, cualquiera puede acceder como superusuario y acceder a todos los archivos en él (ver
Sección 4.6.4). Esto significa que el sistema de acceso por contraseña puede no asegurar sus datos delicados y
privados contra posibles ladrones de su PC. Para hacerlo debe desplegar alguna tecnología de cifrado de información.
Aunque GNU privacy guard (ver Sección 10.3) puede cifrar archivos , necesita de los esfuerzos del usuario.
Dm-crypt ayuda al cifrado automático de la información de forma nativa por medio de módulos del núcleo Linux con
el mínimo esfuerzo por parte del usuario usando device-mapper.
atención
El cifrado de datos gasta recursos de la CPU, etc. Los datos encriptados se vuelven inaccesibles si se
pierde su contraseña. Sopesa sus ventajas y sus costes.
nota
El sistema Debian entero puede instalarse en el disco cifrado por el instalador debian (lenny o más nuevo) utilizando
dm-crypt/LUKS y initramfs.
sugerencia
Ver Sección 10.3 para la utilización del cifrado del espacio de usuario: GNU Privacy Guard.
Guía de referencia de Debian 192 / 267
Puede cifrar el contenido de los dispositivos masivos extraíbles, p. ej. memoria USB en «/dev/sdx», utilizando
dm-crypt/LUKS. Simplemente formatéelo como se muestra.
# fdisk /dev/sdx
... "n" "p" "1" "return" "return" "w"
# cryptsetup luksFormat /dev/sdx1
...
# cryptsetup open /dev/sdx1 secret
...
# ls -l /dev/mapper/
total 0
crw-rw---- 1 root root 10, 60 2021-10-04 18:44 control
lrwxrwxrwx 1 root root 7 2021-10-04 23:55 secret -> ../dm-0
# [Link] /dev/mapper/secret
...
# cryptsetup close secret
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.
Muchas funcionalidades de Linux son configurables por medio de parámetros del núcleo como se muestra.
Guía de referencia de Debian 193 / 267
Los parámetros del núcleo las inicializa el cargador de arranque (ver Sección 3.1.2)
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)
Los parámetros de modprobe(8) se asignan como parámetros del módulo cuando se activa el módulo (ver Sec-
ción 9.7.3)
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.
La mayor parte de los programas normales no necesitan las cabeceras del núcleo y de hecho puede producir errores
si se utiliza directamente para compilar. Estos se deben compilar con las cabeceras en «/usr/include/linux»
y «/usr/include/asm» que están en el paquete libc6-dev (creado por el paquete fuente glibc) en el sistema
Debian.
nota
Para compilar algunos programas específicos del kernel, como los módulos del kernel de la fuente externa y
el contador automático de daemon (amd), debe incluir la ruta a las cabeceras del kernel correspondientes, por
ejemplo, ”-I/usr/src/linux-particular-version/include/”, en tu línea de comandos.
Debian tiene su propio método para compilar el núcleo y los módulos asociados.
Cuadro 9.26: Relación de los paquetes fundamentales para la recompilación del núcleo en los sistemas Debian
Si utiliza initrd en Sección 3.1.2, asegurese de leer la documentación asociada en initramfs-tools(8), update-init
mkinitramfs(8) y [Link](5).
Guía de referencia de Debian 194 / 267
aviso
No cree enlaces simbólicos en el árbol de directorios del código fuente (p. ej. «/usr/src/linux*») de
«/usr/include/linux» y «/usr/include/asm» cuando compile código fuente del núcleo de Linux.
(Algunos documentos sin actualizar lo sugieren.)
nota
Cuando compile el núcleo de Linux en el sistema Debian stable (estable), la utilización las últimas herramientas
retroportadas de Debian unstable (inestable) pueden ser necesarias.
module-assistant(8) (o su forma abreviada m-a) ayuda a los usuarios a construir e instalar fácilmente los
paquetes de los módulos para uno o más núcleos personalizados.
El soporte del núcleo a módulos dinámicos (dynamic kernel module support, DKMS) es un marco nuevo de distri-
bució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 ac-
tualice 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 [Link]
$ tar --xz -xvf [Link]
$ cd linux-version
$ cp /boot/config-version .config
$ make menuconfig
...
$ make deb-pkg
sugerencia
El paquete linux-source-version contiene el código fuente del núcleo de Linux con los parches de Debian como
«/usr/src/[Link].bz2».
Para la construcción de paquetes binarios concretos desde el paquete de código fuente del núcleo de Debian, puede
utilizar los objetivos «binary-arch_architecture_featureset_flavour» en «debian/[Link]».
$ sudo apt-get build-dep linux
$ apt-get source linux
$ cd linux-3.*
$ fakeroot make -f debian/[Link] binary-arch_i386_none_686
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 apor-
tado 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)
Ten en cuenta que el acceso a los paquetes de non-free-firmware lo proporcionan los medios de instalación
oficiales para ofrecer una experiencia de instalación funcional al usuario desde Debian 12 Bookworm. El área de
firmware no libre se describe en Sección 2.1.5.
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.
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.
Guía de referencia de Debian 196 / 267
Completa los paquetes del hardware de emulación como los instalados por el metapaquete games-emulator
Principalmente la emulación a nivel de la CPU con algunas emulaciones de dispositivos de E/S como QEMU
Principalmente la virtualización a nivel de CPU con algunas emulaciones de dispositivos de E/S como Máquina
virtual basada en kernel (KVM)
Virtualización de los contenedores a nivel del sistema operativo con soporte a nivel de kernel como LXC (Linux
Containers), Docker, systemd-nspawn(1), ....
Virtualización del acceso al sistema de archivos a nivel del sistema operativo con la anulación de la llamada a la
biblioteca del sistema en la ruta del archivo, como chroot
Virtualización del acceso al sistema de archivos a nivel del sistema operativo con la anulación de las llamada a la
biblioteca del sistema sobre la propiedad del archivo, como fakeroot
Emulación de API de SO como Wine
Virtualización a nivel del intérprete, además de la selección de la ejecución y anulaciones de las bibliotecas en el
tiempo de ejecución, como virtualenv y venv de Python
La virtualización de los contenedores utiliza Sección 4.7.5 y es la tecnología backend de Sección 7.7.
Aquí tienes algunos paquetes que te ayudarán a configurar el sistema virtualizado.
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.
nota
El núcleo de Debian por defecto soporta KVM desde lenny.
Crear un sistema de archivos vacío (un árbol de directorios o una imagen de disco).
• El árbol de directorios puede ser creado mediante «mkdir -p /ruta/al/entorno//chroot».
• El archivo de la imagen de disco en crudo puede ser creado con dd(1) (ver Sección 9.7.1 y Sección 9.7.5).
• qemu-img(1) se puede utilizar para crear y convertir archivos de imagen de disco utilizados por QEMU.
• Los formatos de archivo crudos y VMDK se pueden utilizar como formato común entre diferentes herramientas
de virtualización.
Monte la imagen de disco con mount(8) en el sistema de archivos (opcional).
• Para el archivo de imagen de disco crudo, móntelo como un dispositivo «loop« o mapeo de dispositivo (ver
Sección 9.7.3).
• Para el soporte de imágenes de disco por QEMU, móntelos como dispositivo de bloque de red (ver Sección 9.11.3).
Llene el sistema de archivos objetivo con la información del sistema.
• La utilización de programas como debootstrap y cdebootstrap ayudan en este proceso (ver Sección 9.11.4).
• Utilización de instaladores de los sistemas operativos en la emulación del sistema completo.
Guía de referencia de Debian 197 / 267
sugerencia
Puede exportar únicamente la primera partición de «[Link]» utilizando la opción «-P 1» de qemu-nbd(8).
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 [Link]
...
Guía de referencia de Debian 199 / 267
Puedes ver como debootstrap(8) rellena los datos del sistema para el entorno unstable bajo ”/srv/chroot/unstable
para un sistema de construcción mínimo.
Puedes acceder a este entorno utilizando schroot(1).
$ sudo schroot -v -c chroot:unstable-amd64-sbuild
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/[Link]”.
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.
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 gestio-
nar las máquinas virtuales KVM a través de libvirt.
La imagen de disco virtual «virtdisk.qcow2» que contiene una imagen del sistema Debian para QEMU se puede
crear utilizando el instalador debian: en pequeños CDs como se muestra.
$ wget [Link]
$ qemu-img create -f qcow2 virtdisk.qcow2 5G
$ qemu -hda virtdisk.qcow2 -cdrom [Link] -boot d -m 256
...
Guía de referencia de Debian 200 / 267
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 [Link]. propietarios virtualializado sobre
GNU/Linux.
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.
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).
Aquí esta un resumen de las herramientas de repositorio y compresión disponibles en un sistema Debian.
aviso
No asigne la variable «$TAPE» a menos que sepa sus consecuencias. Esta cambia el comportamiento
tar(1).
Cuando se realiza una compresión gzip de un archivo tar(1) se utiliza la extensión de archivo «.tgz» o «.[Link]».
La compresión xz de un archivo tar(1) utiliza la extensión de archivo «.txz» o «.[Link]».
Los métodos de compresión más populares entre las herramientas FOSS como tar(1) ha evolucionado como se
muestra: gzip → bzip2 → xz
cp(1), scp(1) y tar(1) puede tener alguna limitación con archivos especiales. Cpio(1) es más versátil.
cpio(1) esta diseñado para ser utilizado con find(1) y otras órdenes y archivos de órdenes para la creación de
copias de respaldo ya que la parte de selección de archivo del archivo de órdenes puede ser probado de forma
independiente.
La estructura interna de los archivos de información de Libreoffice son archivos «.jar» los cuales pueden incluso
abrirse con unzip.
La herramienta de archivo multiplataforma de facto es zip. Para conseguir la máxima compatibilidad utilícela
mediante «zip -rX». Si el tamaño del fichero es importante añada también la opción «-s».
Aquí hay un resumen de las herramientas de copia y respaldo disponibles en el sistema Debian.
La copia de archivos con rsync(8) aporta muchas más funcionalidades que otros.
el algoritmo de transferencia delta envía únicamente las diferencias entre los archivos de origen y los archivos que
hay en el destino
el algoritmo de comprobación rápido (quick check algorithm) (por omisión) busca los archivos que han cambiado
su tamaño o su fecha de última modificación
las opciones «--exclude» y «--exclude-from» son parecidas a las de tar(1)
la sintáxis de «una barra «/« en el directorio origen« evita la creación de un nivel de directorios adicional en el
destino
sugerencia
Las herramientas de sistemas de control de versiones (VCS) en Tabla 10.14 pueden operar como herramientas
de sincronización y copia en múltiples sentidos.
Guía de referencia de Debian 203 / 267
Aquí están algunas formas de archivar y desarchivar el contenido entero de un directorio «./origen» utilizando
diferentes herramientas.
GNU tar(1):
$ tar -cvJf [Link] ./source
$ tar -xvJf [Link]
cpio(1):
$ find ./source -xdev -print0 | cpio -ov --null > [Link]; xz [Link]
$ zcat [Link] | cpio -i
Aquí hay diferentes maneras de copiar el contenido completo de un directorio «./source» utilizando diferentes
herramientas.
rsync(8):
# cd ./source; rsync -aHAXSv . /dest
# cd ./source; rsync -aHAXSv . user@[Link]:/dest
GNU tar(1):
# (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
# (cd ./source && tar cf - . ) | ssh user@[Link] '(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.
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.
La orden find(1) se utiliza para la selección de archivos en combinación con las órdenes de archivado y copia (con-
sulte Sección 10.1.3 y Sección 10.1.4) o por xargs(1) (ver Sección 9.4.9). Esto se puede mejorar con la utilización
de los parámetros de la orden.
La sintaxis básica de find(1) se puede resumir en lo que se muestra.
La expresión «-print0» devuelve siempre un VERDADERO lógico e imprime el nombre de archivo completo
(finalizado con un null) por la salida estándar..
3. Excluye los archivos que encajan con las expresiones regulares «.*\.cpio» o «.*~» de la búsqueda sin
procesarlos
4. Excluye los directorios que encajan con la expresión regular de «.*/\.git» de la búsqueda sin procesarlas
5. Excluye los archivos cuyo tamaño es mayor de 99 Megabytes (en bytes 1048576 ) de la búsqueda sin procesarla
6. Imprime los nombres de los archivos que cumplen los criterios de búsqueda anteriores y son más nuevos que
«/path/to/timestamp»
Por favor, tenga el cuenta la forma en que se utiliza «-prune -o»para excluir los archivos en los ejemplos anteriores.
nota
Para sistemas no Debian tipo Unix, algunas opciones de find(1) pueden no estar disponibles. En ese caso,
por favor, considere ajustar los métodos de encaje y sustituya «-print0» con «-print». Puede que también
necesite ajustar las órdenes parecidas.
Cuando elija los medios de almacenamiento de información para el archivo de información importante, debe tener
cuidado con sus limitaciones. Para el respaldo de pequeñas cantidades de información personal, yo utilizo CD-R y
DVD-R de una compañía conocida y los almaceno en un lugar fresco, sin luz, seco y limpio. (El medio de archivo en
cinta parece una opción común en entornos profesionales).
nota
Un lugar resistente al fuego tiene sentido para documentos en papel. La mayor parte de los medios de alma-
cenamiento 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).
atención
Los datos que vida de los medios de almacenamiento y de los ciclos de escritura que hemos comentado no
se deben tener en cuenta para la toma de decisiones sobre almacenamiento de datos críticos. Por favor,
consulte la información especifica del producto que proporciona el fabricante.
sugerencia
Ya que los CD/DVD-R y el papel tienen únicamente un ciclo de escritura, impide de informa intrínseca la pérdida
de datos por sobreescritura. ¡Esto es una ventaja!
sugerencia
Si necesita copias de respaldo rápidas, frecuentes y de grandes cantidades de información, un disco duro en un
equipo remoto con una conexión de red rápida, puede ser la única opción real.
sugerencia
Si usas medios regrabables para tus copias de seguridad, usa un sistema de archivos como btrfs o zfs que admite
solo la lectura de las instantáneas pueden ser una buena idea.
USB
IEEE 1394 / FireWire
PC Card
Guía de referencia de Debian 208 / 267
Los entornos de escritorio modernos como GNOME y KDE pueden montar automáticamente estos dispositivos ex-
traíbles sin su entrada correspondiente en «/etc/fstab».
El paquete udisks2 proporciona un daemon (servicio) y utilidades asociadas para montar y desmontar estos
dispositivos.
D-bus crea los actos para iniciar automáticamente dicho proceso.
PolicyKit aporta los permisos necesarios.
sugerencia
Los dispositivos que se montan de forma automática pueden tener la opción de montaje «uhelper=» que lo utiliza
umount(8).
sugerencia
En los entornos de escritorio modernos el automontaje ocurre únicamente cuando el dispositivo no posee una
entrada en «/etc/fstab».
sugerencia
Puede que necesite proporcionar el tipo de codificación como una opción a la hora del montaje (ver Sección 8.1.3).
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.
Cuando comparte información con otro sistema por medio de un dispositivo de almacenamiento extraíble, podría
formatearlo en un sistema de archivos que tenga soporte en ambos sistemas. Aquí esta una relación de posibles
candidatos.
sugerencia
Consulte Sección 9.9.1 para la compartición de información entre plataformas utilizando cifrado a nivel de dispo-
sitivo.
El sistema de archivos FAT esta soportado por casi todos los sistemas operativos modernos y es bastante útil para
el intercambio de información por medio de un disco duro externo.
Cuando se formatea un disco duro externo con el sistemas de archivos FAT para compartir información entre dife-
rentes plataformas, lo siguiente podrían ser las opciones más seguras.
Guía de referencia de Debian 209 / 267
Cuadro 10.3: Relación de posibles sistemas de archivos para dispositivos de almacenamiento extraíbles con sus
casos de uso normales
Se particiona con fdisk(8), cfdisk(8) o parted(8) (ver Sección 9.6.2) en una única partición primaria y la
marcamos como se muestra.
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.
Guía de referencia de Debian 210 / 267
nota
La propia compañía Microsoft no recomienda el uso de FAT para dispositivos o particiones menores de 200 MB.
Microsoft resalta en su «Visión de conjunto de los sistemas de archivos FAT, HPFS y NTFS« su uso ineficiente del
espacio de disco. Sin duda en Linux habitualmente usaremos el sistema de archivos ext4.
sugerencia
Para más información acerca de sistemas de archivos y su uso, por favor lea «Cómo Sistemas de Archivos«.
Para compartir información con otros sistemas a través de internet, debería utilizar un servicio común. He aquí algunas
pistas.
Cuadro 10.4: Relación de los servicios de red disponibles con el escenario típico de utilización
Aunque los sistemas de archivos montados a través de la red pueden ser útiles, estos pueden ser inseguros. Sus
conexiones de red deben ser securos como se muestra.
Todos sabemos que los equipos fallan algunas veces o los errores humanos producen daños en el sistema o la infor-
mació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.
Guía de referencia de Debian 211 / 267
Existen tres factores que determinan la directriz de copia de seguridad y recuperación real.
• Copia de seguridad automática programada con cron job o systemd timer job
sugerencia
Puede recuperar la información de configuración debconf con «debconf-set-selections
debconf-selections» y la selección de información de dpkg con «dpkg --set-selection
<[Link]».
nota
No respalde el contenido de los pseudo sistemas de archivos ubicados en /proc, /sys, /tmp y /run (consulte
Sección 1.2.12 y Sección 1.2.13). A menos que sepa exactamente que está haciendo, estas ubicaciones contienen
grandes cantidades de información poco relevantes.
nota
Puede que quiera parar algunos demonios como MTA (ver Sección 6.2.4) mientras respalda su información.
He aquí una relación de las suites de copias de seguridad más importantes en un sistema Debian.
Mondo Rescue es un sistema de copias de seguridad centrado en realizar la restauración completa de un sistema
rápidamente desde una copia en CD/DVD etc. sin seguir el proceso normal de instalación del sistema.
Bacula, Amanda, y BackupPC son suites de utilidades de copia de respaldo con funcionalidad completa centradas
en la copias de seguridad regulares a través de la red.
Duplicity, y Borg son utilidades de copia de seguridad más sencillas para estaciones de trabajo típicas.
Para una estación de trabajo personal, las utilidades completas de la suite de copia de seguridad diseñadas para
el entorno de servidor pueden no servir bien. Al mismo tiempo, las utilidades de copia de seguridad existentes para
estaciones de trabajo pueden presentar algunas deficiencias.
He aquí algunos consejos para facilitar las copias de seguridad con el mínimo esfuerzo por parte del usuario. Estas
técnicas pueden utilizarse con cualquier utilidad de copia de seguridad.
Con propósito demostrativo, vamos a suponer que el usuario principal y el nombre de grupo es pingüino y crear
un ejemplo de script de copia de seguridad e instantánea ”/usr/local/bin/[Link]” como:
#!/bin/sh -e
SRC="$1" # source data path
DSTFS="$2" # backup destination filesystem path
DSTSV="$3" # backup destination subvolume name
DSTSS="${DSTFS}/${DSTSV}-snapshot" # snapshot destination path
if [ "$(stat -f -c %T "$DSTFS")" != "btrfs" ]; then
echo "E: $DESTFS needs to be formatted to btrfs" >&2 ; exit 1
fi
MSGID=$(notify-send -p "[Link] $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" "[Link] $DSTSV" "finished!"
Aquí, sólo se utiliza la herramienta básica rsync(1) para facilitar la copia de seguridad del sistema y el espacio de
almacenamiento lo utiliza eficientemente Btrfs.
sugerencia
Para su información: Este autor utiliza su propio script de shell similar ”bss: Btrfs Subvolume Snapshot Utility” para
su estación de trabajo.
A continuación se muestra un ejemplo para configurar la copia de seguridad con un solo clic de GUI.
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.
A continuación se muestra un ejemplo de configuración para la copia de seguridad automática activada por el hecho
de montar.
Prepara un dispositivo de almacenamiento USB que se utilizará para la copia de seguridad como en Sección [Link].
Crear un archivo de la unidad de servicio systemd ”~/.config/systemd/user/[Link]” como:
[Unit]
Description=USB Disk backup
Requires=media- %[Link]
After=media- %[Link]
[Service]
ExecStart=/usr/local/bin/[Link] %h/Documents /media/ %u/BKUP Documents
StandardOutput=append: %h/.cache/[Link]
StandardError=append: %h/.cache/[Link]
[Install]
WantedBy=media- %[Link]
Para cada acto de montar, se realiza una copia de seguridad de los datos desde ”~/Documents” a un dispositivo de
almacenamiento USB y se crea una instantánea de sólo lectura.
Aquí, los nombres de las unidades de montaje systemd que systemd tiene actualmente en memoria se pueden pedir
al gestor de servicios del usuario que llama con ”systemctl --user list-units --type=mount”.
A continuación se muestra un ejemplo de configuración para la copia de seguridad automática activada por la acción
del temporizador.
Prepara un dispositivo de almacenamiento USB que se utilizará para la copia de seguridad como en Sección [Link].
Crear un archivo de unidad de temporizador systemd ”~/.config/systemd/user/[Link]”
como:
Guía de referencia de Debian 215 / 267
[Unit]
Description=Run btrfs subvolume snapshot on timer
Documentation=man:btrfs(1)
[Timer]
OnStartupSec=30
OnUnitInactiveSec=900
[Install]
WantedBy=[Link]
[Service]
Type=oneshot
Nice=15
ExecStart=/usr/local/bin/[Link] %h/Documents /media/ %u/BKUP Documents
IOSchedulingClass=idle
CPUSchedulingPolicy=idle
StandardOutput=append: %h/.cache/[Link]
StandardError=append: %h/.cache/[Link]
Para cada acción del temporizador, se realiza una copia de seguridad de sus datos desde ”~/Documents” a un
dispositivo de almacenamiento USB y se crea una instantánea de sólo lectura.
Aquí, los nombres de las unidades de usuario del temporizador systemd que systemd tiene actualmente en memoria
se pueden pedir al gestor de servicios del usuario llamante con ”systemctl --user list-units --type=timer”.
Para el sistema de escritorio moderno, este enfoque systemd puede ofrecer un control más fino que los tradicionales
de Unix usando at(1), cron(8), o anacron(8).
He aquí las órdenes GNU Privacy Guard para la gestión básica de claves.
Aquí esta el significado de un código seguro.
Lo siguiente carga mi clave «1DD8D791» a un popular servidor de claves «hkp://[Link]».
$ gpg --keyserver hkp://[Link] --send-keys 1DD8D791
Guía de referencia de Debian 216 / 267
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 ID_de_usuario edición interactiva de la clave, «help« para obtener ayuda
gpg -o archivo --export exporta todas las claves a un archivo
gpg --import file importa todas las claves desde un archivo
gpg --send-keys user_ID envía la clave de un ID_de_usuario al servidor de claves
recibe claves del usuario ID_de_usuario desde el servidor de
gpg --recv-keys user_ID
claves
gpg --list-keys user_ID relación de las claves de ID_de_usuario
gpg --list-sigs user_ID relación de las firmas de ID_de_usuarios
gpg --check-sigs user_ID comprueba la firma de ID_de_usuario
gpg --fingerprint user_ID comprueba la huella del ID_de_usuario
gpg --refresh-keys actualiza el círculo de claves local
Cuadro 10.7: Relación de las órdenes GNU Privacy Guard par la gestión de claves
Un buen servidor de claves por defecto configurado en «~/.gnupg/[Link]» (o su ubicación antigua «~/.gnupg/optio
contiene lo siguiente.
keyserver hkp://[Link]
Existió un error en el Servidor de Claves Públicas OpenPGP (pre versión 0.9.6) el cual corrompía las claves con más
de dos subclaves. El nuevo paquete gnupg (>1.2.1-2) pueden gestionar estas subclaves corruptas. Consulte gpg(1)
bajo la opción «--repair-pks-subkey-bug».
Aquí están los ejemplos de utilización de las órdenes GNU Privacy Guard sobre archivos.
orden descripción
gpg -a -s archivo archivo de firma en ASCII del [Link] blindado
gpg --armor --sign archivo ,,
gpg --clearsign archivo mensaje sin firmar
gpg --clearsign archivo|mail
envía un mensaje de correo sin firmar a foo@[Link]
foo@[Link]
gpg --clearsign
parche sin firmar
--not-dash-escaped parche
gpg --verify archivo comprueba un archivo sin firmar
gpg -o [Link] -b archivo crea un firma objetivo
gpg -o [Link] --detach-sign
,,
file
gpg --verify [Link]
comprueba el archivo con [Link]
archivo
gpg -o archivo_cifrado.gpg -r intento de cifrado con clave pública para el nombre del archivo
nombre -e archivo al arhivo binario archivo_cifrado.gpg
gpg -o archivo_cifrado.gpg
--recipient nombre --encrypt ,,
archivo
gpg -o archivo_cifrado.asc -a intento de cifrado con clave pública para el nombre del archivo
-r name -e archivo al archivo blindado ASCII archivo_cifrado.asc
gpg -o archivo_cifrado.gpg -c
cifrado simétrico de archivo a archivo_cifrado_gpg
archivo
gpg -o archivo_cifrado.gpg
,,
--symmetric archivo
gpg -o archivo_cifrado.asc -a intento del cifrado simétrico para el nombre desde el archivo
-c archivo fuente al archivo blindado en ASCII archivo_cifrado.asc
gpg -o archivo -d
Descifrado
archivo_cifrado.gpg -r name
gpg -o file --decrypt
,,
archivo_cifrado.gpg
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
El plugin gnupg permite ejecutar GnuPG de forma transparente para los archivos con extensiones ”.gpg”, ”.asc”,
y ”.pgp”.3
$ sudo aptitude install vim-scripts
$ echo "packadd! gnupg" >> ~/.vim/vimrc
md5sum(1) proporciona la funcionalidad de hacer resúmenes de un archivo utilizando el método descrito en rfc1321
y verificar cada archivo con él.
$ md5sum foo bar >baz.md5
$ cat baz.md5
d3b07384d113edec49eaa6238ad5ff00 foo
c157a79031e1c40f85931829bc5fc552 bar
$ md5sum -c baz.md5
foo: OK
bar: OK
nota
La computación de la suma MD5 es menos intensiva en CPU que la de firma criptográfica de GNU Privacy Guard
(GnuPG). Normalmente, solo los archivos resumen de alto nivel están firmados criptologicamente para asegurar
la integridad de la información.
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 [Link]' 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 [Link] 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 directa-
mente la frase de la contraseña en él..
Existen múltiples herramientas para el código fuente. Las siguientes órdenes llamaron mi atención.
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 [Link] [Link] > file.patch0
$ diff -u old/file new/file > file.patch1
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
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 [Link] [Link] [Link]
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 [Link] [Link] [Link] [Link]
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 [Link] .
Aquí hay algunos paquetes relacionados con 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 [Link] "Name Surname"
$ git config --global [Link] yourname@[Link]
Si esta acostumbrado a utilizar órdenes Subversion o CVS, puede que quiera crear algunos alias de orden como se
muestra.
$ git config --global [Link] "commit -a"
$ git config --global [Link] checkout
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.
◦ El comando git pull ejecuta el comando git merge o git rebase después del comando git fetch.
◦ 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)
◦ 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 [Link] true y esto puede ser válido para el resto de nosotros.)
El repositorio remoto que contiene los archivos confirmados.
Guía de referencia de Debian 222 / 267
• 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.
aviso
No utilice etiquetas con caracteres blancos a pesar de que algunas herramientas permiten su utilización
como gitk(1). Puede provocar errores en otras órdenes git.
atención
Si una rama local que se ha enviado a un repositorio remoto se reubica o aplasta, enviar esta rama tiene
riesgos y requiere la opción --force. Por lo general, esto no es aceptable para la rama main, pero puede
ser aceptable para una rama temática antes de fusionarse con la rama main.
atención
Llamar una suborden git directamente como «git-xyz» desde la línea de órdenes se ha declarado
obsoleto desde principios de 2006.
Guía de referencia de Debian 223 / 267
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.
Ver lo siguiente.
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.
Tipo de
paquete popularidad tamaño herramienta comentario
CVS
mercurial V:5, I:32 2019 Mercurial distribuido DCVS escrito en Python y algo en C
DCVS con notación algebraica
darcs V:0, I:5 34070 Darcs distribuido
inteligente (lento)
GNU DVCS influenciado por tla, escrito
bzr I:8 28 distribuido
Bazaar en Python (historic)
DVCS principalmente por Tom Lord
tla V:0, I:1 1022 GNU arch distribuido
(histórico)
«CVS bien hecho«, nuevo estándar
subversion V:13, I:72 4837 Subversion remoto
CVS remoto (histórico)
estándar remoto anterior VCS
cvs V:4, I:30 4753 CVS remoto
(histórico)
Visualización GUI del árbol de
tkcvs V:0, I:1 1498 CVS, … remoto repositorios VCS (CVS, Subversion,
RCS)
rcs V:2, I:13 564 RCS local «Unix SCCS bien hecho« (histórico)
cssc V:0, I:1 2044 CSSC local clon de Unix SCCS (histórico)
Cuadro 10.14: Lista de otras herramientas del sistema del control de las versiones
Guía de referencia de Debian 225 / 267
Capítulo 11
Conversión de datos
Los siguientes paquetes para la conversión de información en formato texto llamaron mi atención.
palabra
paquete popularidad tamaño descripción
clave
conversor de la codificación de texto entre
V:917, conjunto de
libc6 12988 configuraciones locales mediante iconv(1)
I:999 caracteres
(fundamental)
conjunto de conversor de codificaciones de texto entre
recode V:2, I:18 602 caracte- configuraciones locales (versátil, con más
res+eol funcionalidades y alias)
conjunto de conversor de codificaciones de texto entre
konwert V:1, I:48 134
caracteres configuraciones locales (sofisticado)
conjunto de traductor del conjunto de caracteres para el
nkf V:0, I:9 360
caracteres japonés
conjunto de
tcs V:0, I:0 518 traductor de conjunto de caracteres
caracteres
conjunto de cambia las letras acentuadas por su equivalente
unaccent V:0, I:0 35
caracteres sin acentuar
conversor entre formatos de texto entre DOS y
tofrodos V:1, I:17 51 eol
Unix: fromdos(1) y todos(1)
conversor de formatos de texto entre Macintosh y
macutils V:0, I:0 312 eol
Unix: frommac(1) y tomac(1)
sugerencia
iconv(1) es parte del paquete libc6 y esta siempre disponible en prácticamente el cualquier sistema tipo Unix
para la conversión de codificaciones de caracteres.
Guía de referencia de Debian 226 / 267
Puede convertir las codificaciones de los archivos de texto con iconv(1)como se muestra.
$ iconv -f encoding1 -t encoding2 [Link] >[Link]
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».
nota
Algunas codificaciones son únicamente usadas para la conversión de información y no son usables como valores
locales (Sección 8.1).
Para los conjuntos de caracteres que caben en un único byte como ASCII y ISO-8859, la codificación de caracteres
es casi lo mismo que el conjunto de caracteres.
Para los conjuntos de caracteres con muchos elementos como JIS X 0213 en el japonés o Conjunto de Caracteres
Universal (UCS, Unicode, ISO-10646-1) en prácticamente cualquier lenguaje, existen muchos esquemas de codifi-
cació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
Guía de referencia de Debian 227 / 267
En este caso existe un diferenciación clara entre el conjunto de caracteres y la codificación de caracteres
Algunos proveedores en algunos casos utilizan la página de códigos como sinónimo de la tabla de codificación de
caracteres.
nota
Tener en cuenta que la mayor parte de los sistemas de codificación comparten los mismos códigos con ASCII de
7 bits. Pero existen algunas excepciones. Si se convierten programas antiguos japoneses en C y datos URL de
la codificación conocida como formato shift-JIS a formato UTF-8, usar «CP932» como nombre de la codificación
en lugar de «shift-JIS» para obtener los resultados correctos: 0x5C → «\» y 0x7E → «~». De otro modo se
convertirán a los caracteres incorrectos.
sugerencia
recode(1) se puede también usar y aporta mayor funcionalidad que la combinación de iconv(1), fromdos(1),
todos(1), frommac(1) y tomac(1). Para más información, ver «info recode».
Puede comprobar si un archivo de texto está codificado en UTF-8 con iconv(1) como se muestra.
$ iconv -f utf8 -t utf8 [Link] >/dev/null || echo "non-UTF-8 found"
sugerencia
Utilizar la opción «--verbose» en el ejemplo anterior para determinar el primer carácter que no pertenece a UTF-
8.
Aquí hay un archivo de órdenes de ejemplo de conversión de los nombres de archivos creados en un sistema ope-
rativo 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.
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) y copie el contenido completo a otro sistema de archivos montado como UTF-8 con la orden «cp -a».
Guía de referencia de Debian 228 / 267
codificación
plataforma control decimal hexadecimal
de EOL
Debian (unix) LF ^J 10 0A
MSDOS y Windows CR-LF ^M^J 13 10 0D 0A
Macintosh CR ^M 13 0D
El formato de archivo de texto, concretamente el código de final de línea (EOL) depende de la plataforma.
,Los programas de conversión del formato EOL fromdos(1), todos(1), frommac(1) y tomac(1), son muy útiles.
Recode(1) también es muy útil.
nota
Algunos datos del sistema Debian, como las páginas wiki del paquete python-moinmoin utilizan el estilo de
MSDOS usando como EOL la combinación CR-LF. Así es que lo anterior es solo una regla general.
nota
La mayor parte de los editores (p [Link], emacs, gedit, …) gestionan de forma transparente el estilo EOL de
MSDOS.
sugerencia
La utilización de «sed -e '/\r$/!s/$/\r/'» en lugar de todos(1) es mejor si quiere unificar el uso de EOL
de los estilos MSDOS y Unix. (p. ej. tras mezclar dos archivos MSDOS con diff3(1).) Esto se debe a que todos
añade CR a todas las líneas.
Cuadro 11.4: Relación de las órdenes de conversión de tabuladores de los paquetes bsdmainutils y coreutils
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.
Guía de referencia de Debian 229 / 267
Un antiguo archivo de texto Unix de Europa occidental «[Link]» almacenado con la codificación latin1 (iso-
8859-1) se puede editar con vim como se muestra.
$ vim [Link]
Esto es debido al mecanismo de autodetección de la codificación del archivo en vim que asume por defecto UTF-8
y si falla asume que será latin1.
Un antiguo archivo de texto polaco en Unix, «[Link]», almacenado en la codificación latin2 (iso-8859-2) se
puede editar con vim como se muestra.
$ vim '+e ++enc=latin2 [Link]'
Un antiguo fichero de texto Unix en japonés, «[Link]», almacenado con la codificación eucJP se puede editar
con vim como se muestra.
$ vim '+e ++enc=eucJP [Link]'
Un archivo de texto MS-Windows antiguo en japonés, «[Link]», almacenado con la codificación shift-JIS
(concretamente: CP932) se puede editar con vim como se muestra.
$ vim '+e ++enc=CP932 ++ff=dos [Link]'
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 [Link]».
Por favor para más información sobre el «soporte de texto multibyte« consulte [Link] en la ayuda de vim y Ta-
bla 11.2 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.
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 [Link] >textfile
De igual forma, puede extraer información en texto plano desde otros formatos como se muestra.
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 [Link].
«¿Qué es XML?«
«¿Qué es XSLT?«
«¿Qué es XSL-FO?«
«¿Qué es XLink?«
Guía de referencia de Debian 230 / 267
palabra
paquete popularidad tamaño función
clave
conversor de HTML a texto con la orden «w3m
w3m V:15, I:187 2837 html→text
-dump»
conversor avanzado de HTML a texto (ISO
html2text V:3, I:53 243 html→text
8859-1)
conversor de HTML a texto con la orden «lynx
lynx V:25, I:344 1948 html→text
-dump»
conversor de HTML a texto con la orden
elinks V:3, I:20 1654 html→text
«elinks -dump»
Conversor de HTML a texto con la orden «links
links V:3, I:28 2314 html→text
-dump»
conversor de HTML a texto con la orden
links2 V:1, I:12 5492 html→text
«links2 -dump»
catdoc V:14, I:155 686 MSWord→text,TeX
convierte archivos MSWord a texto plano o TeX
antiword V:1, I:7 589 MSWord→text,ps
convierte archivos MSWord a texto plano o ps
borra las etiquetas de marcado de un archivo
unhtml V:0, I:0 40 html→text
HTML
odt2txt V:2, I:40 60 odt→texto conversor de Texto OpenDocument a texto
Cuadro 11.5: Relación de las herramientas para extraer información en texto plano
palabra
paquete popularidad tamaño descripción
clave
Vim MACRO para convertir código fuente a
vim-runtime V:18, I:395 36525 highlight HTML con «:source
$VIMRUNTIME/syntax/[Link]»
convierte un programa en lenguaje C a latext y
cxref V:0, I:0 1190 c→html
HTML
convierte varios códigos fuentes a TeX (lenguaje
src2tex V:0, I:0 622 highlight
C)
convierte varias códigos fuente a HTML, XHTML,
source-highlight
V:0, I:5 2114 highlight LaTeX, Texinfo, secuencias de escape de color
ANSI y archivos DocBook con resaltado (C++)
convierte varios códigos fuente a archivos HTML,
highlight V:0, I:5 1371 highlight XHTML, RTF, LaTeX, TeX o XSL-FO con
resaltado (C++)
grc V:0, I:5 208 texto→color coloreado genérico para todo (Python)
texto→cualquier
pandoc V:9, I:45 194495 conversor general «markup« (Haskell)
cosa
python3-docutils texto→cualquier
formateador de documentos de Texto
V:14, I:51 1804
cosa ReStructurado a XML (Python)
Formateador de documentos de texto Markdown
markdown V:0, I:9 58 texto→html
en (X)HTML (Perl)
texto→cualquier
formateador de documentos de texto AsciiDoc a
asciidoctor V:0, I:7 98
cosa XML/HTML (Ruby)
texto→cualquier
Sistema de publicación de documentos basado
python3-sphinx V:6, I:24 2756
cosa en ReStructured Text (Python)
Sistema de publicación de sitios estáticos basado
hugo V:0, I:5 78678 texto→html
en Markdown (Go)
El código XML tiene la apariencia de HTML. Nos permite obtener diferentes formatos de un documento. Un sistema
sencillo de XML es el paquete docbook-xsl, que utilizamos aquí.
Todo archivo XML comienza con una declaración estándar XML como se muestra.
<?xml version="1.0" encoding="UTF-8"?>
Mientras que otros añaden marcas, XML necesita cambios menores al utilizar entidades predefinidas para los si-
guientes caracteres.
atención
«<» o «&» no se pueden utilizar en los atributos y elementos.
nota
Cuando se utilizan entidades definidas por el usuario, p. ej. «&alguna_etiqueta:», la primera definición preva-
lece sobre las demás. La definición de la entidad se realiza como «<!ENTITY alguna-etiqueta «valor de
la entidad«>».
nota
Ya que las marcas XML se realizan de forma coherente con un cierto conjunto de etiquetas (y alguna información
en su contenido y atributos), la conversión a otro XML es un procedimiento trivial utilizando Transformaciones del
Lenguaje de Estilo Extensibles (XSLT, Extensible Stylesheet Language Transformations).
Guía de referencia de Debian 232 / 267
Existen muchas herramientas para procesar archivos XML como el Lenguaje de Estilos Extensible (XSL, the Exten-
sible Stylesheet Language).
Principalmente, una vez que tenga un archivo XML bien formado, puede convertirlo en cualquier otro formato utili-
zando 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.
palabra
paquete popularidad tamaño descripción
clave
Documento de definición de XML (DTD) para
docbook-xml I:403 2134 xml
DocBook
Hojas de estilos XSL para procesar documentos
docbook-xsl V:13, I:146 14851 xml/xslt XML DocBook a diferentes formatos de salida
con XSLT
procesador de línea de órdenes XSLT (XML →
xsltproc V:16, I:79 162 xslt
XML, HTML, texto plano, etc.)
xmlto V:1, I:14 130 xml/xslt conversor de XML a cualquier cosa con XSLT
fop V:0, I:11 284 xml/xsl-fo convierte archivos XML Docbook a PDF
convierte archivos Docbook a documentos DVI,
dblatex V:2, I:10 4636 xml/xslt
PostScript, PDF con XSLT
dbtoepub V:0, I:0 37 xml/xslt conversor DocBook XML a .epub
Ya que XML es un subconjunto del Lenguaje Estándar de Marcas Generalizado (SGML), puede ser procesado por
cualquier herramienta para SGML, como Lenguaje de Especificación y Semántica de Documentos de Estilo (DSSSL,
Document Style Semantics and Specification Language).
palabra
paquete popularidad tamaño descripción
clave
ISO/IEC 10179:1996 procesador de estándar
openjade V:1, I:26 1061 dsssl
DSSSL (más actualizado)
Hojas de estilo DSSSL para el procesamiento de
docbook-dsssl V:0, I:13 2605 xml/dsssl documentos XML DocBook a diferentes formatos
de salida con DSSSL
utilidades para archivos DocBook incluyendo la
conversión a otros formatos (HTML, RTF, PS,
docbook-utils V:0, I:9 287 xml/dsssl
man, PDF) con las órdenes docbook2* con
DSSSL
conversor de SGML y XML usando hojas de
sgml2x V:0, I:0 90 SGML/dsssl
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.
Guía de referencia de Debian 233 / 267
Puedes extraer los datos HTML o XML de otros formatos utilizando los siguientes.
palabra
paquete popularidad tamaño descripción
clave
páginas
man2html V:0, I:1 142 conversor de páginas man a HTML (soporte CGI)
man→html
doclifter I:0 472 troff→xml conversor de troff a DocBook XML
texi2html V:0, I:5 1847 texi→html conversor de Texinfo a HTML
info2www V:1, I:2 74 info→html conversor de GNU info a HTML (soporte CGI)
conversor de documentos de Microsoft Word a
wv V:0, I:4 733 MSWord→cualquiera
HTML, LaTeX, etc.
unrtf V:0, I:3 148 rtf→html conversor de documentos de RTF a HTML, etc
archivos WordPerfect 5.0 y 5.1 a TeX, LaTeX,
wp2x V:0, I:0 200 WordPerfect→cualquiera
troff, GML y HTML
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.
Una vez que se genera el apropiado XML, puede utilizar la tecnología XSLT para extraer información basándose el
contexto de marcas, etc.
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.
Guía de referencia de Debian 234 / 267
palabra
paquete popularidad tamaño descripción
clave
El sistema de composición tipográfica TeX, para
texlive V:2, I:35 56 (La)TeX
previsualización e impresión
groff V:2, I:36 20720 troff sistema para dar formato al texto GNU troff
Tradicionalmente, roff es el sistema principal de Unix para la composición tipográfica. Consulte roff(7), groff(7),
groff(1), grotty(1), troff(1), groff_mdoc(7), groff_man(7), groff_ms(7), groff_me(7), groff_mm(7) y
«info groff».
Puede leer o imprimir un buen tutorial y referencia en ”-me” macro en ”/usr/share/doc/groff/” instalando el
paquete groff.
sugerencia
Con «groff -Tascii -me -» se obtiene una salida en texto plano con códigos de escape ANSI. Si lo que
quiere son páginas man con muchos «^H« y «_«, utilice en su lugar«GROFF_NO_SGR=1 groff -Tascii -me
-».
sugerencia
Para eliminar los «^H« y «_« del archivo de texto que groff ha generado, fíltrelo con «col -b -x».
11.3.2. TeX/LaTeX
El software TeX Live contiene un sistema completo del sistema TeX. El metapaquete texlive aporta un selección
apropiada de paquetes TeX Live que cumplirá decentemente la mayor parte de las tareas.
Hay disponibles numerosas referencias a TeX y LaTeX.
texdoc(1)
texdoctk(1)
«El libro de TeX«, de Donald E. Knuth, (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.
Guía de referencia de Debian 235 / 267
Cuando los documentos se vuelven grandes, algunas veces TeX puede fallar. Debe incrementar el tamaño de los re-
cursos compartidos en «/etc/texmf/[Link]» (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 [Link] sitio tex-archivo para [Link]. 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!
Puede imprimir una página manual en PostScript con una de las órdenes que se muestran.
$ man -Tps some_manpage | lpr
Aunque es posible escribir una página de man en formato troff plano, existen algunos paquetes que ayudan a crearla.
palabra
paquete popularidad tamaño descripción
clave
SGML→página
docbook-to-man V:0, I:8 191 conversor de SGML DocBook en macros man roff
man
text→página
help2man V:0, I:7 542 generador de página man automático con --help
man
info→página
info2man V:0, I:0 134 conversor de GNU info a POD o páginas man
man
text→página conversor de texto ASCII plano a formato de
txt2man V:0, I:0 112
man página man
En el sistema Debian la información imprimible se realizan en formato PostScript. El Sistema de Impresión Común
de Unix (CUPS) utiliza Ghostscript como motor de representación para impresoras que no reconocen PostScript.
Los datos imprimibles también pueden expresarse en formato PDF en el reciente sistema Debian.
Los archivos PDF pueden visualizarse y las entradas de sus formularios pueden rellenarse utilizando herramientas
de visualización GUI como Evince y Okular (ver Sección 7.4); y navegadores modernos como Chromium.
Los archivos PDF pueden editarse con algunas herramientas gráficas como LibreOffice, Scribus y Inkscape (ver
Sección 11.6).
Guía de referencia de Debian 236 / 267
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 representa-
ción.
sugerencia
«gs -h» puede mostrar la configuración de Ghostscript.
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=[Link] -f [Link] [Link]
$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=[Link] -f [Link] [Link]
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.
Los siguientes paquetes contienen utilidades para la impresión que considero importantes.
Guía de referencia de Debian 237 / 267
palabra
paquete popularidad tamaño descripción
clave
V:152, Utilidades PDF : pdftops, pdfinfo,
poppler-utils 728 pdf→ps,texto,…
I:471 pdfimages, pdftotext, pdffonts
herramientas de conversión de documentos
psutils V:4, I:67 219 ps→ps
PostScript
poster V:0, I:3 57 ps→ps crea póster grandes de páginas PostScript
texto→ps, convierte texto ASCII a PostScript, HTML, RTF o
enscript V:1, I:14 2130
html, rtf una impresión bonita
conversor de «cualquier formato a PostScript« e
a2ps V:0, I:10 3979 texto→ps
impresión bonita
herramienta de conversión de documentos PDF:
pdftk I:37 28 pdf→pdf
pdftk
html2ps V:0, I:2 261 html→ps conversor de HTML a PostScript
gnuhtml2latex V:0, I:0 27 html→latex conversor de html a latex
conversor de documentos LaTeX a RTF la cual
latex2rtf V:0, I:4 495 latex→rtf
puede ser leído por MS Word
conversor de PostScript a EPS (PostScript
ps2eps V:2, I:42 95 ps→eps
encapsulado)
conversor de texto a PostScript con soporte a la
e2ps V:0, I:0 109 texto→ps
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 vector
pdf2svg V:0, I:3 32 pdf→svg
escalable (Scalable vector graphics)
pdftoipe V:0, I:0 65 pdf→ipe conversor de PDF a formato XML IPE
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
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.
palabra
paquete popularidad tamaño descripción
clave
shar(1), unshar(1), uuencode(1),
sharutils V:2, I:36 1415 mail
uudecode(1)
codifica y decodifica los mensajes MIME:
mpack V:1, I:11 108 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.
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).
El formato de almacenamiento estándar de correo es mbox según RFC2822 (actualizado por el RFC822). Consulte
mbox(5) (es proporcionado por el paquete mutt).
En las lenguas europeas normalmente se utiliza en el correo la «Content-Transfer-Encoding: quoted-printable»
con el juego de caracteres ISO-8859-1 ya que no existen muchos de los caracteres de 8 bits. SI el texto europeo
esta codificado en UTF-8, «Content-Transfer-Encoding: quoted-printable» se usa como la mayor parte
de la información en 7 bits.
Guía de referencia de Debian 239 / 267
nota
Si su información de correo no Unix se accede desde un cliente que no es de Debian, con soporte de IMAP4,
puede moverlo desplegando su propio servidor IMAP4.
nota
Si utiliza otros formatos de almacenamiento de correo, moverlos al formato mbox es un buen comienzo. Un cliente
versátil como mutt(1) puede ser útil para ello.
Puede partir el contenido del buzón de correo en mensajes utilizando procmail(1) y formail(1).
Cada mensaje de correo se puede desempaquetar utilizando munpack(1) del paquete mpack (u otra herramienta
especializada) para obtener el contenido codificado con MIME.
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 Intercambia-
ble (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.
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.
sugerencia
Busque más herramientas de imágenes utilizando aptitude(8) con la expresión regular
«~Gworks-with::image» (consulte Sección 2.2.6).
Me llamaron la atención los siguientes paquetes para las herramientas de organización, edición y conversión de
datos gráficos GUI.
Guía de referencia de Debian 240 / 267
palabra
paquete popularidad tamaño descripción
clave
design-desktop-graphics svg, jpeg,
I:0 13 meta paquete para diseñadores gráficos
…
education-graphics svg, jpeg, meta paquete para la enseñanza de gráficos y
I:0 30
… arte pictórico.
open-font-design-toolkit metapaquete para el diseño de tipos de letra
I:0 9 ttf, ps, …
abiertos
palabra
paquete popularidad tamaño descripción
clave
imagen GNU GIMP Programa de Manipulación de
gimp V:50, I:252 19304
(bitmap) Imágenes
imagen Interfaz GTKbasado en X11 para SANE (Acceso
xsane V:12, I:144 2339
(bitmap) inmediato y fácil a escáner)
scribus V:1, I:16 31345 ps/pdf/SVG/… Scribus editor de documentos
libreoffice-draw imagen
V:72, I:430 10312 LibreOffice office suite - dibujo
(vector)
imagen
inkscape V:15, I:112 99800 editor SVG (Scalable Vector Graphics)
(vector)
imagen
dia V:2, I:22 3741 editor de diagramas (Gtk)
(vector)
imagen facilidad para la creación interactiva de figuras en
xfig V:0, I:11 7849
(vector) X11
gocr V:0, I:7 540 imagen→textosoftware libre OCR
eog V:64, I:277 7770 imagen(Exif) programa visor de gráficos «Eye of GNOME«
gthumb V:3, I:16 5032 imagen(Exif) visor y navegador de imágenes (GNOME)
geeqie V:4, I:15 2522 imagen(Exif) visor de imágenes utilizando GTK
shotwell V:17, I:255 6263 imagen(Exif) organizador de fotos digital (GNOME)
gwenview V:33, I:106 11755 imagen(Exif) visor de imágenes (KDE)
aplicaciones KDE para soporte de cámaras
kamera I:105 998 imagen(Exif)
digitales
aplicación para la gestión de fotos digitales para
digikam V:1, I:9 293 imagen(Exif)
KDE
mesa de luz y cuarto oscuro virtuales para
darktable V:4, I:13 30554 imagen(Exif)
fotógrafos
hugin V:0, I:8 5208 imagen(Exif) agrupador de fotografías panorámicas
librecad V:1, I:15 8963 DXF, ... Editor de datos CAD en 2D
freecad I:18 36 DXF, ... Editor de datos CAD en 3D
blend, TIFF,
blender V:3, I:28 84492 editor de animaciones 3D etc
VRML, …
ms3d, obj,
mm3d V:0, I:0 3881 editor OpenGL de modelado 3D
dxf, …
fontforge V:0, I:6 3993 ttf, ps, … editor de 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
Me llamaron la atención los siguientes paquetes para las herramientas de conversión, edición y organización de
datos gráficos CLI.
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).
Puede extraer la información de formato RPM como se muestra.
$ rpm2cpio [Link] | cpio --extract
Guía de referencia de Debian 242 / 267
palabra
paquete popularidad tamaño descripción
clave
imagen
imagemagick I:317 74 programa de manipulación de imágenes
(bitmap)
imagen programas de manipulación de imágenes
graphicsmagick V:1, I:11 5565
(bitmap) (bifurcaciones de imagemagick)
imagen
netpbm V:28, I:326 8526 herramienta de conversión de gráficos
(bitmap)
convertir Formato de archivo de imagen de alta
libheif-examples
V:0, I:2 191 heif→jpeg(bitmap)
eficiencia (HEIF) a formatos JPEG, PNG o Y4M
con el comando heif-convert(1)
convierte iconos y cursores MS Windows a y
icoutils V:7, I:50 221 png↔ico(bitmap)
desde formatos PNG ([Link])
pstoedit V:2, I:52 1011 ps/pdf→image(vector)
conversor de archivos PostScript y PDF a SVG
herramientas de conversión de archivos con
libwmf-bin V:7, I:119 151 Windows/imágen(vector)
formato metafile de Windows (formato de gráficos
vectoriales)
convierte archivos XFig a formato Draw de
fig2sxd V:0, I:0 151 fig→sxd(vector)
[Link]
herramienta para el procesado posterior de
unpaper V:2, I:17 412 imagen→imagen
páginas escaneadas para OCR
software libre OCR basado en el motor OCR
tesseract-ocr V:7, I:33 2228 imagen→texto
comercial de HP
tesseract-ocr-eng motor de información OCR: archivo en inglés
V:7, I:34 4032 imagen→texto
tesseact-ocr para textos ingleses
ocrad V:0, I:3 587 imagen→textosoftware libre OCR
utilidad de línea de órdenes para mostrar
exif V:2, I:42 339 imagen(Exif)
información EXIF de archivos JPEG
herramienta de manipulación de metainformación
exiv2 V:2, I:27 275 imagen(Exif)
EXIF/IPTC
exiftran V:1, I:14 69 imagen(Exif) transforma imágenes de cámaras digitales jpeg
utilidad para leer etiquetas Exif de archivos JPEG
exiftags V:0, I:3 292 imagen(Exif)
de cámaras digitales
exifprobe V:0, I:3 499 imagen(Exif) lee metainformación de imágenes digitales
imagen
decodifica imágenes en crudo de cámaras
dcraw V:1, I:12 583 (cru-
digitales
do)→ppm
busca imágenes duplicadas o parecidas
findimagedupes V:0, I:1 77 imagen→huella
visualmente
fusiona imágenes para aumentar su integridad o
ale V:0, I:0 839 imagen→imagen
crea mosaicos
genera galerías HTML estáticos partiendo un
imageindex V:0, I:1 145 imagen(Exif)→html
grupo de imágenes
outguess V:0, I:1 230 jpeg,png herramienta universal esteanográfica
jpegoptim V:0, I:7 59 jpeg optimizar los archivos JPEG
optipng V:3, I:43 213 png optimizar archivos PNG, compresión sin pérdidas
optimizar los archivos PNG, compresión con
pngquant V:0, I:9 61 png
pérdida
palabra
paquete popularidad tamaño descripción
clave
conversor entre paquetes externos en paquetes
alien V:1, I:19 163 rpm/tgz→deb
Debian
conversor de «Libro Electrónico« (común en
freepwing V:0, I:0 424 EB→EPWING Japón) a uno único con formato JIS X 4081 (un
subconjunto de EPWING V1)
gestión de bibliotecas y conversor de libros
calibre V:6, I:28 63385 cualquiera→EPUB
electrónicos
Capítulo 12
Programación
Algunos consejos para quién quiera aprender a programar en el sistema Debian para trazar el código fuente. Aquí
están los paquetes más importantes y los paquetes de documentación más importantes para la programación.
Las referencia en línea está disponible escribiendo «man nombre» tras instalar los paquetes manpages y manpages-dev.
La referencia en línea para las herramientas GNU están disponibles escribiendo «info nombre_de_programa»
después de instalar los paquetes correspondientes de documentación. Pude necesitar incluir los repositorios contrib
y non-free además del repositorio main ya que una parte de la documentación GFDL no se considera que cumple
con DFSG.
Por favor, considera la posibilidad de utilizar las herramientas del sistema de control de versiones. Ver Sección 10.5.
aviso
No use«test» como nombre de un archivo ejecutable. «test» es una orden interna del intérprete de
órdenes.
atención
Puede instalar programas de software directametne compilado de la fuente en «/usr/local» o «/opt»
para evitar la colisión con los programas del sistema.
sugerencia
Los ejemplos de código para crear «La canción de 99 botellas de Cerveza« le aportará buenas ideas para prácti-
camente cualquier lenguaje de programación.
Un archivo de órdenes es un archivo de texto con el bit de ejecución activado y contiene órdenes con el formato
siguiente.
#!/bin/sh
... command lines
La primera línea determina cuál es el intérprete de órdenes que se encarga de leer y ejecutar el contenido del archivo.
Guía de referencia de Debian 245 / 267
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«
([Link] para aprender los errores más comunes.
A diferencia del uso interactivo del intérprete de órdenes (consulte Sección 1.5 y Sección 1.6) en los archivos de
órdenes se usan generalmente parámetros, condiciones y bucles.
Muchos scripts en el sistema se pueden ejecutar por cualquier shell POSIX (ver Tabla 1.13).
El shell POSIX no interactivo por defecto ”/usr/bin/sh” es un enlace simbólico que apunta a /usr/bin/dash
y lo utiliza muchos programas del sistema.
El shell POSIX interactivo predeterminado es /usr/bin/bash.
Evite escribir archivos de órdenes con particularidades de bash o zs para hacerlo portable entre intérpretes de
órdenes POSIX. Puede comprobarlo utilizando checkbashisms(1).
La orden «echo» debe utilizarse con cuidado ya que su implementación cambia entre la orden interna y la externa.
nota
Ya que la opción «-n» no pertenece realmente a la sintaxis POSIXm se acepta normalmente.
sugerencia
Utilice la orden «printf» en vez de la orden «echo» si necesita incluir secuencias de caracteres en las cadenas
de caracteres de salida.
Cuadro 12.4: Relación de las sustituciones clave de parámetros del intérprete de órdenes
Guía de referencia de Debian 247 / 267
Cada comando devuelve un estado de salida que puede usarse para expresiones condicionales.
Éxito: 0 («Verdadero«)
Error: no 0 («Falso«)
nota
En el contexto del intérprete de órdenes «0« es equivalente a «verdadero«, mientras que en contexto de una
condición en C «0« significa «falso«.
nota
«[» es el equivalente a la orden test, la cual determina la expresión condicional de sus parámetros hasta«]».
Algunas expresiones condicionales que es importante recordar son las que se muestran.
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».
Los operadores aritméticos de comparación de enteros en la expresión original son «-eq», «-ne», «-lt», «-le»,
«-gt» y «-ge».
«for x in foo1 foo2 … ; do comand0 ; done» asigna secuencialmente elementos de la relación «foo1
foo2 …» a la variable «x» y ejecuta «comando».
«while condition ; do command ; done» repite «command» mientras «condition» sea verdadero.
«until condition ; do command ; done» repite «command» mientras «condition» no sea verdadero.
sugerencia
La iteración sobre números como la del lenguaje C puede realizarse con la utilización de seq(1) como un generador
de «foo1 foo2 …».
sugerencia
Ver Sección 9.4.9.
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 ”$HOME”, utiliza ”$(getent passwd "$(id -u)"|cut -d ":" -f 6)” (esto también funciona en Sec-
ción 4.5.2)
El intérprete de órdenes comprueba si cada elemento es una palabra reservada para adaptar su comportamiento
si no esta incluida entre «…« o '…'.
• palabras reservadas: si entonces elif else fi para in while a menos que se haga caso esac
el intérprete de órdenes expande los alias si no están incluidos entre «…« o '…'
El intérprete de órdenes expande las tilde si no están incluidas entre «…« o '…'.
• «~» → el directorio home del usuario actual
• «~user» → el directorio home de usuario
el intérprete de órdenes expande los parámetros a sus valores si no están incluidos entre '…'
• parámetro: «$PARAMETER» o «${PARAMETER}»
el intérprete de órdenes expande la sustitución de órdenes si no está incluida entre '…'
• «$( comando )» → la salida de «comando»
• « ̀ command ̀» → la salida de «command»
el intérprete de órdenes expande las rutas de nombres que encajan con nombres de archivos si no están incluidas
entre «…« o '…'
• * → cualquier carácter
• ? → un carácter
• […] → cualquiera de los caracteres en «…»
el intérprete de órdenes busca las órdenes como se muestra y los ejecuta
• definición de lafunción
• orden interna
• archivo ejecutable en «$PATH»
el intérprete de órdenes va a la siguiente línea y repite este proceso de nuevo desde el inicio de la secuencia
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.
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.
Cuadro 12.7: Relación de paquetes que contienen pequeñas utilidades para los archivos de órdenes
Cuando deseas automatizar una tarea en Debian, deberías programarla primero con un lenguaje interpretado. La
línea guía para la elección del lenguaje interpretado es:
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.
La mayoría de los intérpretes ofrecen funciones básicas de comprobación sintáctica y rastreo de código.
Para probar el código para dash, prueba Sección 9.1.4 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.
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.
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.
#!/bin/sh -e
# Copyright (C) 2021 Osamu Aoki <osamu@[Link]>, 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.
Los programas archivadores GUI pueden ampliarse para realizar algunas acciones populares en archivos selecciona-
dos utilizando paquetes de extensión adicionales. También pueden realizar acciones personalizadas muy específicas
añadiendo sus scripts específicos.
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 }' |
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.
Aquí, Sección 12.3.3 y Sección 12.3.4 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
Guía de referencia de Debian 254 / 267
El paquete libc6-dev, a saber, la biblioteca GNU C, aporta la biblioteca estándar de C que es un conjunto de
archivos de cabecera y rutinas de biblioteca utilizadas por el lenguaje de programación C.
Consulte las referencias siguientes sobre C.
Un ejemplo simple ” example.c ” se puede compilar con una biblioteca ” libm ” en un ejecutable ” run_example
” de la siguiente manera.
$ cat > example.c << EOF
#include <stdio.h>
#include <math.h>
#include <string.h>
Aquí, se necesita «-lm» para enlazar la biblioteca «/usr/lib/[Link]» del paquete libc6 para utilizar la función
sqrt(3). La biblioteca real está ubicada en «/lib/» con el nombre de archivo «[Link].6», el cual es un enlace
simbólico a «[Link]».
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).
Los paquetes que proporcionan un mejor y compatible Yacc son el analizador sintáctico LR o el analizador sintáctico
LALR de Debian.
/* 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; }
;
%%
%%
[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 [Link].c [Link].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
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.
Guía de referencia de Debian 257 / 267
12.5. Depuración
La depuración es una parte importante de las actividades de programación. Saber cómo depurar programas lo con-
vierte en un buen usuario de Debian que puede producir informes de errores significativos.
El principal depurador en Debian es gdb(1) el cual permite inspeccionar un programa mientras se ejecuta.
Instalamos gdb y otros programas relevantes como se muestra.
# apt-get install gdb gdb-doc build-essential devscripts
“info gdb”
“Depuración con GDB” en /usr/share/doc/gdb-doc/html/gdb/[Link]
“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 infor-
mació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.
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
Guía de referencia de Debian 259 / 267
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 ./
Compila o instala los paquetes con los símbolos de depuración de la siguiente manera.
$ export DEB_BUILD_OPTIONS="nostrip noopt"
$ debuild
$ cd ..
$ sudo debi package_name*.changes
Necesita comprobar que los archivos de órdenes del paquete y utilizar «CFLAGS=-g -Wall» para la compilación
de binarios.
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:
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)
Guía de referencia de Debian 260 / 267
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
Utilice como se muestra ldd(1) para determinar las bibliotecas de las que depende un programa.
$ ldd /usr/bin/ls
[Link].1 => /lib/[Link].1 (0x4001e000)
[Link].6 => /lib/[Link].6 (0x40030000)
[Link].0 => /lib/[Link].0 (0x40153000)
/lib/[Link].2 => /lib/[Link].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.
Hay varias herramientas de rastreo dinámico de llamadas disponibles en Debian. Consulta Sección 9.4.
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.
Guía de referencia de Debian 261 / 267
nota
gdb(1) puede ser utilizado para desemsamblar el código de forma interactiva.
12.6.1. Make
Make es una utilidad para mantener grupos de programas. La ejecución de make(1) consiste en, la lectura del archivo
de reglas «Makefile» por parte de make y la actualización de un objetivo si los archivos que son necesarios han
sido modificados desde la última vez o si el objetivo no existe. La ejecución de estas actualizaciones pueden suceder
de concurrentemente.
La sintaxis del archivo de reglas es la que se muestra.
Guía de referencia de Debian 262 / 267
Aquí «[TAB]» es un código TAB. Cada línea es interpretada por el intérprete de órdenes después de la sustitución
de las variables. Utilice «\» al final de la línea para continuar el archivo de órdenes. Utilice «$$» para incluir «$» par
los valores del entorno para el archivo de órdenes.
Las reglas implícitas y los prerequisitos para un objetivos pueden ser escrito, por ejemplo, como se muestra.
%.o: %.c header.h
Aquí, el objetivo contiene el carácter « %» (únicamente un carácter). El carácter %» encaja con cualquier cadena no
vacía que corresponda a los nombres de archivo del objetivo real. Así mismo el prerrequisito utiliza « %» para mostrar
como se relaciones sus nombres con los nombres del objetivo real.
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 ”[Link]”.
• ”configure” se usa más adelante para producir ”Makefile” a partir de la plantilla ”[Link]”.
Automake es una herramienta para producir ”[Link]” a partir de ”[Link]”.
Libtool es un script de shell para abordar el problema de la portabilidad del software al compilar bibliotecas com-
partidas a partir del código fuente.
aviso
Cuando compile programas y los instale no sobreescriba los archivos del sistema.
Guía de referencia de Debian 263 / 267
Debian no modifica los archivos en «/usr/local/» o «/opt». Así que si compila un programa desde el código
fuente, instalarlo en «/usr/local/» para que no interfiera con Debian.
$ cd src
$ ./configure --prefix=/usr/local
$ make # this compiles program
$ sudo make install # this installs the files in the system
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
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
• «[Link]
• «[Link]
« %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«».
Por seguridad es mejor no realizar de forma manual o de otras formas la gestión de análisis de los parámetros
CGI. Existen módulos para ello en Perl y Python. PHP tiene dicha funcionalidad. Cuando se necesita almacenar
información del usuario, se utilizan las cookies HTTP cookies. Cuando se necesita procesar información en el lado
del cliente, normalmente se utiliza Javascript.
Para mayor información, ver Interfaz de Pasarela Común (Common Gateway Interface), La Fundación de Software
Apache (The Apache Software Foundation) y JavaScript.
Buscar ”tutorial CGI” en Google escribiendo la URL codificada [Link]
directamente en la dirección del navegador es una buena forma de ver el script CGI en acción en el servidor de Goo-
gle.
palabra
paquete popularidad tamaño descripción
clave
V:707,
perl 673 AWK→PERL convertir código fuente de AWK a PERL: a2p(1)
I:989
convierte código fuente de FORTRAN 77 a
f2c V:0, I:3 442 FORTRAN→C
C/C++: f2c(1)
convierte de NASM (formato Intel) a GAS
intel2gas V:0, I:0 178 intel→gas
(Ensamblador GNU)
debuild(1), y sbuild(1)
Sección 12.5.2 para la recompilación con la finalidad de la depuración
Guía de Mantenedores Debian (Guide for Debian Maintainers) (el paquete debmake-doc)
Guía de referencia de Debian 265 / 267
Existen paquetes que ayudan al empaquetado como debmake, dh-make, dh-make-perl, etc.
Guía de referencia de Debian 266 / 267
Apéndice A
Apéndice
El sistema Debian es una plataforma de computación compleja para un equipo en red. Sin embargo, aprender a
utilizar todas sus capacidades no es sencillo. Configurar una cola de impresora LPR con una impresora que no
soporta PostScript es un buen ejemplo de ello. (No existen ahora problemas con ello desde que se utiliza el sistema
CUPS).
Es un completo y detallado mapa llamado el «CÓDIGO FUENTE«. Es muy preciso pero difícil de entender. Existen
también referencias a Cómos o MiniCómos. Son más fáciles de comprender pero tienden a dar demasiados detalles
y pierden la visión global. Algunas veces tengo problemas para encontrar la sección correcta en los Cómos largo
cuando solo necesito saber como se ejecutan.
Espero que esta ”Referencia de Debian (versión 2.125)” (2024-11-15 13:32:55 UTC) proporciona una buena dirección
de inicio para las personas en el laberinto de Debian.
La Referencia de Debian fue iniciada por mi, Osamu Aoki <osamu at debian punto org>, como un sistema personal
de administración de notas. Mucho contenido proviene del conocimiento que he adquirido de la lista de correo de
usuarios de debian y otros recursos Debian.
La Referencia de Debian (versión 1, 2001-2007) fue creado como una sugerencia de Josip Rodin, que es muy activo
en el Proyecto de Documentación Debian (DDP) como parte de los documentos DDP.
Después de 6 años, me di cuenta de que la versión original de la «Referencia de Debian« estaba desactualizada y
comencé a reescribir parte de su contenido. La nueva «Referencia de Debian (versión 2)» se publicó en 2008.
He actualizado ”Referencia Debian (versión 2)” para tratar temas nuevos (Systemd, Wayland, IMAP, PipeWire, núcleo
Linux 5.10) y eliminado temas obsoletos (SysV init, CVS, Subversion, protocolo SSH 1, núcleos Linux anteriores a
2.5). Se han eliminado la mayoría de las referencias a Jessie 8 (2015-2020) release situation o anteriores.
Esta ”Referencia de Debian (versión 2.125)” (2024-11-15 13:32:55 UTC) cubre principalmente Bookworm (=stable)
y Trixie (=testing) Lanzamientos de Debian.
El contenido del tutorial puede ser seguido desde su original y su inspiración como se muestra.
«Guía Linux de Usuario (Linux User’s Guide)« de Larry Greenfield (Diciembre 1996)
Guía de referencia de Debian 267 / 267
«GNU/Linux Debian: guía de instalación y uso« de John Goerzen y Ossama Othman (1999)
• obsoleto por la «Referencia de Debian (versión 1)«
El paquete y la descripción del archivo puede seguir algo sobre sus orígenes y su inspiración en lo siguiente.
«FAQ Debian FAQ« (versión de marzo 2002, mantenida por Josip Rodin)
La versión anterior «Referencia Debian (versión 1)« fue creada por varios autores.
la mayor parte del contenido de la configuración de red fue escrito por Thomas Hood
una parte significativa del contenido de X y CSV fue escrita por Brian Nelson
la ayuda en los archivos de órdenes de construcción y la mayor parte de las correcciones fueron aportadas por
Jens Seidel
gran parte de las correcciones fueron aportadas por David Sewell
Se utilizaron muchas páginas de manual y páginas de información sobre el sistema Debian, así como también páginas
web originales y documentos de Wikipedia como referencias principales para escribir este documento. En la medida
en que Osamu Aoki los consideró dentro del uso justo, muchas partes de ellos, especialmente las definiciones de
comandos, se usaron como fragmentos de frases después de cuidadosos esfuerzos editoriales para encajarlos en
el estilo y la objetivo de este documento.
La descripción de depurador gdb se amplió utilizando el contenido de la Wiki de Debian sobre la depuración con el
consentimiento de Ari Pollak, Loïc Minier y Dafydd Harries.
El contenido de la actual ”Referencia de Debian (versión 2.125)” (2024-11-15 13:32:55 UTC) es principalmente mi
propio trabajo excepto como se mencionó anteriormente. Estos también han sido actualizados por los colaboradores.
El autor, Osamu Aoki, agradece a todos ellos su ayuda para hacer posible este documento.
La fuente del documento original en inglés está escrita actualmente en archivos DocBook XML. Esta fuente Doc-
book XML se convierten a HTML, texto sin formato, PostScript y PDF. (Algunos formatos pueden omitirse para su
distribución)