Capítulo 9. Trucos del sistema

Tabla de contenidos

9.1. Consejos para la consola
9.1.1. Registro correcto de las actividades del intérprete de órdenes
9.1.2. El programa screen
9.1.3. Navegando por los directorios
9.1.4. Readline wrapper
9.1.5. Escaneando el árbol del código fuente
9.2. Personalización de vim
9.2.1. Personalizando vim con características internas
9.2.2. Personalizando vim con paquetes externos
9.3. Registro de datos y presentación
9.3.1. El demonio de registro
9.3.2. Analizador de registros
9.3.3. Personalizar la visualización de información en formato texto
9.3.4. Personalización de la visualización de la fecha y hora
9.3.5. Intérprete de órdenes en color
9.3.6. Órdenes coloreadas
9.3.7. Grabación de las actividades del editor con repeticiones complejas
9.3.8. Capturar una imagen gráfica en un aplicación X
9.3.9. Guardando cambios en los archivos de configuración
9.4. Monitoreando, controlando e iniciando lo que hacer los programas
9.4.1. Temporización de un proceso
9.4.2. La prioridad de planificación
9.4.3. La orden ps
9.4.4. La orden top
9.4.5. Relación de los archivos abiertos por un proceso
9.4.6. Trazando la actividad de un programa
9.4.7. Identificación de procesos utilizando archivos o conexiones (sockets)
9.4.8. Repetición de una orden a intervalos constantes
9.4.9. Repetición de una orden sobre archivos
9.4.10. Iniciar un programa desde el interfaz gráfico de usuario
9.4.11. Personalizando el inicio de un programa
9.4.12. Matando un proceso
9.4.13. Planificación una vez de las tareas
9.4.14. Planificación regular de tareas
9.4.15. Programación de tareas en un suceso
9.4.16. Tecla Alt-SysRq
9.5. Trucos para el mantenimiento del sistema
9.5.1. ¿Quién está en el sistema?
9.5.2. Avisos para todos
9.5.3. Identificación del hardware
9.5.4. Configuración del hardware
9.5.5. Hora del sistema y del hardware
9.5.6. La configuración de la terminal
9.5.7. La infraestructura de sonido
9.5.8. Deshabilitar el salvapantallas
9.5.9. Deshabilitando los pitidos
9.5.10. Utilización de memoria
9.5.11. Sistema de seguridad y de comprobación de la integridad
9.6. Trucos del almacenamiento de datos
9.6.1. Uso de espacio de disco
9.6.2. Configuración del particionado de disco
9.6.3. Acceso al particionado utilizando UUID
9.6.4. LVM2
9.6.5. Configuración del sistema de archivos
9.6.6. Comprobación de la integridad y creación del sistema de archivos
9.6.7. Optimización de los sistemas de archivos a través de las opciones de montaje
9.6.8. Optimización del sistema de archivo a través del superbloque
9.6.9. Optimización del disco duro
9.6.10. Optimización de un disco de estado sólido (SSD)
9.6.11. Utilice SMART para predecir fallos en su disco duro
9.6.12. Determine el directorio de almacenamiento temporal por medio de $TMPDIR
9.6.13. Expansión del espacio de almacenamiento utilizable mediante LVM
9.6.14. Expansión del espacio de almacenamiento útil mediante el montaje de otra partición
9.6.15. Expansión del espacio de almacenamiento por el enlace mediante el montaje en otro directorio
9.6.16. Expansión del espacio de almacenamiento utilizable por superposición-montaje de otro directorio
9.6.17. Expansión del espacio de almacenamiento útil utilizando un enlace simbólico
9.7. La imagen de disco
9.7.1. Creando un archivo de imagen de disco
9.7.2. Escribiendo directamente en el disco
9.7.3. Montaje del archivo imagen del disco
9.7.4. Limpiando un archivo de imagen de disco
9.7.5. Haciendo un archivo de imagen de disco vacío
9.7.6. Haciendo un archivo de imagen ISO9660
9.7.7. Escritura directa al CD/DVD-R/RW
9.7.8. Montando un archivo imagen ISO9660
9.8. Datos binarios
9.8.1. Viendo y editando datos binarios
9.8.2. Manipular archivos sin el montaje de discos
9.8.3. Redundancia de datos
9.8.4. Recuperación de datos de archivos y análisis forense
9.8.5. División de un archivo grande en archivos de tamaño menor
9.8.6. Limpieza del contenido de los archivos
9.8.7. Archivos «vacíos»
9.8.8. Borrando completo de un disco duro
9.8.9. Borrar áreas de disco duro no utilizadas
9.8.10. Recuperando archivos borrados pero todavía abiertos
9.8.11. Buscando todos los enlaces duros
9.8.12. Consumo invisible de espacio de disco
9.9. Trucos para cifrar información
9.9.1. Cifrado de discos externos con dm-crypt/LUKS
9.9.2. Montaje de disco cifrado con dm-crypt/LUCKS
9.10. El núcleo
9.10.1. Parámetros del núcleo
9.10.2. Cabeceras del núcleo
9.10.3. Compilar el núcleo y los módulos asociados
9.10.4. Compilando el código fuente del núcleo: recomendaciones del Equipo Debian del Núcleo
9.10.5. Controladores y firware del hardware
9.11. Sistemas virtualizados
9.11.1. Herramientas de virtualización y emulación
9.11.2. Flujo de trabajo de la virtualización
9.11.3. Montando el archivo de imagen de disco virtual
9.11.4. Sistemas chroot
9.11.5. Varios sistemas de escritorio

Aquí, describo los trucos fundamentales para configurar y gestionar sistemas, principalmente desde la consola.

Existen algunas utilidades que te ayudarán en tu interacción con 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, “Grabación de las actividades del intérprete de órdenes”) produce un archivo con caracteres de control. Esto se puede evitar con la utilización de col(1) como se muestra.

$ script
Script started, file is typescript

Haga lo que quiera ... y pulse Ctrl-D para finalizar script.

$ col -bx < typescript > cleanedfile
$ vim cleanedfile

Existen métodos alternativos para registrar las actividades de shell :

  • Utiliza tee (solo se puede usar durante el proceso de arranque en initramfs):

    $ sh -i 2>&1 | tee typescript
  • Utiliza gnome-terminal con el búfer de línea extendida para el scrollback.

  • Utilice pantalla con "^A H" (ver Sección 9.1.2, “El programa screen”) para realizar la grabación de la consola.

  • Utiliza vim con ":terminal" para entrar en el modo terminal. Utiliza "Ctrl-W N" para salir del modo terminal al modo normal. Utiliza ":w typescript" para escribir en el búfer de un archivo.

  • Usa emacs con "Mx shell", "M-x eshell" o "M-x term" para ingresar a la consola de grabación . Utiliza "C-x C-w" para escribir en el búfer de un archivo.

