miércoles, 23 de enero de 2008

tema 5b

4. Copias de seguridad
Realizar copias de seguridad es una de las tareas más importantes del administrador
del sistema Es casi inevitable que se produzcan pérdidas de información, debido a,
entre otras causas:
deterioro o borrado accidental por parte de un usuario autorizado
ataque intencionado por parte de personas no autorizadas
fallo del software o el hardware
incendio, robos, y desastres naturales, etc.
es imprescindible poder recuperar la información perdida
En esta sección veremos los comandos básicos para realizar copias de seguridad
en UNIX/Linux; para más información:
Backup & Recovery, W. Curtis Preston, O'Reilly, 2007
Linux System Administrators Guide: Capítulo 12, Backups
4.1. Estrategias para las copias de seguridad
Una buena estrategia para copias de seguridad debe tener las siguientes características:
Ser fácil de usar, preferiblemente si totalmente automática
Eficiencia y rapidez:
 compromiso entre el tiempo de backup y el tiempo de recuperación
Facilidad de restauración
Capacidad de vericar las copias
 difícil si el sistema está siendo usado continuamente
Tolerancia a fallos en los medias de almacenamiento (cintas, etc.)
necesidad de mantener al menos dos copias de los backups completos
del sistema
al menos una de las copias debe almacenarse en otro sitio
Portabilidad
 posibilidad de recuperar la información en diferentes sistemas
Componentes de las copias de seguridad
Hay básicamente tres componentes que intervienen en una copia de seguridad:
El planicador: decide que información se copia y cuando
El programa de copia: los comandos que mueven los datos de los discos
a los medios
Los medios de almacenamiento: cintas, CDs, etc.
El planicador: Decide cuando realizar el backup y cuanta informacióncopiar
normalmente el gestionado mediante cron
Según la información que salvemos podemos hablar de los siguientes tipos de
backup:
Completo se salva toda la información del sistema
Parcial sólo se salva la información más importante y difícil de recuperar
los ficheros de usuario,
los ficheros de conguración, p.e. /etc/passwd
directorios de correo, web, etc.
Incremental sólo se salvan los cheros modicados desde el último backup
completo o incremental
la copia de seguridad necesita menos tiempo y espacio
para restaurar los datos necesitaremos el último backup completo
y todos los incrementales
Diferencial se salvan los cheros modicados desde el último backup completo
los backups son más grandes que en el caso incremental para restaurar sólo necesitamos el backup completo y el último diferencial
Programa de copia: Se encarga de copiar los ficheros seleccionados en el
medio de almacenamiento; dos mecanismos básicos
Basado en imagen: accede al disco a bajo nivel
 normalmente copias más rápidas, pero mas lento restaurar ficheros individuales
 programas específicos para diferentes filesystems
comandos de este tipo son dump y dd
Fichero fichero
 acceden a los ficheros a través de llamadas al SO
 copias más lentas, pero restauración de ficheros individuales más
simple
comandos de este tipo son tar, cpio o afio
Medios de almacenamiento: Dispositivos donde se guarda la informaci
ón; los más populares son:
Cintas, principalmente cintas de 8 mm o DAT de 4mm con capacidades
hasta 72 GB
Dos dispositivos: cinta con no-rebobinado y con rebobinado (en
Linux para cintas SCSI /dev/nstX y /dev/stX respectivamente,
en Solaris /dev/rmt/X y /dev/rmt/X )
 Las cintas pueden controlarse a través del comando mt
Discos duros externos
Discos ópticos (CDs, DVDs)
 necesitan software adicional como mkisofs (crea imágenes ISO) y
cdrecord (graba en CDs o DVDs)
buenos cuando la cantidad de datos no es excesivamente elevada
4.2. Comandos básicos
Veremos los comandos básicos para hacer backups en UNIX: tar, cpio y dump
Comandos dump y restore
Comandos más comunes para copias de seguridad
comandos originales de BSD UNIX
dependen del tipo de filesystem
Comando dump: Hace copias de un sistema de archivos entero, con las
siguientes características:
Pueden ser copias multivolumen
Puede salvar ficheros de cualquier tipo (incluido ficheros de dispositivos)
Los permisos, propietarios y fechas de modicación son preservados
Puede realizar copias incrementales
También puede usarse para salvar cheros individuales (no es lo usual)
El formato y los argumentos de dump dependen de la versión utilizada, pero
en general es:
dump [-nivel] [opciones ] [ficheros_a_salvar ]
Nivel de dump: entero entro 0-9:
0 implica backup completo
 mayor que 0 implica copiar sólo los ficheros nuevos o modicados
desde el último backup de nivel inferior
 dump guarda información sobre los backups realizados en el chero
/etc/dumpdates o /var/lib/dumpdates
Algunas opciones:
-f especifica el dispositivo o fichero donde salvar la copia
 -u actualiza el chero dumpdates después de una copia correcta
 -a determina automáticamente el n de la cinta (opción por defecto)
 -j, -z usa compresión con bzlib o zlib (sólo en algunas versiones)
Ejemplo: backup de nivel 0 de la partición /home
# dump -0u -f /dev/st0 /home
Ejemplo: backup en una máquina remota usando ssh como transporte
# export RSH=ssh
# dump -0u -f sistema_remoto :/dev/st0 /home
Comando restore: Restaura cheros salvados por dump
Formato:
restore acción [opciones ] [ficheros_a_recuperar]
Acciones principales:
r restaura la copia completa
t muestra los contenidos de la copia
 x extrae sólo los cheros indicados
i modo interactivo
permite ver los ficheros de la copia
con add indicamos los ficheros a extraer y con extract los
extraemos
usar ? para ayuda
Algunas opciones:
-f especifica el dispositivo o fichero de la copia
-a no pregunta de que volumen extraer los fichero lee todos los
volúmenes empezando en 1)
Ejemplo: restaurar el backup de /dev/st0
# restore -rf /dev/st0
Ejemplo: restaurar el backup desde un sistema remoto
# export RSH=ssh
# restore -rf sistema_remoto :/dev/st0
Ejemplo: restaurar sólo un chero
# restore -xaf /dev/st0 fichero
Archivo restoresymtable: Se crea cuando se restaura un filesystem completo,
en el directorio donde se restaura
Contiene información sobre el sistema restaurado
Puede eliminarse una vez finalizada la restauración
Planicación de los backups
Podemos seguir diferentes estrategias a la hora de planificar los backups
Ejemplo 1: copia de nivel 0 mensual, de nivel 9 diaria y de nivel 5
semanal
necesita 6 o 9 cintas: una para el 0, 4 para los niveles 5 y 1 o 4
para los niveles 9
para restaurar necesitamos restaurar en orden:
1. la copia de nivel 0
2. la última copia de nivel 5, y
3. la última de nivel 9, después de la de nivel 5
Ejemplo 2: copia de nivel 0 mensual, de nivel 2 semanal y de niveles 3,
4, 5 y 6 cada día
necesita al menos 9 cintas
para restaurar necesitamos restaurar en orden:
1. la del nivel 0
2. la del último viernes (nivel 2)
3. las diarias desde el último viernes de forma consecutiva
Prácticas
Utilizando dump haz un backup de nivel 0 de la partición /home en un
fichero en el directorio tmp
 Como usuario, modica algún chero en el directorio home
 Haz una copia de nivel 9 de la partición /home
Borra los ficheros del directorio /home y restauralos a partir de las
dos copias de seguridad
Comando tar (Tape ARchiver)
Permite almacenar varios cheros en uno sólo, manteniendo la estructura de
directorios:
Sintaxis:
tar [-]función [modificador ] fichero [directorio ]
Ejemplo: crea un fichero tar conteniendo los ficheros del directorio /etc
tar cvf copia.tar /etc
Puede indicarse un fichero o un dispositivo (p.e. /dev/fd0)
tar conserva las propiedades de los ficheros: permisos, usuario/grupo,
fechas, etc.
Funciones principales:
c crea un nuevo archivo tar
x extrae los ficheros del archivo
t lista los ficheros del archivo
 r añade nuevos cheros al nal del archivo tar
 u almacena sólo los cheros nuevos o modicados respecto a los
del archivo tar
 A añade un fichero tar a otro
d obtiene las diferencias entre los ficheros de la copia y los del disco
--delete borra un fichero del archivo tar
Algunas opciones:
 v verbose, muestra lo que está haciendo
f para indicar el nombre del fichero tar; por defecto toma - que
representa la entrada/salida estándar
z comprime la copia con gzip
-- bzip2 o j comprime la copia con bzip2
 l almacena sólo los cheros locales (útil con NFS)
k no sobreescribe los ficheros existentes al extraer
T o --files-from F obtiene la lista de ficheros a guardar del
fichero F
X o --exclude-from=F excluye los ficheros que concuerdan con
los patrones listados en el fichero F
 N o --newer DATE sólo guarda los cheros más nuevos que DATE
M o --multi-volume permite crear copias multivolumen (por ejemplo,
varios disquetes) para más opciones ver la página de info (info tar)
Ejemplos:
Extrae todos los ficheros de copia.tar
tar xvf copia.tar
Extrae el el fichero passwd de copia.tar
tar xvf copia.tar etc/passwd
Copia el contenido de /tmp directamente a un disquete
tar cvf /dev/fd0 /tmp
Copia un directorio completo
(cd dir1 && tar cf - .) | (cd dir2 && tar xvf -)
 Copia los cheros más nuevos que un chero control
find dir -newer control ! -type d -print | tar cvfT
f.tar -
Problemas con tar
 Algunas versiones no admiten opciones como la compresión o copia
multivolumen
 Algunas versiones tienen problemas con paths muy largos (más de
100 caracteres)
Comando cpio
El comando cpio es similar a tar en funcionalidad
crea y extrae archivos, o copia ficheros de un lugar a otro
maneja archivos en formato cpio y formato tar
Tres funciones primarias:
1. Copy-out: copia ficheros a un archivo, con la opción -o
Ejemplo: copia todos los directorios desde el actual en el chero
tree.cpio
$ find . | cpio -ov > tree.cpio
para usar un dispositivo en lugar de un fichero, sustituir tree.cpio
por /dev/dispositivo
2. Copy-in: extrae los cheros de un archivo, con la opción -i
$ cpio -idv < tree.cpio
la opción d crea los directorios al ir extrayendo
3. Copy-pass: usado para copiar cheros de un árbol de directorios a otro,
con la opción -p
Ejemplo: copia los cheros del directorio actual y subdirectorios a
un nuevo directorio new-dir
$ find . -depth -print0 | cpio --null -pvd new-dir
la opción -depth procesa primero el contenido del directorio y
después el directorio (mejor para restaurar)
las opciones -print0 y --null evitan problemas con nombres de
cheros que contengan un carácter de newline
-print0 termina los nombres de los cheros con un '\0' en
vez de '\n'
--null o -0 lee una lista de ficheros terminados por un '\0'
Para más opciones y uso de cpio ver la página de información: info
cpio
Comando afio
Variación de cpio, con varias mejoras:
Permite hacer copias multivolumen
Permite archivar los ficheros comprimiendolos de uno en uno
No comprime los ficheros que no interesa comprimir por que ya lo
están (reconoce por extensión) Permite vericar la copia con el original (opción -r)
Modos de funcionamiento similares a cpio
-o guarda a archivo, -i extrae de un archivo y -p copia directorios
otras opciones: -r verica el archivo con el filesystem; -t muestra el
contenido del archivo
Ejemplos:
Salvar a disquete multivolumen comprimido
$ find . | afio -ov -s 1440k -F -Z /dev/fd0
Comprobar con el original una copia comprimida en varios disquetes
$ afio -rv -s 1440k -F -Z /dev/fd0
Muestra el contenido del archivo:
$ afio -tv -s 1440k -F -Z /dev/fd0
Extrae el contenido del archivo
$ afio -iv -s 1440k -F -Z /dev/fd0
Copia los ficheros del directorio actual y subdirectorios a un nuevo
directorio new-dir
$ find . -depth -print0 | afio -p0xa directorio_nuevo
Para opciones ver la página de manual
Comando dd
Comando de copia y conversión de ficheros
Sintaxis.
dd [if=fichero_entrada ] [of=fichero_salida ] [opciones]
Por defecto, copia de la entrada estándar a la salida estándar
Algunas opciones:
 ibs=b lee b bytes de cada vez (tamaño de bloque, por defecto
512)
obs=b escribe b bytes de cada vez
bs=b lee y escribe b bytes de cada vez
 cbs=b especica el tamaño del bloque de conversión
skip=n salta n bloques del fichero de entrada antes de la copia
seek=n salta n bloques del fichero de salida antes de la copia
 count=n copia sólo n bloques del chero de entrada
 conv=conversión convierte el formato del chero de entrada seg
ún el valor de conversión :
ascii Convierte EBCDIC a ASCII
ebcdic Convierte ASCII a EBCDIC
swab Intercambia cada par de bytes de la entrada
 lcase Cambia las letras mayúsculas a minúsculas
 ucase Cambia las letras minúsculas a mayúsculas
 noerror Continúa después de producirse errores de lectura
