Trucos para Debian


“¡Olvidé la contraseña de superusuario!” (1)
Es posible arrancar el sistema y acceder a la cuenta de superusuario sin conocer la contraseña siempre y cuando se tenga acceso al teclado de la consola (esto supone que ni la BIOS ni un cargador de arranque como lilo solicitan una contraseña para evitar el arranque del sistema) Este es un procedimiento que no requiere de discos de arranque externos ni cambios en los parámetros de arranque de la BIOS. Aquí, “Linux” hace referencia al kernel de Linux de la instalación predeterminada de Debian.

En el pantalla de arranque de lilo, cuando aparece boot: (en algunos sistemas debe presionar la tecla Mayús para evitar el arranque automático) escriba:
boot: Linux init=/bin/sh
Esto hará que el sistema arranque el kernel y ejecute el /bin/sh en vez del estándar init. Ahora tenemos privilegios de superusuario y acceso al intérprete de comandos. Puesto que / generalmente está montado en modo sólo lectura y aún no han sido montadas las distintas particiones, debe hacer lo siguiente para tener un sistema que funcione razonablemente.
init-2.03# mount -n -t remount,rw /
init-2.03# mount -avt nonfs,noproc,nosmbf
init-2.03# cd /etc
init-2.03# vi passwd
init-2.03# vi shadow
(si el segundo campo de datos en el /etc/passwd es una “x” para cada nombre de usuario, su sistema utiliza contraseñas ocultas y debe editar el archivo /etc/shadow) Para desactivar la contraseña de root, edite el segundo campo de datos en el archivo de contraseñas de modo que quede vacío. Ahora se puede reiniciar el sistema y entrar como root sin contraseña. A diferencia de algunas distribuciones Linux antiguas, la Debian actual (Potato) requiere de contraseña sólo cuando arranca en el nivel de ejecución 1.
“¡Olvidé la contraseña de superusuario!” (2)
Arranque desde un disco de emergencia. Si /dev/hda3 es la partición raíz original, lo siguiente le permitirá editar el archivo de contraseñas tan fácilmente como antes.
# mkdir fixit
# mount /dev/hda3 fixit
# cd fixit/etc
# vi shadow
# vi passwd
La ventaja de este enfoque sobre el anterior es que no se necesita conocer la contraseña de lilo (si existe). Pero para usarlo uno debe ser capaz de poder acceder a la configuración de la BIOS para permitir arrancar el sistema desde un disquete o CD si es que ya no está configurada como tal.
No puedo arrancar el sistema
Si se tomó la molestia de crear un disco de arranque durante la instalación, no habrá ningún problema. Si lilo se encuentra dañado, grabe el disco de arranque desde el disco de instalación de debian y arranque el sistema con él. En el indicador de arranque, suponiendo que la partición raíz de su instalación Linux es /dev/hda12 y que desea entrar al nivel de ejecución 3, escriba:
boot: rescue root=/dev/hda12 3
De esta manera arrancará con un sistema prácticamente funcional usando el kernel del disquete (pueden existir pequeños inconvenientes debido a la falta de algunas características o módulos del kernel).
Si necesita un disquete de arranque personalizado, consulte el readme.txt sobre el disco de rescate.
Otros trucos con el indicador de arranque
El sistema se puede arrancar en un nivel de ejecución particular y con una configuración determinada usando el indicador de arranque de lilo. Para más detalles consulte el BootPrompt-HOWTO (LDP).
Si desea arrancar el sistema en el nivel de ejecución cuatro, use la siguiente entrada para el indicador de arranque de lilo.
boot: Linux 4
Si desea arrancar el sistema en modo monousuario y conoce la contraseña de superusuario, algunos de los siguientes ejemplos funcionará usando el indicador de arranque de lilo.
boot: Linux S
boot: Linux 1
boot: Linux -s
Si desea arrancar el sistema con menos memoria de la que realmente posee el sistema (por ejemplo, 48MB en un sistema con 64MB), use la siguiente entrada para el indicador de arranque de lilo:
boot: Linux mem=48M
Asegúrese de no especificar un valor mayor al tamaño de memoria real ya que si es así el kernel se colgará. Los núcleos antiguos y/o las placas madres con una BIOS antigua no usan la memoria por encima de los 64 MB, salvo que uno escriba mem=128M en el indicador de arranque o incluya una línea similar en el /etc/lilo.conf.
Registro de actividades
Registrando las actividades del intérprete de comandos
La administración del sistema implica tareas mucho más elaboradas en un entorno Unix que un entorno común de una computadora personal. Asegúrese de saber lo básico sobre configuración por si acaso necesita recuperar el sistema de algún problema. Las herramientas de configuración con GUI basadas en X-Window son agradables y convenientes pero a menudo inapropiadas en situaciones de emergencia.
En este contexto, el registro de las actividades del intérprete de comandos resulta ser una buena práctica especialmente como superusuario.
Emacs: utilice M-x shell para empezar a grabar en el búfer y C-x C-w para escribir el contenido del mismo en un archivo.
Intérprete de comandos: utilice el comando script.
$ script
Script started, file is typescript
… hacer cualquier cosa …
Control-D
$ col -bx <typescript >savefile
$ vi savefile
Se puede utilizar lo siguiente en vez del comando script:
$ bash -i 2>&1 | tee typescript
Registrando las actividades en X
Si necesita registrar la imagen de una aplicación X, incluyendo una terminal xterm, utilice gimp (GUI). Puede capturar cada ventana o la totalidad de la pantalla. Otras alternativas son xwd (xbase-clients), import (imagemagick) o scrot (scrot).
Copiar y archivar un subdirectorio entero
Comandos básicos para copiar un subdirectorio entero
Si necesita reordenar la estructura de archivos, mueva el contenido incluyendo los enlaces a archivos mediante:
Método estándar:
# cp -a /directorio/fuente /directorio/destino # debe ser GNU
# (cd /directorio/fuente && tar cf – . ) | \
(cd /directorio/destino && tar xvfp – )
Si existen enlaces duros, se necesita un método más elaborado:
# cd /ruta/al/directorio/original
# find . -depth -print0 | afio -p -xv -0a
# /punto/de/montaje/del/nuevo/directorio
En el caso de una conexión remota:
# (cd /directorio/fuente && tar cf – . ) | \
ssh usuario@host.dom Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla (cd /directorio/destino && tar xvfp – )
Si no hay archivos enlazados:
# scp -pr usuario1@host1.dom Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla :/directorio fuente \
usuario2@host2.dom Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla :/directorio/destino
En este caso, scp <==> rcp y ssh <==> rsh.
El método para copiar un subdirectorio entero está basado en la información proporcionada por Manoj Srivastava < srivasta@debian.org Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla > de la lista debian-user@lists.debian.org Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla .
cp
Inicialmente, cp no resultaba ser el candidato correcto ya que no desreferenciaba enlaces simbólicos ni tampoco preservaba enlaces duros. Otra cosa a considerar eran los archivos de tamaño muy pequeño.
GNU cp ha superado estas limitaciones. No obstante en sistemas que no son GNU cp puede aún tener problemas. Asimismo, no se pueden generar archivos portables pequeños usando cp.
% cp -a . directorio_nuevo
tar
Tar soluciona algunos de los problemas que tenía cp con los enlaces simbólicos. Sin embargo, ‘cpio’ maneja archivos especiales que el ‘tar’ tradicional no puede manejar.
‘tar’ maneja múltiples enlaces duros colocando una única copia de un enlace en la cinta. El nombre asignado a dicha copia es el único que se puede usar para recuperar el archivo. En cambio, ‘cpio’ coloca una copia de cada enlace de manera que para recuperar el archivo se puede utilizar el nombre de cualquiera de ellas.
pax
Es la nueva utilidad para archivar, portable y compatible POSIX (IEEE Std 1003.2-1992, páginas 380-388 (sección 4.48) y páginas 936-940 (sección E.4.48)). Pax lee, escribe y lista los componentes de un directorio y copia la jerarquía de los mismos. La operación pax es independiente del formato específico del archivo y admite una amplia variedad de formatos.
Las implementaciones de pax son aún nuevas y están en pleno desarrollo.
$ pax -rw -p e . directorio_nuevo
o
$ find . -depth | pax -rw -p e directorio_nuevo
cpio
Cpio almacena o extrae archivos en o de un archivo tar o cpio. El archivo puede ser otro archivo del disco, una cinta magnética o una tubería.
$ find . -depth -print0 | cpio –null –sparse -pvd new-dir
afio
Afio es una mejor forma de tratar con archivos con formato cpio. Generalmente es más rápido que cpio, proporciona más opciones para utilizar con cintas magnéticas y maneja mejor la corrupción de los datos de entrada. Admite archivos multi-volumen durante su operación interactiva. Afio puede crear archivos empaquetados que son mucho más seguros que los empaquetados con tar o cpio. En un script, para realizar una copia de seguridad, afio tiene un comportamiento óptimo como ’motor para archivar’.
$ find . -depth -print0 | afio -px -0a directorio_nuevo
Para crear todas mis copias de respaldo en una cinta uso afio.
Modificar archivos con la sustitución de expresiones regulares
Para reemplazar todas las instancias FROM_REGEX por TO_REGEX en todos los archivos FILES . . . :
# perl -i -p -e ’s/FROM_REGEX/TO_REGEX/g;’ FILES …
-i es para “editar en el lugar”, -p significa “bucle implícito sobre los archivos FILES . . . ”. Si la sustitución es compleja, la recuperación ante posibles errores resulta más fácil usando el parámetro -i.bak en vez de -i. De esta manera se conservará una copia de los archivos originales a los que se les agregará la extensión .bak.
Recuperar al sistema de un cuelgue
Mate el proceso
Ejecute top para ver cuál es el proceso que está actuando de manera extraña. Pulse “P” para ordenar por tiempo de cpu, “M” para ordenar por uso de memoria y “k” para matar un proceso.
Utilice kill junto el ID del proceso para matar (o enviar una señal a) un proceso, killall para hacer lo mismo pero usando el nombre del comando. Señales de uso habitual:
1: HUP, reiniciar demonio
15: TERM, terminar un proceso en forma normal
9: KILL, matar un proceso sin contemplaciones
ALT-SysRq
La opción de compilación del kernel “Magic SysRq key” proporciona una protección contra el mal funcionamiento del sistema. Pulsando ALT-SysRq en una i386 y a continuación una de las teclas r 0 k e i s u b se obtiene el pase mágico.
UnRaw restaura el teclado tras el cuelgue de X. Modifique el nivel de registro de la consola con 0 para reducir los mensajes de error. saK (tecla de atención del sistema) mata a todos los procesos en la consola virtual actual. tErminate mata a todos los procesos de la terminal actual salvo init. kIll mata a todos los procesos incluyendo a init.
Sync (sincronizar), Umount (desmontar), y reBoot (reiniciar) a menudo se utilizan en el caso de situaciones realmente complicadas.
En el momento de escribir este documento, los núcleos que vienen con la instalación predeterminada de Debian no han sido compilados con esta opción. Recompile el kernel para activarla.
Se puede encontrar información detallada en:
/usr/share/doc/kernel-doc-version/Documentation/sysrq.txt.gz.
Archivos de configuración
Algunos pequeños comandos útiles para tener en cuenta
Memoria disponible
free y top brindan una buena información sobre los recursos de memoria disponibles.No se preocupe por el tamaño que figura bajo “used” de la línea “Mem:” sino por el valor que se encuentra justo debajo de él (38792 en el siguiente ejemplo).
$ free -k # para una máquina con 256MB total used free shared buffers cached
Mem: 257136 230456 26680 45736 116136 75528
-/+ buffers/cache: 38792 218344
Swap: 264996 0 264996
La cantidad de memoria física exacta se puede confirmar haciendo grep ’^Memory’ /var/log/dmesg.
En este caso arroja el siguiente resultado: “Memory: 256984k/262144k available (1652k kernel
code, 412k reserved, 2944k data, 152k init)”.
Total = 262144k = 256M (1k=1024, 1M=1024k)
Free to dmesg = 256984k = Total – kernel – reserved – data – init
Free to shell = 257136k = Total – kernel – reserved – data
El sistema no puede usar cerca de 5MB ya que lo utiliza el propio kernel.
Configurar fecha y hora (BIOS)
# date MMDDhhmmCCYY
# hwclock –utc
# hwclock –systohc
# hwclock –show
Esto fijará la fecha y hora del sistema y del hardware en MM/DD hh:mm, CCYY. La hora se muestra según el huso horario local pero el hardware utiliza el UTC. Configure el reloj del sistema para corregir la fecha y hora en forma automática mediante un servidor remoto:
# ntpdate <server>
Si su sistema posee una conexión a Internet permanente, resulta interesante incluirlo en /etc
/cron.daily.
Como desactivar el protector de pantalla
En la consola de Linux:
# setterm -powersave off
Ejecute la consola kon2 (kanji) con:
# kon -SaveTime 0
Cuando esté ejecutando X:
# xset s off
o
# xset -dpms
o
# xscreensaver-command -prefs
Consulte las correspondientes páginas del manual.
Desactivar el sonido (bip)
Uno siempre puede desenchufar el parlante del PC 😉 Para el intérprete de comandos:
echo “set bell-style none”>> ~/.inputrc:
Mensajes de error en la pantalla
El primer lugar que hay que consultar para leer los mensajes de error que aparecen por pantalla es /etc/init.d/klogd. En este script haga la siguiente asignación KLOGD=“-c 4” y ejecute
/etc/init.d/klogd restart.
Un método alternativo consiste en ejecutar dmesg -n1.
Otro lugar que hay que ver es el /etc/syslog.conf.
Volver la consola a su estado normal
Si la pantalla se enloquece después de hacer $ cat archivo_binario (quizás no pueda ver el comando que ingresa mientras escribe) haga:
$ reset
Convertir un archivo de texto en formato DOS a formato Unix
Convertir un archivo de texto en formato DOS (fin-de-línea=^M^J) en un archivo Unix (^J).
# apt-get install sysutils
$ dos2unix dosfile
Convertir un archivo grande en archivos más pequeños
$ split -b 650m archivo # dividir el archivo en partes de 650 MB
$ cat x* >archivo_grande # unir los archivos en un archivo grande
Pequeños scripts que incluyen redireccionamientos
Los siguientes scripts realizan tareas útiles utilizando tuberías.
find /usr | egrep -v “/usr/var|/usr/tmp|/usr/local”
# encontrar todos los archivos en /usr
# excluyendo algunos archivos
xargs -n 1 command # ejecutar comando para tods los ítems de la stdin
xargs -n 1 echo| # escribir ítems separados por espacios en blanco
# en renglones
grep -e patrón| # extraer líneas con un determinado patrón
cut -d: -f3 -| # extraer el tercer campo separado por :
# (archivo passwd, etc.)
col -bx | # eliminar retrocesos y convertir tabulaciones en
# espacios
expand -| # transformar las tabulaciones
sort -u| # ordenar y eliminar duplicados
tr ’\n’ ’ ’| # concatenar líneas en una sola línea
tr ’\r’ ’’| # eliminar CR (retornos de carro)
tr ’A-Z’ ’a-z’| # convertir mayúsculas en minúsculas
sed ’s/^/# /’| # transformar cada línea en un comentario
sed ’s/\.ext//g’| # eliminar .ext
sed -n -e 2p| # mostrar la segunda línea
head -n 2 -| # mostrar las primeras 2 líneas
tail -n 2 -| # mostrar las últimas 2 líneas
Obtener el texto de una página web o del archivo de una lista de correos
Lo siguiente leerá una página web como un archivo de texto. Resulta muy útil cuando se desea copiar configuraciones que se obtienen de la red.
$ lynx -dump http://www.remote-site.com/help-info.html >archivo_de_texto
Si se trata de un archivo de una lista de correo, use munpack para obtener los contenidos mime del texto.
El tiempo de un comando
Mostrar el tiempo empleado por un proceso.
# time df >/dev/null
real 0m0.035s # tiempo de reloj (tiempo real transcurrido)
user 0m0.000s # tiempo en modo usuario
sys 0m0.020s # tiempo en modo kernel
El comando nice
Use nice (del paquete GNU shellutils) para fijar el valor “nice” de un comando al ejecutarlo.
renice (bsdutild) o top puede modificar el valor “nice” de un proceso. El proceso más lento
tiene el valor 19 (prioridad más baja); los valores negativos son “not-nice”. El valor -20 lo tiene el proceso más veloz (prioridad alta). Sólo el superusuario puede fijar valores “nice” negativos.
# nice -19 top # muy lento
# nice –20 cdrecord -v -eject speed=2 dev=0,0 disk.img # muy rápido
Planificar una actividad (cron, at)
Use cron y at para planificar tareas en Linux. Véase at(1), crontab(5), crontab(8).
Ejecute el comando crontab -e para crear o editar el archivo crontab para configurar eventos
planificados. Ejemplo de un archivo crontab:
# utilice /bin/sh para ejecutar los comandos sin importar lo que dice el
# /etc/passwd
SHELL=/bin/sh
# envíe un mensaje a ‘pablo’ sin importar a quien pertenece el crontab
MAILTO=pablo
# Minuto Hora Día_del_mes Mes Día_de_la_semana comando
# ejecutar todos los días a las 00:05
5 0 * * * $HOME/bin/tarea.diaria >> $HOME/tmp/salida 2>&1
# ejecutar a las 14:15 el primer día de cada mes — enviar salida a Pablo
15 14 1 * * $HOME/bin/mensual
# ejecutar a las 22:00 todos los días hábiles (1-5), molestar a José.
# % para nueva línea, el último % para cc:
0 22 * * 1-5 mail -s “Son las 10 de la noche” josé %José: % %¿Dónde están
los chicos? %. % %
23 */2 1 2 * echo “ejecutar el 1 de febrero a los 23 minutos después
de 0am, 2am, 4am …”
5 4 * * sun echo “ejecutar todos los domingos a las 04:05”
# ejecutar a las 03:40 el primer lunes de cada mes
40 3 1-7 * * [ “$(date + %a)” == “Mon” ] && comando -args
Ejecutar el comando at para planificar una tarea una sola vez:
$ echo ’command -args’| at 3:40 monday
Intercambiando consolas con screen
El programa screen permite ejecutar múltiples terminales virtuales, cada una con su intérprete de comandos interactivo, en una única terminal física o ventana que emule un terminal. Incluso si utiliza consolas virtuales Linux o múltiples ventanas xterm, merece la pena experimentar con screen por sus amplias funcionalidades que incluye navegación por el histórico de comandos, copiar y pegar, registro de accesos al sistema, entrada de caracteres especiales y la capacidad de separar una sesión entera de screen del terminal para recuperarla posteriormente. Si frecuentemente se conecta a una máquina Linux desde un terminal remoto o usando el terminal VT100, screen le facilitará muchísimo las cosas.
Una vez que arranca screen toda la entrada de datos que se hace a través del teclado se envía a la ventana actual excepto la combinación de teclas de comando, por defecto ^A. Todos los comandos de screen se ingresan escribiendo ^A seguido de una sola tecla [y eventualmente algunos parámetros]. Algunos comandos útiles:
^A ? mostrar ventana de ayuda (muestra las asociaciones de teclas)
^A c crear una nueva ventana y cambiar a ella
^A n ir a la siguiente ventana
^A p ir a la ventana anterior
^A 0 ir a la ventana número 0
^A w mostrar la lista de ventanas
^A a enviar un Ctrl-A a la ventana actual como entrada del teclado
^A h grabar una copia de la ventana actual a un archivo
^A H comenzar/finalizar la grabación de ventana actual en un archivo
^A ^X bloquear la terminal (protegida con contraseña)
^A d separar una sesión del terminal
^A DD separar una sesión y salir
La posibilidad de screen de “separar” una sesión es muy poderosa. Supongamos que estamos conectados a través de una conexión telefónica y estamos ejecutando una sesión compleja con screen que incluye editores y otros programas abiertos en diversas ventanas. De repente, necesitamos abandonar el terminal pero no queremos perder nuestro trabajo al colgar la línea. Simplemente, escriba ^A d para separar la sesión y luego desconéctese (o, más rápido aún, escriba ^ADD para desprender la sesión de screen y simultáneamente desconectarse). Cuando se conecte nuevamente, escriba el comando screen -r y screen automáticamente recuperará todas las ventanas que había abierto.
Éste es sólo una pequeña muestra de los comandos y características de screen. Si hay algo que desea que screen haga, ¡existe una gran posibilidad que pueda hacerlo!. “man screen” para más detalles.
Observación: si ve que la tecla de retroceso y/o Ctrl-H no funciona correctamente cuando ejecuta screen, edite el archivo /etc/screenrc, localice la línea bindkey -k kb stuff “\177” y coméntela (es decir, agréguele el carácter “#” al principio).
Probando la red
Instale netkit-ping, traceroute, dnsutils, ipchains (para el kernel 2.2), iptables (para el kernel 2.4 ) y el paquete net-tools:
$ ping yahoo.com # verificar la conexión a Internet
$ traceroute yahoo.com # rastrear paquetes IP
$ ifconfig # verificar la configuración del
# anfitrión (host)
$ route -n # verificar la configuración de la ruta
$ dig [@dns-server.com] host.dom [{a|mx|any}] |less
# verificar registros host.dom DNS [@ dns-server.com] para
# un registro [{mx|any}]
$ ichains -L -n |less # verificar filtrado de paquetes (kernel 2.2)
$ iptables -L -n |less # verificar filtrado de paquetes (kernel 2.4)
$ netstat -a # mostrar todos los puertos abiertos
$ netstat -l –inet # mostrar los puertos en escucha
$ netstat -ln –tcp # mostrar puertos tcp en escucha (numérico)
Eliminar mensajes de la cola local
Para eliminar los mensajes de la cola local:
# exim -q # eliminar mensajes en espera
# exim -qf # eliminar todos los mensajes
# exim -qff # eliminar incluso mensajes bloqueados
“-qff” puede resultar mejor para el script /etc/ppp/ip-up.d/exim.
Eliminar mensajes bloqueados de la cola local
Para eliminar mensajes de correo bloqueados de la cola local reenviando el mensaje de error:
# exim -Mg ‘mailq | grep frozen | awk ’{ print $3 }’‘
Borrar el contenido de un archivo
No utilice rm si el archivo es usado por otros usuarios.
$ :>archivo-a-eliminar
Archivos fantasma
$ dd if=/dev/zero of=nombre_archivo bs=1k count=5 # 5KB de contenido
# cero
$ dd if=/dev/urandom of=nombre_archivo bs=1m count=7 # 7MB de contenido
# al azar
$ touch nombre_archivo # crear un archivo de 0B o actualizar mtime
# (fecha de la última modificación)
chroot
Puede crear un sistema independiente que comparta el mismo kernel.
# mount /dev/hda1 /mnt/target
… suponiendo que /dev/hda1 contiene un sistema entero
# chroot /mnt/target
… Ahora los contenidos de /dev/hda1 se ven como el directorio raíz.
# mount proc /proc # por si acaso
… ejecute el comando dentro de /dev/hda1
Esto permite cargar las ramas estable/de prueba/inestable en una misma máquina. Asimismo, uno puede ejecutar un programa que requiera gran cantidad de memoria (por ejemplo, dselect) en una máquina anfitrión, montando un máquina auxiliar (máquina satélite) mediante NFS en modo lectura/escritura y accediendo a ella mediante chroot.
En woody, el sistema chroot puede crearse fácilmente con el comando debootstrap.
# mkdir potatochroot
# debootstrap potato potatochroot
# chroot potatochroot
# apt-setup # configura el /etc/apt/sources.list
Samba

Lo básico para obtener archivos desde Windows:
# mount -t smbfs -o username=myname,uid=my_uid,gid=my_gid \
//server/share /mnt/smb # monta un directorio Windows en Linux
# smbmount //server/share /mnt/smb \
-o “username=mi_nombre,uid=mi_uid,gid=mi_gid”
# smbclient -L 192.168.1.2 # lista los archivos compartidos de una
# máquina

 

debian

 

Etiquetas de Technorati: ,,

Fuente:
Inglés original de la “Quick Reference. . . ”
• Osamu Aoki < debian@aokiconsulting.com Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla >

About Jordi Llorente

Extraño cocktail, un poco de ciencia, un poco de arte, y mucha pasión.