Screen(1) no solo permite trabajar con múltiples procesos en un único terminal, si no que también que el proceso del intérprete de órdenes remoto sobreviva a la interrupción de las conexiones. Aquí está un escenario típico de utilización de screen(1).

  1. Acceda a un equipo remoto.

  2. Iniciar screen en una única consola.

  3. Ejecute múltiples programas en la ventana de screen con ^A c («Control-A« seguido por «c«).

  4. Puede cambiar entre las múltiples ventanas de screen con ^A n («Control-A« seguido de «n»).

  5. Si repentinamente necesita dejar su terminal, pero no quiere perder su trabajo activo por la mantener la conexión.

  6. Se puede separar la sesión screen por cualquier método.

    • Desconexión forzada de su conexión de red

    • Pulse ^A d («Control-A« seguido de «d«) y cierre manualmente la conexión remota

    • Pulse ^A DD («Control-A» seguido de «DD») para que screen separe y cierre su sesión

  7. Si inicia la sesión otra vez al mismo equipo remoto (incluso desde un terminal diferente).

  8. Inicie screen con «screen -r».

  9. Screen mágicamente reconecta con todas las ventanas anteriores de screen con todos los programas activos ejecutándose.

[Sugerencia] Sugerencia

Puede guardar la entrada de la conexión con screen para la conexión de red a medida como de marcado y de paquete, ya que puede dejar el proceso activo mientras esta desconectado, y entonces recuperarlo más tarde cuando se conecte de nuevo.

En una sesión de screen, todas las entradas de teclado se envían a la ventana actual excepto las que son combinaciones de teclado de órdenes. Todas las combinaciones de teclas de órdenes screen se inician pulsando ^A («Control-A«) más otra tecla [más algunos parámetros]. He aquí algunos importantes para recordar.


Para más detalles ver screen(1).

Ver tmux(1) para saber las funcionalidades del comando alternativo.

En Sección 1.4.2, “Personalización de bash”, se describen 2 sugerencias para permitir una navegación rápida por los directorios: $CDPATH y mc.

Si utiliza el programa de fuzzy text filter, puede hacerlo sin escribir la ruta exacta. Para fzf, incluya lo siguiente en ~/.bashrc.

FZF_KEYBINDINGS_PATH=/usr/share/doc/fzf/examples/key-bindings.bash
if [ -f $FZF_KEYBINDINGS_PATH ]; then
  . $FZF_KEYBINDINGS_PATH
fi

Por ejemplo:

  • Puedes saltar a un subdirectorio muy profundo con un mínimo esfuerzo. Primero escribe "cd **" y pulsa Tab. A continuación, pedirá las rutas candidatas. Si escribe cadenas de rutas parciales, por ejemplo, s/d/b foo, se reducirán las rutas candidatas. Seleccione la ruta que va a usar cd con las teclas de cursor y retorno.

  • Puede seleccionar un comando del historial de comandos de manera más eficiente con un esfuerzo mínimo. Presione Ctrl-R en el símbolo del sistema. Luego le pedirá los comandos candidatos. Escribir cadenas de comandos parciales, por ejemplo, vim d, reducirá los candidatos. Seleccione el que se utilizará con las teclas de cursor y retorno.

Después de aprender los conceptos básicos de vim(1) a través de Sección 1.4.8, “Usando vim”, ver "Siete hábitos de edición de texto efectiva (2000) "de Bram Moolenaar, para entender cómo se debe usar vim.

Se puede cambiar el comportamiento de vim significativamente habilitando sus características internas a través de los comandos del modo Ex como "set ..." para establecer opciones de vim.

Estos comandos en modo Ex se pueden incluir en el archivo vimrc del usuario, en el tradicional "~/.vimrc" o en el compatible con git "~/.vim/vimrc". He aquí un ejemplo muy simple [2]:

""" Generic baseline Vim and Neovim configuration (~/.vimrc)
"""   - For NeoVim, use "nvim -u ~/.vimrc [filename]"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let mapleader = ' '             " :h mapleader
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set nocompatible                " :h 'cp -- sensible (n)vim mode
syntax on                       " :h :syn-on
filetype plugin indent on       " :h :filetype-overview
set encoding=utf-8              " :h 'enc (default: latin1) -- sensible encoding
""" current vim option value can be verified by :set encoding?
set backspace=indent,eol,start  " :h 'bs (default: nobs) -- sensible BS
set statusline=%<%f%m%r%h%w%=%y[U+%04B]%2l/%2L=%P,%2c%V
set listchars=eol:¶,tab:⇄\ ,extends:↦,precedes:↤,nbsp:␣
set viminfo=!,'100,<5000,s100,h " :h 'vi -- bigger copy buffer etc.
""" Pick "colorscheme" from blue darkblue default delek desert elflord evening
""" habamax industry koehler lunaperche morning murphy pablo peachpuff quiet ron
""" shine slate torte zellner
colorscheme industry
""" don't pick "colorscheme" as "default" which may kill SpellUnderline settings
set scrolloff=5                 " :h 'scr -- show 5 lines around cursor
set laststatus=2                " :h 'ls (default 1)  k
""" boolean options can be unset by prefixing "no"
set ignorecase                  " :h 'ic
set smartcase                   " :h 'scs
set autoindent                  " :h 'ai
set smartindent                 " :h 'si
set nowrap                      " :h 'wrap
"set list                        " :h 'list (default nolist)
set noerrorbells                " :h 'eb
set novisualbell                " :h 'vb
set t_vb=                       " :h 't_vb -- termcap visual bell
set spell                       " :h 'spell
set spelllang=en_us,cjk         " :h 'spl -- english spell, ignore CJK
set clipboard=unnamedplus       " :h 'cb -- cut/copy/paste with other app
set hidden                      " :h 'hid
set autowrite                   " :h 'aw
set timeoutlen=300              " :h 'tm

El mapa de teclas de vim puede cambiarse en el fichero vimrc del usuario. Por ejemplo:

[Atención] Atención

No intente cambiar las combinaciones de teclas predeterminadas sin muy buenas razones.

""" Popular mappings (imitating LazyVim etc.)
""" Window moves without using CTRL-W which is dangerous in INSERT mode
nnoremap <C-H> <C-W>h
nnoremap <C-J> <C-W>j
nnoremap <C-K> <C-W>k
silent! nnoremap <C-L> <C-W>l
""" Window resize
nnoremap <C-LEFT> <CMD>vertical resize -2<CR>
nnoremap <C-DOWN> <CMD>resize -2<CR>
nnoremap <C-UP> <CMD>resize +2<CR>
nnoremap <C-RIGHT> <CMD>vertical resize +2<CR>
""" Clear hlsearch with <ESC> (<C-L> is mapped as above)
nnoremap <ESC> <CMD>noh<CR><ESC>
inoremap <ESC> <CMD>noh<CR><ESC>
""" center after jump next
nnoremap n nzz
nnoremap N Nzz
""" fast "jk" to get out of INSERT mode (<ESC>)
inoremap  jk <CMD>noh<CR><ESC>
""" fast "<ESC><ESC>" to get out of TERM mode (CTRL-\ CTRL-N)
tnoremap <ESC><ESC> <C-\><C-N>
""" fast "jk" to get out of TERM mode (CTRL-\ CTRL-N)
tnoremap jk <C-\><C-N>
""" previous/next trouble/quickfix item
nnoremap [q <CMD>cprevious<CR>
nnoremap ]q <CMD>cnext<CR>
""" buffers
nnoremap <S-H> <CMD>bprevious<CR>
nnoremap <S-L> <CMD>bnext<CR>
nnoremap [b <CMD>bprevious<CR>
nnoremap ]b <CMD>bnext<CR>
""" Add undo break-points
inoremap  , ,<C-G>u
inoremap  . .<C-G>u
inoremap  ; ;<C-G>u
""" save file
inoremap <C-S> <CMD>w<CR><ESC>
xnoremap <C-S> <CMD>w<CR><ESC>
nnoremap <C-S> <CMD>w<CR><ESC>
snoremap <C-S> <CMD>w<CR><ESC>
""" better indenting
vnoremap < <gv
vnoremap > >gv
""" terminal (Somehow under Linux, <C-/> becomes <C-_> in Vim)
nnoremap <C-_> <CMD>terminal<CR>
"nnoremap <C-/> <CMD>terminal<CR>
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if ! has('nvim')
""" Toggle paste mode with <SPACE>p for Vim (no need for Nvim)
set pastetoggle=<leader>p
""" nvim default mappings for Vim.  See :h default-mappings in nvim
""" copy to EOL (no delete) like D for d
noremap Y y$
""" sets a new undo point before deleting
inoremap <C-U> <C-G>u<C-U>
inoremap <C-W> <C-G>u<C-W>
""" <C-L> is re-purposed as above
""" execute the previous macro recorded with Q
nnoremap Q @@
""" repeat last substitute and *KEEP* flags
nnoremap & :&&<CR>
""" search visual selected string for visual mode
xnoremap * y/\V<C-R>"<CR>
xnoremap # y?\V<C-R>"<CR>
endif