Ejemplo: imagen de floppy de 3.5, con 18 sectores por pista, dos cabezas
y 80 cilindros:
$ dd bs=2x80x18b if=/dev/fd0 of=/tmp/floppy.image
la b representan bloques de 512 bytes (en total 1474560 bytes)
la copia se realiza de una sola vez
Ejemplo: extrae los datos de una cinta con error
$ dd conv=noerror if=/dev/st0 of=/tmp/bad.tape.image
Ejemplo: tar del directorio actual y copia en cinta en el sistema remoto
$ tar cjf - . | ssh remoto dd of=/dev/st0
Comando mt
Permite la manipulación directa de la unidad de cinta
Sintaxis.
mt [-f unidad_de_cinta ] operación [número ]
con -f indicamos la unidad de cinta a utilizar:
si se omite se toma la definida en la variable TAPE
Algunas operaciones:
stat(us) muestra el estado de la unidad de cinta
rew(ind) rebobina la cinta hasta el principio
 ret(ension) alisa y da tensión a la cinta (rebobina hasta el principio,
luego hasta el final y nuevamente al principio)
erase borra la cinta entera
 fsf/bsf se avanza/retrocede el número de archivos especicado
por número
eom salta hasta el final de parte grabada
4.3. Otras aplicaciones
Existen otros comandos que permiten hacer backups y sincronizar ficheros:
bacula, rdist, rsync, etc.
Bacula
Sosticado sistema de backup en red con diseño modular
Permite hacer copias de seguridad de todas las máquinas de una LAN
a diferentes medios de backups (cinta, disco,. . . )
Soporta MySQL, PostgreSQL o SQLlite para el catálogo
Hace backups de sistemas UNIX, Linux y Windows
Para más información, ver www.bacula.org/dev-manual/What_is_Bacula.html
o la sección 9.8 del libro UNIX System Administration Handbook, Evi
Nemeth et al.
Amanda
Amanda: Advanced Maryland Automatic Network Disk Archiver
Sofisticado sistema de backup en red Permite hacer copias de seguridad de todas las máquinas de una LAN a una unidad de cinta en un servidor
Está disponible en la mayoría de los UNIX y soporta muchos tipos de medios de backup
Puede hacer uso de SAMBA para copias de sistemas Windows NT
Se basa en dump y tar
Para más información, ver www.amanda.org/docs
Flexbackup
Flexbackup Herramienta de backup exible para instalaciones de pequeño y
medio tamaño
Más simple de congurar y utilizar que Amanda para sitios con un número no muy alto de sistemas
Usa distintos formatos de archivo: dump, afio, GNU tar, cpio, zip, etc.
Permite backups completos e incrementales, como dump
Permite backups remotos a través de rsh o ssh
Para más información, ver exbackup.sourceforge.net
rdffi-backup
rdiff-ackup copia un directorio en otro, permitiendo copias remotas
Hace una copia exacta de los directorios (mirror ), guardando las propiedades
de los ficheros (propietario, permisos, etc.)
Guarda las diferencias entre copias de los ficheros para poder recuperar
unfichero antiguo (incremental )
Sólo transmite las diferencias de los cheros (similar a rsync)
Para más información ver www.nongnu.org/rdi-backup
DAR
DAR Disk ARchiver comando para hacer backups de árboles de directorios
y ficheros
Permite copiar un filesystem entero a un archivo
Permite hacer backups completos y diferenciales
Permite hacer copias multivolumen:
divide en archivo en varios ficheros (slices) parando antes de crear
cada nuevo slice
interesante para hacer copias en floppy, CD o DVD
Más información en: dar.linux.free.fr
Comando rdist
Permite distribuir cheros desde un servidor central a varias máquinas
sólo copia los cheros modicados, preservando el propietario, grupo,modo y fechas de modicación
las versiones actuales pueden funcionar sobre ssh (las antiguas funcionaban
sobre rlogin, con problemas de seguridad)
utiliza un fichero distfile que especifica las acciones a realizar
Ejemplo de distfile
SYS_FILES = (/etc/passwd /etc/group /etc/mail/aliases)
HOME_DIRS = (/home/tomas /home/al*)
GET_ALL = (maquina1 maquina5 maquina6)
GET_SOME = (maquina2 maquina8)
all: ${SYS_FILES} -> ${GET_ALL}
notify tomas@localhost;
special /etc/mail/aliases /usr/bin/newaliases;
some: ${SYS_FILES} -> ${GET_SOME}
except /etc/mail/aliases;
ejemplo de uso:
# rdist -f distfile
Comando rsync
Similar a rdist aunque funciona de forma diferente
más eciente que rdist, sólo transmite las diferencias entre cheros
no usa chero de conguración: funciona de forma similar a rcp
ejemplo:
# rsync -av /home/tomas maquina1:/tmp
ver la página de manual de rsync para más detalles
Unison
Aplicación para sincronizar cheros y directorios entre sistemas
puede sincronizar entre sistemas Windows y UNIX
no requiere permisos de root
permite sincronización en los dos sentidos
las transferencias se optimizan usando una versión de rsync
tiene un interfaz gráco sencillo
para ver un tutorial de uso, hacer:
$ unison -doc tutorial
Imágenes del sistema
Herramientas que nos permiten obtener imágenes completas del sistema para
copias de seguridad o réplicas (clones)
Norton Ghost herramienta comercial de Symantec para copias de seguridad
e imágenes del sistema
Partimage salva particiones completas a un fichero de imagen
permite recuperar la partición completa en caso de errores
permite realizar clones de un PC
Clonezilla aplicación opensource para hacer clones masivos
permite hacer clones de múltiples PCs (40 o más) simultáneamente
puede usar multicast para distribuir las imágenes
basado en DRBL (Diskless Remote Boot in Linux ) y Partimage
SystemImager herramienta para automatizar la instalación de Linux y la
distribución de software en una red de PCs
usado en clusters, granjas de servidores o redes en general
5. Servicios de impresión
Los sistemas UNIX/Linux aceptan normalmente varios sistemas de impresión:
BSD LPD (Line Printer Daemon) o LPR diseñado para UNIX BSD:
 uno de los sistemas más utilizados, aunque un tanto anticuado
utiliza los comandos lpr, lpq, lprm y lpc para enviar, borrar y
ver los trabajos de impresión
 el demonio lpd gestiona las colas y el proceso de impresión
puede combinarse con software como el Ghostscript para dar soporte
a impresoras no-PostScript
Ghostscript (comando gs) permite convertir ficheros PostScript
o PDF al PDL (Page Description Language) de una
impresora no-PostScript
System V Printing sistema de impresión de UNIX System V
menos utilizado (p.e. Solaris), aunque, por compatibilidad, la mayor
ía de los sistemas lo soportan utiliza comandos como lp, lpadmin, lpstat, cancel, accept,
reject, etc.
el demonio lpsched determina donde y cuando un trabajo debeimprimirse
LPRng mejora sobre el BSD LPR mantiene los mismos comandos que el BSD, aunque permite usar comandos tipo System V  la conguración es similar a BSD y es compatible con LPR
introduce importantes ventajas:
 permite correr gran parte del sistema de impresión como usuario
sin privilegios (no root)
 produce mejores mensajes de diagnóstico y error
 soporta autenticación de sistemas remotos mediante SSL, Kerberos o PGP
 incorpora herramientas grácas de conguración como LPRng-Tool
 Para más información www.lprng.com
CUPS (Common Unix Printing System) nueva arquitectura de impresión para sistemas UNIX
 nuevo sistema de conguración, aunque mantiene los comandos de BSD y SV
 diseñado para que clientes y servidores usen CUPS  puede descubrir impresoras en red de forma automática (CUPS Browsing)  usa el protocolo IPP (Internet Printing Protocol ) para impresión remota
utiliza drivers PPD (PostScript Printer Description ) para identificar las capacidades de la impresora (tanto PostScript como noPostScript)
 tiene muchos interfaces gráficos de configuración (Kups gnome-cups-manager
o ESP Print Pro (comercial)) incluido un interfaz web a través del
puerto 631
5.1. BSD LPD
Dos ficheros básicos de conguración:
fichero de definición de impresoras /etc/printcap
permisos de acceso en red: /etc/hosts.lpd
contiene una lista de los hosts (estacion1.tudominio.org, etc), uno
por línea, a los que se les permite utilizar los servicios lpd del servidor
Fichero /etc/printcap
Define una serie de entradas, cada una indicando una cola del sistema de
impresión:
Ejemplo de /etc/printcap
lp|local|Impresora local genérica:\
:lp=/dev/lp0:\
:sd=/var/spool/lpd/lp:\
:af=/var/log/lp-acct:\
:lf=/var/log/lp-errs:\
:mx#0:\
:sh:
lpremota|jumilla-lp|Impresora remota en jumilla:\
:lp=:\
:rm=jumilla:\
:rp=lp:\
:sd=/var/spool/lpd/lpremota:\
:mx#0:\
:sh:
Alguna de las variables de printcap son:
 lp dispositivo al que está conectado la impresora (/dev/lp0 primer
puerto paralelo)
rm y rp nombre o IP del sistema remoto que gestiona la impresora,
y nombre de la impresora en ese sistema
sd directorio de spool ; debe tener el mismo nombre que la impresora
lf y af fichhero de log de error y de contabilidad
 mx tamaño máximo del chero aceptado (un 0 indica ilimitado)
 sh si presente, suprime cabeceras en la impresión
Comandos de impresión BSD
Principales comandos en BSD
lpr envía un trabajo a la cola de impresión por defecto
la impresora por defecto denfinida en la variable PRINTER
 con la opción -P podemos especicar otra cola
Ejemplo:
$ lpr -Pepson datos.txt
lpq muestra los trabajos existentes en la cola de impresión
$ lpq -Pepson
epson is ready and printing
Rank Owner Job File(s) Total Size
active tomas 375 datos.txt 8192 bytes
lprm elimina un trabajo de la cola:
$ lprm -Pepson 375
lpc permite activar/desactivar colas y/o impresoras, mover trabajos en
el orden de las colas, ver el estado de las impresoras, etc.
debe ejecutarse como root
dentro de lpc, usando help vemos las opciones
lpc> help
Commands may be abbreviated. Commands are:
abort enable disable help restart status topq ?
clean exit down quit start stop up
lpc> status
lp:
queuing is enabled
printing is enabled
no entries
printer idle
5.2. CUPS
Funcionamiento básico:
Scheduler se encarga de gestionar los trabajos y las colas de impresión
implementa IPP (Internet Printing Protocol ), aceptando trabajos
remotos
incorpora un módulo de autorización
Sistema defiltrado convierte los datos a imprimir en el PDL (Page description
language) de la impresora particular
utiliza tipos MIME para definiir los tipos de ficheros conocidos y
las aplicaciones para procesarlos los ficheros pueden ser convertidos a PostScript o directamente adatos raster (bitmap)
el PostScript es tratado por un pre-filtro ps-to-ps para indicar opciones de impresión (páginas a imprimir, etc.) y convertido a CUPS-raster por un filtro tipo Foomatic1 o Ghostscript
1foomatic es un nuevo sistema que permite integrar drivers de impresoras en los sistemas de impresión de UNIX (LPD, CUPS, LPRng, etc.)
Ficheros de conguración
Los archivos de conguración de CUPS están en el directorio /etc/cups:
/etc/cups/cupsd.conf archivo de conguración del servidor cups
permite especificar el control de acceso a las impresoras
/etc/cups/client.conf archivo de conguración del lado cliente
permite indicar el servidor cups a utilizar
/etc/cups/printers.conf especica la denición de las impresoras
/etc/cups/mime.types define los tipos de ficheros conocidos por CUPS
/etc/cups/mime.convs indica los programas que procesarán cada tipo
MIME
Conguración de un servidor CUPS en Debian
1. Instalar el paquete cupsys
2. Instalar la impresora mediante interfaz web
a) Conectarse a http://127.0.0.1:631
b) Ir a Tareas de administración y entrar con el usuario root
c) Seleccionar Añadir Impresora e indicar los datos de la nueva impresora:
Nombre de la cola de impresión, ubicación física de la impresora
y descripción de la misma
d) Seleccionar el tipo de conexión:
AppSocket/HP JetDirect Dispositivo especial para acceder a impresoras
remotas a través de una conexión HP JetDirect
Internet Printing Protocol (IPP o HTTP) Para acceder a una
impresora remota a través del protocolo de impresión de Internet,
bien directamente (IPP) o bien a través de HTTP
LPD/LPR Host or Printer Impresora remota conectada a un servidor
LPD/LPR, o que soporta directamente LPD
Parallel Port #1, USB Printer impresora local conectada a puerto
paralelo o USB
e) Indicar el URI para conexión remota:
Un servidor de impresión LPD requiere la sintaxis lpd://hostname/queue
Una impresora HP JetDirect requiere la sintaxis
socket://hostname o socket://nombre_ordenador:9100
Una impresora IPP requiere la sintaxis
http://hostname:631/ipp/queue o ipp://hostname/ipp/queue
f ) Indicar el fabricante y modelo de impresora:
podemos obtener cheros PPD para más modelos en www.linuxprinting.org
estos ficheros se guardan en /usr/share/cups/model
en Debian podemos instalar paquetes como cupsys-driver-gutenprint o foomatic-filters-ppds
g) Una vez añadida, podemos configurarla en el menú de Impresoras
3. Dar permisos de acceso a los clientes en el fichero
/etc/cups/cupsd.conf
Si queremos que los sistemas de nuestra red local puedan imprimir
a través de este servidor, debemos modicar el chero de la
siguiente forma:
# Permitir acceso remoto a la impresora
Listen *:631

