Véase el BootPrompt-HOWTO
para información detallada sobre el indicador de arranque.
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 y cuando lilo
utiliza el framebuffer
tiene que pulsar TAB para ver las opciones), 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,nosmbfs 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.
Resulta una buena idea tener un editor mínimo en /bin
en el caso
que /usr
no sea accesible (véase Editores de rescate, Sección 11.2).
También considere instalar el paquete sash
. Cuando no pueda
arrancar el sistema, haga:
boot: Linux init=/bin/sash
sash
sirve como un sustituto interactivo de sh
incluso cuando /bin/sh
no se puede usar. Está enlazado
estáticamente e incluye diversas utilidades estándar incorporadas (teclee
"help" en el indicador de comandos para una lista de referencia).
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.
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).
Véase también Instalar un paquete en un sistema que no arranca, Sección 6.3.6 si su sistema está dañado.
Si necesita un disquete de arranque personalizado, consulte el
readme.txt
del disco de rescate.
Chasing unstable/sid is fun, but buggy xdm
,
gdm
, kdm
, and wdm
started during the
boot process can bite you bad.
Primero acceda al shell del superusuario escribiendo lo siguiente en el indicador de arranque:
boot: Linux vga=normal s
En este caso, Linux es la etiqueta de la imagen del kernel que está
arrancando. "vga=normal" nos asegurará que lilo
se
ejecute en una pantalla VGA normal y "s" (o "S") es el
parámetro que se pasa a init
para invocar el modo monousuario.
Escriba la contraseña del superusuario en el símbolo de espera.
Existen distintas maneras de desactivar todos los demonios que arrancan con X:
/etc/init.d/?dm
.
/etc/rc2.d/S99?dm
como
/etc/rc2.d/K99?dm
.
/etc/rc2.d/S99?dm
.
Aquí, el número en rc2.d
se debe corresponder al nivel
de ejecución especificado en el /etc/inittab
. Asimismo
?dm
significa que necesita ejecutar el comando
múltiples veces sustituyéndolo con xdm
, gdm
,
kdm
o wdm
.
La primera de la lista es "la única manera verdadera" en Debian. La
última es fácil pero sólo funciona en Debian y exige que que se configure el
administrador de pantalla nuevamente usando dpkg-reconfigure
. Los
otros son métodos genéricos para deshabilitar demonios.
Aún puede continuar arrancando X mediante el comando startx
desde
cualquier consola de shell.
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
.
GRUB es un nuevo administrador de arranque del projecto Hurd y es mucho más flexible que lilo pero con un manejo ligeramente diferente de los parámetros de arranque.
grub> find /vmlinuz grub> root (hd0,0) grub> kernel /vmlinuz root=/dev/hda1 grub> initrd /initrd grub> boot
Aquí, debe tener presente los nombres de dispositivos que utiliza Hurd:
Hurd/GRUB Linux MSDOS/Windows (fd0) /dev/fd0 A: (hd0,0) /dev/hda1 C: (en general) (hd0,3) /dev/hda4 F: (en general) (hd1,3) /dev/hdb4 ?
Véase /usr/share/doc/grub/README.Debian
y
/usr/share/doc/grub-doc/html/
para más detalles.
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 gráficas de configuración basadas en X11 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 screen
con "^A
H" como se detalla en Intercambiando consolas con
screen
, Sección 8.6.27 o el comando script
.
$ script Script started, file is typescript ... hacer cualquier cosa ... Ctrl-D $ col -bx <typescript >savefile $ vi savefile
Se puede utilizar lo siguiente en vez del comando script
:
$ bash -i 2>&1 | tee typescript
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
) y
scrot
(scrot
).
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 (cd /directorio/destino && tar xvfp - ) Si no hay archivos enlazados: # scp -pr usuario1@host1.dom:/directorio fuente \ usuario2@host2.dom:/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
de la lista
debian-user@lists.debian.org.
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.
El comando tar
ha cambiado sus opciones para los archivos
.bz2
al pasar de Potato a Woody, por lo tanto, use
--bzip2 en los scripts en vez de su forma reducida -I
(Potato) o -j (Woody).
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.
# apt-get install pax $ 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
.
Los respaldos diferenciales y la sincronización de datos se pueden implementar mediante diversos métodos:
rcs
: copia de respaldo e historial, sólo texto
rdiff-backup
: copia de respaldo e historial. Se respetan enlaces
simbólicos.
pdumpfs
: copia de respaldo e historial en un sistema de archivos.
Se respetan los enlaces simbólicos.
rsync
: sincronización en un sólo sentido
unison
: sincronización en ambos sentidos
cvs
: sincronización en múltiples sentidos con un servidor e
historial, sólo texto, maduro. Véase Sistema de
versiones concurrentes (CVS), Sección 12.1.
arch
: sincronización en múltiples sentidos con un servidor, copias
de respaldo e historial, sin "directorio de trabajo".
subversion
: sincronización en múltiples sentidos con un servidor,
copias de respaldo e historial, Apache.
La combinación con uno de los métodos descriptos en Copiar y archivar un subdirectorio entero, Sección 8.3
y la automatización de tareas descripta en Planificar una
actividad (cron
, at
), Sección 8.6.26 permitirán
crear un buen sistema de respaldo.
Explicaré tres herramientas fáciles de usar.
rdiff-backup
ofrece respaldos buenos y sencillos con historial
diferencial para cualquier tipo de archivos incluyendo enlaces simbólicos.
Para hacer una copia de respaldo de la mayor parte de ~/
en
/mnt/respaldo
:
$ rdiff-backup --include ~/tmp/conservar --exclude ~/tmp ~/ /mnt/respaldo
Para restaurar los datos de hace tres días de este archivo en
~/antiguo
:
$ rdiff-backup -r 3D /mnt/respaldo ~/antiguo
Véase rdiff-backup(1)
.
pdumpfs
pdumpfs
es un sencillo sistema para realizar copias de respaldo
diarias similar al dumpfs
de Plan9 que preserva cada réplica
diaria del sistema. Es posible acceder en cualquier momento a réplicas
antiguas para obtener un archivo de un día determinado. ¡ Hagamos una copia de
respaldo de nuestro directorio personal con pdumpfs
y
cron
!
pdumpfs
crea la réplica AAAA/MM/DD en el directorio
de destino. Todos los archivos originales se copian al directorio réplica
cuando pdumpfs
se ejecuta por primera vez. A partir de la segunda
vez y en adelante, pdumpfs
copia sólamente archivos nuevos o
actualizados y almacena los archivos sin modificar como enlaces duros a los
archivos de la réplica del día previo para ahorrar espacio en disco.
$ pdumpfs dir-orig dir-dest [dest-basename]
Véase pdumpfs(8)
.
Changetrack
registrará en forma regular los cambios de los
archivos de configuración en archivos RCS. Véase changetrack(1)
.
# apt-get install changetrack # vi changetrack.conf
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. En forma aternativa, se
puede usar el estilo BSD ps aux | less o el System V ps -efH
| less. La sintaxis del estilo System V muestra los ID de los procesos
padres (PPID) que se pueden utilizar para matar un proceso hijo
zombie (malfuncionamiento).
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
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
.
less
es el paginador predeterminado (navegador del contenido de un
archivo). Pulse `h' para obtener ayuda. Puede hacer muchas más cosas que
more
. less
can be supercharged by executing
eval $(lesspipe) or eval $(lessfile) in the shell
start-up script. Véase más en /usr/share/doc/lessf/LESSOPEN
. La
opción -R permite la salida de caractéres raw y activa las
secuencias de escape en color ANSI. Véase less(1)
.
w3m
puede ser un paginador alternativo útil para algunos sistemas
de código (EUC).
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.
# date MMDDhhmmCCYY # hwclock --utc --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..
Referencia: Managing
Accurate Date and Time HOWTO
.
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/
.
Use el paquete chrony
.
Para descativar el protector de pantalla, utilice los siguientes comandos:
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 para controlar otras
características de la consola. Véase también stty(1)
for changing
and printing
Glibc ofrece getent(1)
para buscar entradas en la base de datos
administrativa (passwd, group, hosts, services, protocols o networks).
getent database [clave ...]
Uno siempre puede desenchufar el parlante del PC ;-). Para el intérprete de comandos:
echo "set bell-style none">> ~/.inputrc:
Para hacer desaparecer los mensajes de error por pantalla, el primer lugar a
verificar es /etc/init.d/klogd
. Fije KLOGD="-c
3" en este script y ejecute /etc/init.d/klogd
restart. Un método alternativo consiste en ejecutar dmesg
-n3.
Veamos el significado de los niveles de error:
Si un mensaje de error inútil lo molesta continuamente, considere crear un
parche para el kernel sencillo tal como shutup-abit-bp6
(disponible en el subdirectorio de
ejemplos
).
Otro lugar que hay que ver es el /etc/syslog.conf
; verifique si
los mensajes de error se envían a la consola.
En sistemas tipo UNIX se accede a las pantallas de la consola mediantes rutinas
de la biblioteca (n)curses. Éstas brindadn al usuario un método independiente
del terminal de actualizar las pantallas de caracteres con una optimización
razonable. Véase ncurses(3X)
y terminfo(5)
.
En un sistema Debian, existe una infinidad de entradas predefinidas:
$ toe | less # todas las entradas $ toe /etc/terminfo/ | less # entradas reconfigurables por el usuario
Exporte su elección mediante la variable de entorno TERM.
Si la entrada terminfo para xterm
no funciona con una
xterm
no-Debian, cuando acceda a un sistema Debian en forma remota
cambie el tipo de su terminal de "xterm" a una de las versiones con
menos características como, por ejemplo, "xterm-r6". Véase
/usr/share/doc/libncurses5/FAQ
para más información.
Si la pantalla se enloquece después de hacer cat some-binary-file (quizás no pueda ver el comando que ingresa mientras escribe) haga:
$ reset
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
Para reemplazar todas las instancias FROM_REGEX por TO_TEXT en todos los archivos FILES ...:
$ perl -i -p -e 's/FROM_REGEX/TO_TEXT/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.
El siguiente script eliminará las líneas de la 5 a la 10 y desde la 16 a la 20.
#!/bin/bash ed $1 <<EOF 16,20d 5,10d w q EOF
Aquí, los comandos ed
son los mismos que los del modo comando de
vi
. La edición de archivos de esta manera facilita la creación de
scripts.
Siguiendo uno de los siguientes procedimientos se extraerán las diferencias entre dos archivos fuente y se crearán los archivos unificados diff archivo.parche0 o archivo.parche1 según la ubicación del archivo:
$ diff -u archivo.original archivo.nuevo1 > archivo.parche0 $ diff -u archivo/original archivo/nuevo1 > archivo.parche1
El archivo diff (llamado también parche) se utiliza para enviar actualizaciones de programas. La parte recibida aplicará esta actualización a otro archivo mediante:
$ patch -p0 archivo < archivo.parche0 $ patch -p1 archivo < archivo.parche1
Si tiene tres versiones del código fuente, puede combinarlos efectivamente
usando diff3
:
$ diff3 -m archivo.mío archivo.original archivo.tuyo > archivo
$ split -b 650m archivo # dividir el archivo en partes de 650 MB $ cat x* >archivo_grande # unir los archivos en un archivo grande
Consideremos un archivo de texto llamado DPL
en donde todos los
nombres de los líderes del proyecto Debian y el día de su asunción están
listados separados entre sí mediante espacios.
Ian Murdock Agosto 1993 Bruce Perens Abril 1996 Ian Jackson Enero 1998 Wichert Akkerman Enero 1999 Ben Collins Abril 2001 Bdale Garbee Abril 2002 Martin Michlmayr Marzo 2003
A menudo, se utiliza Awk para extraer datos de este tipo de archivos.
$ awk '{ print $3 }' <DPL # mes de asunción August April January January April April March $ awk '($1=="Ian") { print }' <DPL # DPL llamado Ian Ian Murdock Agosto 1993 Ian Jackson Enero 1998 $ awk '($2=="Perens") { print $3,$4 }' <DPL # Cuando Perens asumió Abril 1996
Los intérpretes de comandos como el Bash pueden también utilizarse para analizar este tipo de archivo:
$ while read primero último mes año; do echo $mes done <DPL ... la misma salida que en el primer ejemplo Awk
En este caso, el comando incorporado read
utililiza las caracteres
de $IFS (separadores de campo internos, con sus siglas en inglés) para dividir
líneas en palabras.
Si cambian IFS a ":", puede analizar perfectamente el
/etc/passwd
con el shell:
$ originalIFS="$IFS" # guarda el valor original $ IFS=":" $ while read user password uid gid resto_de_la_línea; do if [ "$user" = "osamu" ]; then echo "el ID de $user es $uid" fi done < /etc/passwd El ID de osamu es 1001 $ IFS="$originalIFS" # devuelve valor anterior
(Si utiliza Awk para hacer lo mismo, utilice FS=":" para configurar el separador de campo)
IFS también es utilizado por el intérprete de comandos para dividir la espansión de parámetros, la sustitución de comandos y la expansión aritmética. Esto no sucede con palabras entre comillas simples o dobles. El valor predeterminado de IFS es <espacio>, <tab> y <nueva_línea> combinados.
Sea cuidadoso al usar estos trucos con el IFS del intérprete de comandos. Pueden ocurrir cosas extrañas cuando el shell interpreta parte de un script como si se fuese su entrada.
$ IFS=":," # utiliza ":" y "," como IFS $ echo IFS=$IFS, IFS="$IFS" # echo es un comando del Bash IFS= , IFS=:, $ date -R # simplemente la salida de un comando Sat, 23 Aug 2003 08:30:15 +0200 $ echo $(date -R) # subshell --> entrada al shell principal Sat 23 Aug 2003 08 30 36 +0200 $ unset IFS # volver al IFS predeterminado $ echo $(date -R) Sat, 23 Aug 2003 08:30:50 +0200
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 todos 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.) awk '{ print $3 }' | # extraer el tercer campo separado por espacios en blanco awk -F'\t' '{ print $3 }' | # extaer el tercer campo separado por tabulaciones 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
Las siguientes maneras de recorrer distintos archivos que coincidan con *.ext asegura un correcto manejo de nombres de archivos extraños -como los que incluyen espacios- y realizan la misma tarea:
for x in *.ext; do if test -f "$x"; then comando "$x" fi done
find
y xargs
:
find . -type f -maxdepth 1 -name '*.ext' -print0 | \ xargs -0 -n 1 comando
find
con la opción -exec y un comando:
find . -type f -maxdepth 1 -name '*.ext' \ -exec comando '{}' \;
find
con la opción -exec y un script de shell breve:
find . -type f -maxdepth 1 -name '*.ext' \ -exec sh -c "comando '{}' && echo 'exitoso'" \;
Aunque todos los scripts en Awk se pueden reescribir automáticamente en Perl
usando a2p(1)
, los scripts Awk de una sola línea en Awk se
convierten mejor en scripts en perl de una línea en forma manual. Por ejemplo
awk '($2=="1957") { print $3 }' |
es equivalente a cualquiera de las siguientes líneas:
perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' | perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' | perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' | perl -lane 'print $F[2] if $F[1] eq "1957"' |
Se pueden eliminar todos los espacios en los argumentos de perl
de
la línea anterior y tomar ventaja de la conversión automática entre números y
cadena de caracteres que existe en Perl:
perl -lane 'print$F[2]if$F[1]eq+1957' |
Véase perlrun(1)
para las opciones de la línea de comandos. Para
más scripts delirantes en Perl, puede resultar interesante http://perlgolf.sourceforge.net
.
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
Aquí también se pueden usar links
y w3m
, con ligeras
diferencias en el renderizado.
Si se trata de un archivo de una lista de correo, use munpack para obtener los contenidos mime del texto.
Lo siguiente imprimirá una página web en una impresora/archivo PostScript.
$ apt-get install html2ps $ html2ps URL | lpr
Véase lpr
/lpd
,
Sección 3.6.1. También tenga en cuenta los paquetes a2ps
y
mpage
para crear archivos PostScript.
Lo siguiente imprimirá una página manual en una impresora/archivo PostScript.
$ man -Tps alguna-página-del-manual | lpr $ man -Tps alguna-página-del-manual | mpage -2 | lpr
Es posible combinar dos archivos PostScript o PDF.
$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite \ -sOutputFile=bla.ps -f \ loquesea1.ps loquesea2.ps $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \ -sOutputFile=bla.pdf -f loquesea1.pdf\ loquesea2.pdf
Mostrar el tiempo empleado por un proceso.
# time algún-comando >/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
nice
Use nice
(del paquete GNU shellutils
) para fijar el
valor "nice" de un comando al ejecutarlo. renice
(bsdutils
) y 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
A veces un valor extremo de nice hace más daño que bien al sistema. Utilice este comando con cuidado.
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
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:
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.
screen
con editores y otros
programas abiertos en diversas ventanas.
screen
se separe y se desconecte por sí misma)
screen
mágicamente automáticamente recuperará
todas las ventanas que había abierto.
screen
típicos
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
É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!. screen(1)
para
más detalles.
screen
Si comprueba 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).
screen
Consulte xmove
. Véase xmove(1)
.
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 {a|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)
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.
Para Sarge, reemplace exim
con exim4
.
Para eliminar mensajes de correo bloqueados de la cola local reenviando el mensaje de error:
# exim -Mg `mailq | grep frozen | awk '{ print $3 }'`
Para Sarge, reemplace exim
por exim4
mbox
Si se llenó su directorio personal y procmail
falló necesitará
distribuir en forma manual sus mensajes de
/var/mail/usuario
a los buzones de correo situados en
su directorio personal. Luego de hacer espacio en el mismo, haga:
# /etc/init.d/exim stop # formail -s procmail </var/mail/usuario # /etc/init.d/exim start
Para Sarge, reemplace exim
por exim4
.
Para borrar el contenido de un archivo (un archivo log, por ej.) no utilice rm para eliminarlo y mkdir para crealo nuevamente, ya que el archivo puede estar siendo consultado en el intervalo comprendido entre la ejecución de ambos comandos. Lo siguiente es la manera más segura de borrar el contenido de un archivo.
$ :>archivo-a-eliminar
Los siguientes comandos creará archivos fantasmas (archivos vacíos):
$ 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 (si el archivo # existe actualizar mtime)
Por ejemplo, los siguientes comandos ejecutados desde el shell de un disco de
arranque Debian borrará íntegramente el contenido del disco duro
/dev/hda
.
# dd if=/dev/urandom of=/dev/hda ; dd if=/dev/zero of=/dev/hda
chroot
El programa chroot
, chroot(8)
, nos permite ejecutar
diferentes instancias de un entorno GNU/Linux en un único sistema,
simultáneamente y sin reiniciar.
Asimismo, uno puede ejecutar un programa que insuma gran cantidad de recursos
(por ejemplo, apt-get
o dselect
) bajo el chroot de
una máquina anfitrión veloz, montando en ella una máquina auxiliar lenta
(máquina satélite) mediante NFS en modo lectura/escritura, siendo el punto de
montaje el directorio chroot.
chroot
Un entorno chroot Debian se puede crear en Woody fácilmente mediante el comando
debootstrap
. Por ejemplo, para crear un chroot Sid en
/sid-root con una conexión de Internet rápida:
main # cd / ; mkdir /sid-root main # debootstrap sid /sid-root http://ftp.debian.org/debian/ ... observe descargar todo el sistema main # echo "proc-sid /sid-root/proc proc none 0 0" >> /etc/fstab main # mount proc-sid /sid-root/proc -t proc main # cp /etc/hosts /sid-root/etc/hosts main # chroot /sid-root /bin/bash chroot # apt-setup # configurar /etc/apt/sources.list chroot # vi /etc/apt/sources.list # apuntar a la rama inestable chroot # dselect # puede usar aptitude, instalar mc y vim :-)
A esta altura, debería tener un sistema Debian totalmente funcional, donde podrá jugar sin temor de afectar su instalación Debian principal.
Este truco con debootstrap
se puede utilizar para instalar Debian
en un sistema sin usar Debian install disk but using one for another GNU/Linux
distribution. Véase http://www.debian.org/releases/stable/i386/ch-preparing#s-linux-upgrade
.
chroot
Escribir chroot /sid-root /bin/bash es fácil, pero conserva toda clase de variables de entorno que quizás no desee y acarrea otros problemas. Un mejor enfoque consiste en ejecutar otro proceso login en una terminal virtual aparte donde pueda entrar al sistema chroot directamente.
Puesto que, en los sistemas Debian predeterminados, las consolas Linux se
ejecutan desde tty1 hasta tty6 y el sistema X Window
se ejecuta en tty7, configuremos, como ejemplo, una consola chroot
en tty8. Luego de crear un sistema chroot como se explicó en Ejecutar distintas versiones de Debian mediante
chroot
, Sección 8.6.34.1, escriba desde el shell del
superusuario en el sistema principal:
main # echo "8:23:respawn:/usr/sbin/chroot /sid-root "\ "/sbin/getty 38400 tty8" >> /etc/inittab main # init q # vuelve a cargar init
chroot
¿Desea ejecutar la última versión de X y Gnome en forma segura en su chroot? ¡Es perfectamente posible! El siguiente ejemplo hará que GDM se ejecute en un terminal virtual vt9.
Primero instale el sistema chroot usando el método descripto en Ejecutar distintas versiones de Debian mediante
chroot
, Sección 8.6.34.1. Siendo superusuario en el sistema
principal, copie los archivos de configuración claves en el sistema chroot.
main # cp /etc/X11/XF86Config-4 /sid-root/etc/X11/XF86Config-4 main # chroot /sid-root # o utilice la consola chroot chroot # apt-get install gdm gnome x-window-system chroot # vi /etc/gdm/gdm.conf # haga s/vt7/vt9/ en la sección [servers] chroot # /etc/init.d/gdm start
En este caso, se editó /etc/gdm/gdm.conf
para que la consola
virtual inicial sea vt9 en vez de vt7.
A partir de ahora, puede fácilmente alternar entre el entorno X del chroot y su sistema principal simplemente cambiando de terminal virtual; por ejemplo, usando Ctrl-Alt-F7 y Ctrl-Alt-F9. ¡Que se diviertan!
[FIXME] Añadir un comentario y enlace al script init del gdm
del
chroot.
chroot
Se puede crear fácilmente un entorno chroot para otra distribución Linux.
Instale un sistema en una partición aparte usando el instalador de otra
distribución. Si su partición raíz se encuentra en
/dev/hda9
:
main # cd / ; mkdir /otra-dist main # mount -t ext3 /dev/hda9 /otra-dist main # chroot /otra-dist /bin/bash
Luego proceda como en Ejecutar distintas versiones
de Debian mediante chroot
, Sección 8.6.34.1, Configurar el acceso para chroot
, Sección
8.6.34.2 y Configurando X para chroot
,
Sección 8.6.34.3.
chroot
Existe un paquete chroot más sofisticado, pbuilder
, que crea un
sistema chroot y compila un paquete dentro de él. Es un sistema ideal para
verificar que las dependencias de compilación de un paquete sean correctas y
para estar seguros que no existan dependencias innecesarias o erróneas en el
paquete resultante.
Puede ver si dos archivos son uno solo con dos enlaces duros, haciendo:
$ ls -li archivo1 archivo2
Si archivo.img
contiene una imagen de los contenidos de
un disco duro y el disco original tenía una configuración xxxx =
(bytes/sector) * (sectores/cilindro), entonces lo siguiente la montará en
/mnt
:
# mount -o loop,offset=xxxx archivo.img /mnt
Obsérvese que la mayoría de los discos duros tienen 512 bytes/sector.
Lo básico para obtener archivos desde Windows:
# mount -t smbfs -o username=mi_nombre,uid=mi_uid,gid=mi_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
Los vecinos de Samba se pueden localizar desde Linux haciendo:
# smbclient -N -L dirección_ip_de_su_PC | less # nmblookup -T "*"
El kernel de Linux soporta diversos sistemas de archivos. Por lo tanto, se puede acceder a ellos montando los dispositivos que los contienen. Para determinados sistemas de archivos, existen algunas herramientas especializadas para acceder a ellos sin tener que montar los correspondientes dispositivos. Estas operaciones se realizan por programas del espacio del usuario, con lo cual no se necesita el soporte de sistemas de archivos del kernel.
mtools
: para sistemas de archivos MSDOS (MS-DOS, Windows)
cpmtools
: para sistemas de archivos CP-M
hfsutils
: para sistemas de archivos HFS (Macintosh nativo)
hfsplus
: para sistema de archivos HFS+ (Macintosh moderno)
dosfstools
resulta útil para crear y verificar sistemas de
archivos FAT MS-DOS..
Veamos algunos ejemplos de acciones peligrosas. El impacto negativo será mayor si utiliza la cuenta con privilegios de superusuario.
En "rm -rf .*", el ".*" se expande para incluir "." y "..", y si por casualidad tiene privilegios para escribir en el directorio padre, terminará por eliminar todos los directorios next to your current directory as well.
Es difícil la pérdida de algunos archivos importantes como
/etc/passwd
por descuido. El sistema Debian realiza copias de
seguridad regulares de ellos en /var/backups/
. Al restaurar estos
archivos, tiene que configurar manualmente los permisos adecuados.
# cp /var/backups/passwd /etc/passwd # chmod 644 /etc/passwd
Véase también Recuperar los datos de la selección de paquetes, Sección 6.3.4.
Guía de referencia Debian
CVS, lun abr 3 22:57:45 UTC 2005osamu@debian.org
wecharri@infovia.com.ar