Para que las combinaciones de teclas anteriores funcionen correctamente, el programa de terminal ha de configurarse para generar "ASCII DEL" para la teclaBackspace y "Secuencia de escape" para la tecla Delete.

También se pueden cambiar otras configuraciones en el archivo vimrc del usuario. Por ejemplo:

""" Use faster 'rg' (ripgrep package) for :grep
if executable("rg")
  set grepprg=rg\ --vimgrep\ --smart-case
  set grepformat=%f:%l:%c:%m
endif
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" Retain last cursor position :h '"
augroup RetainLastCursorPosition
  autocmd!
  autocmd BufReadPost *
    \ if line("'\"") > 0 && line ("'\"") <= line("$") |
    \   exe "normal! g'\"" |
    \ endif
augroup END
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" Force to use underline for spell check results
augroup SpellUnderline
  autocmd!
  autocmd ColorScheme * highlight SpellBad term=Underline gui=Undercurl
  autocmd ColorScheme * highlight SpellCap term=Underline gui=Undercurl
  autocmd ColorScheme * highlight SpellLocal term=Underline gui=Undercurl
  autocmd ColorScheme * highlight SpellRare term=Underline gui=Undercurl
augroup END
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" highlight tailing spaces except when typing as red (set after colorscheme)
highlight TailingWhitespaces ctermbg=red guibg=red
""" \s\+     1 or more whitespace character: <Space> and <Tab>
""" \%#\@<!  Matches with zero width if the cursor position does NOT match.
match TailingWhitespaces /\s\+\%#\@<!$/

Se pueden encontrar interesantes paquetes de complementos externos:

Los paquetes del plugins en el paquete vim-scripts se pueden habilitar usando el archivo vimrc del usuario. Ej:

packadd! secure-modelines
packadd! winmanager
" IDE-like UI for files and buffers with <space>w
nnoremap <leader>w         :WMToggle<CR>

El nuevo sistema de paquetes nativo de Vim funciona bien con "git" y "git submodule". Puede encontrar un ejemplo de configuración en my git repository: dot-vim. Esto hace esencialmente:

  • Al usar "git" y "git submodule", los últimos paquetes externos, como "name", se sitúan en ~/.vim/pack/*/opt/name y similares.

  • Agregando la línea :packadd! name al archivo vimrc del usuario, estos paquetes se colocan en runtimepath.

  • Vim carga estos paquetes en runtimepath durante su inicialización.

  • Al final de su inicialización, se actualizan las etiquetas de los documentos instalados con "helptags ALL".

Para más información, inicie vim con "vim --startuptime vimstart.log" para comprobar la secuencia de ejecución real y el tiempo usado en cada paso.

Es bastante confuso ver demasiadas formas [3] de administrar y cargar estos paquetes externos en vim. Verificar la información original es la mejor cura.


Aunque las herramientas de paginación como more(1) y less(1) (ver Sección 1.4.5, “El paginador”) y las herramientas personalizadas para marcar y dar formato (ver Sección 11.1.8, “Resaltando y dándole formato a información en texto plano”) pueden visualizar la información en formato texto de la forma correcta, los editores de propósito general (ver Sección 1.4.6, “El editor de texto”) son más versátiles y personalizables.

[Sugerencia] Sugerencia

En vim(1) y su modo de paginación conocido como view(1), «:set hls» permite la búsqueda de textos resaltados.

El formato predeterminado de visualización de la hora y la fecha mediante el comando "ls -l" depende de la localidad (ver Sección 1.2.6, “Marcas de tiempo” para conocer el valor). La variable "$LANG" es la primera a la que se hace referencia y se puede anular con las variables de entorno exportadas "$LC_TIME" o "$LC_ALL".

El formato de visualización predeterminado real para cada configuración regional depende de la versión de la biblioteca C estándar (el paquete libc6) utilizada. Es decir, diferentes versiones de Debian tienen diferentes valores por defecto. Para los formatos iso, ver ISO 8601.

Si de verdad quiere personalizar el formato de visualización de la hora y la fecha independientemente de la configuración regional, debería asignar el valor de estilo de tiempo por el parámetro «--time-style» o por el valor de «$TIME_STYLE» (ver ls(1), date(1), «info coreutils 'ls invocation'»).


[Sugerencia] Sugerencia

Puedes eliminar escribir la opción larga en la línea de comandos usando el alias de comando (ver Sección 1.5.9, “Alias de órdenes”):

alias ls='ls --time-style=+%d.%m.%y %H:%M'

En los terminales más modernos se pueden utilizar colores utilizando secuencias de escape ANSI (ver «/usr/share/doc/xterm/ctlseqs.txt.gz»).

Por ejemplo, intente lo siguiente

$ RED=$(printf "\x1b[31m")
$ NORMAL=$(printf "\x1b[0m")
$ REVERSE=$(printf "\x1b[7m")
$ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"

Puede guardar las actividades del editor con repeticiones complejas.

Para Vim, como sigue.

  • «qa»: comienza a grabar los caracteres escritos en un registro llamado «a».

  • … actividades del editor

  • «q»: finaliza la grabación de los caracteres escritos.

  • «@a»: ejecuta el contenido del registro «a».

Para Emacs, como sigue.

  • «C-x (»: comienza a definir una macro de teclado.

  • … actividades del editor

  • «C-x )»: termina definir una macro de teclado.

  • «C-x e»: ejecuta una macro de teclado.

Las actividades de los programas pueden ser monitoreados y controlados utilizando herramientas especializadas.

Tabla 9.8. Relación de las herramientas de monitorización y control de las actividades de los programas

paquete popularidad tamaño descripción
coreutils V:880, I:999 18307 nice(1): ejecuta un programa modificando su prioridad de planificación
bsdutils V:519, I:999 356 renice(1): cambia la prioridad de planificación de un proceso en ejecución
procps V:766, I:999 2389 «/proc» utilidades del sistema de archivos: ps(1), top(1), kill(1), watch(1), …
psmisc V:420, I:775 908 «/proc» utilidades del sistema de archivos: killall(1), fuser(1), peekfd(1), pstree(1)
time V:7, I:132 129 time(1): ejecuta un programa para crear un informe de los recursos del sistema utilizados a lo largo del tiempo
sysstat V:148, I:170 1904 sar(1), iostat(1), mpstat(1), …: herramientas de optimización del sistema en Linux
isag V:0, I:3 109 Graficador Interactivo de la Actividad del Sistema para sysstat
lsof V:422, I:945 482 lsof(8): enumera la relación de archivos abiertos por un proceso en ejecución utilizando la opción «-p»
strace V:12, I:119 2897 strace(1): registro de las llamadas del sistema y señales
ltrace V:0, I:16 330 ltrace(1): registro a las bibliotecas invocadas
xtrace V:0, I:0 353 xtrace(1): registra las comunicaciones entre el cliente y el servidor en X11
powertop V:18, I:217 677 powertop(1): información sobre el uso de la potencia por parte del sistema
cron V:872, I:995 244 ejecuta procesos en segundo plano de acuerdo a su planificación desde el dominio cron(8)
anacron V:396, I:479 93 planificador de tareas similar a cron para los sistemas que no están activos 24 horas al día
at V:101, I:154 158 at(1) o batch(1): ejecuta un trabajo en un momento determinado o debajo de cierto nivel de carga

[Sugerencia] Sugerencia

El paquete procps provee lo fundamental para la monitorización, control e inicio de las actividades de los programas. Podría aprender sobre todo ello.

Existen varias formas de repetir una orden sobre los archivos que cumplan una condición, p. ej, encajan en un patrón «*.ext».

for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done
  • Combinación de find(1) y xargs(1):

find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
  • find(1) con la opción «-exec» y una orden:

find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
  • find(1) con la opción «-exec» con un archivo de órdenes pequeño:

find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;

Los ejemplos anteriores están escritos para garantizar el manejo adecuado de nombres de archivo graciosos, como los que contienen espacios. Véase Sección 10.1.5, “Formas de selección de archivos” para usos más avanzados de find(1).

Para el interfaz de órdenes en línea (CLI), el programa ejecutado será el primero que encaja el nombre en el directorio especificado por la variable de entorno $PATH. Ver Sección 1.5.3, “La variable «$PATH»”.

Para el interfaz gráfico de usuario (GUI) que cumple con el estándar de freedesktop.org, los archivos *.desktop en el directorio /usr/share/applications/ proporcionan los atributos necesarios para la visualización de cada programa en el menú del interfaz gráfico de usuario. Cada paquete que cumple con el sistema de menú xdg de Freedesktop.org instala sus datos de menú proporcionados por "*. desktop" en "/usr/share/applications/". Los modernos entornos de escritorio que cumplen con el estándar Freedesktop.org utilizan estos datos para generar su menú utilizando el paquete xdg-utils. Ver "/usr/share/doc/xdg-utils/README".

Por ejemplo, el archivo chromium.desktop define los atributos para el «Navegador Web Chromium« como «Name« para el nombre del programa, «Exec« para la ruta de ejecución del programa y parámetros, «Icon« para el icono utilizado, etc. (consulte la Especificación de Entradas del Escritorio (Desktop Entry Specification)) como sigue:

[Desktop Entry]
Version=1.0
Name=Chromium Web Browser
GenericName=Web Browser
Comment=Access the Internet
Comment[fr]=Explorer le Web
Exec=/usr/bin/chromium %U
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=chromium
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https;
StartupWMClass=Chromium
StartupNotify=true

Esta es una descripción muy simplificada. Los archivos *.desktop se revisan como sigue.

El entorno de escritorio asigna las variables del entorno $XDG_DATA_HOME y $XDG_DATA_DIR. Por ejemplo, en GNOME 3:

  • $XDG_DATA_HOME esta sin asignar. (El valor por defecto que se utiliza es $HOME/.local/share.)

  • $XDG_DATA_DIRS se le asigna el valor /usr/share/gnome:/usr/local/share/:/usr/share/.

Así los directorios base (ver XDG Base Directory Specification) y los directorios de aplicaciones quedan como sigue.

  • $HOME/.local/share/$HOME/.local/share/applications/

  • /usr/share/gnome//usr/share/gnome/applications/

  • /usr/local/share//usr/local/share/applications/

  • /usr/share//usr/share/applications/

Los archivos *.desktop se comprueban en estos directorios de aplicaciones siguiendo este orden.

[Sugerencia] 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] Sugerencia

La línea "Exec=..." no es analizada por el shell. Utilice el comando env(1) si necesita establecer variables de entorno.

[Sugerencia] 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] 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 personalización de este proceso.

[Sugerencia] Sugerencia

update-mime(8) actualiza el archivo «/etc/mailcap» utilizando el archivo «/etc/mailcap.order» (ver mailcap.order(5)).

[Sugerencia] 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] 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 cron(8) para planificar las tareas de forma regular. Ver crontab(1) y crontab(5).

Puede planificar la ejecución de procesos como un usuario normal, p. ej. foo creando un archivo crontab(5) como «/var/spool/cron/crontabs/foo» con la orden «crontab -e».

He aquí un ejemplo de un archivo crontab(5).

# use /usr/bin/sh to run commands, no matter what /etc/passwd says
SHELL=/bin/sh
# mail any output to paul, no matter whose crontab this is
MAILTO=paul
# Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
# run at 00:05, every day
5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 14:15 on the first of every month -- output mailed to paul
15 14 1  * *   $HOME/bin/monthly
# run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc:
0 22 *   * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%%
23 */2 1 2 *   echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1"
5  4 *   * sun echo "run at 04:05 every Sunday"
# run at 03:40 on the first Monday of each month
40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args
[Sugerencia] Sugerencia

En los sistemas que no están en funcionamiento ininterrumpido, instale el paquete anacron para planificar órdenes periódicas en los intervalos deseados tan pronto como el equipo activo lo permita. Ver anacron(8) y anacrontab(5).

[Sugerencia] Sugerencia

Para los archivos de órdenes de mantenimiento del sistema, puede ejecutarlos de forma periódica desde la cuenta de superusuario ubicando esos archivos de órdenes en «/etc/cron.hourly/», «/etc/cron.daily/», «/etc/cron.weekly/», o «/etc/cron.monthly/». La temporización de la ejecución de los archivos de órdenes puede personalizarse mediante «/etc/crontab» y «/etc/anacrontab».

Systemd tiene capacidad de bajo nivel para programar programas para que se ejecuten de fondo cron. Por ejemplo, /lib/systemd/system/apt-daily.timer y /lib/systemd/system/apt-daily.service configuran actividades diarias de descarga de apt. Ver systemd.timer(5) .

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

[Sugerencia] Sugerencia

Desde terminales SSH etc., puede utilizar la funcionalidad Alt-SysRq resribiendo «/proc/sysrq-trigger». Por ejemplo, «echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger» desde el cursor del intérprete de órdenes del superusuario syncs y umount todos los sistemas de archivos.

El kernel de Debian amd64 Linux actual (2021) tiene /proc/sys/kernel/sysrq=438=0b110110110:

  • 2 = 0x2: habilita el control del nivel del registro de la consola (ON)

  • 4 = 0x4 - permiti el control del teclado (SAK, unraw) (ON)

  • 8 = 0x8 - habilita dumps de depuración de procesos etc. (OFF)

  • 16 = 0x10 - habilita sync command (ON)

  • 32 = 0x20 - habilita volver a montar solo lectura (ON)

  • 64 = 0x40 - permite la señalización de procesos (term, kill, oom-kill) (OFF)

  • 128 = 0x80 - permite reboot/poweroff (ON)

  • 256 = 0x100 - permite el inicio de todas las tareas RT (ON)

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] Sugerencia

La frecuencia de funcionamiento de la CPU de los sistemas modernos esta gestionada por módulos en el núcleo como acpi_cpufreq.

Lo siguiente asigna al sistema y hardware la hora y fecha a MM/DD hh:mm CCYY.

# date MMDDhhmmCCYY
# hwclock --utc --systohc
# hwclock --show

La hora habitualmente se visualiza en la hora local en el sistema Debian pero el hardware y el sistema usa generalmente la hora en UTC(GMT).

Si la hora del hardware está establecida en UTC, cambia la configuración a "UTC=yes" en "/etc/default/rcS".

Lo siguiente reconfigura la zona horaria utilizada por el sistema Debian.

# dpkg-reconfigure tzdata

Si desea actualizar el tiempo del sistema a través de la red, piense en utilizar el servicio NTP con paquetes como ntp, ntpdate y chrony.

[Sugerencia] 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] Sugerencia

ntptrace(8) del paquete ntp puede trazar una cadena de vuelta de los servidores NTP a la fuente primigenia.

La Arquitectura Avanzada de Sonido para Linux (Advanced Linux Sound Architecture, ALSA) proporciona los controladores de dispositivos de tarjetas de sonido en el actual Linux. ALSA tiene un modo de emulación para ser compatible con el anterior Open Sound System (OSS).

El software de aplicación se puede configurar no solo para acceder directamente a los dispositivos de sonido, sino también para acceder a ellos a través de algún sistema de servidor de sonido estandarizado. Actualmente, PulseAudio, JACK y PipeWire se utilizan como sistema de servidor de sonido. Ver la Página Wiki de Debian sobre sonido para estar actualizado.

Generalmente existe un motor de sonido común para los entorno de escritorio más populares. Cada motor de sonido utilizado por la aplicación puede elegir conectarse a diferentes servidores de sonido.

[Sugerencia] Sugerencia

Para comprobar el altavoz (speaker) utilice «cat /dev/urandom > /dev/audio» o speaker-test(1) (^C para finalizar).

[Sugerencia] 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.


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.


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] Atención

Ya que el paquete debsums utiliza la comprobación mediante MD5 almacenado en local, no se puede confiar plenamente en él como herramienta de auditoría de seguridad del sistema contra ataques maliciosos.

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.

Para la configuración de la partición del disco , a pesar de que fdisk(8) fue considerado en el pasado el estándar, parted(8) merece nuestra atención. Las expresiones «datos del particionado del disco«, «tabla de partición«, «mapa de particiones« y «marcado del disco« son todas ellas sinónimos.

Los ordenadores más antiguos usan el esquema clásico Master Boot Record (MBR) para almacenar datos del particionamiento del disco en el primer sector, es decir, LBA sector 0 (512 bytes).

Algunos ordenadores modernos con Interfaz de firmware extensible unificada (UEFI), incluidas los Mac basados en Intel, usan Identificar la tabla de particiones única globalmente (partición GUID Table, GPT) esquema, partición del disco duro los datos no se guardan en el primer sector.

Aunque fdisk(8) fue la herramienta estándar para el particionado del disco, se ha sustituido por parted(8).


[Atención] Atención

Aunque parted(8) afirma que crea y también modifica el tamaño de los sistemas de archivos, es más seguro realizar estas tareas con herramientas especializadas de mantenimiento como mkfs(8) (mkfs.msdos(8), mkfs.ext2(8), mkfs.ext3(8), mkfs.ext4(8), …) y resize2fs(8).

[Nota] Nota

Para realizar el cambio entre GPT y MBR, necesita eliminar el contenido de unos cuantos bloques ubicados al principio (ver Sección 9.8.6, “Limpieza del contenido de los archivos”) y utilice «parted /dev/sdx mklabel gpt» o «parted /dev/sdx mklabel msdos» para asignarlo. Tenga en cuenta que «msdos» se utiliza para MBR.

LVM2 es un gestor de volúmenes lógicos del núcleo de Linux. Con LVM2 las particiones de disco se pueden crear en volúmenes lógicos en vez de discos duros físicos.

LVM necesita lo siguiente.

  • soporte de device-mapper en el núcleo Linux (por defecto en los núcleos de Debian)

  • el soporte de la biblioteca device-mapper en el espacio de usuario (paquete libdevmaper*)

  • herramientas LVM2 del espacio de usuario (paquete lvm2)

Por favor, para saber sobre LVM2 lea las siguiente páginas de manual.

  • lvm(8): Fundamentos del mecanismo LVM2 (relación de todas las órdenes LVM2)

  • lvm.conf(5): archivo de configuración de LVM2

  • lvs(8): crea un informe sobre los volúmenes lógicos

  • vgs(8): crea un informe sobre los grupos de volúmenes

  • pvs(8): crea un informe sobre los volúmenes físicos

Para el sistema de archivos ext4, el paquete e2fsprogs aporta lo siguiente.

  • mkfs.ext4(8) para crear un nuevo de sistema de archivos ext4

  • fsck.ext4(8) para comprobar y reparar un sistema de archivos ext4 preexistente

  • tune2fs(8) para configurar el superbloque de ext4 filesystem

  • debugfs(8) para depurar en modo interactivo el sistema de archivos ext4. (Existe la orden undel para recuperar los archivos borrados.)

Las órdenes mkfs(8) y fsck(8) esta en el paquete e2fsprogs como interfaz de varios programas específicos del sistema de archivos (mkfs.fstype y fsck.fstype). Para el sistema de archivos ext4 existen mkfs.ext4(8) y fsck.ext4(8) (esta enlazado a mke2fs(8) y e2fsck(8)).

Las siguientes órdenes están disponibles para cada sistema de archivos que soporta Linux.


[Sugerencia] Sugerencia

Ext4 es el sistema de archivos por defecto para el sistema Linux y es muy recomendable su uso a menos que tenga una razón concreta para no hacerlo.

El estado de Btrfs se puede encontrar en La wiki de Debian en btrfs y la wiki kernel.org wiki en btrfs. Se espera que sea el siguiente sistema de archivos por defecto después del sistema de archivos ext4.

Algunas herramientas permiten el acceso al sistema de archivos sin soporte del núcleo de Linux (ver Sección 9.8.2, “Manipular archivos sin el montaje de discos”).

La unidad de estado sólido (SSD) ahora se detecta automáticamente.

Reducir los accesos innecesarios al disco para evitar el desgaste del disco montando "tmpfs" en la trayectoria de datos volátil en /etc/fstab.

Puede monitorear y registrar el cumplimiento de su disco duro con SMART con el demonio smartd(8).

  1. Active la funcionalidad SMART en la BIOS.

  2. Instale el paquete smartmontools.

  3. Identifique los dispositivos que son discos duros enumerándolos con df(1).

    • Asumamos que el dispositivo de disco duro a controlar es «/dev/hda».

  4. Compruebe la salida de «smartctl -a /dev/hda» para verificar que la funcionalidad SMART está activada realmente.

    • Si no es así, actívelo con «smartctl -s on -a /dev/hda».

  5. Active el demonio smartd(8) ejecutando lo siguiente.

    • descomente «start_smartd=yes» en el archivo «/etc/default/smartmontools».

    • reiniciar el demonio smartd(8) mediante «sudo /etc/init.d/smartmontools restart».

[Sugerencia] Sugerencia

El demonio smartd(8) se puede personalizar mediante el archivo /etc/smartd.conf que incluye el modo de notificación de las alertas.

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.

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"..

Aquí hablaremos de la manipulación de imágenes de disco.

El archivo de imagen de disco «disk.img», de un dispositivo desmontado, p. ej. el segundo disco SCSI o serial ATA «/dev/sdb», puede hacerse utilizando cp(1) o dd(1) como se muestra.

# cp /dev/sdb disk.img
# dd if=/dev/sdb of=disk.img

La imagen de disco de un PC tradicional Registro de Arranque Maestro(MBR) (ver Sección 9.6.2, “Configuración del particionado de disco”) que está en el primer sector del disco primario IDE puede hacerse mediante dd(1) lo siguiente.

# dd if=/dev/hda of=mbr.img bs=512 count=1
# dd if=/dev/hda of=mbr-nopart.img bs=446 count=1
# dd if=/dev/hda of=mbr-part.img skip=446 bs=1 count=66
  • «mbr.img»: MBR con la tabla de particiones

  • «mbr-nopart.img»: MBR sin la tabla de particiones

  • «mbr-part.img»: Únicamente la tabla de particiones MBR

Si su disco de arranque es SCSI o serial ATA, cambie «/dev/hda» por «/dev/sda».

Si ha hecho una imagen del disco de la partición del disco original, cambie «/dev/hda» por «/dev/hda1» etc.

La imagen del disco «partition.img» que contiene la imagen de una única partición se puede montar y desmontar utilizándolo como dispositivo «loop« como aparece.

# losetup --show -f partition.img
/dev/loop0
# mkdir -p /mnt/loop0
# mount -t auto /dev/loop0 /mnt/loop0
...hack...hack...hack
# umount /dev/loop0
# losetup -d /dev/loop0

Este se puede simplificar como se muestra.

# mkdir -p /mnt/loop0
# mount -t auto -o loop partition.img /mnt/loop0
...hack...hack...hack
# umount partition.img

Cada partición de una imagen de disco «disk.img» que contiene varias particiones se pueden montar utilizando los dispositivos «loop«.

# losetup --show -f -P disk.img
/dev/loop0
# ls -l /dev/loop0*
brw-rw---- 1 root disk   7,  0 Apr  2 22:51 /dev/loop0
brw-rw---- 1 root disk 259, 12 Apr  2 22:51 /dev/loop0p1
brw-rw---- 1 root disk 259, 13 Apr  2 22:51 /dev/loop0p14
brw-rw---- 1 root disk 259, 14 Apr  2 22:51 /dev/loop0p15
# fdisk -l /dev/loop0
Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1

Device         Start     End Sectors  Size Type
/dev/loop0p1  262144 4192255 3930112  1.9G Linux root (x86-64)
/dev/loop0p14   2048    8191    6144    3M BIOS boot
/dev/loop0p15   8192  262143  253952  124M EFI System

Partition table entries are not in disk order.
# mkdir -p /mnt/loop0p1
# mkdir -p /mnt/loop0p15
# mount -t auto /dev/loop0p1 /mnt/loop0p1
# mount -t auto /dev/loop0p15 /mnt/loop0p15
# mount |grep loop
/dev/loop0p1 on /mnt/loop0p1 type ext4 (rw,relatime)
/dev/loop0p15 on /mnt/loop0p15 type vfat (rw,relatime,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
...hack...hack...hack
# umount /dev/loop0p1
# umount /dev/loop0p15
# losetup -d /dev/loop0

De forma alternativa, se pueden conseguir los mismos efectos utilizando el mapeo de dispositivos de los dispositivos creados por kpartx(8) del paquete kpartx como sigue.

# kpartx -a -v disk.img
add map loop0p1 (253:0): 0 3930112 linear 7:0 262144
add map loop0p14 (253:1): 0 6144 linear 7:0 2048
add map loop0p15 (253:2): 0 253952 linear 7:0 8192
# fdisk -l /dev/loop0
Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1

Device         Start     End Sectors  Size Type
/dev/loop0p1  262144 4192255 3930112  1.9G Linux root (x86-64)
/dev/loop0p14   2048    8191    6144    3M BIOS boot
/dev/loop0p15   8192  262143  253952  124M EFI System

Partition table entries are not in disk order.
# ls -l /dev/mapper/
total 0
crw------- 1 root root 10, 236 Apr  2 22:45 control
lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p1 -> ../dm-0
lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p14 -> ../dm-1
lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p15 -> ../dm-2
# mkdir -p /mnt/loop0p1
# mkdir -p /mnt/loop0p15
# mount -t auto /dev/mapper/loop0p1 /mnt/loop0p1
# mount -t auto /dev/mapper/loop0p15 /mnt/loop0p15
# mount |grep loop
/dev/loop0p1 on /mnt/loop0p1 type ext4 (rw,relatime)
/dev/loop0p15 on /mnt/loop0p15 type vfat (rw,relatime,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
...hack...hack...hack
# umount /dev/mapper/loop0p1
# umount /dev/mapper/loop0p15
# kpartx -d disk.img

La imagen de disco vacío «disk.img» el cual puede crecer hasta 5GiB, pude hacerse mediante dd(1) como se muestra.

$ dd bs=1 count=0 if=/dev/zero of=disk.img seek=5G

En lugar de usar dd(1), se puede usar aquí fallocate(8) especializado.

Puede crear un sistema de archivos ext4 en la imagen de disco «disk.img» utilizando el dispositivo «loop« como se muestra.

# losetup --show -f disk.img
/dev/loop0
# mkfs.ext4 /dev/loop0
...hack...hack...hack
# losetup -d /dev/loop0
$ du  --apparent-size -h disk.img
5.0G  disk.img
$ du -h disk.img
83M disk.img

Para «disk.img», su tamaño de archivo es 5.0 GiB y su utilización real de disco es de sólo 83MiB. Esta discrepancia es posible ya que ext4 se puede representar mediante un archivo disperso.

[Sugerencia] Sugerencia

La utilización real de discos que utiliza un archivo disperso crece con los datos que son escritos en el.

Utilizando la misma operación en dispositivos creados por el dispositivo «loop« o el mapeador de dispositivos como Sección 9.7.3, “Montaje del archivo imagen del disco”, puede particionar esta imagen de disco «disk.img» utilizando parted(8) o fdisk(8) y puede crear el archivo de sistemas en el utilizando mkfs.ext4(8), mkswap(8), etc.

El archivo de imagen ISO9660, «cd.iso», utilizando como origen el árbol de directorios de «source_directory» se puede hacer utilizando genisoimage(1) aportado por cdrkit como se muestra.

#  genisoimage -r -J -T -V volume_id -o cd.iso source_directory

De igual manera, el archivo imagen ISO9660 arrancable, «cdboot.iso», se puede realizar desde el debian-installer como el árbol de directorios del «source_directory» como se muestra.

#  genisoimage -r -o cdboot.iso -V volume_id \
   -b isolinux/isolinux.bin -c isolinux/boot.cat \
   -no-emul-boot -boot-load-size 4 -boot-info-table source_directory

Aquí el cargador de arranque Isolinux (ver Sección 3.1.2, “Fase 2: el cargador de arranque”) se utiliza para el arranque.

Puede calcular el valor md5sum y hace la imagen ISO9660 directamente desde el dispositivo CD-ROM como se muestra.

$ isoinfo -d -i /dev/cdrom
CD-ROM is in ISO 9660 format
...
Logical block size is: 2048
Volume size is: 23150592
...
# dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror | md5sum
# dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror > cd.iso
[Aviso] Aviso

Debe evitar cuidadosamente el sistema de archivos ISO9660 debido al problema de lectura adelantada de Linux para obtener el resultado correcto.

Aquí discutiremos la manipulación directa de datos binarios en medios de almacenamiento.

Existen herramientas para la recuperación de archivos y análisis forense.


[Sugerencia] 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.

Con acceso físico a su PC, cualquiera puede acceder como superusuario y acceder a todos los archivos en él (ver Sección 4.6.4, “Asegurando la contraseña de root”). Esto significa que el sistema de acceso por contraseña puede no asegurar sus datos delicados y privados contra posibles ladrones de su PC. Para hacerlo debe desplegar alguna tecnología de cifrado de información. Aunque GNU privacy guard (ver Sección 10.3, “Infraestructura de seguridad de la información”) puede cifrar archivos , necesita de los esfuerzos del usuario.

Dm-crypt ayuda al cifrado automático de la información de forma nativa por medio de módulos del núcleo Linux con el mínimo esfuerzo por parte del usuario usando device-mapper.


[Atención] 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] 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] Sugerencia

Ver Sección 10.3, “Infraestructura de seguridad de la información” para la utilización del cifrado del espacio de usuario: GNU Privacy Guard.

Puede cifrar el contenido de los dispositivos masivos extraíbles, p. ej. memoria USB en «/dev/sdx», utilizando dm-crypt/LUKS. Simplemente formatéelo como se muestra.

# fdisk /dev/sdx
... "n" "p" "1" "return" "return" "w"
# cryptsetup luksFormat /dev/sdx1
...
# cryptsetup open /dev/sdx1 secret
...
# ls -l /dev/mapper/
total 0
crw-rw---- 1 root root  10, 60 2021-10-04 18:44 control
lrwxrwxrwx 1 root root       7 2021-10-04 23:55 secret -> ../dm-0
# mkfs.vfat /dev/mapper/secret
...
# cryptsetup close secret

Entonces, se puede montar igual que uno normal en "/media/nombre_usuario/etiqueta_disco", excepto para pedir la contraseña (ver Sección 10.1.7, “Dispositivos de almacenamiento extraíbles”) bajo el entorno de un escritorio moderno usando el paquete udisks2. La diferencia es que todos los datos que se escriben en él están cifrados. La introducción de la contraseña puede automatizarse utilizando llaveros (véase Sección 10.3.6, “Llavero de contraseña”).

Alternativamente, puedes formatear los medios en un sistema de archivos diferente, por ejemplo, ext4 con "mkfs.ext4 /dev/mapper/sdx1". Si se utiliza btrfs en su lugar, es necesario instalar el paquete udisks2-btrfs. Para estos sistemas de archivos, puede ser necesario configurar la propiedad y los permisos de los archivos.

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.

Debian tiene su propio método para compilar el núcleo y los módulos asociados.


Si utiliza initrd en Sección 3.1.2, “Fase 2: el cargador de arranque”, asegurese de leer la documentación asociada en initramfs-tools(8), update-initramfs(8), mkinitramfs(8) y initramfs.conf(5).

[Aviso] 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] Nota

Cuando compile el núcleo de Linux en el sistema Debian stable (estable), la utilización las últimas herramientas retroportadas de Debian unstable (inestable) pueden ser necesarias.

module-assistant(8) (o su forma abreviada m-a) ayuda a los usuarios a construir e instalar fácilmente los paquetes de los módulos para uno o más núcleos personalizados.

El soporte del núcleo a módulos dinámicos (dynamic kernel module support, DKMS) es un marco nuevo de distribución independiente diseñado para permitir la actualización de módulos sueltos sin cambiar el núcleo completo. Esto es utilizado para mantener módulos externos. Esto también facilita la reconstrucción de módulos cuando actualice su núcleo.

El controlador de hardware es el código que se ejecuta en las CPU principales del sistema de destino.. La mayor parte de los controladores de hardware están disponibles como software libre actualmente se incluyen en los paquetes normales del núcleo de Debian en el apartado main.

  • controlador de GPU

    • Controlador de Intel GPU (main)

    • Controladores AMD/ATI GPU (main)

    • Controlador NVIDIA GPU (main para el controlador nouveau y non-free para los controladores binarios aportado por el vendedor.)

El firmware es el código o los datos ubicados en el propio dispositivo (p. ej. CPU microcode, código ejecutable para el «rendering« en GPU, o los datos FPGA / CPLD , …). Algunos paquetes con firmware están disponibles como software libre pero no la mayoría ya que contienen información binaria sin su código fuente. La instalación de estos datos de firmware es esencial para que el dispositivo funcione como se espera.

  • Paquetes de datos de firmware que contienen datos cargados en la memoria volátil en el dispositivo de destino.

    • firmware-linux-free (main)

    • firmware-linux-nonfree (non-free-firmware)

    • firmware-linux-* (non-free-firmware)

    • *-firmware (non-free-firmware)

    • intel-microcode (non-free-firmware)

    • amd64-microcode (non-free-firmware)

  • El programa de actualización de firmware empaqueta los datos de actualización en la memoria no volátil en el dispositivo de destino.

    • fwupd (main): Demonio de actualización de firmware que descarga datos de firmware de Linux Vendor Firmware Service.

    • gnome-firmware (principal): interfaz GTK para fwupd

    • plasma-discover-backend-fwupd (principal): interfaz Qt para fwupd

Ten en cuenta que el acceso a los paquetes de non-free-firmware lo proporcionan los medios de instalación oficiales para ofrecer una experiencia de instalación funcional al usuario desde Debian 12 Bookworm. El área de firmware no libre se describe en Sección 2.1.5, “Fundamentos del archivo de Debian”.

Ten en cuenta también que los datos del firmware descargados por fwupd del Servicio de firmware del proveedor de Linux y cargados en el kernel de Linux en la ejecución pueden ser no libre.

La utilización de sistemas virtualizados nos permite la ejecución de varias instancias del sistema a la vez sobre un único hardware.

Hay varias plataformas de virtualización y emulación.

  • Completa los paquetes del hardware de emulación como los instalados por el metapaquete games-emulator

  • Principalmente la emulación a nivel de la CPU con algunas emulaciones de dispositivos de E/S como QEMU

  • Principalmente la virtualización a nivel de CPU con algunas emulaciones de dispositivos de E/S como Máquina virtual basada en kernel (KVM)

  • Virtualización de los contenedores a nivel del sistema operativo con soporte a nivel de kernel como LXC (Linux Containers), Docker, systemd-nspawn(1), ....

  • Virtualización del acceso al sistema de archivos a nivel del sistema operativo con la anulación de la llamada a la biblioteca del sistema en la ruta del archivo, como chroot

  • Virtualización del acceso al sistema de archivos a nivel del sistema operativo con la anulación de las llamada a la biblioteca del sistema sobre la propiedad del archivo, como fakeroot

  • Emulación de API de SO como Wine

  • Virtualización a nivel del intérprete, además de la selección de la ejecución y anulaciones de las bibliotecas en el tiempo de ejecución, como virtualenv y venv de Python

La virtualización de los contenedores utiliza Sección 4.7.5, “Características de seguridad de Linux” y es la tecnología backend de Sección 7.7, “Sandbox”.

Aquí tienes algunos paquetes que te ayudarán a configurar el sistema virtualizado.

Tabla 9.27. Relación de herramientas de virtualización

paquete popularidad tamaño descripción
coreutils V:880, I:999 18307 Utilidades básicas de GNU que contienen chroot(8)
systemd-container V:53, I:61 1330 herramientas systemd container/nspawn que contienen systemd-nspawn(1)
schroot V:5, I:7 2579 herramientas especializadas para la ejecución de paquetes binarios en «chroot«
sbuild V:1, I:3 243 herramientas para la construcción de paquetes binarios desde el código fuente de Debian
debootstrap V:5, I:54 314 sistema de arranque como sistema Debian mínimo (escrito en sh)
cdebootstrap V:0, I:1 115 sistema de arranque de un sistema Debian (escrito en C)
cloud-image-utils V:1, I:17 66 utilidades para la gestión de las imágenes en la nube
cloud-guest-utils V:3, I:13 71 utilidades para invitados en la nube
virt-manager V:11, I:44 2296 Gestor de Máquinas Virtuales: aplicación de escritorio para la gestión de máquinas virtuales
libvirt-clients V:46, I:65 1241 programas para la biblioteca libvirt
incus V:0, I:0 56209 Incus: contenedor de los sistemas y gestor de máquinas virtuales (para Debian 13 "Trixie")
lxd V:0, I:0 52119 LXD: contenedor de los sistemas y gestor de máquinas virtuales (para Debian 12 "Bookworm")
podman V:14, I:16 41948 podman: motor para ejecutar contenedores basados en OCI en Pods
podman-docker V:0, I:0 249 motor para ejecutar contenedores basados en OCI en Pods - wrapper para docker
docker.io V:41, I:43 150003 docker: Tiempo de ejecución de contenedores Linux
games-emulator I:0 21 games-emulator: emuladores de Debian para juegos
bochs V:0, I:0 6956 Bochs: emulador de PC IA-32 PC
qemu I:14 97 QEMU: emulador rápido de un procesador genérico
qemu-system I:22 66 QEMU: binarios para la emulación de un sistema completo
qemu-user V:1, I:6 93760 QEMU: binarios para la emulación en modo usuario
qemu-utils V:12, I:106 10635 QEMU: utilidades
qemu-system-x86 V:33, I:91 58140 KVM: virtualización completa de hardware x86 con la virtualización asistida por hardware
virtualbox V:6, I:8 130868 VirtualBox: solución de virtualización x86 en i386 y amd64
gnome-boxes V:1, I:7 6691 Boxes: Sencilla aplicación de GNOME para acceder a sistemas virtuales
xen-tools V:0, I:2 719 herramientas para la gestión de debian del servidor virtual XEN
wine V:13, I:60 132 Wine: Implementación de la API Windows (suite estándar)
dosbox V:1, I:15 2696 DOSBox: emulador x86 con gráficos Tandy/Herc/CGA/EGA/VGA/SVGA , sonido y DOS
lxc V:9, I:12 25890 Contenedores Linux herramientas del espacio de usuario
python3-venv I:88 6 venv para crear entornos virtuales python (biblioteca del sistema)
python3-virtualenv V:9, I:50 356 virtualenv para crear entornos python virtuales aislados
pipx V:3, I:19 3324 pipx para instalar aplicaciones python en entornos aislados

Consulte el artículo de Wikipedia Comparison of platform virtual machines para obtener detalles de la comparación entre diferentes plataformas y soluciones de virtualización.

[Nota] Nota

El núcleo de Debian por defecto soporta KVM desde lenny.

El flujo de trabajo de la virtualización conlleva varios pasos.

Para un archivo de imagen de disco crudo, ver Sección 9.7, “La imagen de disco”.

Para otros archivos de imágenes de disco virtuales, puede utilizar qemu-nbd(8) para exportarlos utilizando el protocolo de dispositivos de bloque de red y montarlos utilizando el módulo del núcleo nbd.

qemu-nbd(8) admite formatos de disco compatibles con QEMU: crudo, qcow2, qcow, vmdk, vdi, bochs, cow (copia al escribir en modo usuario de Linux), parallels, dmg, cloop, vpc, vvfat (virtual VFAT) y «host_device«.

Los dispositivos de bloque de red pueden soportar particiones de la misma manera que los dispositivos «loop« (ver Sección 9.7.3, “Montaje del archivo imagen del disco”). Puede montar la primera partición de «disk.img» como se muestra.

# modprobe nbd max_part=16
# qemu-nbd -v -c /dev/nbd0 disk.img
...
# mkdir /mnt/part1
# mount /dev/nbd0p1 /mnt/part1
[Sugerencia] Sugerencia

Puede exportar únicamente la primera partición de «disk.img» 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] Atención

Los ejemplos de abajo asumen que tanto el sistema padre como el sistema chroot comparten la misma arquitectura de CPU amd64.

Aunque puedes crear manualmente un entorno chroot(8) usando debootstrap(1), esto requiere esfuerzos no triviales.

El paquete sbuild para crear paquetes Debian desde el código fuente utiliza el entorno chroot administrado por el paquete schroot. Viene con una secuencia de comandos auxiliar sbuild-createchroot(1). Aprendamos cómo funciona ejecutándolo de la siguiente manera.

$ sudo mkdir -p /srv/chroot
$ sudo sbuild-createchroot -v --include=eatmydata,ccache unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian
 ...

Puedes ver como debootstrap(8) rellena los datos del sistema para el entorno unstable bajo "/srv/chroot/unstable-amd64-sbuild" para un sistema de construcción mínimo.

Puedes acceder a este entorno utilizando schroot(1).

$ sudo schroot -v -c chroot:unstable-amd64-sbuild

Verás cómo se crea un shell de sistema que se ejecuta en un entorno inestable.

[Nota] Nota

El fichero "/usr/sbin/policy-rc.d" que siempre sale con 101 impide que los programas demonio se inicien automáticamente en el sistema Debian. Consulta "/usr/share/doc/init-system-helpers/README.policy-rc.d.gz".

[Nota] 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] 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] 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 gestionar las máquinas virtuales KVM a través de libvirt.

La imagen de disco virtual «virtdisk.qcow2» que contiene una imagen del sistema Debian para QEMU se puede crear utilizando el instalador debian: en pequeños CDs como se muestra.

$ wget https://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso
$ qemu-img create -f qcow2 virtdisk.qcow2 5G
$ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256
...
[Sugerencia] Sugerencia

Ejecutar otra distribución GNU/Linux como Ubuntu y Fedora de forma virtualizada es un gran manera de aprender formas de configuración. También se pueden ejecutar correctamente SS.OO. propietarios virtualializado sobre GNU/Linux.

Ver más consejos en La Wikipedia de Debian: Virtualización del sistema.



[2] Ejemplos de personalización más elaborados: "Vim Galore", "sensible.vim", ...

[3] vim-pathogen fue popular.