Order Deny,Allow
Deny All
Allow localhost
Allow @LOCAL # podemos indicar direcciones como 193.144.84.*

Si estamos interesados en la administración remota:

Order Deny,Allow
Deny All
Allow localhost
Allow @LOCAL

Para poder cambiar los cheros de conguración:

AuthType Basic
Require user @SYSTEM
Order deny,allow
Deny all
Allow localhost
Allow @LOCAL

Las directivas BrowseXXX permiten que publiquemos en la red,
mediante broadcasts, las impresoras que hemos definido
 Browsing On activa el envío de información sobre las impresoras
BrowsePort n puerto usado para los broadcasts UDP
BrowseInterval t intervalo en segundos entre broadcasts
Podemos usar el programa cupsdconf para congurar estas opciones
Conguración de un cliente CUPS en Debian
1. Instalar el paquete cupsys-client
proporciona comandos de impresión tipo System V
2. Modificar el fichero /etc/cups/client.conf
Indicar el nombre o la IP del servidor CUPS:
ServerName nombre_del_servidor
3. Imprimir usando los comandos System V:
Ver las impresoras a las que tenemos acceso:
lpstat -a
Seleccionar una impresora por defecto:
lpoptions -d impresora
Imprimir un fichero:
lp -d impresora fichero
4. Si queremos usar los comandos BSD instalar el paquete cupsys-bsd
6. El sistema X Window
Entorno operativo gráco con soporte en red
Desarrollado en el MIT a partir del proyecto Athena
En 1987, lanzada la versión X11
En 1988 se constituye X Consortium para controlar el desarrollo de X
En 1994, versión X11R6 (X11 Release 6 )
En 1998, el gobierno de X pasa a The Open Group, que, en 1999, forma X.Org
Versiones de X usadas en Linux: XFree86 y Xorg Server
XFree86 originada en 1992 a partir de X386, versión de X para PCs
 En febrero de 2004 sale la versión XFree86 4.4 con una licencia
más restrictiva
 Última versión 4.7.0 (agosto 2007)
En 2004 se constituye The X.Org Foundation, para proporcionar una
versión open source del sistema X Window
 Primera versión de Xorg Server : X11R6.7.0, basada en XFree86
4.4RC2 y X11R6.6
 Última versión X11R7.3 (o 1.4.0) de septiembre 2007
 Las últimas distribuciones Linux instalan normalmente Xorg
6.1. Arquitectura de X window
Sistema cliente-servidor
 el servidor muestra la aplicación que se está ejecutando en el cliente  servidor/cliente pueden residir en la misma máquina o en máquinas distintas
 El servidor ejecuta el módulo X server
En el cliente se ejecutan aplicaciones que se conectan al servidor
X para visualización
Gestores de ventanas
El servidor permite que las aplicaciones cliente se muestren, pero no proporciona
mecanismos de control de ventanas
necesidad de un gestor de ventanas
proporciona funcionalidades como bordes de ventanas, iconos, escritorios
virtuales, etc.
 existen múltiples gestores de ventanas a elegir por el usuario como
twm, Afterstep, Blackbox, Fluxbox, Enlightenment, XFCE,
Fvwm, Dtvwm, Icewm, Metacity, etc.
Los entornos de escritorio como KDE o GNOME proporcionan tambi
én un conjunto de aplicaciones como gestores de cheros, paneles de
control, etc.
todas mantienen un mismo look-and-feel
Fichero de conguración
El fichero de conguración principal está en /etc/X11 y es XF86Config o
XF86Config-4 para XFree v4 y xorg.conf para Xorg
Fichero dividido en secciones con sintaxis:
Section "Nombre_de_sección "
Opciones
EndSection
las secciones permiten configurar entre otros:
 el monitor y la tarjeta gráca (secciones Monitor, Device y Screen)
 los dispositivos de entrada: teclado, ratón, etc. (secciones InputDevices)
 módulos para OpenGL, DRI (Direct Rendering Infrastructure )
etc. (sección Modules)
 ficheros necesarios: módulos, base de datos RGB, fuentes (sección
Files) dispositivos de entrada/salida que se usarán en la sesión (sección
ServerLayout)
Para más información ver man XF86config-4 o man xorg.conf
Este fichero puede modificarse a mano, o usando herramientas de configuración como:
XF86Setup, xf86cfg o xorgcfg: herramienta de conguración gráca
xf86config o xorgconfig herramienta de conguración en modo texto
xvidtune ajuste fino de la imagen
en Debian dpkg-reconfigure xserver-xfree86 o dpkg-reconfigure
xserver-xorg
Para obtener información sobre el servidor X que está ejecutándose: xdpyinfo
6.2. Inicio de X
Hay varias formas de iniciar una sesión X11:
Iniciar sólo el servidor (comando X) y después las aplicaciones
Iniciar el entorno (servidor + gestor de ventanas): comando startx
Correr un Display Manager como XDM
Comando startx
El comando startx es un script que:
fija variables, como el gestor de ventanas a utilizar y llama al comando xinit que inicializa el sistema X Window
startx usa los siguientes ficheros para establecer la conguración:
$HOME/.xinitrc (en Debian $HOME/.xsession) para determinar el
cliente a usar (entorno de escritorio, gestor de ventanas, etc.)
si no existe, se usa /etc/X11/xinit/xinitrc que suele llamar a
/etc/X11/Xsession o Xclient
$HOME/.xserverrc que especifica la forma de llamar al servidor X
si no existe, se usa /etc/X11/xinit/xserverrc
Display managers
Un display manager permite realizar la autenticación del usuario en modo
gráco
El DM por defecto de XFree86 es XDM
Los entornos KDE y GNOME tienen sus propios DM: KDM y GDM
respectivamente
Cada DM tiene sus propios cheros y herramientas de conguración:
el fichero de configuracion de XDM es /etc/X11/xdm/xdm-config
 el chero de conguración de GDM es /etc/gdm/gdm.conf y puede
configurarse mediante el comando gdmsetup
6.3. Ejecución remota de clientes
Para poder ejecutar un cliente X remoto es necesario dar autorización en el
servidor:
X soporta diferentes mecanismos de autorización
el control de acceso es usualmente inicializado por el display manager
Mecanismos de autorización básicos.
 el más simple es mediante el comando xhost
 otra opción es mediante MIT-MAGIC-COOKIE-1 o XDM-AUTHORIZATION-
1 y el comando xauth
 ssh también permite conexiones X seguras
 Mejor opción: conectarse mediante Display Manager y usar
ssh para correr aplicaciones X remotas
 Para más información:
 página de manual de Xsecurity (XFree) y xauth
Remote X Apps mini-HOWTO
Comando xhost
Permite controlar el acceso a un servidor X
Sintaxis:
xhost [[+-] sistemas_remotos ]
Sin opciones muestra el estado de las autorizaciones
+ da permisos y - los quita
Problema: los permisos se establecen por máquina, no por usuario
todos los usuarios del sistema remoto tienen acceso al servidor X
para dar acceso por usuario usar xauth o ssh
Ejemplo
$ xhost + jumilla montilla
jumilla being added to access control list
montilla being added to access control list
$ xhost
access control enabled, only authorized clients can
connect
INET:jumilla
INET:montilla
$ xhost +
access control disabled, clients can connect from any
host
$ xhost -
access control enabled, only authorized clients can
connect
En el cliente tenemos que indicarle quien es el servidor, mediante la
variable DISPLAY
$ export DISPLAY=servidor:0.0
El formato es:
DISPLAY=Nombre_o_IP :display.screen
 si sólo un usuario está usando el servidor X display es 0
 screen sólo se usa en entornos multipantalla
 También se puede lanzar la aplicación cliente como:
xcliente -display Nombre_o_IP :display.screen
XDMCP
El protocolo XDMCP (X Display Manager Control Protocol ) permite acceder
directamente al Display Manager desde un sistema remoto
el DM debe estar configurado adecuadamente para soportar XDMCP
XDMCP usa UDP puerto 177
desde el sistema remoto ejecutar, simplemente:
# X -query server_name
Puede buscar en la red local un servidor corriendo XDMCP
# X -broadcast
Puede utilizarse mediante un selector, que nos muestra una lista de
hosts corriendo XDMCP a los que conectarnos
# X -indirect server_name
Para más informacion ver el XDMCP HOWTO

Tema 5a

1. Gestión de usuarios y grupos
Todo usuario de un sistema UNIX debe tener una cuenta para poder acceder
Cuenta UNIX: colección de características lógicas que especican quien
es el usuario y lo que puede hacer en el sistema
Estas características incluyen:
el nombre de usuario (login o user name)
 la contraseña (passwd)
grupo o grupos a los que pertenece
 un identicador numérico (UID)
 un identicador numérico del grupo por defecto (GID)
un directorio home
un login shell
 una colección de cheros de inicio
Dentro de las cuentas asociadas a usuarios podemos encontrar diferentestipos.
cuentas normales de usuario
cuenta del administrador (root)
cuentas especiales de los servicios (nobody, lp, bin, etc.):
usadas por servicios internos del sistema
aumentan la seguridad, al permitir que servicios del sistema no se
ejecuten como root
1.1. Ficheros de información de los usuarios
La información de los usuarios y grupos está incluida en los siguientes
archivos:
/etc/passwd mantiene la información principal de cada cuenta: nombre
de usuario, UID, GID, login shell, directorio home, contraseña (en
sistemas antiguos), . . .
/etc/shadow en sistemas actuales, fichero sin permiso de lectura que
guarda las contraseñas encriptadas
/etc/group información sobre los grupos denidos en el sistema. nombre
del grupo, GID y miembros del mismo
/etc/gshadow contraseñas para grupos (no suele usarse)
Fichero /etc/passwd
Ejemplo de líneas de /etc/passwd:
root:x:0:0:root:/root:/bin/bash
pepe:x:1002:1002:Pepe Pótamo,123,981234321,:/home/pepe:/bin/bash
donde se indican (si aparecen :: seguidos, el campo está vacío):
pepe: identicación de usuario en el sistema, que deberían tener las
siguientes características
 únicos en toda la organización (no sólo en la máquina local)
 preferiblemente corto, en minúsculas y sin caracteres acentuados
(para evitar problemas)
 fácil de recordar
de formato fijo para todos los usuarios (p.e. nombre+apellido)
x: contraseña encriptada
 si aparece una x la contraseña está en el chero /etc/shadow
1002: UID número identicador del usuario
 para usuarios normales, número entre 1000 y 32767 (o 65535 ensistemas actuales)
 números por debajo de 1000 para usuarios especiales del sistema(root usualmente número 0)
 el UID para un usuario debería ser único, y el mismo para todaslas máquinas
se debe evitar reutilizar un UID, para evitar problemas de pertenencia de archivos
1002: GID código del grupo principal al que pertenece el usuario
Pepe Pótamo,123,...: información GECOS
cualquier cosa, usualmente el nombre completo del usuario y información adicional (n. de despacho, teléfono, etc.)
/home/pepe: directorio personal del usuario
/bin/bash: shell interactivo que utilizará el usuario
Fichero /etc/shadow
Fichero de acceso restringido que almacena las contraseñas encriptadas:
pepe:$1$.QKDPc5E$SWlkjRWexrXYgc98F.:12825:0:90:5:30:13096:
Contiene para cada usuario la contraseña encriptada y otros campos separados
por :
día, contado como número de días desde el 1/1/1970 (también conocido
como epoch), en que la contraseña se cambió por última vez
 si vale 0 se fuerza a que el usuario cambia su contraseña la primeravez que se conecta
número de días antes de que pueda ser cambiada número de días de validez de la contraseña
días en que se avisa al usuario de que la contraseña va a caducar
días, una vez expirada, en que se deshabilitará la cuenta
día, desde el 1/1/1970, en que la cuenta se inhabilitará
si no aparece nada, la cuenta no se inhabilita nunca
un campo reservado
Fichero /etc/group
Información sobre los grupos de usuarios
users:x:100:pepe,elena
donde tenemos
nombre del grupo
contraseña del grupo (no suele usarse)
si x, se guarda en el fichero /etc/gshadow
grupo:contraseña:administradores:miembros
 los administradores pueden cambiar la contraseña, añadir usuarios
al grupo, etc.
 la contraseña puede jarse/cambiarse con el comando gpasswd
GID identicador numérico del grupo
lista de usuarios que pertenecen al grupo
Cambio de grupo
un usuario puede cambiar de grupo con newgrp
 si el grupo no tiene contraseña y no está en gshadow sólo pueden
cambiar los miembros del grupo
 si el grupo tiene contraseña, el usuario debe especificar la contraseña
si el grupo aparece en gshadow, la lista de miembros en estefichero
pueden cambiar sin contraseña
Otros ficheros
Cuando se crea un nuevo usuario, los ficheros de inicio se copia del directorio
/etc/skel
el administrador debe crear unos ficheros adecuados para los usuarios,
especicando los paths necesarios de ejecución, inicialización de variables
del sistema, etc.
también pueden usarse los ficheros /etc/profile o /etc/bash.bashrc
(ver Tema 3, Ficheros de inicialización de Bash)

Comando passwd
Permite fijar o cambiar la contraseña de un usuario. Opciones:
-e, --expire fuerza a que la contraseña de la cuenta caduque; el usuario
debe cambiarla en el siguiente login
-d, --delete borra la contraseña
-l/-u, --lock/--unlock bloquea/desbloquea la cuenta
-m, --mindays MIN_DAYS número mínimo de días entre cambios decontraseña
-x, --maxdays DÍAS_MAX número de días de validez de la contraseña
-w, --warndays DÍAS_AVISO número de días de aviso de caducidad
-i, --inactive INACTIVO días en que se deshabilitará la cuenta una
vez expirada la contraseña
-S, --status indica el estado de la contraseña (bloqueada L, sin contrase
ña NP o con contraseña válida P)
Eliminación manual de una cuenta
Implica los siguientes pasos
1. Inhabilitar la cuenta impidiendo el acceso
2. Hacer un backup de los ficheros de usuario
3. Eliminar losficheros de usuario
La inhabilitación de la cuenta podría ser temporal o denitiva
Temporal: puede hacerse de diversas formas
cambiar el login shell a /bin/false, o /usr/sbin/nologin (si
disponible)
 cambiar el campo contraseña de /etc/passwd a * (volviendo a
poner x se habilita la cuenta),
 poner una ! al principio del campo contraseña de /etc/shadow,
usar passwd -l
definitiva: borrar las entradas del usuario de /etc/passwd y /etc/shadow
1.3. Comandos para gestión de cuentas
Crear cuentas manualmente es un proceso tedioso:
existen comandos que nos ayudan en la tarea
Comandos simples de manejo de cuentas
useradd añade un nuevo usuario al sistema; ejemplo.
useradd -c .Aitor Tilla.aitor
 por defecto, sólo modica los cheros passwd y shadow, no crea
el directorio home ni le pone contraseña (cuenta inhabilitada)
varias opciones:
-m crea el directorio home, si no existe (y copia los cheros de
/etc/skel)
-g grupo especica el grupo principal
-s shell especica la shell a utilizar
 -e fecha fecha de expiración de la cuenta (formato YYYYMM-
DD)
Ejemplo:
useradd -c .Aitor Tilla.aitor -m -e 2006-11-02 -s
/bin/bash -g staff
userdel borra un usuario del sistema
usermod modifica las cuentas de usuario
groupadd, groupdel, groupmod lo mismo, para grupos
newusers permite crear varias cuentas a partir de un fichero con nombres
de usuario y contraseñas
 las líneas del fichero deben tener el mismo formato que las del fichero /etc/passwd, con la contraseña sin encriptar
chpasswd similar al anterior, permite actualizar las contraseñas de usuarios existentes
chsh cambia el shell por defecto del usuario
chfn cambia la información del campo GECOS
Comandos de alto nivel para el manejo de cuentas
Comandos adduser, addgroup:
hacen de front-end de los de bajo nivel useradd, groupadd y
usermod
 crean los usuarios/grupos en función de la conguración especi-
cada en el fichero /etc/adduser.conf
Herramientas grácas de gestión de usuarios y grupos:
kuser (KDE), user-admin (GNOME), etc.
Otros comandos relacionados
passwd: permite cambiar la contraseña (ya comentado)
chage: muestra y cambia la información de expiración de la contraseña
Formato:
chage [opciones ] [username ]
Algunas opciones:
 -l muestra información de expiración
su: permite cambiar de usuario o pasar a ser administrador
Formato:
su [opciones ] [-] username
Si no se especifica el username pasa a administrador
Algunas opciones:
-inicia un login shell
-m, -p o --preserve-environment mantiene el entorno (no
ejecuta el .bashrc del nuevo usuario)
-s, --shell=nueva_shell usa la shell especicada
-c, --commmand=comando ejecuta el comando con la identidad
del nuevo usuario:
su -c cat /etc/shadow
1.4. Cuotas de disco
Algunos Filesystems permiten limitar el uso del disco a los usuarios y grupos:
cuotas
Evitan que los usuarios monopolicen el disco
Pueden causar problemas a los usuarios:
 preferible instalar más disco o avisar a los usuarios que consuman
demasiado
Límites de cuotas:
Límite débil: si la cuenta del usuario o del grupo supera el límite débil,
se impondrá un período de gracia en el que el usuario podrá reducir la
ocupación
Límite duro: se deniega cualquier intento de escribir datos despúes de
este límite
Período de gracia: tras superar el límite débil, si el usuario no resuelve
el problema borrando archivos, la cuenta se bloquea
Instalación de cuotas de disco en Debian
Si el kernel está congurado para soportar cuotas, los pasos a seguir son:
1. Instalar el paquete quota
2. Modicar /etc/fstab para marcar los lesystems que tendrán cuotas:
/dev/hda9 /home ext3 defaults,usrquota 0 2
/dev/hda8 /tmp ext3 defaults,usrquota,grpquota 0 2
3. Reiniciar el sistema
4. Usar el comando edquota para editar las cuotas de usuarios y grupos
Comando edquota
Permite crear, manipular y eliminar cuotas basadas en usuarios o grupos
Sintaxis:
edquota [opciones ] [usuario |grupo ]
Opciones:
-u usuario configura las cuotas del usuario
-g grupo congura las cuotas para un grupo
-f filesystem realiza las operaciones obre un lesystem concreto
(por defecto, lo hace sobre todos los lesystems que admitan
cuotas)
 -t congura el período de gracia
 -p user1 usuarios copia la conguración de cuotas de user1 a
los usuarios indicados
Al ejecutar edquota se abre el editor indicado en la variable EDITOR
(por defecto, vi) para modicar las cuotas:
 se muestran los bloques de 1K en uso, así como los límites soft y
hard (también para i-nodos o cheros)
 si un límite está a 0 no se aplica esta información se guarda en los cheros aquota.user y aquota.groupen el directorio base del filesystem
Otros comandos
Existen otros comandos para la gestión de las cuotas:
quotacheck verifica la integridad de las bases de datos de las cuotas
se ejecuta en el script de inicio del sistema de cuotas
debe ejecutarse con las cuotas desactivadas
quotaon/quotaoff activa/desactiva el sistema de cuotas
repquota genera un informa del uso de las cuotas
# repquota /home
*** Report for user quotas on device /dev/hda9
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 34920 0 0 6 0 0
tarabelo -- 728 0 0 31 0 0
tomas *- 108 100 200 7days 8 0 0
quota permite al usuario ver el estado de sus cuotas
Algunas opciones:
 -g muestra información sobre las cuotas del grupo del usuario
 -v imprime información incluso para los lesystem sin límite en la cuota
-q imprime un mensaje si se ha superado la cuota
Ejemplo
$ quota
Disk quotas for user tomas (uid 1001):
Filesystem blocks quota limit grace files quota limit grace
/dev/hda9 108* 100 200 6days 9 0 0
/dev/hda8 1 10 20 1 0 0
Para más información sobre la conguración de las cuotas ver Quota
mini-HOWTO
2. Conguración de la red
Linux soporta múltiples protocolos y hardware de red:
Protocolos como TCP/IP y TCP/IP versión 6, IPX/SPX, PPP, SLIP,
X.25, Frame Relay, etc.
Soporta hardware para redes Ethernet, Token-Ring, etc
Diferentes NICs (Network Interface Cards ) implican diferentes dispositivos
de comunicación:
ethx para Ethernet, trx para Token-Ring, pppx para PPP, slx
para SLIP,
 Además, existe el dispositivo de loopback lo
Funciona como un circuito cerrado en el que cualquier datagrama
que se le pase como parámetro es inmediatamente devuelto a la capa de red del sistema
Se utiliza para realizar pruebas, y para un par de aplicaciones de red.
En muchos UNIX estos dispositivos aparecen en /dev
 En Linux se crean dinámicamente por software y no requieren los ficheros de dispositivos
En Linux puede ser necesario incluir los módulos adecuados para cada dispositivo
En esta sección trataremos la conguración de TCP/IP en redes Ethernet;
para más información ver:
Administración de red en Linux: Linux Network Administrators Guide
2 ed., Olaf Kirch y Terry Dawson
Linux Networking-HOWTO
Dispositivos de red soportados en Linux: Linux Hardware Compatibility
HOWTO - Network adapters
2.1. Comandos de conguración de red
Los comandos más importantes para congurar la red son:
ifconfig: conguración del interfaz de red
route: conguración del routing
netstat: información de la red
Comando ifconfig
Muestra y configura una interfaz de red:
$ /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:12:43:A6:05:5C
inet addr:193.144.84.77 Bcast:193.144.84.255 Mask:255.255.255.0
inet6 addr: fe80::211:43ff:fea6:55c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1035446 errors:0 dropped:0 overruns:0 frame:0
TX packets:1053062 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
RX bytes:196973192 (187.8 MiB) TX bytes:270128587 (257.6 MiB)
Interrupt:169
Sintaxis:
ifconfig [opciones ] [interfaz ]
ifconfig interfaz [configuración ] [up|down]
Opciones de visualización:
-a muestra todas las interfaces , incluso las inactivas
-s muestra información resumida (igual que netstat -i)
En las opciones de conguración se indica entre otras cosas la IP, máscara de red y dirección de broadcast:
# ifconfig eth0 193.144.84.77 netmask 255.255.255.0 broadcast 193.144.84.255 up
14
ifconfig permite también congurar el estado del interfaz, por ejemplo,cambiar el MTU, poner modo promiscuo, activar/desactivar ARP, cambiar su dirección hardware (si el dispositivo lo permite), etc.
# ifconfig eth0 mtu 500
# ifconfig eth0 -noarp
# ifconfig eth0 hw ether 52:54:00:12:34:56
ver el manual de ifconfig para más información
Otros comandos relacionados
Otros comandos de conguración de interfaz son:
ifup/ifdown activan/desactivan un interfaz de red
# ifdown eth0
iwconfig configura un interfaz wireless
# iwconfig eth1 essid "Mi Red"
Comando route
Permite modicar la tabla de routing, mostrando, añadiendo o borrando
rutas
muestra las rutas definidas permite añadir/borrar rutas estáticas permite denir un gateway de salida por defecto para conectarnos al exterior permite congurar el sistema para que actúe como un router
Mostrar una tabla de routing
Se usa route [-n -e -ee] (equivale a netstat -r)
$ /sbin/route -n -ee
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface MSS W193.144.84.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0 0 0.0.0.0 193.144.84.1 0.0.0.0 UG 0 0 0 eth0 0 0 15
Opciones:
-usa direcciones IP en vez de nombres
-e emplea el mismo formato que netstat -r
-ee salida larga
Los fags indican el estado de la ruta
 U la interfaz está activa (Up)
 H el destino es una estación (Host)
G la ruta usa una pasarela (Gateway)
 D ruta creada dinámicamente por un demonio de encaminamiento
o un mensaje ICMP de redirección
 M ruta modicada dinámicamente
R ruta rehabilitada
! ruta rechazada
De las siguientes columnas, algunas no se usan
Metric distancia (normalmente en saltos) al destino
 Ref número de referencias a la ruta (no usado en linux)
 Use número de consultas para la ruta
 MSS (Maximum Segment Size ) tamaño máximo del segmento para
las conexiones TCP en esa ruta
 Window Tamaño predeterminado de la ventana para las conexiones
TCP en esa ruta
irtt (Initial Round Trip Time) valor inicial del temporizador
TCP
Añadir/borrar rutas estáticas
Se usa
route [add|del] [default] [-net|-host] target [netmask
Nm] [gw Gw] [opciones ] [[dev] If]
Ejemplo: suponer que tenemos la conguración del dibujo, y queremos crear
la tabla de rutas para el host Internet
Añadir la ruta para la red 192.168.0.0/24 en eth1
route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
Añadir la ruta por defecto
route add default gw 10.0.2.2
Añadir una ruta para la red 172.16.0.0/24, usando como pasarela en
host con IP 192.168.0.1
route add -net 172.16.0.0 netmask 255.255.255.0 gw 192.168.0.1
El host pasarela tiene que permitir routing entre sus interfaces; pasa
eso debemos activar el ip_forward:
# echo 1 > /proc/sys/net/ipv4/ip_forward
Otras opciones de conguración
Linux permite otras opciones para congurar la red, como denir alias de IP
o congurar opciones sobre el tráco
Alias de IP
Permite congurar múltiples direcciones IP a un único dispositivo de red
podemos soportar varias subredes IP en una misma Ethernet
 los alias se indican como dispositivo: número
Ejemplo:
# ifconfig eth0 192.168.1.1 netmask 255.255.255.0 up
# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# ifconfig eth0:0 192.168.10.1 netmask 255.255.255.0 up
# route add -net 192.168.10.0 netmask 255.255.255.0 eth0:0
Opciones del IP
Linux permite congurar diversas opciones sobre el tráco IP
los cambios pueden hacerse mediante el comando sysctl, escribiendo
en los archivos del directorio /proc/sys/net/ipv4 o de forma permanente
en el fichero /etc/sysctl.conf
algunos de estos estos archivos tienen un 0 (opción desactivada) o un
1 (opción activada)
otros pueden tener un valor
algunas de las opciones son:
ip_forward si 1 permite routing entre interfaces (por defecto 0)
ip_default_ttl el tiempo de vida por defecto de los paquetes
(por defecto 64 ms)
Información de la red: comando netstat
netstat muestra las conexiones de red, tablas de routing y estadísticas de
interfaz
Formato:
netstat [tipo de información ] [opciones ]
Algunos tipos de información:
(nada) muestra la lista de sockets abiertos
$ netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 jumilla.dec.usc.e:58946 aiff.usc.es:telnet ESTABLISHED
tcp 0 0 jumilla.dec.usc.e:43658 ulla.dec.usc.es:1301 ESTABLISHED
tcp 0 0 jumilla.dec.usc.e:35346 sd.cesga.es:ssh ESTABLISHED
tcp 0 0 jumilla.dec.usc.es:ssh ulla.dec.usc.es:1688 ESTABLISHED
tcp 0 0 jumilla.dec.usc.es:ssh teneguia.dec.usc.:35161 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 8 [ ] DGRAM 15368 /dev/log
unix 2 [ ] DGRAM 194110 @/org/kernel/udev/udevd
unix 2 [ ] DGRAM 15671 @/var/run/hal/hotplug_socket
--route, -r muestra las tablas de rutas (igual que route admite
los ags -n, -e y -ee)
--interface, -i muestra un resumen del estado de las interfaces
de red (igual que ifconfig -s)
$ netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 5110292 0 0 0 5011769 0 0 0 BMR MTU (Maximum Transmission Unit ): tamaño máximo del
datagrama
 Met: valor de la métrica para esa interfaz
RX/TX paquetes recibidos/transmitidos
OK/ERR/DRP/OVR paquetes transmitidos correctamente
(OK), erróneos (ERR), descartados por falta de recursos (DRP,
drop) y perdidos por desbordamiento (OVR, overrun)
19
Las banderas (flags) indican el estado del interfaz:
 B: dirección de difusión activa
L: la interfaz es un dispositivo de bucle local (loopback )
P: se reciben todos los paquetes (modo promiscuo)
O: ARP desactivado para este interfaz
M: el interfaz permite multicast
A: el interfaz recibe todos los paquetes multicast en la red
(allmulti )
R: la interfaz funciona (running)
 U: la interfaz está activa (up)
Este estado puede cambiarse con ifconfig:
# ifconfig eth0 promisc # Modo promiscuo
# ifconfig eth0 -arp # Desactiva ARP
 --statistics, -s muestra estadísticas para cada protocolo de red
$ netstat -s
Ip:
5001746 total packets received
7479 forwarded
0 incoming packets discarded
4894721 incoming packets delivered
......
Cada uno de los modos anteriores tienen diferentes opciones
Algunas opciones válidas para varios tipos son:
 --numeric o -n muestra información numérica en vez de nombres
para IPs, puertos, etc.
 --continuous o -c imprime la información solicitada de forma
continua
 --extend o -e muestra información extendida (con -ee aún más
información)
Para más información ver la página del manual
Otros comandos de red
Comando arp
arp manipula la cache de ARP:
muestra la tabla ARP
borra entradas
 añade entradas manualmente
Ejemplo:
# arp
Address HWtype HWaddress Flags Mask Iface
almansa.dec.usc.es ether 00:0D:56:6F:E6:90 C eth0
193.144.84.1 ether 00:E0:63:93:26:E5 C eth0
teneguia.dec.usc.es ether 00:C0:4F:A1:5D:89 C eth0
Flag: C dirección completa, M dirección añadida manualmente
Algunas opciones:
-i interfaz muestra las entradas para el interfaz indicado
-a hostname muestra las entradas para el host especicado
-d hostname borra las entradas para el host especicado
-s hostname hw_addr añade manualmente una entrada para el host
especicado con la dirección hardware indicada
-n interfaz no hace traducción de IPs a nombres
Comando ping
Muestra la disponibilidad de conexión y la velocidad de transmisión
con un host remoto:
$ ping 193.144.84.1
PING 193.144.84.1 (193.144.84.1) 56(84) bytes of data.
64 bytes from 193.144.84.1: icmp_seq=1 ttl=255 time=0.420 ms
64 bytes from 193.144.84.1: icmp_seq=2 ttl=255 time=0.396 ms
64 bytes from 193.144.84.1: icmp_seq=3 ttl=255 time=0.368 ms
ping envía paquetes ICMP (ECHO_REQUEST) al destino y espera
respuesta, midiendo el RTT
muchos rewalls bloquean el tráco ICMP por lo que el ping no funciona
Algunas opciones:
-b permite ping a una dirección de broadcast
-c COUNT para después de enviar COUNT paquetes ECHO_REQUEST
s packetsize especica el número de bytes a enviar (por defecto 56)
Comando traceroute
Muestra la ruta que sigue un paquete hasta llegar a destino
$ traceroute www.elpais.es
traceroute to a1749.g.akamai.net (130.206.192.32), 30 hops max, 40 byte packets
1 rutfis (193.144.64.1) 1.070 ms 0.688 ms 0.927 ms
2 * * *
3 10.56.5.1 (10.56.5.1) 57.463 ms 2.021 ms 1.923 ms
4 193.144.79.72 (193.144.79.72) 2.507 ms 16.280 ms 2.080 ms
5 GE2-0-0.EB-Santiago0.red.rediris.es (130.206.204.21) 25.681 ms 2.068 ms 1.965 ms
6 GAL.SO2-0-0.EB-IRIS4.red.rediris.es (130.206.240.33) 10.959 ms 10.665 ms 10.710 m7 130.206.220.59 (130.206.220.59) 20.277 ms 10.781 ms 10.470 ms
8 a130-206-192-32.deploy.akamaitechnologies.com (130.206.192.32) 11.011 ms 23.482 ms traceroute utiliza el campo TTL de la cabecera IP para obtener respuestas
ICMP TIME_EXCEEDED de los host por los que pasa el
paquete (envía paquetes UDP)

los sistemas pueden no enviar mensajes de tiempo excedido: aparecen *
si los rewalls bloquean el tráco ICMP no veremos nada
otros programas similares:
traceproto: permite especificar el protocolo a usar (TCP, UDP,
ICMP) y el puerto a tracear (por defecto 80)
 tcptraceroute: envía paquetes TCP SYN para evitar problemas
con firewalls
Comandos host, dig, nslookup
Permiten obtener la dirección IP de un sistema a partir del nombre o
viceversa:
$ host www.elpais.es
www.elpais.es is an alias for elpais.es.edgesuite.net.
elpais.es.edgesuite.net is an alias for a1749.g.akamai.net.
a1749.g.akamai.net has address 130.206.192.38
a1749.g.akamai.net has address 130.206.192.32
nslookup está desaprobado (deprecated) y no se recomienda su uso
Comano mii-tool
Permite ver y/o configurar el estado de la unidad MMI (Media Independent
Interface) de la tarjeta de red
Ethernet usa MII para autonegociar la velocidad de enlace y el
modo duplex
# mii-tool -v eth0
eth0: negotiated 100baseTx-FD flow-control, link ok
product info: vendor 00:08:18, model 16 rev 0
basic mode: autonegotiation enabled
basic status: autonegotiation complete, link ok
capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
# mii-tool --force=100baseTx-HD eth0
# mii-tool eth0
eth0: 100 Mbit, half duplex, link ok
2.2. Ficheros de conguración de red
La conguración mediante ifconfig y route no se mantiene al apagar el
sistema:
durante el proceso de arranque la red se inicia mediante la ejecución de
scripts del init.d
/etc/init.d/networking en Debian
/etc/init.d/network en RedHat
Estos scripts leen los cheros de conguración de la red
Fichero /etc/network/interfaces en Debian
auto eth0
iface eth0 inet static
address 193.144.84.77
netmask 255.255.255.0
network 193.144.84.0
broadcast 193.144.84.255
gateway 193.144.84.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 193.144.75.9
dns-search dec.usc.es
name Tarjeta de red Ethernet
Fichero /etc/sysconfig/network-scripts/ifcfg-ethx en RedHat
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=193.144.84.186
NETMASK=255.255.255.0
GATEWAY=193.144.84.1
TYPE=Ethernet
Otros ficheros de conguración
Fichero /etc/resolv.conf especifica el dominio y los servidores DNS
Ejemplo:
domain dec.usc.es
search dec.usc.es usc.es
nameserver 193.144.75.9
nameserver 193.144.75.12
si buscamos por un hostname (sin dominio) le añade dec.usc.es y si
no aparece busca por usc.es
pueden añadirse hasta tres servidores de DNS
Fichero /etc/hosts fichero que asocia nombres de hosts con direcciones
IP
permite consultar una IP sin acceder al DNS
Ejemplo de /etc/hosts:
127.0.0.1 localhost.localdomain localhost
193.144.84.77 jumilla.dec.usc.es jumilla
la consulta es más rápida que acceder al DNS
 si las IPs cambian la dirección es incorrecta
sólo debería aparecer el nodo local y la interfaz de loopback
esto permite fijar el nombre y el dominio del sistema  en algunas distribuciones (Debian) el nombre también debe ponerse en el fichero /etc/hostname
el nombre y el dominio pueden obtenerse mediante los comandos
hostname y dnsdomainname
Fichero /etc/networks fichero de texto que asocia nombres a redes No es imprescindible
Ejemplo de /etc/networks
red1 172.16.1.0
red2 172.16.2.0
Fichero /etc/host.conf configura el comportamiento del name resolver
indica donde se resuelven primero la dirección o el nombre de un nodo
Ejemplo de /etc/host.conf:
order hosts,bind
multi on
indica que primero se veriquen las tablas locales (/etc/hosts) y después el DNS
multi on indica que se retornen todas las direcciones válidas que se encuentren en /etc/hosts
Fichero /etc/nsswitch.conf chero de conguración del Name Service
Switch
centraliza la información de diferentes servicios para la resolución de
nombres
indica las acciones a realizar para acceder a las diferentes bases de
datos del sistema: hosts, contraseñas, servicios, etc.
reemplaza la funcionalidad del archivo host.conf
 introducido en la versión 2 de la biblioteca GNU
Ejemplo de nsswitch.conf
hosts: dns files
networks: files
 indica que un host se busque primero en el DNS y después en
el chero /etc/hosts, mientras que una red se busca sólo en
/etc/networks
Es posible controlar el comportamiento por medio de acciones, por
ejemplo:
hosts: dns [!UNAVAIL=return] files
networks: files
si el estado de salida del DNS es diferente de no disponible no consulta
a los ficheros:
 sólo accede a /etc/hosts si el DNS no está disponible
Los valores de estado disponibles son:
 success la petición se encontró sin errores (acción por defecto
return) notfound no error, pero no se encontró el nodo o la red (acción
por defecto continue)
 unavail servicio solicitado no disponible (acción por defecto continue)
 tryagain servicio no disponible temporalmente (acción por defecto
continue)
Fichero /etc/protocols lista los protocolos que reconoce el sistema operativo
Ejemplo de /etc/protocols
ip 0 IP # internet protocol, pseudo protocol number
icmp 1 ICMP # internet control message protocol
tcp 6 TCP # transmission control protocol
udp 17 UDP # user datagram protocol
.....
Fichero /etc/services relaciona las aplicaciones con sus correspondientes puertos y protocolos básicos
Un trozo de /etc/services
ftp-data 20/tcp # Datos de ftp
ftp 21/tcp # Control de ftp
ssh 22/tcp # SSH por TCP
ssh 22/udp # SSH por UDP
telnet 23/tcp # Telnet
smtp 25/tcp # Correo electrónico
....
2.3. Conguración del DHCP
DHCP (Dynamic Host Conguration Protocol ) permite congurar automá-
ticamente la red de los sistemas a partir de un servidor DHCP
La información de IPs, DNS, etc. se mantiene centralizada en el servidor
Al iniciarse, los clientes se conectan al servidor (por broadcast) y cargan
su conguración
Conguración del servidor
Se encuentra en el fichero /etc/dhcpd.conf
Ejemplo sencillo de conguración
option domain-name "midominio.com"; # Nombre de Dominio
option domain-name-servers 10.0.2.3, 193.14.7.9; # Servidores de Nombres
default-lease-time 600; # Tiempo por defecto que dura una asignación
max-lease-time 7200; # Duración máxima de una asignación
option subnet-mask 255.255.255.0; # Máscara de red
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.10 192.168.0.20;
option broadcast-address 192.168.0.255; # Dirección de Broadcast
option routers 192.168.0.1; # Gateway de la red
}
host marte {
hardware ethernet 52:54:00:12:34:70;
fixed-address marte.mired.com;
}
si utilizamos nombres (como marte.mired.com) la IP debe ser accesible
(por DNS o /etc/hosts)
en elfichero /etc/default/dhcp especificamos el interfaz por el que
servimos DHCP
en /var/lib/dhcp/dhcp.leases están las IPs asignadas
para más información ver la página de manual de dhcpd
Conguración del cliente
Para que el cliente obtenga los datos de DHCP usar:
# dhclient eth0
Un comando similar es pump
Para que el cliente se configure en el inicio debemos modcar el fichero de
conguración de red
En Debian, fichero /etc/network/interfaces:
auto eth0
iface eth0 inet dhcp
3. Automatización de tareas
En esta sección veremos la utilización de comandos que permiten planicar
tareas para ejecutar en un futuro:
at, batch permiten ejecutar trabajos a una hora especíca o bajo determinadas
condiciones
cron permite correr trabajos a intervalos regulares
Estos comandos permiten automatizar distintas tareas, para que se ejecuten
en determinados momentos sin intervención del administrador
3.1. Comando at
Permite indicar el momento en que se quiere ejecutar un trabajo
Sintaxis:
at [opciones ] TIME
Al ejecutar at pasamos a un nuevo prompt, que nos permite introducir
comandos que se ejecutarán a la hora indicada
para salvar el trabajo y salir CTRL-D
 el entorno actual también se salva
 al terminar, la salida estándar se envía como un mail al usuario
 el trabajo no se para al salir de la sesión
Ejemplo:
$ at 11:45
warning: commands will be executed using /bin/sh
at> ls /tmp > lista
at>
job 4 at Wed Nov 16 11:45:00 2005
Algunas opciones:
-f FILE especifica un fichero conteniendo las acciones a realizar
en vez de la entrada estándar
-c jobnumber muestra el trabajo a ejecutar
 -m envía un mail al usuario, incluso aunque no haya salida
 -v muestra la hora a la que se ejecutará el trabajo
TIME puede especificarse de varias formas:
HH:MM por ejemplo 12:54
HH:MMAM/PM, por ejemplo 1:35PM
HH:MM MMDDYY, por ejemplo 1:35PM 122505
now + numero unidades , donde unidades puede ser minutes,
hours, days, o weeks
$ at now+2hours
today, tomorrow, por ejemplo 12:44tomorrow
midnight (00:00), noon (12:00), teatime (16:00)
Comandos relacionados
atq o at -l lista los trabajos pendientes del usuario
si es el superusuario, lista los trabajos de todos los usuarios
atrm o at -d borra trabajos identicados por su número de trabajo
batch ejecuta trabajos cuando la carga del sistema es baja
el trabajo empieza en cuanto la carga caiga por debajo de 1.5
lacarga se obtiene del fichero /proc/loadavg
Ficheros de conguración
El administrador puede controlar la utilización de at
Ficheros /etc/at.allow y /etc/at.deny
at.allow lista los usuarios que pueden usar
at.deny lista los usuarios que NO pueden usar at
Primero se chequea /etc/at.allow  si está el usuario, puede usar at  si no está o el fichero no existe, se chequea /etc/at.deny
 si el usuario no está en at.deny puede usar at
Si no existe ninguno de los dos ficheros, solo root puede ejecutar at
Para dar permiso para todos los usuarios crear sólo el chero at.deny
vacío
3.2. Procesos periódicos
Para crear trabajos que se ejecuten periódicamente se utilizan el demonio
cron y el comando crontab
crontab permite configurar los procesos periódicos
cron se encarga de su ejecución
La utilización de cron se gestiona a través de los cheros /etc/cron.allow
y /etc/cron.deny
el comportamiento si no existen los ficheros depende de la configuración
del sistemaen Debian, si no existen, todos los usuarios pueden usar crontab
Fichero crontab Los trabajos se especican en un fichero de crontab, que se guarda en
/var/spool/cron/crontabs, y que puede tener tres tipos de líneas:
Comentarios, que empiezan por #
Denición de variables, de tipo nombre = valor
# shell usada para ejecutar los comandos
SHELL=/bin/bash
# Usuario al que se envía (por mail) la salida
# de los comandos (por defecto, se envían
# al propietario del fichero crontab)
MAILTO=pepe
Especicación del trabajo y de la hora de ejecución, de la siguiente
forma:
minuto hora día mes día_semana comando
 el día de la semana de 0 a 7 (0 ó 7 domingo)
* indica cualquier valor
se pueden indicar rangos, listas o repeticiones:
1-5 para indicar de lunes a viernes
0,15,30,45 para indicar cada 15 minutos
0-23/2 en el campo hora, indica realizar cada dos horas (0,
2, 4, etc.)
Ejemplos:
 Borra el /tmp todos los días laborables a las 4:30 am
30 4 * * 1-5 rm -rf /tmp/*
Escribe la hora, cada 15 minutos, durante la noche:
0,15,30,45 0-8,20-23 * * * echo Hora:$(date)/tmp/horas
Comando crontab
Para crear y editar los trabajos periódicos se puede utilizar el comando
crontab
Sintaxis:
crontab [-u usuario ] {-l|-e|-r}
crontab [-u usuario ] fichero
en la segunda forma instala un nuevo crontab desde un fichero
Opciones:
 -u usuario crea o maneja el crontab de un usuario especíco
(sólo root)
-e edita el fichero crontab
-lmuestra el fichero crontab
-r borra el fichero crontab
Fichero /etc/crontab y /etc/cron.d
El demonio cron busca ficheros en /var/spool/cron para ejecutarlos a la hora indicada
además también ejecuta las acciones indicadas en los cheros /etc/crontab y en el directorio /etc/cron.d/ estos ficheros suelen ser de mantenimiento del sistema
De esta forma, el administrador puede crear scripts que se ejecuten con periodicidad
horaria, diaria, semanal y mensual
sólo tiene que colocar esos scripts en los directorios /etc/cron.hourly,
/etc/cron.daily, /etc/cron.weekly o /etc/cron.monthly
la fecha y hora de ejecución de estos scripts se controla en el fichero
/etc/crontab

tema 4c

3. Arranque y parada del sistema
Durante el arranque, el sistema pasa por las siguientes fases
Carga e inicialización del kernel
Detección de dispositivos y conguración
Creación de procesos de inicio
Ejecución de los scripts de inicio del sistema
Creación de terminales
Los detalles de cada paso dependen de cada implementación particular de
UNIX
3.1. Carga del Kernel
Usualmente en 2 pasos:
1. La ROM del sistema carga un pequeño programa (bootstrap o gestor
de arranque) en memoria desde el disco
la localización del programa depende del sistema UNIX
en un PC, se sitúa en el MBR (Master Boot Record ), primer sector
del disco
2. El bootstrap localiza y carga en memoria el kernel
en Linux normalmente localizado en /boot (fichero
vmzlinuz-versión )
3. Los gestores de arranque más populares en Linux son LILO y GRUB
Una vez cargado, el kernel realiza los siguientes pasos:
1. inicializa sus estructuras de datos internas (colas, tabla de procesos,
etc.)
2. chequea el hardware
3. verifica la integridad del fileesystem root y lo monta
en Linux, se crea un RAM disk a partir del chero /boot/initrd.img-versión
4. se crean los procesos de inicio
en BSD, 3 procesos: swapper (0), init (1) y pagedaemon (2)
en System V: sched (0), init (1) y varios procesos de manejo del
kernel y la memoria
en Linux: init (1) y varios procesos de manejo del kernel y la
memoria (ksoftirqd, migration, events, etc., que en realidad son
parte del kernel)
init se encarga de arrancar el resto de procesos
Una vez arrancado init, este inicia los scripts de inicio, que activan los
demonios:
en BSD: ejecuta el script /etc/rc que a su vez ejecuta otros scripts
en System V: lee el fichero /etc/inittab desde el que se invocan scripts
situados en los directorios /etc/rcx.d
 x es el nivel de ejecución o runlevel
3.2. Niveles de ejecución (runlevels)
El proceso init inicia el sistema en un determinado runlevel
el runlevel inicial especificado en /etc/inittab
Runlevel determinada conguración software que permite la ejecución de
una serio de procesos en la máquina
Los runlevels se identican por números de 0 a 6
Runlevel Descripción
0 parada del sistema
1 modo monousuario; solo root puede entrar
2, 3, 4, 5 modos multiusuario
6 reiniciar el sistema
S también monousuario (usado por scripts)
La utilización de los runlevels 2-5 varía con la distribución de Linux:
en Debian los 4 son idénticos: modo multiusuario completo (con entorno
de ventanas, si disponible); por defecto se usa el 2
en RedHat y similares:
2:multiusuario sin NFS
3:multiusuario completo (sin ventanas)
4: no usado
5:multiusuario completo (con ventanas)
Es posible cambiar de runlevel en cualquier momento usando el comando
telinit o init:
Formato
telinit [-t SEC] runlevel
SEC es el número de segundos que esperará init a que un proceso se
detenga con un SIGTERM antes de antes de matarlo con un SIGKILL
(por defecto, 5)
Ejemplo: pasa al runlevel 6 en 10 segundos (reinicia la máquina)
telinit -t 10 6
Es posible hacer que init relea el chero de conguración /etc/inittab:
telinit q
podemos saber en que runlevel nos encontramos con el comando runlevel
runlevel: muestra el runlevel actual y el anterior
# runlevel
N 2
indica que nos encontramos en el nivel 2 y que no hubo nivel
anterior
El fichero /etc/inittab
Define como se ejecutan los runlevels
indica el runlevel por defecto
indica los scripts a ejecutar en cada runlevel
Formato de las líneas de inittab
identificador:runlevels:acción:proceso
identificador: nombre asociado a cada línea del chero generalmente
no superior a 4 caracteres
runlevels: lista de runlevels (todos seguidos) para los cuales esta línea
se tendrá en cuenta
acción: indica de qué forma o bajo qué condiciones se ejecuta el comando
del campo siguiente
proceso: comando que se ejecuta para esta entrada en los runlevels
especificados
Algunas de las acciones de init son (para verlas todas ver el manual de
inittab)
respawn: el proceso se reinicia si termina
wait: init inicia el proceso y espera a que termine para seguir
once: init inicia el proceso una vez, cuando se entra en el runlevel
sysinit: el proceso se ejecuta durante el arranque de la sistema
ctrlaltdel: el proceso se ejecuta si se recibe un CTRL-ALT-DEL
powerwait: el proceso se ejecuta cuando se acaba la batería
powerokwait: el proceso se ejecuta cuando se recupera la energía
powerfailnow: el proceso se ejecuta cuando la batería está casi vacía
Ejemplo de inittab
# Número de runlevel por defecto.
id:2:initdefault:
# Script que se ejecuta siempre en cada inicio
# independientemente del runlevel.
si::sysinit:/etc/init.d/rcS
# Script para cada runlevel
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normalmente no se alcanza, sólo si falla el reinicio
z6:6:respawn:/sbin/sulogin
# Qué hacer si se presiona CTRL-ALT-DEL
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
# Qué hacer si la corriente se va/vuelve
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop
el script /etc/init.d/rcS se ejecuta en el arranque
este script llama a los scripts del directorio /etc/rcS.d
Por cada runlevel, se ejecuta el script /etc/init.d/rc X
este script llama a los scripts del directorio /etc/rcX.d
53
Directorios /etc/rcX.d
Los ficheros de estos directorio son de la forma:
[K|S]NN Servicio
Al entrar en un runlevel se ejecutan todos los ficheros del /etc/rcX.d correspondiente
los que empiezan por K detienen servicios
los que empiezan por S los inician
los scripts se ejecutan por orden alfabético (primero K y después S)
Todos los ficheros son enlaces a los scripts reales, que están en el directorio
/etc/init.d
estos script admiten, al menos, uno de los siguientes parámetros:
star inicia el servicio
Stop para el servicio
Ejemplo, para y reinicia los servicios de red:
# /etc/init.d/networking stop
# /etc/init.d/networking start
Si queremos iniciar un nuevo servicio en un determinado runlevel
colocar el script de inicio en /etc/init.d
hacer un enlace de nombre Sxy Servicio en el runlevel
tener en cuenta posibles dependencias con otros servicios
hacer un enlace de nombre tipo K en el runlevel en que se quiera pararlo
 un buen número de secuencia es 100-xy (el orden de matar los
procesos inverso debe ser al de iniciarlos)
existen programas que nos facilitan la labor:
update-rc.d: crea y borra enlaces a los scripts init
sysv-rc-conf: GUI para consola
 ksysv: entorno gráco para KDE
Terminales
Despues de ejecutar los scripts de inicio, init crea un conjunto de terminales
virtuales, siguiendo lo que se indica en /etc/inittab
.......
# Lanzar las terminales para el login de los usuarios
# Notar que el la mayoría de los sistemas tty7 es usado por X Window,
# así, para añadir mas getty's se debe saltar tty7
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
en esta conguración, los runlevels 2 y 3 arrancan 6 terminales y los 4
y 5 sólo 1
podemos cambiar de tty con Ctrl-Alt-F[1-6 ]
el tty7 se utiliza para pasar al entorno de ventanas
los terminales se lanzan con spawn para que se vuelvan a crear cuando
salimos de la sesión
En este momento se puede acceder al sistema:
al iniciar la sesión en un terminal:
proceso tty se convierte en un proceso login que chequea usuario
y contraseña
 si se accede con éxito, el proceso login se convierte en un shell
al salir de la sesión
el proceso bash muere
init relanza (respawn) un nuevo tty
3.3. Gestores de arranque
Los gestores de arranque más populares en Linux son LILO y GRUB
LILO
LILO (LInux LOader): sistema de arranque muy extendido
no depende de un sistema de ficheros especíco
 no sabe leer sistemas de ficheros: sólo entiende localizaciones físicas
dentro del disco
puede arrancar núcleos de Linux desde diskettes y discos duros
permite arrancar Linux y otros sistemas operativos instalados en el
sistema
PC/MS-DOS, DR DOS, OS/2, Windows 9*/NT/XP, 386 BSD,
SCO UNIX, Unixware,. . .
permite pasar parámetros a cada kernel
Estructura de LILO
El bootloader propiamente dicho reside normalmente en /boot/boot.b
y se divide en dos partes:
 Primera etapa: de pequeño tamaño para que quepa en un sector
de arranque, localiza y carga la segunda etapa
 Segunda etapa: de mayor tamaño, con el resto de la lógica, se
carga directamente desde el fichero
La primera etapa se puede guardar en varios sitios, dependiendo del
sistema y del modo de arranque preferido:
 en el MBR,
 en el sector de arranque de una partición o de un disco exible
Los datos que necesita el bootloader para arrancar el sistema se encuentran
el fichero map, generalmente en /boot/map
Conguración de LILO
La conguración se encuentra generalmente en el archivo /etc/lilo.conf
cada vez que modiquemos este archivo es necesario ejecutar el comando
/sbin/lilo
 Lee el fichero de conguración, construye el map, lee las posiciones
de los ficheros que necesita leer y escribe la primera etapa del
bootloader en su lugar
Problemas
LILO depende de las funciones de la BIOS para acceder al disco
Si la BIOS no soporta el acceso a discos grandes (anteriores a 1998),
la segunda etapa y todos los demás cheros que se usen, deberán estar
en sectores dentro de los 1024 primeros cilindros del disco
LILO debe saber la posición física en disco de los cheros que carga: si
esta posición cambia y LILO no se reinstala, el arranque fallará
Ejemplo de fichero/etc/lilo.conf
# Opciones globales
lba32
boot=/dev/hda
install=/boot/boot.b
map=/boot/map
prompt
timeout=50
default=linux
# imágenes del kernel:
image=/boot/vmlinuz--2.4.27-2-386
label="Linux 2.4.24"
root=/dev/hda2
initrd=/boot/initrd.img-2.4.27-2-386
read-only
image=/boot/vmlinuz-2.4.20-3-686
label="Linux 2.4.20"
root=/dev/hda2
initrd=/boot/initrd.img-2.4.27-2-386
append="single"
# otros sistemas operativos:
other=/dev/hda1
label="Windows"
table=/dev/hda
Opciones globales
lba32 permite acceso a discos de más de 8 GB
boot=/dev/hda dispositivo o partición donde se instala LILO
install=bootloader indica el bootloader a usar, modo texto (boot-text.b),
modo menú (boot.b) o modo gráco (boot-bmp.b)
map=map-file posición del chero map
prompt hace que se muestre el prompt
timeout=50 si no se recibe una entrada del usuario en 5 segundos arranca
la imagen predeterminada
default=linux la imagen predeterminada que será cargada
Opciones para las imágenes
image=/boot/vmlinuz... indica el fichero del kernel a cargar

label=... nombre como aparece en el menú
root=/dev/hda2 dispositivo que tiene la partición raíz
initrd=/boot/initrd... archivo que contiene la imagen que será cargada
en el disco RAM inicial
append=... añade la línea especicada a los parámetros iniciales del
kernel
read-only cuando se arranca la imagen del kernel se montará el -
lesystem raíz de sólo lectura, para que pueda ser chequeado por fsck
other=... permite indicar otros SO
table=/dev/hda indica donde está la tabla de particiones de este SO
GRUB
GRUB (GRand Unified Bootloader) es un sistema de arranque más potente
que el anterior
desarrollado dentro del proyecto GNU
es el preferido en muchas de las distribuciones actuales de Linux
diseñado para unicar el arranque entre los SO para x86
 implementa el estándar Multiboot, que permite cargar varias imá-
genes de arranque, necesarias para cargar kernels modulares (GNU
Hurd)
a diferencia de LILO, GRUB entiende los sistemas de cheros en tiempo
de arranque
 no es necesario conocer posiciones físicas a priori
 no es necesario ejecutar ningún programa cada vez que se cambia
la conguración: sólo cuando se instala o actualiza GRUB
Detecta automáticamente si el direccionamiento LBA está soportado
por la BIOS
Permite arrancar un kernel desde la línea de comandos del arranque
sin conguración previa
Arranque con GRUB
el arranque pasa por varias etapas:
en la etapa 1 se lee el MBR, que se encarga de pasar a las etapas
siguientes
en la etapa 2 se accede al filesystem y se lee el fichero de configuración
el fichero de configuración es, normalmente, /boot/grub/menu.lst
a diferencia de LILO, si se modica el chero de conguración no es
necesario reinstalar el MBR
Un ejemplo de /boot/grub/menu.lst
timeout 10
default 0
# Menú para arrancar Linux
title Debian GNU/Linux, kernel 2.4.27-2-386
root (hd0,1)
kernel /vmlinuz-2.4.27-2-386 root=/dev/hda3 ro
initrd /initrd.img-2.4.27-2-386
savedefault
boot
# Menú para arrancar Linux en modo monousuario
title Debian GNU/Linux, kernel 2.4.27-2-386
root (hd0,1)
kernel /vmlinuz-2.4.27-2-386 root=/dev/hda3 ro single
initrd /initrd.img-2.4.27-2-386
savedefault
boot
# Menú para arrancar Windows
title Windows
rootnoverify (hd0,0)
makeactive
chainloader +1
Opciones generales
timeout 10 espera 10 segundos para arrancar
default 0 arranca la primera de las imágenes
 si default saved arranca la última imagen salvada con savedefault
Opciones para las imágenes
title título que aparece en el menú
root (hd0,1)
indica que el kernel está en la segunda partición de hda
kernel /vmlinuz...root=/dev/hda3 ...
indica el fichero del kernel y donde se encuentra el directorio raíz
 si boot se encontrara en la misma partición que raíz (hda3) habría
que poner
root (hd0,2)
kernel /boot/vmlinuz...root=/dev/hda3...
savedefault usado con default save; salva esta entrada como entrada
por defecto para el próximo arranque
boot arranca la imagen cargada (puede no ponerse)
rootnoverify arranca desde la partición pero no intentes montarla
makeactive pon la partición como activa (para poder arrancar desde
ella)
chainloader +1 encadena con el cargador de Windows
Existen muchas más opciones
para saber más ver el manual de GRUB en
http://www.gnu.org/software/grub/manual/
Reinstalar GRUB
podemos usar grub-install para reinstalar un GRUB estropeado
Formato:
grub-install [opciones] dispositivo
Ejemplo: instala GRUB en /dev/hda
# grub-install /dev/hda
Opciones:
--root-directory DIR instala GRUB en DIR/boot en vez de en
/boot
Paso de parámetros al kernel
Al iniciar LILO o GRUB es posible pasar parámetros al kernel7
o bien indicandolos directamente en el menú inicial,
o añadiendolos en lilo.conf o menu.lst
Alguno de estos parámetros son:
Parámetro Función
init=comando haz que el comando inicial sea comando en vez
de init
root=device cambia el dispositivo del lesystem raíz
mem=valor indica al kernel la memoria del sistema, p.e.
mem=256M
ro/rw monta el lesystem raíz de sólo lectura/
escritura
single inicia en modo monousuario
acpi=[on|off] activa/desactiva el soporte ACPI (Advanced
Configuration and Power Interface )
3.4. Apagado del sistema
El apagado del sistema debería implicar los siguientes pasos:
1. envío de avisos a los posibles usuarios conectados
2. enviar una señal de TERM para terminar los procesos (si no terminan,
enviar KILL)
3. pasar a modo monousuario
4. realizar un sync para vaciar los buers al disco
El comando shutdown realiza todos estos pasos
Formas de apagar el sistema
Además del botón de apagado (poco recomendable) hay varias formas de
apagar el sistema:
Enviar una señal TERM a init
no siempre funciona
conveniente hacer varios sync antes
Cambiar al runlevel 0 (apagar) o 6 (reiniciar)
Usar el comando shutdown
 forma más recomendable
Usar otros comandos como halt, reboot o poweroff
Comando shutdown
Permite apagar el sistema de forma segura
Formato
shutdown [opciones] tiempo [aviso ]
espera el tiempo indicado antes de apagar o reiniciar
puede indicarse una hora (formato hh:mm) o dentro de tantos
minutos (formato +m)
si se indica now se apaga en el momento (equivale a +0)
envía un mensaje de aviso a los usuarios
 si no se indica, envía uno por defecto
5 minutos antes de apagar, shutdown crea el fichero /etc/nologin e
impide que se conecten más usuarios
Opciones:
-h apaga el sistema (halt)
-r reinicia el sistema
-c cancelar un shutdown pendiente
-f dependiendo del sistema
evita el fsck al reiniciar (fastboot), o
inicia el modo monousuario
Ejemplo: apaga el sistema en 10 minutos
# shutdown -h +10 .El sistema se va a apagar"
Ejemplo: reinicia el sistema de inmediato
# shutdown -r now
4.1. El kernel de Linux
Algunas características
Kernel de tipo monolítico, con soporte para carga/descarga de porciones
del kernel (módulos) bajo demanda
Soporte para aplicaciones multithread
Soporte para multiprocesamienrto simétrico (SMP)
Soporte de múltiples sistemas de cheros
Distribuido bajo licencia GPL
Versiones del kernel
Cada versión del kernel se identica con tres o cuatro números, p.e. 2.4.27
El primer número representa la versión (actualmente la 2)
El segundo representa la revisión principal (major revision); cambia
cuando se introducen nuevos drivers o características al kernel
 si es un número impar, se trata de un kernel experimental (no
recomendado para instalar)
 si es par, es un kernel estable o de producción (revisión actual 2.6)
 el tercer número indica la revisión secundaria (minor revision); la
última versión, a 26/11/2007 es la 2.6.23
 el cuarto número (opcional) indica modicaciones pequeñas en el
kernel (a fecha 26/11/2007 la última versión estable era la 2.6.23.9)
Las diferentes distribuciones pueden introducir otra numeración para
indicar parches, p.e. 2.6.22-10
Podemos obtener la última versión en www.kernel.org
Para ver la versión instalada en el sistema usar el comando uname
Actualización del kernel
La mayoría de las distribuciones incluyen versiones compiladas del kernel
¿Para qué compilarlo entonces?
tenemos un dispositivo o queremos dar soporte a un servicio no
soportado por el kernel oficial
algunas aplicaciones que queremos usar requieren soporte de un
kernel nuevo o de alguna de sus prestaciones, que no aparecen
activadas en el kernel precompilado
queremos optimizar las prestaciones de nuestros dispositivos
Si lo único que queremos es actualizar a una versión superior del kernel,
podemos bajar un paquete ya compilado:
en Debian instalar kernel-image- o
linux-image-
este paquete nos instala la versión comprimida del kernel en /boot/vmlinuz-
y los módulos en
/lib/modules/
además modica el GRUB (o LILO) para permitir cargar el nuevo
kernel
Para compilar el kernel, tenemos que obtener los fuentes
en Debian, paquetes kernel-source- o
linux-source-
Este paquete instala las fuentes comprimidas en /usr/src
1. descomprimirlo con
tar xvjf kernel-source-.tar.bz2
2. crear un enlace simbólico de nombre linux en /usr/src
Actualización mediante parches
Podemos actualizar el kernel mediante parches incrementales
1. Descargar los parches para la nueva versión del kernel
si queremos pasar de la versión 2.4.15 a la 2.4.17 hay que aplicar
parches para pasar a la 2.4.16 y luego a la 2.4.17
2. Aplicarlos con el comando patch
# zcat parche | patch -p0
Los parches también sirven para añadir funcionalidades (p.e. nuevos drivers)
no incluidos en el kernel oficial
después de instalar el parche tenemos que recompilar el kernel
Comandos patch y diff
Permiten crear y aplicar parches
diff muestra la diferencia entre cheros de texto, línea a línea
el formato de la salida permite usarlo para crear parches
patch aplica un fichero de diferencias, creado con diff a un original
Ejemplo:
[patch]$ cat old/file.txt
Este es un fichero simple
[patch]$ cat new/file.txt
Este es un fichero algo más complicado
[patch]$ diff -uNr old new > parche
[patch]$ cat parche
diff -uNr old/file.txt new/file.txt
--- old/file.txt 2005-10-10 18:22:51.000000000 +0200
+++ new/file.txt 2005-10-10 18:19:41.000000000 +0200
@@ -1,2 +1,2 @@
Este es un
-fichero simple
+fichero algo más complicado
[patch]$ cd old
[old]$ cat ../parche | patch -p1
patching file file.txt
[old]$ cat file.txt
Este es un
fichero algo más complicado
la opción -p1 de patch quiere decir: Elimina la parte del path en el
nombre hasta la primera barra e intenta aplicar el parche con el nombre
reducido de esa forma
Configuración del kernel
Dentro del directorio /usr/src/linux accedemos podemos acceder al menú
de conguración de distintas formas
1. make config interfaz básica en modo texto; complejo y poco recomendable
2. make menuconfig interfaz de menú para consola, fácil de usar (necesita
instalar los ficheros de desarrollo de la librería ncurses, en Debian
paquete libncurses5-dev)
3. make xconfig interfaz gráco para entorno de ventanas; basado en la
librería QT (en Debian, instalar paquete libqt3-dev)
4. make gconfig otro interfaz gráco para entorno de ventanas; basado
en la librería GTK (en Debian, instalar paquete libglade2-dev,
libgtk2.0-dev)
Dentro de los menús se pueden congurar las opciones que incluirá el nuevo
kernel
Algunas opciones pueden ser compiladas directamente en el kernel o
como módulos que se cargarán o no cuando el kernel esté en funcionamiento
y sean necesarios
Otras opciones activan la disponibilidad de opciones nuevas al ser marcadas
Si deseamos utilizar alguna conguración anterior copiamos su chero de
conguración, normalmente /boot/config- al chero .config
dentro del directorio del kernel
make oldconfig usa la conguración del .config
make oldconfig xconfig parte de la conguración vieja para modicarla
Más detalles sobre la conguración en el Kernel HOWTO
Compilación del kernel
Varios pasos:
1. make dep (sólo kernels anteriores a 2.6) construye las dependencias
para realizar la compilación real
2. make bzImage (o make para kernels 2.6) compila y crea una imagen
comprimida
3. make modules (sólo kernels anteriores a 2.6) compila las partes que han
sido marcadas como módulos
4. make modules_install instala los módulos del kernel en el sistema
normalmente se instalan en /lib/modules/ /
Para kernels 2.6 make reemplaza a make dep, make bzImage y make modules
La compilación puede fallar por:
Problemas con la versión usada de gcc
Por errores al configurar el kernel, algunas de sus dependencias no se
cumplen (posible bug de la herramienta de conguración, o se terminó
mal. . . )
La versión bajada del kernel tiene errores (poco probable)
Si falla y se subsana el error, es recomendable limpiar el kernel antes de volver
a compilar:
make clean borra cheros objeto, cheros intermedios y las imágenes
generadas
make mrproper deja el kernel en el estado en el que estaba cuando se
descomprimió (borra también la conguración realizada)
Para más detalles leer los cheros README de la documentación del kernel
(directorio /usr/share/doc/)
Instalación del kernel
Ya sólo resta crear el RAMDisk inicial e instalar el kernel:
1. Crear la imagen initrd
RAM disk que contiene los módulos necesarios para iniciar el sistema
y montar la partición raíz, y cargar el resto de módulos
sólo necesario si los controladores de disco se han compilado como
módulos
para crearlo se usa:
update-initramfs -c -k kernel-version
el formato puede variar según la distribución8
2. Instalar el nuevo kernel
a) Copiar los ficheros bzImage y System.map al directorio de arranque
del kernel (/boot)
Renombrar bzImage a vmlinuz- y System.map a
System.map-
b) Configurar GRUB o LILO para poder cargar la nueva imagen
IMPORTANTE: por si algo falla, permitir la posibilidad de que se cargue la
imagen anterior
Instalar el kernel en Debian
Debian tiene una utilidad para simplificar el proceso de compilar e instalar
el kernel:
make-kpkg (paquete kernel-package) compila y crea un paquete Debian
con el kernel compilado
Ejemplo:
make-kpkg --revision=custom.1.0 kernel_image
el paquete creado se instala con dpkg -i
si es necesario, crear el initrd y modicar GRUB o LILO para que
cargen este initrd9
4.2. Módulos
Cuando se solicita la ejecución de una función no disponible en el kernel
residente, el módulo correspondiente se carga dinámicamente en memoria
Después de un período especíco de inactividad, el módulo se puede
quitar de la memoria
El mecanismo que posibilita la carga dinámica de los módulos es un
subproceso del kernel denominado kmod
No todos los módulos se cargan automáticamente:
 algunas aplicaciones cargan los módulos que necesitan en el arranque
(ficheros /etc/init.d)
 se pueden cargar/descargar módulos a mano usando comandos
como modprobe
 en algunas distribuciones (Debian), es posible cargar módulos al
inicio indicándolo en el chero /etc/modules
Los cheros de módulos se almacenan, normalmente, en el directorio /lib/modules/ /modules.dep
 si modicamos los módulos, se debe ejecutar depmod para actualizar
el fichero de dependencias
Comando modinfo permite obtener información sobre los módulos
Ejemplo:
# modinfo ext3
filename: /lib/modules/2.6.10-1-686-smp/kernel/fs/ext3/ext3.ko
author: Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore description: Second Extended Filesystem with journaling extensions
license: GPL
vermagic: 2.6.10-1-686-smp SMP preempt 686 gcc-3.3
depends: mbcache,jbd
Ficheros de conguración
Los cheros de conguración que usa modprobe dependen de los paquetes de
administración de módulos que tengamos instalados
Kernel 2.4, paquete modutils !
Fichero /etc/modules.conf + directorio /etc/modutils/
Kernel 2.6, paquete module-init-tools !
fichero /etc/modprobe.conf + directorio /etc/modprobe.d/
En estos cheros se especican alias para los módulos, opciones para los
módulos, acciones a realizar en la carga y descarga del módulo, etc.
ver man modprobe.conf para más información
4.3. Dispositivos
Dispositivo (device) cualquier tipo de sistema físico o lógico con el que
interactúa el kernel
Dispositivo físico: p.e. discos, dispositivos serie, CD, etc.
Dispositivo lógico: p.e. terminales virtuales, memoria, puertos, etc.
Driver de dispositivos parte del kernel que se encarga de interactuar con
el dispositivo
puede estar compilado en el kernel o puede cargarse como un mó-
dulo
el fichero /proc/devices lista los drivers cargados en el kernel
Ficheros de dispositivos ficheros especiales que permiten a las aplicaciones
interactuar con los dispositivos mediante rutinas estándar de manejo
de ficheros (open, read, etc.)
están localizados en el directorio /dev
Tipos de dispositivos
Tenemos distintos tipos de dispositivos
Dispositivos terminales para comunicarnos con el sistema
Terminales virtuales: dispositivos /dev/ttyX con X de 0 a 63
asociados a las distintas consolas de texto
Pseudoterminales: pares de archivos de dispositivo que sirven como
canal de comunicación entre procesos
 No controlan ningún dispositivo físico real
 Lo que se escriba en cualquiera de los dos será recibido por el otro
Se utilizan en conexiones remotas y en terminales del entorno de
ventanas
Los archivos del par se llaman maestro y esclavo
 Notación BSD: maestros /dev/ptyXX, esclavos /dev/ttyXX
 Notación Unix98: maestro /dev/ptmx (sólo uno), esclavos /dev/pts/X
(son creados automáticamente por un sistema de archivos virtual,
devpts)
Dispositivos terminales serie: dispositivos /dev/ttySX
dispositivos asociados a los distintos puertos serie
Comandos relacionados:
tty muestra el terminal en el que estamos conectados
 stty permite cambiar características del terminal
Ejemplos:
$ stty -a # muestra las características
actuales
$ stty werase ^? # cambia el backspace
para que borre palabras
Otros dispositivos
Discos
IDE: /dev/hda, /dev/hdb, /dev/hdc, /dev/hdd
SCSI: /dev/sdX con X siendo a, b, . . .
 Floppy: /dev/fdX (pueden llevar un código indicando el tipo de
disco y capacidad)
 Particiones: el dispositivo seguido de un número
Dispositivos de loop: /dev/loop0, /dev/loop1,. . .
permiten usar un fichero como si de un dispositivo de disco se
tratase: los datos se escriben y se leen en el fichero, en vez de en
pistas y sectores del disco real
Ejemplo: monta una imagen de un CD
# mount -o loop,ro -t iso9660 imagen.iso /mnt/iso
es posible incluso crear ficheros encriptados que nos monten una
partición del disco
 ver los manuales de mount y losetup para más información
Otros:
dispositivos de memoria: /dev/mem, /dev/kmem, etc.
dispositivos de audio: /dev/audio, /dev/mixer, etc.
dispositivo /dev/zero: generador de valores nulos
dispositivo /dev/urandom: generador de valores aleatorios
 estos dos últimos se suelen usar con el comando dd para crear
ficheros con valores iniciales nulos o aleatorios
Ejemplo: crea un fichero de 1K inicializado a valores aleatorios
$ dd if=/dev/urandom of=/tmp/fich bs=1 count=1K
Una lista de los dispositivos puede encontrase en:
la página www.lanana.org/docs/device-list/
el fichero Documentation/devices.txt en los fuentes de Linux
Características de los cheros de dispositivos
Un fichero de dispositivos es diferente a un fichero normal
Ejemplo
$ ls -l /dev/hda
brw-rw---- 1 root disk 3, 0 2004-09-18 13:51 /dev/hda
La primera letra (c o b) indica dispositivo de caracteres o de bloques
caracteres: lee o escribe byte a byte
bloques: lee o escribe bloque a bloque (bloques usualmente de 512
bytes)
Los dos números antes de la feche representan los números principal
(major) y secundario (minor) que identifican al dispositivo
Major number: identica el driver que maneja el dispositivo
Minor number: permite al driver identicar un dispositivo concreto
entre varios controlados por el mismo driver
Ejemplo:
$ ls -l /dev/hda /dev/hdb
brw-rw---- 1 root disk 3, 0 2004-09-18 13:51 /dev/hda
brw-rw---- 1 root disk 3, 64 2004-09-18 13:51 /dev/hdb
Creación de cheros de dispositivos
Para crear un fichero de dispositivos se usa el comando mknod
Comando mknod: crea cheros de caracteres o bloques (también puede
crear tuberías)
Formato:
mknod [opciones ] nombre tipo [major minor ]
Ejemplo:
# mknod /dev/hda b 3 0
El script MAKEDEV permite crear dispositivos de una forma fácil (sin necesidad
de conocer los números principal y secundario)
Ejemplo:
cd /dev; ./MAKEDEV -v hda
Gestión dinámica de dispositivos
Los UNIX tradicionales mantienen en /dev una lista estática de posibles
dispositivos
la mayoría de estos dispositivos no existen realmente en el sistema
esto puede suponer un problema para dispositivos que se enchufan en
caliente
En Linux existen herramientas para manejar estos dispositivos de forma dinámica:
devfs filesystem especial presente en varios UNIX, como FreeBSD y Linux
controla la creación, borrado y gestión de permisos de los cheros
de dispositivosel Linux 2.6 se ha abandonado en favor de udev
udev reemplazo de devfs en Linux 2.6, para la gestión de cheros de dispositivos
udev tiene un conjunto de ventajas respecto a devfs
se ejecuta en el espacio de usuario, y no en el del kernel, como
devfs
permite personalizar el nombre de dispositivo
esta última característica permite resolver el problema del nombre
asignado a dispositivos, que se enchufan en caliente (que puede
variar el función del orden en que se conectan)
Para más información sobre el uso de udev ver el siguiente artículo en Badopi
o este otro en Bulma